diff --git a/ESP-IDF_Robot/tutorial/.tutorial/bin/markdown-it b/ESP-IDF_Robot/tutorial/.tutorial/bin/markdown-it new file mode 100755 index 000000000..a153d7cca --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/bin/markdown-it @@ -0,0 +1,8 @@ +#!/home/alex/MyProjects/ESP-Nodes/ESP-IDF_Robot/tutorial/.tutorial/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from markdown_it.cli.parse import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-anchors b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-anchors new file mode 100755 index 000000000..b7ca26f1e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-anchors @@ -0,0 +1,8 @@ +#!/home/alex/MyProjects/ESP-Nodes/ESP-IDF_Robot/tutorial/.tutorial/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from myst_parser.cli import print_anchors +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(print_anchors()) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-demo b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-demo new file mode 100755 index 000000000..28afcbe1f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-demo @@ -0,0 +1,8 @@ +#!/home/alex/MyProjects/ESP-Nodes/ESP-IDF_Robot/tutorial/.tutorial/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from myst_parser.parsers.docutils_ import cli_html5_demo +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cli_html5_demo()) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-html b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-html new file mode 100755 index 000000000..2ab32c352 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-html @@ -0,0 +1,8 @@ +#!/home/alex/MyProjects/ESP-Nodes/ESP-IDF_Robot/tutorial/.tutorial/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from myst_parser.parsers.docutils_ import cli_html +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cli_html()) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-html5 b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-html5 new file mode 100755 index 000000000..7227b6044 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-html5 @@ -0,0 +1,8 @@ +#!/home/alex/MyProjects/ESP-Nodes/ESP-IDF_Robot/tutorial/.tutorial/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from myst_parser.parsers.docutils_ import cli_html5 +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cli_html5()) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-latex b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-latex new file mode 100755 index 000000000..1eb0ee9f7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-latex @@ -0,0 +1,8 @@ +#!/home/alex/MyProjects/ESP-Nodes/ESP-IDF_Robot/tutorial/.tutorial/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from myst_parser.parsers.docutils_ import cli_latex +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cli_latex()) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-pseudoxml b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-pseudoxml new file mode 100755 index 000000000..bb9c437d5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-pseudoxml @@ -0,0 +1,8 @@ +#!/home/alex/MyProjects/ESP-Nodes/ESP-IDF_Robot/tutorial/.tutorial/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from myst_parser.parsers.docutils_ import cli_pseudoxml +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cli_pseudoxml()) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-xml b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-xml new file mode 100755 index 000000000..35f0b701a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-docutils-xml @@ -0,0 +1,8 @@ +#!/home/alex/MyProjects/ESP-Nodes/ESP-IDF_Robot/tutorial/.tutorial/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from myst_parser.parsers.docutils_ import cli_xml +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cli_xml()) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-inv b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-inv new file mode 100755 index 000000000..75dbe6267 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/bin/myst-inv @@ -0,0 +1,8 @@ +#!/home/alex/MyProjects/ESP-Nodes/ESP-IDF_Robot/tutorial/.tutorial/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from myst_parser.inventory import inventory_cli +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(inventory_cli()) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/bin/rinoh b/ESP-IDF_Robot/tutorial/.tutorial/bin/rinoh new file mode 100755 index 000000000..accd2c4ee --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/bin/rinoh @@ -0,0 +1,8 @@ +#!/home/alex/MyProjects/ESP-Nodes/ESP-IDF_Robot/tutorial/.tutorial/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from rinoh.__main__ import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/LICENSE new file mode 100644 index 000000000..2f1b8e15e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2017-2021 Ingy döt Net +Copyright (c) 2006-2016 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/METADATA new file mode 100644 index 000000000..db029b770 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/METADATA @@ -0,0 +1,46 @@ +Metadata-Version: 2.1 +Name: PyYAML +Version: 6.0.2 +Summary: YAML parser and emitter for Python +Home-page: https://pyyaml.org/ +Download-URL: https://pypi.org/project/PyYAML/ +Author: Kirill Simonov +Author-email: xi@resolvent.net +License: MIT +Project-URL: Bug Tracker, https://github.com/yaml/pyyaml/issues +Project-URL: CI, https://github.com/yaml/pyyaml/actions +Project-URL: Documentation, https://pyyaml.org/wiki/PyYAMLDocumentation +Project-URL: Mailing lists, http://lists.sourceforge.net/lists/listinfo/yaml-core +Project-URL: Source Code, https://github.com/yaml/pyyaml +Platform: Any +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Cython +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup +Requires-Python: >=3.8 +License-File: LICENSE + +YAML is a data serialization format designed for human readability +and interaction with scripting languages. PyYAML is a YAML parser +and emitter for Python. + +PyYAML features a complete YAML 1.1 parser, Unicode support, pickle +support, capable extension API, and sensible error messages. PyYAML +supports standard YAML tags and provides Python-specific tags that +allow to represent an arbitrary Python object. + +PyYAML is applicable for a broad range of tasks from complex +configuration files to object serialization and persistence. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/RECORD new file mode 100644 index 000000000..b063dffe7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/RECORD @@ -0,0 +1,43 @@ +PyYAML-6.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyYAML-6.0.2.dist-info/LICENSE,sha256=jTko-dxEkP1jVwfLiOsmvXZBAqcoKVQwfT5RZ6V36KQ,1101 +PyYAML-6.0.2.dist-info/METADATA,sha256=9-odFB5seu4pGPcEv7E8iyxNF51_uKnaNGjLAhz2lto,2060 +PyYAML-6.0.2.dist-info/RECORD,, +PyYAML-6.0.2.dist-info/WHEEL,sha256=1pP4yhrbipRtdbm4Rbg3aoTjzc7pDhpHKO0CEY24CNM,152 +PyYAML-6.0.2.dist-info/top_level.txt,sha256=rpj0IVMTisAjh_1vG3Ccf9v5jpCQwAz6cD1IVU5ZdhQ,11 +_yaml/__init__.py,sha256=04Ae_5osxahpJHa3XBZUAf4wi6XX32gR8D6X6p64GEA,1402 +_yaml/__pycache__/__init__.cpython-312.pyc,, +yaml/__init__.py,sha256=N35S01HMesFTe0aRRMWkPj0Pa8IEbHpE9FK7cr5Bdtw,12311 +yaml/__pycache__/__init__.cpython-312.pyc,, +yaml/__pycache__/composer.cpython-312.pyc,, +yaml/__pycache__/constructor.cpython-312.pyc,, +yaml/__pycache__/cyaml.cpython-312.pyc,, +yaml/__pycache__/dumper.cpython-312.pyc,, +yaml/__pycache__/emitter.cpython-312.pyc,, +yaml/__pycache__/error.cpython-312.pyc,, +yaml/__pycache__/events.cpython-312.pyc,, +yaml/__pycache__/loader.cpython-312.pyc,, +yaml/__pycache__/nodes.cpython-312.pyc,, +yaml/__pycache__/parser.cpython-312.pyc,, +yaml/__pycache__/reader.cpython-312.pyc,, +yaml/__pycache__/representer.cpython-312.pyc,, +yaml/__pycache__/resolver.cpython-312.pyc,, +yaml/__pycache__/scanner.cpython-312.pyc,, +yaml/__pycache__/serializer.cpython-312.pyc,, +yaml/__pycache__/tokens.cpython-312.pyc,, +yaml/_yaml.cpython-312-x86_64-linux-gnu.so,sha256=PJFgxnc0f5Dyde6WKmBm6fZWapawmWl7aBRruXjRA80,2481784 +yaml/composer.py,sha256=_Ko30Wr6eDWUeUpauUGT3Lcg9QPBnOPVlTnIMRGJ9FM,4883 +yaml/constructor.py,sha256=kNgkfaeLUkwQYY_Q6Ff1Tz2XVw_pG1xVE9Ak7z-viLA,28639 +yaml/cyaml.py,sha256=6ZrAG9fAYvdVe2FK_w0hmXoG7ZYsoYUwapG8CiC72H0,3851 +yaml/dumper.py,sha256=PLctZlYwZLp7XmeUdwRuv4nYOZ2UBnDIUy8-lKfLF-o,2837 +yaml/emitter.py,sha256=jghtaU7eFwg31bG0B7RZea_29Adi9CKmXq_QjgQpCkQ,43006 +yaml/error.py,sha256=Ah9z-toHJUbE9j-M8YpxgSRM5CgLCcwVzJgLLRF2Fxo,2533 +yaml/events.py,sha256=50_TksgQiE4up-lKo_V-nBy-tAIxkIPQxY5qDhKCeHw,2445 +yaml/loader.py,sha256=UVa-zIqmkFSCIYq_PgSGm4NSJttHY2Rf_zQ4_b1fHN0,2061 +yaml/nodes.py,sha256=gPKNj8pKCdh2d4gr3gIYINnPOaOxGhJAUiYhGRnPE84,1440 +yaml/parser.py,sha256=ilWp5vvgoHFGzvOZDItFoGjD6D42nhlZrZyjAwa0oJo,25495 +yaml/reader.py,sha256=0dmzirOiDG4Xo41RnuQS7K9rkY3xjHiVasfDMNTqCNw,6794 +yaml/representer.py,sha256=IuWP-cAW9sHKEnS0gCqSa894k1Bg4cgTxaDwIcbRQ-Y,14190 +yaml/resolver.py,sha256=9L-VYfm4mWHxUD1Vg4X7rjDRK_7VZd6b92wzq7Y2IKY,9004 +yaml/scanner.py,sha256=YEM3iLZSaQwXcQRg2l2R4MdT0zGP2F9eHkKGKnHyWQY,51279 +yaml/serializer.py,sha256=ChuFgmhU01hj4xgI8GaKv6vfM2Bujwa9i7d2FAHj7cA,4165 +yaml/tokens.py,sha256=lTQIzSVw8Mg9wv459-TjiOQe6wVziqaRlqX2_89rp54,2573 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/WHEEL new file mode 100644 index 000000000..56616a86d --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.44.0) +Root-Is-Purelib: false +Tag: cp312-cp312-manylinux_2_17_x86_64 +Tag: cp312-cp312-manylinux2014_x86_64 + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/top_level.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/top_level.txt new file mode 100644 index 000000000..e6475e911 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/PyYAML-6.0.2.dist-info/top_level.txt @@ -0,0 +1,2 @@ +_yaml +yaml diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/__pycache__/appdirs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/__pycache__/appdirs.cpython-312.pyc new file mode 100644 index 000000000..b30715e1f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/__pycache__/appdirs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/_yaml/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/_yaml/__init__.py new file mode 100644 index 000000000..7baa8c4b6 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/_yaml/__init__.py @@ -0,0 +1,33 @@ +# This is a stub package designed to roughly emulate the _yaml +# extension module, which previously existed as a standalone module +# and has been moved into the `yaml` package namespace. +# It does not perfectly mimic its old counterpart, but should get +# close enough for anyone who's relying on it even when they shouldn't. +import yaml + +# in some circumstances, the yaml module we imoprted may be from a different version, so we need +# to tread carefully when poking at it here (it may not have the attributes we expect) +if not getattr(yaml, '__with_libyaml__', False): + from sys import version_info + + exc = ModuleNotFoundError if version_info >= (3, 6) else ImportError + raise exc("No module named '_yaml'") +else: + from yaml._yaml import * + import warnings + warnings.warn( + 'The _yaml extension module is now located at yaml._yaml' + ' and its location is subject to change. To use the' + ' LibYAML-based parser and emitter, import from `yaml`:' + ' `from yaml import CLoader as Loader, CDumper as Dumper`.', + DeprecationWarning + ) + del warnings + # Don't `del yaml` here because yaml is actually an existing + # namespace member of _yaml. + +__name__ = '_yaml' +# If the module is top-level (i.e. not a part of any specific package) +# then the attribute should be set to ''. +# https://docs.python.org/3.8/library/types.html +__package__ = '' diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/_yaml/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/_yaml/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..63bbeb43f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/_yaml/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/LICENSE.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/LICENSE.txt new file mode 100644 index 000000000..107c61405 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/LICENSE.txt @@ -0,0 +1,23 @@ +# This is the MIT license + +Copyright (c) 2010 ActiveState Software Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/METADATA new file mode 100644 index 000000000..f95073104 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/METADATA @@ -0,0 +1,264 @@ +Metadata-Version: 2.1 +Name: appdirs +Version: 1.4.4 +Summary: A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir". +Home-page: http://github.com/ActiveState/appdirs +Author: Trent Mick +Author-email: trentm@gmail.com +Maintainer: Jeff Rouse +Maintainer-email: jr@its.to +License: MIT +Keywords: application directory log cache user +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Topic :: Software Development :: Libraries :: Python Modules + + +.. image:: https://secure.travis-ci.org/ActiveState/appdirs.png + :target: http://travis-ci.org/ActiveState/appdirs + +the problem +=========== + +What directory should your app use for storing user data? If running on Mac OS X, you +should use:: + + ~/Library/Application Support/ + +If on Windows (at least English Win XP) that should be:: + + C:\Documents and Settings\\Application Data\Local Settings\\ + +or possibly:: + + C:\Documents and Settings\\Application Data\\ + +for `roaming profiles `_ but that is another story. + +On Linux (and other Unices) the dir, according to the `XDG +spec `_, is:: + + ~/.local/share/ + + +``appdirs`` to the rescue +========================= + +This kind of thing is what the ``appdirs`` module is for. ``appdirs`` will +help you choose an appropriate: + +- user data dir (``user_data_dir``) +- user config dir (``user_config_dir``) +- user cache dir (``user_cache_dir``) +- site data dir (``site_data_dir``) +- site config dir (``site_config_dir``) +- user log dir (``user_log_dir``) + +and also: + +- is a single module so other Python packages can include their own private copy +- is slightly opinionated on the directory names used. Look for "OPINION" in + documentation and code for when an opinion is being applied. + + +some example output +=================== + +On Mac OS X:: + + >>> from appdirs import * + >>> appname = "SuperApp" + >>> appauthor = "Acme" + >>> user_data_dir(appname, appauthor) + '/Users/trentm/Library/Application Support/SuperApp' + >>> site_data_dir(appname, appauthor) + '/Library/Application Support/SuperApp' + >>> user_cache_dir(appname, appauthor) + '/Users/trentm/Library/Caches/SuperApp' + >>> user_log_dir(appname, appauthor) + '/Users/trentm/Library/Logs/SuperApp' + +On Windows 7:: + + >>> from appdirs import * + >>> appname = "SuperApp" + >>> appauthor = "Acme" + >>> user_data_dir(appname, appauthor) + 'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp' + >>> user_data_dir(appname, appauthor, roaming=True) + 'C:\\Users\\trentm\\AppData\\Roaming\\Acme\\SuperApp' + >>> user_cache_dir(appname, appauthor) + 'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp\\Cache' + >>> user_log_dir(appname, appauthor) + 'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp\\Logs' + +On Linux:: + + >>> from appdirs import * + >>> appname = "SuperApp" + >>> appauthor = "Acme" + >>> user_data_dir(appname, appauthor) + '/home/trentm/.local/share/SuperApp + >>> site_data_dir(appname, appauthor) + '/usr/local/share/SuperApp' + >>> site_data_dir(appname, appauthor, multipath=True) + '/usr/local/share/SuperApp:/usr/share/SuperApp' + >>> user_cache_dir(appname, appauthor) + '/home/trentm/.cache/SuperApp' + >>> user_log_dir(appname, appauthor) + '/home/trentm/.cache/SuperApp/log' + >>> user_config_dir(appname) + '/home/trentm/.config/SuperApp' + >>> site_config_dir(appname) + '/etc/xdg/SuperApp' + >>> os.environ['XDG_CONFIG_DIRS'] = '/etc:/usr/local/etc' + >>> site_config_dir(appname, multipath=True) + '/etc/SuperApp:/usr/local/etc/SuperApp' + + +``AppDirs`` for convenience +=========================== + +:: + + >>> from appdirs import AppDirs + >>> dirs = AppDirs("SuperApp", "Acme") + >>> dirs.user_data_dir + '/Users/trentm/Library/Application Support/SuperApp' + >>> dirs.site_data_dir + '/Library/Application Support/SuperApp' + >>> dirs.user_cache_dir + '/Users/trentm/Library/Caches/SuperApp' + >>> dirs.user_log_dir + '/Users/trentm/Library/Logs/SuperApp' + + + +Per-version isolation +===================== + +If you have multiple versions of your app in use that you want to be +able to run side-by-side, then you may want version-isolation for these +dirs:: + + >>> from appdirs import AppDirs + >>> dirs = AppDirs("SuperApp", "Acme", version="1.0") + >>> dirs.user_data_dir + '/Users/trentm/Library/Application Support/SuperApp/1.0' + >>> dirs.site_data_dir + '/Library/Application Support/SuperApp/1.0' + >>> dirs.user_cache_dir + '/Users/trentm/Library/Caches/SuperApp/1.0' + >>> dirs.user_log_dir + '/Users/trentm/Library/Logs/SuperApp/1.0' + + + +appdirs Changelog +================= + +appdirs 1.4.4 +------------- +- [PR #92] Don't import appdirs from setup.py + +Project officially classified as Stable which is important +for inclusion in other distros such as ActivePython. + +First of several incremental releases to catch up on maintenance. + +appdirs 1.4.3 +------------- +- [PR #76] Python 3.6 invalid escape sequence deprecation fixes +- Fix for Python 3.6 support + +appdirs 1.4.2 +------------- +- [PR #84] Allow installing without setuptools +- [PR #86] Fix string delimiters in setup.py description +- Add Python 3.6 support + +appdirs 1.4.1 +------------- +- [issue #38] Fix _winreg import on Windows Py3 +- [issue #55] Make appname optional + +appdirs 1.4.0 +------------- +- [PR #42] AppAuthor is now optional on Windows +- [issue 41] Support Jython on Windows, Mac, and Unix-like platforms. Windows + support requires `JNA `_. +- [PR #44] Fix incorrect behaviour of the site_config_dir method + +appdirs 1.3.0 +------------- +- [Unix, issue 16] Conform to XDG standard, instead of breaking it for + everybody +- [Unix] Removes gratuitous case mangling of the case, since \*nix-es are + usually case sensitive, so mangling is not wise +- [Unix] Fixes the utterly wrong behaviour in ``site_data_dir``, return result + based on XDG_DATA_DIRS and make room for respecting the standard which + specifies XDG_DATA_DIRS is a multiple-value variable +- [Issue 6] Add ``*_config_dir`` which are distinct on nix-es, according to + XDG specs; on Windows and Mac return the corresponding ``*_data_dir`` + +appdirs 1.2.0 +------------- + +- [Unix] Put ``user_log_dir`` under the *cache* dir on Unix. Seems to be more + typical. +- [issue 9] Make ``unicode`` work on py3k. + +appdirs 1.1.0 +------------- + +- [issue 4] Add ``AppDirs.user_log_dir``. +- [Unix, issue 2, issue 7] appdirs now conforms to `XDG base directory spec + `_. +- [Mac, issue 5] Fix ``site_data_dir()`` on Mac. +- [Mac] Drop use of 'Carbon' module in favour of hardcoded paths; supports + Python3 now. +- [Windows] Append "Cache" to ``user_cache_dir`` on Windows by default. Use + ``opinion=False`` option to disable this. +- Add ``appdirs.AppDirs`` convenience class. Usage: + + >>> dirs = AppDirs("SuperApp", "Acme", version="1.0") + >>> dirs.user_data_dir + '/Users/trentm/Library/Application Support/SuperApp/1.0' + +- [Windows] Cherry-pick Komodo's change to downgrade paths to the Windows short + paths if there are high bit chars. +- [Linux] Change default ``user_cache_dir()`` on Linux to be singular, e.g. + "~/.superapp/cache". +- [Windows] Add ``roaming`` option to ``user_data_dir()`` (for use on Windows only) + and change the default ``user_data_dir`` behaviour to use a *non*-roaming + profile dir (``CSIDL_LOCAL_APPDATA`` instead of ``CSIDL_APPDATA``). Why? Because + a large roaming profile can cause login speed issues. The "only syncs on + logout" behaviour can cause surprises in appdata info. + + +appdirs 1.0.1 (never released) +------------------------------ + +Started this changelog 27 July 2010. Before that this module originated in the +`Komodo `_ product as ``applib.py`` and then +as `applib/location.py +`_ (used by +`PyPM `_ in `ActivePython +`_). This is basically a fork of +applib.py 1.0.1 and applib/location.py 1.0.1. + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/RECORD new file mode 100644 index 000000000..7116fcc43 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/RECORD @@ -0,0 +1,8 @@ +__pycache__/appdirs.cpython-312.pyc,, +appdirs-1.4.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +appdirs-1.4.4.dist-info/LICENSE.txt,sha256=Nt200KdFqTqyAyA9cZCBSxuJcn0lTK_0jHp6-71HAAs,1097 +appdirs-1.4.4.dist-info/METADATA,sha256=k5TVfXMNKGHTfp2wm6EJKTuGwGNuoQR5TqQgH8iwG8M,8981 +appdirs-1.4.4.dist-info/RECORD,, +appdirs-1.4.4.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110 +appdirs-1.4.4.dist-info/top_level.txt,sha256=nKncE8CUqZERJ6VuQWL4_bkunSPDNfn7KZqb4Tr5YEM,8 +appdirs.py,sha256=g99s2sXhnvTEm79oj4bWI0Toapc-_SmKKNXvOXHkVic,24720 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/WHEEL new file mode 100644 index 000000000..ef99c6cf3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.34.2) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/top_level.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/top_level.txt new file mode 100644 index 000000000..d64bc321a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs-1.4.4.dist-info/top_level.txt @@ -0,0 +1 @@ +appdirs diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs.py new file mode 100644 index 000000000..2acd1debe --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/appdirs.py @@ -0,0 +1,608 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2005-2010 ActiveState Software Inc. +# Copyright (c) 2013 Eddy Petrișor + +"""Utilities for determining application-specific dirs. + +See for details and usage. +""" +# Dev Notes: +# - MSDN on where to store app data files: +# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 +# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html +# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + +__version__ = "1.4.4" +__version_info__ = tuple(int(segment) for segment in __version__.split(".")) + + +import sys +import os + +PY3 = sys.version_info[0] == 3 + +if PY3: + unicode = str + +if sys.platform.startswith('java'): + import platform + os_name = platform.java_ver()[3][0] + if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. + system = 'win32' + elif os_name.startswith('Mac'): # "Mac OS X", etc. + system = 'darwin' + else: # "Linux", "SunOS", "FreeBSD", etc. + # Setting this to "linux2" is not ideal, but only Windows or Mac + # are actually checked for and the rest of the module expects + # *sys.platform* style strings. + system = 'linux2' +else: + system = sys.platform + + + +def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + Mac OS X: ~/Library/Application Support/ + Unix: ~/.local/share/ # or in $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\\Application Data\\ + Win XP (roaming): C:\Documents and Settings\\Local Settings\Application Data\\ + Win 7 (not roaming): C:\Users\\AppData\Local\\ + Win 7 (roaming): C:\Users\\AppData\Roaming\\ + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/". + """ + if system == "win32": + if appauthor is None: + appauthor = appname + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.normpath(_get_win_folder(const)) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('~/Library/Application Support/') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of data dirs should be + returned. By default, the first item from XDG_DATA_DIRS is + returned, or '/usr/local/share/', + if XDG_DATA_DIRS is not set + + Typical site data directories are: + Mac OS X: /Library/Application Support/ + Unix: /usr/local/share/ or /usr/share/ + Win XP: C:\Documents and Settings\All Users\Application Data\\ + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + Win 7: C:\ProgramData\\ # Hidden, but writeable on Win 7. + + For Unix, this is using the $XDG_DATA_DIRS[0] default. + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('/Library/Application Support') + if appname: + path = os.path.join(path, appname) + else: + # XDG default for $XDG_DATA_DIRS + # only first, if multipath is False + path = os.getenv('XDG_DATA_DIRS', + os.pathsep.join(['/usr/local/share', '/usr/share'])) + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + if appname and version: + path = os.path.join(path, version) + return path + + +def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user config directories are: + Mac OS X: same as user_data_dir + Unix: ~/.config/ # or in $XDG_CONFIG_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by default "~/.config/". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_config_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of config dirs should be + returned. By default, the first item from XDG_CONFIG_DIRS is + returned, or '/etc/xdg/', if XDG_CONFIG_DIRS is not set + + Typical site config directories are: + Mac OS X: same as site_data_dir + Unix: /etc/xdg/ or $XDG_CONFIG_DIRS[i]/ for each value in + $XDG_CONFIG_DIRS + Win *: same as site_data_dir + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + + For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system in ["win32", "darwin"]: + path = site_data_dir(appname, appauthor) + if appname and version: + path = os.path.join(path, version) + else: + # XDG default for $XDG_CONFIG_DIRS + # only first, if multipath is False + path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + +def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Cache" to the base app data dir for Windows. See + discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Caches/ + Unix: ~/.cache/ (XDG default) + Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Cache + Vista: C:\Users\\AppData\Local\\\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go in + the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming + app data dir (the default returned by `user_data_dir` above). Apps typically + put cache data somewhere *under* the given dir here. Some examples: + ...\Mozilla\Firefox\Profiles\\Cache + ...\Acme\SuperApp\Cache\1.0 + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + This can be disabled with the `opinion=False` option. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + if opinion: + path = os.path.join(path, "Cache") + elif system == 'darwin': + path = os.path.expanduser('~/Library/Caches') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_state_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific state dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user state directories are: + Mac OS X: same as user_data_dir + Unix: ~/.local/state/ # or in $XDG_STATE_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow this Debian proposal + to extend the XDG spec and support $XDG_STATE_HOME. + + That means, by default "~/.local/state/". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_STATE_HOME', os.path.expanduser("~/.local/state")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific log dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Logs" to the base app data dir for Windows, and "log" to the + base cache dir for Unix. See discussion below. + + Typical user log directories are: + Mac OS X: ~/Library/Logs/ + Unix: ~/.cache//log # or under $XDG_CACHE_HOME if defined + Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Logs + Vista: C:\Users\\AppData\Local\\\Logs + + On Windows the only suggestion in the MSDN docs is that local settings + go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in + examples of what some windows apps use for a logs dir.) + + OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` + value for Windows and appends "log" to the user cache dir for Unix. + This can be disabled with the `opinion=False` option. + """ + if system == "darwin": + path = os.path.join( + os.path.expanduser('~/Library/Logs'), + appname) + elif system == "win32": + path = user_data_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "Logs") + else: + path = user_cache_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "log") + if appname and version: + path = os.path.join(path, version) + return path + + +class AppDirs(object): + """Convenience wrapper for getting application dirs.""" + def __init__(self, appname=None, appauthor=None, version=None, + roaming=False, multipath=False): + self.appname = appname + self.appauthor = appauthor + self.version = version + self.roaming = roaming + self.multipath = multipath + + @property + def user_data_dir(self): + return user_data_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_data_dir(self): + return site_data_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_config_dir(self): + return user_config_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_config_dir(self): + return site_config_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_cache_dir(self): + return user_cache_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_state_dir(self): + return user_state_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_log_dir(self): + return user_log_dir(self.appname, self.appauthor, + version=self.version) + + +#---- internal support stuff + +def _get_win_folder_from_registry(csidl_name): + """This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + if PY3: + import winreg as _winreg + else: + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + dir, type = _winreg.QueryValueEx(key, shell_folder_name) + return dir + + +def _get_win_folder_with_pywin32(csidl_name): + from win32com.shell import shellcon, shell + dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) + # Try to make this a unicode path because SHGetFolderPath does + # not return unicode strings when there is unicode data in the + # path. + try: + dir = unicode(dir) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + try: + import win32api + dir = win32api.GetShortPathName(dir) + except ImportError: + pass + except UnicodeError: + pass + return dir + + +def _get_win_folder_with_ctypes(csidl_name): + import ctypes + + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + +def _get_win_folder_with_jna(csidl_name): + import array + from com.sun import jna + from com.sun.jna.platform import win32 + + buf_size = win32.WinDef.MAX_PATH * 2 + buf = array.zeros('c', buf_size) + shell = win32.Shell32.INSTANCE + shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf) + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf = array.zeros('c', buf_size) + kernel = win32.Kernel32.INSTANCE + if kernel.GetShortPathName(dir, buf, buf_size): + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + return dir + +if system == "win32": + try: + import win32com.shell + _get_win_folder = _get_win_folder_with_pywin32 + except ImportError: + try: + from ctypes import windll + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + try: + import com.sun.jna + _get_win_folder = _get_win_folder_with_jna + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +#---- self test code + +if __name__ == "__main__": + appname = "MyApp" + appauthor = "MyCompany" + + props = ("user_data_dir", + "user_config_dir", + "user_cache_dir", + "user_state_dir", + "user_log_dir", + "site_data_dir", + "site_config_dir") + + print("-- app dirs %s --" % __version__) + + print("-- app dirs (with optional 'version')") + dirs = AppDirs(appname, appauthor, version="1.0") + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'version')") + dirs = AppDirs(appname, appauthor) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'appauthor')") + dirs = AppDirs(appname) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (with disabled 'appauthor')") + dirs = AppDirs(appname, appauthor=False) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__init__.py new file mode 100644 index 000000000..6606868a7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__init__.py @@ -0,0 +1,5 @@ +"""A Python port of Markdown-It""" +__all__ = ("MarkdownIt",) +__version__ = "3.0.0" + +from .main import MarkdownIt diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..e3898caac Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/_compat.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/_compat.cpython-312.pyc new file mode 100644 index 000000000..cb8c68f28 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/_compat.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/_punycode.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/_punycode.cpython-312.pyc new file mode 100644 index 000000000..874e06a71 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/_punycode.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/main.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/main.cpython-312.pyc new file mode 100644 index 000000000..595a53767 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/main.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/parser_block.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/parser_block.cpython-312.pyc new file mode 100644 index 000000000..9616bb6ae Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/parser_block.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/parser_core.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/parser_core.cpython-312.pyc new file mode 100644 index 000000000..0363f5228 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/parser_core.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/parser_inline.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/parser_inline.cpython-312.pyc new file mode 100644 index 000000000..de672888b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/parser_inline.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/renderer.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/renderer.cpython-312.pyc new file mode 100644 index 000000000..b198e4d7e Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/renderer.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/ruler.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/ruler.cpython-312.pyc new file mode 100644 index 000000000..db8e5421d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/ruler.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/token.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/token.cpython-312.pyc new file mode 100644 index 000000000..c42b1ebae Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/token.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/tree.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/tree.cpython-312.pyc new file mode 100644 index 000000000..bde9132a5 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/tree.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/utils.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/utils.cpython-312.pyc new file mode 100644 index 000000000..65b2ab710 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/__pycache__/utils.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/_compat.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/_compat.py new file mode 100644 index 000000000..974d431bd --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/_compat.py @@ -0,0 +1,11 @@ +from __future__ import annotations + +from collections.abc import Mapping +import sys +from typing import Any + +DATACLASS_KWARGS: Mapping[str, Any] +if sys.version_info >= (3, 10): + DATACLASS_KWARGS = {"slots": True} +else: + DATACLASS_KWARGS = {} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/_punycode.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/_punycode.py new file mode 100644 index 000000000..f9baad278 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/_punycode.py @@ -0,0 +1,67 @@ +# Copyright 2014 Mathias Bynens +# Copyright 2021 Taneli Hukkinen +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +import codecs +import re +from typing import Callable + +REGEX_SEPARATORS = re.compile(r"[\x2E\u3002\uFF0E\uFF61]") +REGEX_NON_ASCII = re.compile(r"[^\0-\x7E]") + + +def encode(uni: str) -> str: + return codecs.encode(uni, encoding="punycode").decode() + + +def decode(ascii: str) -> str: + return codecs.decode(ascii, encoding="punycode") # type: ignore + + +def map_domain(string: str, fn: Callable[[str], str]) -> str: + parts = string.split("@") + result = "" + if len(parts) > 1: + # In email addresses, only the domain name should be punycoded. Leave + # the local part (i.e. everything up to `@`) intact. + result = parts[0] + "@" + string = parts[1] + labels = REGEX_SEPARATORS.split(string) + encoded = ".".join(fn(label) for label in labels) + return result + encoded + + +def to_unicode(obj: str) -> str: + def mapping(obj: str) -> str: + if obj.startswith("xn--"): + return decode(obj[4:].lower()) + return obj + + return map_domain(obj, mapping) + + +def to_ascii(obj: str) -> str: + def mapping(obj: str) -> str: + if REGEX_NON_ASCII.search(obj): + return "xn--" + encode(obj) + return obj + + return map_domain(obj, mapping) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..500cd21db Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/__pycache__/parse.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/__pycache__/parse.cpython-312.pyc new file mode 100644 index 000000000..cd0044471 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/__pycache__/parse.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/parse.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/parse.py new file mode 100644 index 000000000..890d5de3e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/cli/parse.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +""" +CLI interface to markdown-it-py + +Parse one or more markdown files, convert each to HTML, and print to stdout. +""" +from __future__ import annotations + +import argparse +from collections.abc import Iterable, Sequence +import sys + +from markdown_it import __version__ +from markdown_it.main import MarkdownIt + +version_str = "markdown-it-py [version {}]".format(__version__) + + +def main(args: Sequence[str] | None = None) -> int: + namespace = parse_args(args) + if namespace.filenames: + convert(namespace.filenames) + else: + interactive() + return 0 + + +def convert(filenames: Iterable[str]) -> None: + for filename in filenames: + convert_file(filename) + + +def convert_file(filename: str) -> None: + """ + Parse a Markdown file and dump the output to stdout. + """ + try: + with open(filename, "r", encoding="utf8", errors="ignore") as fin: + rendered = MarkdownIt().render(fin.read()) + print(rendered, end="") + except OSError: + sys.stderr.write(f'Cannot open file "{filename}".\n') + sys.exit(1) + + +def interactive() -> None: + """ + Parse user input, dump to stdout, rinse and repeat. + Python REPL style. + """ + print_heading() + contents = [] + more = False + while True: + try: + prompt, more = ("... ", True) if more else (">>> ", True) + contents.append(input(prompt) + "\n") + except EOFError: + print("\n" + MarkdownIt().render("\n".join(contents)), end="") + more = False + contents = [] + except KeyboardInterrupt: + print("\nExiting.") + break + + +def parse_args(args: Sequence[str] | None) -> argparse.Namespace: + """Parse input CLI arguments.""" + parser = argparse.ArgumentParser( + description="Parse one or more markdown files, " + "convert each to HTML, and print to stdout", + # NOTE: Remember to update README.md w/ the output of `markdown-it -h` + epilog=( + f""" +Interactive: + + $ markdown-it + markdown-it-py [version {__version__}] (interactive) + Type Ctrl-D to complete input, or Ctrl-C to exit. + >>> # Example + ... > markdown *input* + ... +

Example

+
+

markdown input

+
+ +Batch: + + $ markdown-it README.md README.footer.md > index.html +""" + ), + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument("-v", "--version", action="version", version=version_str) + parser.add_argument( + "filenames", nargs="*", help="specify an optional list of files to convert" + ) + return parser.parse_args(args) + + +def print_heading() -> None: + print("{} (interactive)".format(version_str)) + print("Type Ctrl-D to complete input, or Ctrl-C to exit.") + + +if __name__ == "__main__": + exit_code = main(sys.argv[1:]) + sys.exit(exit_code) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..1aa54b042 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/entities.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/entities.cpython-312.pyc new file mode 100644 index 000000000..581da3da6 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/entities.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/html_blocks.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/html_blocks.cpython-312.pyc new file mode 100644 index 000000000..3dc9efc8a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/html_blocks.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/html_re.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/html_re.cpython-312.pyc new file mode 100644 index 000000000..5b9aca9c0 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/html_re.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/normalize_url.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/normalize_url.cpython-312.pyc new file mode 100644 index 000000000..ae9d5ab89 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/normalize_url.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/utils.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/utils.cpython-312.pyc new file mode 100644 index 000000000..d3355fd51 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/__pycache__/utils.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/entities.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/entities.py new file mode 100644 index 000000000..6bb2d343c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/entities.py @@ -0,0 +1,4 @@ +"""HTML5 entities map: { name -> characters }.""" +import html.entities + +entities = {name.rstrip(";"): chars for name, chars in html.entities.html5.items()} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/html_blocks.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/html_blocks.py new file mode 100644 index 000000000..8b199af33 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/html_blocks.py @@ -0,0 +1,68 @@ +"""List of valid html blocks names, according to commonmark spec +http://jgm.github.io/CommonMark/spec.html#html-blocks +""" + +block_names = [ + "address", + "article", + "aside", + "base", + "basefont", + "blockquote", + "body", + "caption", + "center", + "col", + "colgroup", + "dd", + "details", + "dialog", + "dir", + "div", + "dl", + "dt", + "fieldset", + "figcaption", + "figure", + "footer", + "form", + "frame", + "frameset", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "head", + "header", + "hr", + "html", + "iframe", + "legend", + "li", + "link", + "main", + "menu", + "menuitem", + "nav", + "noframes", + "ol", + "optgroup", + "option", + "p", + "param", + "section", + "source", + "summary", + "table", + "tbody", + "td", + "tfoot", + "th", + "thead", + "title", + "tr", + "track", + "ul", +] diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/html_re.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/html_re.py new file mode 100644 index 000000000..f0c336d23 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/html_re.py @@ -0,0 +1,40 @@ +"""Regexps to match html elements +""" + +import re + +attr_name = "[a-zA-Z_:][a-zA-Z0-9:._-]*" + +unquoted = "[^\"'=<>`\\x00-\\x20]+" +single_quoted = "'[^']*'" +double_quoted = '"[^"]*"' + +attr_value = "(?:" + unquoted + "|" + single_quoted + "|" + double_quoted + ")" + +attribute = "(?:\\s+" + attr_name + "(?:\\s*=\\s*" + attr_value + ")?)" + +open_tag = "<[A-Za-z][A-Za-z0-9\\-]*" + attribute + "*\\s*\\/?>" + +close_tag = "<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>" +comment = "|" +processing = "<[?][\\s\\S]*?[?]>" +declaration = "]*>" +cdata = "" + +HTML_TAG_RE = re.compile( + "^(?:" + + open_tag + + "|" + + close_tag + + "|" + + comment + + "|" + + processing + + "|" + + declaration + + "|" + + cdata + + ")" +) +HTML_OPEN_CLOSE_TAG_STR = "^(?:" + open_tag + "|" + close_tag + ")" +HTML_OPEN_CLOSE_TAG_RE = re.compile(HTML_OPEN_CLOSE_TAG_STR) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/normalize_url.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/normalize_url.py new file mode 100644 index 000000000..92720b316 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/normalize_url.py @@ -0,0 +1,81 @@ +from __future__ import annotations + +from collections.abc import Callable +from contextlib import suppress +import re +from urllib.parse import quote, unquote, urlparse, urlunparse # noqa: F401 + +import mdurl + +from .. import _punycode + +RECODE_HOSTNAME_FOR = ("http:", "https:", "mailto:") + + +def normalizeLink(url: str) -> str: + """Normalize destination URLs in links + + :: + + [label]: destination 'title' + ^^^^^^^^^^^ + """ + parsed = mdurl.parse(url, slashes_denote_host=True) + + # Encode hostnames in urls like: + # `http://host/`, `https://host/`, `mailto:user@host`, `//host/` + # + # We don't encode unknown schemas, because it's likely that we encode + # something we shouldn't (e.g. `skype:name` treated as `skype:host`) + # + if parsed.hostname and ( + not parsed.protocol or parsed.protocol in RECODE_HOSTNAME_FOR + ): + with suppress(Exception): + parsed = parsed._replace(hostname=_punycode.to_ascii(parsed.hostname)) + + return mdurl.encode(mdurl.format(parsed)) + + +def normalizeLinkText(url: str) -> str: + """Normalize autolink content + + :: + + + ~~~~~~~~~~~ + """ + parsed = mdurl.parse(url, slashes_denote_host=True) + + # Encode hostnames in urls like: + # `http://host/`, `https://host/`, `mailto:user@host`, `//host/` + # + # We don't encode unknown schemas, because it's likely that we encode + # something we shouldn't (e.g. `skype:name` treated as `skype:host`) + # + if parsed.hostname and ( + not parsed.protocol or parsed.protocol in RECODE_HOSTNAME_FOR + ): + with suppress(Exception): + parsed = parsed._replace(hostname=_punycode.to_unicode(parsed.hostname)) + + # add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720 + return mdurl.decode(mdurl.format(parsed), mdurl.DECODE_DEFAULT_CHARS + "%") + + +BAD_PROTO_RE = re.compile(r"^(vbscript|javascript|file|data):") +GOOD_DATA_RE = re.compile(r"^data:image\/(gif|png|jpeg|webp);") + + +def validateLink(url: str, validator: Callable[[str], bool] | None = None) -> bool: + """Validate URL link is allowed in output. + + This validator can prohibit more than really needed to prevent XSS. + It's a tradeoff to keep code simple and to be secure by default. + + Note: url should be normalized at this point, and existing entities decoded. + """ + if validator is not None: + return validator(url) + url = url.strip().lower() + return bool(GOOD_DATA_RE.search(url)) if BAD_PROTO_RE.search(url) else True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/utils.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/utils.py new file mode 100644 index 000000000..0d11e3e3e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/common/utils.py @@ -0,0 +1,318 @@ +"""Utilities for parsing source text +""" +from __future__ import annotations + +import re +from typing import Match, TypeVar + +from .entities import entities + + +def charCodeAt(src: str, pos: int) -> int | None: + """ + Returns the Unicode value of the character at the specified location. + + @param - index The zero-based index of the desired character. + If there is no character at the specified index, NaN is returned. + + This was added for compatibility with python + """ + try: + return ord(src[pos]) + except IndexError: + return None + + +def charStrAt(src: str, pos: int) -> str | None: + """ + Returns the Unicode value of the character at the specified location. + + @param - index The zero-based index of the desired character. + If there is no character at the specified index, NaN is returned. + + This was added for compatibility with python + """ + try: + return src[pos] + except IndexError: + return None + + +_ItemTV = TypeVar("_ItemTV") + + +def arrayReplaceAt( + src: list[_ItemTV], pos: int, newElements: list[_ItemTV] +) -> list[_ItemTV]: + """ + Remove element from array and put another array at those position. + Useful for some operations with tokens + """ + return src[:pos] + newElements + src[pos + 1 :] + + +def isValidEntityCode(c: int) -> bool: + # broken sequence + if c >= 0xD800 and c <= 0xDFFF: + return False + # never used + if c >= 0xFDD0 and c <= 0xFDEF: + return False + if ((c & 0xFFFF) == 0xFFFF) or ((c & 0xFFFF) == 0xFFFE): + return False + # control codes + if c >= 0x00 and c <= 0x08: + return False + if c == 0x0B: + return False + if c >= 0x0E and c <= 0x1F: + return False + if c >= 0x7F and c <= 0x9F: + return False + # out of range + if c > 0x10FFFF: + return False + return True + + +def fromCodePoint(c: int) -> str: + """Convert ordinal to unicode. + + Note, in the original Javascript two string characters were required, + for codepoints larger than `0xFFFF`. + But Python 3 can represent any unicode codepoint in one character. + """ + return chr(c) + + +# UNESCAPE_MD_RE = re.compile(r'\\([!"#$%&\'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])') +# ENTITY_RE_g = re.compile(r'&([a-z#][a-z0-9]{1,31})', re.IGNORECASE) +UNESCAPE_ALL_RE = re.compile( + r'\\([!"#$%&\'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])' + "|" + r"&([a-z#][a-z0-9]{1,31});", + re.IGNORECASE, +) +DIGITAL_ENTITY_BASE10_RE = re.compile(r"#([0-9]{1,8})") +DIGITAL_ENTITY_BASE16_RE = re.compile(r"#x([a-f0-9]{1,8})", re.IGNORECASE) + + +def replaceEntityPattern(match: str, name: str) -> str: + """Convert HTML entity patterns, + see https://spec.commonmark.org/0.30/#entity-references + """ + if name in entities: + return entities[name] + + code: None | int = None + if pat := DIGITAL_ENTITY_BASE10_RE.fullmatch(name): + code = int(pat.group(1), 10) + elif pat := DIGITAL_ENTITY_BASE16_RE.fullmatch(name): + code = int(pat.group(1), 16) + + if code is not None and isValidEntityCode(code): + return fromCodePoint(code) + + return match + + +def unescapeAll(string: str) -> str: + def replacer_func(match: Match[str]) -> str: + escaped = match.group(1) + if escaped: + return escaped + entity = match.group(2) + return replaceEntityPattern(match.group(), entity) + + if "\\" not in string and "&" not in string: + return string + return UNESCAPE_ALL_RE.sub(replacer_func, string) + + +ESCAPABLE = r"""\\!"#$%&'()*+,./:;<=>?@\[\]^`{}|_~-""" +ESCAPE_CHAR = re.compile(r"\\([" + ESCAPABLE + r"])") + + +def stripEscape(string: str) -> str: + """Strip escape \\ characters""" + return ESCAPE_CHAR.sub(r"\1", string) + + +def escapeHtml(raw: str) -> str: + """Replace special characters "&", "<", ">" and '"' to HTML-safe sequences.""" + # like html.escape, but without escaping single quotes + raw = raw.replace("&", "&") # Must be done first! + raw = raw.replace("<", "<") + raw = raw.replace(">", ">") + raw = raw.replace('"', """) + return raw + + +# ////////////////////////////////////////////////////////////////////////////// + +REGEXP_ESCAPE_RE = re.compile(r"[.?*+^$[\]\\(){}|-]") + + +def escapeRE(string: str) -> str: + string = REGEXP_ESCAPE_RE.sub("\\$&", string) + return string + + +# ////////////////////////////////////////////////////////////////////////////// + + +def isSpace(code: int | None) -> bool: + """Check if character code is a whitespace.""" + return code in (0x09, 0x20) + + +def isStrSpace(ch: str | None) -> bool: + """Check if character is a whitespace.""" + return ch in ("\t", " ") + + +MD_WHITESPACE = { + 0x09, # \t + 0x0A, # \n + 0x0B, # \v + 0x0C, # \f + 0x0D, # \r + 0x20, # space + 0xA0, + 0x1680, + 0x202F, + 0x205F, + 0x3000, +} + + +def isWhiteSpace(code: int) -> bool: + r"""Zs (unicode class) || [\t\f\v\r\n]""" + if code >= 0x2000 and code <= 0x200A: + return True + return code in MD_WHITESPACE + + +# ////////////////////////////////////////////////////////////////////////////// + +UNICODE_PUNCT_RE = re.compile( + r"[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]" # noqa: E501 +) + + +# Currently without astral characters support. +def isPunctChar(ch: str) -> bool: + """Check if character is a punctuation character.""" + return UNICODE_PUNCT_RE.search(ch) is not None + + +MD_ASCII_PUNCT = { + 0x21, # /* ! */ + 0x22, # /* " */ + 0x23, # /* # */ + 0x24, # /* $ */ + 0x25, # /* % */ + 0x26, # /* & */ + 0x27, # /* ' */ + 0x28, # /* ( */ + 0x29, # /* ) */ + 0x2A, # /* * */ + 0x2B, # /* + */ + 0x2C, # /* , */ + 0x2D, # /* - */ + 0x2E, # /* . */ + 0x2F, # /* / */ + 0x3A, # /* : */ + 0x3B, # /* ; */ + 0x3C, # /* < */ + 0x3D, # /* = */ + 0x3E, # /* > */ + 0x3F, # /* ? */ + 0x40, # /* @ */ + 0x5B, # /* [ */ + 0x5C, # /* \ */ + 0x5D, # /* ] */ + 0x5E, # /* ^ */ + 0x5F, # /* _ */ + 0x60, # /* ` */ + 0x7B, # /* { */ + 0x7C, # /* | */ + 0x7D, # /* } */ + 0x7E, # /* ~ */ +} + + +def isMdAsciiPunct(ch: int) -> bool: + """Markdown ASCII punctuation characters. + + :: + + !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~ + + See http://spec.commonmark.org/0.15/#ascii-punctuation-character + + Don't confuse with unicode punctuation !!! It lacks some chars in ascii range. + + """ # noqa: E501 + return ch in MD_ASCII_PUNCT + + +def normalizeReference(string: str) -> str: + """Helper to unify [reference labels].""" + # Trim and collapse whitespace + # + string = re.sub(r"\s+", " ", string.strip()) + + # In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug + # fixed in v12 (couldn't find any details). + # + # So treat this one as a special case + # (remove this when node v10 is no longer supported). + # + # if ('ẞ'.toLowerCase() === 'Ṿ') { + # str = str.replace(/ẞ/g, 'ß') + # } + + # .toLowerCase().toUpperCase() should get rid of all differences + # between letter variants. + # + # Simple .toLowerCase() doesn't normalize 125 code points correctly, + # and .toUpperCase doesn't normalize 6 of them (list of exceptions: + # İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently + # uppercased versions). + # + # Here's an example showing how it happens. Lets take greek letter omega: + # uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ) + # + # Unicode entries: + # 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8 + # 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 + # 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 + # 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8 + # + # Case-insensitive comparison should treat all of them as equivalent. + # + # But .toLowerCase() doesn't change ϑ (it's already lowercase), + # and .toUpperCase() doesn't change ϴ (already uppercase). + # + # Applying first lower then upper case normalizes any character: + # '\u0398\u03f4\u03b8\u03d1'.toLowerCase().toUpperCase() === '\u0398\u0398\u0398\u0398' + # + # Note: this is equivalent to unicode case folding; unicode normalization + # is a different step that is not required here. + # + # Final result should be uppercased, because it's later stored in an object + # (this avoid a conflict with Object.prototype members, + # most notably, `__proto__`) + # + return string.lower().upper() + + +LINK_OPEN_RE = re.compile(r"^\s]", flags=re.IGNORECASE) +LINK_CLOSE_RE = re.compile(r"^", flags=re.IGNORECASE) + + +def isLinkOpen(string: str) -> bool: + return bool(LINK_OPEN_RE.search(string)) + + +def isLinkClose(string: str) -> bool: + return bool(LINK_CLOSE_RE.search(string)) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__init__.py new file mode 100644 index 000000000..3dbbdd1d4 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__init__.py @@ -0,0 +1,6 @@ +"""Functions for parsing Links +""" +__all__ = ("parseLinkLabel", "parseLinkDestination", "parseLinkTitle") +from .parse_link_destination import parseLinkDestination +from .parse_link_label import parseLinkLabel +from .parse_link_title import parseLinkTitle diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..e047d85a1 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/parse_link_destination.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/parse_link_destination.cpython-312.pyc new file mode 100644 index 000000000..9ede5925c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/parse_link_destination.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/parse_link_label.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/parse_link_label.cpython-312.pyc new file mode 100644 index 000000000..6a392777a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/parse_link_label.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/parse_link_title.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/parse_link_title.cpython-312.pyc new file mode 100644 index 000000000..290994fb8 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/__pycache__/parse_link_title.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/parse_link_destination.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/parse_link_destination.py new file mode 100644 index 000000000..f42b2244d --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/parse_link_destination.py @@ -0,0 +1,86 @@ +""" +Parse link destination +""" + +from ..common.utils import charCodeAt, unescapeAll + + +class _Result: + __slots__ = ("ok", "pos", "lines", "str") + + def __init__(self) -> None: + self.ok = False + self.pos = 0 + self.lines = 0 + self.str = "" + + +def parseLinkDestination(string: str, pos: int, maximum: int) -> _Result: + lines = 0 + start = pos + result = _Result() + + if charCodeAt(string, pos) == 0x3C: # /* < */ + pos += 1 + while pos < maximum: + code = charCodeAt(string, pos) + if code == 0x0A: # /* \n */) + return result + if code == 0x3C: # / * < * / + return result + if code == 0x3E: # /* > */) { + result.pos = pos + 1 + result.str = unescapeAll(string[start + 1 : pos]) + result.ok = True + return result + + if code == 0x5C and pos + 1 < maximum: # \ + pos += 2 + continue + + pos += 1 + + # no closing '>' + return result + + # this should be ... } else { ... branch + + level = 0 + while pos < maximum: + code = charCodeAt(string, pos) + + if code is None or code == 0x20: + break + + # ascii control characters + if code < 0x20 or code == 0x7F: + break + + if code == 0x5C and pos + 1 < maximum: + if charCodeAt(string, pos + 1) == 0x20: + break + pos += 2 + continue + + if code == 0x28: # /* ( */) + level += 1 + if level > 32: + return result + + if code == 0x29: # /* ) */) + if level == 0: + break + level -= 1 + + pos += 1 + + if start == pos: + return result + if level != 0: + return result + + result.str = unescapeAll(string[start:pos]) + result.lines = lines + result.pos = pos + result.ok = True + return result diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/parse_link_label.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/parse_link_label.py new file mode 100644 index 000000000..01c653c56 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/parse_link_label.py @@ -0,0 +1,43 @@ +""" +Parse link label + +this function assumes that first character ("[") already matches +returns the end of the label + +""" +from markdown_it.rules_inline import StateInline + + +def parseLinkLabel(state: StateInline, start: int, disableNested: bool = False) -> int: + labelEnd = -1 + oldPos = state.pos + found = False + + state.pos = start + 1 + level = 1 + + while state.pos < state.posMax: + marker = state.src[state.pos] + if marker == "]": + level -= 1 + if level == 0: + found = True + break + + prevPos = state.pos + state.md.inline.skipToken(state) + if marker == "[": + if prevPos == state.pos - 1: + # increase level if we find text `[`, + # which is not a part of any token + level += 1 + elif disableNested: + state.pos = oldPos + return -1 + if found: + labelEnd = state.pos + + # restore old state + state.pos = oldPos + + return labelEnd diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/parse_link_title.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/parse_link_title.py new file mode 100644 index 000000000..8f589336f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/helpers/parse_link_title.py @@ -0,0 +1,60 @@ +"""Parse link title +""" +from ..common.utils import charCodeAt, unescapeAll + + +class _Result: + __slots__ = ("ok", "pos", "lines", "str") + + def __init__(self) -> None: + self.ok = False + self.pos = 0 + self.lines = 0 + self.str = "" + + def __str__(self) -> str: + return self.str + + +def parseLinkTitle(string: str, pos: int, maximum: int) -> _Result: + lines = 0 + start = pos + result = _Result() + + if pos >= maximum: + return result + + marker = charCodeAt(string, pos) + + # /* " */ /* ' */ /* ( */ + if marker != 0x22 and marker != 0x27 and marker != 0x28: + return result + + pos += 1 + + # if opening marker is "(", switch it to closing marker ")" + if marker == 0x28: + marker = 0x29 + + while pos < maximum: + code = charCodeAt(string, pos) + if code == marker: + title = string[start + 1 : pos] + title = unescapeAll(title) + result.pos = pos + 1 + result.lines = lines + result.str = title + result.ok = True + return result + elif code == 0x28 and marker == 0x29: # /* ( */ /* ) */ + return result + elif code == 0x0A: + lines += 1 + elif code == 0x5C and pos + 1 < maximum: # /* \ */ + pos += 1 + if charCodeAt(string, pos) == 0x0A: + lines += 1 + + pos += 1 + + return result diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/main.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/main.py new file mode 100644 index 000000000..bb294a990 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/main.py @@ -0,0 +1,355 @@ +from __future__ import annotations + +from collections.abc import Callable, Generator, Iterable, Mapping, MutableMapping +from contextlib import contextmanager +from typing import Any, Literal, overload + +from . import helpers, presets +from .common import normalize_url, utils +from .parser_block import ParserBlock +from .parser_core import ParserCore +from .parser_inline import ParserInline +from .renderer import RendererHTML, RendererProtocol +from .rules_core.state_core import StateCore +from .token import Token +from .utils import EnvType, OptionsDict, OptionsType, PresetType + +try: + import linkify_it +except ModuleNotFoundError: + linkify_it = None + + +_PRESETS: dict[str, PresetType] = { + "default": presets.default.make(), + "js-default": presets.js_default.make(), + "zero": presets.zero.make(), + "commonmark": presets.commonmark.make(), + "gfm-like": presets.gfm_like.make(), +} + + +class MarkdownIt: + def __init__( + self, + config: str | PresetType = "commonmark", + options_update: Mapping[str, Any] | None = None, + *, + renderer_cls: Callable[[MarkdownIt], RendererProtocol] = RendererHTML, + ): + """Main parser class + + :param config: name of configuration to load or a pre-defined dictionary + :param options_update: dictionary that will be merged into ``config["options"]`` + :param renderer_cls: the class to load as the renderer: + ``self.renderer = renderer_cls(self) + """ + # add modules + self.utils = utils + self.helpers = helpers + + # initialise classes + self.inline = ParserInline() + self.block = ParserBlock() + self.core = ParserCore() + self.renderer = renderer_cls(self) + self.linkify = linkify_it.LinkifyIt() if linkify_it else None + + # set the configuration + if options_update and not isinstance(options_update, Mapping): + # catch signature change where renderer_cls was not used as a key-word + raise TypeError( + f"options_update should be a mapping: {options_update}" + "\n(Perhaps you intended this to be the renderer_cls?)" + ) + self.configure(config, options_update=options_update) + + def __repr__(self) -> str: + return f"{self.__class__.__module__}.{self.__class__.__name__}()" + + @overload + def __getitem__(self, name: Literal["inline"]) -> ParserInline: + ... + + @overload + def __getitem__(self, name: Literal["block"]) -> ParserBlock: + ... + + @overload + def __getitem__(self, name: Literal["core"]) -> ParserCore: + ... + + @overload + def __getitem__(self, name: Literal["renderer"]) -> RendererProtocol: + ... + + @overload + def __getitem__(self, name: str) -> Any: + ... + + def __getitem__(self, name: str) -> Any: + return { + "inline": self.inline, + "block": self.block, + "core": self.core, + "renderer": self.renderer, + }[name] + + def set(self, options: OptionsType) -> None: + """Set parser options (in the same format as in constructor). + Probably, you will never need it, but you can change options after constructor call. + + __Note:__ To achieve the best possible performance, don't modify a + `markdown-it` instance options on the fly. If you need multiple configurations + it's best to create multiple instances and initialize each with separate config. + """ + self.options = OptionsDict(options) + + def configure( + self, presets: str | PresetType, options_update: Mapping[str, Any] | None = None + ) -> MarkdownIt: + """Batch load of all options and component settings. + This is an internal method, and you probably will not need it. + But if you will - see available presets and data structure + [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets) + + We strongly recommend to use presets instead of direct config loads. + That will give better compatibility with next versions. + """ + if isinstance(presets, str): + if presets not in _PRESETS: + raise KeyError(f"Wrong `markdown-it` preset '{presets}', check name") + config = _PRESETS[presets] + else: + config = presets + + if not config: + raise ValueError("Wrong `markdown-it` config, can't be empty") + + options = config.get("options", {}) or {} + if options_update: + options = {**options, **options_update} # type: ignore + + self.set(options) # type: ignore + + if "components" in config: + for name, component in config["components"].items(): + rules = component.get("rules", None) + if rules: + self[name].ruler.enableOnly(rules) + rules2 = component.get("rules2", None) + if rules2: + self[name].ruler2.enableOnly(rules2) + + return self + + def get_all_rules(self) -> dict[str, list[str]]: + """Return the names of all active rules.""" + rules = { + chain: self[chain].ruler.get_all_rules() + for chain in ["core", "block", "inline"] + } + rules["inline2"] = self.inline.ruler2.get_all_rules() + return rules + + def get_active_rules(self) -> dict[str, list[str]]: + """Return the names of all active rules.""" + rules = { + chain: self[chain].ruler.get_active_rules() + for chain in ["core", "block", "inline"] + } + rules["inline2"] = self.inline.ruler2.get_active_rules() + return rules + + def enable( + self, names: str | Iterable[str], ignoreInvalid: bool = False + ) -> MarkdownIt: + """Enable list or rules. (chainable) + + :param names: rule name or list of rule names to enable. + :param ignoreInvalid: set `true` to ignore errors when rule not found. + + It will automatically find appropriate components, + containing rules with given names. If rule not found, and `ignoreInvalid` + not set - throws exception. + + Example:: + + md = MarkdownIt().enable(['sub', 'sup']).disable('smartquotes') + + """ + result = [] + + if isinstance(names, str): + names = [names] + + for chain in ["core", "block", "inline"]: + result.extend(self[chain].ruler.enable(names, True)) + result.extend(self.inline.ruler2.enable(names, True)) + + missed = [name for name in names if name not in result] + if missed and not ignoreInvalid: + raise ValueError(f"MarkdownIt. Failed to enable unknown rule(s): {missed}") + + return self + + def disable( + self, names: str | Iterable[str], ignoreInvalid: bool = False + ) -> MarkdownIt: + """The same as [[MarkdownIt.enable]], but turn specified rules off. (chainable) + + :param names: rule name or list of rule names to disable. + :param ignoreInvalid: set `true` to ignore errors when rule not found. + + """ + result = [] + + if isinstance(names, str): + names = [names] + + for chain in ["core", "block", "inline"]: + result.extend(self[chain].ruler.disable(names, True)) + result.extend(self.inline.ruler2.disable(names, True)) + + missed = [name for name in names if name not in result] + if missed and not ignoreInvalid: + raise ValueError(f"MarkdownIt. Failed to disable unknown rule(s): {missed}") + return self + + @contextmanager + def reset_rules(self) -> Generator[None, None, None]: + """A context manager, that will reset the current enabled rules on exit.""" + chain_rules = self.get_active_rules() + yield + for chain, rules in chain_rules.items(): + if chain != "inline2": + self[chain].ruler.enableOnly(rules) + self.inline.ruler2.enableOnly(chain_rules["inline2"]) + + def add_render_rule( + self, name: str, function: Callable[..., Any], fmt: str = "html" + ) -> None: + """Add a rule for rendering a particular Token type. + + Only applied when ``renderer.__output__ == fmt`` + """ + if self.renderer.__output__ == fmt: + self.renderer.rules[name] = function.__get__(self.renderer) # type: ignore + + def use( + self, plugin: Callable[..., None], *params: Any, **options: Any + ) -> MarkdownIt: + """Load specified plugin with given params into current parser instance. (chainable) + + It's just a sugar to call `plugin(md, params)` with curring. + + Example:: + + def func(tokens, idx): + tokens[idx].content = tokens[idx].content.replace('foo', 'bar') + md = MarkdownIt().use(plugin, 'foo_replace', 'text', func) + + """ + plugin(self, *params, **options) + return self + + def parse(self, src: str, env: EnvType | None = None) -> list[Token]: + """Parse the source string to a token stream + + :param src: source string + :param env: environment sandbox + + Parse input string and return list of block tokens (special token type + "inline" will contain list of inline tokens). + + `env` is used to pass data between "distributed" rules and return additional + metadata like reference info, needed for the renderer. It also can be used to + inject data in specific cases. Usually, you will be ok to pass `{}`, + and then pass updated object to renderer. + """ + env = {} if env is None else env + if not isinstance(env, MutableMapping): + raise TypeError(f"Input data should be a MutableMapping, not {type(env)}") + if not isinstance(src, str): + raise TypeError(f"Input data should be a string, not {type(src)}") + state = StateCore(src, self, env) + self.core.process(state) + return state.tokens + + def render(self, src: str, env: EnvType | None = None) -> Any: + """Render markdown string into html. It does all magic for you :). + + :param src: source string + :param env: environment sandbox + :returns: The output of the loaded renderer + + `env` can be used to inject additional metadata (`{}` by default). + But you will not need it with high probability. See also comment + in [[MarkdownIt.parse]]. + """ + env = {} if env is None else env + return self.renderer.render(self.parse(src, env), self.options, env) + + def parseInline(self, src: str, env: EnvType | None = None) -> list[Token]: + """The same as [[MarkdownIt.parse]] but skip all block rules. + + :param src: source string + :param env: environment sandbox + + It returns the + block tokens list with the single `inline` element, containing parsed inline + tokens in `children` property. Also updates `env` object. + """ + env = {} if env is None else env + if not isinstance(env, MutableMapping): + raise TypeError(f"Input data should be an MutableMapping, not {type(env)}") + if not isinstance(src, str): + raise TypeError(f"Input data should be a string, not {type(src)}") + state = StateCore(src, self, env) + state.inlineMode = True + self.core.process(state) + return state.tokens + + def renderInline(self, src: str, env: EnvType | None = None) -> Any: + """Similar to [[MarkdownIt.render]] but for single paragraph content. + + :param src: source string + :param env: environment sandbox + + Similar to [[MarkdownIt.render]] but for single paragraph content. Result + will NOT be wrapped into `

` tags. + """ + env = {} if env is None else env + return self.renderer.render(self.parseInline(src, env), self.options, env) + + # link methods + + def validateLink(self, url: str) -> bool: + """Validate if the URL link is allowed in output. + + This validator can prohibit more than really needed to prevent XSS. + It's a tradeoff to keep code simple and to be secure by default. + + Note: the url should be normalized at this point, and existing entities decoded. + """ + return normalize_url.validateLink(url) + + def normalizeLink(self, url: str) -> str: + """Normalize destination URLs in links + + :: + + [label]: destination 'title' + ^^^^^^^^^^^ + """ + return normalize_url.normalizeLink(url) + + def normalizeLinkText(self, link: str) -> str: + """Normalize autolink content + + :: + + + ~~~~~~~~~~~ + """ + return normalize_url.normalizeLinkText(link) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/parser_block.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/parser_block.py new file mode 100644 index 000000000..72360f9b3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/parser_block.py @@ -0,0 +1,111 @@ +"""Block-level tokenizer.""" +from __future__ import annotations + +import logging +from typing import TYPE_CHECKING, Callable + +from . import rules_block +from .ruler import Ruler +from .rules_block.state_block import StateBlock +from .token import Token +from .utils import EnvType + +if TYPE_CHECKING: + from markdown_it import MarkdownIt + +LOGGER = logging.getLogger(__name__) + + +RuleFuncBlockType = Callable[[StateBlock, int, int, bool], bool] +"""(state: StateBlock, startLine: int, endLine: int, silent: bool) -> matched: bool) + +`silent` disables token generation, useful for lookahead. +""" + +_rules: list[tuple[str, RuleFuncBlockType, list[str]]] = [ + # First 2 params - rule name & source. Secondary array - list of rules, + # which can be terminated by this one. + ("table", rules_block.table, ["paragraph", "reference"]), + ("code", rules_block.code, []), + ("fence", rules_block.fence, ["paragraph", "reference", "blockquote", "list"]), + ( + "blockquote", + rules_block.blockquote, + ["paragraph", "reference", "blockquote", "list"], + ), + ("hr", rules_block.hr, ["paragraph", "reference", "blockquote", "list"]), + ("list", rules_block.list_block, ["paragraph", "reference", "blockquote"]), + ("reference", rules_block.reference, []), + ("html_block", rules_block.html_block, ["paragraph", "reference", "blockquote"]), + ("heading", rules_block.heading, ["paragraph", "reference", "blockquote"]), + ("lheading", rules_block.lheading, []), + ("paragraph", rules_block.paragraph, []), +] + + +class ParserBlock: + """ + ParserBlock#ruler -> Ruler + + [[Ruler]] instance. Keep configuration of block rules. + """ + + def __init__(self) -> None: + self.ruler = Ruler[RuleFuncBlockType]() + for name, rule, alt in _rules: + self.ruler.push(name, rule, {"alt": alt}) + + def tokenize(self, state: StateBlock, startLine: int, endLine: int) -> None: + """Generate tokens for input range.""" + rules = self.ruler.getRules("") + line = startLine + maxNesting = state.md.options.maxNesting + hasEmptyLines = False + + while line < endLine: + state.line = line = state.skipEmptyLines(line) + if line >= endLine: + break + if state.sCount[line] < state.blkIndent: + # Termination condition for nested calls. + # Nested calls currently used for blockquotes & lists + break + if state.level >= maxNesting: + # If nesting level exceeded - skip tail to the end. + # That's not ordinary situation and we should not care about content. + state.line = endLine + break + + # Try all possible rules. + # On success, rule should: + # - update `state.line` + # - update `state.tokens` + # - return True + for rule in rules: + if rule(state, line, endLine, False): + break + + # set state.tight if we had an empty line before current tag + # i.e. latest empty line should not count + state.tight = not hasEmptyLines + + line = state.line + + # paragraph might "eat" one newline after it in nested lists + if (line - 1) < endLine and state.isEmpty(line - 1): + hasEmptyLines = True + + if line < endLine and state.isEmpty(line): + hasEmptyLines = True + line += 1 + state.line = line + + def parse( + self, src: str, md: MarkdownIt, env: EnvType, outTokens: list[Token] + ) -> list[Token] | None: + """Process input string and push block tokens into `outTokens`.""" + if not src: + return None + state = StateBlock(src, md, env, outTokens) + self.tokenize(state, state.line, state.lineMax) + return state.tokens diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/parser_core.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/parser_core.py new file mode 100644 index 000000000..ca5ab2566 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/parser_core.py @@ -0,0 +1,45 @@ +""" + * class Core + * + * Top-level rules executor. Glues block/inline parsers and does intermediate + * transformations. +""" +from __future__ import annotations + +from typing import Callable + +from .ruler import Ruler +from .rules_core import ( + block, + inline, + linkify, + normalize, + replace, + smartquotes, + text_join, +) +from .rules_core.state_core import StateCore + +RuleFuncCoreType = Callable[[StateCore], None] + +_rules: list[tuple[str, RuleFuncCoreType]] = [ + ("normalize", normalize), + ("block", block), + ("inline", inline), + ("linkify", linkify), + ("replacements", replace), + ("smartquotes", smartquotes), + ("text_join", text_join), +] + + +class ParserCore: + def __init__(self) -> None: + self.ruler = Ruler[RuleFuncCoreType]() + for name, rule in _rules: + self.ruler.push(name, rule) + + def process(self, state: StateCore) -> None: + """Executes core chain rules.""" + for rule in self.ruler.getRules(""): + rule(state) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/parser_inline.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/parser_inline.py new file mode 100644 index 000000000..0026c3839 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/parser_inline.py @@ -0,0 +1,147 @@ +"""Tokenizes paragraph content. +""" +from __future__ import annotations + +from typing import TYPE_CHECKING, Callable + +from . import rules_inline +from .ruler import Ruler +from .rules_inline.state_inline import StateInline +from .token import Token +from .utils import EnvType + +if TYPE_CHECKING: + from markdown_it import MarkdownIt + + +# Parser rules +RuleFuncInlineType = Callable[[StateInline, bool], bool] +"""(state: StateInline, silent: bool) -> matched: bool) + +`silent` disables token generation, useful for lookahead. +""" +_rules: list[tuple[str, RuleFuncInlineType]] = [ + ("text", rules_inline.text), + ("linkify", rules_inline.linkify), + ("newline", rules_inline.newline), + ("escape", rules_inline.escape), + ("backticks", rules_inline.backtick), + ("strikethrough", rules_inline.strikethrough.tokenize), + ("emphasis", rules_inline.emphasis.tokenize), + ("link", rules_inline.link), + ("image", rules_inline.image), + ("autolink", rules_inline.autolink), + ("html_inline", rules_inline.html_inline), + ("entity", rules_inline.entity), +] + +# Note `rule2` ruleset was created specifically for emphasis/strikethrough +# post-processing and may be changed in the future. +# +# Don't use this for anything except pairs (plugins working with `balance_pairs`). +# +RuleFuncInline2Type = Callable[[StateInline], None] +_rules2: list[tuple[str, RuleFuncInline2Type]] = [ + ("balance_pairs", rules_inline.link_pairs), + ("strikethrough", rules_inline.strikethrough.postProcess), + ("emphasis", rules_inline.emphasis.postProcess), + # rules for pairs separate '**' into its own text tokens, which may be left unused, + # rule below merges unused segments back with the rest of the text + ("fragments_join", rules_inline.fragments_join), +] + + +class ParserInline: + def __init__(self) -> None: + self.ruler = Ruler[RuleFuncInlineType]() + for name, rule in _rules: + self.ruler.push(name, rule) + # Second ruler used for post-processing (e.g. in emphasis-like rules) + self.ruler2 = Ruler[RuleFuncInline2Type]() + for name, rule2 in _rules2: + self.ruler2.push(name, rule2) + + def skipToken(self, state: StateInline) -> None: + """Skip single token by running all rules in validation mode; + returns `True` if any rule reported success + """ + ok = False + pos = state.pos + rules = self.ruler.getRules("") + maxNesting = state.md.options["maxNesting"] + cache = state.cache + + if pos in cache: + state.pos = cache[pos] + return + + if state.level < maxNesting: + for rule in rules: + # Increment state.level and decrement it later to limit recursion. + # It's harmless to do here, because no tokens are created. + # But ideally, we'd need a separate private state variable for this purpose. + state.level += 1 + ok = rule(state, True) + state.level -= 1 + if ok: + break + else: + # Too much nesting, just skip until the end of the paragraph. + # + # NOTE: this will cause links to behave incorrectly in the following case, + # when an amount of `[` is exactly equal to `maxNesting + 1`: + # + # [[[[[[[[[[[[[[[[[[[[[foo]() + # + # TODO: remove this workaround when CM standard will allow nested links + # (we can replace it by preventing links from being parsed in + # validation mode) + # + state.pos = state.posMax + + if not ok: + state.pos += 1 + cache[pos] = state.pos + + def tokenize(self, state: StateInline) -> None: + """Generate tokens for input range.""" + ok = False + rules = self.ruler.getRules("") + end = state.posMax + maxNesting = state.md.options["maxNesting"] + + while state.pos < end: + # Try all possible rules. + # On success, rule should: + # + # - update `state.pos` + # - update `state.tokens` + # - return true + + if state.level < maxNesting: + for rule in rules: + ok = rule(state, False) + if ok: + break + + if ok: + if state.pos >= end: + break + continue + + state.pending += state.src[state.pos] + state.pos += 1 + + if state.pending: + state.pushPending() + + def parse( + self, src: str, md: MarkdownIt, env: EnvType, tokens: list[Token] + ) -> list[Token]: + """Process input string and push inline tokens into `tokens`""" + state = StateInline(src, md, env, tokens) + self.tokenize(state) + rules2 = self.ruler2.getRules("") + for rule in rules2: + rule(state) + return state.tokens diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/port.yaml b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/port.yaml new file mode 100644 index 000000000..3e289e9e2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/port.yaml @@ -0,0 +1,48 @@ +- package: markdown-it/markdown-it + version: 13.0.1 + commit: e843acc9edad115cbf8cf85e676443f01658be08 + date: May 3, 2022 + notes: + - Rename variables that use python built-in names, e.g. + - `max` -> `maximum` + - `len` -> `length` + - `str` -> `string` + - | + Convert JS `for` loops to `while` loops + this is generally the main difference between the codes, + because in python you can't do e.g. `for {i=1;i PresetType: + config = commonmark.make() + config["components"]["core"]["rules"].append("linkify") + config["components"]["block"]["rules"].append("table") + config["components"]["inline"]["rules"].extend(["strikethrough", "linkify"]) + config["components"]["inline"]["rules2"].append("strikethrough") + config["options"]["linkify"] = True + config["options"]["html"] = True + return config diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..be5eadef9 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/commonmark.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/commonmark.cpython-312.pyc new file mode 100644 index 000000000..4a38ae9d2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/commonmark.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/default.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/default.cpython-312.pyc new file mode 100644 index 000000000..b421b2b32 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/default.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/zero.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/zero.cpython-312.pyc new file mode 100644 index 000000000..1368ccec5 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/__pycache__/zero.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/commonmark.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/commonmark.py new file mode 100644 index 000000000..3990d4344 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/presets/commonmark.py @@ -0,0 +1,74 @@ +"""Commonmark default options. + +This differs to presets.default, +primarily in that it allows HTML and does not enable components: + +- block: table +- inline: strikethrough +""" +from ..utils import PresetType + + +def make() -> PresetType: + return { + "options": { + "maxNesting": 20, # Internal protection, recursion limit + "html": True, # Enable HTML tags in source, + # this is just a shorthand for .enable(["html_inline", "html_block"]) + # used by the linkify rule: + "linkify": False, # autoconvert URL-like texts to links + # used by the replacements and smartquotes rules + # Enable some language-neutral replacements + quotes beautification + "typographer": False, + # used by the smartquotes rule: + # Double + single quotes replacement pairs, when typographer enabled, + # and smartquotes on. Could be either a String or an Array. + # + # For example, you can use '«»„“' for Russian, '„“‚‘' for German, + # and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp). + "quotes": "\u201c\u201d\u2018\u2019", # /* “”‘’ */ + # Renderer specific; these options are used directly in the HTML renderer + "xhtmlOut": True, # Use '/' to close single tags (
) + "breaks": False, # Convert '\n' in paragraphs into
+ "langPrefix": "language-", # CSS language prefix for fenced blocks + # Highlighter function. Should return escaped HTML, + # or '' if the source string is not changed and should be escaped externally. + # If result starts with PresetType: + return { + "options": { + "maxNesting": 100, # Internal protection, recursion limit + "html": False, # Enable HTML tags in source + # this is just a shorthand for .disable(["html_inline", "html_block"]) + # used by the linkify rule: + "linkify": False, # autoconvert URL-like texts to links + # used by the replacements and smartquotes rules: + # Enable some language-neutral replacements + quotes beautification + "typographer": False, + # used by the smartquotes rule: + # Double + single quotes replacement pairs, when typographer enabled, + # and smartquotes on. Could be either a String or an Array. + # For example, you can use '«»„“' for Russian, '„“‚‘' for German, + # and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp). + "quotes": "\u201c\u201d\u2018\u2019", # /* “”‘’ */ + # Renderer specific; these options are used directly in the HTML renderer + "xhtmlOut": False, # Use '/' to close single tags (
) + "breaks": False, # Convert '\n' in paragraphs into
+ "langPrefix": "language-", # CSS language prefix for fenced blocks + # Highlighter function. Should return escaped HTML, + # or '' if the source string is not changed and should be escaped externally. + # If result starts with PresetType: + return { + "options": { + "maxNesting": 20, # Internal protection, recursion limit + "html": False, # Enable HTML tags in source + # this is just a shorthand for .disable(["html_inline", "html_block"]) + # used by the linkify rule: + "linkify": False, # autoconvert URL-like texts to links + # used by the replacements and smartquotes rules: + # Enable some language-neutral replacements + quotes beautification + "typographer": False, + # used by the smartquotes rule: + # Double + single quotes replacement pairs, when typographer enabled, + # and smartquotes on. Could be either a String or an Array. + # For example, you can use '«»„“' for Russian, '„“‚‘' for German, + # and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp). + "quotes": "\u201c\u201d\u2018\u2019", # /* “”‘’ */ + # Renderer specific; these options are used directly in the HTML renderer + "xhtmlOut": False, # Use '/' to close single tags (
) + "breaks": False, # Convert '\n' in paragraphs into
+ "langPrefix": "language-", # CSS language prefix for fenced blocks + # Highlighter function. Should return escaped HTML, + # or '' if the source string is not changed and should be escaped externally. + # If result starts with Any: + ... + + +class RendererHTML(RendererProtocol): + """Contains render rules for tokens. Can be updated and extended. + + Example: + + Each rule is called as independent static function with fixed signature: + + :: + + class Renderer: + def token_type_name(self, tokens, idx, options, env) { + # ... + return renderedHTML + + :: + + class CustomRenderer(RendererHTML): + def strong_open(self, tokens, idx, options, env): + return '' + def strong_close(self, tokens, idx, options, env): + return '' + + md = MarkdownIt(renderer_cls=CustomRenderer) + + result = md.render(...) + + See https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js + for more details and examples. + """ + + __output__ = "html" + + def __init__(self, parser: Any = None): + self.rules = { + k: v + for k, v in inspect.getmembers(self, predicate=inspect.ismethod) + if not (k.startswith("render") or k.startswith("_")) + } + + def render( + self, tokens: Sequence[Token], options: OptionsDict, env: EnvType + ) -> str: + """Takes token stream and generates HTML. + + :param tokens: list on block tokens to render + :param options: params of parser instance + :param env: additional data from parsed input + + """ + result = "" + + for i, token in enumerate(tokens): + if token.type == "inline": + if token.children: + result += self.renderInline(token.children, options, env) + elif token.type in self.rules: + result += self.rules[token.type](tokens, i, options, env) + else: + result += self.renderToken(tokens, i, options, env) + + return result + + def renderInline( + self, tokens: Sequence[Token], options: OptionsDict, env: EnvType + ) -> str: + """The same as ``render``, but for single token of `inline` type. + + :param tokens: list on block tokens to render + :param options: params of parser instance + :param env: additional data from parsed input (references, for example) + """ + result = "" + + for i, token in enumerate(tokens): + if token.type in self.rules: + result += self.rules[token.type](tokens, i, options, env) + else: + result += self.renderToken(tokens, i, options, env) + + return result + + def renderToken( + self, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + """Default token renderer. + + Can be overridden by custom function + + :param idx: token index to render + :param options: params of parser instance + """ + result = "" + needLf = False + token = tokens[idx] + + # Tight list paragraphs + if token.hidden: + return "" + + # Insert a newline between hidden paragraph and subsequent opening + # block-level tag. + # + # For example, here we should insert a newline before blockquote: + # - a + # > + # + if token.block and token.nesting != -1 and idx and tokens[idx - 1].hidden: + result += "\n" + + # Add token name, e.g. ``. + # + needLf = False + + result += ">\n" if needLf else ">" + + return result + + @staticmethod + def renderAttrs(token: Token) -> str: + """Render token attributes to string.""" + result = "" + + for key, value in token.attrItems(): + result += " " + escapeHtml(key) + '="' + escapeHtml(str(value)) + '"' + + return result + + def renderInlineAsText( + self, + tokens: Sequence[Token] | None, + options: OptionsDict, + env: EnvType, + ) -> str: + """Special kludge for image `alt` attributes to conform CommonMark spec. + + Don't try to use it! Spec requires to show `alt` content with stripped markup, + instead of simple escaping. + + :param tokens: list on block tokens to render + :param options: params of parser instance + :param env: additional data from parsed input + """ + result = "" + + for token in tokens or []: + if token.type == "text": + result += token.content + elif token.type == "image": + if token.children: + result += self.renderInlineAsText(token.children, options, env) + elif token.type == "softbreak": + result += "\n" + + return result + + ################################################### + + def code_inline( + self, tokens: Sequence[Token], idx: int, options: OptionsDict, env: EnvType + ) -> str: + token = tokens[idx] + return ( + "" + + escapeHtml(tokens[idx].content) + + "" + ) + + def code_block( + self, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + token = tokens[idx] + + return ( + "" + + escapeHtml(tokens[idx].content) + + "\n" + ) + + def fence( + self, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + token = tokens[idx] + info = unescapeAll(token.info).strip() if token.info else "" + langName = "" + langAttrs = "" + + if info: + arr = info.split(maxsplit=1) + langName = arr[0] + if len(arr) == 2: + langAttrs = arr[1] + + if options.highlight: + highlighted = options.highlight( + token.content, langName, langAttrs + ) or escapeHtml(token.content) + else: + highlighted = escapeHtml(token.content) + + if highlighted.startswith("" + + highlighted + + "\n" + ) + + return ( + "

"
+            + highlighted
+            + "
\n" + ) + + def image( + self, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + token = tokens[idx] + + # "alt" attr MUST be set, even if empty. Because it's mandatory and + # should be placed on proper position for tests. + if token.children: + token.attrSet("alt", self.renderInlineAsText(token.children, options, env)) + else: + token.attrSet("alt", "") + + return self.renderToken(tokens, idx, options, env) + + def hardbreak( + self, tokens: Sequence[Token], idx: int, options: OptionsDict, env: EnvType + ) -> str: + return "
\n" if options.xhtmlOut else "
\n" + + def softbreak( + self, tokens: Sequence[Token], idx: int, options: OptionsDict, env: EnvType + ) -> str: + return ( + ("
\n" if options.xhtmlOut else "
\n") if options.breaks else "\n" + ) + + def text( + self, tokens: Sequence[Token], idx: int, options: OptionsDict, env: EnvType + ) -> str: + return escapeHtml(tokens[idx].content) + + def html_block( + self, tokens: Sequence[Token], idx: int, options: OptionsDict, env: EnvType + ) -> str: + return tokens[idx].content + + def html_inline( + self, tokens: Sequence[Token], idx: int, options: OptionsDict, env: EnvType + ) -> str: + return tokens[idx].content diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/ruler.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/ruler.py new file mode 100644 index 000000000..bd8baba34 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/ruler.py @@ -0,0 +1,276 @@ +""" +class Ruler + +Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and +[[MarkdownIt#inline]] to manage sequences of functions (rules): + +- keep rules in defined order +- assign the name to each rule +- enable/disable rules +- add/replace rules +- allow assign rules to additional named chains (in the same) +- caching lists of active rules + +You will not need use this class directly until write plugins. For simple +rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and +[[MarkdownIt.use]]. +""" +from __future__ import annotations + +from collections.abc import Iterable +from dataclasses import dataclass, field +from typing import TYPE_CHECKING, Generic, TypedDict, TypeVar +import warnings + +from markdown_it._compat import DATACLASS_KWARGS + +from .utils import EnvType + +if TYPE_CHECKING: + from markdown_it import MarkdownIt + + +class StateBase: + def __init__(self, src: str, md: MarkdownIt, env: EnvType): + self.src = src + self.env = env + self.md = md + + @property + def src(self) -> str: + return self._src + + @src.setter + def src(self, value: str) -> None: + self._src = value + self._srcCharCode: tuple[int, ...] | None = None + + @property + def srcCharCode(self) -> tuple[int, ...]: + warnings.warn( + "StateBase.srcCharCode is deprecated. Use StateBase.src instead.", + DeprecationWarning, + stacklevel=2, + ) + if self._srcCharCode is None: + self._srcCharCode = tuple(ord(c) for c in self._src) + return self._srcCharCode + + +class RuleOptionsType(TypedDict, total=False): + alt: list[str] + + +RuleFuncTv = TypeVar("RuleFuncTv") +"""A rule function, whose signature is dependent on the state type.""" + + +@dataclass(**DATACLASS_KWARGS) +class Rule(Generic[RuleFuncTv]): + name: str + enabled: bool + fn: RuleFuncTv = field(repr=False) + alt: list[str] + + +class Ruler(Generic[RuleFuncTv]): + def __init__(self) -> None: + # List of added rules. + self.__rules__: list[Rule[RuleFuncTv]] = [] + # Cached rule chains. + # First level - chain name, '' for default. + # Second level - diginal anchor for fast filtering by charcodes. + self.__cache__: dict[str, list[RuleFuncTv]] | None = None + + def __find__(self, name: str) -> int: + """Find rule index by name""" + for i, rule in enumerate(self.__rules__): + if rule.name == name: + return i + return -1 + + def __compile__(self) -> None: + """Build rules lookup cache""" + chains = {""} + # collect unique names + for rule in self.__rules__: + if not rule.enabled: + continue + for name in rule.alt: + chains.add(name) + self.__cache__ = {} + for chain in chains: + self.__cache__[chain] = [] + for rule in self.__rules__: + if not rule.enabled: + continue + if chain and (chain not in rule.alt): + continue + self.__cache__[chain].append(rule.fn) + + def at( + self, ruleName: str, fn: RuleFuncTv, options: RuleOptionsType | None = None + ) -> None: + """Replace rule by name with new function & options. + + :param ruleName: rule name to replace. + :param fn: new rule function. + :param options: new rule options (not mandatory). + :raises: KeyError if name not found + """ + index = self.__find__(ruleName) + options = options or {} + if index == -1: + raise KeyError(f"Parser rule not found: {ruleName}") + self.__rules__[index].fn = fn + self.__rules__[index].alt = options.get("alt", []) + self.__cache__ = None + + def before( + self, + beforeName: str, + ruleName: str, + fn: RuleFuncTv, + options: RuleOptionsType | None = None, + ) -> None: + """Add new rule to chain before one with given name. + + :param beforeName: new rule will be added before this one. + :param ruleName: new rule will be added before this one. + :param fn: new rule function. + :param options: new rule options (not mandatory). + :raises: KeyError if name not found + """ + index = self.__find__(beforeName) + options = options or {} + if index == -1: + raise KeyError(f"Parser rule not found: {beforeName}") + self.__rules__.insert( + index, Rule[RuleFuncTv](ruleName, True, fn, options.get("alt", [])) + ) + self.__cache__ = None + + def after( + self, + afterName: str, + ruleName: str, + fn: RuleFuncTv, + options: RuleOptionsType | None = None, + ) -> None: + """Add new rule to chain after one with given name. + + :param afterName: new rule will be added after this one. + :param ruleName: new rule will be added after this one. + :param fn: new rule function. + :param options: new rule options (not mandatory). + :raises: KeyError if name not found + """ + index = self.__find__(afterName) + options = options or {} + if index == -1: + raise KeyError(f"Parser rule not found: {afterName}") + self.__rules__.insert( + index + 1, Rule[RuleFuncTv](ruleName, True, fn, options.get("alt", [])) + ) + self.__cache__ = None + + def push( + self, ruleName: str, fn: RuleFuncTv, options: RuleOptionsType | None = None + ) -> None: + """Push new rule to the end of chain. + + :param ruleName: new rule will be added to the end of chain. + :param fn: new rule function. + :param options: new rule options (not mandatory). + + """ + self.__rules__.append( + Rule[RuleFuncTv](ruleName, True, fn, (options or {}).get("alt", [])) + ) + self.__cache__ = None + + def enable( + self, names: str | Iterable[str], ignoreInvalid: bool = False + ) -> list[str]: + """Enable rules with given names. + + :param names: name or list of rule names to enable. + :param ignoreInvalid: ignore errors when rule not found + :raises: KeyError if name not found and not ignoreInvalid + :return: list of found rule names + """ + if isinstance(names, str): + names = [names] + result: list[str] = [] + for name in names: + idx = self.__find__(name) + if (idx < 0) and ignoreInvalid: + continue + if (idx < 0) and not ignoreInvalid: + raise KeyError(f"Rules manager: invalid rule name {name}") + self.__rules__[idx].enabled = True + result.append(name) + self.__cache__ = None + return result + + def enableOnly( + self, names: str | Iterable[str], ignoreInvalid: bool = False + ) -> list[str]: + """Enable rules with given names, and disable everything else. + + :param names: name or list of rule names to enable. + :param ignoreInvalid: ignore errors when rule not found + :raises: KeyError if name not found and not ignoreInvalid + :return: list of found rule names + """ + if isinstance(names, str): + names = [names] + for rule in self.__rules__: + rule.enabled = False + return self.enable(names, ignoreInvalid) + + def disable( + self, names: str | Iterable[str], ignoreInvalid: bool = False + ) -> list[str]: + """Disable rules with given names. + + :param names: name or list of rule names to enable. + :param ignoreInvalid: ignore errors when rule not found + :raises: KeyError if name not found and not ignoreInvalid + :return: list of found rule names + """ + if isinstance(names, str): + names = [names] + result = [] + for name in names: + idx = self.__find__(name) + if (idx < 0) and ignoreInvalid: + continue + if (idx < 0) and not ignoreInvalid: + raise KeyError(f"Rules manager: invalid rule name {name}") + self.__rules__[idx].enabled = False + result.append(name) + self.__cache__ = None + return result + + def getRules(self, chainName: str = "") -> list[RuleFuncTv]: + """Return array of active functions (rules) for given chain name. + It analyzes rules configuration, compiles caches if not exists and returns result. + + Default chain name is `''` (empty string). It can't be skipped. + That's done intentionally, to keep signature monomorphic for high speed. + + """ + if self.__cache__ is None: + self.__compile__() + assert self.__cache__ is not None + # Chain can be empty, if rules disabled. But we still have to return Array. + return self.__cache__.get(chainName, []) or [] + + def get_all_rules(self) -> list[str]: + """Return all available rule names.""" + return [r.name for r in self.__rules__] + + def get_active_rules(self) -> list[str]: + """Return the active rule names.""" + return [r.name for r in self.__rules__ if r.enabled] diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__init__.py new file mode 100644 index 000000000..bcf138df9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__init__.py @@ -0,0 +1,27 @@ +__all__ = ( + "StateBlock", + "paragraph", + "heading", + "lheading", + "code", + "fence", + "hr", + "list_block", + "reference", + "blockquote", + "html_block", + "table", +) + +from .blockquote import blockquote +from .code import code +from .fence import fence +from .heading import heading +from .hr import hr +from .html_block import html_block +from .lheading import lheading +from .list import list_block +from .paragraph import paragraph +from .reference import reference +from .state_block import StateBlock +from .table import table diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..93e558453 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/blockquote.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/blockquote.cpython-312.pyc new file mode 100644 index 000000000..01e4d99fe Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/blockquote.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/code.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/code.cpython-312.pyc new file mode 100644 index 000000000..000b7c3cd Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/code.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/fence.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/fence.cpython-312.pyc new file mode 100644 index 000000000..1937e773d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/fence.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/heading.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/heading.cpython-312.pyc new file mode 100644 index 000000000..e97906364 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/heading.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/hr.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/hr.cpython-312.pyc new file mode 100644 index 000000000..01289ae34 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/hr.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/html_block.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/html_block.cpython-312.pyc new file mode 100644 index 000000000..0ac023e2a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/html_block.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/lheading.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/lheading.cpython-312.pyc new file mode 100644 index 000000000..ffc0c0889 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/lheading.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/list.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/list.cpython-312.pyc new file mode 100644 index 000000000..d9bc4e0e1 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/list.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/paragraph.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/paragraph.cpython-312.pyc new file mode 100644 index 000000000..e755a247b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/paragraph.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/reference.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/reference.cpython-312.pyc new file mode 100644 index 000000000..ae9d5e4b6 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/reference.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/state_block.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/state_block.cpython-312.pyc new file mode 100644 index 000000000..8530d4192 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/state_block.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/table.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/table.cpython-312.pyc new file mode 100644 index 000000000..92ca6bcf2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/__pycache__/table.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/blockquote.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/blockquote.py new file mode 100644 index 000000000..0c9081b9c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/blockquote.py @@ -0,0 +1,299 @@ +# Block quotes +from __future__ import annotations + +import logging + +from ..common.utils import isStrSpace +from .state_block import StateBlock + +LOGGER = logging.getLogger(__name__) + + +def blockquote(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + LOGGER.debug( + "entering blockquote: %s, %s, %s, %s", state, startLine, endLine, silent + ) + + oldLineMax = state.lineMax + pos = state.bMarks[startLine] + state.tShift[startLine] + max = state.eMarks[startLine] + + if state.is_code_block(startLine): + return False + + # check the block quote marker + try: + if state.src[pos] != ">": + return False + except IndexError: + return False + pos += 1 + + # we know that it's going to be a valid blockquote, + # so no point trying to find the end of it in silent mode + if silent: + return True + + # set offset past spaces and ">" + initial = offset = state.sCount[startLine] + 1 + + try: + second_char: str | None = state.src[pos] + except IndexError: + second_char = None + + # skip one optional space after '>' + if second_char == " ": + # ' > test ' + # ^ -- position start of line here: + pos += 1 + initial += 1 + offset += 1 + adjustTab = False + spaceAfterMarker = True + elif second_char == "\t": + spaceAfterMarker = True + + if (state.bsCount[startLine] + offset) % 4 == 3: + # ' >\t test ' + # ^ -- position start of line here (tab has width==1) + pos += 1 + initial += 1 + offset += 1 + adjustTab = False + else: + # ' >\t test ' + # ^ -- position start of line here + shift bsCount slightly + # to make extra space appear + adjustTab = True + + else: + spaceAfterMarker = False + + oldBMarks = [state.bMarks[startLine]] + state.bMarks[startLine] = pos + + while pos < max: + ch = state.src[pos] + + if isStrSpace(ch): + if ch == "\t": + offset += ( + 4 + - (offset + state.bsCount[startLine] + (1 if adjustTab else 0)) % 4 + ) + else: + offset += 1 + + else: + break + + pos += 1 + + oldBSCount = [state.bsCount[startLine]] + state.bsCount[startLine] = ( + state.sCount[startLine] + 1 + (1 if spaceAfterMarker else 0) + ) + + lastLineEmpty = pos >= max + + oldSCount = [state.sCount[startLine]] + state.sCount[startLine] = offset - initial + + oldTShift = [state.tShift[startLine]] + state.tShift[startLine] = pos - state.bMarks[startLine] + + terminatorRules = state.md.block.ruler.getRules("blockquote") + + oldParentType = state.parentType + state.parentType = "blockquote" + + # Search the end of the block + # + # Block ends with either: + # 1. an empty line outside: + # ``` + # > test + # + # ``` + # 2. an empty line inside: + # ``` + # > + # test + # ``` + # 3. another tag: + # ``` + # > test + # - - - + # ``` + + # for (nextLine = startLine + 1; nextLine < endLine; nextLine++) { + nextLine = startLine + 1 + while nextLine < endLine: + # check if it's outdented, i.e. it's inside list item and indented + # less than said list item: + # + # ``` + # 1. anything + # > current blockquote + # 2. checking this line + # ``` + isOutdented = state.sCount[nextLine] < state.blkIndent + + pos = state.bMarks[nextLine] + state.tShift[nextLine] + max = state.eMarks[nextLine] + + if pos >= max: + # Case 1: line is not inside the blockquote, and this line is empty. + break + + evaluatesTrue = state.src[pos] == ">" and not isOutdented + pos += 1 + if evaluatesTrue: + # This line is inside the blockquote. + + # set offset past spaces and ">" + initial = offset = state.sCount[nextLine] + 1 + + try: + next_char: str | None = state.src[pos] + except IndexError: + next_char = None + + # skip one optional space after '>' + if next_char == " ": + # ' > test ' + # ^ -- position start of line here: + pos += 1 + initial += 1 + offset += 1 + adjustTab = False + spaceAfterMarker = True + elif next_char == "\t": + spaceAfterMarker = True + + if (state.bsCount[nextLine] + offset) % 4 == 3: + # ' >\t test ' + # ^ -- position start of line here (tab has width==1) + pos += 1 + initial += 1 + offset += 1 + adjustTab = False + else: + # ' >\t test ' + # ^ -- position start of line here + shift bsCount slightly + # to make extra space appear + adjustTab = True + + else: + spaceAfterMarker = False + + oldBMarks.append(state.bMarks[nextLine]) + state.bMarks[nextLine] = pos + + while pos < max: + ch = state.src[pos] + + if isStrSpace(ch): + if ch == "\t": + offset += ( + 4 + - ( + offset + + state.bsCount[nextLine] + + (1 if adjustTab else 0) + ) + % 4 + ) + else: + offset += 1 + else: + break + + pos += 1 + + lastLineEmpty = pos >= max + + oldBSCount.append(state.bsCount[nextLine]) + state.bsCount[nextLine] = ( + state.sCount[nextLine] + 1 + (1 if spaceAfterMarker else 0) + ) + + oldSCount.append(state.sCount[nextLine]) + state.sCount[nextLine] = offset - initial + + oldTShift.append(state.tShift[nextLine]) + state.tShift[nextLine] = pos - state.bMarks[nextLine] + + nextLine += 1 + continue + + # Case 2: line is not inside the blockquote, and the last line was empty. + if lastLineEmpty: + break + + # Case 3: another tag found. + terminate = False + + for terminatorRule in terminatorRules: + if terminatorRule(state, nextLine, endLine, True): + terminate = True + break + + if terminate: + # Quirk to enforce "hard termination mode" for paragraphs; + # normally if you call `tokenize(state, startLine, nextLine)`, + # paragraphs will look below nextLine for paragraph continuation, + # but if blockquote is terminated by another tag, they shouldn't + state.lineMax = nextLine + + if state.blkIndent != 0: + # state.blkIndent was non-zero, we now set it to zero, + # so we need to re-calculate all offsets to appear as + # if indent wasn't changed + oldBMarks.append(state.bMarks[nextLine]) + oldBSCount.append(state.bsCount[nextLine]) + oldTShift.append(state.tShift[nextLine]) + oldSCount.append(state.sCount[nextLine]) + state.sCount[nextLine] -= state.blkIndent + + break + + oldBMarks.append(state.bMarks[nextLine]) + oldBSCount.append(state.bsCount[nextLine]) + oldTShift.append(state.tShift[nextLine]) + oldSCount.append(state.sCount[nextLine]) + + # A negative indentation means that this is a paragraph continuation + # + state.sCount[nextLine] = -1 + + nextLine += 1 + + oldIndent = state.blkIndent + state.blkIndent = 0 + + token = state.push("blockquote_open", "blockquote", 1) + token.markup = ">" + token.map = lines = [startLine, 0] + + state.md.block.tokenize(state, startLine, nextLine) + + token = state.push("blockquote_close", "blockquote", -1) + token.markup = ">" + + state.lineMax = oldLineMax + state.parentType = oldParentType + lines[1] = state.line + + # Restore original tShift; this might not be necessary since the parser + # has already been here, but just to make sure we can do that. + for i, item in enumerate(oldTShift): + state.bMarks[i + startLine] = oldBMarks[i] + state.tShift[i + startLine] = item + state.sCount[i + startLine] = oldSCount[i] + state.bsCount[i + startLine] = oldBSCount[i] + + state.blkIndent = oldIndent + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/code.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/code.py new file mode 100644 index 000000000..89db9cec4 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/code.py @@ -0,0 +1,35 @@ +"""Code block (4 spaces padded).""" +import logging + +from .state_block import StateBlock + +LOGGER = logging.getLogger(__name__) + + +def code(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + LOGGER.debug("entering code: %s, %s, %s, %s", state, startLine, endLine, silent) + + if not state.is_code_block(startLine): + return False + + last = nextLine = startLine + 1 + + while nextLine < endLine: + if state.isEmpty(nextLine): + nextLine += 1 + continue + + if state.is_code_block(nextLine): + nextLine += 1 + last = nextLine + continue + + break + + state.line = last + + token = state.push("code_block", "code", 0) + token.content = state.getLines(startLine, last, 4 + state.blkIndent, False) + "\n" + token.map = [startLine, state.line] + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/fence.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/fence.py new file mode 100644 index 000000000..263f1b8de --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/fence.py @@ -0,0 +1,101 @@ +# fences (``` lang, ~~~ lang) +import logging + +from .state_block import StateBlock + +LOGGER = logging.getLogger(__name__) + + +def fence(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + LOGGER.debug("entering fence: %s, %s, %s, %s", state, startLine, endLine, silent) + + haveEndMarker = False + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + if state.is_code_block(startLine): + return False + + if pos + 3 > maximum: + return False + + marker = state.src[pos] + + if marker not in ("~", "`"): + return False + + # scan marker length + mem = pos + pos = state.skipCharsStr(pos, marker) + + length = pos - mem + + if length < 3: + return False + + markup = state.src[mem:pos] + params = state.src[pos:maximum] + + if marker == "`" and marker in params: + return False + + # Since start is found, we can report success here in validation mode + if silent: + return True + + # search end of block + nextLine = startLine + + while True: + nextLine += 1 + if nextLine >= endLine: + # unclosed block should be autoclosed by end of document. + # also block seems to be autoclosed by end of parent + break + + pos = mem = state.bMarks[nextLine] + state.tShift[nextLine] + maximum = state.eMarks[nextLine] + + if pos < maximum and state.sCount[nextLine] < state.blkIndent: + # non-empty line with negative indent should stop the list: + # - ``` + # test + break + + try: + if state.src[pos] != marker: + continue + except IndexError: + break + + if state.is_code_block(nextLine): + continue + + pos = state.skipCharsStr(pos, marker) + + # closing code fence must be at least as long as the opening one + if pos - mem < length: + continue + + # make sure tail has spaces only + pos = state.skipSpaces(pos) + + if pos < maximum: + continue + + haveEndMarker = True + # found! + break + + # If a fence has heading spaces, they should be removed from its inner block + length = state.sCount[startLine] + + state.line = nextLine + (1 if haveEndMarker else 0) + + token = state.push("fence", "code", 0) + token.info = params + token.content = state.getLines(startLine + 1, nextLine, length, True) + token.markup = markup + token.map = [startLine, state.line] + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/heading.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/heading.py new file mode 100644 index 000000000..850ffb504 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/heading.py @@ -0,0 +1,68 @@ +""" Atex heading (#, ##, ...) """ +from __future__ import annotations + +import logging + +from ..common.utils import isStrSpace +from .state_block import StateBlock + +LOGGER = logging.getLogger(__name__) + + +def heading(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + LOGGER.debug("entering heading: %s, %s, %s, %s", state, startLine, endLine, silent) + + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + if state.is_code_block(startLine): + return False + + ch: str | None = state.src[pos] + + if ch != "#" or pos >= maximum: + return False + + # count heading level + level = 1 + pos += 1 + try: + ch = state.src[pos] + except IndexError: + ch = None + while ch == "#" and pos < maximum and level <= 6: + level += 1 + pos += 1 + try: + ch = state.src[pos] + except IndexError: + ch = None + + if level > 6 or (pos < maximum and not isStrSpace(ch)): + return False + + if silent: + return True + + # Let's cut tails like ' ### ' from the end of string + + maximum = state.skipSpacesBack(maximum, pos) + tmp = state.skipCharsStrBack(maximum, "#", pos) + if tmp > pos and isStrSpace(state.src[tmp - 1]): + maximum = tmp + + state.line = startLine + 1 + + token = state.push("heading_open", "h" + str(level), 1) + token.markup = "########"[:level] + token.map = [startLine, state.line] + + token = state.push("inline", "", 0) + token.content = state.src[pos:maximum].strip() + token.map = [startLine, state.line] + token.children = [] + + token = state.push("heading_close", "h" + str(level), -1) + token.markup = "########"[:level] + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/hr.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/hr.py new file mode 100644 index 000000000..16df05f2a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/hr.py @@ -0,0 +1,55 @@ +"""Horizontal rule + +At least 3 of these characters on a line * - _ +""" +import logging + +from ..common.utils import isStrSpace +from .state_block import StateBlock + +LOGGER = logging.getLogger(__name__) + + +def hr(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + LOGGER.debug("entering hr: %s, %s, %s, %s", state, startLine, endLine, silent) + + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + if state.is_code_block(startLine): + return False + + try: + marker = state.src[pos] + except IndexError: + return False + pos += 1 + + # Check hr marker + if marker not in ("*", "-", "_"): + return False + + # markers can be mixed with spaces, but there should be at least 3 of them + + cnt = 1 + while pos < maximum: + ch = state.src[pos] + pos += 1 + if ch != marker and not isStrSpace(ch): + return False + if ch == marker: + cnt += 1 + + if cnt < 3: + return False + + if silent: + return True + + state.line = startLine + 1 + + token = state.push("hr", "hr", 0) + token.map = [startLine, state.line] + token.markup = marker * (cnt + 1) + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/html_block.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/html_block.py new file mode 100644 index 000000000..3d43f6ee1 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/html_block.py @@ -0,0 +1,90 @@ +# HTML block +from __future__ import annotations + +import logging +import re + +from ..common.html_blocks import block_names +from ..common.html_re import HTML_OPEN_CLOSE_TAG_STR +from .state_block import StateBlock + +LOGGER = logging.getLogger(__name__) + +# An array of opening and corresponding closing sequences for html tags, +# last argument defines whether it can terminate a paragraph or not +HTML_SEQUENCES: list[tuple[re.Pattern[str], re.Pattern[str], bool]] = [ + ( + re.compile(r"^<(script|pre|style|textarea)(?=(\s|>|$))", re.IGNORECASE), + re.compile(r"<\/(script|pre|style|textarea)>", re.IGNORECASE), + True, + ), + (re.compile(r"^"), True), + (re.compile(r"^<\?"), re.compile(r"\?>"), True), + (re.compile(r"^"), True), + (re.compile(r"^"), True), + ( + re.compile("^|$))", re.IGNORECASE), + re.compile(r"^$"), + True, + ), + (re.compile(HTML_OPEN_CLOSE_TAG_STR + "\\s*$"), re.compile(r"^$"), False), +] + + +def html_block(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + LOGGER.debug( + "entering html_block: %s, %s, %s, %s", state, startLine, endLine, silent + ) + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + if state.is_code_block(startLine): + return False + + if not state.md.options.get("html", None): + return False + + if state.src[pos] != "<": + return False + + lineText = state.src[pos:maximum] + + html_seq = None + for HTML_SEQUENCE in HTML_SEQUENCES: + if HTML_SEQUENCE[0].search(lineText): + html_seq = HTML_SEQUENCE + break + + if not html_seq: + return False + + if silent: + # true if this sequence can be a terminator, false otherwise + return html_seq[2] + + nextLine = startLine + 1 + + # If we are here - we detected HTML block. + # Let's roll down till block end. + if not html_seq[1].search(lineText): + while nextLine < endLine: + if state.sCount[nextLine] < state.blkIndent: + break + + pos = state.bMarks[nextLine] + state.tShift[nextLine] + maximum = state.eMarks[nextLine] + lineText = state.src[pos:maximum] + + if html_seq[1].search(lineText): + if len(lineText) != 0: + nextLine += 1 + break + nextLine += 1 + + state.line = nextLine + + token = state.push("html_block", "", 0) + token.map = [startLine, nextLine] + token.content = state.getLines(startLine, nextLine, state.blkIndent, True) + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/lheading.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/lheading.py new file mode 100644 index 000000000..3522207ab --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/lheading.py @@ -0,0 +1,86 @@ +# lheading (---, ==) +import logging + +from .state_block import StateBlock + +LOGGER = logging.getLogger(__name__) + + +def lheading(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + LOGGER.debug("entering lheading: %s, %s, %s, %s", state, startLine, endLine, silent) + + level = None + nextLine = startLine + 1 + ruler = state.md.block.ruler + terminatorRules = ruler.getRules("paragraph") + + if state.is_code_block(startLine): + return False + + oldParentType = state.parentType + state.parentType = "paragraph" # use paragraph to match terminatorRules + + # jump line-by-line until empty one or EOF + while nextLine < endLine and not state.isEmpty(nextLine): + # this would be a code block normally, but after paragraph + # it's considered a lazy continuation regardless of what's there + if state.sCount[nextLine] - state.blkIndent > 3: + nextLine += 1 + continue + + # Check for underline in setext header + if state.sCount[nextLine] >= state.blkIndent: + pos = state.bMarks[nextLine] + state.tShift[nextLine] + maximum = state.eMarks[nextLine] + + if pos < maximum: + marker = state.src[pos] + + if marker in ("-", "="): + pos = state.skipCharsStr(pos, marker) + pos = state.skipSpaces(pos) + + # /* = */ + if pos >= maximum: + level = 1 if marker == "=" else 2 + break + + # quirk for blockquotes, this line should already be checked by that rule + if state.sCount[nextLine] < 0: + nextLine += 1 + continue + + # Some tags can terminate paragraph without empty line. + terminate = False + for terminatorRule in terminatorRules: + if terminatorRule(state, nextLine, endLine, True): + terminate = True + break + if terminate: + break + + nextLine += 1 + + if not level: + # Didn't find valid underline + return False + + content = state.getLines(startLine, nextLine, state.blkIndent, False).strip() + + state.line = nextLine + 1 + + token = state.push("heading_open", "h" + str(level), 1) + token.markup = marker + token.map = [startLine, state.line] + + token = state.push("inline", "", 0) + token.content = content + token.map = [startLine, state.line - 1] + token.children = [] + + token = state.push("heading_close", "h" + str(level), -1) + token.markup = marker + + state.parentType = oldParentType + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/list.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/list.py new file mode 100644 index 000000000..d8070d747 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/list.py @@ -0,0 +1,345 @@ +# Lists +import logging + +from ..common.utils import isStrSpace +from .state_block import StateBlock + +LOGGER = logging.getLogger(__name__) + + +# Search `[-+*][\n ]`, returns next pos after marker on success +# or -1 on fail. +def skipBulletListMarker(state: StateBlock, startLine: int) -> int: + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + try: + marker = state.src[pos] + except IndexError: + return -1 + pos += 1 + + if marker not in ("*", "-", "+"): + return -1 + + if pos < maximum: + ch = state.src[pos] + + if not isStrSpace(ch): + # " -test " - is not a list item + return -1 + + return pos + + +# Search `\d+[.)][\n ]`, returns next pos after marker on success +# or -1 on fail. +def skipOrderedListMarker(state: StateBlock, startLine: int) -> int: + start = state.bMarks[startLine] + state.tShift[startLine] + pos = start + maximum = state.eMarks[startLine] + + # List marker should have at least 2 chars (digit + dot) + if pos + 1 >= maximum: + return -1 + + ch = state.src[pos] + pos += 1 + + ch_ord = ord(ch) + # /* 0 */ /* 9 */ + if ch_ord < 0x30 or ch_ord > 0x39: + return -1 + + while True: + # EOL -> fail + if pos >= maximum: + return -1 + + ch = state.src[pos] + pos += 1 + + # /* 0 */ /* 9 */ + ch_ord = ord(ch) + if ch_ord >= 0x30 and ch_ord <= 0x39: + # List marker should have no more than 9 digits + # (prevents integer overflow in browsers) + if pos - start >= 10: + return -1 + + continue + + # found valid marker + if ch in (")", "."): + break + + return -1 + + if pos < maximum: + ch = state.src[pos] + + if not isStrSpace(ch): + # " 1.test " - is not a list item + return -1 + + return pos + + +def markTightParagraphs(state: StateBlock, idx: int) -> None: + level = state.level + 2 + + i = idx + 2 + length = len(state.tokens) - 2 + while i < length: + if state.tokens[i].level == level and state.tokens[i].type == "paragraph_open": + state.tokens[i + 2].hidden = True + state.tokens[i].hidden = True + i += 2 + i += 1 + + +def list_block(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + LOGGER.debug("entering list: %s, %s, %s, %s", state, startLine, endLine, silent) + + isTerminatingParagraph = False + tight = True + + if state.is_code_block(startLine): + return False + + # Special case: + # - item 1 + # - item 2 + # - item 3 + # - item 4 + # - this one is a paragraph continuation + if ( + state.listIndent >= 0 + and state.sCount[startLine] - state.listIndent >= 4 + and state.sCount[startLine] < state.blkIndent + ): + return False + + # limit conditions when list can interrupt + # a paragraph (validation mode only) + # Next list item should still terminate previous list item + # + # This code can fail if plugins use blkIndent as well as lists, + # but I hope the spec gets fixed long before that happens. + # + if ( + silent + and state.parentType == "paragraph" + and state.sCount[startLine] >= state.blkIndent + ): + isTerminatingParagraph = True + + # Detect list type and position after marker + posAfterMarker = skipOrderedListMarker(state, startLine) + if posAfterMarker >= 0: + isOrdered = True + start = state.bMarks[startLine] + state.tShift[startLine] + markerValue = int(state.src[start : posAfterMarker - 1]) + + # If we're starting a new ordered list right after + # a paragraph, it should start with 1. + if isTerminatingParagraph and markerValue != 1: + return False + else: + posAfterMarker = skipBulletListMarker(state, startLine) + if posAfterMarker >= 0: + isOrdered = False + else: + return False + + # If we're starting a new unordered list right after + # a paragraph, first line should not be empty. + if ( + isTerminatingParagraph + and state.skipSpaces(posAfterMarker) >= state.eMarks[startLine] + ): + return False + + # We should terminate list on style change. Remember first one to compare. + markerChar = state.src[posAfterMarker - 1] + + # For validation mode we can terminate immediately + if silent: + return True + + # Start list + listTokIdx = len(state.tokens) + + if isOrdered: + token = state.push("ordered_list_open", "ol", 1) + if markerValue != 1: + token.attrs = {"start": markerValue} + + else: + token = state.push("bullet_list_open", "ul", 1) + + token.map = listLines = [startLine, 0] + token.markup = markerChar + + # + # Iterate list items + # + + nextLine = startLine + prevEmptyEnd = False + terminatorRules = state.md.block.ruler.getRules("list") + + oldParentType = state.parentType + state.parentType = "list" + + while nextLine < endLine: + pos = posAfterMarker + maximum = state.eMarks[nextLine] + + initial = offset = ( + state.sCount[nextLine] + + posAfterMarker + - (state.bMarks[startLine] + state.tShift[startLine]) + ) + + while pos < maximum: + ch = state.src[pos] + + if ch == "\t": + offset += 4 - (offset + state.bsCount[nextLine]) % 4 + elif ch == " ": + offset += 1 + else: + break + + pos += 1 + + contentStart = pos + + # trimming space in "- \n 3" case, indent is 1 here + indentAfterMarker = 1 if contentStart >= maximum else offset - initial + + # If we have more than 4 spaces, the indent is 1 + # (the rest is just indented code block) + if indentAfterMarker > 4: + indentAfterMarker = 1 + + # " - test" + # ^^^^^ - calculating total length of this thing + indent = initial + indentAfterMarker + + # Run subparser & write tokens + token = state.push("list_item_open", "li", 1) + token.markup = markerChar + token.map = itemLines = [startLine, 0] + if isOrdered: + token.info = state.src[start : posAfterMarker - 1] + + # change current state, then restore it after parser subcall + oldTight = state.tight + oldTShift = state.tShift[startLine] + oldSCount = state.sCount[startLine] + + # - example list + # ^ listIndent position will be here + # ^ blkIndent position will be here + # + oldListIndent = state.listIndent + state.listIndent = state.blkIndent + state.blkIndent = indent + + state.tight = True + state.tShift[startLine] = contentStart - state.bMarks[startLine] + state.sCount[startLine] = offset + + if contentStart >= maximum and state.isEmpty(startLine + 1): + # workaround for this case + # (list item is empty, list terminates before "foo"): + # ~~~~~~~~ + # - + # + # foo + # ~~~~~~~~ + state.line = min(state.line + 2, endLine) + else: + # NOTE in list.js this was: + # state.md.block.tokenize(state, startLine, endLine, True) + # but tokeniz does not take the final parameter + state.md.block.tokenize(state, startLine, endLine) + + # If any of list item is tight, mark list as tight + if (not state.tight) or prevEmptyEnd: + tight = False + + # Item become loose if finish with empty line, + # but we should filter last element, because it means list finish + prevEmptyEnd = (state.line - startLine) > 1 and state.isEmpty(state.line - 1) + + state.blkIndent = state.listIndent + state.listIndent = oldListIndent + state.tShift[startLine] = oldTShift + state.sCount[startLine] = oldSCount + state.tight = oldTight + + token = state.push("list_item_close", "li", -1) + token.markup = markerChar + + nextLine = startLine = state.line + itemLines[1] = nextLine + + if nextLine >= endLine: + break + + contentStart = state.bMarks[startLine] + + # + # Try to check if list is terminated or continued. + # + if state.sCount[nextLine] < state.blkIndent: + break + + if state.is_code_block(startLine): + break + + # fail if terminating block found + terminate = False + for terminatorRule in terminatorRules: + if terminatorRule(state, nextLine, endLine, True): + terminate = True + break + + if terminate: + break + + # fail if list has another type + if isOrdered: + posAfterMarker = skipOrderedListMarker(state, nextLine) + if posAfterMarker < 0: + break + start = state.bMarks[nextLine] + state.tShift[nextLine] + else: + posAfterMarker = skipBulletListMarker(state, nextLine) + if posAfterMarker < 0: + break + + if markerChar != state.src[posAfterMarker - 1]: + break + + # Finalize list + if isOrdered: + token = state.push("ordered_list_close", "ol", -1) + else: + token = state.push("bullet_list_close", "ul", -1) + + token.markup = markerChar + + listLines[1] = nextLine + state.line = nextLine + + state.parentType = oldParentType + + # mark paragraphs tight if needed + if tight: + markTightParagraphs(state, listTokIdx) + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/paragraph.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/paragraph.py new file mode 100644 index 000000000..5388a4b14 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/paragraph.py @@ -0,0 +1,65 @@ +"""Paragraph.""" +import logging + +from .state_block import StateBlock + +LOGGER = logging.getLogger(__name__) + + +def paragraph(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + LOGGER.debug( + "entering paragraph: %s, %s, %s, %s", state, startLine, endLine, silent + ) + + nextLine = startLine + 1 + ruler = state.md.block.ruler + terminatorRules = ruler.getRules("paragraph") + endLine = state.lineMax + + oldParentType = state.parentType + state.parentType = "paragraph" + + # jump line-by-line until empty one or EOF + while nextLine < endLine: + if state.isEmpty(nextLine): + break + # this would be a code block normally, but after paragraph + # it's considered a lazy continuation regardless of what's there + if state.sCount[nextLine] - state.blkIndent > 3: + nextLine += 1 + continue + + # quirk for blockquotes, this line should already be checked by that rule + if state.sCount[nextLine] < 0: + nextLine += 1 + continue + + # Some tags can terminate paragraph without empty line. + terminate = False + for terminatorRule in terminatorRules: + if terminatorRule(state, nextLine, endLine, True): + terminate = True + break + + if terminate: + break + + nextLine += 1 + + content = state.getLines(startLine, nextLine, state.blkIndent, False).strip() + + state.line = nextLine + + token = state.push("paragraph_open", "p", 1) + token.map = [startLine, state.line] + + token = state.push("inline", "", 0) + token.content = content + token.map = [startLine, state.line] + token.children = [] + + token = state.push("paragraph_close", "p", -1) + + state.parentType = oldParentType + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/reference.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/reference.py new file mode 100644 index 000000000..b77944b2e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/reference.py @@ -0,0 +1,215 @@ +import logging + +from ..common.utils import charCodeAt, isSpace, normalizeReference +from .state_block import StateBlock + +LOGGER = logging.getLogger(__name__) + + +def reference(state: StateBlock, startLine: int, _endLine: int, silent: bool) -> bool: + LOGGER.debug( + "entering reference: %s, %s, %s, %s", state, startLine, _endLine, silent + ) + + lines = 0 + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + nextLine = startLine + 1 + + if state.is_code_block(startLine): + return False + + if state.src[pos] != "[": + return False + + # Simple check to quickly interrupt scan on [link](url) at the start of line. + # Can be useful on practice: https:#github.com/markdown-it/markdown-it/issues/54 + while pos < maximum: + # /* ] */ /* \ */ /* : */ + if state.src[pos] == "]" and state.src[pos - 1] != "\\": + if pos + 1 == maximum: + return False + if state.src[pos + 1] != ":": + return False + break + pos += 1 + + endLine = state.lineMax + + # jump line-by-line until empty one or EOF + terminatorRules = state.md.block.ruler.getRules("reference") + + oldParentType = state.parentType + state.parentType = "reference" + + while nextLine < endLine and not state.isEmpty(nextLine): + # this would be a code block normally, but after paragraph + # it's considered a lazy continuation regardless of what's there + if state.sCount[nextLine] - state.blkIndent > 3: + nextLine += 1 + continue + + # quirk for blockquotes, this line should already be checked by that rule + if state.sCount[nextLine] < 0: + nextLine += 1 + continue + + # Some tags can terminate paragraph without empty line. + terminate = False + for terminatorRule in terminatorRules: + if terminatorRule(state, nextLine, endLine, True): + terminate = True + break + + if terminate: + break + + nextLine += 1 + + string = state.getLines(startLine, nextLine, state.blkIndent, False).strip() + maximum = len(string) + + labelEnd = None + pos = 1 + while pos < maximum: + ch = charCodeAt(string, pos) + if ch == 0x5B: # /* [ */ + return False + elif ch == 0x5D: # /* ] */ + labelEnd = pos + break + elif ch == 0x0A: # /* \n */ + lines += 1 + elif ch == 0x5C: # /* \ */ + pos += 1 + if pos < maximum and charCodeAt(string, pos) == 0x0A: + lines += 1 + pos += 1 + + if ( + labelEnd is None or labelEnd < 0 or charCodeAt(string, labelEnd + 1) != 0x3A + ): # /* : */ + return False + + # [label]: destination 'title' + # ^^^ skip optional whitespace here + pos = labelEnd + 2 + while pos < maximum: + ch = charCodeAt(string, pos) + if ch == 0x0A: + lines += 1 + elif isSpace(ch): + pass + else: + break + pos += 1 + + # [label]: destination 'title' + # ^^^^^^^^^^^ parse this + res = state.md.helpers.parseLinkDestination(string, pos, maximum) + if not res.ok: + return False + + href = state.md.normalizeLink(res.str) + if not state.md.validateLink(href): + return False + + pos = res.pos + lines += res.lines + + # save cursor state, we could require to rollback later + destEndPos = pos + destEndLineNo = lines + + # [label]: destination 'title' + # ^^^ skipping those spaces + start = pos + while pos < maximum: + ch = charCodeAt(string, pos) + if ch == 0x0A: + lines += 1 + elif isSpace(ch): + pass + else: + break + pos += 1 + + # [label]: destination 'title' + # ^^^^^^^ parse this + res = state.md.helpers.parseLinkTitle(string, pos, maximum) + if pos < maximum and start != pos and res.ok: + title = res.str + pos = res.pos + lines += res.lines + else: + title = "" + pos = destEndPos + lines = destEndLineNo + + # skip trailing spaces until the rest of the line + while pos < maximum: + ch = charCodeAt(string, pos) + if not isSpace(ch): + break + pos += 1 + + if pos < maximum and charCodeAt(string, pos) != 0x0A and title: + # garbage at the end of the line after title, + # but it could still be a valid reference if we roll back + title = "" + pos = destEndPos + lines = destEndLineNo + while pos < maximum: + ch = charCodeAt(string, pos) + if not isSpace(ch): + break + pos += 1 + + if pos < maximum and charCodeAt(string, pos) != 0x0A: + # garbage at the end of the line + return False + + label = normalizeReference(string[1:labelEnd]) + if not label: + # CommonMark 0.20 disallows empty labels + return False + + # Reference can not terminate anything. This check is for safety only. + if silent: + return True + + if "references" not in state.env: + state.env["references"] = {} + + state.line = startLine + lines + 1 + + # note, this is not part of markdown-it JS, but is useful for renderers + if state.md.options.get("inline_definitions", False): + token = state.push("definition", "", 0) + token.meta = { + "id": label, + "title": title, + "url": href, + "label": string[1:labelEnd], + } + token.map = [startLine, state.line] + + if label not in state.env["references"]: + state.env["references"][label] = { + "title": title, + "href": href, + "map": [startLine, state.line], + } + else: + state.env.setdefault("duplicate_refs", []).append( + { + "title": title, + "href": href, + "label": label, + "map": [startLine, state.line], + } + ) + + state.parentType = oldParentType + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/state_block.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/state_block.py new file mode 100644 index 000000000..445ad265a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/state_block.py @@ -0,0 +1,261 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Literal + +from ..common.utils import isStrSpace +from ..ruler import StateBase +from ..token import Token +from ..utils import EnvType + +if TYPE_CHECKING: + from markdown_it.main import MarkdownIt + + +class StateBlock(StateBase): + def __init__( + self, src: str, md: MarkdownIt, env: EnvType, tokens: list[Token] + ) -> None: + self.src = src + + # link to parser instance + self.md = md + + self.env = env + + # + # Internal state variables + # + + self.tokens = tokens + + self.bMarks: list[int] = [] # line begin offsets for fast jumps + self.eMarks: list[int] = [] # line end offsets for fast jumps + # offsets of the first non-space characters (tabs not expanded) + self.tShift: list[int] = [] + self.sCount: list[int] = [] # indents for each line (tabs expanded) + + # An amount of virtual spaces (tabs expanded) between beginning + # of each line (bMarks) and real beginning of that line. + # + # It exists only as a hack because blockquotes override bMarks + # losing information in the process. + # + # It's used only when expanding tabs, you can think about it as + # an initial tab length, e.g. bsCount=21 applied to string `\t123` + # means first tab should be expanded to 4-21%4 === 3 spaces. + # + self.bsCount: list[int] = [] + + # block parser variables + self.blkIndent = 0 # required block content indent (for example, if we are + # inside a list, it would be positioned after list marker) + self.line = 0 # line index in src + self.lineMax = 0 # lines count + self.tight = False # loose/tight mode for lists + self.ddIndent = -1 # indent of the current dd block (-1 if there isn't any) + self.listIndent = -1 # indent of the current list block (-1 if there isn't any) + + # can be 'blockquote', 'list', 'root', 'paragraph' or 'reference' + # used in lists to determine if they interrupt a paragraph + self.parentType = "root" + + self.level = 0 + + # renderer + self.result = "" + + # Create caches + # Generate markers. + indent_found = False + + start = pos = indent = offset = 0 + length = len(self.src) + + for pos, character in enumerate(self.src): + if not indent_found: + if isStrSpace(character): + indent += 1 + + if character == "\t": + offset += 4 - offset % 4 + else: + offset += 1 + continue + else: + indent_found = True + + if character == "\n" or pos == length - 1: + if character != "\n": + pos += 1 + self.bMarks.append(start) + self.eMarks.append(pos) + self.tShift.append(indent) + self.sCount.append(offset) + self.bsCount.append(0) + + indent_found = False + indent = 0 + offset = 0 + start = pos + 1 + + # Push fake entry to simplify cache bounds checks + self.bMarks.append(length) + self.eMarks.append(length) + self.tShift.append(0) + self.sCount.append(0) + self.bsCount.append(0) + + self.lineMax = len(self.bMarks) - 1 # don't count last fake line + + # pre-check if code blocks are enabled, to speed up is_code_block method + self._code_enabled = "code" in self.md["block"].ruler.get_active_rules() + + def __repr__(self) -> str: + return ( + f"{self.__class__.__name__}" + f"(line={self.line},level={self.level},tokens={len(self.tokens)})" + ) + + def push(self, ttype: str, tag: str, nesting: Literal[-1, 0, 1]) -> Token: + """Push new token to "stream".""" + token = Token(ttype, tag, nesting) + token.block = True + if nesting < 0: + self.level -= 1 # closing tag + token.level = self.level + if nesting > 0: + self.level += 1 # opening tag + self.tokens.append(token) + return token + + def isEmpty(self, line: int) -> bool: + """.""" + return (self.bMarks[line] + self.tShift[line]) >= self.eMarks[line] + + def skipEmptyLines(self, from_pos: int) -> int: + """.""" + while from_pos < self.lineMax: + try: + if (self.bMarks[from_pos] + self.tShift[from_pos]) < self.eMarks[ + from_pos + ]: + break + except IndexError: + pass + from_pos += 1 + return from_pos + + def skipSpaces(self, pos: int) -> int: + """Skip spaces from given position.""" + while True: + try: + current = self.src[pos] + except IndexError: + break + if not isStrSpace(current): + break + pos += 1 + return pos + + def skipSpacesBack(self, pos: int, minimum: int) -> int: + """Skip spaces from given position in reverse.""" + if pos <= minimum: + return pos + while pos > minimum: + pos -= 1 + if not isStrSpace(self.src[pos]): + return pos + 1 + return pos + + def skipChars(self, pos: int, code: int) -> int: + """Skip character code from given position.""" + while True: + try: + current = self.srcCharCode[pos] + except IndexError: + break + if current != code: + break + pos += 1 + return pos + + def skipCharsStr(self, pos: int, ch: str) -> int: + """Skip character string from given position.""" + while True: + try: + current = self.src[pos] + except IndexError: + break + if current != ch: + break + pos += 1 + return pos + + def skipCharsBack(self, pos: int, code: int, minimum: int) -> int: + """Skip character code reverse from given position - 1.""" + if pos <= minimum: + return pos + while pos > minimum: + pos -= 1 + if code != self.srcCharCode[pos]: + return pos + 1 + return pos + + def skipCharsStrBack(self, pos: int, ch: str, minimum: int) -> int: + """Skip character string reverse from given position - 1.""" + if pos <= minimum: + return pos + while pos > minimum: + pos -= 1 + if ch != self.src[pos]: + return pos + 1 + return pos + + def getLines(self, begin: int, end: int, indent: int, keepLastLF: bool) -> str: + """Cut lines range from source.""" + line = begin + if begin >= end: + return "" + + queue = [""] * (end - begin) + + i = 1 + while line < end: + lineIndent = 0 + lineStart = first = self.bMarks[line] + last = ( + self.eMarks[line] + 1 + if line + 1 < end or keepLastLF + else self.eMarks[line] + ) + + while (first < last) and (lineIndent < indent): + ch = self.src[first] + if isStrSpace(ch): + if ch == "\t": + lineIndent += 4 - (lineIndent + self.bsCount[line]) % 4 + else: + lineIndent += 1 + elif first - lineStart < self.tShift[line]: + lineIndent += 1 + else: + break + first += 1 + + if lineIndent > indent: + # partially expanding tabs in code blocks, e.g '\t\tfoobar' + # with indent=2 becomes ' \tfoobar' + queue[i - 1] = (" " * (lineIndent - indent)) + self.src[first:last] + else: + queue[i - 1] = self.src[first:last] + + line += 1 + i += 1 + + return "".join(queue) + + def is_code_block(self, line: int) -> bool: + """Check if line is a code block, + i.e. the code block rule is enabled and text is indented by more than 3 spaces. + """ + return self._code_enabled and (self.sCount[line] - self.blkIndent) >= 4 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/table.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/table.py new file mode 100644 index 000000000..4b666c1d5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_block/table.py @@ -0,0 +1,236 @@ +# GFM table, https://github.github.com/gfm/#tables-extension- +from __future__ import annotations + +import re + +from ..common.utils import charStrAt, isStrSpace +from .state_block import StateBlock + +headerLineRe = re.compile(r"^:?-+:?$") +enclosingPipesRe = re.compile(r"^\||\|$") + + +def getLine(state: StateBlock, line: int) -> str: + pos = state.bMarks[line] + state.tShift[line] + maximum = state.eMarks[line] + + # return state.src.substr(pos, max - pos) + return state.src[pos:maximum] + + +def escapedSplit(string: str) -> list[str]: + result: list[str] = [] + pos = 0 + max = len(string) + isEscaped = False + lastPos = 0 + current = "" + ch = charStrAt(string, pos) + + while pos < max: + if ch == "|": + if not isEscaped: + # pipe separating cells, '|' + result.append(current + string[lastPos:pos]) + current = "" + lastPos = pos + 1 + else: + # escaped pipe, '\|' + current += string[lastPos : pos - 1] + lastPos = pos + + isEscaped = ch == "\\" + pos += 1 + + ch = charStrAt(string, pos) + + result.append(current + string[lastPos:]) + + return result + + +def table(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + tbodyLines = None + + # should have at least two lines + if startLine + 2 > endLine: + return False + + nextLine = startLine + 1 + + if state.sCount[nextLine] < state.blkIndent: + return False + + if state.is_code_block(nextLine): + return False + + # first character of the second line should be '|', '-', ':', + # and no other characters are allowed but spaces; + # basically, this is the equivalent of /^[-:|][-:|\s]*$/ regexp + + pos = state.bMarks[nextLine] + state.tShift[nextLine] + if pos >= state.eMarks[nextLine]: + return False + first_ch = state.src[pos] + pos += 1 + if first_ch not in ("|", "-", ":"): + return False + + if pos >= state.eMarks[nextLine]: + return False + second_ch = state.src[pos] + pos += 1 + if second_ch not in ("|", "-", ":") and not isStrSpace(second_ch): + return False + + # if first character is '-', then second character must not be a space + # (due to parsing ambiguity with list) + if first_ch == "-" and isStrSpace(second_ch): + return False + + while pos < state.eMarks[nextLine]: + ch = state.src[pos] + + if ch not in ("|", "-", ":") and not isStrSpace(ch): + return False + + pos += 1 + + lineText = getLine(state, startLine + 1) + + columns = lineText.split("|") + aligns = [] + for i in range(len(columns)): + t = columns[i].strip() + if not t: + # allow empty columns before and after table, but not in between columns; + # e.g. allow ` |---| `, disallow ` ---||--- ` + if i == 0 or i == len(columns) - 1: + continue + else: + return False + + if not headerLineRe.search(t): + return False + if charStrAt(t, len(t) - 1) == ":": + aligns.append("center" if charStrAt(t, 0) == ":" else "right") + elif charStrAt(t, 0) == ":": + aligns.append("left") + else: + aligns.append("") + + lineText = getLine(state, startLine).strip() + if "|" not in lineText: + return False + if state.is_code_block(startLine): + return False + columns = escapedSplit(lineText) + if columns and columns[0] == "": + columns.pop(0) + if columns and columns[-1] == "": + columns.pop() + + # header row will define an amount of columns in the entire table, + # and align row should be exactly the same (the rest of the rows can differ) + columnCount = len(columns) + if columnCount == 0 or columnCount != len(aligns): + return False + + if silent: + return True + + oldParentType = state.parentType + state.parentType = "table" + + # use 'blockquote' lists for termination because it's + # the most similar to tables + terminatorRules = state.md.block.ruler.getRules("blockquote") + + token = state.push("table_open", "table", 1) + token.map = tableLines = [startLine, 0] + + token = state.push("thead_open", "thead", 1) + token.map = [startLine, startLine + 1] + + token = state.push("tr_open", "tr", 1) + token.map = [startLine, startLine + 1] + + for i in range(len(columns)): + token = state.push("th_open", "th", 1) + if aligns[i]: + token.attrs = {"style": "text-align:" + aligns[i]} + + token = state.push("inline", "", 0) + # note in markdown-it this map was removed in v12.0.0 however, we keep it, + # since it is helpful to propagate to children tokens + token.map = [startLine, startLine + 1] + token.content = columns[i].strip() + token.children = [] + + token = state.push("th_close", "th", -1) + + token = state.push("tr_close", "tr", -1) + token = state.push("thead_close", "thead", -1) + + nextLine = startLine + 2 + while nextLine < endLine: + if state.sCount[nextLine] < state.blkIndent: + break + + terminate = False + for i in range(len(terminatorRules)): + if terminatorRules[i](state, nextLine, endLine, True): + terminate = True + break + + if terminate: + break + lineText = getLine(state, nextLine).strip() + if not lineText: + break + if state.is_code_block(nextLine): + break + columns = escapedSplit(lineText) + if columns and columns[0] == "": + columns.pop(0) + if columns and columns[-1] == "": + columns.pop() + + if nextLine == startLine + 2: + token = state.push("tbody_open", "tbody", 1) + token.map = tbodyLines = [startLine + 2, 0] + + token = state.push("tr_open", "tr", 1) + token.map = [nextLine, nextLine + 1] + + for i in range(columnCount): + token = state.push("td_open", "td", 1) + if aligns[i]: + token.attrs = {"style": "text-align:" + aligns[i]} + + token = state.push("inline", "", 0) + # note in markdown-it this map was removed in v12.0.0 however, we keep it, + # since it is helpful to propagate to children tokens + token.map = [nextLine, nextLine + 1] + try: + token.content = columns[i].strip() if columns[i] else "" + except IndexError: + token.content = "" + token.children = [] + + token = state.push("td_close", "td", -1) + + token = state.push("tr_close", "tr", -1) + + nextLine += 1 + + if tbodyLines: + token = state.push("tbody_close", "tbody", -1) + tbodyLines[1] = nextLine + + token = state.push("table_close", "table", -1) + + tableLines[1] = nextLine + state.parentType = oldParentType + state.line = nextLine + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__init__.py new file mode 100644 index 000000000..c9c5368c2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__init__.py @@ -0,0 +1,19 @@ +__all__ = ( + "StateCore", + "normalize", + "block", + "inline", + "replace", + "smartquotes", + "linkify", + "text_join", +) + +from .block import block +from .inline import inline +from .linkify import linkify +from .normalize import normalize +from .replacements import replace +from .smartquotes import smartquotes +from .state_core import StateCore +from .text_join import text_join diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..6cb91b604 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/block.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/block.cpython-312.pyc new file mode 100644 index 000000000..a56672fc3 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/block.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/inline.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/inline.cpython-312.pyc new file mode 100644 index 000000000..c25031715 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/inline.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/linkify.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/linkify.cpython-312.pyc new file mode 100644 index 000000000..76927156f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/linkify.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/normalize.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/normalize.cpython-312.pyc new file mode 100644 index 000000000..a81bb10a1 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/normalize.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/replacements.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/replacements.cpython-312.pyc new file mode 100644 index 000000000..1e29be55c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/replacements.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/smartquotes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/smartquotes.cpython-312.pyc new file mode 100644 index 000000000..2b8943cc5 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/smartquotes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/state_core.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/state_core.cpython-312.pyc new file mode 100644 index 000000000..432fbd999 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/state_core.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/text_join.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/text_join.cpython-312.pyc new file mode 100644 index 000000000..786e3be18 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/__pycache__/text_join.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/block.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/block.py new file mode 100644 index 000000000..a6c3bb8d7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/block.py @@ -0,0 +1,13 @@ +from ..token import Token +from .state_core import StateCore + + +def block(state: StateCore) -> None: + if state.inlineMode: + token = Token("inline", "", 0) + token.content = state.src + token.map = [0, 1] + token.children = [] + state.tokens.append(token) + else: + state.md.block.parse(state.src, state.md, state.env, state.tokens) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/inline.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/inline.py new file mode 100644 index 000000000..c3fd0b5e2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/inline.py @@ -0,0 +1,10 @@ +from .state_core import StateCore + + +def inline(state: StateCore) -> None: + """Parse inlines""" + for token in state.tokens: + if token.type == "inline": + if token.children is None: + token.children = [] + state.md.inline.parse(token.content, state.md, state.env, token.children) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/linkify.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/linkify.py new file mode 100644 index 000000000..efbc9d4c9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/linkify.py @@ -0,0 +1,149 @@ +from __future__ import annotations + +import re +from typing import Protocol + +from ..common.utils import arrayReplaceAt, isLinkClose, isLinkOpen +from ..token import Token +from .state_core import StateCore + +HTTP_RE = re.compile(r"^http://") +MAILTO_RE = re.compile(r"^mailto:") +TEST_MAILTO_RE = re.compile(r"^mailto:", flags=re.IGNORECASE) + + +def linkify(state: StateCore) -> None: + """Rule for identifying plain-text links.""" + if not state.md.options.linkify: + return + + if not state.md.linkify: + raise ModuleNotFoundError("Linkify enabled but not installed.") + + for inline_token in state.tokens: + if inline_token.type != "inline" or not state.md.linkify.pretest( + inline_token.content + ): + continue + + tokens = inline_token.children + + htmlLinkLevel = 0 + + # We scan from the end, to keep position when new tags added. + # Use reversed logic in links start/end match + assert tokens is not None + i = len(tokens) + while i >= 1: + i -= 1 + assert isinstance(tokens, list) + currentToken = tokens[i] + + # Skip content of markdown links + if currentToken.type == "link_close": + i -= 1 + while ( + tokens[i].level != currentToken.level + and tokens[i].type != "link_open" + ): + i -= 1 + continue + + # Skip content of html tag links + if currentToken.type == "html_inline": + if isLinkOpen(currentToken.content) and htmlLinkLevel > 0: + htmlLinkLevel -= 1 + if isLinkClose(currentToken.content): + htmlLinkLevel += 1 + if htmlLinkLevel > 0: + continue + + if currentToken.type == "text" and state.md.linkify.test( + currentToken.content + ): + text = currentToken.content + links: list[_LinkType] = state.md.linkify.match(text) or [] + + # Now split string to nodes + nodes = [] + level = currentToken.level + lastPos = 0 + + # forbid escape sequence at the start of the string, + # this avoids http\://example.com/ from being linkified as + # http://example.com/ + if ( + links + and links[0].index == 0 + and i > 0 + and tokens[i - 1].type == "text_special" + ): + links = links[1:] + + for link in links: + url = link.url + fullUrl = state.md.normalizeLink(url) + if not state.md.validateLink(fullUrl): + continue + + urlText = link.text + + # Linkifier might send raw hostnames like "example.com", where url + # starts with domain name. So we prepend http:// in those cases, + # and remove it afterwards. + if not link.schema: + urlText = HTTP_RE.sub( + "", state.md.normalizeLinkText("http://" + urlText) + ) + elif link.schema == "mailto:" and TEST_MAILTO_RE.search(urlText): + urlText = MAILTO_RE.sub( + "", state.md.normalizeLinkText("mailto:" + urlText) + ) + else: + urlText = state.md.normalizeLinkText(urlText) + + pos = link.index + + if pos > lastPos: + token = Token("text", "", 0) + token.content = text[lastPos:pos] + token.level = level + nodes.append(token) + + token = Token("link_open", "a", 1) + token.attrs = {"href": fullUrl} + token.level = level + level += 1 + token.markup = "linkify" + token.info = "auto" + nodes.append(token) + + token = Token("text", "", 0) + token.content = urlText + token.level = level + nodes.append(token) + + token = Token("link_close", "a", -1) + level -= 1 + token.level = level + token.markup = "linkify" + token.info = "auto" + nodes.append(token) + + lastPos = link.last_index + + if lastPos < len(text): + token = Token("text", "", 0) + token.content = text[lastPos:] + token.level = level + nodes.append(token) + + inline_token.children = tokens = arrayReplaceAt(tokens, i, nodes) + + +class _LinkType(Protocol): + url: str + text: str + index: int + last_index: int + schema: str | None diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/normalize.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/normalize.py new file mode 100644 index 000000000..c9f8d0d57 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/normalize.py @@ -0,0 +1,18 @@ +"""Normalize input string.""" +import re + +from .state_core import StateCore + +# https://spec.commonmark.org/0.29/#line-ending +NEWLINES_RE = re.compile(r"\r\n?|\n") +NULL_RE = re.compile(r"\0") + + +def normalize(state: StateCore) -> None: + # Normalize newlines + string = NEWLINES_RE.sub("\n", state.src) + + # Replace NULL characters + string = NULL_RE.sub("\uFFFD", string) + + state.src = string diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/replacements.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/replacements.py new file mode 100644 index 000000000..14912e17a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/replacements.py @@ -0,0 +1,126 @@ +"""Simple typographic replacements + +* ``(c)``, ``(C)`` → © +* ``(tm)``, ``(TM)`` → ™ +* ``(r)``, ``(R)`` → ® +* ``+-`` → ± +* ``...`` → … +* ``?....`` → ?.. +* ``!....`` → !.. +* ``????????`` → ??? +* ``!!!!!`` → !!! +* ``,,,`` → , +* ``--`` → &ndash +* ``---`` → &mdash +""" +from __future__ import annotations + +import logging +import re + +from ..token import Token +from .state_core import StateCore + +LOGGER = logging.getLogger(__name__) + +# TODO: +# - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾ +# - multiplication 2 x 4 -> 2 × 4 + +RARE_RE = re.compile(r"\+-|\.\.|\?\?\?\?|!!!!|,,|--") + +# Workaround for phantomjs - need regex without /g flag, +# or root check will fail every second time +# SCOPED_ABBR_TEST_RE = r"\((c|tm|r)\)" + +SCOPED_ABBR_RE = re.compile(r"\((c|tm|r)\)", flags=re.IGNORECASE) + +PLUS_MINUS_RE = re.compile(r"\+-") + +ELLIPSIS_RE = re.compile(r"\.{2,}") + +ELLIPSIS_QUESTION_EXCLAMATION_RE = re.compile(r"([?!])…") + +QUESTION_EXCLAMATION_RE = re.compile(r"([?!]){4,}") + +COMMA_RE = re.compile(r",{2,}") + +EM_DASH_RE = re.compile(r"(^|[^-])---(?=[^-]|$)", flags=re.MULTILINE) + +EN_DASH_RE = re.compile(r"(^|\s)--(?=\s|$)", flags=re.MULTILINE) + +EN_DASH_INDENT_RE = re.compile(r"(^|[^-\s])--(?=[^-\s]|$)", flags=re.MULTILINE) + + +SCOPED_ABBR = {"c": "©", "r": "®", "tm": "™"} + + +def replaceFn(match: re.Match[str]) -> str: + return SCOPED_ABBR[match.group(1).lower()] + + +def replace_scoped(inlineTokens: list[Token]) -> None: + inside_autolink = 0 + + for token in inlineTokens: + if token.type == "text" and not inside_autolink: + token.content = SCOPED_ABBR_RE.sub(replaceFn, token.content) + + if token.type == "link_open" and token.info == "auto": + inside_autolink -= 1 + + if token.type == "link_close" and token.info == "auto": + inside_autolink += 1 + + +def replace_rare(inlineTokens: list[Token]) -> None: + inside_autolink = 0 + + for token in inlineTokens: + if ( + token.type == "text" + and (not inside_autolink) + and RARE_RE.search(token.content) + ): + # +- -> ± + token.content = PLUS_MINUS_RE.sub("±", token.content) + + # .., ..., ....... -> … + token.content = ELLIPSIS_RE.sub("…", token.content) + + # but ?..... & !..... -> ?.. & !.. + token.content = ELLIPSIS_QUESTION_EXCLAMATION_RE.sub("\\1..", token.content) + token.content = QUESTION_EXCLAMATION_RE.sub("\\1\\1\\1", token.content) + + # ,, ,,, ,,,, -> , + token.content = COMMA_RE.sub(",", token.content) + + # em-dash + token.content = EM_DASH_RE.sub("\\1\u2014", token.content) + + # en-dash + token.content = EN_DASH_RE.sub("\\1\u2013", token.content) + token.content = EN_DASH_INDENT_RE.sub("\\1\u2013", token.content) + + if token.type == "link_open" and token.info == "auto": + inside_autolink -= 1 + + if token.type == "link_close" and token.info == "auto": + inside_autolink += 1 + + +def replace(state: StateCore) -> None: + if not state.md.options.typographer: + return + + for token in state.tokens: + if token.type != "inline": + continue + if token.children is None: + continue + + if SCOPED_ABBR_RE.search(token.content): + replace_scoped(token.children) + + if RARE_RE.search(token.content): + replace_rare(token.children) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/smartquotes.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/smartquotes.py new file mode 100644 index 000000000..c98fbd71e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/smartquotes.py @@ -0,0 +1,202 @@ +"""Convert straight quotation marks to typographic ones +""" +from __future__ import annotations + +import re +from typing import Any + +from ..common.utils import charCodeAt, isMdAsciiPunct, isPunctChar, isWhiteSpace +from ..token import Token +from .state_core import StateCore + +QUOTE_TEST_RE = re.compile(r"['\"]") +QUOTE_RE = re.compile(r"['\"]") +APOSTROPHE = "\u2019" # ’ + + +def replaceAt(string: str, index: int, ch: str) -> str: + # When the index is negative, the behavior is different from the js version. + # But basically, the index will not be negative. + assert index >= 0 + return string[:index] + ch + string[index + 1 :] + + +def process_inlines(tokens: list[Token], state: StateCore) -> None: + stack: list[dict[str, Any]] = [] + + for i, token in enumerate(tokens): + thisLevel = token.level + + j = 0 + for j in range(len(stack))[::-1]: + if stack[j]["level"] <= thisLevel: + break + else: + # When the loop is terminated without a "break". + # Subtract 1 to get the same index as the js version. + j -= 1 + + stack = stack[: j + 1] + + if token.type != "text": + continue + + text = token.content + pos = 0 + maximum = len(text) + + while pos < maximum: + goto_outer = False + lastIndex = pos + t = QUOTE_RE.search(text[lastIndex:]) + if not t: + break + + canOpen = canClose = True + pos = t.start(0) + lastIndex + 1 + isSingle = t.group(0) == "'" + + # Find previous character, + # default to space if it's the beginning of the line + lastChar: None | int = 0x20 + + if t.start(0) + lastIndex - 1 >= 0: + lastChar = charCodeAt(text, t.start(0) + lastIndex - 1) + else: + for j in range(i)[::-1]: + if tokens[j].type == "softbreak" or tokens[j].type == "hardbreak": + break + # should skip all tokens except 'text', 'html_inline' or 'code_inline' + if not tokens[j].content: + continue + + lastChar = charCodeAt(tokens[j].content, len(tokens[j].content) - 1) + break + + # Find next character, + # default to space if it's the end of the line + nextChar: None | int = 0x20 + + if pos < maximum: + nextChar = charCodeAt(text, pos) + else: + for j in range(i + 1, len(tokens)): + # nextChar defaults to 0x20 + if tokens[j].type == "softbreak" or tokens[j].type == "hardbreak": + break + # should skip all tokens except 'text', 'html_inline' or 'code_inline' + if not tokens[j].content: + continue + + nextChar = charCodeAt(tokens[j].content, 0) + break + + isLastPunctChar = lastChar is not None and ( + isMdAsciiPunct(lastChar) or isPunctChar(chr(lastChar)) + ) + isNextPunctChar = nextChar is not None and ( + isMdAsciiPunct(nextChar) or isPunctChar(chr(nextChar)) + ) + + isLastWhiteSpace = lastChar is not None and isWhiteSpace(lastChar) + isNextWhiteSpace = nextChar is not None and isWhiteSpace(nextChar) + + if isNextWhiteSpace: # noqa: SIM114 + canOpen = False + elif isNextPunctChar and not (isLastWhiteSpace or isLastPunctChar): + canOpen = False + + if isLastWhiteSpace: # noqa: SIM114 + canClose = False + elif isLastPunctChar and not (isNextWhiteSpace or isNextPunctChar): + canClose = False + + if nextChar == 0x22 and t.group(0) == '"': # 0x22: " # noqa: SIM102 + if ( + lastChar is not None and lastChar >= 0x30 and lastChar <= 0x39 + ): # 0x30: 0, 0x39: 9 + # special case: 1"" - count first quote as an inch + canClose = canOpen = False + + if canOpen and canClose: + # Replace quotes in the middle of punctuation sequence, but not + # in the middle of the words, i.e.: + # + # 1. foo " bar " baz - not replaced + # 2. foo-"-bar-"-baz - replaced + # 3. foo"bar"baz - not replaced + canOpen = isLastPunctChar + canClose = isNextPunctChar + + if not canOpen and not canClose: + # middle of word + if isSingle: + token.content = replaceAt( + token.content, t.start(0) + lastIndex, APOSTROPHE + ) + continue + + if canClose: + # this could be a closing quote, rewind the stack to get a match + for j in range(len(stack))[::-1]: + item = stack[j] + if stack[j]["level"] < thisLevel: + break + if item["single"] == isSingle and stack[j]["level"] == thisLevel: + item = stack[j] + + if isSingle: + openQuote = state.md.options.quotes[2] + closeQuote = state.md.options.quotes[3] + else: + openQuote = state.md.options.quotes[0] + closeQuote = state.md.options.quotes[1] + + # replace token.content *before* tokens[item.token].content, + # because, if they are pointing at the same token, replaceAt + # could mess up indices when quote length != 1 + token.content = replaceAt( + token.content, t.start(0) + lastIndex, closeQuote + ) + tokens[item["token"]].content = replaceAt( + tokens[item["token"]].content, item["pos"], openQuote + ) + + pos += len(closeQuote) - 1 + if item["token"] == i: + pos += len(openQuote) - 1 + + text = token.content + maximum = len(text) + + stack = stack[:j] + goto_outer = True + break + if goto_outer: + goto_outer = False + continue + + if canOpen: + stack.append( + { + "token": i, + "pos": t.start(0) + lastIndex, + "single": isSingle, + "level": thisLevel, + } + ) + elif canClose and isSingle: + token.content = replaceAt( + token.content, t.start(0) + lastIndex, APOSTROPHE + ) + + +def smartquotes(state: StateCore) -> None: + if not state.md.options.typographer: + return + + for token in state.tokens: + if token.type != "inline" or not QUOTE_RE.search(token.content): + continue + if token.children is not None: + process_inlines(token.children, state) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/state_core.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/state_core.py new file mode 100644 index 000000000..a938041d9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/state_core.py @@ -0,0 +1,25 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from ..ruler import StateBase +from ..token import Token +from ..utils import EnvType + +if TYPE_CHECKING: + from markdown_it import MarkdownIt + + +class StateCore(StateBase): + def __init__( + self, + src: str, + md: MarkdownIt, + env: EnvType, + tokens: list[Token] | None = None, + ) -> None: + self.src = src + self.md = md # link to parser instance + self.env = env + self.tokens: list[Token] = tokens or [] + self.inlineMode = False diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/text_join.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/text_join.py new file mode 100644 index 000000000..d54ccbbc3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_core/text_join.py @@ -0,0 +1,34 @@ +"""Join raw text tokens with the rest of the text + +This is set as a separate rule to provide an opportunity for plugins +to run text replacements after text join, but before escape join. + +For example, `\\:)` shouldn't be replaced with an emoji. +""" +from __future__ import annotations + +from ..token import Token +from .state_core import StateCore + + +def text_join(state: StateCore) -> None: + """Join raw text for escape sequences (`text_special`) tokens with the rest of the text""" + + for inline_token in state.tokens[:]: + if inline_token.type != "inline": + continue + + # convert text_special to text and join all adjacent text nodes + new_tokens: list[Token] = [] + for child_token in inline_token.children or []: + if child_token.type == "text_special": + child_token.type = "text" + if ( + child_token.type == "text" + and new_tokens + and new_tokens[-1].type == "text" + ): + new_tokens[-1].content += child_token.content + else: + new_tokens.append(child_token) + inline_token.children = new_tokens diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__init__.py new file mode 100644 index 000000000..3a8026ec3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__init__.py @@ -0,0 +1,31 @@ +__all__ = ( + "StateInline", + "text", + "fragments_join", + "link_pairs", + "linkify", + "escape", + "newline", + "backtick", + "emphasis", + "image", + "link", + "autolink", + "entity", + "html_inline", + "strikethrough", +) +from . import emphasis, strikethrough +from .autolink import autolink +from .backticks import backtick +from .balance_pairs import link_pairs +from .entity import entity +from .escape import escape +from .fragments_join import fragments_join +from .html_inline import html_inline +from .image import image +from .link import link +from .linkify import linkify +from .newline import newline +from .state_inline import StateInline +from .text import text diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..06a3d9b2c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/autolink.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/autolink.cpython-312.pyc new file mode 100644 index 000000000..c5cbb2963 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/autolink.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/backticks.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/backticks.cpython-312.pyc new file mode 100644 index 000000000..c3e703f26 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/backticks.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/balance_pairs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/balance_pairs.cpython-312.pyc new file mode 100644 index 000000000..a534062f3 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/balance_pairs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/emphasis.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/emphasis.cpython-312.pyc new file mode 100644 index 000000000..82c798eae Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/emphasis.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/entity.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/entity.cpython-312.pyc new file mode 100644 index 000000000..8e25c8c6f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/entity.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/escape.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/escape.cpython-312.pyc new file mode 100644 index 000000000..33737e322 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/escape.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/fragments_join.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/fragments_join.cpython-312.pyc new file mode 100644 index 000000000..f43625aa0 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/fragments_join.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/html_inline.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/html_inline.cpython-312.pyc new file mode 100644 index 000000000..07e3ef95c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/html_inline.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/image.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/image.cpython-312.pyc new file mode 100644 index 000000000..304f1ac23 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/image.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/link.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/link.cpython-312.pyc new file mode 100644 index 000000000..a06cd9584 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/link.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/linkify.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/linkify.cpython-312.pyc new file mode 100644 index 000000000..29689e939 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/linkify.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/newline.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/newline.cpython-312.pyc new file mode 100644 index 000000000..74e34ea5a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/newline.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/state_inline.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/state_inline.cpython-312.pyc new file mode 100644 index 000000000..0f7cdaa23 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/state_inline.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/strikethrough.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/strikethrough.cpython-312.pyc new file mode 100644 index 000000000..191c2c534 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/strikethrough.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/text.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/text.cpython-312.pyc new file mode 100644 index 000000000..107f533db Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/__pycache__/text.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/autolink.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/autolink.py new file mode 100644 index 000000000..295d963f3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/autolink.py @@ -0,0 +1,77 @@ +# Process autolinks '' +import re + +from .state_inline import StateInline + +EMAIL_RE = re.compile( + r"^([a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$" # noqa: E501 +) +AUTOLINK_RE = re.compile(r"^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$") + + +def autolink(state: StateInline, silent: bool) -> bool: + pos = state.pos + + if state.src[pos] != "<": + return False + + start = state.pos + maximum = state.posMax + + while True: + pos += 1 + if pos >= maximum: + return False + + ch = state.src[pos] + + if ch == "<": + return False + if ch == ">": + break + + url = state.src[start + 1 : pos] + + if AUTOLINK_RE.search(url) is not None: + fullUrl = state.md.normalizeLink(url) + if not state.md.validateLink(fullUrl): + return False + + if not silent: + token = state.push("link_open", "a", 1) + token.attrs = {"href": fullUrl} + token.markup = "autolink" + token.info = "auto" + + token = state.push("text", "", 0) + token.content = state.md.normalizeLinkText(url) + + token = state.push("link_close", "a", -1) + token.markup = "autolink" + token.info = "auto" + + state.pos += len(url) + 2 + return True + + if EMAIL_RE.search(url) is not None: + fullUrl = state.md.normalizeLink("mailto:" + url) + if not state.md.validateLink(fullUrl): + return False + + if not silent: + token = state.push("link_open", "a", 1) + token.attrs = {"href": fullUrl} + token.markup = "autolink" + token.info = "auto" + + token = state.push("text", "", 0) + token.content = state.md.normalizeLinkText(url) + + token = state.push("link_close", "a", -1) + token.markup = "autolink" + token.info = "auto" + + state.pos += len(url) + 2 + return True + + return False diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/backticks.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/backticks.py new file mode 100644 index 000000000..fc60d6b15 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/backticks.py @@ -0,0 +1,72 @@ +# Parse backticks +import re + +from .state_inline import StateInline + +regex = re.compile("^ (.+) $") + + +def backtick(state: StateInline, silent: bool) -> bool: + pos = state.pos + + if state.src[pos] != "`": + return False + + start = pos + pos += 1 + maximum = state.posMax + + # scan marker length + while pos < maximum and (state.src[pos] == "`"): + pos += 1 + + marker = state.src[start:pos] + openerLength = len(marker) + + if state.backticksScanned and state.backticks.get(openerLength, 0) <= start: + if not silent: + state.pending += marker + state.pos += openerLength + return True + + matchStart = matchEnd = pos + + # Nothing found in the cache, scan until the end of the line (or until marker is found) + while True: + try: + matchStart = state.src.index("`", matchEnd) + except ValueError: + break + matchEnd = matchStart + 1 + + # scan marker length + while matchEnd < maximum and (state.src[matchEnd] == "`"): + matchEnd += 1 + + closerLength = matchEnd - matchStart + + if closerLength == openerLength: + # Found matching closer length. + if not silent: + token = state.push("code_inline", "code", 0) + token.markup = marker + token.content = state.src[pos:matchStart].replace("\n", " ") + if ( + token.content.startswith(" ") + and token.content.endswith(" ") + and len(token.content.strip()) > 0 + ): + token.content = token.content[1:-1] + state.pos = matchEnd + return True + + # Some different length found, put it in cache as upper limit of where closer can be found + state.backticks[closerLength] = matchStart + + # Scanned through the end, didn't find anything + state.backticksScanned = True + + if not silent: + state.pending += marker + state.pos += openerLength + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/balance_pairs.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/balance_pairs.py new file mode 100644 index 000000000..bbb2101c7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/balance_pairs.py @@ -0,0 +1,137 @@ +"""Balance paired characters (*, _, etc) in inline tokens.""" +from __future__ import annotations + +from .state_inline import Delimiter, StateInline + + +def processDelimiters(state: StateInline, delimiters: list[Delimiter]) -> None: + """For each opening emphasis-like marker find a matching closing one.""" + if not delimiters: + return + + openersBottom = {} + maximum = len(delimiters) + + # headerIdx is the first delimiter of the current (where closer is) delimiter run + headerIdx = 0 + lastTokenIdx = -2 # needs any value lower than -1 + jumps: list[int] = [] + closerIdx = 0 + while closerIdx < maximum: + closer = delimiters[closerIdx] + + jumps.append(0) + + # markers belong to same delimiter run if: + # - they have adjacent tokens + # - AND markers are the same + # + if ( + delimiters[headerIdx].marker != closer.marker + or lastTokenIdx != closer.token - 1 + ): + headerIdx = closerIdx + lastTokenIdx = closer.token + + # Length is only used for emphasis-specific "rule of 3", + # if it's not defined (in strikethrough or 3rd party plugins), + # we can default it to 0 to disable those checks. + # + closer.length = closer.length or 0 + + if not closer.close: + closerIdx += 1 + continue + + # Previously calculated lower bounds (previous fails) + # for each marker, each delimiter length modulo 3, + # and for whether this closer can be an opener; + # https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460 + if closer.marker not in openersBottom: + openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1] + + minOpenerIdx = openersBottom[closer.marker][ + (3 if closer.open else 0) + (closer.length % 3) + ] + + openerIdx = headerIdx - jumps[headerIdx] - 1 + + newMinOpenerIdx = openerIdx + + while openerIdx > minOpenerIdx: + opener = delimiters[openerIdx] + + if opener.marker != closer.marker: + openerIdx -= jumps[openerIdx] + 1 + continue + + if opener.open and opener.end < 0: + isOddMatch = False + + # from spec: + # + # If one of the delimiters can both open and close emphasis, then the + # sum of the lengths of the delimiter runs containing the opening and + # closing delimiters must not be a multiple of 3 unless both lengths + # are multiples of 3. + # + if ( + (opener.close or closer.open) + and ((opener.length + closer.length) % 3 == 0) + and (opener.length % 3 != 0 or closer.length % 3 != 0) + ): + isOddMatch = True + + if not isOddMatch: + # If previous delimiter cannot be an opener, we can safely skip + # the entire sequence in future checks. This is required to make + # sure algorithm has linear complexity (see *_*_*_*_*_... case). + # + if openerIdx > 0 and not delimiters[openerIdx - 1].open: + lastJump = jumps[openerIdx - 1] + 1 + else: + lastJump = 0 + + jumps[closerIdx] = closerIdx - openerIdx + lastJump + jumps[openerIdx] = lastJump + + closer.open = False + opener.end = closerIdx + opener.close = False + newMinOpenerIdx = -1 + + # treat next token as start of run, + # it optimizes skips in **<...>**a**<...>** pathological case + lastTokenIdx = -2 + + break + + openerIdx -= jumps[openerIdx] + 1 + + if newMinOpenerIdx != -1: + # If match for this delimiter run failed, we want to set lower bound for + # future lookups. This is required to make sure algorithm has linear + # complexity. + # + # See details here: + # https:#github.com/commonmark/cmark/issues/178#issuecomment-270417442 + # + openersBottom[closer.marker][ + (3 if closer.open else 0) + ((closer.length or 0) % 3) + ] = newMinOpenerIdx + + closerIdx += 1 + + +def link_pairs(state: StateInline) -> None: + tokens_meta = state.tokens_meta + maximum = len(state.tokens_meta) + + processDelimiters(state, state.delimiters) + + curr = 0 + while curr < maximum: + curr_meta = tokens_meta[curr] + if curr_meta and "delimiters" in curr_meta: + processDelimiters(state, curr_meta["delimiters"]) + curr += 1 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/emphasis.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/emphasis.py new file mode 100644 index 000000000..9a98f9e21 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/emphasis.py @@ -0,0 +1,102 @@ +# Process *this* and _that_ +# +from __future__ import annotations + +from .state_inline import Delimiter, StateInline + + +def tokenize(state: StateInline, silent: bool) -> bool: + """Insert each marker as a separate text token, and add it to delimiter list""" + start = state.pos + marker = state.src[start] + + if silent: + return False + + if marker not in ("_", "*"): + return False + + scanned = state.scanDelims(state.pos, marker == "*") + + for _ in range(scanned.length): + token = state.push("text", "", 0) + token.content = marker + state.delimiters.append( + Delimiter( + marker=ord(marker), + length=scanned.length, + token=len(state.tokens) - 1, + end=-1, + open=scanned.can_open, + close=scanned.can_close, + ) + ) + + state.pos += scanned.length + + return True + + +def _postProcess(state: StateInline, delimiters: list[Delimiter]) -> None: + i = len(delimiters) - 1 + while i >= 0: + startDelim = delimiters[i] + + # /* _ */ /* * */ + if startDelim.marker != 0x5F and startDelim.marker != 0x2A: + i -= 1 + continue + + # Process only opening markers + if startDelim.end == -1: + i -= 1 + continue + + endDelim = delimiters[startDelim.end] + + # If the previous delimiter has the same marker and is adjacent to this one, + # merge those into one strong delimiter. + # + # `whatever` -> `whatever` + # + isStrong = ( + i > 0 + and delimiters[i - 1].end == startDelim.end + 1 + # check that first two markers match and adjacent + and delimiters[i - 1].marker == startDelim.marker + and delimiters[i - 1].token == startDelim.token - 1 + # check that last two markers are adjacent (we can safely assume they match) + and delimiters[startDelim.end + 1].token == endDelim.token + 1 + ) + + ch = chr(startDelim.marker) + + token = state.tokens[startDelim.token] + token.type = "strong_open" if isStrong else "em_open" + token.tag = "strong" if isStrong else "em" + token.nesting = 1 + token.markup = ch + ch if isStrong else ch + token.content = "" + + token = state.tokens[endDelim.token] + token.type = "strong_close" if isStrong else "em_close" + token.tag = "strong" if isStrong else "em" + token.nesting = -1 + token.markup = ch + ch if isStrong else ch + token.content = "" + + if isStrong: + state.tokens[delimiters[i - 1].token].content = "" + state.tokens[delimiters[startDelim.end + 1].token].content = "" + i -= 1 + + i -= 1 + + +def postProcess(state: StateInline) -> None: + """Walk through delimiter list and replace text tokens with tags.""" + _postProcess(state, state.delimiters) + + for token in state.tokens_meta: + if token and "delimiters" in token: + _postProcess(state, token["delimiters"]) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/entity.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/entity.py new file mode 100644 index 000000000..ec9d39650 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/entity.py @@ -0,0 +1,53 @@ +# Process html entity - {, ¯, ", ... +import re + +from ..common.entities import entities +from ..common.utils import fromCodePoint, isValidEntityCode +from .state_inline import StateInline + +DIGITAL_RE = re.compile(r"^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));", re.IGNORECASE) +NAMED_RE = re.compile(r"^&([a-z][a-z0-9]{1,31});", re.IGNORECASE) + + +def entity(state: StateInline, silent: bool) -> bool: + pos = state.pos + maximum = state.posMax + + if state.src[pos] != "&": + return False + + if pos + 1 >= maximum: + return False + + if state.src[pos + 1] == "#": + if match := DIGITAL_RE.search(state.src[pos:]): + if not silent: + match1 = match.group(1) + code = ( + int(match1[1:], 16) if match1[0].lower() == "x" else int(match1, 10) + ) + + token = state.push("text_special", "", 0) + token.content = ( + fromCodePoint(code) + if isValidEntityCode(code) + else fromCodePoint(0xFFFD) + ) + token.markup = match.group(0) + token.info = "entity" + + state.pos += len(match.group(0)) + return True + + else: + if (match := NAMED_RE.search(state.src[pos:])) and match.group(1) in entities: + if not silent: + token = state.push("text_special", "", 0) + token.content = entities[match.group(1)] + token.markup = match.group(0) + token.info = "entity" + + state.pos += len(match.group(0)) + return True + + return False diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/escape.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/escape.py new file mode 100644 index 000000000..9f68b5dfa --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/escape.py @@ -0,0 +1,92 @@ +""" +Process escaped chars and hardbreaks +""" +from ..common.utils import isStrSpace +from .state_inline import StateInline + + +def escape(state: StateInline, silent: bool) -> bool: + """Process escaped chars and hardbreaks.""" + pos = state.pos + maximum = state.posMax + + if state.src[pos] != "\\": + return False + + pos += 1 + + # '\' at the end of the inline block + if pos >= maximum: + return False + + ch1 = state.src[pos] + ch1_ord = ord(ch1) + if ch1 == "\n": + if not silent: + state.push("hardbreak", "br", 0) + pos += 1 + # skip leading whitespaces from next line + while pos < maximum: + ch = state.src[pos] + if not isStrSpace(ch): + break + pos += 1 + + state.pos = pos + return True + + escapedStr = state.src[pos] + + if ch1_ord >= 0xD800 and ch1_ord <= 0xDBFF and pos + 1 < maximum: + ch2 = state.src[pos + 1] + ch2_ord = ord(ch2) + if ch2_ord >= 0xDC00 and ch2_ord <= 0xDFFF: + escapedStr += ch2 + pos += 1 + + origStr = "\\" + escapedStr + + if not silent: + token = state.push("text_special", "", 0) + token.content = escapedStr if ch1 in _ESCAPED else origStr + token.markup = origStr + token.info = "escape" + + state.pos = pos + 1 + return True + + +_ESCAPED = { + "!", + '"', + "#", + "$", + "%", + "&", + "'", + "(", + ")", + "*", + "+", + ",", + "-", + ".", + "/", + ":", + ";", + "<", + "=", + ">", + "?", + "@", + "[", + "\\", + "]", + "^", + "_", + "`", + "{", + "|", + "}", + "~", +} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/fragments_join.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/fragments_join.py new file mode 100644 index 000000000..f795c1364 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/fragments_join.py @@ -0,0 +1,43 @@ +from .state_inline import StateInline + + +def fragments_join(state: StateInline) -> None: + """ + Clean up tokens after emphasis and strikethrough postprocessing: + merge adjacent text nodes into one and re-calculate all token levels + + This is necessary because initially emphasis delimiter markers (``*, _, ~``) + are treated as their own separate text tokens. Then emphasis rule either + leaves them as text (needed to merge with adjacent text) or turns them + into opening/closing tags (which messes up levels inside). + """ + level = 0 + maximum = len(state.tokens) + + curr = last = 0 + while curr < maximum: + # re-calculate levels after emphasis/strikethrough turns some text nodes + # into opening/closing tags + if state.tokens[curr].nesting < 0: + level -= 1 # closing tag + state.tokens[curr].level = level + if state.tokens[curr].nesting > 0: + level += 1 # opening tag + + if ( + state.tokens[curr].type == "text" + and curr + 1 < maximum + and state.tokens[curr + 1].type == "text" + ): + # collapse two adjacent text nodes + state.tokens[curr + 1].content = ( + state.tokens[curr].content + state.tokens[curr + 1].content + ) + else: + if curr != last: + state.tokens[last] = state.tokens[curr] + last += 1 + curr += 1 + + if curr != last: + del state.tokens[last:] diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/html_inline.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/html_inline.py new file mode 100644 index 000000000..9065e1d03 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/html_inline.py @@ -0,0 +1,43 @@ +# Process html tags +from ..common.html_re import HTML_TAG_RE +from ..common.utils import isLinkClose, isLinkOpen +from .state_inline import StateInline + + +def isLetter(ch: int) -> bool: + lc = ch | 0x20 # to lower case + # /* a */ and /* z */ + return (lc >= 0x61) and (lc <= 0x7A) + + +def html_inline(state: StateInline, silent: bool) -> bool: + pos = state.pos + + if not state.md.options.get("html", None): + return False + + # Check start + maximum = state.posMax + if state.src[pos] != "<" or pos + 2 >= maximum: + return False + + # Quick fail on second char + ch = state.src[pos + 1] + if ch not in ("!", "?", "/") and not isLetter(ord(ch)): # /* / */ + return False + + match = HTML_TAG_RE.search(state.src[pos:]) + if not match: + return False + + if not silent: + token = state.push("html_inline", "", 0) + token.content = state.src[pos : pos + len(match.group(0))] + + if isLinkOpen(token.content): + state.linkLevel += 1 + if isLinkClose(token.content): + state.linkLevel -= 1 + + state.pos += len(match.group(0)) + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/image.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/image.py new file mode 100644 index 000000000..b4a32a9f5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/image.py @@ -0,0 +1,148 @@ +# Process ![image]( "title") +from __future__ import annotations + +from ..common.utils import isStrSpace, normalizeReference +from ..token import Token +from .state_inline import StateInline + + +def image(state: StateInline, silent: bool) -> bool: + label = None + href = "" + oldPos = state.pos + max = state.posMax + + if state.src[state.pos] != "!": + return False + + if state.pos + 1 < state.posMax and state.src[state.pos + 1] != "[": + return False + + labelStart = state.pos + 2 + labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, False) + + # parser failed to find ']', so it's not a valid link + if labelEnd < 0: + return False + + pos = labelEnd + 1 + + if pos < max and state.src[pos] == "(": + # + # Inline link + # + + # [link]( "title" ) + # ^^ skipping these spaces + pos += 1 + while pos < max: + ch = state.src[pos] + if not isStrSpace(ch) and ch != "\n": + break + pos += 1 + + if pos >= max: + return False + + # [link]( "title" ) + # ^^^^^^ parsing link destination + start = pos + res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax) + if res.ok: + href = state.md.normalizeLink(res.str) + if state.md.validateLink(href): + pos = res.pos + else: + href = "" + + # [link]( "title" ) + # ^^ skipping these spaces + start = pos + while pos < max: + ch = state.src[pos] + if not isStrSpace(ch) and ch != "\n": + break + pos += 1 + + # [link]( "title" ) + # ^^^^^^^ parsing link title + res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax) + if pos < max and start != pos and res.ok: + title = res.str + pos = res.pos + + # [link]( "title" ) + # ^^ skipping these spaces + while pos < max: + ch = state.src[pos] + if not isStrSpace(ch) and ch != "\n": + break + pos += 1 + else: + title = "" + + if pos >= max or state.src[pos] != ")": + state.pos = oldPos + return False + + pos += 1 + + else: + # + # Link reference + # + if "references" not in state.env: + return False + + # /* [ */ + if pos < max and state.src[pos] == "[": + start = pos + 1 + pos = state.md.helpers.parseLinkLabel(state, pos) + if pos >= 0: + label = state.src[start:pos] + pos += 1 + else: + pos = labelEnd + 1 + else: + pos = labelEnd + 1 + + # covers label == '' and label == undefined + # (collapsed reference link and shortcut reference link respectively) + if not label: + label = state.src[labelStart:labelEnd] + + label = normalizeReference(label) + + ref = state.env["references"].get(label, None) + if not ref: + state.pos = oldPos + return False + + href = ref["href"] + title = ref["title"] + + # + # We found the end of the link, and know for a fact it's a valid link + # so all that's left to do is to call tokenizer. + # + if not silent: + content = state.src[labelStart:labelEnd] + + tokens: list[Token] = [] + state.md.inline.parse(content, state.md, state.env, tokens) + + token = state.push("image", "img", 0) + token.attrs = {"src": href, "alt": ""} + token.children = tokens or None + token.content = content + + if title: + token.attrSet("title", title) + + # note, this is not part of markdown-it JS, but is useful for renderers + if label and state.md.options.get("store_labels", False): + token.meta["label"] = label + + state.pos = pos + state.posMax = max + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/link.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/link.py new file mode 100644 index 000000000..78cf9122f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/link.py @@ -0,0 +1,151 @@ +# Process [link]( "stuff") + +from ..common.utils import isStrSpace, normalizeReference +from .state_inline import StateInline + + +def link(state: StateInline, silent: bool) -> bool: + href = "" + title = "" + label = None + oldPos = state.pos + maximum = state.posMax + start = state.pos + parseReference = True + + if state.src[state.pos] != "[": + return False + + labelStart = state.pos + 1 + labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, True) + + # parser failed to find ']', so it's not a valid link + if labelEnd < 0: + return False + + pos = labelEnd + 1 + + if pos < maximum and state.src[pos] == "(": + # + # Inline link + # + + # might have found a valid shortcut link, disable reference parsing + parseReference = False + + # [link]( "title" ) + # ^^ skipping these spaces + pos += 1 + while pos < maximum: + ch = state.src[pos] + if not isStrSpace(ch) and ch != "\n": + break + pos += 1 + + if pos >= maximum: + return False + + # [link]( "title" ) + # ^^^^^^ parsing link destination + start = pos + res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax) + if res.ok: + href = state.md.normalizeLink(res.str) + if state.md.validateLink(href): + pos = res.pos + else: + href = "" + + # [link]( "title" ) + # ^^ skipping these spaces + start = pos + while pos < maximum: + ch = state.src[pos] + if not isStrSpace(ch) and ch != "\n": + break + pos += 1 + + # [link]( "title" ) + # ^^^^^^^ parsing link title + res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax) + if pos < maximum and start != pos and res.ok: + title = res.str + pos = res.pos + + # [link]( "title" ) + # ^^ skipping these spaces + while pos < maximum: + ch = state.src[pos] + if not isStrSpace(ch) and ch != "\n": + break + pos += 1 + + if pos >= maximum or state.src[pos] != ")": + # parsing a valid shortcut link failed, fallback to reference + parseReference = True + + pos += 1 + + if parseReference: + # + # Link reference + # + if "references" not in state.env: + return False + + if pos < maximum and state.src[pos] == "[": + start = pos + 1 + pos = state.md.helpers.parseLinkLabel(state, pos) + if pos >= 0: + label = state.src[start:pos] + pos += 1 + else: + pos = labelEnd + 1 + + else: + pos = labelEnd + 1 + + # covers label == '' and label == undefined + # (collapsed reference link and shortcut reference link respectively) + if not label: + label = state.src[labelStart:labelEnd] + + label = normalizeReference(label) + + ref = ( + state.env["references"][label] if label in state.env["references"] else None + ) + if not ref: + state.pos = oldPos + return False + + href = ref["href"] + title = ref["title"] + + # + # We found the end of the link, and know for a fact it's a valid link + # so all that's left to do is to call tokenizer. + # + if not silent: + state.pos = labelStart + state.posMax = labelEnd + + token = state.push("link_open", "a", 1) + token.attrs = {"href": href} + + if title: + token.attrSet("title", title) + + # note, this is not part of markdown-it JS, but is useful for renderers + if label and state.md.options.get("store_labels", False): + token.meta["label"] = label + + state.linkLevel += 1 + state.md.inline.tokenize(state) + state.linkLevel -= 1 + + token = state.push("link_close", "a", -1) + + state.pos = pos + state.posMax = maximum + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/linkify.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/linkify.py new file mode 100644 index 000000000..a8a181537 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/linkify.py @@ -0,0 +1,61 @@ +"""Process links like https://example.org/""" +import re + +from .state_inline import StateInline + +# RFC3986: scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) +SCHEME_RE = re.compile(r"(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$", re.IGNORECASE) + + +def linkify(state: StateInline, silent: bool) -> bool: + """Rule for identifying plain-text links.""" + if not state.md.options.linkify: + return False + if state.linkLevel > 0: + return False + if not state.md.linkify: + raise ModuleNotFoundError("Linkify enabled but not installed.") + + pos = state.pos + maximum = state.posMax + + if ( + (pos + 3) > maximum + or state.src[pos] != ":" + or state.src[pos + 1] != "/" + or state.src[pos + 2] != "/" + ): + return False + + if not (match := SCHEME_RE.match(state.pending)): + return False + + proto = match.group(1) + if not (link := state.md.linkify.match_at_start(state.src[pos - len(proto) :])): + return False + url: str = link.url + + # disallow '*' at the end of the link (conflicts with emphasis) + url = url.rstrip("*") + + full_url = state.md.normalizeLink(url) + if not state.md.validateLink(full_url): + return False + + if not silent: + state.pending = state.pending[: -len(proto)] + + token = state.push("link_open", "a", 1) + token.attrs = {"href": full_url} + token.markup = "linkify" + token.info = "auto" + + token = state.push("text", "", 0) + token.content = state.md.normalizeLinkText(url) + + token = state.push("link_close", "a", -1) + token.markup = "linkify" + token.info = "auto" + + state.pos += len(url) - len(proto) + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/newline.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/newline.py new file mode 100644 index 000000000..ca8f1db02 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/newline.py @@ -0,0 +1,43 @@ +"""Proceess '\n'.""" +from ..common.utils import charStrAt, isStrSpace +from .state_inline import StateInline + + +def newline(state: StateInline, silent: bool) -> bool: + pos = state.pos + + if state.src[pos] != "\n": + return False + + pmax = len(state.pending) - 1 + maximum = state.posMax + + # ' \n' -> hardbreak + # Lookup in pending chars is bad practice! Don't copy to other rules! + # Pending string is stored in concat mode, indexed lookups will cause + # conversion to flat mode. + if not silent: + if pmax >= 0 and charStrAt(state.pending, pmax) == " ": + if pmax >= 1 and charStrAt(state.pending, pmax - 1) == " ": + # Find whitespaces tail of pending chars. + ws = pmax - 1 + while ws >= 1 and charStrAt(state.pending, ws - 1) == " ": + ws -= 1 + state.pending = state.pending[:ws] + + state.push("hardbreak", "br", 0) + else: + state.pending = state.pending[:-1] + state.push("softbreak", "br", 0) + + else: + state.push("softbreak", "br", 0) + + pos += 1 + + # skip heading spaces for next line + while pos < maximum and isStrSpace(state.src[pos]): + pos += 1 + + state.pos = pos + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/state_inline.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/state_inline.py new file mode 100644 index 000000000..c0c491c4b --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/state_inline.py @@ -0,0 +1,166 @@ +from __future__ import annotations + +from collections import namedtuple +from dataclasses import dataclass +from typing import TYPE_CHECKING, Any, Literal + +from .._compat import DATACLASS_KWARGS +from ..common.utils import isMdAsciiPunct, isPunctChar, isWhiteSpace +from ..ruler import StateBase +from ..token import Token +from ..utils import EnvType + +if TYPE_CHECKING: + from markdown_it import MarkdownIt + + +@dataclass(**DATACLASS_KWARGS) +class Delimiter: + # Char code of the starting marker (number). + marker: int + + # Total length of these series of delimiters. + length: int + + # A position of the token this delimiter corresponds to. + token: int + + # If this delimiter is matched as a valid opener, `end` will be + # equal to its position, otherwise it's `-1`. + end: int + + # Boolean flags that determine if this delimiter could open or close + # an emphasis. + open: bool + close: bool + + level: bool | None = None + + +Scanned = namedtuple("Scanned", ["can_open", "can_close", "length"]) + + +class StateInline(StateBase): + def __init__( + self, src: str, md: MarkdownIt, env: EnvType, outTokens: list[Token] + ) -> None: + self.src = src + self.env = env + self.md = md + self.tokens = outTokens + self.tokens_meta: list[dict[str, Any] | None] = [None] * len(outTokens) + + self.pos = 0 + self.posMax = len(self.src) + self.level = 0 + self.pending = "" + self.pendingLevel = 0 + + # Stores { start: end } pairs. Useful for backtrack + # optimization of pairs parse (emphasis, strikes). + self.cache: dict[int, int] = {} + + # List of emphasis-like delimiters for current tag + self.delimiters: list[Delimiter] = [] + + # Stack of delimiter lists for upper level tags + self._prev_delimiters: list[list[Delimiter]] = [] + + # backticklength => last seen position + self.backticks: dict[int, int] = {} + self.backticksScanned = False + + # Counter used to disable inline linkify-it execution + # inside and markdown links + self.linkLevel = 0 + + def __repr__(self) -> str: + return ( + f"{self.__class__.__name__}" + f"(pos=[{self.pos} of {self.posMax}], token={len(self.tokens)})" + ) + + def pushPending(self) -> Token: + token = Token("text", "", 0) + token.content = self.pending + token.level = self.pendingLevel + self.tokens.append(token) + self.pending = "" + return token + + def push(self, ttype: str, tag: str, nesting: Literal[-1, 0, 1]) -> Token: + """Push new token to "stream". + If pending text exists - flush it as text token + """ + if self.pending: + self.pushPending() + + token = Token(ttype, tag, nesting) + token_meta = None + + if nesting < 0: + # closing tag + self.level -= 1 + self.delimiters = self._prev_delimiters.pop() + + token.level = self.level + + if nesting > 0: + # opening tag + self.level += 1 + self._prev_delimiters.append(self.delimiters) + self.delimiters = [] + token_meta = {"delimiters": self.delimiters} + + self.pendingLevel = self.level + self.tokens.append(token) + self.tokens_meta.append(token_meta) + return token + + def scanDelims(self, start: int, canSplitWord: bool) -> Scanned: + """ + Scan a sequence of emphasis-like markers, and determine whether + it can start an emphasis sequence or end an emphasis sequence. + + - start - position to scan from (it should point at a valid marker); + - canSplitWord - determine if these markers can be found inside a word + + """ + pos = start + maximum = self.posMax + marker = self.src[start] + + # treat beginning of the line as a whitespace + lastChar = self.src[start - 1] if start > 0 else " " + + while pos < maximum and self.src[pos] == marker: + pos += 1 + + count = pos - start + + # treat end of the line as a whitespace + nextChar = self.src[pos] if pos < maximum else " " + + isLastPunctChar = isMdAsciiPunct(ord(lastChar)) or isPunctChar(lastChar) + isNextPunctChar = isMdAsciiPunct(ord(nextChar)) or isPunctChar(nextChar) + + isLastWhiteSpace = isWhiteSpace(ord(lastChar)) + isNextWhiteSpace = isWhiteSpace(ord(nextChar)) + + left_flanking = not ( + isNextWhiteSpace + or (isNextPunctChar and not (isLastWhiteSpace or isLastPunctChar)) + ) + right_flanking = not ( + isLastWhiteSpace + or (isLastPunctChar and not (isNextWhiteSpace or isNextPunctChar)) + ) + + if not canSplitWord: + can_open = left_flanking and ((not right_flanking) or isLastPunctChar) + can_close = right_flanking and ((not left_flanking) or isNextPunctChar) + else: + can_open = left_flanking + can_close = right_flanking + + return Scanned(can_open, can_close, count) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/strikethrough.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/strikethrough.py new file mode 100644 index 000000000..ec816281d --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/strikethrough.py @@ -0,0 +1,127 @@ +# ~~strike through~~ +from __future__ import annotations + +from .state_inline import Delimiter, StateInline + + +def tokenize(state: StateInline, silent: bool) -> bool: + """Insert each marker as a separate text token, and add it to delimiter list""" + start = state.pos + ch = state.src[start] + + if silent: + return False + + if ch != "~": + return False + + scanned = state.scanDelims(state.pos, True) + length = scanned.length + + if length < 2: + return False + + if length % 2: + token = state.push("text", "", 0) + token.content = ch + length -= 1 + + i = 0 + while i < length: + token = state.push("text", "", 0) + token.content = ch + ch + state.delimiters.append( + Delimiter( + marker=ord(ch), + length=0, # disable "rule of 3" length checks meant for emphasis + token=len(state.tokens) - 1, + end=-1, + open=scanned.can_open, + close=scanned.can_close, + ) + ) + + i += 2 + + state.pos += scanned.length + + return True + + +def _postProcess(state: StateInline, delimiters: list[Delimiter]) -> None: + loneMarkers = [] + maximum = len(delimiters) + + i = 0 + while i < maximum: + startDelim = delimiters[i] + + if startDelim.marker != 0x7E: # /* ~ */ + i += 1 + continue + + if startDelim.end == -1: + i += 1 + continue + + endDelim = delimiters[startDelim.end] + + token = state.tokens[startDelim.token] + token.type = "s_open" + token.tag = "s" + token.nesting = 1 + token.markup = "~~" + token.content = "" + + token = state.tokens[endDelim.token] + token.type = "s_close" + token.tag = "s" + token.nesting = -1 + token.markup = "~~" + token.content = "" + + if ( + state.tokens[endDelim.token - 1].type == "text" + and state.tokens[endDelim.token - 1].content == "~" + ): + loneMarkers.append(endDelim.token - 1) + + i += 1 + + # If a marker sequence has an odd number of characters, it's split + # like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the + # start of the sequence. + # + # So, we have to move all those markers after subsequent s_close tags. + # + while loneMarkers: + i = loneMarkers.pop() + j = i + 1 + + while (j < len(state.tokens)) and (state.tokens[j].type == "s_close"): + j += 1 + + j -= 1 + + if i != j: + token = state.tokens[j] + state.tokens[j] = state.tokens[i] + state.tokens[i] = token + + +def postProcess(state: StateInline) -> None: + """Walk through delimiter list and replace text tokens with tags.""" + tokens_meta = state.tokens_meta + maximum = len(state.tokens_meta) + _postProcess(state, state.delimiters) + + curr = 0 + while curr < maximum: + try: + curr_meta = tokens_meta[curr] + except IndexError: + pass + else: + if curr_meta and "delimiters" in curr_meta: + _postProcess(state, curr_meta["delimiters"]) + curr += 1 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/text.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/text.py new file mode 100644 index 000000000..f306b2e4c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/rules_inline/text.py @@ -0,0 +1,53 @@ +# Skip text characters for text token, place those to pending buffer +# and increment current pos +from .state_inline import StateInline + +# Rule to skip pure text +# '{}$%@~+=:' reserved for extensions + +# !!!! Don't confuse with "Markdown ASCII Punctuation" chars +# http://spec.commonmark.org/0.15/#ascii-punctuation-character + + +_TerminatorChars = { + "\n", + "!", + "#", + "$", + "%", + "&", + "*", + "+", + "-", + ":", + "<", + "=", + ">", + "@", + "[", + "\\", + "]", + "^", + "_", + "`", + "{", + "}", + "~", +} + + +def text(state: StateInline, silent: bool) -> bool: + pos = state.pos + posMax = state.posMax + while (pos < posMax) and state.src[pos] not in _TerminatorChars: + pos += 1 + + if pos == state.pos: + return False + + if not silent: + state.pending += state.src[state.pos : pos] + + state.pos = pos + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/token.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/token.py new file mode 100644 index 000000000..90008b722 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/token.py @@ -0,0 +1,180 @@ +from __future__ import annotations + +from collections.abc import Callable, MutableMapping +import dataclasses as dc +from typing import Any, Literal +import warnings + +from markdown_it._compat import DATACLASS_KWARGS + + +def convert_attrs(value: Any) -> Any: + """Convert Token.attrs set as ``None`` or ``[[key, value], ...]`` to a dict. + + This improves compatibility with upstream markdown-it. + """ + if not value: + return {} + if isinstance(value, list): + return dict(value) + return value + + +@dc.dataclass(**DATACLASS_KWARGS) +class Token: + type: str + """Type of the token (string, e.g. "paragraph_open")""" + + tag: str + """HTML tag name, e.g. 'p'""" + + nesting: Literal[-1, 0, 1] + """Level change (number in {-1, 0, 1} set), where: + - `1` means the tag is opening + - `0` means the tag is self-closing + - `-1` means the tag is closing + """ + + attrs: dict[str, str | int | float] = dc.field(default_factory=dict) + """HTML attributes. + Note this differs from the upstream "list of lists" format, + although than an instance can still be initialised with this format. + """ + + map: list[int] | None = None + """Source map info. Format: `[ line_begin, line_end ]`""" + + level: int = 0 + """Nesting level, the same as `state.level`""" + + children: list[Token] | None = None + """Array of child nodes (inline and img tokens).""" + + content: str = "" + """Inner content, in the case of a self-closing tag (code, html, fence, etc.),""" + + markup: str = "" + """'*' or '_' for emphasis, fence string for fence, etc.""" + + info: str = "" + """Additional information: + - Info string for "fence" tokens + - The value "auto" for autolink "link_open" and "link_close" tokens + - The string value of the item marker for ordered-list "list_item_open" tokens + """ + + meta: dict[Any, Any] = dc.field(default_factory=dict) + """A place for plugins to store any arbitrary data""" + + block: bool = False + """True for block-level tokens, false for inline tokens. + Used in renderer to calculate line breaks + """ + + hidden: bool = False + """If true, ignore this element when rendering. + Used for tight lists to hide paragraphs. + """ + + def __post_init__(self) -> None: + self.attrs = convert_attrs(self.attrs) + + def attrIndex(self, name: str) -> int: + warnings.warn( # noqa: B028 + "Token.attrIndex should not be used, since Token.attrs is a dictionary", + UserWarning, + ) + if name not in self.attrs: + return -1 + return list(self.attrs.keys()).index(name) + + def attrItems(self) -> list[tuple[str, str | int | float]]: + """Get (key, value) list of attrs.""" + return list(self.attrs.items()) + + def attrPush(self, attrData: tuple[str, str | int | float]) -> None: + """Add `[ name, value ]` attribute to list. Init attrs if necessary.""" + name, value = attrData + self.attrSet(name, value) + + def attrSet(self, name: str, value: str | int | float) -> None: + """Set `name` attribute to `value`. Override old value if exists.""" + self.attrs[name] = value + + def attrGet(self, name: str) -> None | str | int | float: + """Get the value of attribute `name`, or null if it does not exist.""" + return self.attrs.get(name, None) + + def attrJoin(self, name: str, value: str) -> None: + """Join value to existing attribute via space. + Or create new attribute if not exists. + Useful to operate with token classes. + """ + if name in self.attrs: + current = self.attrs[name] + if not isinstance(current, str): + raise TypeError( + f"existing attr 'name' is not a str: {self.attrs[name]}" + ) + self.attrs[name] = f"{current} {value}" + else: + self.attrs[name] = value + + def copy(self, **changes: Any) -> Token: + """Return a shallow copy of the instance.""" + return dc.replace(self, **changes) + + def as_dict( + self, + *, + children: bool = True, + as_upstream: bool = True, + meta_serializer: Callable[[dict[Any, Any]], Any] | None = None, + filter: Callable[[str, Any], bool] | None = None, + dict_factory: Callable[..., MutableMapping[str, Any]] = dict, + ) -> MutableMapping[str, Any]: + """Return the token as a dictionary. + + :param children: Also convert children to dicts + :param as_upstream: Ensure the output dictionary is equal to that created by markdown-it + For example, attrs are converted to null or lists + :param meta_serializer: hook for serializing ``Token.meta`` + :param filter: A callable whose return code determines whether an + attribute or element is included (``True``) or dropped (``False``). + Is called with the (key, value) pair. + :param dict_factory: A callable to produce dictionaries from. + For example, to produce ordered dictionaries instead of normal Python + dictionaries, pass in ``collections.OrderedDict``. + + """ + mapping = dict_factory((f.name, getattr(self, f.name)) for f in dc.fields(self)) + if filter: + mapping = dict_factory((k, v) for k, v in mapping.items() if filter(k, v)) + if as_upstream and "attrs" in mapping: + mapping["attrs"] = ( + None + if not mapping["attrs"] + else [[k, v] for k, v in mapping["attrs"].items()] + ) + if meta_serializer and "meta" in mapping: + mapping["meta"] = meta_serializer(mapping["meta"]) + if children and mapping.get("children", None): + mapping["children"] = [ + child.as_dict( + children=children, + filter=filter, + dict_factory=dict_factory, + as_upstream=as_upstream, + meta_serializer=meta_serializer, + ) + for child in mapping["children"] + ] + return mapping + + @classmethod + def from_dict(cls, dct: MutableMapping[str, Any]) -> Token: + """Convert a dict to a Token.""" + token = cls(**dct) + if token.children: + token.children = [cls.from_dict(c) for c in token.children] # type: ignore[arg-type] + return token diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/tree.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/tree.py new file mode 100644 index 000000000..6641e5a44 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/tree.py @@ -0,0 +1,345 @@ +"""A tree representation of a linear markdown-it token stream. + +This module is not part of upstream JavaScript markdown-it. +""" +from __future__ import annotations + +from collections.abc import Generator, Sequence +import textwrap +from typing import Any, NamedTuple, TypeVar, overload + +from .token import Token + + +class _NesterTokens(NamedTuple): + opening: Token + closing: Token + + +_NodeType = TypeVar("_NodeType", bound="SyntaxTreeNode") + + +class SyntaxTreeNode: + """A Markdown syntax tree node. + + A class that can be used to construct a tree representation of a linear + `markdown-it-py` token stream. + + Each node in the tree represents either: + - root of the Markdown document + - a single unnested `Token` + - a `Token` "_open" and "_close" token pair, and the tokens nested in + between + """ + + def __init__( + self, tokens: Sequence[Token] = (), *, create_root: bool = True + ) -> None: + """Initialize a `SyntaxTreeNode` from a token stream. + + If `create_root` is True, create a root node for the document. + """ + # Only nodes representing an unnested token have self.token + self.token: Token | None = None + + # Only containers have nester tokens + self.nester_tokens: _NesterTokens | None = None + + # Root node does not have self.parent + self._parent: Any = None + + # Empty list unless a non-empty container, or unnested token that has + # children (i.e. inline or img) + self._children: list[Any] = [] + + if create_root: + self._set_children_from_tokens(tokens) + return + + if not tokens: + raise ValueError( + "Can only create root from empty token sequence." + " Set `create_root=True`." + ) + elif len(tokens) == 1: + inline_token = tokens[0] + if inline_token.nesting: + raise ValueError( + "Unequal nesting level at the start and end of token stream." + ) + self.token = inline_token + if inline_token.children: + self._set_children_from_tokens(inline_token.children) + else: + self.nester_tokens = _NesterTokens(tokens[0], tokens[-1]) + self._set_children_from_tokens(tokens[1:-1]) + + def __repr__(self) -> str: + return f"{type(self).__name__}({self.type})" + + @overload + def __getitem__(self: _NodeType, item: int) -> _NodeType: + ... + + @overload + def __getitem__(self: _NodeType, item: slice) -> list[_NodeType]: + ... + + def __getitem__(self: _NodeType, item: int | slice) -> _NodeType | list[_NodeType]: + return self.children[item] + + def to_tokens(self: _NodeType) -> list[Token]: + """Recover the linear token stream.""" + + def recursive_collect_tokens(node: _NodeType, token_list: list[Token]) -> None: + if node.type == "root": + for child in node.children: + recursive_collect_tokens(child, token_list) + elif node.token: + token_list.append(node.token) + else: + assert node.nester_tokens + token_list.append(node.nester_tokens.opening) + for child in node.children: + recursive_collect_tokens(child, token_list) + token_list.append(node.nester_tokens.closing) + + tokens: list[Token] = [] + recursive_collect_tokens(self, tokens) + return tokens + + @property + def children(self: _NodeType) -> list[_NodeType]: + return self._children + + @children.setter + def children(self: _NodeType, value: list[_NodeType]) -> None: + self._children = value + + @property + def parent(self: _NodeType) -> _NodeType | None: + return self._parent # type: ignore + + @parent.setter + def parent(self: _NodeType, value: _NodeType | None) -> None: + self._parent = value + + @property + def is_root(self) -> bool: + """Is the node a special root node?""" + return not (self.token or self.nester_tokens) + + @property + def is_nested(self) -> bool: + """Is this node nested?. + + Returns `True` if the node represents a `Token` pair and tokens in the + sequence between them, where `Token.nesting` of the first `Token` in + the pair is 1 and nesting of the other `Token` is -1. + """ + return bool(self.nester_tokens) + + @property + def siblings(self: _NodeType) -> Sequence[_NodeType]: + """Get siblings of the node. + + Gets the whole group of siblings, including self. + """ + if not self.parent: + return [self] + return self.parent.children + + @property + def type(self) -> str: + """Get a string type of the represented syntax. + + - "root" for root nodes + - `Token.type` if the node represents an unnested token + - `Token.type` of the opening token, with "_open" suffix stripped, if + the node represents a nester token pair + """ + if self.is_root: + return "root" + if self.token: + return self.token.type + assert self.nester_tokens + return _removesuffix(self.nester_tokens.opening.type, "_open") + + @property + def next_sibling(self: _NodeType) -> _NodeType | None: + """Get the next node in the sequence of siblings. + + Returns `None` if this is the last sibling. + """ + self_index = self.siblings.index(self) + if self_index + 1 < len(self.siblings): + return self.siblings[self_index + 1] + return None + + @property + def previous_sibling(self: _NodeType) -> _NodeType | None: + """Get the previous node in the sequence of siblings. + + Returns `None` if this is the first sibling. + """ + self_index = self.siblings.index(self) + if self_index - 1 >= 0: + return self.siblings[self_index - 1] + return None + + def _add_child( + self, + tokens: Sequence[Token], + ) -> None: + """Make a child node for `self`.""" + child = type(self)(tokens, create_root=False) + child.parent = self + self.children.append(child) + + def _set_children_from_tokens(self, tokens: Sequence[Token]) -> None: + """Convert the token stream to a tree structure and set the resulting + nodes as children of `self`.""" + reversed_tokens = list(reversed(tokens)) + while reversed_tokens: + token = reversed_tokens.pop() + + if not token.nesting: + self._add_child([token]) + continue + if token.nesting != 1: + raise ValueError("Invalid token nesting") + + nested_tokens = [token] + nesting = 1 + while reversed_tokens and nesting: + token = reversed_tokens.pop() + nested_tokens.append(token) + nesting += token.nesting + if nesting: + raise ValueError(f"unclosed tokens starting {nested_tokens[0]}") + + self._add_child(nested_tokens) + + def pretty( + self, *, indent: int = 2, show_text: bool = False, _current: int = 0 + ) -> str: + """Create an XML style string of the tree.""" + prefix = " " * _current + text = prefix + f"<{self.type}" + if not self.is_root and self.attrs: + text += " " + " ".join(f"{k}={v!r}" for k, v in self.attrs.items()) + text += ">" + if ( + show_text + and not self.is_root + and self.type in ("text", "text_special") + and self.content + ): + text += "\n" + textwrap.indent(self.content, prefix + " " * indent) + for child in self.children: + text += "\n" + child.pretty( + indent=indent, show_text=show_text, _current=_current + indent + ) + return text + + def walk( + self: _NodeType, *, include_self: bool = True + ) -> Generator[_NodeType, None, None]: + """Recursively yield all descendant nodes in the tree starting at self. + + The order mimics the order of the underlying linear token + stream (i.e. depth first). + """ + if include_self: + yield self + for child in self.children: + yield from child.walk(include_self=True) + + # NOTE: + # The values of the properties defined below directly map to properties + # of the underlying `Token`s. A root node does not translate to a `Token` + # object, so calling these property getters on a root node will raise an + # `AttributeError`. + # + # There is no mapping for `Token.nesting` because the `is_nested` property + # provides that data, and can be called on any node type, including root. + + def _attribute_token(self) -> Token: + """Return the `Token` that is used as the data source for the + properties defined below.""" + if self.token: + return self.token + if self.nester_tokens: + return self.nester_tokens.opening + raise AttributeError("Root node does not have the accessed attribute") + + @property + def tag(self) -> str: + """html tag name, e.g. \"p\" """ + return self._attribute_token().tag + + @property + def attrs(self) -> dict[str, str | int | float]: + """Html attributes.""" + return self._attribute_token().attrs + + def attrGet(self, name: str) -> None | str | int | float: + """Get the value of attribute `name`, or null if it does not exist.""" + return self._attribute_token().attrGet(name) + + @property + def map(self) -> tuple[int, int] | None: + """Source map info. Format: `tuple[ line_begin, line_end ]`""" + map_ = self._attribute_token().map + if map_: + # Type ignore because `Token`s attribute types are not perfect + return tuple(map_) # type: ignore + return None + + @property + def level(self) -> int: + """nesting level, the same as `state.level`""" + return self._attribute_token().level + + @property + def content(self) -> str: + """In a case of self-closing tag (code, html, fence, etc.), it + has contents of this tag.""" + return self._attribute_token().content + + @property + def markup(self) -> str: + """'*' or '_' for emphasis, fence string for fence, etc.""" + return self._attribute_token().markup + + @property + def info(self) -> str: + """fence infostring""" + return self._attribute_token().info + + @property + def meta(self) -> dict[Any, Any]: + """A place for plugins to store an arbitrary data.""" + return self._attribute_token().meta + + @property + def block(self) -> bool: + """True for block-level tokens, false for inline tokens.""" + return self._attribute_token().block + + @property + def hidden(self) -> bool: + """If it's true, ignore this element when rendering. + Used for tight lists to hide paragraphs.""" + return self._attribute_token().hidden + + +def _removesuffix(string: str, suffix: str) -> str: + """Remove a suffix from a string. + + Replace this with str.removesuffix() from stdlib when minimum Python + version is 3.9. + """ + if suffix and string.endswith(suffix): + return string[: -len(suffix)] + return string diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/utils.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/utils.py new file mode 100644 index 000000000..a97937208 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it/utils.py @@ -0,0 +1,176 @@ +from __future__ import annotations + +from collections.abc import MutableMapping as MutableMappingABC +from pathlib import Path +from typing import Any, Callable, Iterable, MutableMapping, TypedDict, cast + +EnvType = MutableMapping[str, Any] # note: could use TypeAlias in python 3.10 +"""Type for the environment sandbox used in parsing and rendering, +which stores mutable variables for use by plugins and rules. +""" + + +class OptionsType(TypedDict): + """Options for parsing.""" + + maxNesting: int + """Internal protection, recursion limit.""" + html: bool + """Enable HTML tags in source.""" + linkify: bool + """Enable autoconversion of URL-like texts to links.""" + typographer: bool + """Enable smartquotes and replacements.""" + quotes: str + """Quote characters.""" + xhtmlOut: bool + """Use '/' to close single tags (
).""" + breaks: bool + """Convert newlines in paragraphs into
.""" + langPrefix: str + """CSS language prefix for fenced blocks.""" + highlight: Callable[[str, str, str], str] | None + """Highlighter function: (content, lang, attrs) -> str.""" + + +class PresetType(TypedDict): + """Preset configuration for markdown-it.""" + + options: OptionsType + """Options for parsing.""" + components: MutableMapping[str, MutableMapping[str, list[str]]] + """Components for parsing and rendering.""" + + +class OptionsDict(MutableMappingABC): # type: ignore + """A dictionary, with attribute access to core markdownit configuration options.""" + + # Note: ideally we would probably just remove attribute access entirely, + # but we keep it for backwards compatibility. + + def __init__(self, options: OptionsType) -> None: + self._options = cast(OptionsType, dict(options)) + + def __getitem__(self, key: str) -> Any: + return self._options[key] # type: ignore[literal-required] + + def __setitem__(self, key: str, value: Any) -> None: + self._options[key] = value # type: ignore[literal-required] + + def __delitem__(self, key: str) -> None: + del self._options[key] # type: ignore + + def __iter__(self) -> Iterable[str]: # type: ignore + return iter(self._options) + + def __len__(self) -> int: + return len(self._options) + + def __repr__(self) -> str: + return repr(self._options) + + def __str__(self) -> str: + return str(self._options) + + @property + def maxNesting(self) -> int: + """Internal protection, recursion limit.""" + return self._options["maxNesting"] + + @maxNesting.setter + def maxNesting(self, value: int) -> None: + self._options["maxNesting"] = value + + @property + def html(self) -> bool: + """Enable HTML tags in source.""" + return self._options["html"] + + @html.setter + def html(self, value: bool) -> None: + self._options["html"] = value + + @property + def linkify(self) -> bool: + """Enable autoconversion of URL-like texts to links.""" + return self._options["linkify"] + + @linkify.setter + def linkify(self, value: bool) -> None: + self._options["linkify"] = value + + @property + def typographer(self) -> bool: + """Enable smartquotes and replacements.""" + return self._options["typographer"] + + @typographer.setter + def typographer(self, value: bool) -> None: + self._options["typographer"] = value + + @property + def quotes(self) -> str: + """Quote characters.""" + return self._options["quotes"] + + @quotes.setter + def quotes(self, value: str) -> None: + self._options["quotes"] = value + + @property + def xhtmlOut(self) -> bool: + """Use '/' to close single tags (
).""" + return self._options["xhtmlOut"] + + @xhtmlOut.setter + def xhtmlOut(self, value: bool) -> None: + self._options["xhtmlOut"] = value + + @property + def breaks(self) -> bool: + """Convert newlines in paragraphs into
.""" + return self._options["breaks"] + + @breaks.setter + def breaks(self, value: bool) -> None: + self._options["breaks"] = value + + @property + def langPrefix(self) -> str: + """CSS language prefix for fenced blocks.""" + return self._options["langPrefix"] + + @langPrefix.setter + def langPrefix(self, value: str) -> None: + self._options["langPrefix"] = value + + @property + def highlight(self) -> Callable[[str, str, str], str] | None: + """Highlighter function: (content, langName, langAttrs) -> escaped HTML.""" + return self._options["highlight"] + + @highlight.setter + def highlight(self, value: Callable[[str, str, str], str] | None) -> None: + self._options["highlight"] = value + + +def read_fixture_file(path: str | Path) -> list[list[Any]]: + text = Path(path).read_text(encoding="utf-8") + tests = [] + section = 0 + last_pos = 0 + lines = text.splitlines(keepends=True) + for i in range(len(lines)): + if lines[i].rstrip() == ".": + if section == 0: + tests.append([i, lines[i - 1].strip()]) + section = 1 + elif section == 1: + tests[-1].append("".join(lines[last_pos + 1 : i])) + section = 2 + elif section == 2: + tests[-1].append("".join(lines[last_pos + 1 : i])) + section = 0 + + last_pos = i + return tests diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/LICENSE new file mode 100644 index 000000000..582ddf59e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 ExecutableBookProject + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/LICENSE.markdown-it b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/LICENSE.markdown-it new file mode 100644 index 000000000..7ffa058cb --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/LICENSE.markdown-it @@ -0,0 +1,22 @@ +Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/METADATA new file mode 100644 index 000000000..8a2978bc0 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/METADATA @@ -0,0 +1,205 @@ +Metadata-Version: 2.1 +Name: markdown-it-py +Version: 3.0.0 +Summary: Python port of markdown-it. Markdown parsing, done right! +Keywords: markdown,lexer,parser,commonmark,markdown-it +Author-email: Chris Sewell +Requires-Python: >=3.8 +Description-Content-Type: text/markdown +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup +Requires-Dist: mdurl~=0.1 +Requires-Dist: psutil ; extra == "benchmarking" +Requires-Dist: pytest ; extra == "benchmarking" +Requires-Dist: pytest-benchmark ; extra == "benchmarking" +Requires-Dist: pre-commit~=3.0 ; extra == "code_style" +Requires-Dist: commonmark~=0.9 ; extra == "compare" +Requires-Dist: markdown~=3.4 ; extra == "compare" +Requires-Dist: mistletoe~=1.0 ; extra == "compare" +Requires-Dist: mistune~=2.0 ; extra == "compare" +Requires-Dist: panflute~=2.3 ; extra == "compare" +Requires-Dist: linkify-it-py>=1,<3 ; extra == "linkify" +Requires-Dist: mdit-py-plugins ; extra == "plugins" +Requires-Dist: gprof2dot ; extra == "profiling" +Requires-Dist: mdit-py-plugins ; extra == "rtd" +Requires-Dist: myst-parser ; extra == "rtd" +Requires-Dist: pyyaml ; extra == "rtd" +Requires-Dist: sphinx ; extra == "rtd" +Requires-Dist: sphinx-copybutton ; extra == "rtd" +Requires-Dist: sphinx-design ; extra == "rtd" +Requires-Dist: sphinx_book_theme ; extra == "rtd" +Requires-Dist: jupyter_sphinx ; extra == "rtd" +Requires-Dist: coverage ; extra == "testing" +Requires-Dist: pytest ; extra == "testing" +Requires-Dist: pytest-cov ; extra == "testing" +Requires-Dist: pytest-regressions ; extra == "testing" +Project-URL: Documentation, https://markdown-it-py.readthedocs.io +Project-URL: Homepage, https://github.com/executablebooks/markdown-it-py +Provides-Extra: benchmarking +Provides-Extra: code_style +Provides-Extra: compare +Provides-Extra: linkify +Provides-Extra: plugins +Provides-Extra: profiling +Provides-Extra: rtd +Provides-Extra: testing + +# markdown-it-py + +[![Github-CI][github-ci]][github-link] +[![Coverage Status][codecov-badge]][codecov-link] +[![PyPI][pypi-badge]][pypi-link] +[![Conda][conda-badge]][conda-link] +[![Code style: black][black-badge]][black-link] +[![PyPI - Downloads][install-badge]][install-link] + +> Markdown parser done right. + +- Follows the __[CommonMark spec](http://spec.commonmark.org/)__ for baseline parsing +- Configurable syntax: you can add new rules and even replace existing ones. +- Pluggable: Adds syntax extensions to extend the parser (see the [plugin list][md-plugins]). +- High speed (see our [benchmarking tests][md-performance]) +- [Safe by default][md-security] +- Member of [Google's Assured Open Source Software](https://cloud.google.com/assured-open-source-software/docs/supported-packages) + +This is a Python port of [markdown-it], and some of its associated plugins. +For more details see: . + +For details on [markdown-it] itself, see: + +- The __[Live demo](https://markdown-it.github.io)__ +- [The markdown-it README][markdown-it-readme] + +## Installation + +```bash +conda install -c conda-forge markdown-it-py +``` + +or + +```bash +pip install markdown-it-py[plugins] +``` + +or with extras + +```bash +conda install -c conda-forge markdown-it-py linkify-it-py mdit-py-plugins +pip install markdown-it-py[linkify,plugins] +``` + +## Usage + +### Python API Usage + +Render markdown to HTML with markdown-it-py and a custom configuration +with and without plugins and features: + +```python +from markdown_it import MarkdownIt +from mdit_py_plugins.front_matter import front_matter_plugin +from mdit_py_plugins.footnote import footnote_plugin + +md = ( + MarkdownIt('commonmark' ,{'breaks':True,'html':True}) + .use(front_matter_plugin) + .use(footnote_plugin) + .enable('table') +) +text = (""" +--- +a: 1 +--- + +a | b +- | - +1 | 2 + +A footnote [^1] + +[^1]: some details +""") +tokens = md.parse(text) +html_text = md.render(text) + +## To export the html to a file, uncomment the lines below: +# from pathlib import Path +# Path("output.html").write_text(html_text) +``` + +### Command-line Usage + +Render markdown to HTML with markdown-it-py from the +command-line: + +```console +usage: markdown-it [-h] [-v] [filenames [filenames ...]] + +Parse one or more markdown files, convert each to HTML, and print to stdout + +positional arguments: + filenames specify an optional list of files to convert + +optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + +Interactive: + + $ markdown-it + markdown-it-py [version 0.0.0] (interactive) + Type Ctrl-D to complete input, or Ctrl-C to exit. + >>> # Example + ... > markdown *input* + ... +

Example

+
+

markdown input

+
+ +Batch: + + $ markdown-it README.md README.footer.md > index.html + +``` + +## References / Thanks + +Big thanks to the authors of [markdown-it]: + +- Alex Kocharin [github/rlidwka](https://github.com/rlidwka) +- Vitaly Puzrin [github/puzrin](https://github.com/puzrin) + +Also [John MacFarlane](https://github.com/jgm) for his work on the CommonMark spec and reference implementations. + +[github-ci]: https://github.com/executablebooks/markdown-it-py/workflows/Python%20package/badge.svg?branch=master +[github-link]: https://github.com/executablebooks/markdown-it-py +[pypi-badge]: https://img.shields.io/pypi/v/markdown-it-py.svg +[pypi-link]: https://pypi.org/project/markdown-it-py +[conda-badge]: https://anaconda.org/conda-forge/markdown-it-py/badges/version.svg +[conda-link]: https://anaconda.org/conda-forge/markdown-it-py +[codecov-badge]: https://codecov.io/gh/executablebooks/markdown-it-py/branch/master/graph/badge.svg +[codecov-link]: https://codecov.io/gh/executablebooks/markdown-it-py +[black-badge]: https://img.shields.io/badge/code%20style-black-000000.svg +[black-link]: https://github.com/ambv/black +[install-badge]: https://img.shields.io/pypi/dw/markdown-it-py?label=pypi%20installs +[install-link]: https://pypistats.org/packages/markdown-it-py + +[CommonMark spec]: http://spec.commonmark.org/ +[markdown-it]: https://github.com/markdown-it/markdown-it +[markdown-it-readme]: https://github.com/markdown-it/markdown-it/blob/master/README.md +[md-security]: https://markdown-it-py.readthedocs.io/en/latest/other.html +[md-performance]: https://markdown-it-py.readthedocs.io/en/latest/other.html +[md-plugins]: https://markdown-it-py.readthedocs.io/en/latest/plugins.html + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/RECORD new file mode 100644 index 000000000..3f74123e3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/RECORD @@ -0,0 +1,142 @@ +../../../bin/markdown-it,sha256=Og2bw9GzO-c6hZCoj7nt_v3H-8Syd4xw6Gk9T6FyBqc,280 +markdown_it/__init__.py,sha256=9v3vCD7XQJujcZLU2F14T8O88JJO93rZaUoKu7cocH8,113 +markdown_it/__pycache__/__init__.cpython-312.pyc,, +markdown_it/__pycache__/_compat.cpython-312.pyc,, +markdown_it/__pycache__/_punycode.cpython-312.pyc,, +markdown_it/__pycache__/main.cpython-312.pyc,, +markdown_it/__pycache__/parser_block.cpython-312.pyc,, +markdown_it/__pycache__/parser_core.cpython-312.pyc,, +markdown_it/__pycache__/parser_inline.cpython-312.pyc,, +markdown_it/__pycache__/renderer.cpython-312.pyc,, +markdown_it/__pycache__/ruler.cpython-312.pyc,, +markdown_it/__pycache__/token.cpython-312.pyc,, +markdown_it/__pycache__/tree.cpython-312.pyc,, +markdown_it/__pycache__/utils.cpython-312.pyc,, +markdown_it/_compat.py,sha256=mfhalPobHpl8uYt2V6SCOZq3HqaGlWP8MjICwDvS_xE,246 +markdown_it/_punycode.py,sha256=Y_m-fzc5Ey_Kw09MPNN5TUMnPXm2cACUZE_qwUkfFrM,2364 +markdown_it/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +markdown_it/cli/__pycache__/__init__.cpython-312.pyc,, +markdown_it/cli/__pycache__/parse.cpython-312.pyc,, +markdown_it/cli/parse.py,sha256=ZiTSx6t7nLk7rGAtIi0a02EB9sDGJn7YLjKKtufdwNA,2901 +markdown_it/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +markdown_it/common/__pycache__/__init__.cpython-312.pyc,, +markdown_it/common/__pycache__/entities.cpython-312.pyc,, +markdown_it/common/__pycache__/html_blocks.cpython-312.pyc,, +markdown_it/common/__pycache__/html_re.cpython-312.pyc,, +markdown_it/common/__pycache__/normalize_url.cpython-312.pyc,, +markdown_it/common/__pycache__/utils.cpython-312.pyc,, +markdown_it/common/entities.py,sha256=6ulEjBAWYH5lVobgpn5lChPYhPKkdPyVHpNT7O1_x90,156 +markdown_it/common/html_blocks.py,sha256=1cMBp6jIdXqCHvEs2mpJqVGqTuFi6ExL4VO754yksgU,932 +markdown_it/common/html_re.py,sha256=0q5QFkSnX_l7Ob37MDSj2UYT0onCPz_07hUod2K-a6A,929 +markdown_it/common/normalize_url.py,sha256=avOXnLd9xw5jU1q5PLftjAM9pvGx8l9QDEkmZSyrMgg,2568 +markdown_it/common/utils.py,sha256=l2ypUup7jVBwGZJb8M2lxllmTWq8wN5TMV40Mndqu1A,10728 +markdown_it/helpers/__init__.py,sha256=9W7GycpZcq2up1CdVcUpdN77i9Vl4N0CT3y3qMkTjY4,253 +markdown_it/helpers/__pycache__/__init__.cpython-312.pyc,, +markdown_it/helpers/__pycache__/parse_link_destination.cpython-312.pyc,, +markdown_it/helpers/__pycache__/parse_link_label.cpython-312.pyc,, +markdown_it/helpers/__pycache__/parse_link_title.cpython-312.pyc,, +markdown_it/helpers/parse_link_destination.py,sha256=whJoEo42RmgiVpyc2TmTb73nPK3L-DZuZqfE2f8B20Q,1977 +markdown_it/helpers/parse_link_label.py,sha256=HXAnGlAL-2Op6I-lfeuzBIJBjESCRZws6xKKS3lKFSg,1036 +markdown_it/helpers/parse_link_title.py,sha256=5h5YctAUPmaeBqAlCDzzB220-i64HxYyJ27ui-xMBn0,1425 +markdown_it/main.py,sha256=7BYAkBbDmgbdVGNrpAaWZ_-u2-DoYsOCtXWg5uv3Gvg,12772 +markdown_it/parser_block.py,sha256=1bvZMDIdfBYrRNHpZPzmX6W4GXXaFUDqq2iaxDWP-BM,3911 +markdown_it/parser_core.py,sha256=asPHnvL0sk2oqWC69VM8OAqKs-Dk--GRHhGwZonLm6s,1010 +markdown_it/parser_inline.py,sha256=0ZAiRx2GkQ35va1QRxDeDZvpa44wZBNnVFsGzCyj_Po,4997 +markdown_it/port.yaml,sha256=F6WvtDFxjuZ5o0NtmJO0P8SkG6OfONCj_ggKgx4iYWU,2446 +markdown_it/presets/__init__.py,sha256=tLc9od5iXBEkKR6wbXOVPC5S5vkGYK-67tQslhWu7LY,970 +markdown_it/presets/__pycache__/__init__.cpython-312.pyc,, +markdown_it/presets/__pycache__/commonmark.cpython-312.pyc,, +markdown_it/presets/__pycache__/default.cpython-312.pyc,, +markdown_it/presets/__pycache__/zero.cpython-312.pyc,, +markdown_it/presets/commonmark.py,sha256=pqVnOnMmCmiZWHvNnXx4E1FS8VV07jcqUW1EsHuv9rE,2868 +markdown_it/presets/default.py,sha256=TgqnjjHX6SWcElk5yjW1hoP8t2-ESZ0QyrmHprmIL18,1810 +markdown_it/presets/zero.py,sha256=2vETQRRW1v9Ug3TsdRhM9r6wgZRuTcvojwcqDcsZfkI,2112 +markdown_it/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26 +markdown_it/renderer.py,sha256=jZ62oK-y-qaz8o8TDxCUMvS5OavraJ2-1uaWVqrUCv0,9970 +markdown_it/ruler.py,sha256=J18Pru7u77kqJfnMC5oiFWgnw_58vkbfk5hWQBgED7s,9199 +markdown_it/rules_block/__init__.py,sha256=8su1tOxDw_IR9JSdgqfkGZSNdYpZZCBC9MMmFODdbmE,553 +markdown_it/rules_block/__pycache__/__init__.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/blockquote.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/code.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/fence.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/heading.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/hr.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/html_block.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/lheading.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/list.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/paragraph.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/reference.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/state_block.cpython-312.pyc,, +markdown_it/rules_block/__pycache__/table.cpython-312.pyc,, +markdown_it/rules_block/blockquote.py,sha256=7uymS36dcrned3DsIaRcqcbFU1NlymhvsZpEXTD3_n8,8887 +markdown_it/rules_block/code.py,sha256=ASAnisg4hS2RhnP_7_1_pjx4NbFSYmrs6lHDgtHPXIo,859 +markdown_it/rules_block/fence.py,sha256=BJgU-PqZ4vAlCqGcrc8UtdLpJJyMeRWN-G-Op-zxrMc,2537 +markdown_it/rules_block/heading.py,sha256=e9NnvXLbY1bvowq_Pd4S-g6LbVg3iCx26qzwv3jLUyE,1746 +markdown_it/rules_block/hr.py,sha256=fPJ-tubFKjxJxhKPiTAxVP-_LHYbAq32iZ52J5sFxOU,1226 +markdown_it/rules_block/html_block.py,sha256=wA8pb34LtZr1BkIATgGKQBIGX5jQNOkwZl9UGEqvb5M,2721 +markdown_it/rules_block/lheading.py,sha256=fWoEuUo7S2svr5UMKmyQMkh0hheYAHg2gMM266Mogs4,2625 +markdown_it/rules_block/list.py,sha256=gIodkAJFyOIyKCZCj5lAlL7jIj5kAzrDb-K-2MFNplY,9668 +markdown_it/rules_block/paragraph.py,sha256=pQqTn8yYDI6_mWX-_m6PXY4wvDQB1nZ4dVUp3gKu1GA,1818 +markdown_it/rules_block/reference.py,sha256=qzR-KJ_60W8ZzuwYGLlO1bgHHVQP4qlYG4yFpOpNlsA,6168 +markdown_it/rules_block/state_block.py,sha256=HowsQyy5hGUibH4HRZWKfLIlXeDUnuWL7kpF0-rSwoM,8422 +markdown_it/rules_block/table.py,sha256=Zjkc0378QtfQzrhrNWC2kVYsGnOLaZyD3dXG1ugfX-s,6987 +markdown_it/rules_core/__init__.py,sha256=JZNOpLZ4i1vR56StidUa-A_As1XtbDwQR0iEErOXyOI,394 +markdown_it/rules_core/__pycache__/__init__.cpython-312.pyc,, +markdown_it/rules_core/__pycache__/block.cpython-312.pyc,, +markdown_it/rules_core/__pycache__/inline.cpython-312.pyc,, +markdown_it/rules_core/__pycache__/linkify.cpython-312.pyc,, +markdown_it/rules_core/__pycache__/normalize.cpython-312.pyc,, +markdown_it/rules_core/__pycache__/replacements.cpython-312.pyc,, +markdown_it/rules_core/__pycache__/smartquotes.cpython-312.pyc,, +markdown_it/rules_core/__pycache__/state_core.cpython-312.pyc,, +markdown_it/rules_core/__pycache__/text_join.cpython-312.pyc,, +markdown_it/rules_core/block.py,sha256=0_JY1CUy-H2OooFtIEZAACtuoGUMohgxo4Z6A_UinSg,372 +markdown_it/rules_core/inline.py,sha256=9oWmeBhJHE7x47oJcN9yp6UsAZtrEY_A-VmfoMvKld4,325 +markdown_it/rules_core/linkify.py,sha256=mjQqpk_lHLh2Nxw4UFaLxa47Fgi-OHnmDamlgXnhmv0,5141 +markdown_it/rules_core/normalize.py,sha256=qVkBO4elitPzyP_sQENho-ycUl8s4eNZ1zZrsR2AAgk,402 +markdown_it/rules_core/replacements.py,sha256=NHL9MOuEnPuMFPLDtTYDK9yj7F2FSleMr6bPro-ciaQ,3470 +markdown_it/rules_core/smartquotes.py,sha256=CtawEcTHYgzIWZwxIGs8e8oSKhm0B7th2305I3FNEc0,7443 +markdown_it/rules_core/state_core.py,sha256=HqWZCUr5fW7xG6jeQZDdO0hE9hxxyl3_-bawgOy57HY,570 +markdown_it/rules_core/text_join.py,sha256=JVuq_27LoI0IjJDmCXOuRiTs1rmSFhFUUjh6MdF_YCk,1172 +markdown_it/rules_inline/__init__.py,sha256=Zvl8P8V830vDhcQKEleLKZ_paC-ypTn7eWpmFa9yySQ,696 +markdown_it/rules_inline/__pycache__/__init__.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/autolink.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/backticks.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/balance_pairs.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/emphasis.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/entity.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/escape.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/fragments_join.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/html_inline.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/image.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/link.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/linkify.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/newline.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/state_inline.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/strikethrough.cpython-312.pyc,, +markdown_it/rules_inline/__pycache__/text.cpython-312.pyc,, +markdown_it/rules_inline/autolink.py,sha256=l4EY7OLzuda350cT6Du_dggEwcb96TvD7YPXf2H6P1M,2079 +markdown_it/rules_inline/backticks.py,sha256=J7bezjjNxiXlKqvHc0fJkHZwH7-2nBsXVjcKydk8E4M,2037 +markdown_it/rules_inline/balance_pairs.py,sha256=vifasmne02sNaBBwuZsA4yI02vmv1gvVN4qR-b9m62E,4851 +markdown_it/rules_inline/emphasis.py,sha256=7aDLZx0Jlekuvbu3uEUTDhJp00Z0Pj6g4C3-VLhI8Co,3123 +markdown_it/rules_inline/entity.py,sha256=CE8AIGMi5isEa24RNseo0wRmTTaj5YLbgTFdDmBesAU,1651 +markdown_it/rules_inline/escape.py,sha256=5DEa7O6ByUfXdXZudcF7JZwLxXG1njAuXIOUsNDPPqU,1658 +markdown_it/rules_inline/fragments_join.py,sha256=_3JbwWYJz74gRHeZk6T8edVJT2IVSsi7FfmJJlieQlA,1493 +markdown_it/rules_inline/html_inline.py,sha256=SBg6HR0HRqCdrkkec0dfOYuQdAqyfeLRFLeQggtgjvg,1130 +markdown_it/rules_inline/image.py,sha256=AMO7kls5c-C4A_S2rBiIlKD8BQ8vIgyWUX7vCpXy_Qs,4135 +markdown_it/rules_inline/link.py,sha256=wRdTMxjNYFiV6uouZMML3fIPvyFrPtMHWzJNBQcQLV0,4318 +markdown_it/rules_inline/linkify.py,sha256=gmHw59SsMQLImv6v1RkDY9lcQAmTN-UZ4GwRFiR8jlg,1704 +markdown_it/rules_inline/newline.py,sha256=LEIhBB_3PPLeCAgaC2naheMjW5N6b9UaAB6sh47Ckz8,1296 +markdown_it/rules_inline/state_inline.py,sha256=rXmMX0P0pCf-v-013YB24MBQxMn2dJhoSZQMNYAZ8HQ,5101 +markdown_it/rules_inline/strikethrough.py,sha256=pwcPlyhkh5pqFVxRCSrdW5dNCIOtU4eDit7TVDTPIVA,3214 +markdown_it/rules_inline/text.py,sha256=GwmMVZziAmhj48l9VaXAXwzzUKDkhaA14thv-TCaS2M,901 +markdown_it/token.py,sha256=NEvuoYAeDh8_6zT6fukzdoncusVOjyUKw2zjsNgZmp4,6439 +markdown_it/tree.py,sha256=YxSqq3qSuhHHm1nQpPUhyDA4VIWHu_G_92bKdUcXXGM,11421 +markdown_it/utils.py,sha256=zPoQ8lhvxtJfg6iNSim0LcnAL0Y4XnV3G4DIIKmL8OU,5365 +markdown_it_py-3.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +markdown_it_py-3.0.0.dist-info/LICENSE,sha256=SiJg1uLND1oVGh6G2_59PtVSseK-q_mUHBulxJy85IQ,1078 +markdown_it_py-3.0.0.dist-info/LICENSE.markdown-it,sha256=eSxIxahJoV_fnjfovPnm0d0TsytGxkKnSKCkapkZ1HM,1073 +markdown_it_py-3.0.0.dist-info/METADATA,sha256=0-kME4KQNSCGPzfSEFgQc8MhUd5cmG-LO007BFk3_fw,6940 +markdown_it_py-3.0.0.dist-info/RECORD,, +markdown_it_py-3.0.0.dist-info/WHEEL,sha256=4TfKIB_xu-04bc2iKz6_zFt-gEFEEDU_31HGhqzOCE8,81 +markdown_it_py-3.0.0.dist-info/entry_points.txt,sha256=T81l7fHQ3pllpQ4wUtQK6a8g_p6wxQbnjKVHCk2WMG4,58 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/WHEEL new file mode 100644 index 000000000..668ba4d01 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.7.1 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/entry_points.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/entry_points.txt new file mode 100644 index 000000000..7d829cd79 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/markdown_it_py-3.0.0.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +markdown-it=markdown_it.cli.parse:main + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/LICENSE new file mode 100644 index 000000000..582ddf59e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 ExecutableBookProject + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/METADATA new file mode 100644 index 000000000..657de97e9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/METADATA @@ -0,0 +1,58 @@ +Metadata-Version: 2.1 +Name: mdit-py-plugins +Version: 0.4.2 +Summary: Collection of plugins for markdown-it-py +Keywords: markdown,markdown-it,lexer,parser,development +Author-email: Chris Sewell +Requires-Python: >=3.8 +Description-Content-Type: text/markdown +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup +Requires-Dist: markdown-it-py>=1.0.0,<4.0.0 +Requires-Dist: pre-commit ; extra == "code_style" +Requires-Dist: myst-parser ; extra == "rtd" +Requires-Dist: sphinx-book-theme ; extra == "rtd" +Requires-Dist: coverage ; extra == "testing" +Requires-Dist: pytest ; extra == "testing" +Requires-Dist: pytest-cov ; extra == "testing" +Requires-Dist: pytest-regressions ; extra == "testing" +Project-URL: Documentation, https://mdit-py-plugins.readthedocs.io +Project-URL: Homepage, https://github.com/executablebooks/mdit-py-plugins +Provides-Extra: code_style +Provides-Extra: rtd +Provides-Extra: testing + +# mdit-py-plugins + +[![Github-CI][github-ci]][github-link] +[![Coverage Status][codecov-badge]][codecov-link] +[![PyPI][pypi-badge]][pypi-link] +[![Conda][conda-badge]][conda-link] +[![Code style: black][black-badge]][black-link] + +Collection of core plugins for [markdown-it-py](https://github.com/executablebooks/markdown-it-py). + +[github-ci]: https://github.com/executablebooks/mdit-py-plugins/workflows/continuous-integration/badge.svg +[github-link]: https://github.com/executablebooks/mdit-py-plugins +[pypi-badge]: https://img.shields.io/pypi/v/mdit-py-plugins.svg +[pypi-link]: https://pypi.org/project/mdit-py-plugins +[conda-badge]: https://anaconda.org/conda-forge/mdit-py-plugins/badges/version.svg +[conda-link]: https://anaconda.org/conda-forge/mdit-py-plugins +[codecov-badge]: https://codecov.io/gh/executablebooks/mdit-py-plugins/branch/master/graph/badge.svg +[codecov-link]: https://codecov.io/gh/executablebooks/mdit-py-plugins +[black-badge]: https://img.shields.io/badge/code%20style-black-000000.svg +[black-link]: https://github.com/ambv/black +[install-badge]: https://img.shields.io/pypi/dw/mdit-py-plugins?label=pypi%20installs +[install-link]: https://pypistats.org/packages/mdit-py-plugins + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/RECORD new file mode 100644 index 000000000..46caf39b2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/RECORD @@ -0,0 +1,84 @@ +mdit_py_plugins-0.4.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +mdit_py_plugins-0.4.2.dist-info/LICENSE,sha256=SiJg1uLND1oVGh6G2_59PtVSseK-q_mUHBulxJy85IQ,1078 +mdit_py_plugins-0.4.2.dist-info/METADATA,sha256=EImhsST7-84FNKyrS2GDMZKn57CgcQs4m-TRZwIFN5I,2790 +mdit_py_plugins-0.4.2.dist-info/RECORD,, +mdit_py_plugins-0.4.2.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81 +mdit_py_plugins/__init__.py,sha256=6hfVa12Q-nXyUEXr6SyKpqPEDJW6vlRHyPxlA27PfTs,22 +mdit_py_plugins/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/__pycache__/colon_fence.cpython-312.pyc,, +mdit_py_plugins/__pycache__/substitution.cpython-312.pyc,, +mdit_py_plugins/__pycache__/utils.cpython-312.pyc,, +mdit_py_plugins/admon/LICENSE,sha256=aZNVpEyySGMaTN5UICm1k7fmZjgjsFGDOOhf1lNgusM,1129 +mdit_py_plugins/admon/__init__.py,sha256=hs83qYY4Rd_J3AUiA16vAMg-d9OrDEFD3_UgY2saekk,61 +mdit_py_plugins/admon/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/admon/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/admon/index.py,sha256=7jM3ZV7BuMFSa6uYdaiU7bUnLE0Ryt0hk4A0ydR1iSo,6838 +mdit_py_plugins/admon/port.yaml,sha256=yz4yIZzkEJuBlakkg4DR1H-UQ8Rupi2sFfUgEoRd7Hs,117 +mdit_py_plugins/amsmath/__init__.py,sha256=Sipjk4rN_qIV8GmCMp1kYvM-XedFEcJp_yqgslphfGk,5246 +mdit_py_plugins/amsmath/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/anchors/__init__.py,sha256=Jxh1IoXBVPCq1sJy5Y2HVU75SJYX1nPHLQdffgy7tn4,65 +mdit_py_plugins/anchors/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/anchors/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/anchors/index.py,sha256=mkOsY-rtvDqsP7Q3gE6vPt62NLxbIwfvz1nIjSSU5KE,4114 +mdit_py_plugins/attrs/__init__.py,sha256=zlGwcbSXbP9j3e9MQxk7H7E6TCUaH4NWowqA3AltoPA,102 +mdit_py_plugins/attrs/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/attrs/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/attrs/__pycache__/parse.cpython-312.pyc,, +mdit_py_plugins/attrs/index.py,sha256=1zHpTul3dZzm-Cl7ZvMysAmV10oeveR4ArV4ENjVlnA,8929 +mdit_py_plugins/attrs/parse.py,sha256=tuY3O2CqFw0Ke3dRPJKbZhzz_TZjpqsIILnUiskqXXU,7755 +mdit_py_plugins/colon_fence.py,sha256=1UUR-aNz-gf7bQZbCjPu3t80p4ayeXwCemO29tCuYyc,3955 +mdit_py_plugins/container/LICENSE,sha256=yRM5kQ0wDxY-3K3b-zkJ8c_64ZpJa3_jk1qaQHPcMFo,1073 +mdit_py_plugins/container/README.md,sha256=p3RLqZ1D29cd3YQHlQJ9L-wBqU8lYE34DxI61y1hJ4s,2533 +mdit_py_plugins/container/__init__.py,sha256=9725BJeIOmhE505WzUYVhRYONkxA86GeaDoWCSAkEkU,69 +mdit_py_plugins/container/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/container/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/container/index.py,sha256=osBdFWTsMObpElSDCu93-ZK7udFi6xVim0jJqXgNPvI,5770 +mdit_py_plugins/container/port.yaml,sha256=VH416O3kpS3EEyXCXdbPmB5ekftLfvt8_WZrzAMttac,132 +mdit_py_plugins/deflist/LICENSE,sha256=gdYSNqXyUpSy2tDIZtStakC4ZRSLKN-acfSbp3GmxUs,1078 +mdit_py_plugins/deflist/README.md,sha256=GGJreIlY2uQhp7pu7P6NBTre7OoObJzpWWr8yyL8hdk,1273 +mdit_py_plugins/deflist/__init__.py,sha256=u-Q_Xdhdr0KOlo_SdMCZZu9xmNeto4EY5iaa5Eg1ZnY,65 +mdit_py_plugins/deflist/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/deflist/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/deflist/index.py,sha256=pG_4MmhrQ18xc9x2AHi8QZPwIEAYoc1UUXTuwSAlJfc,7439 +mdit_py_plugins/deflist/port.yaml,sha256=vUbd81yAHGHWV5mt4DlsKEF7tpYebCBmh7KXNb7T9R8,132 +mdit_py_plugins/dollarmath/__init__.py,sha256=-28T4dXbJUp97WGq66fCJe28V8ut_CuNddQ37Mk0Q-0,71 +mdit_py_plugins/dollarmath/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/dollarmath/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/dollarmath/index.py,sha256=VBnDHW99MfmdCPqfaASsCL8RVmMB1ZbW1z6spfSh9pA,12483 +mdit_py_plugins/field_list/__init__.py,sha256=vvhkQkgciLzi7h7cyx67rLYo4nP4clew2-gxxJj4JOw,8283 +mdit_py_plugins/field_list/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/footnote/LICENSE,sha256=gdYSNqXyUpSy2tDIZtStakC4ZRSLKN-acfSbp3GmxUs,1078 +mdit_py_plugins/footnote/__init__.py,sha256=kg6QV5s75F0QFi-Gg2PbD3bvpnpWpHD-LmnMGYaYATw,67 +mdit_py_plugins/footnote/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/footnote/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/footnote/index.py,sha256=EaHeZEwv9Zz9t_-0WA-Al4jsEpPvRieWCjmOk3ieTIc,14582 +mdit_py_plugins/footnote/port.yaml,sha256=XXtjLwW8k9KOA6NttB3U5cF374Q1sKDL3xxP_e5m3Vg,120 +mdit_py_plugins/front_matter/LICENSE,sha256=nhvB-vrgILXDPMnLdFxwelrd8QnNgU8NrC1BQkuDVUo,1056 +mdit_py_plugins/front_matter/__init__.py,sha256=fBvZ3t2cYeAtKZTVsO1cwyIslLP54YUQx3onTeb6XH8,75 +mdit_py_plugins/front_matter/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/front_matter/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/front_matter/index.py,sha256=ISXN0HApMSj93KW5uZhPrHu7Wdhn9f9jqlHhbbbn9H4,3360 +mdit_py_plugins/front_matter/port.yaml,sha256=7Acds7Sk7tTo1N7Culs-Azw-mhR4kZIlz3kTr-BbJRw,124 +mdit_py_plugins/myst_blocks/__init__.py,sha256=RR4mEFh3StsxqY9IFxJA6-9sj-NshzIcPZaLoPOU7mY,71 +mdit_py_plugins/myst_blocks/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/myst_blocks/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/myst_blocks/index.py,sha256=6CuoZ9HR7uuQaqsirbrXBoVAphsMJiarPaC36jDsQbg,4568 +mdit_py_plugins/myst_role/__init__.py,sha256=XEqrOYDdDCQGaMnZ_CbjqrgmnAFew27tZMQxLHDmFMU,69 +mdit_py_plugins/myst_role/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/myst_role/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/myst_role/index.py,sha256=293pJplezQW2t4P69Ogk5P4CYKDtoVGsIA2v9ZcqUyo,2035 +mdit_py_plugins/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26 +mdit_py_plugins/substitution.py,sha256=PdgL4am3exiuNQLmDHavLFBrnSivvTipr0pxwUOpFwE,3122 +mdit_py_plugins/tasklists/__init__.py,sha256=rWS4UiCHP4TX4KbO7myQh1GnczR2IZpC0vIj1meupK0,5766 +mdit_py_plugins/tasklists/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/tasklists/port.yaml,sha256=BUkirmwVBE7oNC4L7CDa_oeqrvJ5fZqcY1zn3Oy6oqk,195 +mdit_py_plugins/texmath/LICENSE,sha256=ASpWz54jopFzNheMykF6tMiPxkrXCG1iHWqLlWWTYp8,1075 +mdit_py_plugins/texmath/README.md,sha256=gt6LSddWhDGClQvECW5Lwcdtga8N8cJJEr4nCz19EyY,5191 +mdit_py_plugins/texmath/__init__.py,sha256=kt30vWghF8MfF_XeD08sdrYZqOdUD6Qd1YtyrmrhzbU,65 +mdit_py_plugins/texmath/__pycache__/__init__.cpython-312.pyc,, +mdit_py_plugins/texmath/__pycache__/index.cpython-312.pyc,, +mdit_py_plugins/texmath/index.py,sha256=vc0CWKHT2idTHpqsaHrdxg3lejuVrDe6cELXzZ7jagA,10820 +mdit_py_plugins/texmath/port.yaml,sha256=Q_WKLY5qo2IkgUTfNr0becSQgBmGf_ANQD1W41GRVPA,245 +mdit_py_plugins/utils.py,sha256=cOARcJrdGRfilyWP4liOoRWHzlRNfzoTa4ZYZaptu8g,364 +mdit_py_plugins/wordcount/__init__.py,sha256=NARQ0PLmsCbaLdvMVp4sX4xlHzn4CxvlOsLxcDvuD4A,1791 +mdit_py_plugins/wordcount/__pycache__/__init__.cpython-312.pyc,, diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/WHEEL new file mode 100644 index 000000000..3b5e64b5e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins-0.4.2.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.9.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__init__.py new file mode 100644 index 000000000..df1243329 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__init__.py @@ -0,0 +1 @@ +__version__ = "0.4.2" diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..2cccf9c29 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/colon_fence.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/colon_fence.cpython-312.pyc new file mode 100644 index 000000000..70388bfd3 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/colon_fence.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/substitution.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/substitution.cpython-312.pyc new file mode 100644 index 000000000..c9124c692 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/substitution.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/utils.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/utils.cpython-312.pyc new file mode 100644 index 000000000..7733e3c9e Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/__pycache__/utils.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/LICENSE new file mode 100644 index 000000000..eb4033e92 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. +Copyright (c) 2018 jebbs +Copyright (c) 2021- commenthol + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/__init__.py new file mode 100644 index 000000000..27e968d1a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/__init__.py @@ -0,0 +1,3 @@ +from .index import admon_plugin + +__all__ = ("admon_plugin",) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..7dd294ef1 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..bdd9ca7f9 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/index.py new file mode 100644 index 000000000..cb241815e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/index.py @@ -0,0 +1,229 @@ +# Process admonitions and pass to cb. + +from __future__ import annotations + +from contextlib import suppress +import re +from typing import TYPE_CHECKING, Callable, Sequence + +from markdown_it import MarkdownIt +from markdown_it.rules_block import StateBlock + +from mdit_py_plugins.utils import is_code_block + +if TYPE_CHECKING: + from markdown_it.renderer import RendererProtocol + from markdown_it.token import Token + from markdown_it.utils import EnvType, OptionsDict + + +def _get_multiple_tags(params: str) -> tuple[list[str], str]: + """Check for multiple tags when the title is double quoted.""" + re_tags = re.compile(r'^\s*(?P[^"]+)\s+"(?P.*)"\S*$') + match = re_tags.match(params) + if match: + tags = match["tokens"].strip().split(" ") + return [tag.lower() for tag in tags], match["title"] + raise ValueError("No match found for parameters") + + +def _get_tag(_params: str) -> tuple[list[str], str]: + """Separate the tag name from the admonition title.""" + params = _params.strip() + if not params: + return [""], "" + + with suppress(ValueError): + return _get_multiple_tags(params) + + tag, *_title = params.split(" ") + joined = " ".join(_title) + + title = "" + if not joined: + title = tag.title() + elif joined != '""': # Specifically check for no title + title = joined + return [tag.lower()], title + + +def _validate(params: str) -> bool: + """Validate the presence of the tag name after the marker.""" + tag = params.strip().split(" ", 1)[-1] or "" + return bool(tag) + + +MARKER_LEN = 3 # Regardless of extra characters, block indent stays the same +MARKERS = ("!!!", "???", "???+") +MARKER_CHARS = {_m[0] for _m in MARKERS} +MAX_MARKER_LEN = max(len(_m) for _m in MARKERS) + + +def _extra_classes(markup: str) -> list[str]: + """Return the list of additional classes based on the markup.""" + if markup.startswith("?"): + if markup.endswith("+"): + return ["is-collapsible collapsible-open"] + return ["is-collapsible collapsible-closed"] + return [] + + +def admonition(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + if is_code_block(state, startLine): + return False + + start = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + # Check out the first character quickly, which should filter out most of non-containers + if state.src[start] not in MARKER_CHARS: + return False + + # Check out the rest of the marker string + marker = "" + marker_len = MAX_MARKER_LEN + while marker_len > 0: + marker_pos = start + marker_len + markup = state.src[start:marker_pos] + if markup in MARKERS: + marker = markup + break + marker_len -= 1 + else: + return False + + params = state.src[marker_pos:maximum] + + if not _validate(params): + return False + + # Since start is found, we can report success here in validation mode + if silent: + return True + + old_parent = state.parentType + old_line_max = state.lineMax + old_indent = state.blkIndent + + blk_start = marker_pos + while blk_start < maximum and state.src[blk_start] == " ": + blk_start += 1 + + state.parentType = "admonition" + # Correct block indentation when extra marker characters are present + marker_alignment_correction = MARKER_LEN - len(marker) + state.blkIndent += blk_start - start + marker_alignment_correction + + was_empty = False + + # Search for the end of the block + next_line = startLine + while True: + next_line += 1 + if next_line >= endLine: + # unclosed block should be autoclosed by end of document. + # also block seems to be autoclosed by end of parent + break + pos = state.bMarks[next_line] + state.tShift[next_line] + maximum = state.eMarks[next_line] + is_empty = state.sCount[next_line] < state.blkIndent + + # two consecutive empty lines autoclose the block + if is_empty and was_empty: + break + was_empty = is_empty + + if pos < maximum and state.sCount[next_line] < state.blkIndent: + # non-empty line with negative indent should stop the block: + # - !!! + # test + break + + # this will prevent lazy continuations from ever going past our end marker + state.lineMax = next_line + + tags, title = _get_tag(params) + tag = tags[0] + + token = state.push("admonition_open", "div", 1) + token.markup = markup + token.block = True + token.attrs = {"class": " ".join(["admonition", *tags, *_extra_classes(markup)])} + token.meta = {"tag": tag} + token.content = title + token.info = params + token.map = [startLine, next_line] + + if title: + title_markup = f"{markup} {tag}" + token = state.push("admonition_title_open", "p", 1) + token.markup = title_markup + token.attrs = {"class": "admonition-title"} + token.map = [startLine, startLine + 1] + + token = state.push("inline", "", 0) + token.content = title + token.map = [startLine, startLine + 1] + token.children = [] + + token = state.push("admonition_title_close", "p", -1) + + state.md.block.tokenize(state, startLine + 1, next_line) + + token = state.push("admonition_close", "div", -1) + token.markup = markup + token.block = True + + state.parentType = old_parent + state.lineMax = old_line_max + state.blkIndent = old_indent + state.line = next_line + + return True + + +def admon_plugin(md: MarkdownIt, render: None | Callable[..., str] = None) -> None: + """Plugin to use + `python-markdown style admonitions + <https://python-markdown.github.io/extensions/admonition>`_. + + .. code-block:: md + + !!! note + *content* + + `And mkdocs-style collapsible blocks + <https://squidfunk.github.io/mkdocs-material/reference/admonitions/#collapsible-blocks>`_. + + .. code-block:: md + + ???+ note + *content* + + Note, this is ported from + `markdown-it-admon + <https://github.com/commenthol/markdown-it-admon>`_. + """ + + def renderDefault( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + _options: OptionsDict, + env: EnvType, + ) -> str: + return self.renderToken(tokens, idx, _options, env) # type: ignore[attr-defined,no-any-return] + + render = render or renderDefault + + md.add_render_rule("admonition_open", render) + md.add_render_rule("admonition_close", render) + md.add_render_rule("admonition_title_open", render) + md.add_render_rule("admonition_title_close", render) + + md.block.ruler.before( + "fence", + "admonition", + admonition, + {"alt": ["paragraph", "reference", "blockquote", "list"]}, + ) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/port.yaml b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/port.yaml new file mode 100644 index 000000000..d2835bcb8 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/admon/port.yaml @@ -0,0 +1,4 @@ +- package: markdown-it-admon + commit: 9820ba89415c464a3cc18a780f222a0ceb3e18bd + date: Jul 3, 2021 + version: 1.0.0 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/amsmath/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/amsmath/__init__.py new file mode 100644 index 000000000..0712618bf --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/amsmath/__init__.py @@ -0,0 +1,154 @@ +"""An extension to capture amsmath latex environments.""" + +from __future__ import annotations + +import re +from typing import TYPE_CHECKING, Callable, Sequence + +from markdown_it import MarkdownIt +from markdown_it.common.utils import escapeHtml +from markdown_it.rules_block import StateBlock + +from mdit_py_plugins.utils import is_code_block + +if TYPE_CHECKING: + from markdown_it.renderer import RendererProtocol + from markdown_it.token import Token + from markdown_it.utils import EnvType, OptionsDict + +# Taken from amsmath version 2.1 +# http://anorien.csc.warwick.ac.uk/mirrors/CTAN/macros/latex/required/amsmath/amsldoc.pdf +ENVIRONMENTS = [ + # 3.2 single equation with an automatically gen-erated number + "equation", + # 3.3 variation equation, used for equations that dont fit on a single line + "multline", + # 3.5 a group of consecutive equations when there is no alignment desired among them + "gather", + # 3.6 Used for two or more equations when vertical alignment is desired + "align", + # allows the horizontal space between equationsto be explicitly specified. + "alignat", + # stretches the space betweenthe equation columns to the maximum possible width + "flalign", + # 4.1 The pmatrix, bmatrix, Bmatrix, vmatrix and Vmatrix have (respectively) + # (),[],{},||,and ‖‖ delimiters built in. + "matrix", + "pmatrix", + "bmatrix", + "Bmatrix", + "vmatrix", + "Vmatrix", + # eqnarray is another math environment, it is not part of amsmath, + # and note that it is better to use align or equation+split instead + "eqnarray", +] +# other "non-top-level" environments: + +# 3.4 the split environment is for single equations that are too long to fit on one line +# and hence must be split into multiple lines, +# it is intended for use only inside some other displayed equation structure, +# usually an equation, align, or gather environment + +# 3.7 variants gathered, aligned,and alignedat are provided +# whose total width is the actual width of the contents; +# thus they can be used as a component in a containing expression + +RE_OPEN = r"\\begin\{(" + "|".join(ENVIRONMENTS) + r")([\*]?)\}" + + +def amsmath_plugin( + md: MarkdownIt, *, renderer: Callable[[str], str] | None = None +) -> None: + """Parses TeX math equations, without any surrounding delimiters, + only for top-level `amsmath <https://ctan.org/pkg/amsmath>`__ environments: + + .. code-block:: latex + + \\begin{gather*} + a_1=b_1+c_1\\\\ + a_2=b_2+c_2-d_2+e_2 + \\end{gather*} + + :param renderer: Function to render content, by default escapes HTML + + """ + md.block.ruler.before( + "blockquote", + "amsmath", + amsmath_block, + {"alt": ["paragraph", "reference", "blockquote", "list", "footnote_def"]}, + ) + + _renderer = (lambda content: escapeHtml(content)) if renderer is None else renderer + + def render_amsmath_block( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + content = _renderer(str(tokens[idx].content)) + return f'<div class="math amsmath">\n{content}\n</div>\n' + + md.add_render_rule("amsmath", render_amsmath_block) + + +def amsmath_block( + state: StateBlock, startLine: int, endLine: int, silent: bool +) -> bool: + # note the code principally follows the logic in markdown_it/rules_block/fence.py, + # except that: + # (a) it allows for closing tag on same line as opening tag + # (b) it does not allow for opening tag without closing tag (i.e. no auto-closing) + + if is_code_block(state, startLine): + return False + + # does the first line contain the beginning of an amsmath environment + first_start = state.bMarks[startLine] + state.tShift[startLine] + first_end = state.eMarks[startLine] + first_text = state.src[first_start:first_end] + + if not (match_open := re.match(RE_OPEN, first_text)): + return False + + # construct the closing tag + environment = match_open.group(1) + numbered = match_open.group(2) + closing = rf"\end{{{match_open.group(1)}{match_open.group(2)}}}" + + # start looking for the closing tag, including the current line + nextLine = startLine - 1 + + while True: + nextLine += 1 + if nextLine >= endLine: + # reached the end of the block without finding the closing tag + return False + + next_start = state.bMarks[nextLine] + state.tShift[nextLine] + next_end = state.eMarks[nextLine] + if next_start < first_end and state.sCount[nextLine] < state.blkIndent: + # non-empty line with negative indent should stop the list: + # - \begin{align} + # test + return False + + if state.src[next_start:next_end].rstrip().endswith(closing): + # found the closing tag + break + + state.line = nextLine + 1 + + if not silent: + token = state.push("amsmath", "math", 0) + token.block = True + token.content = state.getLines( + startLine, state.line, state.sCount[startLine], False + ) + token.meta = {"environment": environment, "numbered": numbered} + token.map = [startLine, nextLine] + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/amsmath/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/amsmath/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..d4f1ba4ec Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/amsmath/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/__init__.py new file mode 100644 index 000000000..1d9cbb978 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/__init__.py @@ -0,0 +1,3 @@ +from .index import anchors_plugin + +__all__ = ("anchors_plugin",) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..150f86fac Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..6476f874e Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/index.py new file mode 100644 index 000000000..59186c261 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/anchors/index.py @@ -0,0 +1,129 @@ +import re +from typing import Callable, List, Optional, Set + +from markdown_it import MarkdownIt +from markdown_it.rules_core import StateCore +from markdown_it.token import Token + + +def anchors_plugin( + md: MarkdownIt, + min_level: int = 1, + max_level: int = 2, + slug_func: Optional[Callable[[str], str]] = None, + permalink: bool = False, + permalinkSymbol: str = "¶", + permalinkBefore: bool = False, + permalinkSpace: bool = True, +) -> None: + """Plugin for adding header anchors, based on + `markdown-it-anchor <https://github.com/valeriangalliat/markdown-it-anchor>`__ + + .. code-block:: md + + # Title String + + renders as: + + .. code-block:: html + + <h1 id="title-string">Title String <a class="header-anchor" href="#title-string">¶</a></h1> + + :param min_level: minimum header level to apply anchors + :param max_level: maximum header level to apply anchors + :param slug_func: function to convert title text to id slug. + :param permalink: Add a permalink next to the title + :param permalinkSymbol: the symbol to show + :param permalinkBefore: Add the permalink before the title, otherwise after + :param permalinkSpace: Add a space between the permalink and the title + + Note, the default slug function aims to mimic the GitHub Markdown format, see: + + - https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/toc_filter.rb + - https://gist.github.com/asabaylus/3071099 + + """ + selected_levels = list(range(min_level, max_level + 1)) + md.core.ruler.push( + "anchor", + _make_anchors_func( + selected_levels, + slug_func or slugify, + permalink, + permalinkSymbol, + permalinkBefore, + permalinkSpace, + ), + ) + + +def _make_anchors_func( + selected_levels: List[int], + slug_func: Callable[[str], str], + permalink: bool, + permalinkSymbol: str, + permalinkBefore: bool, + permalinkSpace: bool, +) -> Callable[[StateCore], None]: + def _anchor_func(state: StateCore) -> None: + slugs: Set[str] = set() + for idx, token in enumerate(state.tokens): + if token.type != "heading_open": + continue + level = int(token.tag[1]) + if level not in selected_levels: + continue + inline_token = state.tokens[idx + 1] + assert inline_token.children is not None + title = "".join( + child.content + for child in inline_token.children + if child.type in ["text", "code_inline"] + ) + slug = unique_slug(slug_func(title), slugs) + token.attrSet("id", slug) + + if permalink: + link_open = Token( + "link_open", + "a", + 1, + ) + link_open.attrSet("class", "header-anchor") + link_open.attrSet("href", f"#{slug}") + link_tokens = [ + link_open, + Token("html_block", "", 0, content=permalinkSymbol), + Token("link_close", "a", -1), + ] + if permalinkBefore: + inline_token.children = ( + link_tokens + + ( + [Token("text", "", 0, content=" ")] + if permalinkSpace + else [] + ) + + inline_token.children + ) + else: + inline_token.children.extend( + ([Token("text", "", 0, content=" ")] if permalinkSpace else []) + + link_tokens + ) + + return _anchor_func + + +def slugify(title: str) -> str: + return re.sub(r"[^\w\u4e00-\u9fff\- ]", "", title.strip().lower().replace(" ", "-")) + + +def unique_slug(slug: str, slugs: Set[str]) -> str: + uniq = slug + i = 1 + while uniq in slugs: + uniq = f"{slug}-{i}" + i += 1 + slugs.add(uniq) + return uniq diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__init__.py new file mode 100644 index 000000000..a2f48a9b0 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__init__.py @@ -0,0 +1,3 @@ +from .index import attrs_block_plugin, attrs_plugin + +__all__ = ("attrs_block_plugin", "attrs_plugin") diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..8cd89c91d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..e09ed40f1 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__pycache__/parse.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__pycache__/parse.cpython-312.pyc new file mode 100644 index 000000000..a7f132587 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/__pycache__/parse.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/index.py new file mode 100644 index 000000000..3efaab6c1 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/index.py @@ -0,0 +1,274 @@ +from __future__ import annotations + +from functools import partial +from typing import Any, Sequence + +from markdown_it import MarkdownIt +from markdown_it.rules_block import StateBlock +from markdown_it.rules_core import StateCore +from markdown_it.rules_inline import StateInline +from markdown_it.token import Token + +from mdit_py_plugins.utils import is_code_block + +from .parse import ParseError, parse + + +def attrs_plugin( + md: MarkdownIt, + *, + after: Sequence[str] = ("image", "code_inline", "link_close", "span_close"), + spans: bool = False, + span_after: str = "link", + allowed: Sequence[str] | None = None, +) -> None: + """Parse inline attributes that immediately follow certain inline elements:: + + ![alt](https://image.com){#id .a b=c} + + This syntax is inspired by + `Djot spans + <https://htmlpreview.github.io/?https://github.com/jgm/djot/blob/master/doc/syntax.html#inline-attributes>`_. + + Inside the curly braces, the following syntax is possible: + + - `.foo` specifies foo as a class. + Multiple classes may be given in this way; they will be combined. + - `#foo` specifies foo as an identifier. + An element may have only one identifier; + if multiple identifiers are given, the last one is used. + - `key="value"` or `key=value` specifies a key-value attribute. + Quotes are not needed when the value consists entirely of + ASCII alphanumeric characters or `_` or `:` or `-`. + Backslash escapes may be used inside quoted values. + - `%` begins a comment, which ends with the next `%` or the end of the attribute (`}`). + + Multiple attribute blocks are merged. + + :param md: The MarkdownIt instance to modify. + :param after: The names of inline elements after which attributes may be specified. + This plugin does not support attributes after emphasis, strikethrough or text elements, + which all require post-parse processing. + :param spans: If True, also parse attributes after spans of text, encapsulated by `[]`. + Note Markdown link references take precedence over this syntax. + :param span_after: The name of an inline rule after which spans may be specified. + :param allowed: A list of allowed attribute names. + If not ``None``, any attributes not in this list will be removed + and placed in the token's meta under the key "insecure_attrs". + """ + + if spans: + md.inline.ruler.after(span_after, "span", _span_rule) + if after: + md.inline.ruler.push( + "attr", + partial( + _attr_inline_rule, + after=after, + allowed=None if allowed is None else set(allowed), + ), + ) + + +def attrs_block_plugin(md: MarkdownIt, *, allowed: Sequence[str] | None = None) -> None: + """Parse block attributes. + + Block attributes are attributes on a single line, with no other content. + They attach the specified attributes to the block below them:: + + {.a #b c=1} + A paragraph, that will be assigned the class ``a`` and the identifier ``b``. + + Attributes can be stacked, with classes accumulating and lower attributes overriding higher:: + + {#a .a c=1} + {#b .b c=2} + A paragraph, that will be assigned the class ``a b c``, and the identifier ``b``. + + This syntax is inspired by Djot block attributes. + + :param allowed: A list of allowed attribute names. + If not ``None``, any attributes not in this list will be removed + and placed in the token's meta under the key "insecure_attrs". + """ + md.block.ruler.before("fence", "attr", _attr_block_rule) + md.core.ruler.after( + "block", + "attr", + partial( + _attr_resolve_block_rule, allowed=None if allowed is None else set(allowed) + ), + ) + + +def _find_opening(tokens: Sequence[Token], index: int) -> int | None: + """Find the opening token index, if the token is closing.""" + if tokens[index].nesting != -1: + return index + level = 0 + while index >= 0: + level += tokens[index].nesting + if level == 0: + return index + index -= 1 + return None + + +def _span_rule(state: StateInline, silent: bool) -> bool: + if state.src[state.pos] != "[": + return False + + maximum = state.posMax + labelStart = state.pos + 1 + labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, False) + + # parser failed to find ']', so it's not a valid span + if labelEnd < 0: + return False + + pos = labelEnd + 1 + + # check not at end of inline + if pos >= maximum: + return False + + try: + new_pos, attrs = parse(state.src[pos:]) + except ParseError: + return False + + pos += new_pos + 1 + + if not silent: + state.pos = labelStart + state.posMax = labelEnd + token = state.push("span_open", "span", 1) + token.attrs = attrs # type: ignore[assignment] + state.md.inline.tokenize(state) + token = state.push("span_close", "span", -1) + + state.pos = pos + state.posMax = maximum + return True + + +def _attr_inline_rule( + state: StateInline, + silent: bool, + after: Sequence[str], + *, + allowed: set[str] | None = None, +) -> bool: + if state.pending or not state.tokens: + return False + token = state.tokens[-1] + if token.type not in after: + return False + try: + new_pos, attrs = parse(state.src[state.pos :]) + except ParseError: + return False + token_index = _find_opening(state.tokens, len(state.tokens) - 1) + if token_index is None: + return False + state.pos += new_pos + 1 + if not silent: + attr_token = state.tokens[token_index] + if "class" in attrs and "class" in token.attrs: + attrs["class"] = f"{token.attrs['class']} {attrs['class']}" + _add_attrs(attr_token, attrs, allowed) + return True + + +def _attr_block_rule( + state: StateBlock, startLine: int, endLine: int, silent: bool +) -> bool: + """Find a block of attributes. + + The block must be a single line that begins with a `{`, after three or less spaces, + and end with a `}` followed by any number if spaces. + """ + if is_code_block(state, startLine): + return False + + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + # if it doesn't start with a {, it's not an attribute block + if state.src[pos] != "{": + return False + + # find first non-space character from the right + while maximum > pos and state.src[maximum - 1] in (" ", "\t"): + maximum -= 1 + # if it doesn't end with a }, it's not an attribute block + if maximum <= pos: + return False + if state.src[maximum - 1] != "}": + return False + + try: + new_pos, attrs = parse(state.src[pos:maximum]) + except ParseError: + return False + + # if the block was resolved earlier than expected, it's not an attribute block + # TODO this was not working in some instances, so I disabled it + # if (maximum - 1) != new_pos: + # return False + + if silent: + return True + + token = state.push("attrs_block", "", 0) + token.attrs = attrs # type: ignore[assignment] + token.map = [startLine, startLine + 1] + + state.line = startLine + 1 + return True + + +def _attr_resolve_block_rule(state: StateCore, *, allowed: set[str] | None) -> None: + """Find attribute block then move its attributes to the next block.""" + i = 0 + len_tokens = len(state.tokens) + while i < len_tokens: + if state.tokens[i].type != "attrs_block": + i += 1 + continue + + if i + 1 < len_tokens: + next_token = state.tokens[i + 1] + + # classes are appended + if "class" in state.tokens[i].attrs and "class" in next_token.attrs: + state.tokens[i].attrs["class"] = ( + f"{state.tokens[i].attrs['class']} {next_token.attrs['class']}" + ) + + if next_token.type == "attrs_block": + # subsequent attribute blocks take precedence, when merging + for key, value in state.tokens[i].attrs.items(): + if key == "class" or key not in next_token.attrs: + next_token.attrs[key] = value + else: + _add_attrs(next_token, state.tokens[i].attrs, allowed) + + state.tokens.pop(i) + len_tokens -= 1 + + +def _add_attrs( + token: Token, + attrs: dict[str, Any], + allowed: set[str] | None, +) -> None: + """Add attributes to a token, skipping any disallowed attributes.""" + if allowed is not None and ( + disallowed := {k: v for k, v in attrs.items() if k not in allowed} + ): + token.meta["insecure_attrs"] = disallowed + attrs = {k: v for k, v in attrs.items() if k in allowed} + + # attributes takes precedence over existing attributes + token.attrs.update(attrs) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/parse.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/parse.py new file mode 100644 index 000000000..06539c2a7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/attrs/parse.py @@ -0,0 +1,257 @@ +"""Parser for attributes:: + + attributes { id = "foo", class = "bar baz", + key1 = "val1", key2 = "val2" } + +Adapted from: +https://github.com/jgm/djot/blob/fae7364b86bfce69bc6d5b5eede1f5196d845fd6/djot/attributes.lua#L1 + +syntax: + +attributes <- '{' whitespace* attribute (whitespace attribute)* whitespace* '}' +attribute <- identifier | class | keyval +identifier <- '#' name +class <- '.' name +name <- (nonspace, nonpunctuation other than ':', '_', '-')+ +keyval <- key '=' val +key <- (ASCII_ALPHANUM | ':' | '_' | '-')+ +val <- bareval | quotedval +bareval <- (ASCII_ALPHANUM | ':' | '_' | '-')+ +quotedval <- '"' ([^"] | '\"') '"' +""" + +from __future__ import annotations + +from enum import Enum +import re +from typing import Callable + + +class State(Enum): + START = 0 + SCANNING = 1 + SCANNING_ID = 2 + SCANNING_CLASS = 3 + SCANNING_KEY = 4 + SCANNING_VALUE = 5 + SCANNING_BARE_VALUE = 6 + SCANNING_QUOTED_VALUE = 7 + SCANNING_COMMENT = 8 + SCANNING_ESCAPED = 9 + DONE = 10 + + +REGEX_SPACE = re.compile(r"\s") +REGEX_SPACE_PUNCTUATION = re.compile(r"[\s!\"#$%&'()*+,./;<=>?@[\]^`{|}~]") +REGEX_KEY_CHARACTERS = re.compile(r"[a-zA-Z\d_:-]") + + +class TokenState: + def __init__(self) -> None: + self._tokens: list[tuple[int, int, str]] = [] + self.start: int = 0 + + def set_start(self, start: int) -> None: + self.start = start + + def append(self, start: int, end: int, ttype: str) -> None: + self._tokens.append((start, end, ttype)) + + def compile(self, string: str) -> dict[str, str]: + """compile the tokens into a dictionary""" + attributes = {} + classes = [] + idx = 0 + while idx < len(self._tokens): + start, end, ttype = self._tokens[idx] + if ttype == "id": + attributes["id"] = string[start:end] + elif ttype == "class": + classes.append(string[start:end]) + elif ttype == "key": + key = string[start:end] + if idx + 1 < len(self._tokens): + start, end, ttype = self._tokens[idx + 1] + if ttype == "value": + if key == "class": + classes.append(string[start:end]) + else: + attributes[key] = string[start:end] + idx += 1 + idx += 1 + if classes: + attributes["class"] = " ".join(classes) + return attributes + + def __str__(self) -> str: + return str(self._tokens) + + def __repr__(self) -> str: + return repr(self._tokens) + + +class ParseError(Exception): + def __init__(self, msg: str, pos: int) -> None: + self.pos = pos + super().__init__(msg + f" at position {pos}") + + +def parse(string: str) -> tuple[int, dict[str, str]]: + """Parse attributes from start of string. + + :returns: (length of parsed string, dict of attributes) + """ + pos = 0 + state: State = State.START + tokens = TokenState() + while pos < len(string): + state = HANDLERS[state](string[pos], pos, tokens) + if state == State.DONE: + return pos, tokens.compile(string) + pos = pos + 1 + + return pos, tokens.compile(string) + + +def handle_start(char: str, pos: int, tokens: TokenState) -> State: + if char == "{": + return State.SCANNING + raise ParseError("Attributes must start with '{'", pos) + + +def handle_scanning(char: str, pos: int, tokens: TokenState) -> State: + if char == " " or char == "\t" or char == "\n" or char == "\r": + return State.SCANNING + if char == "}": + return State.DONE + if char == "#": + tokens.set_start(pos) + return State.SCANNING_ID + if char == "%": + tokens.set_start(pos) + return State.SCANNING_COMMENT + if char == ".": + tokens.set_start(pos) + return State.SCANNING_CLASS + if REGEX_KEY_CHARACTERS.fullmatch(char): + tokens.set_start(pos) + return State.SCANNING_KEY + + raise ParseError(f"Unexpected character whilst scanning: {char}", pos) + + +def handle_scanning_comment(char: str, pos: int, tokens: TokenState) -> State: + if char == "%": + return State.SCANNING + + return State.SCANNING_COMMENT + + +def handle_scanning_id(char: str, pos: int, tokens: TokenState) -> State: + if not REGEX_SPACE_PUNCTUATION.fullmatch(char): + return State.SCANNING_ID + + if char == "}": + if (pos - 1) > tokens.start: + tokens.append(tokens.start + 1, pos, "id") + return State.DONE + + if REGEX_SPACE.fullmatch(char): + if (pos - 1) > tokens.start: + tokens.append(tokens.start + 1, pos, "id") + return State.SCANNING + + raise ParseError(f"Unexpected character whilst scanning id: {char}", pos) + + +def handle_scanning_class(char: str, pos: int, tokens: TokenState) -> State: + if not REGEX_SPACE_PUNCTUATION.fullmatch(char): + return State.SCANNING_CLASS + + if char == "}": + if (pos - 1) > tokens.start: + tokens.append(tokens.start + 1, pos, "class") + return State.DONE + + if REGEX_SPACE.fullmatch(char): + if (pos - 1) > tokens.start: + tokens.append(tokens.start + 1, pos, "class") + return State.SCANNING + + raise ParseError(f"Unexpected character whilst scanning class: {char}", pos) + + +def handle_scanning_key(char: str, pos: int, tokens: TokenState) -> State: + if char == "=": + tokens.append(tokens.start, pos, "key") + return State.SCANNING_VALUE + + if REGEX_KEY_CHARACTERS.fullmatch(char): + return State.SCANNING_KEY + + raise ParseError(f"Unexpected character whilst scanning key: {char}", pos) + + +def handle_scanning_value(char: str, pos: int, tokens: TokenState) -> State: + if char == '"': + tokens.set_start(pos) + return State.SCANNING_QUOTED_VALUE + + if REGEX_KEY_CHARACTERS.fullmatch(char): + tokens.set_start(pos) + return State.SCANNING_BARE_VALUE + + raise ParseError(f"Unexpected character whilst scanning value: {char}", pos) + + +def handle_scanning_bare_value(char: str, pos: int, tokens: TokenState) -> State: + if REGEX_KEY_CHARACTERS.fullmatch(char): + return State.SCANNING_BARE_VALUE + + if char == "}": + tokens.append(tokens.start, pos, "value") + return State.DONE + + if REGEX_SPACE.fullmatch(char): + tokens.append(tokens.start, pos, "value") + return State.SCANNING + + raise ParseError(f"Unexpected character whilst scanning bare value: {char}", pos) + + +def handle_scanning_escaped(char: str, pos: int, tokens: TokenState) -> State: + return State.SCANNING_QUOTED_VALUE + + +def handle_scanning_quoted_value(char: str, pos: int, tokens: TokenState) -> State: + if char == '"': + tokens.append(tokens.start + 1, pos, "value") + return State.SCANNING + + if char == "\\": + return State.SCANNING_ESCAPED + + if char == "{" or char == "}": + raise ParseError( + f"Unexpected character whilst scanning quoted value: {char}", pos + ) + + if char == "\n": + tokens.append(tokens.start + 1, pos, "value") + return State.SCANNING_QUOTED_VALUE + + return State.SCANNING_QUOTED_VALUE + + +HANDLERS: dict[State, Callable[[str, int, TokenState], State]] = { + State.START: handle_start, + State.SCANNING: handle_scanning, + State.SCANNING_COMMENT: handle_scanning_comment, + State.SCANNING_ID: handle_scanning_id, + State.SCANNING_CLASS: handle_scanning_class, + State.SCANNING_KEY: handle_scanning_key, + State.SCANNING_VALUE: handle_scanning_value, + State.SCANNING_BARE_VALUE: handle_scanning_bare_value, + State.SCANNING_QUOTED_VALUE: handle_scanning_quoted_value, + State.SCANNING_ESCAPED: handle_scanning_escaped, +} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/colon_fence.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/colon_fence.py new file mode 100644 index 000000000..c09e89c68 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/colon_fence.py @@ -0,0 +1,159 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Sequence + +from markdown_it import MarkdownIt +from markdown_it.common.utils import escapeHtml, unescapeAll +from markdown_it.rules_block import StateBlock + +from mdit_py_plugins.utils import is_code_block + +if TYPE_CHECKING: + from markdown_it.renderer import RendererProtocol + from markdown_it.token import Token + from markdown_it.utils import EnvType, OptionsDict + + +def colon_fence_plugin(md: MarkdownIt) -> None: + """This plugin directly mimics regular fences, but with `:` colons. + + Example:: + + :::name + contained text + ::: + + """ + + md.block.ruler.before( + "fence", + "colon_fence", + _rule, + {"alt": ["paragraph", "reference", "blockquote", "list", "footnote_def"]}, + ) + md.add_render_rule("colon_fence", _render) + + +def _rule(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + if is_code_block(state, startLine): + return False + + haveEndMarker = False + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + if pos + 3 > maximum: + return False + + marker = state.src[pos] + + if marker != ":": + return False + + # scan marker length + mem = pos + pos = _skipCharsStr(state, pos, marker) + + length = pos - mem + + if length < 3: + return False + + markup = state.src[mem:pos] + params = state.src[pos:maximum] + + # Since start is found, we can report success here in validation mode + if silent: + return True + + # search end of block + nextLine = startLine + + while True: + nextLine += 1 + if nextLine >= endLine: + # unclosed block should be autoclosed by end of document. + # also block seems to be autoclosed by end of parent + break + + pos = mem = state.bMarks[nextLine] + state.tShift[nextLine] + maximum = state.eMarks[nextLine] + + if pos < maximum and state.sCount[nextLine] < state.blkIndent: + # non-empty line with negative indent should stop the list: + # - ``` + # test + break + + if state.src[pos] != marker: + continue + + if is_code_block(state, nextLine): + continue + + pos = _skipCharsStr(state, pos, marker) + + # closing code fence must be at least as long as the opening one + if pos - mem < length: + continue + + # make sure tail has spaces only + pos = state.skipSpaces(pos) + + if pos < maximum: + continue + + haveEndMarker = True + # found! + break + + # If a fence has heading spaces, they should be removed from its inner block + length = state.sCount[startLine] + + state.line = nextLine + (1 if haveEndMarker else 0) + + token = state.push("colon_fence", "code", 0) + token.info = params + token.content = state.getLines(startLine + 1, nextLine, length, True) + token.markup = markup + token.map = [startLine, state.line] + + return True + + +def _skipCharsStr(state: StateBlock, pos: int, ch: str) -> int: + """Skip character string from given position.""" + # TODO this can be replaced with StateBlock.skipCharsStr in markdown-it-py 3.0.0 + while True: + try: + current = state.src[pos] + except IndexError: + break + if current != ch: + break + pos += 1 + return pos + + +def _render( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + token = tokens[idx] + info = unescapeAll(token.info).strip() if token.info else "" + content = escapeHtml(token.content) + block_name = "" + + if info: + block_name = info.split()[0] + + return ( + "<pre><code" + + (f' class="block-{block_name}" ' if block_name else "") + + ">" + + content + + "</code></pre>\n" + ) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/LICENSE new file mode 100644 index 000000000..e6c32306d --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/README.md b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/README.md new file mode 100644 index 000000000..03868d78b --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/README.md @@ -0,0 +1,95 @@ +# markdown-it-container + +[![Build Status](https://img.shields.io/travis/markdown-it/markdown-it-container/master.svg?style=flat)](https://travis-ci.org/markdown-it/markdown-it-container) +[![NPM version](https://img.shields.io/npm/v/markdown-it-container.svg?style=flat)](https://www.npmjs.org/package/markdown-it-container) +[![Coverage Status](https://img.shields.io/coveralls/markdown-it/markdown-it-container/master.svg?style=flat)](https://coveralls.io/r/markdown-it/markdown-it-container?branch=master) + +> Plugin for creating block-level custom containers for [markdown-it](https://github.com/markdown-it/markdown-it) markdown parser. + +__v2.+ requires `markdown-it` v5.+, see changelog.__ + +With this plugin you can create block containers like: + +``` +::: warning +*here be dragons* +::: +``` + +.... and specify how they should be rendered. If no renderer defined, `<div>` with +container name class will be created: + +```html +<div class="warning"> +<em>here be dragons</em> +</div> +``` + +Markup is the same as for [fenced code blocks](http://spec.commonmark.org/0.18/#fenced-code-blocks). +Difference is, that marker use another character and content is rendered as markdown markup. + + +## Installation + +node.js, browser: + +```bash +$ npm install markdown-it-container --save +$ bower install markdown-it-container --save +``` + + +## API + +```js +var md = require('markdown-it')() + .use(require('markdown-it-container'), name [, options]); +``` + +Params: + +- __name__ - container name (mandatory) +- __options:__ + - __validate__ - optional, function to validate tail after opening marker, should + return `true` on success. + - __render__ - optional, renderer function for opening/closing tokens. + - __marker__ - optional (`:`), character to use in delimiter. + + +## Example + +```js +var md = require('markdown-it')(); + +md.use(require('markdown-it-container'), 'spoiler', { + + validate: function(params) { + return params.trim().match(/^spoiler\s+(.*)$/); + }, + + render: function (tokens, idx) { + var m = tokens[idx].info.trim().match(/^spoiler\s+(.*)$/); + + if (tokens[idx].nesting === 1) { + // opening tag + return '<details><summary>' + md.utils.escapeHtml(m[1]) + '</summary>\n'; + + } else { + // closing tag + return '</details>\n'; + } + } +}); + +console.log(md.render('::: spoiler click me\n*content*\n:::\n')); + +// Output: +// +// <details><summary>click me</summary> +// <p><em>content</em></p> +// </details> +``` + +## License + +[MIT](https://github.com/markdown-it/markdown-it-container/blob/master/LICENSE) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/__init__.py new file mode 100644 index 000000000..32ae9cdb3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/__init__.py @@ -0,0 +1,3 @@ +from .index import container_plugin + +__all__ = ("container_plugin",) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..e177a54ef Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..d00ed7da2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/index.py new file mode 100644 index 000000000..7cc016f2b --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/index.py @@ -0,0 +1,192 @@ +"""Process block-level custom containers.""" + +from __future__ import annotations + +from math import floor +from typing import TYPE_CHECKING, Any, Callable, Sequence + +from markdown_it import MarkdownIt +from markdown_it.rules_block import StateBlock + +from mdit_py_plugins.utils import is_code_block + +if TYPE_CHECKING: + from markdown_it.renderer import RendererProtocol + from markdown_it.token import Token + from markdown_it.utils import EnvType, OptionsDict + + +def container_plugin( + md: MarkdownIt, + name: str, + marker: str = ":", + validate: None | Callable[[str, str], bool] = None, + render: None | Callable[..., str] = None, +) -> None: + """Plugin ported from + `markdown-it-container <https://github.com/markdown-it/markdown-it-container>`__. + + It is a plugin for creating block-level custom containers: + + .. code-block:: md + + :::: name + ::: name + *markdown* + ::: + :::: + + :param name: the name of the container to parse + :param marker: the marker character to use + :param validate: func(marker, param) -> bool, default matches against the name + :param render: render func + + """ + + def validateDefault(params: str, *args: Any) -> bool: + return params.strip().split(" ", 2)[0] == name + + def renderDefault( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + _options: OptionsDict, + env: EnvType, + ) -> str: + # add a class to the opening tag + if tokens[idx].nesting == 1: + tokens[idx].attrJoin("class", name) + + return self.renderToken(tokens, idx, _options, env) # type: ignore[attr-defined,no-any-return] + + min_markers = 3 + marker_str = marker + marker_char = marker_str[0] + marker_len = len(marker_str) + validate = validate or validateDefault + render = render or renderDefault + + def container_func( + state: StateBlock, startLine: int, endLine: int, silent: bool + ) -> bool: + if is_code_block(state, startLine): + return False + + auto_closed = False + start = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + # Check out the first character quickly, + # this should filter out most of non-containers + if marker_char != state.src[start]: + return False + + # Check out the rest of the marker string + pos = start + 1 + while pos <= maximum: + try: + character = state.src[pos] + except IndexError: + break + if marker_str[(pos - start) % marker_len] != character: + break + pos += 1 + + marker_count = floor((pos - start) / marker_len) + if marker_count < min_markers: + return False + pos -= (pos - start) % marker_len + + markup = state.src[start:pos] + params = state.src[pos:maximum] + assert validate is not None + if not validate(params, markup): + return False + + # Since start is found, we can report success here in validation mode + if silent: + return True + + # Search for the end of the block + nextLine = startLine + + while True: + nextLine += 1 + if nextLine >= endLine: + # unclosed block should be autoclosed by end of document. + # also block seems to be autoclosed by end of parent + break + + start = state.bMarks[nextLine] + state.tShift[nextLine] + maximum = state.eMarks[nextLine] + + if start < maximum and state.sCount[nextLine] < state.blkIndent: + # non-empty line with negative indent should stop the list: + # - ``` + # test + break + + if marker_char != state.src[start]: + continue + + if is_code_block(state, nextLine): + continue + + pos = start + 1 + while pos <= maximum: + try: + character = state.src[pos] + except IndexError: + break + if marker_str[(pos - start) % marker_len] != character: + break + pos += 1 + + # closing code fence must be at least as long as the opening one + if floor((pos - start) / marker_len) < marker_count: + continue + + # make sure tail has spaces only + pos -= (pos - start) % marker_len + pos = state.skipSpaces(pos) + + if pos < maximum: + continue + + # found! + auto_closed = True + break + + old_parent = state.parentType + old_line_max = state.lineMax + state.parentType = "container" + + # this will prevent lazy continuations from ever going past our end marker + state.lineMax = nextLine + + token = state.push(f"container_{name}_open", "div", 1) + token.markup = markup + token.block = True + token.info = params + token.map = [startLine, nextLine] + + state.md.block.tokenize(state, startLine + 1, nextLine) + + token = state.push(f"container_{name}_close", "div", -1) + token.markup = state.src[start:pos] + token.block = True + + state.parentType = old_parent + state.lineMax = old_line_max + state.line = nextLine + (1 if auto_closed else 0) + + return True + + md.block.ruler.before( + "fence", + "container_" + name, + container_func, + {"alt": ["paragraph", "reference", "blockquote", "list"]}, + ) + md.add_render_rule(f"container_{name}_open", render) + md.add_render_rule(f"container_{name}_close", render) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/port.yaml b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/port.yaml new file mode 100644 index 000000000..e47c1185e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/container/port.yaml @@ -0,0 +1,5 @@ +- package: markdown-it-container + commit: adb3defde3a1c56015895b47ce4c6591b8b1e3a2 + date: Jun 2, 2020 + version: 3.0.0 + changes: diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/LICENSE new file mode 100644 index 000000000..2fd4e3dc7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014-2015 Vitaly Puzrin, Alex Kocharin. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/README.md b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/README.md new file mode 100644 index 000000000..414157bcc --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/README.md @@ -0,0 +1,38 @@ +# markdown-it-deflist + +[![Build Status](https://img.shields.io/travis/markdown-it/markdown-it-deflist/master.svg?style=flat)](https://travis-ci.org/markdown-it/markdown-it-deflist) +[![NPM version](https://img.shields.io/npm/v/markdown-it-deflist.svg?style=flat)](https://www.npmjs.org/package/markdown-it-deflist) +[![Coverage Status](https://img.shields.io/coveralls/markdown-it/markdown-it-deflist/master.svg?style=flat)](https://coveralls.io/r/markdown-it/markdown-it-deflist?branch=master) + +> Definition list (`<dl>`) tag plugin for [markdown-it](https://github.com/markdown-it/markdown-it) markdown parser. + +__v2.+ requires `markdown-it` v5.+, see changelog.__ + +Syntax is based on [pandoc definition lists](http://johnmacfarlane.net/pandoc/README.html#definition-lists). + + +## Install + +node.js, browser: + +```bash +npm install markdown-it-deflist --save +bower install markdown-it-deflist --save +``` + +## Use + +```js +var md = require('markdown-it')() + .use(require('markdown-it-deflist')); + +md.render(/*...*/); +``` + +_Differences in browser._ If you load script directly into the page, without +package system, module will add itself globally as `window.markdownitDeflist`. + + +## License + +[MIT](https://github.com/markdown-it/markdown-it-deflist/blob/master/LICENSE) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/__init__.py new file mode 100644 index 000000000..97008b8ad --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/__init__.py @@ -0,0 +1,3 @@ +from .index import deflist_plugin + +__all__ = ("deflist_plugin",) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..bef4ae04a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..14a448263 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/index.py new file mode 100644 index 000000000..f5d20d17a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/index.py @@ -0,0 +1,253 @@ +"""Process definition lists.""" + +from markdown_it import MarkdownIt +from markdown_it.rules_block import StateBlock + +from mdit_py_plugins.utils import is_code_block + + +def deflist_plugin(md: MarkdownIt) -> None: + """Plugin ported from + `markdown-it-deflist <https://github.com/markdown-it/markdown-it-deflist>`__. + + The syntax is based on + `pandoc definition lists <http://johnmacfarlane.net/pandoc/README.html#definition-lists>`__: + + .. code-block:: md + + Term 1 + : Definition 1 long form + + second paragraph + + Term 2 with *inline markup* + ~ Definition 2a compact style + ~ Definition 2b + + """ + + def skipMarker(state: StateBlock, line: int) -> int: + """Search `[:~][\n ]`, returns next pos after marker on success or -1 on fail.""" + start = state.bMarks[line] + state.tShift[line] + maximum = state.eMarks[line] + + if start >= maximum: + return -1 + + # Check bullet + marker = state.src[start] + start += 1 + if marker != "~" and marker != ":": + return -1 + + pos = state.skipSpaces(start) + + # require space after ":" + if start == pos: + return -1 + + # no empty definitions, e.g. " : " + if pos >= maximum: + return -1 + + return start + + def markTightParagraphs(state: StateBlock, idx: int) -> None: + level = state.level + 2 + + i = idx + 2 + l2 = len(state.tokens) - 2 + while i < l2: + if ( + state.tokens[i].level == level + and state.tokens[i].type == "paragraph_open" + ): + state.tokens[i + 2].hidden = True + state.tokens[i].hidden = True + i += 2 + i += 1 + + def deflist(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + if is_code_block(state, startLine): + return False + + if silent: + # quirk: validation mode validates a dd block only, not a whole deflist + if state.ddIndent < 0: + return False + return skipMarker(state, startLine) >= 0 + + nextLine = startLine + 1 + if nextLine >= endLine: + return False + + if state.isEmpty(nextLine): + nextLine += 1 + if nextLine >= endLine: + return False + + if state.sCount[nextLine] < state.blkIndent: + return False + contentStart = skipMarker(state, nextLine) + if contentStart < 0: + return False + + # Start list + listTokIdx = len(state.tokens) + tight = True + + token = state.push("dl_open", "dl", 1) + token.map = listLines = [startLine, 0] + + # Iterate list items + dtLine = startLine + ddLine = nextLine + + # One definition list can contain multiple DTs, + # and one DT can be followed by multiple DDs. + # + # Thus, there is two loops here, and label is + # needed to break out of the second one + # + break_outer = False + + while True: + prevEmptyEnd = False + + token = state.push("dt_open", "dt", 1) + token.map = [dtLine, dtLine] + + token = state.push("inline", "", 0) + token.map = [dtLine, dtLine] + token.content = state.getLines( + dtLine, dtLine + 1, state.blkIndent, False + ).strip() + token.children = [] + + token = state.push("dt_close", "dt", -1) + + while True: + token = state.push("dd_open", "dd", 1) + token.map = itemLines = [nextLine, 0] + + pos = contentStart + maximum = state.eMarks[ddLine] + offset = ( + state.sCount[ddLine] + + contentStart + - (state.bMarks[ddLine] + state.tShift[ddLine]) + ) + + while pos < maximum: + if state.src[pos] == "\t": + offset += 4 - offset % 4 + elif state.src[pos] == " ": + offset += 1 + else: + break + + pos += 1 + + contentStart = pos + + oldTight = state.tight + oldDDIndent = state.ddIndent + oldIndent = state.blkIndent + oldTShift = state.tShift[ddLine] + oldSCount = state.sCount[ddLine] + oldParentType = state.parentType + state.blkIndent = state.ddIndent = state.sCount[ddLine] + 2 + state.tShift[ddLine] = contentStart - state.bMarks[ddLine] + state.sCount[ddLine] = offset + state.tight = True + state.parentType = "deflist" + + state.md.block.tokenize(state, ddLine, endLine) + + # If any of list item is tight, mark list as tight + if not state.tight or prevEmptyEnd: + tight = False + + # Item become loose if finish with empty line, + # but we should filter last element, because it means list finish + prevEmptyEnd = (state.line - ddLine) > 1 and state.isEmpty( + state.line - 1 + ) + + state.tShift[ddLine] = oldTShift + state.sCount[ddLine] = oldSCount + state.tight = oldTight + state.parentType = oldParentType + state.blkIndent = oldIndent + state.ddIndent = oldDDIndent + + token = state.push("dd_close", "dd", -1) + + itemLines[1] = nextLine = state.line + + if nextLine >= endLine: + break_outer = True + break + + if state.sCount[nextLine] < state.blkIndent: + break_outer = True + break + + contentStart = skipMarker(state, nextLine) + if contentStart < 0: + break + + ddLine = nextLine + + # go to the next loop iteration: + # insert DD tag and repeat checking + + if break_outer: + break_outer = False + break + + if nextLine >= endLine: + break + dtLine = nextLine + + if state.isEmpty(dtLine): + break + if state.sCount[dtLine] < state.blkIndent: + break + + ddLine = dtLine + 1 + if ddLine >= endLine: + break + if state.isEmpty(ddLine): + ddLine += 1 + if ddLine >= endLine: + break + + if state.sCount[ddLine] < state.blkIndent: + break + contentStart = skipMarker(state, ddLine) + if contentStart < 0: + break + + # go to the next loop iteration: + # insert DT and DD tags and repeat checking + + # Finalise list + token = state.push("dl_close", "dl", -1) + + listLines[1] = nextLine + + state.line = nextLine + + # mark paragraphs tight if needed + if tight: + markTightParagraphs(state, listTokIdx) + + return True + + md.block.ruler.before( + "paragraph", + "deflist", + deflist, + {"alt": ["paragraph", "reference", "blockquote"]}, + ) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/port.yaml b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/port.yaml new file mode 100644 index 000000000..203c7729e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/deflist/port.yaml @@ -0,0 +1,5 @@ +- package: markdown-it-deflist + commit: 20db400948520308291da029a23b0751cb30f3a0 + date: July 12, 2017 + version: 2.0.3 + changes: diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/__init__.py new file mode 100644 index 000000000..102b9253a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/__init__.py @@ -0,0 +1,3 @@ +from .index import dollarmath_plugin + +__all__ = ("dollarmath_plugin",) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..e10ca2138 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..3dd8b7828 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/index.py new file mode 100644 index 000000000..acfd83fb3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/dollarmath/index.py @@ -0,0 +1,373 @@ +from __future__ import annotations + +import re +from typing import TYPE_CHECKING, Any, Callable, Sequence + +from markdown_it import MarkdownIt +from markdown_it.common.utils import escapeHtml, isWhiteSpace +from markdown_it.rules_block import StateBlock +from markdown_it.rules_inline import StateInline + +from mdit_py_plugins.utils import is_code_block + +if TYPE_CHECKING: + from markdown_it.renderer import RendererProtocol + from markdown_it.token import Token + from markdown_it.utils import EnvType, OptionsDict + + +def dollarmath_plugin( + md: MarkdownIt, + *, + allow_labels: bool = True, + allow_space: bool = True, + allow_digits: bool = True, + allow_blank_lines: bool = True, + double_inline: bool = False, + label_normalizer: Callable[[str], str] | None = None, + renderer: Callable[[str, dict[str, Any]], str] | None = None, + label_renderer: Callable[[str], str] | None = None, +) -> None: + """Plugin for parsing dollar enclosed math, + e.g. inline: ``$a=1$``, block: ``$$b=2$$`` + + This is an improved version of ``texmath``; it is more performant, + and handles ``\\`` escaping properly and allows for more configuration. + + :param allow_labels: Capture math blocks with label suffix, e.g. ``$$a=1$$ (eq1)`` + :param allow_space: Parse inline math when there is space + after/before the opening/closing ``$``, e.g. ``$ a $`` + :param allow_digits: Parse inline math when there is a digit + before/after the opening/closing ``$``, e.g. ``1$`` or ``$2``. + This is useful when also using currency. + :param allow_blank_lines: Allow blank lines inside ``$$``. Note that blank lines are + not allowed in LaTeX, executablebooks/markdown-it-dollarmath, or the Github or + StackExchange markdown dialects. Hoever, they have special semantics if used + within Sphinx `..math` admonitions, so are allowed for backwards-compatibility. + :param double_inline: Search for double-dollar math within inline contexts + :param label_normalizer: Function to normalize the label, + by default replaces whitespace with `-` + :param renderer: Function to render content: `(str, {"display_mode": bool}) -> str`, + by default escapes HTML + :param label_renderer: Function to render labels, by default creates anchor + + """ + if label_normalizer is None: + label_normalizer = lambda label: re.sub(r"\s+", "-", label) # noqa: E731 + + md.inline.ruler.before( + "escape", + "math_inline", + math_inline_dollar(allow_space, allow_digits, double_inline), + ) + md.block.ruler.before( + "fence", + "math_block", + math_block_dollar(allow_labels, label_normalizer, allow_blank_lines), + ) + + # TODO the current render rules are really just for testing + # would be good to allow "proper" math rendering, + # e.g. https://github.com/roniemartinez/latex2mathml + + _renderer = ( + (lambda content, _: escapeHtml(content)) if renderer is None else renderer + ) + + _label_renderer: Callable[[str], str] + if label_renderer is None: + _label_renderer = ( # noqa: E731 + lambda label: f'<a href="#{label}" class="mathlabel" title="Permalink to this equation">¶</a>' + ) + else: + _label_renderer = label_renderer + + def render_math_inline( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + content = _renderer(str(tokens[idx].content).strip(), {"display_mode": False}) + return f'<span class="math inline">{content}</span>' + + def render_math_inline_double( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + content = _renderer(str(tokens[idx].content).strip(), {"display_mode": True}) + return f'<div class="math inline">{content}</div>' + + def render_math_block( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + content = _renderer(str(tokens[idx].content).strip(), {"display_mode": True}) + return f'<div class="math block">\n{content}\n</div>\n' + + def render_math_block_label( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + content = _renderer(str(tokens[idx].content).strip(), {"display_mode": True}) + _id = tokens[idx].info + label = _label_renderer(tokens[idx].info) + return f'<div id="{_id}" class="math block">\n{label}\n{content}\n</div>\n' + + md.add_render_rule("math_inline", render_math_inline) + md.add_render_rule("math_inline_double", render_math_inline_double) + + md.add_render_rule("math_block", render_math_block) + md.add_render_rule("math_block_label", render_math_block_label) + + +def is_escaped(state: StateInline, back_pos: int, mod: int = 0) -> bool: + """Test if dollar is escaped.""" + # count how many \ are before the current position + backslashes = 0 + while back_pos >= 0: + back_pos = back_pos - 1 + if state.src[back_pos] == "\\": + backslashes += 1 + else: + break + + if not backslashes: + return False + + # if an odd number of \ then ignore + if (backslashes % 2) != mod: + return True + + return False + + +def math_inline_dollar( + allow_space: bool = True, allow_digits: bool = True, allow_double: bool = False +) -> Callable[[StateInline, bool], bool]: + """Generate inline dollar rule. + + :param allow_space: Parse inline math when there is space + after/before the opening/closing ``$``, e.g. ``$ a $`` + :param allow_digits: Parse inline math when there is a digit + before/after the opening/closing ``$``, e.g. ``1$`` or ``$2``. + This is useful when also using currency. + :param allow_double: Search for double-dollar math within inline contexts + + """ + + def _math_inline_dollar(state: StateInline, silent: bool) -> bool: + """Inline dollar rule. + + - Initial check: + - check if first character is a $ + - check if the first character is escaped + - check if the next character is a space (if not allow_space) + - check if the next character is a digit (if not allow_digits) + - Advance one, if allow_double + - Find closing (advance one, if allow_double) + - Check closing: + - check if the previous character is a space (if not allow_space) + - check if the next character is a digit (if not allow_digits) + - Check empty content + """ + + # TODO options: + # even/odd backslash escaping + + if state.src[state.pos] != "$": + return False + + if not allow_space: + # whitespace not allowed straight after opening $ + try: + if isWhiteSpace(ord(state.src[state.pos + 1])): + return False + except IndexError: + return False + + if not allow_digits: + # digit not allowed straight before opening $ + try: + if state.src[state.pos - 1].isdigit(): + return False + except IndexError: + pass + + if is_escaped(state, state.pos): + return False + + try: + is_double = allow_double and state.src[state.pos + 1] == "$" + except IndexError: + return False + + # find closing $ + pos = state.pos + 1 + (1 if is_double else 0) + found_closing = False + while not found_closing: + try: + end = state.src.index("$", pos) + except ValueError: + return False + + if is_escaped(state, end): + pos = end + 1 + continue + + try: + if is_double and state.src[end + 1] != "$": + pos = end + 1 + continue + except IndexError: + return False + + if is_double: + end += 1 + + found_closing = True + + if not found_closing: + return False + + if not allow_space: + # whitespace not allowed straight before closing $ + try: + if isWhiteSpace(ord(state.src[end - 1])): + return False + except IndexError: + return False + + if not allow_digits: + # digit not allowed straight after closing $ + try: + if state.src[end + 1].isdigit(): + return False + except IndexError: + pass + + text = ( + state.src[state.pos + 2 : end - 1] + if is_double + else state.src[state.pos + 1 : end] + ) + + # ignore empty + if not text: + return False + + if not silent: + token = state.push( + "math_inline_double" if is_double else "math_inline", "math", 0 + ) + token.content = text + token.markup = "$$" if is_double else "$" + + state.pos = end + 1 + + return True + + return _math_inline_dollar + + +# reversed end of block dollar equation, with equation label +DOLLAR_EQNO_REV = re.compile(r"^\s*\)([^)$\r\n]+?)\(\s*\${2}") + + +def math_block_dollar( + allow_labels: bool = True, + label_normalizer: Callable[[str], str] | None = None, + allow_blank_lines: bool = False, +) -> Callable[[StateBlock, int, int, bool], bool]: + """Generate block dollar rule.""" + + def _math_block_dollar( + state: StateBlock, startLine: int, endLine: int, silent: bool + ) -> bool: + # TODO internal backslash escaping + + if is_code_block(state, startLine): + return False + + haveEndMarker = False + startPos = state.bMarks[startLine] + state.tShift[startLine] + end = state.eMarks[startLine] + + if startPos + 2 > end: + return False + + if state.src[startPos] != "$" or state.src[startPos + 1] != "$": + return False + + # search for end of block + nextLine = startLine + label = None + + # search for end of block on same line + lineText = state.src[startPos:end] + if len(lineText.strip()) > 3: + if lineText.strip().endswith("$$"): + haveEndMarker = True + end = end - 2 - (len(lineText) - len(lineText.strip())) + elif allow_labels: + # reverse the line and match + eqnoMatch = DOLLAR_EQNO_REV.match(lineText[::-1]) + if eqnoMatch: + haveEndMarker = True + label = eqnoMatch.group(1)[::-1] + end = end - eqnoMatch.end() + + # search for end of block on subsequent line + if not haveEndMarker: + while True: + nextLine += 1 + if nextLine >= endLine: + break + + start = state.bMarks[nextLine] + state.tShift[nextLine] + end = state.eMarks[nextLine] + + lineText = state.src[start:end] + + if lineText.strip().endswith("$$"): + haveEndMarker = True + end = end - 2 - (len(lineText) - len(lineText.strip())) + break + if lineText.strip() == "" and not allow_blank_lines: + break # blank lines are not allowed within $$ + + # reverse the line and match + if allow_labels: + eqnoMatch = DOLLAR_EQNO_REV.match(lineText[::-1]) + if eqnoMatch: + haveEndMarker = True + label = eqnoMatch.group(1)[::-1] + end = end - eqnoMatch.end() + break + + if not haveEndMarker: + return False + + state.line = nextLine + (1 if haveEndMarker else 0) + + token = state.push("math_block_label" if label else "math_block", "math", 0) + token.block = True + token.content = state.src[startPos + 2 : end] + token.markup = "$$" + token.map = [startLine, state.line] + if label: + token.info = label if label_normalizer is None else label_normalizer(label) + + return True + + return _math_block_dollar diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/field_list/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/field_list/__init__.py new file mode 100644 index 000000000..b3d6407ee --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/field_list/__init__.py @@ -0,0 +1,255 @@ +"""Field list plugin""" + +from contextlib import contextmanager +from typing import Iterator, Optional, Tuple + +from markdown_it import MarkdownIt +from markdown_it.rules_block import StateBlock + +from mdit_py_plugins.utils import is_code_block + + +def fieldlist_plugin(md: MarkdownIt) -> None: + """Field lists are mappings from field names to field bodies, based on the + `reStructureText syntax + <https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#field-lists>`_. + + .. code-block:: md + + :name *markup*: + :name1: body content + :name2: paragraph 1 + + paragraph 2 + :name3: + paragraph 1 + + paragraph 2 + + A field name may consist of any characters except colons (":"). + Inline markup is parsed in field names. + + The field name is followed by whitespace and the field body. + The field body may be empty or contain multiple body elements. + + Since the field marker may be quite long, + the second and subsequent lines of the field body do not have to + line up with the first line, but they must be indented relative to the + field name marker, and they must line up with each other. + """ + md.block.ruler.before( + "paragraph", + "fieldlist", + _fieldlist_rule, + {"alt": ["paragraph", "reference", "blockquote"]}, + ) + + +def parseNameMarker(state: StateBlock, startLine: int) -> Tuple[int, str]: + """Parse field name: `:name:` + + :returns: position after name marker, name text + """ + start = state.bMarks[startLine] + state.tShift[startLine] + pos = start + maximum = state.eMarks[startLine] + + # marker should have at least 3 chars (colon + character + colon) + if pos + 2 >= maximum: + return -1, "" + + # first character should be ':' + if state.src[pos] != ":": + return -1, "" + + # scan name length + name_length = 1 + found_close = False + for ch in state.src[pos + 1 :]: + if ch == "\n": + break + if ch == ":": + # TODO backslash escapes + found_close = True + break + name_length += 1 + + if not found_close: + return -1, "" + + # get name + name_text = state.src[pos + 1 : pos + name_length] + + # name should contain at least one character + if not name_text.strip(): + return -1, "" + + return pos + name_length + 1, name_text + + +@contextmanager +def set_parent_type(state: StateBlock, name: str) -> Iterator[None]: + """Temporarily set parent type to `name`""" + oldParentType = state.parentType + state.parentType = name + yield + state.parentType = oldParentType + + +def _fieldlist_rule( + state: StateBlock, startLine: int, endLine: int, silent: bool +) -> bool: + # adapted from markdown_it/rules_block/list.py::list_block + + if is_code_block(state, startLine): + return False + + posAfterName, name_text = parseNameMarker(state, startLine) + if posAfterName < 0: + return False + + # For validation mode we can terminate immediately + if silent: + return True + + # start field list + token = state.push("field_list_open", "dl", 1) + token.attrSet("class", "field-list") + token.map = listLines = [startLine, 0] + + # iterate list items + nextLine = startLine + + with set_parent_type(state, "fieldlist"): + while nextLine < endLine: + # create name tokens + token = state.push("fieldlist_name_open", "dt", 1) + token.map = [startLine, startLine] + token = state.push("inline", "", 0) + token.map = [startLine, startLine] + token.content = name_text + token.children = [] + token = state.push("fieldlist_name_close", "dt", -1) + + # set indent positions + pos = posAfterName + maximum: int = state.eMarks[nextLine] + first_line_body_indent = ( + state.sCount[nextLine] + + posAfterName + - (state.bMarks[startLine] + state.tShift[startLine]) + ) + + # find indent to start of body on first line + while pos < maximum: + ch = state.src[pos] + + if ch == "\t": + first_line_body_indent += ( + 4 - (first_line_body_indent + state.bsCount[nextLine]) % 4 + ) + elif ch == " ": + first_line_body_indent += 1 + else: + break + + pos += 1 + + contentStart = pos + + # to figure out the indent of the body, + # we look at all non-empty, indented lines and find the minimum indent + block_indent: Optional[int] = None + _line = startLine + 1 + while _line < endLine: + # if start_of_content < end_of_content, then non-empty line + if (state.bMarks[_line] + state.tShift[_line]) < state.eMarks[_line]: + if state.tShift[_line] <= 0: + # the line has no indent, so it's the end of the field + break + block_indent = ( + state.tShift[_line] + if block_indent is None + else min(block_indent, state.tShift[_line]) + ) + + _line += 1 + + has_first_line = contentStart < maximum + if block_indent is None: # no body content + if not has_first_line: # noqa: SIM108 + # no body or first line, so just use default + block_indent = 2 + else: + # only a first line, so use it's indent + block_indent = first_line_body_indent + else: + block_indent = min(block_indent, first_line_body_indent) + + # Run subparser on the field body + token = state.push("fieldlist_body_open", "dd", 1) + token.map = [startLine, startLine] + + with temp_state_changes(state, startLine): + diff = 0 + if has_first_line and block_indent < first_line_body_indent: + # this is a hack to get the first line to render correctly + # we temporarily "shift" it to the left by the difference + # between the first line indent and the block indent + # and replace the "hole" left with space, + # so that src indexes still match + diff = first_line_body_indent - block_indent + state.src = ( + state.src[: contentStart - diff] + + " " * diff + + state.src[contentStart:] + ) + + state.tShift[startLine] = contentStart - diff - state.bMarks[startLine] + state.sCount[startLine] = first_line_body_indent - diff + state.blkIndent = block_indent + + state.md.block.tokenize(state, startLine, endLine) + + state.push("fieldlist_body_close", "dd", -1) + + nextLine = startLine = state.line + token.map[1] = nextLine + + if nextLine >= endLine: + break + + contentStart = state.bMarks[startLine] + + # Try to check if list is terminated or continued. + if state.sCount[nextLine] < state.blkIndent: + break + + if is_code_block(state, startLine): + break + + # get next field item + posAfterName, name_text = parseNameMarker(state, startLine) + if posAfterName < 0: + break + + # Finalize list + token = state.push("field_list_close", "dl", -1) + listLines[1] = nextLine + state.line = nextLine + + return True + + +@contextmanager +def temp_state_changes(state: StateBlock, startLine: int) -> Iterator[None]: + """Allow temporarily changing certain state attributes.""" + oldTShift = state.tShift[startLine] + oldSCount = state.sCount[startLine] + oldBlkIndent = state.blkIndent + oldSrc = state.src + yield + state.blkIndent = oldBlkIndent + state.tShift[startLine] = oldTShift + state.sCount[startLine] = oldSCount + state.src = oldSrc diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/field_list/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/field_list/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..bf78e57b5 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/field_list/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/LICENSE new file mode 100644 index 000000000..2fd4e3dc7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014-2015 Vitaly Puzrin, Alex Kocharin. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/__init__.py new file mode 100644 index 000000000..c172629f8 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/__init__.py @@ -0,0 +1,3 @@ +from .index import footnote_plugin + +__all__ = ("footnote_plugin",) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..2ca4f3cb7 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..d30901de7 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/index.py new file mode 100644 index 000000000..8d6ce26dd --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/index.py @@ -0,0 +1,525 @@ +"""Process footnotes""" + +from __future__ import annotations + +from functools import partial +from typing import TYPE_CHECKING, Sequence, TypedDict + +from markdown_it import MarkdownIt +from markdown_it.helpers import parseLinkLabel +from markdown_it.rules_block import StateBlock +from markdown_it.rules_core import StateCore +from markdown_it.rules_inline import StateInline +from markdown_it.token import Token + +from mdit_py_plugins.utils import is_code_block + +if TYPE_CHECKING: + from markdown_it.renderer import RendererProtocol + from markdown_it.utils import EnvType, OptionsDict + + +def footnote_plugin( + md: MarkdownIt, + *, + inline: bool = True, + move_to_end: bool = True, + always_match_refs: bool = False, +) -> None: + """Plugin ported from + `markdown-it-footnote <https://github.com/markdown-it/markdown-it-footnote>`__. + + It is based on the + `pandoc definition <http://johnmacfarlane.net/pandoc/README.html#footnotes>`__: + + .. code-block:: md + + Normal footnote: + + Here is a footnote reference,[^1] and another.[^longnote] + + [^1]: Here is the footnote. + + [^longnote]: Here's one with multiple blocks. + + Subsequent paragraphs are indented to show that they + belong to the previous footnote. + + :param inline: If True, also parse inline footnotes (^[...]). + :param move_to_end: If True, move footnote definitions to the end of the token stream. + :param always_match_refs: If True, match references, even if the footnote is not defined. + + """ + md.block.ruler.before( + "reference", "footnote_def", footnote_def, {"alt": ["paragraph", "reference"]} + ) + _footnote_ref = partial(footnote_ref, always_match=always_match_refs) + if inline: + md.inline.ruler.after("image", "footnote_inline", footnote_inline) + md.inline.ruler.after("footnote_inline", "footnote_ref", _footnote_ref) + else: + md.inline.ruler.after("image", "footnote_ref", _footnote_ref) + if move_to_end: + md.core.ruler.after("inline", "footnote_tail", footnote_tail) + + md.add_render_rule("footnote_ref", render_footnote_ref) + md.add_render_rule("footnote_block_open", render_footnote_block_open) + md.add_render_rule("footnote_block_close", render_footnote_block_close) + md.add_render_rule("footnote_open", render_footnote_open) + md.add_render_rule("footnote_close", render_footnote_close) + md.add_render_rule("footnote_anchor", render_footnote_anchor) + + # helpers (only used in other rules, no tokens are attached to those) + md.add_render_rule("footnote_caption", render_footnote_caption) + md.add_render_rule("footnote_anchor_name", render_footnote_anchor_name) + + +class _RefData(TypedDict, total=False): + # standard + label: str + count: int + # inline + content: str + tokens: list[Token] + + +class _FootnoteData(TypedDict): + refs: dict[str, int] + """A mapping of all footnote labels (prefixed with ``:``) to their ID (-1 if not yet set).""" + list: dict[int, _RefData] + """A mapping of all footnote IDs to their data.""" + + +def _data_from_env(env: EnvType) -> _FootnoteData: + footnotes = env.setdefault("footnotes", {}) + footnotes.setdefault("refs", {}) + footnotes.setdefault("list", {}) + return footnotes # type: ignore[no-any-return] + + +# ## RULES ## + + +def footnote_def(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + """Process footnote block definition""" + + if is_code_block(state, startLine): + return False + + start = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + # line should be at least 5 chars - "[^x]:" + if start + 4 > maximum: + return False + + if state.src[start] != "[": + return False + if state.src[start + 1] != "^": + return False + + pos = start + 2 + while pos < maximum: + if state.src[pos] == " ": + return False + if state.src[pos] == "]": + break + pos += 1 + + if pos == start + 2: # no empty footnote labels + return False + pos += 1 + if pos >= maximum or state.src[pos] != ":": + return False + if silent: + return True + pos += 1 + + label = state.src[start + 2 : pos - 2] + footnote_data = _data_from_env(state.env) + footnote_data["refs"][":" + label] = -1 + + open_token = Token("footnote_reference_open", "", 1) + open_token.meta = {"label": label} + open_token.level = state.level + state.level += 1 + state.tokens.append(open_token) + + oldBMark = state.bMarks[startLine] + oldTShift = state.tShift[startLine] + oldSCount = state.sCount[startLine] + oldParentType = state.parentType + + posAfterColon = pos + initial = offset = ( + state.sCount[startLine] + + pos + - (state.bMarks[startLine] + state.tShift[startLine]) + ) + + while pos < maximum: + ch = state.src[pos] + + if ch == "\t": + offset += 4 - offset % 4 + elif ch == " ": + offset += 1 + + else: + break + + pos += 1 + + state.tShift[startLine] = pos - posAfterColon + state.sCount[startLine] = offset - initial + + state.bMarks[startLine] = posAfterColon + state.blkIndent += 4 + state.parentType = "footnote" + + if state.sCount[startLine] < state.blkIndent: + state.sCount[startLine] += state.blkIndent + + state.md.block.tokenize(state, startLine, endLine) + + state.parentType = oldParentType + state.blkIndent -= 4 + state.tShift[startLine] = oldTShift + state.sCount[startLine] = oldSCount + state.bMarks[startLine] = oldBMark + + open_token.map = [startLine, state.line] + + token = Token("footnote_reference_close", "", -1) + state.level -= 1 + token.level = state.level + state.tokens.append(token) + + return True + + +def footnote_inline(state: StateInline, silent: bool) -> bool: + """Process inline footnotes (^[...])""" + + maximum = state.posMax + start = state.pos + + if start + 2 >= maximum: + return False + if state.src[start] != "^": + return False + if state.src[start + 1] != "[": + return False + + labelStart = start + 2 + labelEnd = parseLinkLabel(state, start + 1) + + # parser failed to find ']', so it's not a valid note + if labelEnd < 0: + return False + + # We found the end of the link, and know for a fact it's a valid link + # so all that's left to do is to call tokenizer. + # + if not silent: + refs = _data_from_env(state.env)["list"] + footnoteId = len(refs) + + tokens: list[Token] = [] + state.md.inline.parse( + state.src[labelStart:labelEnd], state.md, state.env, tokens + ) + + token = state.push("footnote_ref", "", 0) + token.meta = {"id": footnoteId} + + refs[footnoteId] = {"content": state.src[labelStart:labelEnd], "tokens": tokens} + + state.pos = labelEnd + 1 + state.posMax = maximum + return True + + +def footnote_ref( + state: StateInline, silent: bool, *, always_match: bool = False +) -> bool: + """Process footnote references ([^...])""" + + maximum = state.posMax + start = state.pos + + # should be at least 4 chars - "[^x]" + if start + 3 > maximum: + return False + + footnote_data = _data_from_env(state.env) + + if not (always_match or footnote_data["refs"]): + return False + if state.src[start] != "[": + return False + if state.src[start + 1] != "^": + return False + + pos = start + 2 + while pos < maximum: + if state.src[pos] in (" ", "\n"): + return False + if state.src[pos] == "]": + break + pos += 1 + + if pos == start + 2: # no empty footnote labels + return False + if pos >= maximum: + return False + pos += 1 + + label = state.src[start + 2 : pos - 1] + if ((":" + label) not in footnote_data["refs"]) and not always_match: + return False + + if not silent: + if footnote_data["refs"].get(":" + label, -1) < 0: + footnoteId = len(footnote_data["list"]) + footnote_data["list"][footnoteId] = {"label": label, "count": 0} + footnote_data["refs"][":" + label] = footnoteId + else: + footnoteId = footnote_data["refs"][":" + label] + + footnoteSubId = footnote_data["list"][footnoteId]["count"] + footnote_data["list"][footnoteId]["count"] += 1 + + token = state.push("footnote_ref", "", 0) + token.meta = {"id": footnoteId, "subId": footnoteSubId, "label": label} + + state.pos = pos + state.posMax = maximum + return True + + +def footnote_tail(state: StateCore) -> None: + """Post-processing step, to move footnote tokens to end of the token stream. + + Also removes un-referenced tokens. + """ + + insideRef = False + refTokens = {} + + if "footnotes" not in state.env: + return + + current: list[Token] = [] + tok_filter = [] + for tok in state.tokens: + if tok.type == "footnote_reference_open": + insideRef = True + current = [] + currentLabel = tok.meta["label"] + tok_filter.append(False) + continue + + if tok.type == "footnote_reference_close": + insideRef = False + # prepend ':' to avoid conflict with Object.prototype members + refTokens[":" + currentLabel] = current + tok_filter.append(False) + continue + + if insideRef: + current.append(tok) + + tok_filter.append(not insideRef) + + state.tokens = [t for t, f in zip(state.tokens, tok_filter) if f] + + footnote_data = _data_from_env(state.env) + if not footnote_data["list"]: + return + + token = Token("footnote_block_open", "", 1) + state.tokens.append(token) + + for i, foot_note in footnote_data["list"].items(): + token = Token("footnote_open", "", 1) + token.meta = {"id": i, "label": foot_note.get("label", None)} + # TODO propagate line positions of original foot note + # (but don't store in token.map, because this is used for scroll syncing) + state.tokens.append(token) + + if "tokens" in foot_note: + tokens = [] + + token = Token("paragraph_open", "p", 1) + token.block = True + tokens.append(token) + + token = Token("inline", "", 0) + token.children = foot_note["tokens"] + token.content = foot_note["content"] + tokens.append(token) + + token = Token("paragraph_close", "p", -1) + token.block = True + tokens.append(token) + + elif "label" in foot_note: + tokens = refTokens.get(":" + foot_note["label"], []) + + state.tokens.extend(tokens) + if state.tokens[len(state.tokens) - 1].type == "paragraph_close": + lastParagraph: Token | None = state.tokens.pop() + else: + lastParagraph = None + + t = ( + foot_note["count"] + if (("count" in foot_note) and (foot_note["count"] > 0)) + else 1 + ) + j = 0 + while j < t: + token = Token("footnote_anchor", "", 0) + token.meta = {"id": i, "subId": j, "label": foot_note.get("label", None)} + state.tokens.append(token) + j += 1 + + if lastParagraph: + state.tokens.append(lastParagraph) + + token = Token("footnote_close", "", -1) + state.tokens.append(token) + + token = Token("footnote_block_close", "", -1) + state.tokens.append(token) + + +######################################## +# Renderer partials + + +def render_footnote_anchor_name( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + n = str(tokens[idx].meta["id"] + 1) + prefix = "" + + doc_id = env.get("docId", None) + if isinstance(doc_id, str): + prefix = f"-{doc_id}-" + + return prefix + n + + +def render_footnote_caption( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + n = str(tokens[idx].meta["id"] + 1) + + if tokens[idx].meta.get("subId", -1) > 0: + n += ":" + str(tokens[idx].meta["subId"]) + + return "[" + n + "]" + + +def render_footnote_ref( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + ident: str = self.rules["footnote_anchor_name"](tokens, idx, options, env) # type: ignore[attr-defined] + caption: str = self.rules["footnote_caption"](tokens, idx, options, env) # type: ignore[attr-defined] + refid = ident + + if tokens[idx].meta.get("subId", -1) > 0: + refid += ":" + str(tokens[idx].meta["subId"]) + + return ( + '<sup class="footnote-ref"><a href="#fn' + + ident + + '" id="fnref' + + refid + + '">' + + caption + + "</a></sup>" + ) + + +def render_footnote_block_open( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + return ( + ( + '<hr class="footnotes-sep" />\n' + if options.xhtmlOut + else '<hr class="footnotes-sep">\n' + ) + + '<section class="footnotes">\n' + + '<ol class="footnotes-list">\n' + ) + + +def render_footnote_block_close( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + return "</ol>\n</section>\n" + + +def render_footnote_open( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + ident: str = self.rules["footnote_anchor_name"](tokens, idx, options, env) # type: ignore[attr-defined] + + if tokens[idx].meta.get("subId", -1) > 0: + ident += ":" + tokens[idx].meta["subId"] + + return '<li id="fn' + ident + '" class="footnote-item">' + + +def render_footnote_close( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + return "</li>\n" + + +def render_footnote_anchor( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + ident: str = self.rules["footnote_anchor_name"](tokens, idx, options, env) # type: ignore[attr-defined] + + if tokens[idx].meta["subId"] > 0: + ident += ":" + str(tokens[idx].meta["subId"]) + + # ↩ with escape code to prevent display as Apple Emoji on iOS + return ' <a href="#fnref' + ident + '" class="footnote-backref">\u21a9\ufe0e</a>' diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/port.yaml b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/port.yaml new file mode 100644 index 000000000..722f5e440 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/footnote/port.yaml @@ -0,0 +1,4 @@ +- package: markdown-it-footnote + commit: cab6665ba39c6eb517cbbae3baeb549004bf740c + date: Jul 9, 2019 + version: 3.0.2 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/LICENSE new file mode 100644 index 000000000..54c0b8419 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2016-2020 ParkSB. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/__init__.py new file mode 100644 index 000000000..7475c01d2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/__init__.py @@ -0,0 +1,3 @@ +from .index import front_matter_plugin + +__all__ = ("front_matter_plugin",) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..80be07fe2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..c4d225c6c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/index.py new file mode 100644 index 000000000..1551d76ea --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/index.py @@ -0,0 +1,128 @@ +"""Process front matter.""" + +from markdown_it import MarkdownIt +from markdown_it.rules_block import StateBlock + +from mdit_py_plugins.utils import is_code_block + + +def front_matter_plugin(md: MarkdownIt) -> None: + """Plugin ported from + `markdown-it-front-matter <https://github.com/ParkSB/markdown-it-front-matter>`__. + + It parses initial metadata, stored between opening/closing dashes: + + .. code-block:: md + + --- + valid-front-matter: true + --- + + """ + md.block.ruler.before( + "table", + "front_matter", + _front_matter_rule, + {"alt": ["paragraph", "reference", "blockquote", "list"]}, + ) + + +def _front_matter_rule( + state: StateBlock, startLine: int, endLine: int, silent: bool +) -> bool: + marker_chr = "-" + min_markers = 3 + + auto_closed = False + start = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + src_len = len(state.src) + + # Check out the first character of the first line quickly, + # this should filter out non-front matter + if startLine != 0 or state.src[0] != marker_chr: + return False + + # Check out the rest of the marker string + # while pos <= 3 + pos = start + 1 + while pos <= maximum and pos < src_len: + if state.src[pos] != marker_chr: + break + pos += 1 + + marker_count = pos - start + + if marker_count < min_markers: + return False + + # Since start is found, we can report success here in validation mode + if silent: + return True + + # Search for the end of the block + nextLine = startLine + + while True: + nextLine += 1 + if nextLine >= endLine: + # unclosed block should be autoclosed by end of document. + return False + + if state.src[start:maximum] == "...": + break + + start = state.bMarks[nextLine] + state.tShift[nextLine] + maximum = state.eMarks[nextLine] + + if start < maximum and state.sCount[nextLine] < state.blkIndent: + # non-empty line with negative indent should stop the list: + # - ``` + # test + break + + if state.src[start] != marker_chr: + continue + + if is_code_block(state, nextLine): + continue + + pos = start + 1 + while pos < maximum: + if state.src[pos] != marker_chr: + break + pos += 1 + + # closing code fence must be at least as long as the opening one + if (pos - start) < marker_count: + continue + + # make sure tail has spaces only + pos = state.skipSpaces(pos) + + if pos < maximum: + continue + + # found! + auto_closed = True + break + + old_parent = state.parentType + old_line_max = state.lineMax + state.parentType = "container" + + # this will prevent lazy continuations from ever going past our end marker + state.lineMax = nextLine + + token = state.push("front_matter", "", 0) + token.hidden = True + token.markup = marker_chr * min_markers + token.content = state.src[state.bMarks[startLine + 1] : state.eMarks[nextLine - 1]] + token.block = True + + state.parentType = old_parent + state.lineMax = old_line_max + state.line = nextLine + (1 if auto_closed else 0) + token.map = [startLine, state.line] + + return True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/port.yaml b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/port.yaml new file mode 100644 index 000000000..f7d145f10 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/front_matter/port.yaml @@ -0,0 +1,4 @@ +- package: markdown-it-front-matter + commit: b404f5d8fd536e7e9ddb276267ae0b6f76e9cf9d + date: Feb 7, 2020 + version: 0.2.1 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/__init__.py new file mode 100644 index 000000000..207afecca --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/__init__.py @@ -0,0 +1,3 @@ +from .index import myst_block_plugin + +__all__ = ("myst_block_plugin",) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..331e760d8 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..a3db1ff4f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/index.py new file mode 100644 index 000000000..25d14ffe0 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_blocks/index.py @@ -0,0 +1,169 @@ +from __future__ import annotations + +import itertools +from typing import TYPE_CHECKING, Sequence + +from markdown_it import MarkdownIt +from markdown_it.common.utils import escapeHtml +from markdown_it.rules_block import StateBlock + +from mdit_py_plugins.utils import is_code_block + +if TYPE_CHECKING: + from markdown_it.renderer import RendererProtocol + from markdown_it.token import Token + from markdown_it.utils import EnvType, OptionsDict + + +def myst_block_plugin(md: MarkdownIt) -> None: + """Parse MyST targets (``(name)=``), blockquotes (``% comment``) and block breaks (``+++``).""" + md.block.ruler.before( + "blockquote", + "myst_line_comment", + line_comment, + {"alt": ["paragraph", "reference", "blockquote", "list", "footnote_def"]}, + ) + md.block.ruler.before( + "hr", + "myst_block_break", + block_break, + {"alt": ["paragraph", "reference", "blockquote", "list", "footnote_def"]}, + ) + md.block.ruler.before( + "hr", + "myst_target", + target, + {"alt": ["paragraph", "reference", "blockquote", "list", "footnote_def"]}, + ) + md.add_render_rule("myst_target", render_myst_target) + md.add_render_rule("myst_line_comment", render_myst_line_comment) + + +def line_comment(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + if is_code_block(state, startLine): + return False + + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + if state.src[pos] != "%": + return False + + if silent: + return True + + token = state.push("myst_line_comment", "", 0) + token.attrSet("class", "myst-line-comment") + token.content = state.src[pos + 1 : maximum].rstrip() + token.markup = "%" + + # search end of block while appending lines to `token.content` + for nextLine in itertools.count(startLine + 1): + if nextLine >= endLine: + break + pos = state.bMarks[nextLine] + state.tShift[nextLine] + maximum = state.eMarks[nextLine] + + if state.src[pos] != "%": + break + token.content += "\n" + state.src[pos + 1 : maximum].rstrip() + + state.line = nextLine + token.map = [startLine, nextLine] + + return True + + +def block_break(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + if is_code_block(state, startLine): + return False + + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + marker = state.src[pos] + pos += 1 + + # Check block marker + if marker != "+": + return False + + # markers can be mixed with spaces, but there should be at least 3 of them + + cnt = 1 + while pos < maximum: + ch = state.src[pos] + if ch != marker and ch not in ("\t", " "): + break + if ch == marker: + cnt += 1 + pos += 1 + + if cnt < 3: + return False + + if silent: + return True + + state.line = startLine + 1 + + token = state.push("myst_block_break", "hr", 0) + token.attrSet("class", "myst-block") + token.content = state.src[pos:maximum].strip() + token.map = [startLine, state.line] + token.markup = marker * cnt + + return True + + +def target(state: StateBlock, startLine: int, endLine: int, silent: bool) -> bool: + if is_code_block(state, startLine): + return False + + pos = state.bMarks[startLine] + state.tShift[startLine] + maximum = state.eMarks[startLine] + + text = state.src[pos:maximum].strip() + if not text.startswith("("): + return False + if not text.endswith(")="): + return False + if not text[1:-2]: + return False + + if silent: + return True + + state.line = startLine + 1 + + token = state.push("myst_target", "", 0) + token.attrSet("class", "myst-target") + token.content = text[1:-2] + token.map = [startLine, state.line] + + return True + + +def render_myst_target( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + label = tokens[idx].content + class_name = "myst-target" + target = f'<a href="#{label}">({label})=</a>' + return f'<div class="{class_name}">{target}</div>' + + +def render_myst_line_comment( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, +) -> str: + # Strip leading whitespace from all lines + content = "\n".join(line.lstrip() for line in tokens[idx].content.split("\n")) + return f"<!-- {escapeHtml(content)} -->" diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/__init__.py new file mode 100644 index 000000000..12e07eeea --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/__init__.py @@ -0,0 +1,3 @@ +from .index import myst_role_plugin + +__all__ = ("myst_role_plugin",) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..d27a3ace6 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..52f4c7278 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/index.py new file mode 100644 index 000000000..b82daa143 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/myst_role/index.py @@ -0,0 +1,74 @@ +import re +from typing import TYPE_CHECKING, Sequence + +from markdown_it import MarkdownIt +from markdown_it.common.utils import escapeHtml +from markdown_it.rules_inline import StateInline + +if TYPE_CHECKING: + from markdown_it.renderer import RendererProtocol + from markdown_it.token import Token + from markdown_it.utils import EnvType, OptionsDict + +VALID_NAME_PATTERN = re.compile(r"^\{([a-zA-Z0-9\_\-\+\:]+)\}") + + +def myst_role_plugin(md: MarkdownIt) -> None: + """Parse ``{role-name}`content```""" + md.inline.ruler.before("backticks", "myst_role", myst_role) + md.add_render_rule("myst_role", render_myst_role) + + +def myst_role(state: StateInline, silent: bool) -> bool: + # check name + match = VALID_NAME_PATTERN.match(state.src[state.pos :]) + if not match: + return False + name = match.group(1) + + # check for starting backslash escape + try: + if state.src[state.pos - 1] == "\\": + # escaped (this could be improved in the case of edge case '\\{') + return False + except IndexError: + pass + + # scan opening tick length + start = pos = state.pos + match.end() + try: + while state.src[pos] == "`": + pos += 1 + except IndexError: + return False + + tick_length = pos - start + if not tick_length: + return False + + # search for closing ticks + match = re.search("`" * tick_length, state.src[pos + 1 :]) + if not match: + return False + content = state.src[pos : pos + match.start() + 1].replace("\n", " ") + + if not silent: + token = state.push("myst_role", "", 0) + token.meta = {"name": name} + token.content = content + + state.pos = pos + match.end() + 1 + + return True + + +def render_myst_role( + self: "RendererProtocol", + tokens: Sequence["Token"], + idx: int, + options: "OptionsDict", + env: "EnvType", +) -> str: + token = tokens[idx] + name = token.meta.get("name", "unknown") + return f'<code class="myst role">{{{name}}}[{escapeHtml(token.content)}]</code>' diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/py.typed b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/py.typed new file mode 100644 index 000000000..7632ecf77 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/substitution.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/substitution.py new file mode 100644 index 000000000..3b37d44c6 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/substitution.py @@ -0,0 +1,111 @@ +from markdown_it import MarkdownIt +from markdown_it.rules_block import StateBlock +from markdown_it.rules_inline import StateInline + +from mdit_py_plugins.utils import is_code_block + + +def substitution_plugin( + md: MarkdownIt, start_delimiter: str = "{", end_delimiter: str = "}" +) -> None: + """A plugin to create substitution tokens. + + These, token should be handled by the renderer. + + Example:: + + {{ block }} + + a {{ inline }} b + + """ + + def _substitution_inline(state: StateInline, silent: bool) -> bool: + try: + if ( + state.src[state.pos] != start_delimiter + or state.src[state.pos + 1] != start_delimiter + ): + return False + except IndexError: + return False + + pos = state.pos + 2 + found_closing = False + while True: + try: + end = state.src.index(end_delimiter, pos) + except ValueError: + return False + try: + if state.src[end + 1] == end_delimiter: + found_closing = True + break + except IndexError: + return False + pos = end + 2 + + if not found_closing: + return False + + text = state.src[state.pos + 2 : end].strip() + state.pos = end + 2 + + if silent: + return True + + token = state.push("substitution_inline", "span", 0) + token.block = False + token.content = text + token.attrSet("class", "substitution") + token.attrSet("text", text) + token.markup = f"{start_delimiter}{end_delimiter}" + + return True + + def _substitution_block( + state: StateBlock, startLine: int, endLine: int, silent: bool + ) -> bool: + if is_code_block(state, startLine): + return False + + startPos = state.bMarks[startLine] + state.tShift[startLine] + end = state.eMarks[startLine] + + lineText = state.src[startPos:end].strip() + + try: + if ( + lineText[0] != start_delimiter + or lineText[1] != start_delimiter + or lineText[-1] != end_delimiter + or lineText[-2] != end_delimiter + or len(lineText) < 5 + ): + return False + except IndexError: + return False + + text = lineText[2:-2].strip() + + # special case if multiple on same line, e.g. {{a}}{{b}} + if (end_delimiter * 2) in text: + return False + + state.line = startLine + 1 + + if silent: + return True + + token = state.push("substitution_block", "div", 0) + token.block = True + token.content = text + token.attrSet("class", "substitution") + token.attrSet("text", text) + token.markup = f"{start_delimiter}{end_delimiter}" + token.map = [startLine, state.line] + + return True + + md.block.ruler.before("fence", "substitution_block", _substitution_block) + md.inline.ruler.before("escape", "substitution_inline", _substitution_inline) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/tasklists/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/tasklists/__init__.py new file mode 100644 index 000000000..d80f47589 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/tasklists/__init__.py @@ -0,0 +1,151 @@ +"""Builds task/todo lists out of markdown lists with items starting with [ ] or [x]""" + +# Ported by Wolmar Nyberg Åkerström from https://github.com/revin/markdown-it-task-lists +# ISC License +# Copyright (c) 2016, Revin Guillen +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +from __future__ import annotations + +import re +from uuid import uuid4 + +from markdown_it import MarkdownIt +from markdown_it.rules_core import StateCore +from markdown_it.token import Token + +# Regex string to match a whitespace character, as specified in +# https://github.github.com/gfm/#whitespace-character +# (spec version 0.29-gfm (2019-04-06)) +_GFM_WHITESPACE_RE = r"[ \t\n\v\f\r]" + + +def tasklists_plugin( + md: MarkdownIt, + enabled: bool = False, + label: bool = False, + label_after: bool = False, +) -> None: + """Plugin for building task/todo lists out of markdown lists with items starting with [ ] or [x] + .. Nothing else + + For example:: + - [ ] An item that needs doing + - [x] An item that is complete + + The rendered HTML checkboxes are disabled; to change this, pass a truthy value into the enabled + property of the plugin options. + + :param enabled: True enables the rendered checkboxes + :param label: True wraps the rendered list items in a <label> element for UX purposes, + :param label_after: True adds the <label> element after the checkbox. + """ + disable_checkboxes = not enabled + use_label_wrapper = label + use_label_after = label_after + + def fcn(state: StateCore) -> None: + tokens = state.tokens + for i in range(2, len(tokens) - 1): + if is_todo_item(tokens, i): + todoify(tokens[i]) + tokens[i - 2].attrSet( + "class", + "task-list-item" + (" enabled" if not disable_checkboxes else ""), + ) + tokens[parent_token(tokens, i - 2)].attrSet( + "class", "contains-task-list" + ) + + md.core.ruler.after("inline", "github-tasklists", fcn) + + def parent_token(tokens: list[Token], index: int) -> int: + target_level = tokens[index].level - 1 + for i in range(1, index + 1): + if tokens[index - i].level == target_level: + return index - i + return -1 + + def is_todo_item(tokens: list[Token], index: int) -> bool: + return ( + is_inline(tokens[index]) + and is_paragraph(tokens[index - 1]) + and is_list_item(tokens[index - 2]) + and starts_with_todo_markdown(tokens[index]) + ) + + def todoify(token: Token) -> None: + assert token.children is not None + token.children.insert(0, make_checkbox(token)) + token.children[1].content = token.children[1].content[3:] + token.content = token.content[3:] + + if use_label_wrapper: + if use_label_after: + token.children.pop() + + # Replaced number generator from original plugin with uuid. + checklist_id = f"task-item-{uuid4()}" + token.children[0].content = ( + token.children[0].content[0:-1] + f' id="{checklist_id}">' + ) + token.children.append(after_label(token.content, checklist_id)) + else: + token.children.insert(0, begin_label()) + token.children.append(end_label()) + + def make_checkbox(token: Token) -> Token: + checkbox = Token("html_inline", "", 0) + disabled_attr = 'disabled="disabled"' if disable_checkboxes else "" + if token.content.startswith("[ ] "): + checkbox.content = ( + '<input class="task-list-item-checkbox" ' + f'{disabled_attr} type="checkbox">' + ) + elif token.content.startswith("[x] ") or token.content.startswith("[X] "): + checkbox.content = ( + '<input class="task-list-item-checkbox" checked="checked" ' + f'{disabled_attr} type="checkbox">' + ) + return checkbox + + def begin_label() -> Token: + token = Token("html_inline", "", 0) + token.content = "<label>" + return token + + def end_label() -> Token: + token = Token("html_inline", "", 0) + token.content = "</label>" + return token + + def after_label(content: str, checkbox_id: str) -> Token: + token = Token("html_inline", "", 0) + token.content = ( + f'<label class="task-list-item-label" for="{checkbox_id}">{content}</label>' + ) + token.attrs = {"for": checkbox_id} + return token + + def is_inline(token: Token) -> bool: + return token.type == "inline" + + def is_paragraph(token: Token) -> bool: + return token.type == "paragraph_open" + + def is_list_item(token: Token) -> bool: + return token.type == "list_item_open" + + def starts_with_todo_markdown(token: Token) -> bool: + # leading whitespace in a list item is already trimmed off by markdown-it + return re.match(rf"\[[ xX]]{_GFM_WHITESPACE_RE}+", token.content) is not None diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/tasklists/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/tasklists/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..dd8d9711f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/tasklists/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/tasklists/port.yaml b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/tasklists/port.yaml new file mode 100644 index 000000000..4ad6da59a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/tasklists/port.yaml @@ -0,0 +1,6 @@ +- package: markdown-it-task-lists + commit: 8233e000559fae5a6306009e55332a54a9d3f606 + date: 6 Mar 2018 + version: 2.1.1 + changes: + - Replaced number generator from original plugin with uuid diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/LICENSE new file mode 100644 index 000000000..b88387c65 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-17 Stefan Goessner + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/README.md b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/README.md new file mode 100644 index 000000000..f79f33563 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/README.md @@ -0,0 +1,137 @@ +[![License](https://img.shields.io/github/license/goessner/markdown-it-texmath.svg)](https://github.com/goessner/markdown-it-texmath/blob/master/licence.txt) +[![npm](https://img.shields.io/npm/v/markdown-it-texmath.svg)](https://www.npmjs.com/package/markdown-it-texmath) +[![npm](https://img.shields.io/npm/dt/markdown-it-texmath.svg)](https://www.npmjs.com/package/markdown-it-texmath) + +# markdown-it-texmath + +Add TeX math equations to your Markdown documents rendered by [markdown-it](https://github.com/markdown-it/markdown-it) parser. [KaTeX](https://github.com/Khan/KaTeX) is used as a fast math renderer. + +## Features +Simplify the process of authoring markdown documents containing math formulas. +This extension is a comfortable tool for scientists, engineers and students with markdown as their first choice document format. + +* Macro support +* Simple formula numbering +* Inline math with tables, lists and blockquote. +* User setting delimiters: + * `'dollars'` (default) + * inline: `$...$` + * display: `$$...$$` + * display + equation number: `$$...$$ (1)` + * `'brackets'` + * inline: `\(...\)` + * display: `\[...\]` + * display + equation number: `\[...\] (1)` + * `'gitlab'` + * inline: ``$`...`$`` + * display: `` ```math ... ``` `` + * display + equation number: `` ```math ... ``` (1)`` + * `'julia'` + * inline: `$...$` or ``` ``...`` ``` + * display: `` ```math ... ``` `` + * display + equation number: `` ```math ... ``` (1)`` + * `'kramdown'` + * inline: ``$$...$$`` + * display: `$$...$$` + * display + equation number: `$$...$$ (1)` + +## Show me + +View a [test table](https://goessner.github.io/markdown-it-texmath/index.html). + +[try it out ...](https://goessner.github.io/markdown-it-texmath/markdown-it-texmath-demo.html) + +## Use with `node.js` + +Install the extension. Verify having `markdown-it` and `katex` already installed . +``` +npm install markdown-it-texmath +``` +Use it with JavaScript. +```js +let kt = require('katex'), + tm = require('markdown-it-texmath').use(kt), + md = require('markdown-it')().use(tm,{delimiters:'dollars',macros:{"\\RR": "\\mathbb{R}"}}); + +md.render('Euler\'s identity \(e^{i\pi}+1=0\) is a beautiful formula in $\\RR 2$.') +``` + +## Use in Browser +```html +<html> +<head> + <meta charset='utf-8'> + <link rel="stylesheet" href="katex.min.css"> + <link rel="stylesheet" href="texmath.css"> + <script src="markdown-it.min.js"></script> + <script src="katex.min.js"></script> + <script src="texmath.js"></script> +</head> +<body> + <div id="out"></div> + <script> + let md; + document.addEventListener("DOMContentLoaded", () => { + const tm = texmath.use(katex); + md = markdownit().use(tm,{delimiters:'dollars',macros:{"\\RR": "\\mathbb{R}"}}); + out.innerHTML = md.render('Euler\'s identity $e^{i\pi}+1=0$ is a beautiful formula in //RR 2.'); + }) + </script> +</body> +</html> +``` +## CDN + +Use following links for `texmath.js` and `texmath.css` +* `https://gitcdn.xyz/cdn/goessner/markdown-it-texmath/master/texmath.js` +* `https://gitcdn.xyz/cdn/goessner/markdown-it-texmath/master/texmath.css` + +## Dependencies + +* [`markdown-it`](https://github.com/markdown-it/markdown-it): Markdown parser done right. Fast and easy to extend. +* [`katex`](https://github.com/Khan/KaTeX): This is where credits for fast rendering TeX math in HTML go to. + +## ToDo + + nothing yet + +## FAQ + +* __`markdown-it-texmath` with React Native does not work, why ?__ + * `markdown-it-texmath` is using regular expressions with `y` [(sticky) property](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky) and cannot avoid this. The use of the `y` flag in regular expressions means the plugin is not compatible with React Native (which as of now doesn't support it and throws an error `Invalid flags supplied to RegExp constructor`). + +## CHANGELOG + +### [0.6.0] on October 04, 2019 +* Add support for [Julia Markdown](https://docs.julialang.org/en/v1/stdlib/Markdown/) on [request](https://github.com/goessner/markdown-it-texmath/issues/15). + +### [0.5.5] on February 07, 2019 +* Remove [rendering bug with brackets delimiters](https://github.com/goessner/markdown-it-texmath/issues/9). + +### [0.5.4] on January 20, 2019 +* Remove pathological [bug within blockquotes](https://github.com/goessner/mdmath/issues/50). + +### [0.5.3] on November 11, 2018 +* Add support for Tex macros (https://katex.org/docs/supported.html#macros) . +* Bug with [brackets delimiters](https://github.com/goessner/markdown-it-texmath/issues/9) . + +### [0.5.2] on September 07, 2018 +* Add support for [Kramdown](https://kramdown.gettalong.org/) . + +### [0.5.0] on August 15, 2018 +* Fatal blockquote bug investigated. Implemented workaround to vscode bug, which has finally gone with vscode 1.26.0 . + +### [0.4.6] on January 05, 2018 +* Escaped underscore bug removed. + +### [0.4.5] on November 06, 2017 +* Backslash bug removed. + +### [0.4.4] on September 27, 2017 +* Modifying the `block` mode regular expression with `gitlab` delimiters, so removing the `newline` bug. + +## License + +`markdown-it-texmath` is licensed under the [MIT License](./license.txt) + + © [Stefan Gössner](https://github.com/goessner) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/__init__.py new file mode 100644 index 000000000..387a81dd8 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/__init__.py @@ -0,0 +1,3 @@ +from .index import texmath_plugin + +__all__ = ("texmath_plugin",) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..c12d4b369 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..aa39177af Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/index.py new file mode 100644 index 000000000..63a169d2f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/index.py @@ -0,0 +1,342 @@ +from __future__ import annotations + +import re +from typing import TYPE_CHECKING, Any, Callable, Match, Sequence, TypedDict + +from markdown_it import MarkdownIt +from markdown_it.common.utils import charCodeAt + +if TYPE_CHECKING: + from markdown_it.renderer import RendererProtocol + from markdown_it.rules_block import StateBlock + from markdown_it.rules_inline import StateInline + from markdown_it.token import Token + from markdown_it.utils import EnvType, OptionsDict + + +def texmath_plugin( + md: MarkdownIt, delimiters: str = "dollars", macros: Any = None +) -> None: + """Plugin ported from + `markdown-it-texmath <https://github.com/goessner/markdown-it-texmath>`__. + + It parses TeX math equations set inside opening and closing delimiters: + + .. code-block:: md + + $\\alpha = \\frac{1}{2}$ + + :param delimiters: one of: brackets, dollars, gitlab, julia, kramdown + + """ + macros = macros or {} + + if delimiters in rules: + for rule_inline in rules[delimiters]["inline"]: + md.inline.ruler.before( + "escape", rule_inline["name"], make_inline_func(rule_inline) + ) + + def render_math_inline( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + return rule_inline["tmpl"].format( # noqa: B023 + render(tokens[idx].content, False, macros) + ) + + md.add_render_rule(rule_inline["name"], render_math_inline) + + for rule_block in rules[delimiters]["block"]: + md.block.ruler.before( + "fence", rule_block["name"], make_block_func(rule_block) + ) + + def render_math_block( + self: RendererProtocol, + tokens: Sequence[Token], + idx: int, + options: OptionsDict, + env: EnvType, + ) -> str: + return rule_block["tmpl"].format( # noqa: B023 + render(tokens[idx].content, True, macros), tokens[idx].info + ) + + md.add_render_rule(rule_block["name"], render_math_block) + + +class _RuleDictReqType(TypedDict): + name: str + rex: re.Pattern[str] + tmpl: str + tag: str + + +class RuleDictType(_RuleDictReqType, total=False): + # Note in Python 3.10+ could use Req annotation + pre: Any + post: Any + + +def applyRule( + rule: RuleDictType, string: str, begin: int, inBlockquote: bool +) -> None | Match[str]: + if not ( + string.startswith(rule["tag"], begin) + and (rule["pre"](string, begin) if "pre" in rule else True) + ): + return None + + match = rule["rex"].match(string[begin:]) + + if not match or match.start() != 0: + return None + + lastIndex = match.end() + begin - 1 + if "post" in rule and not ( + rule["post"](string, lastIndex) # valid post-condition + # remove evil blockquote bug (https:#github.com/goessner/mdmath/issues/50) + and (not inBlockquote or "\n" not in match.group(1)) + ): + return None + return match + + +def make_inline_func(rule: RuleDictType) -> Callable[[StateInline, bool], bool]: + def _func(state: StateInline, silent: bool) -> bool: + res = applyRule(rule, state.src, state.pos, False) + if res: + if not silent: + token = state.push(rule["name"], "math", 0) + token.content = res[1] # group 1 from regex .. + token.markup = rule["tag"] + + state.pos += res.end() + + return bool(res) + + return _func + + +def make_block_func(rule: RuleDictType) -> Callable[[StateBlock, int, int, bool], bool]: + def _func(state: StateBlock, begLine: int, endLine: int, silent: bool) -> bool: + begin = state.bMarks[begLine] + state.tShift[begLine] + res = applyRule(rule, state.src, begin, state.parentType == "blockquote") + if res: + if not silent: + token = state.push(rule["name"], "math", 0) + token.block = True + token.content = res[1] + token.info = res[len(res.groups())] + token.markup = rule["tag"] + + line = begLine + endpos = begin + res.end() - 1 + + while line < endLine: + if endpos >= state.bMarks[line] and endpos <= state.eMarks[line]: + # line for end of block math found ... + state.line = line + 1 + break + line += 1 + + return bool(res) + + return _func + + +def dollar_pre(src: str, beg: int) -> bool: + prv = charCodeAt(src[beg - 1], 0) if beg > 0 else False + return ( + (not prv) or prv != 0x5C and (prv < 0x30 or prv > 0x39) # no backslash, + ) # no decimal digit .. before opening '$' + + +def dollar_post(src: str, end: int) -> bool: + try: + nxt = src[end + 1] and charCodeAt(src[end + 1], 0) + except IndexError: + return True + return ( + (not nxt) or (nxt < 0x30) or (nxt > 0x39) + ) # no decimal digit .. after closing '$' + + +def render(tex: str, displayMode: bool, macros: Any) -> str: + return tex + # TODO better HTML renderer port for math + # try: + # res = katex.renderToString(tex,{throwOnError:False,displayMode,macros}) + # except: + # res = tex+": "+err.message.replace("<","<") + # return res + + +# def use(katex): # math renderer used ... +# texmath.katex = katex; # ... katex solely at current ... +# return texmath; +# } + + +# All regexes areg global (g) and sticky (y), see: +# https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky + + +rules: dict[str, dict[str, list[RuleDictType]]] = { + "brackets": { + "inline": [ + { + "name": "math_inline", + "rex": re.compile(r"^\\\((.+?)\\\)", re.DOTALL), + "tmpl": "<eq>{0}</eq>", + "tag": "\\(", + } + ], + "block": [ + { + "name": "math_block_eqno", + "rex": re.compile( + r"^\\\[(((?!\\\]|\\\[)[\s\S])+?)\\\]\s*?\(([^)$\r\n]+?)\)", re.M + ), + "tmpl": '<section class="eqno"><eqn>{0}</eqn><span>({1})</span></section>', + "tag": "\\[", + }, + { + "name": "math_block", + "rex": re.compile(r"^\\\[([\s\S]+?)\\\]", re.M), + "tmpl": "<section>\n<eqn>{0}</eqn>\n</section>\n", + "tag": "\\[", + }, + ], + }, + "gitlab": { + "inline": [ + { + "name": "math_inline", + "rex": re.compile(r"^\$`(.+?)`\$"), + "tmpl": "<eq>{0}</eq>", + "tag": "$`", + } + ], + "block": [ + { + "name": "math_block_eqno", + "rex": re.compile( + r"^`{3}math\s+?([^`]+?)\s+?`{3}\s*?\(([^)$\r\n]+?)\)", re.M + ), + "tmpl": '<section class="eqno">\n<eqn>{0}</eqn><span>({1})</span>\n</section>\n', + "tag": "```math", + }, + { + "name": "math_block", + "rex": re.compile(r"^`{3}math\s+?([^`]+?)\s+?`{3}", re.M), + "tmpl": "<section>\n<eqn>{0}</eqn>\n</section>\n", + "tag": "```math", + }, + ], + }, + "julia": { + "inline": [ + { + "name": "math_inline", + "rex": re.compile(r"^`{2}([^`]+?)`{2}"), + "tmpl": "<eq>{0}</eq>", + "tag": "``", + }, + { + "name": "math_inline", + "rex": re.compile(r"^\$(\S[^$\r\n]*?[^\s\\]{1}?)\$"), + "tmpl": "<eq>{0}</eq>", + "tag": "$", + "pre": dollar_pre, + "post": dollar_post, + }, + { + "name": "math_single", + "rex": re.compile(r"^\$([^$\s\\]{1}?)\$"), + "tmpl": "<eq>{0}</eq>", + "tag": "$", + "pre": dollar_pre, + "post": dollar_post, + }, + ], + "block": [ + { + "name": "math_block_eqno", + "rex": re.compile( + r"^`{3}math\s+?([^`]+?)\s+?`{3}\s*?\(([^)$\r\n]+?)\)", re.M + ), + "tmpl": '<section class="eqno"><eqn>{0}</eqn><span>({1})</span></section>', + "tag": "```math", + }, + { + "name": "math_block", + "rex": re.compile(r"^`{3}math\s+?([^`]+?)\s+?`{3}", re.M), + "tmpl": "<section><eqn>{0}</eqn></section>", + "tag": "```math", + }, + ], + }, + "kramdown": { + "inline": [ + { + "name": "math_inline", + "rex": re.compile(r"^\${2}([^$\r\n]*?)\${2}"), + "tmpl": "<eq>{0}</eq>", + "tag": "$$", + } + ], + "block": [ + { + "name": "math_block_eqno", + "rex": re.compile(r"^\${2}([^$]*?)\${2}\s*?\(([^)$\r\n]+?)\)", re.M), + "tmpl": '<section class="eqno"><eqn>{0}</eqn><span>({1})</span></section>', + "tag": "$$", + }, + { + "name": "math_block", + "rex": re.compile(r"^\${2}([^$]*?)\${2}", re.M), + "tmpl": "<section><eqn>{0}</eqn></section>", + "tag": "$$", + }, + ], + }, + "dollars": { + "inline": [ + { + "name": "math_inline", + "rex": re.compile(r"^\$(\S[^$]*?[^\s\\]{1}?)\$"), + "tmpl": "<eq>{0}</eq>", + "tag": "$", + "pre": dollar_pre, + "post": dollar_post, + }, + { + "name": "math_single", + "rex": re.compile(r"^\$([^$\s\\]{1}?)\$"), + "tmpl": "<eq>{0}</eq>", + "tag": "$", + "pre": dollar_pre, + "post": dollar_post, + }, + ], + "block": [ + { + "name": "math_block_eqno", + "rex": re.compile(r"^\${2}([^$]*?)\${2}\s*?\(([^)$\r\n]+?)\)", re.M), + "tmpl": '<section class="eqno">\n<eqn>{0}</eqn><span>({1})</span>\n</section>\n', + "tag": "$$", + }, + { + "name": "math_block", + "rex": re.compile(r"^\${2}([^$]*?)\${2}", re.M), + "tmpl": "<section>\n<eqn>{0}</eqn>\n</section>\n", + "tag": "$$", + }, + ], + }, +} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/port.yaml b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/port.yaml new file mode 100644 index 000000000..ba47ac83a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/texmath/port.yaml @@ -0,0 +1,7 @@ +- package: markdown-it-texmath + commit: 78c548829ce2ef85c73dc71e680d01e5ae41ffbf + date: Oct 4, 2019 + version: 0.6 + changes: | + both dollars/math_inline and brackets/math_inline regexes have been changed, + to allow (single) line breaks diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/utils.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/utils.py new file mode 100644 index 000000000..bd8db4e65 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/utils.py @@ -0,0 +1,12 @@ +from markdown_it.rules_block import StateBlock + + +def is_code_block(state: StateBlock, line: int) -> bool: + """Check if the line is part of a code block, compat for markdown-it-py v2.""" + try: + # markdown-it-py v3+ + return state.is_code_block(line) + except AttributeError: + pass + + return (state.sCount[line] - state.blkIndent) >= 4 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/wordcount/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/wordcount/__init__.py new file mode 100644 index 000000000..63bdf2471 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/wordcount/__init__.py @@ -0,0 +1,58 @@ +import string +from typing import Callable, List + +from markdown_it import MarkdownIt +from markdown_it.rules_core import StateCore + + +def basic_count(text: str) -> int: + """Split the string and ignore punctuation only elements.""" + return sum([el.strip(string.punctuation).isalpha() for el in text.split()]) + + +def wordcount_plugin( + md: MarkdownIt, + *, + per_minute: int = 200, + count_func: Callable[[str], int] = basic_count, + store_text: bool = False, +) -> None: + """Plugin for computing and storing the word count. + + Stores in the ``env`` e.g.:: + + env["wordcount"] = { + "words": 200 + "minutes": 1, + } + + If "wordcount" is already in the env, it will update it. + + :param per_minute: Words per minute reading speed + :param store_text: store all text under a "text" key, as a list of strings + """ + + def _word_count_rule(state: StateCore) -> None: + text: List[str] = [] + words = 0 + for token in state.tokens: + if token.type == "text": + words += count_func(token.content) + if store_text: + text.append(token.content) + elif token.type == "inline": + for child in token.children or (): + if child.type == "text": + words += count_func(child.content) + if store_text: + text.append(child.content) + + data = state.env.setdefault("wordcount", {}) + if store_text: + data.setdefault("text", []) + data["text"] += text + data.setdefault("words", 0) + data["words"] += words + data["minutes"] = int(round(data["words"] / per_minute)) + + md.core.ruler.push("wordcount", _word_count_rule) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/wordcount/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/wordcount/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..dcdcb0107 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdit_py_plugins/wordcount/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/LICENSE new file mode 100644 index 000000000..2a920c59d --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/LICENSE @@ -0,0 +1,46 @@ +Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. +Copyright (c) 2021 Taneli Hukkinen + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- + +.parse() is based on Joyent's node.js `url` code: + +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/METADATA new file mode 100644 index 000000000..b4670e86b --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/METADATA @@ -0,0 +1,32 @@ +Metadata-Version: 2.1 +Name: mdurl +Version: 0.1.2 +Summary: Markdown URL utilities +Keywords: markdown,commonmark +Author-email: Taneli Hukkinen <hukkin@users.noreply.github.com> +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: MacOS +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: POSIX :: Linux +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Typing :: Typed +Project-URL: Homepage, https://github.com/executablebooks/mdurl + +# mdurl + +[![Build Status](https://github.com/executablebooks/mdurl/workflows/Tests/badge.svg?branch=master)](https://github.com/executablebooks/mdurl/actions?query=workflow%3ATests+branch%3Amaster+event%3Apush) +[![codecov.io](https://codecov.io/gh/executablebooks/mdurl/branch/master/graph/badge.svg)](https://codecov.io/gh/executablebooks/mdurl) +[![PyPI version](https://img.shields.io/pypi/v/mdurl)](https://pypi.org/project/mdurl) + +This is a Python port of the JavaScript [mdurl](https://www.npmjs.com/package/mdurl) package. +See the [upstream README.md file](https://github.com/markdown-it/mdurl/blob/master/README.md) for API documentation. + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/RECORD new file mode 100644 index 000000000..0e7b30f47 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/RECORD @@ -0,0 +1,18 @@ +mdurl-0.1.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +mdurl-0.1.2.dist-info/LICENSE,sha256=fGBd9uKGZ6lgMRjpgnT2SknOPu0NJvzM6VNKNF4O-VU,2338 +mdurl-0.1.2.dist-info/METADATA,sha256=tTsp1I9Jk2cFP9o8gefOJ9JVg4Drv4PmYCOwLrfd0l0,1638 +mdurl-0.1.2.dist-info/RECORD,, +mdurl-0.1.2.dist-info/WHEEL,sha256=4TfKIB_xu-04bc2iKz6_zFt-gEFEEDU_31HGhqzOCE8,81 +mdurl/__init__.py,sha256=1vpE89NyXniIRZNC_4f6BPm3Ub4bPntjfyyhLRR7opU,547 +mdurl/__pycache__/__init__.cpython-312.pyc,, +mdurl/__pycache__/_decode.cpython-312.pyc,, +mdurl/__pycache__/_encode.cpython-312.pyc,, +mdurl/__pycache__/_format.cpython-312.pyc,, +mdurl/__pycache__/_parse.cpython-312.pyc,, +mdurl/__pycache__/_url.cpython-312.pyc,, +mdurl/_decode.py,sha256=3Q_gDQqU__TvDbu7x-b9LjbVl4QWy5g_qFwljcuvN_Y,3004 +mdurl/_encode.py,sha256=goJLUFt1h4rVZNqqm9t15Nw2W-bFXYQEy3aR01ImWvs,2602 +mdurl/_format.py,sha256=xZct0mdePXA0H3kAqxjGtlB5O86G35DAYMGkA44CmB4,626 +mdurl/_parse.py,sha256=ezZSkM2_4NQ2Zx047sEdcJG7NYQRFHiZK7Y8INHFzwY,11374 +mdurl/_url.py,sha256=5kQnRQN2A_G4svLnRzZcG0bfoD9AbBrYDXousDHZ3z0,284 +mdurl/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/WHEEL new file mode 100644 index 000000000..668ba4d01 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.7.1 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__init__.py new file mode 100644 index 000000000..cdbb640e0 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__init__.py @@ -0,0 +1,18 @@ +__all__ = ( + "decode", + "DECODE_DEFAULT_CHARS", + "DECODE_COMPONENT_CHARS", + "encode", + "ENCODE_DEFAULT_CHARS", + "ENCODE_COMPONENT_CHARS", + "format", + "parse", + "URL", +) +__version__ = "0.1.2" # DO NOT EDIT THIS LINE MANUALLY. LET bump2version UTILITY DO IT + +from mdurl._decode import DECODE_COMPONENT_CHARS, DECODE_DEFAULT_CHARS, decode +from mdurl._encode import ENCODE_COMPONENT_CHARS, ENCODE_DEFAULT_CHARS, encode +from mdurl._format import format +from mdurl._parse import url_parse as parse +from mdurl._url import URL diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..4837681cc Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_decode.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_decode.cpython-312.pyc new file mode 100644 index 000000000..3969ad4d8 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_decode.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_encode.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_encode.cpython-312.pyc new file mode 100644 index 000000000..179d80be8 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_encode.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_format.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_format.cpython-312.pyc new file mode 100644 index 000000000..fd25b807a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_format.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_parse.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_parse.cpython-312.pyc new file mode 100644 index 000000000..60fc770b8 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_parse.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_url.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_url.cpython-312.pyc new file mode 100644 index 000000000..a1cd9d56d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/__pycache__/_url.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_decode.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_decode.py new file mode 100644 index 000000000..9b50a2dde --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_decode.py @@ -0,0 +1,104 @@ +from __future__ import annotations + +from collections.abc import Sequence +import functools +import re + +DECODE_DEFAULT_CHARS = ";/?:@&=+$,#" +DECODE_COMPONENT_CHARS = "" + +decode_cache: dict[str, list[str]] = {} + + +def get_decode_cache(exclude: str) -> Sequence[str]: + if exclude in decode_cache: + return decode_cache[exclude] + + cache: list[str] = [] + decode_cache[exclude] = cache + + for i in range(128): + ch = chr(i) + cache.append(ch) + + for i in range(len(exclude)): + ch_code = ord(exclude[i]) + cache[ch_code] = "%" + ("0" + hex(ch_code)[2:].upper())[-2:] + + return cache + + +# Decode percent-encoded string. +# +def decode(string: str, exclude: str = DECODE_DEFAULT_CHARS) -> str: + cache = get_decode_cache(exclude) + repl_func = functools.partial(repl_func_with_cache, cache=cache) + return re.sub(r"(%[a-f0-9]{2})+", repl_func, string, flags=re.IGNORECASE) + + +def repl_func_with_cache(match: re.Match, cache: Sequence[str]) -> str: + seq = match.group() + result = "" + + i = 0 + l = len(seq) # noqa: E741 + while i < l: + b1 = int(seq[i + 1 : i + 3], 16) + + if b1 < 0x80: + result += cache[b1] + i += 3 # emulate JS for loop statement3 + continue + + if (b1 & 0xE0) == 0xC0 and (i + 3 < l): + # 110xxxxx 10xxxxxx + b2 = int(seq[i + 4 : i + 6], 16) + + if (b2 & 0xC0) == 0x80: + all_bytes = bytes((b1, b2)) + try: + result += all_bytes.decode() + except UnicodeDecodeError: + result += "\ufffd" * 2 + + i += 3 + i += 3 # emulate JS for loop statement3 + continue + + if (b1 & 0xF0) == 0xE0 and (i + 6 < l): + # 1110xxxx 10xxxxxx 10xxxxxx + b2 = int(seq[i + 4 : i + 6], 16) + b3 = int(seq[i + 7 : i + 9], 16) + + if (b2 & 0xC0) == 0x80 and (b3 & 0xC0) == 0x80: + all_bytes = bytes((b1, b2, b3)) + try: + result += all_bytes.decode() + except UnicodeDecodeError: + result += "\ufffd" * 3 + + i += 6 + i += 3 # emulate JS for loop statement3 + continue + + if (b1 & 0xF8) == 0xF0 and (i + 9 < l): + # 111110xx 10xxxxxx 10xxxxxx 10xxxxxx + b2 = int(seq[i + 4 : i + 6], 16) + b3 = int(seq[i + 7 : i + 9], 16) + b4 = int(seq[i + 10 : i + 12], 16) + + if (b2 & 0xC0) == 0x80 and (b3 & 0xC0) == 0x80 and (b4 & 0xC0) == 0x80: + all_bytes = bytes((b1, b2, b3, b4)) + try: + result += all_bytes.decode() + except UnicodeDecodeError: + result += "\ufffd" * 4 + + i += 9 + i += 3 # emulate JS for loop statement3 + continue + + result += "\ufffd" + i += 3 # emulate JS for loop statement3 + + return result diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_encode.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_encode.py new file mode 100644 index 000000000..bc2e5b917 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_encode.py @@ -0,0 +1,85 @@ +from __future__ import annotations + +from collections.abc import Sequence +from string import ascii_letters, digits, hexdigits +from urllib.parse import quote as encode_uri_component + +ASCII_LETTERS_AND_DIGITS = ascii_letters + digits + +ENCODE_DEFAULT_CHARS = ";/?:@&=+$,-_.!~*'()#" +ENCODE_COMPONENT_CHARS = "-_.!~*'()" + +encode_cache: dict[str, list[str]] = {} + + +# Create a lookup array where anything but characters in `chars` string +# and alphanumeric chars is percent-encoded. +def get_encode_cache(exclude: str) -> Sequence[str]: + if exclude in encode_cache: + return encode_cache[exclude] + + cache: list[str] = [] + encode_cache[exclude] = cache + + for i in range(128): + ch = chr(i) + + if ch in ASCII_LETTERS_AND_DIGITS: + # always allow unencoded alphanumeric characters + cache.append(ch) + else: + cache.append("%" + ("0" + hex(i)[2:].upper())[-2:]) + + for i in range(len(exclude)): + cache[ord(exclude[i])] = exclude[i] + + return cache + + +# Encode unsafe characters with percent-encoding, skipping already +# encoded sequences. +# +# - string - string to encode +# - exclude - list of characters to ignore (in addition to a-zA-Z0-9) +# - keepEscaped - don't encode '%' in a correct escape sequence (default: true) +def encode( + string: str, exclude: str = ENCODE_DEFAULT_CHARS, *, keep_escaped: bool = True +) -> str: + result = "" + + cache = get_encode_cache(exclude) + + l = len(string) # noqa: E741 + i = 0 + while i < l: + code = ord(string[i]) + + # % + if keep_escaped and code == 0x25 and i + 2 < l: + if all(c in hexdigits for c in string[i + 1 : i + 3]): + result += string[i : i + 3] + i += 2 + i += 1 # JS for loop statement3 + continue + + if code < 128: + result += cache[code] + i += 1 # JS for loop statement3 + continue + + if code >= 0xD800 and code <= 0xDFFF: + if code >= 0xD800 and code <= 0xDBFF and i + 1 < l: + next_code = ord(string[i + 1]) + if next_code >= 0xDC00 and next_code <= 0xDFFF: + result += encode_uri_component(string[i] + string[i + 1]) + i += 1 + i += 1 # JS for loop statement3 + continue + result += "%EF%BF%BD" + i += 1 # JS for loop statement3 + continue + + result += encode_uri_component(string[i]) + i += 1 # JS for loop statement3 + + return result diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_format.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_format.py new file mode 100644 index 000000000..12524ca62 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_format.py @@ -0,0 +1,27 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from mdurl._url import URL + + +def format(url: URL) -> str: # noqa: A001 + result = "" + + result += url.protocol or "" + result += "//" if url.slashes else "" + result += url.auth + "@" if url.auth else "" + + if url.hostname and ":" in url.hostname: + # ipv6 address + result += "[" + url.hostname + "]" + else: + result += url.hostname or "" + + result += ":" + url.port if url.port else "" + result += url.pathname or "" + result += url.search or "" + result += url.hash or "" + + return result diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_parse.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_parse.py new file mode 100644 index 000000000..ffeeac768 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_parse.py @@ -0,0 +1,304 @@ +# Copyright Joyent, Inc. and other Node contributors. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the +# following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +# NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +# USE OR OTHER DEALINGS IN THE SOFTWARE. + + +# Changes from joyent/node: +# +# 1. No leading slash in paths, +# e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/` +# +# 2. Backslashes are not replaced with slashes, +# so `http:\\example.org\` is treated like a relative path +# +# 3. Trailing colon is treated like a part of the path, +# i.e. in `http://example.org:foo` pathname is `:foo` +# +# 4. Nothing is URL-encoded in the resulting object, +# (in joyent/node some chars in auth and paths are encoded) +# +# 5. `url.parse()` does not have `parseQueryString` argument +# +# 6. Removed extraneous result properties: `host`, `path`, `query`, etc., +# which can be constructed using other parts of the url. + +from __future__ import annotations + +from collections import defaultdict +import re + +from mdurl._url import URL + +# Reference: RFC 3986, RFC 1808, RFC 2396 + +# define these here so at least they only have to be +# compiled once on the first module load. +PROTOCOL_PATTERN = re.compile(r"^([a-z0-9.+-]+:)", flags=re.IGNORECASE) +PORT_PATTERN = re.compile(r":[0-9]*$") + +# Special case for a simple path URL +SIMPLE_PATH_PATTERN = re.compile(r"^(//?(?!/)[^?\s]*)(\?[^\s]*)?$") + +# RFC 2396: characters reserved for delimiting URLs. +# We actually just auto-escape these. +DELIMS = ("<", ">", '"', "`", " ", "\r", "\n", "\t") + +# RFC 2396: characters not allowed for various reasons. +UNWISE = ("{", "}", "|", "\\", "^", "`") + DELIMS + +# Allowed by RFCs, but cause of XSS attacks. Always escape these. +AUTO_ESCAPE = ("'",) + UNWISE +# Characters that are never ever allowed in a hostname. +# Note that any invalid chars are also handled, but these +# are the ones that are *expected* to be seen, so we fast-path +# them. +NON_HOST_CHARS = ("%", "/", "?", ";", "#") + AUTO_ESCAPE +HOST_ENDING_CHARS = ("/", "?", "#") +HOSTNAME_MAX_LEN = 255 +HOSTNAME_PART_PATTERN = re.compile(r"^[+a-z0-9A-Z_-]{0,63}$") +HOSTNAME_PART_START = re.compile(r"^([+a-z0-9A-Z_-]{0,63})(.*)$") +# protocols that can allow "unsafe" and "unwise" chars. + +# protocols that never have a hostname. +HOSTLESS_PROTOCOL = defaultdict( + bool, + { + "javascript": True, + "javascript:": True, + }, +) +# protocols that always contain a // bit. +SLASHED_PROTOCOL = defaultdict( + bool, + { + "http": True, + "https": True, + "ftp": True, + "gopher": True, + "file": True, + "http:": True, + "https:": True, + "ftp:": True, + "gopher:": True, + "file:": True, + }, +) + + +class MutableURL: + def __init__(self) -> None: + self.protocol: str | None = None + self.slashes: bool = False + self.auth: str | None = None + self.port: str | None = None + self.hostname: str | None = None + self.hash: str | None = None + self.search: str | None = None + self.pathname: str | None = None + + def parse(self, url: str, slashes_denote_host: bool) -> "MutableURL": + lower_proto = "" + slashes = False + rest = url + + # trim before proceeding. + # This is to support parse stuff like " http://foo.com \n" + rest = rest.strip() + + if not slashes_denote_host and len(url.split("#")) == 1: + # Try fast path regexp + simple_path = SIMPLE_PATH_PATTERN.match(rest) + if simple_path: + self.pathname = simple_path.group(1) + if simple_path.group(2): + self.search = simple_path.group(2) + return self + + proto = "" + proto_match = PROTOCOL_PATTERN.match(rest) + if proto_match: + proto = proto_match.group() + lower_proto = proto.lower() + self.protocol = proto + rest = rest[len(proto) :] + + # figure out if it's got a host + # user@server is *always* interpreted as a hostname, and url + # resolution will treat //foo/bar as host=foo,path=bar because that's + # how the browser resolves relative URLs. + if slashes_denote_host or proto or re.search(r"^//[^@/]+@[^@/]+", rest): + slashes = rest.startswith("//") + if slashes and not (proto and HOSTLESS_PROTOCOL[proto]): + rest = rest[2:] + self.slashes = True + + if not HOSTLESS_PROTOCOL[proto] and ( + slashes or (proto and not SLASHED_PROTOCOL[proto]) + ): + + # there's a hostname. + # the first instance of /, ?, ;, or # ends the host. + # + # If there is an @ in the hostname, then non-host chars *are* allowed + # to the left of the last @ sign, unless some host-ending character + # comes *before* the @-sign. + # URLs are obnoxious. + # + # ex: + # http://a@b@c/ => user:a@b host:c + # http://a@b?@c => user:a host:c path:/?@c + + # v0.12 TODO(isaacs): This is not quite how Chrome does things. + # Review our test case against browsers more comprehensively. + + # find the first instance of any hostEndingChars + host_end = -1 + for i in range(len(HOST_ENDING_CHARS)): + hec = rest.find(HOST_ENDING_CHARS[i]) + if hec != -1 and (host_end == -1 or hec < host_end): + host_end = hec + + # at this point, either we have an explicit point where the + # auth portion cannot go past, or the last @ char is the decider. + if host_end == -1: + # atSign can be anywhere. + at_sign = rest.rfind("@") + else: + # atSign must be in auth portion. + # http://a@b/c@d => host:b auth:a path:/c@d + at_sign = rest.rfind("@", 0, host_end + 1) + + # Now we have a portion which is definitely the auth. + # Pull that off. + if at_sign != -1: + auth = rest[:at_sign] + rest = rest[at_sign + 1 :] + self.auth = auth + + # the host is the remaining to the left of the first non-host char + host_end = -1 + for i in range(len(NON_HOST_CHARS)): + hec = rest.find(NON_HOST_CHARS[i]) + if hec != -1 and (host_end == -1 or hec < host_end): + host_end = hec + # if we still have not hit it, then the entire thing is a host. + if host_end == -1: + host_end = len(rest) + + if host_end > 0 and rest[host_end - 1] == ":": + host_end -= 1 + host = rest[:host_end] + rest = rest[host_end:] + + # pull out port. + self.parse_host(host) + + # we've indicated that there is a hostname, + # so even if it's empty, it has to be present. + self.hostname = self.hostname or "" + + # if hostname begins with [ and ends with ] + # assume that it's an IPv6 address. + ipv6_hostname = self.hostname.startswith("[") and self.hostname.endswith( + "]" + ) + + # validate a little. + if not ipv6_hostname: + hostparts = self.hostname.split(".") + l = len(hostparts) # noqa: E741 + i = 0 + while i < l: + part = hostparts[i] + if not part: + i += 1 # emulate statement3 in JS for loop + continue + if not HOSTNAME_PART_PATTERN.search(part): + newpart = "" + k = len(part) + j = 0 + while j < k: + if ord(part[j]) > 127: + # we replace non-ASCII char with a temporary placeholder + # we need this to make sure size of hostname is not + # broken by replacing non-ASCII by nothing + newpart += "x" + else: + newpart += part[j] + j += 1 # emulate statement3 in JS for loop + + # we test again with ASCII char only + if not HOSTNAME_PART_PATTERN.search(newpart): + valid_parts = hostparts[:i] + not_host = hostparts[i + 1 :] + bit = HOSTNAME_PART_START.search(part) + if bit: + valid_parts.append(bit.group(1)) + not_host.insert(0, bit.group(2)) + if not_host: + rest = ".".join(not_host) + rest + self.hostname = ".".join(valid_parts) + break + i += 1 # emulate statement3 in JS for loop + + if len(self.hostname) > HOSTNAME_MAX_LEN: + self.hostname = "" + + # strip [ and ] from the hostname + # the host field still retains them, though + if ipv6_hostname: + self.hostname = self.hostname[1:-1] + + # chop off from the tail first. + hash = rest.find("#") # noqa: A001 + if hash != -1: + # got a fragment string. + self.hash = rest[hash:] + rest = rest[:hash] + qm = rest.find("?") + if qm != -1: + self.search = rest[qm:] + rest = rest[:qm] + if rest: + self.pathname = rest + if SLASHED_PROTOCOL[lower_proto] and self.hostname and not self.pathname: + self.pathname = "" + + return self + + def parse_host(self, host: str) -> None: + port_match = PORT_PATTERN.search(host) + if port_match: + port = port_match.group() + if port != ":": + self.port = port[1:] + host = host[: -len(port)] + if host: + self.hostname = host + + +def url_parse(url: URL | str, *, slashes_denote_host: bool = False) -> URL: + if isinstance(url, URL): + return url + u = MutableURL() + u.parse(url, slashes_denote_host) + return URL( + u.protocol, u.slashes, u.auth, u.port, u.hostname, u.hash, u.search, u.pathname + ) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_url.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_url.py new file mode 100644 index 000000000..f866e7a17 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/_url.py @@ -0,0 +1,14 @@ +from __future__ import annotations + +from typing import NamedTuple + + +class URL(NamedTuple): + protocol: str | None + slashes: bool + auth: str | None + port: str | None + hostname: str | None + hash: str | None # noqa: A003 + search: str | None + pathname: str | None diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/py.typed b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/py.typed new file mode 100644 index 000000000..7632ecf77 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/mdurl/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/LICENSE new file mode 100644 index 000000000..582ddf59e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 ExecutableBookProject + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/METADATA new file mode 100644 index 000000000..fff86f35e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/METADATA @@ -0,0 +1,126 @@ +Metadata-Version: 2.3 +Name: myst-parser +Version: 4.0.1 +Summary: An extended [CommonMark](https://spec.commonmark.org/) compliant parser, +Keywords: markdown,lexer,parser,development,docutils,sphinx +Author-email: Chris Sewell <chrisj_sewell@hotmail.com> +Requires-Python: >=3.10 +Description-Content-Type: text/markdown +Classifier: Development Status :: 4 - Beta +Classifier: Framework :: Sphinx :: Extension +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup +Requires-Dist: docutils>=0.19,<0.22 +Requires-Dist: jinja2 +Requires-Dist: markdown-it-py~=3.0 +Requires-Dist: mdit-py-plugins~=0.4,>=0.4.1 +Requires-Dist: pyyaml +Requires-Dist: sphinx>=7,<9 +Requires-Dist: pre-commit~=4.0 ; extra == "code-style" +Requires-Dist: linkify-it-py~=2.0 ; extra == "linkify" +Requires-Dist: sphinx>=7 ; extra == "rtd" +Requires-Dist: ipython ; extra == "rtd" +Requires-Dist: sphinx-book-theme~=1.1 ; extra == "rtd" +Requires-Dist: sphinx-design ; extra == "rtd" +Requires-Dist: sphinx-copybutton ; extra == "rtd" +Requires-Dist: sphinxext-rediraffe~=0.2.7 ; extra == "rtd" +Requires-Dist: sphinxext-opengraph~=0.9.0 ; extra == "rtd" +Requires-Dist: sphinx-pyscript ; extra == "rtd" +Requires-Dist: sphinx-tippy>=0.4.3 ; extra == "rtd" +Requires-Dist: sphinx-autodoc2~=0.5.0 ; extra == "rtd" +Requires-Dist: sphinx-togglebutton ; extra == "rtd" +Requires-Dist: beautifulsoup4 ; extra == "testing" +Requires-Dist: coverage[toml] ; extra == "testing" +Requires-Dist: defusedxml ; extra == "testing" +Requires-Dist: pytest>=8,<9 ; extra == "testing" +Requires-Dist: pytest-cov ; extra == "testing" +Requires-Dist: pytest-regressions ; extra == "testing" +Requires-Dist: pytest-param-files~=0.6.0 ; extra == "testing" +Requires-Dist: sphinx-pytest ; extra == "testing" +Requires-Dist: pygments<2.19 ; extra == "testing" +Requires-Dist: pygments ; extra == "testing-docutils" +Requires-Dist: pytest>=8,<9 ; extra == "testing-docutils" +Requires-Dist: pytest-param-files~=0.6.0 ; extra == "testing-docutils" +Project-URL: Documentation, https://myst-parser.readthedocs.io +Project-URL: Homepage, https://github.com/executablebooks/MyST-Parser +Provides-Extra: code-style +Provides-Extra: linkify +Provides-Extra: rtd +Provides-Extra: testing +Provides-Extra: testing-docutils + +# MyST-Parser + +[![Github-CI][github-ci]][github-link] +[![Coverage Status][codecov-badge]][codecov-link] +[![Documentation Status][rtd-badge]][rtd-link] +[![Code style: black][black-badge]][black-link] +[![PyPI][pypi-badge]][pypi-link] +[![Conda][conda-badge]][conda-link] +[![PyPI - Downloads][install-badge]][install-link] + + +**MyST is a rich and extensible flavor of Markdown meant for technical documentation and publishing**. + +MyST is a flavor of markdown that is designed for simplicity, flexibility, and extensibility. +This repository serves as the reference implementation of MyST Markdown, as well as a collection of tools to support working with MyST in Python and Sphinx. +It contains an extended [CommonMark](https://commonmark.org)-compliant parser using [`markdown-it-py`](https://markdown-it-py.readthedocs.io/), as well as a [Sphinx](https://www.sphinx-doc.org) extension that allows you to write MyST Markdown in Sphinx. + +[**See the MyST Parser documentation for more information**](https://myst-parser.readthedocs.io/en/latest/). + +## Installation + +To install the MyST parser, run the following in a +[Conda environment](https://docs.conda.io) (recommended): + +```bash +conda install -c conda-forge myst-parser +``` + +or + +```bash +pip install myst-parser +``` + +Or for package development: + +```bash +git clone https://github.com/executablebooks/MyST-Parser +cd MyST-Parser +git checkout master +pip install -e .[code_style,linkify,testing,rtd] +``` + +To use the MyST parser in Sphinx, simply add: `extensions = ["myst_parser"]` to your `conf.py`. + +## Contributing + +We welcome all contributions! +See the [Contributing Guide](https://myst-parser.readthedocs.io/en/latest/develop/index.html) for more details. + +[github-ci]: https://github.com/executablebooks/MyST-Parser/workflows/continuous-integration/badge.svg?branch=master +[github-link]: https://github.com/executablebooks/MyST-Parser +[codecov-badge]: https://codecov.io/gh/executablebooks/MyST-Parser/branch/master/graph/badge.svg +[codecov-link]: https://codecov.io/gh/executablebooks/MyST-Parser +[rtd-badge]: https://readthedocs.org/projects/myst-parser/badge/?version=latest +[rtd-link]: https://myst-parser.readthedocs.io/en/latest/?badge=latest +[black-badge]: https://img.shields.io/badge/code%20style-black-000000.svg +[pypi-badge]: https://img.shields.io/pypi/v/myst-parser.svg +[pypi-link]: https://pypi.org/project/myst-parser +[conda-badge]: https://anaconda.org/conda-forge/myst-parser/badges/version.svg +[conda-link]: https://anaconda.org/conda-forge/myst-parser +[black-link]: https://github.com/ambv/black +[install-badge]: https://img.shields.io/pypi/dw/myst-parser?label=pypi%20installs +[install-link]: https://pypistats.org/packages/myst-parser + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/RECORD new file mode 100644 index 000000000..f19dd7307 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/RECORD @@ -0,0 +1,73 @@ +../../../bin/myst-anchors,sha256=ZUT62thFPIYCzeGTdZHcnjWxqSJTSQHxfgHsMTs6KyQ,292 +../../../bin/myst-docutils-demo,sha256=4cl08TJ17JjP9GTdYrYhr2saBv-4fh_QyrMJs2YBSAI,308 +../../../bin/myst-docutils-html,sha256=hA3kMstAx7U1Ayo4rcV0pFreGYkIHEkTy3-xvPzvKos,296 +../../../bin/myst-docutils-html5,sha256=3D947-XK194jD6IAJ4HXJAksRCzu2jKqaR0kEZ9dGJs,298 +../../../bin/myst-docutils-latex,sha256=-4uzAFd6qMNbNF12iN931exTZ1HKgratLoqoYJkUS3I,298 +../../../bin/myst-docutils-pseudoxml,sha256=RxN1bbWAsjzAkYuUB_MY6dxCya4QsTsdbvfrZtavABY,306 +../../../bin/myst-docutils-xml,sha256=ELCppsdar0xOEkb-uCmZEE8Zq-SqV7IoUAMdMzG3BuM,294 +../../../bin/myst-inv,sha256=2pG0yr-pW0rASpjF0WjvjYmi8OuzGTJZAglzRG9YsQk,298 +myst_parser-4.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +myst_parser-4.0.1.dist-info/LICENSE,sha256=SiJg1uLND1oVGh6G2_59PtVSseK-q_mUHBulxJy85IQ,1078 +myst_parser-4.0.1.dist-info/METADATA,sha256=MYMt8ML9bIdeQM-a6kR_pa0nN_9-EaBHwFzYmkXDryo,5534 +myst_parser-4.0.1.dist-info/RECORD,, +myst_parser-4.0.1.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82 +myst_parser-4.0.1.dist-info/entry_points.txt,sha256=xLFe45Nf8KGT2aRl0l8v67KDtvd5JArHm-byPCO8pO4,473 +myst_parser/__init__.py,sha256=fEMppON35y4b2r6A1eH-2et_kmJGzuf1kBJwZfjezAo,479 +myst_parser/__pycache__/__init__.cpython-312.pyc,, +myst_parser/__pycache__/_compat.cpython-312.pyc,, +myst_parser/__pycache__/_docs.cpython-312.pyc,, +myst_parser/__pycache__/cli.cpython-312.pyc,, +myst_parser/__pycache__/docutils_.cpython-312.pyc,, +myst_parser/__pycache__/inventory.cpython-312.pyc,, +myst_parser/__pycache__/mocking.cpython-312.pyc,, +myst_parser/__pycache__/sphinx_.cpython-312.pyc,, +myst_parser/__pycache__/warnings_.cpython-312.pyc,, +myst_parser/_compat.py,sha256=NnGMUhCaiJPWVAh6hUJcH34A9PdhmfAvtWQ_7P-ogAI,398 +myst_parser/_docs.py,sha256=Ym44v_gevbyFgjuPXxhUaQEDdn0WuLGgEayiS8W4_T4,13875 +myst_parser/cli.py,sha256=DAismkoGcupW8aO12nGOhcdFno4_KnRF0I2YNzTudD4,1373 +myst_parser/config/__init__.py,sha256=8uEf4cFud1TzvDgQqT1wwvoGRyVL7Uz_hjpDbEDElQ8,84 +myst_parser/config/__pycache__/__init__.cpython-312.pyc,, +myst_parser/config/__pycache__/dc_validators.cpython-312.pyc,, +myst_parser/config/__pycache__/main.cpython-312.pyc,, +myst_parser/config/dc_validators.py,sha256=9ZxOlPr0HP4pVBmOSGvNkTR_ouKg1csLvm8NuniJzyQ,5209 +myst_parser/config/main.py,sha256=91cikNhKq_Z5wiVeCH8CmpIHTOuV-GkAm5UHW2B_ENc,19403 +myst_parser/docutils_.py,sha256=DxqVGyXNlCAJMXVsTPQnzlFym9PMop8Xz54tdAzMg_Y,246 +myst_parser/inventory.py,sha256=KGa-Kx92KZrZX5_pEDdc5YJjFxzrH2ywRb82h_9NG68,16040 +myst_parser/mdit_to_docutils/__init__.py,sha256=BdGAFL9CFxQyRep-XDZuPpm1MOQsFdjNaLKd7A0q4v4,302 +myst_parser/mdit_to_docutils/__pycache__/__init__.cpython-312.pyc,, +myst_parser/mdit_to_docutils/__pycache__/base.cpython-312.pyc,, +myst_parser/mdit_to_docutils/__pycache__/html_to_nodes.cpython-312.pyc,, +myst_parser/mdit_to_docutils/__pycache__/sphinx_.cpython-312.pyc,, +myst_parser/mdit_to_docutils/__pycache__/transforms.cpython-312.pyc,, +myst_parser/mdit_to_docutils/base.py,sha256=OpOn6qIVQIrLxdW08y4UwUOZDMqkaLaY7VruHVyRC2E,80139 +myst_parser/mdit_to_docutils/html_to_nodes.py,sha256=qmiqdP0q7gQ6lE0LUO6eeGeP2zJoSBASKt0KrHpGFDw,4451 +myst_parser/mdit_to_docutils/sphinx_.py,sha256=Xecbz0ozpZNkLFVsjheiXOkzRtSZMCwJ7w5lQMbbeJk,9466 +myst_parser/mdit_to_docutils/transforms.py,sha256=yshHicYmSuj7_GU7u4QoLkHXBbikfQIjkMvJ_cxFuck,10069 +myst_parser/mocking.py,sha256=k4NIyz6afS6XZ0sHQlYDYX7DwiqwuuFqfKlNLwl3Z5w,22404 +myst_parser/parsers/__init__.py,sha256=RQAIx0m2YaxfFm9-4BjKfL5idIyae3UtgZBue5Pbluw,60 +myst_parser/parsers/__pycache__/__init__.cpython-312.pyc,, +myst_parser/parsers/__pycache__/directives.cpython-312.pyc,, +myst_parser/parsers/__pycache__/docutils_.cpython-312.pyc,, +myst_parser/parsers/__pycache__/mdit.cpython-312.pyc,, +myst_parser/parsers/__pycache__/options.cpython-312.pyc,, +myst_parser/parsers/__pycache__/parse_html.cpython-312.pyc,, +myst_parser/parsers/__pycache__/sphinx_.cpython-312.pyc,, +myst_parser/parsers/directives.py,sha256=6_Zglz6zsx1WOZtN2hHIZy9GNNy1oWImTUPmHOHGSQA,10906 +myst_parser/parsers/docutils_.py,sha256=7eugsgyF1-Q7HpfyNFgP1bad6f7-IUsmEICG2F2nd0s,16410 +myst_parser/parsers/mdit.py,sha256=W6AR2x_mmBtmm9bPdOy_GTlwQZlSowrm_Qr92RhtTqo,4655 +myst_parser/parsers/options.py,sha256=jdZ1-156Ba_h0C9RjweEtwS_wHNIHmjlcv76rC8u9uc,21053 +myst_parser/parsers/parse_html.py,sha256=SCqE2PCHO1NNJBCCfiMeLfRp0wCgBKsR6UQRjwzsVCs,13730 +myst_parser/parsers/sphinx_.py,sha256=3XST9QCQYH41cMv52w8JG6rq2UjmhLHaxf5yju52p54,2586 +myst_parser/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26 +myst_parser/sphinx_.py,sha256=Dnf178ZYQNu4NBZ_aTCV0AqkIurD9RrB0MWE-S5yrE4,257 +myst_parser/sphinx_ext/__init__.py,sha256=3eCSHXLH4jaALjRjWu-5zJqH2KE-q9gTM3Y61AH_rz8,40 +myst_parser/sphinx_ext/__pycache__/__init__.cpython-312.pyc,, +myst_parser/sphinx_ext/__pycache__/directives.cpython-312.pyc,, +myst_parser/sphinx_ext/__pycache__/main.cpython-312.pyc,, +myst_parser/sphinx_ext/__pycache__/mathjax.cpython-312.pyc,, +myst_parser/sphinx_ext/__pycache__/myst_refs.cpython-312.pyc,, +myst_parser/sphinx_ext/directives.py,sha256=ZfKfKAyOUN3e-HAE5ocT2C94Sw4yG6fYS1C_qpEgNx8,4310 +myst_parser/sphinx_ext/main.py,sha256=X8kF_zanDi1zn1-DOsmmTZGO50m4HX5_4G8O3PGb-6s,3985 +myst_parser/sphinx_ext/mathjax.py,sha256=9Wic_6aoc1vS68Nk1osjAOZoOG9HgRCZ2XWQPb8QOmc,4683 +myst_parser/sphinx_ext/myst_refs.py,sha256=ViEFYJjkS56zybmhpmv2dwyvL5ae6PBlqR8fyVtLbgM,15210 +myst_parser/warnings_.py,sha256=Dkon4i15SdWX8KxSdBrB2CB0tY6EG_SkReX6Fd0ezmM,5477 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/WHEEL new file mode 100644 index 000000000..e3c6feefa --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.10.1 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/entry_points.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/entry_points.txt new file mode 100644 index 000000000..9abbf2375 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser-4.0.1.dist-info/entry_points.txt @@ -0,0 +1,10 @@ +[console_scripts] +myst-anchors=myst_parser.cli:print_anchors +myst-docutils-demo=myst_parser.parsers.docutils_:cli_html5_demo +myst-docutils-html=myst_parser.parsers.docutils_:cli_html +myst-docutils-html5=myst_parser.parsers.docutils_:cli_html5 +myst-docutils-latex=myst_parser.parsers.docutils_:cli_latex +myst-docutils-pseudoxml=myst_parser.parsers.docutils_:cli_pseudoxml +myst-docutils-xml=myst_parser.parsers.docutils_:cli_xml +myst-inv=myst_parser.inventory:inventory_cli + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__init__.py new file mode 100644 index 000000000..fc1a023b5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__init__.py @@ -0,0 +1,14 @@ +"""An extended [CommonMark](https://spec.commonmark.org/) compliant parser, +with bridges to [docutils](https://docutils.sourceforge.io/) +and [Sphinx](https://github.com/sphinx-doc/sphinx). +""" + +__version__ = "4.0.1" + + +def setup(app): + """Initialize the [Sphinx](https://github.com/sphinx-doc/sphinx) extension.""" + from myst_parser.sphinx_ext.main import setup_sphinx + + setup_sphinx(app, load_parser=True) + return {"version": __version__, "parallel_read_safe": True} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..4cb20ce6a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/_compat.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/_compat.cpython-312.pyc new file mode 100644 index 000000000..b5f2a9023 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/_compat.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/_docs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/_docs.cpython-312.pyc new file mode 100644 index 000000000..89f5971f0 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/_docs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/cli.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/cli.cpython-312.pyc new file mode 100644 index 000000000..38aa9d281 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/cli.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/docutils_.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/docutils_.cpython-312.pyc new file mode 100644 index 000000000..015af5123 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/docutils_.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/inventory.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/inventory.cpython-312.pyc new file mode 100644 index 000000000..dceed14e6 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/inventory.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/mocking.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/mocking.cpython-312.pyc new file mode 100644 index 000000000..f571f378a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/mocking.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/sphinx_.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/sphinx_.cpython-312.pyc new file mode 100644 index 000000000..cfddeb55c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/sphinx_.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/warnings_.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/warnings_.cpython-312.pyc new file mode 100644 index 000000000..b8f64db6d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/__pycache__/warnings_.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/_compat.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/_compat.py new file mode 100644 index 000000000..d5f0d0ea3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/_compat.py @@ -0,0 +1,12 @@ +"""Helpers for cross compatibility across dependency versions.""" + +from collections.abc import Callable, Iterable + +from docutils.nodes import Element + + +def findall(node: Element) -> Callable[..., Iterable[Element]]: + """Iterate through""" + # findall replaces traverse in docutils v0.18 + # note a difference is that findall is an iterator + return getattr(node, "findall", node.traverse) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/_docs.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/_docs.py new file mode 100644 index 000000000..41212e989 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/_docs.py @@ -0,0 +1,452 @@ +"""Code to use internally, for documentation.""" + +from __future__ import annotations + +import contextlib +import io +from collections.abc import Sequence +from typing import Union, get_args, get_origin + +from docutils import nodes +from docutils.core import Publisher +from docutils.parsers.rst import directives +from sphinx.directives import other +from sphinx.transforms.post_transforms import SphinxPostTransform +from sphinx.util import logging +from sphinx.util.docutils import SphinxDirective + +from myst_parser.parsers.docutils_ import to_html5_demo + +from .config.main import MdParserConfig +from .parsers.docutils_ import Parser as DocutilsParser +from .warnings_ import MystWarnings + +LOGGER = logging.getLogger(__name__) + + +class StripUnsupportedLatex(SphinxPostTransform): + """Remove unsupported nodes from the doctree.""" + + default_priority = 900 + + def run(self, **kwargs): + if self.app.builder.format != "latex": + return + from docutils import nodes + + for node in self.document.findall(): + if node.tagname == "image" and node["uri"].endswith(".svg"): + node.parent.replace(node, nodes.inline("", "Removed SVG image")) + if node.tagname == "mermaid": + node.parent.replace(node, nodes.inline("", "Removed Mermaid diagram")) + + +class NumberSections(SphinxPostTransform): + """Number sections (html only)""" + + default_priority = 710 # same as docutils.SectNum + formats = ("html",) + + def run(self, **kwargs): + min_heading_level = 2 + max_heading_level = 3 + stack: list[tuple[list[int], nodes.Element]] = [([], self.document)] + while stack: + path, node = stack.pop() + if len(path) >= min_heading_level: + title = node[0] + text = ( + ".".join(str(i) for i in path[min_heading_level - 1 :]) + + "." + + (" " * 2) + ) + # docutils SectNum transform + title.insert(0, nodes.raw("", text, format="html")) + title["auto"] = 1 + if len(path) < max_heading_level: + i = 0 + for child in node.children: + if isinstance(child, nodes.section): + i += 1 + stack.append((path + [i], child)) + + +class _ConfigBase(SphinxDirective): + """Directive to automate rendering of the configuration.""" + + @staticmethod + def table_header(): + return [ + "```````{list-table}", + ":header-rows: 1", + ":widths: 15 10 20", + "", + "* - Name", + " - Type", + " - Description", + ] + + @staticmethod + def field_default(value): + default = " ".join(f"{value!r}".splitlines()) + return default + + @staticmethod + def field_type(field): + ftypes: Sequence[str] + ftypes = ( + get_args(field.type) if get_origin(field.type) is Union else [field.type] + ) + ctype = " | ".join(str("None" if ftype is None else ftype) for ftype in ftypes) + ctype = " ".join(ctype.splitlines()) + ctype = ctype.replace("typing.", "") + ctype = ctype.replace("typing_extensions.", "") + for tname in ("str", "int", "float", "bool"): + ctype = ctype.replace(f"<class '{tname}'>", tname) + return ctype + + +class MystConfigDirective(_ConfigBase): + option_spec = { + "sphinx": directives.flag, + "extensions": directives.flag, + "scope": lambda x: directives.choice(x, ["global", "local"]), + } + + def run(self): + """Run the directive.""" + config = MdParserConfig() + text = self.table_header() + count = 0 + for name, value, field in config.as_triple(): + if field.metadata.get("deprecated"): + continue + + # filter by sphinx options + if "sphinx" in self.options and "sphinx" in field.metadata.get("omit", []): + continue + + if "extensions" in self.options: + if not field.metadata.get("extension"): + continue + else: + if field.metadata.get("extension"): + continue + + if self.options.get("scope") == "local" and field.metadata.get( + "global_only" + ): + continue + + if self.options.get("scope") == "global": + name = f"myst_{name}" + + description = " ".join(field.metadata.get("help", "").splitlines()) + if field.metadata.get("extension"): + description = f"{field.metadata.get('extension')}: {description}" + default = self.field_default(value) + ctype = field.metadata.get("doc_type") or self.field_type(field) + text.extend( + [ + f"* - `{name}`", + f" - `{ctype}`", + f" - {description} (default: `{default}`)", + ] + ) + + count += 1 + + if not count: + return [] + + text.append("```````") + node = nodes.Element() + self.state.nested_parse(text, 0, node) + return node.children + + +class DocutilsCliHelpDirective(SphinxDirective): + """Directive to print the docutils CLI help.""" + + has_content = False + required_arguments = 0 + optional_arguments = 0 + final_argument_whitespace = False + + def run(self): + """Run the directive.""" + + stream = io.StringIO() + + pub = Publisher(parser=DocutilsParser()) + with contextlib.redirect_stdout(stream): + try: + pub.process_command_line( + ["--help"], + usage="myst-docutils-<writer> [options] [<source> [<destination>]]", + ) + except SystemExit as exc: + assert not exc.code + return [nodes.literal_block("", stream.getvalue())] + + +class DirectiveDoc(SphinxDirective): + """Load and document a directive.""" + + required_arguments = 1 # name of the directive + has_content = True + + def run(self): + """Run the directive.""" + name = self.arguments[0] + # load the directive class + klass, _ = directives.directive( + name, self.state.memo.language, self.state.document + ) + if klass is None: + LOGGER.warning(f"Directive {name} not found.", line=self.lineno) + return [] + content = " ".join(self.content) + text = f"""\ +:Name: `{name}` +:Description: {content} +:Arguments: {klass.required_arguments} required, {klass.optional_arguments} optional +:Content: {'yes' if klass.has_content else 'no'} +:Options: +""" + if klass.option_spec: + text += " name | type\n -----|------\n" + for key, func in klass.option_spec.items(): + text += f" {key} | {convert_opt(name, func)}\n" + node = nodes.Element() + self.state.nested_parse(text.splitlines(), 0, node) + return node.children + + +def convert_opt(name, func): + """Convert an option function to a string.""" + if func is directives.flag: + return "flag" + if func is directives.unchanged: + return "text" + if func is directives.unchanged_required: + return "text" + if func is directives.class_option: + return "space-delimited list" + if func is directives.uri: + return "URI" + if func is directives.path: + return "path" + if func is int: + return "integer" + if func is directives.positive_int: + return "integer (positive)" + if func is directives.nonnegative_int: + return "integer (non-negative)" + if func is directives.positive_int_list: + return "space/comma-delimited list of integers (positive)" + if func is directives.percentage: + return "percentage" + if func is directives.length_or_unitless: + return "length or unitless" + if func is directives.length_or_percentage_or_unitless: + return "length, percentage or unitless" + if func is other.int_or_nothing: + return "integer" + return "" + + +class MystWarningsDirective(SphinxDirective): + """Directive to print all known warnings.""" + + has_content = False + required_arguments = 0 + optional_arguments = 0 + final_argument_whitespace = False + + def run(self): + """Run the directive.""" + from sphinx.pycode import ModuleAnalyzer + + analyzer = ModuleAnalyzer.for_module(MystWarnings.__module__) + qname = MystWarnings.__qualname__ + analyzer.analyze() + warning_names = [ + (e.value, analyzer.attr_docs[(qname, e.name)]) for e in MystWarnings + ] + text = [f"- `myst.{name}`: {' '.join(doc)}" for name, doc in warning_names] + node = nodes.Element() + self.state.nested_parse(text, 0, node) + return node.children + + +class MystExampleDirective(SphinxDirective): + """Directive to create an example, showing the source and output.""" + + has_content = True + option_spec = { + "alt-output": directives.unchanged, + "highlight": directives.unchanged, + # "html": directives.flag, + } + + def run(self): + """Run the directive.""" + content_str = "\n".join(self.content) + output_str = self.options.get("alt-output", content_str) + highlight = self.options.get("highlight", "myst") + backticks = "```" + while backticks in content_str: + backticks += "`" + content = f""" +{backticks}``{{div}} myst-example + +{backticks}`{{div}} myst-example-source +{backticks}{highlight} +{content_str} +{backticks} +{backticks}` +{backticks}`{{div}} myst-example-render + +{output_str} +{backticks}` +{backticks}`` +""" + node_ = nodes.Element() + self.state.nested_parse(content.splitlines(), self.content_offset, node_) + return node_.children + + +class MystAdmonitionDirective(SphinxDirective): + """Directive to show a set of admonitions, in a tab set.""" + + required_arguments = 1 + final_argument_whitespace = True + + def run(self): + """Run the directive.""" + types = [t.strip() for t in self.arguments[0].split(",")] + content = "::::{tab-set}" + for type_ in types: + content += f""" +:::{{tab-item}} {type_} +```{{{type_}}} +This is a {type_} +``` +::: +""" + content += "::::" + node_ = nodes.Element() + self.state.nested_parse(content.splitlines(), self.content_offset, node_) + return node_.children + + +class MystToHTMLDirective(SphinxDirective): + """Directive to convert MyST to HTML.""" + + has_content = True + optional_arguments = 1 + final_argument_whitespace = True + option_spec = { + "extensions": directives.unchanged, + } + + def run(self): + """Run the directive.""" + content_str = "\n".join(self.content) + kwargs = {} + cli_opt = "" + if "extensions" in self.options: + ext = self.options["extensions"].split(",") + kwargs["myst_enable_extensions"] = ext + cli_opt += f"--myst-enable-extensions={self.options['extensions']}" + html = to_html5_demo(content_str, **kwargs) + content = f"""\ +::::myst-example +```bash +myst-docutils-demo example.md {cli_opt} +``` +```myst +{content_str} +``` +```html +{html} +``` +:::: +""" + node_ = nodes.Element() + self.state.nested_parse(content.splitlines(), self.content_offset, node_) + return node_.children + + +### MyST Lexer ### +# TODO when some more work and testing, this should be made available publicly + +from pygments import token # noqa: E402 +from pygments.lexer import bygroups, inherit, this, using # noqa: E402 +from pygments.lexers.markup import MarkdownLexer # noqa: E402 + + +class MystLexer(MarkdownLexer): + """A custom lexer for MyST Markdown.""" + + name = "MyST" + aliases = ["myst"] + filenames = ["*.myst"] + mimetypes = ["text/x-myst"] + + tokens = { + "root": [ + # (target)= + ( + r"^(\()([^\n]+)(\)=)(\n)", + bygroups( + token.Punctuation, token.Name.Label, token.Punctuation, token.Text + ), + ), + # ::: + (r"^([\:]{3,})(\n)", bygroups(token.Punctuation, token.Text)), + # :::name other + # TODO this seems to "eat" the next line + # (r"^([\:]{3,})([^\s\n]+)(\s+)([^\n]+)(\n)", + # bygroups(token.Punctuation, token.Name.Tag, token.Whitespace, token.Text,token.Text)), + # :::name + ( + r"^([\:]{3,})([^\n]+)(\n)", + bygroups(token.Punctuation, token.Name.Tag, token.Text), + ), + # :name: value + ( + r"^(\:)([^\n\:]+)(\:)([^\n]+)(\n)", + bygroups( + token.Punctuation, + token.Generic.Strong, + token.Punctuation, + using(this, state="inline"), + token.Text, + ), + ), + inherit, + ], + "inline": [ + # escape (we have to copy this from the parent class) + (r"\\.", token.Text), + # {name} + ( + r"(\{)([a-zA-Z0-9+:-]+)(\})", + bygroups(token.Punctuation, token.Operator.Word, token.Punctuation), + ), + # <http:example.com> + ( + r"(<)(http|https|mailto|project|path|inv)(\:)([^\s>]+)(>)", + bygroups( + token.Punctuation, + token.String.Other, + token.String.Other, + token.Name.Label, + token.Punctuation, + ), + ), + inherit, + ], + } diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/cli.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/cli.py new file mode 100644 index 000000000..a1f546d9a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/cli.py @@ -0,0 +1,45 @@ +import argparse +import sys + +from markdown_it.renderer import RendererHTML +from markdown_it.rules_core import StateCore +from mdit_py_plugins.anchors import anchors_plugin + +from myst_parser.config.main import MdParserConfig +from myst_parser.parsers.mdit import create_md_parser + + +def print_anchors(args=None): + """ """ + arg_parser = argparse.ArgumentParser() + arg_parser.add_argument( + "input", + nargs="?", + type=argparse.FileType("r", encoding="utf8"), + default=sys.stdin, + help="Input file (default stdin)", + ) + arg_parser.add_argument( + "-o", + "--output", + type=argparse.FileType("w", encoding="utf8"), + default=sys.stdout, + help="Output file (default stdout)", + ) + arg_parser.add_argument( + "-l", "--level", type=int, default=2, help="Maximum heading level." + ) + args = arg_parser.parse_args(args) + parser = create_md_parser(MdParserConfig(), RendererHTML) + parser.use(anchors_plugin, max_level=args.level) + + def _filter_plugin(state: StateCore) -> None: + state.tokens = [ + t + for t in state.tokens + if t.type.startswith("heading_") and int(t.tag[1]) <= args.level + ] + + parser.use(lambda p: p.core.ruler.push("filter", _filter_plugin)) + text = parser.render(args.input.read()) + args.output.write(text) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__init__.py new file mode 100644 index 000000000..898f9cef6 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__init__.py @@ -0,0 +1 @@ +"""This module holds the global configuration for the parser ``MdParserConfig``.""" diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..9300257b8 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__pycache__/dc_validators.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__pycache__/dc_validators.cpython-312.pyc new file mode 100644 index 000000000..852b2bd5d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__pycache__/dc_validators.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__pycache__/main.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__pycache__/main.cpython-312.pyc new file mode 100644 index 000000000..270e3f59b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/__pycache__/main.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/dc_validators.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/dc_validators.py new file mode 100644 index 000000000..b3d528367 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/dc_validators.py @@ -0,0 +1,166 @@ +"""Validators for dataclasses, mirroring those of https://github.com/python-attrs/attrs.""" + +from __future__ import annotations + +import dataclasses as dc +from collections.abc import Sequence +from typing import Any, Protocol + + +def validate_field(inst: Any, field: dc.Field, value: Any) -> None: + """Validate the field of a dataclass, + according to a `validator` function set in the field.metadata. + + The validator function should take as input (inst, field, value) and + raise an exception if the value is invalid. + """ + if "validator" not in field.metadata: + return + if isinstance(field.metadata["validator"], list): + for validator in field.metadata["validator"]: + validator(inst, field, value) + else: + field.metadata["validator"](inst, field, value) + + +def validate_fields(inst: Any) -> None: + """Validate the fields of a dataclass, + according to `validator` functions set in the field metadata. + + This function should be called in the `__post_init__` of the dataclass. + + The validator function should take as input (inst, field, value) and + raise an exception if the value is invalid. + """ + for field in dc.fields(inst): + validate_field(inst, field, getattr(inst, field.name)) + + +class ValidatorType(Protocol): + def __call__( + self, inst: Any, field: dc.Field, value: Any, suffix: str = "" + ) -> None: ... + + +def any_(inst, field, value, suffix=""): + """ + A validator that does not perform any validation. + """ + + +def instance_of(type_: type[Any] | tuple[type[Any], ...]) -> ValidatorType: + """ + A validator that raises a `TypeError` if the initializer is called + with a wrong type for this particular attribute (checks are performed using + `isinstance` therefore it's also valid to pass a tuple of types). + + :param type_: The type to check for. + """ + + def _validator(inst, field, value, suffix=""): + """ + We use a callable class to be able to change the ``__repr__``. + """ + if not isinstance(value, type_): + raise TypeError( + f"'{field.name}{suffix}' must be of type {type_!r} " + f"(got {value!r} that is a {value.__class__!r})." + ) + + return _validator + + +def optional(validator: ValidatorType) -> ValidatorType: + """ + A validator that makes an attribute optional. An optional attribute is one + which can be set to ``None`` in addition to satisfying the requirements of + the sub-validator. + """ + + def _validator(inst, field, value, suffix=""): + if value is None: + return + + validator(inst, field, value, suffix=suffix) + + return _validator + + +def is_callable(inst, field, value, suffix=""): + """ + A validator that raises a `TypeError` if the + initializer is called with a value for this particular attribute + that is not callable. + """ + if not callable(value): + raise TypeError( + f"'{field.name}{suffix}' must be callable " + f"(got {value!r} that is a {value.__class__!r})." + ) + + +def in_(options: Sequence) -> ValidatorType: + """ + A validator that raises a `ValueError` if the initializer is called + with a value that does not belong in the options provided. The check is + performed using ``value in options``. + + :param options: Allowed options. + """ + + def _validator(inst, field, value, suffix=""): + try: + in_options = value in options + except TypeError: # e.g. `1 in "abc"` + in_options = False + + if not in_options: + raise ValueError( + f"'{field.name}{suffix}' must be in {options!r} (got {value!r})" + ) + + return _validator + + +def deep_iterable( + member_validator: ValidatorType, iterable_validator: ValidatorType | None = None +) -> ValidatorType: + """ + A validator that performs deep validation of an iterable. + + :param member_validator: Validator to apply to iterable members + :param iterable_validator: Validator to apply to iterable itself + """ + + def _validator(inst, field, value, suffix=""): + if iterable_validator is not None: + iterable_validator(inst, field, value, suffix=suffix) + + for idx, member in enumerate(value): + member_validator(inst, field, member, suffix=f"{suffix}[{idx}]") + + return _validator + + +def deep_mapping( + key_validator: ValidatorType, + value_validator: ValidatorType, + mapping_validator: ValidatorType | None = None, +) -> ValidatorType: + """ + A validator that performs deep validation of a dictionary. + + :param key_validator: Validator to apply to dictionary keys + :param value_validator: Validator to apply to dictionary values + :param mapping_validator: Validator to apply to top-level mapping attribute (optional) + """ + + def _validator(inst, field: dc.Field, value, suffix=""): + if mapping_validator is not None: + mapping_validator(inst, field, value) + + for key in value: + key_validator(inst, field, key, suffix=f"{suffix}[{key!r}]") + value_validator(inst, field, value[key], suffix=f"{suffix}[{key!r}]") + + return _validator diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/main.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/main.py new file mode 100644 index 000000000..2b088b562 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/config/main.py @@ -0,0 +1,597 @@ +"""The configuration for the myst parser.""" + +import dataclasses as dc +from collections.abc import Callable, Iterable, Iterator, Sequence +from importlib import import_module +from typing import ( + Any, + TypedDict, +) + +from myst_parser.warnings_ import MystWarnings + +from .dc_validators import ( + any_, + deep_iterable, + deep_mapping, + in_, + instance_of, + optional, + validate_field, + validate_fields, +) + + +def check_extensions(inst: "MdParserConfig", field: dc.Field, value: Any) -> None: + """Check that the extensions are a list of known strings""" + if not isinstance(value, Iterable): + raise TypeError(f"'{field.name}' not iterable: {value}") + diff = set(value).difference( + [ + "amsmath", + "attrs_image", + "attrs_inline", + "attrs_block", + "colon_fence", + "deflist", + "dollarmath", + "fieldlist", + "html_admonition", + "html_image", + "linkify", + "replacements", + "smartquotes", + "strikethrough", + "substitution", + "tasklist", + ] + ) + if diff: + raise ValueError(f"'{field.name}' items not recognised: {diff}") + setattr(inst, field.name, set(value)) + + +class UrlSchemeType(TypedDict, total=False): + """Type of the external schemes dictionary.""" + + url: str + title: str + classes: list[str] + + +def check_url_schemes(inst: "MdParserConfig", field: dc.Field, value: Any) -> None: + """Check that the external schemes are of the right format.""" + if isinstance(value, list | tuple): + if not all(isinstance(v, str) for v in value): + raise TypeError(f"'{field.name}' is not a list of strings: {value!r}") + value = {v: None for v in value} + + if not isinstance(value, dict): + raise TypeError(f"'{field.name}' is not a dictionary: {value!r}") + + new_dict: dict[str, UrlSchemeType | None] = {} + for key, val in value.items(): + if not isinstance(key, str): + raise TypeError(f"'{field.name}' key is not a string: {key!r}") + if val is None: + new_dict[key] = val + elif isinstance(val, str): + new_dict[key] = {"url": val} + elif isinstance(val, dict): + if not all(isinstance(k, str) for k in val): + raise TypeError(f"'{field.name}[{key}]' keys are not strings: {val!r}") + if "url" in val and not isinstance(val["url"], str): + raise TypeError( + f"'{field.name}[{key}][url]' is not a string: {val['url']!r}" + ) + if "title" in val and not isinstance(val["title"], str): + raise TypeError( + f"'{field.name}[{key}][title]' is not a string: {val['title']!r}" + ) + if ( + "classes" in val + and not isinstance(val["classes"], list) + and not all(isinstance(c, str) for c in val["classes"]) + ): + raise TypeError( + f"'{field.name}[{key}][classes]' is not a list of str: {val['classes']!r}" + ) + new_dict[key] = val # type: ignore[assignment] + else: + raise TypeError( + f"'{field.name}[{key}]' value is not a string or dict: {val!r}" + ) + + setattr(inst, field.name, new_dict) + + +def check_sub_delimiters(_: "MdParserConfig", field: dc.Field, value: Any) -> None: + """Check that the sub_delimiters are a tuple of length 2 of strings of length 1""" + if (not isinstance(value, tuple | list)) or len(value) != 2: + raise TypeError(f"'{field.name}' is not a tuple of length 2: {value}") + for delim in value: + if (not isinstance(delim, str)) or len(delim) != 1: + raise TypeError( + f"'{field.name}' does not contain strings of length 1: {value}" + ) + + +def check_inventories(_: "MdParserConfig", field: dc.Field, value: Any) -> None: + """Check that the inventories are a dict of {str: (str, Optional[str])}""" + if not isinstance(value, dict): + raise TypeError(f"'{field.name}' is not a dictionary: {value!r}") + for key, val in value.items(): + if not isinstance(key, str): + raise TypeError(f"'{field.name}' key is not a string: {key!r}") + if not isinstance(val, tuple | list) or len(val) != 2: + raise TypeError( + f"'{field.name}[{key}]' value is not a 2-item list: {val!r}" + ) + if not isinstance(val[0], str): + raise TypeError(f"'{field.name}[{key}][0]' is not a string: {val[0]}") + if not (val[1] is None or isinstance(val[1], str)): + raise TypeError(f"'{field.name}[{key}][1]' is not a null/string: {val[1]}") + + +def check_heading_slug_func( + inst: "MdParserConfig", field: dc.Field, value: Any +) -> None: + """Check that the heading_slug_func is a callable.""" + if value is None: + return + if isinstance(value, str): + # attempt to load the function as a python import + try: + module_path, function_name = value.rsplit(".", 1) + mod = import_module(module_path) + value = getattr(mod, function_name) + except ImportError as exc: + raise TypeError( + f"'{field.name}' could not be loaded from string: {value!r}" + ) from exc + setattr(inst, field.name, value) + if not callable(value): + raise TypeError(f"'{field.name}' is not callable: {value!r}") + + +def _test_slug_func(text: str) -> str: + """Dummy slug function, this is imported during testing.""" + # reverse the text + return text[::-1] + + +def check_fence_as_directive( + inst: "MdParserConfig", field: dc.Field, value: Any +) -> None: + """Check that the extensions are a sequence of known strings""" + deep_iterable(instance_of(str), instance_of((list, tuple, set)))(inst, field, value) + setattr(inst, field.name, set(value)) + + +@dc.dataclass() +class MdParserConfig: + """Configuration options for the Markdown Parser. + + Note in the sphinx configuration these option names are prepended with ``myst_`` + """ + + def __repr__(self) -> str: + """Return a string representation of the config.""" + # this replicates the auto-generated __repr__, + # but also allows for a repr function to be defined on the field + attributes: list[str] = [] + for name, val, f in self.as_triple(): + if not f.repr: + continue + val_str = f.metadata.get("repr_func", repr)(val) + attributes.append(f"{name}={val_str}") + return f"{self.__class__.__name__}({', '.join(attributes)})" + + # TODO replace commonmark_only, gfm_only with a single option + + commonmark_only: bool = dc.field( + default=False, + metadata={ + "validator": instance_of(bool), + "help": "Use strict CommonMark parser", + }, + ) + gfm_only: bool = dc.field( + default=False, + metadata={ + "validator": instance_of(bool), + "help": "Use strict Github Flavoured Markdown parser", + }, + ) + + enable_extensions: set[str] = dc.field( + default_factory=set, + metadata={"validator": check_extensions, "help": "Enable syntax extensions"}, + ) + + disable_syntax: Iterable[str] = dc.field( + default_factory=list, + metadata={ + "validator": deep_iterable(instance_of(str), instance_of((list, tuple))), + "help": "Disable Commonmark syntax elements", + }, + ) + + all_links_external: bool = dc.field( + default=False, + metadata={ + "validator": instance_of(bool), + "help": "Parse all links as simple hyperlinks", + }, + ) + + links_external_new_tab: bool = dc.field( + default=False, + metadata={ + "validator": instance_of(bool), + "help": "Open all external links in a new tab", + }, + ) + + url_schemes: dict[str, UrlSchemeType | None] = dc.field( + default_factory=lambda: { + "http": None, + "https": None, + "mailto": None, + "ftp": None, + }, + metadata={ + "validator": check_url_schemes, + "help": "URI schemes that are converted to external links", + "repr_func": lambda v: repr(tuple(v)), + # Note, lists of strings will be coerced to dicts in the validator + "doc_type": "list[str] | dict[str, None | str | dict]", + }, + ) + + ref_domains: Iterable[str] | None = dc.field( + default=None, + metadata={ + "validator": optional( + deep_iterable(instance_of(str), instance_of((list, tuple))) + ), + "help": "Sphinx domain names to search in for link references", + "omit": ["docutils"], + }, + ) + + fence_as_directive: set[str] = dc.field( + default_factory=set, + metadata={ + "validator": check_fence_as_directive, + "help": "Interpret a code fence as a directive, for certain language names. " + "This can be useful for fences like dot and mermaid, " + "and interoperability with other Markdown renderers.", + }, + ) + + number_code_blocks: Sequence[str] = dc.field( + default_factory=list, + metadata={ + "validator": deep_iterable(instance_of(str), instance_of((list, tuple))), + "help": "Add line numbers to code blocks with these languages", + }, + ) + + title_to_header: bool = dc.field( + default=False, + metadata={ + "validator": instance_of(bool), + "help": "Convert a `title` field in the front-matter to a H1 header", + }, + ) + + heading_anchors: int = dc.field( + default=0, + metadata={ + "validator": optional(in_([0, 1, 2, 3, 4, 5, 6, 7])), + "help": "Heading level depth to assign HTML anchors", + }, + ) + + heading_slug_func: Callable[[str], str] | None = dc.field( + default=None, + metadata={ + "validator": check_heading_slug_func, + "help": ( + "Function for creating heading anchors, " + "or a python import path e.g. `my_package.my_module.my_function`" + ), + "global_only": True, + "doc_type": "None | Callable[[str], str] | str", + }, + ) + + html_meta: dict[str, str] = dc.field( + default_factory=dict, + metadata={ + "validator": deep_mapping( + instance_of(str), instance_of(str), instance_of(dict) + ), + "merge_topmatter": True, + "help": "HTML meta tags", + "repr_func": lambda v: f"{{{', '.join(f'{k}: ...' for k in v)}}}", + }, + ) + + footnote_sort: bool = dc.field( + default=True, + metadata={ + "validator": instance_of(bool), + "help": "Move all footnotes to the end of the document, and sort by reference order", + }, + ) + + footnote_transition: bool = dc.field( + default=True, + metadata={ + "validator": instance_of(bool), + "help": "Place a transition before sorted footnotes", + }, + ) + + words_per_minute: int = dc.field( + default=200, + metadata={ + "validator": instance_of(int), + "help": "For reading speed calculations", + }, + ) + + # Extension specific + + substitutions: dict[str, Any] = dc.field( + default_factory=dict, + metadata={ + "validator": deep_mapping(instance_of(str), any_, instance_of(dict)), + "merge_topmatter": True, + "help": "Substitutions mapping", + "extension": "substitutions", + "repr_func": lambda v: f"{{{', '.join(f'{k}: ...' for k in v)}}}", + }, + ) + + sub_delimiters: tuple[str, str] = dc.field( + default=("{", "}"), + repr=False, + metadata={ + "validator": check_sub_delimiters, + "help": "Substitution delimiters", + "extension": "substitutions", + "omit": ["docutils"], + }, + ) + + linkify_fuzzy_links: bool = dc.field( + default=True, + metadata={ + "validator": instance_of(bool), + "help": "Recognise URLs without schema prefixes", + "extension": "linkify", + }, + ) + + dmath_allow_labels: bool = dc.field( + default=True, + metadata={ + "validator": instance_of(bool), + "help": "Parse `$$...$$ (label)`", + "extension": "dollarmath", + }, + ) + dmath_allow_space: bool = dc.field( + default=True, + metadata={ + "validator": instance_of(bool), + "help": "Allow initial/final spaces in `$ ... $`", + "extension": "dollarmath", + }, + ) + dmath_allow_digits: bool = dc.field( + default=True, + metadata={ + "validator": instance_of(bool), + "help": "Allow initial/final digits `1$ ...$2`", + "extension": "dollarmath", + }, + ) + dmath_double_inline: bool = dc.field( + default=False, + metadata={ + "validator": instance_of(bool), + "help": "Parse inline `$$ ... $$`", + "extension": "dollarmath", + }, + ) + + update_mathjax: bool = dc.field( + default=True, + metadata={ + "validator": instance_of(bool), + "help": "Update sphinx.ext.mathjax configuration to ignore `$` delimiters", + "extension": "dollarmath", + "global_only": True, + "omit": ["docutils"], + }, + ) + + mathjax_classes: str = dc.field( + default="tex2jax_process|mathjax_process|math|output_area", + metadata={ + "validator": instance_of(str), + "help": "MathJax classes to add to math HTML", + "extension": "dollarmath", + "global_only": True, + "omit": ["docutils"], + }, + ) + + enable_checkboxes: bool = dc.field( + default=False, + metadata={ + "validator": instance_of(bool), + "help": "Enable checkboxes", + "extension": "tasklist", + }, + ) + + # docutils only (replicating aspects of sphinx config) + + suppress_warnings: Sequence[str] = dc.field( + default_factory=list, + metadata={ + "validator": deep_iterable(instance_of(str), instance_of((list, tuple))), + "help": "A list of warning types to suppress warning messages", + "omit": ["sphinx"], + "global_only": True, + }, + ) + + highlight_code_blocks: bool = dc.field( + default=True, + metadata={ + "validator": instance_of(bool), + "help": "Syntax highlight code blocks with pygments", + "omit": ["sphinx"], + }, + ) + + inventories: dict[str, tuple[str, str | None]] = dc.field( + default_factory=dict, + repr=False, + metadata={ + "validator": check_inventories, + "help": "Mapping of key to (url, inv file), for intra-project referencing", + "omit": ["sphinx"], + "global_only": True, + }, + ) + + def __post_init__(self): + validate_fields(self) + + def copy(self, **kwargs: Any) -> "MdParserConfig": + """Return a new object replacing specified fields with new values. + + Note: initiating the copy will also validate the new fields. + """ + return dc.replace(self, **kwargs) + + @classmethod + def get_fields(cls) -> tuple[dc.Field, ...]: + """Return all attribute fields in this class.""" + return dc.fields(cls) + + def as_dict(self, dict_factory=dict) -> dict: + """Return a dictionary of field name -> value.""" + return dc.asdict(self, dict_factory=dict_factory) + + def as_triple(self) -> Iterable[tuple[str, Any, dc.Field]]: + """Yield triples of (name, value, field).""" + fields = {f.name: f for f in dc.fields(self.__class__)} + for name, value in dc.asdict(self).items(): + yield name, value, fields[name] + + +def merge_file_level( + config: MdParserConfig, + topmatter: dict[str, Any], + warning: Callable[[MystWarnings, str], None], +) -> MdParserConfig: + """Merge the file-level topmatter with the global config. + + :param config: Global config. + :param topmatter: Topmatter from the file. + :param warning: Function to call with a warning (type, message). + :returns: A new config object + """ + # get updates + updates: dict[str, Any] = {} + myst = topmatter.get("myst", {}) + if not isinstance(myst, dict): + warning(MystWarnings.MD_TOPMATTER, f"'myst' key not a dict: {type(myst)}") + else: + updates = myst + + # allow html_meta and substitutions at top-level for back-compatibility + if "html_meta" in topmatter: + warning( + MystWarnings.MD_TOPMATTER, + "top-level 'html_meta' key is deprecated, " + "place under 'myst' key instead", + ) + updates["html_meta"] = topmatter["html_meta"] + if "substitutions" in topmatter: + warning( + MystWarnings.MD_TOPMATTER, + "top-level 'substitutions' key is deprecated, " + "place under 'myst' key instead", + ) + updates["substitutions"] = topmatter["substitutions"] + + new = config.copy() + + # validate each update + fields = {name: (value, field) for name, value, field in config.as_triple()} + for name, value in updates.items(): + if name not in fields: + warning(MystWarnings.MD_TOPMATTER, f"Unknown field: {name}") + continue + + old_value, field = fields[name] + + try: + validate_field(new, field, value) + except Exception as exc: + warning(MystWarnings.MD_TOPMATTER, str(exc)) + continue + + if field.metadata.get("merge_topmatter"): + value = {**old_value, **value} + + setattr(new, name, value) + + return new + + +class TopmatterReadError(Exception): + """Topmatter parsing error.""" + + +def read_topmatter(text: str | Iterator[str]) -> dict[str, Any] | None: + """Read the (optional) YAML topmatter from a source string. + + This is identified by the first line starting with `---`, + then read up to a terminating line of `---`, or `...`. + + :param source: The source string to read from + :return: The topmatter + """ + import yaml + + if isinstance(text, str): + if not text.startswith("---"): # skip creating the line list in memory + return None + text = (line for line in text.splitlines()) + try: + if not next(text).startswith("---"): + return None + except StopIteration: + return None + top_matter = [] + for line in text: + if line.startswith(("---", "...")): + break + top_matter.append(line.rstrip() + "\n") + try: + metadata = yaml.safe_load("".join(top_matter)) + except (yaml.parser.ParserError, yaml.scanner.ScannerError) as err: + raise TopmatterReadError("Malformed YAML") from err + if not isinstance(metadata, dict): + raise TopmatterReadError(f"YAML is not a dict: {type(metadata)}") + return metadata diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/docutils_.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/docutils_.py new file mode 100644 index 000000000..3f7b20a5c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/docutils_.py @@ -0,0 +1,9 @@ +"""A module for compatibility with the docutils>=0.17 `include` directive, in RST documents: + +For example:: + + .. include:: path/to/file.md + :parser: myst_parser.docutils_ +""" + +from myst_parser.parsers.docutils_ import Parser # noqa: F401 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/inventory.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/inventory.py new file mode 100644 index 000000000..0782752cb --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/inventory.py @@ -0,0 +1,504 @@ +"""Logic for dealing with sphinx style inventories (e.g. `objects.inv`). + +These contain mappings of reference names to ids, scoped by domain and object type. + +This is adapted from the Sphinx inventory.py module. +We replicate it here, so that it can be used without Sphinx. +""" + +from __future__ import annotations + +import argparse +import functools +import json +import re +import zlib +from collections.abc import Iterator +from dataclasses import asdict, dataclass +from typing import IO, TYPE_CHECKING, TypedDict +from urllib.request import urlopen + +import yaml + +if TYPE_CHECKING: + # domain_type:object_type -> name -> (project, version, loc, text) + # the `loc` includes the base url, also null `text` is denoted by "-" + from sphinx.util.typing import Inventory as SphinxInventoryType + + +class InventoryItemType(TypedDict): + """A single inventory item.""" + + loc: str + """The location of the item (relative if base_url not None).""" + text: str | None + """Implicit text to show for the item.""" + + +class InventoryType(TypedDict): + """Inventory data.""" + + name: str + """The name of the project.""" + version: str + """The version of the project.""" + base_url: str | None + """The base URL of the `loc`.""" + objects: dict[str, dict[str, dict[str, InventoryItemType]]] + """Mapping of domain -> object type -> name -> item.""" + + +def from_sphinx(inv: SphinxInventoryType) -> InventoryType: + """Convert from a Sphinx compliant format.""" + project = "" + version = "" + objs: dict[str, dict[str, dict[str, InventoryItemType]]] = {} + for domain_obj_name, data in inv.items(): + if ":" not in domain_obj_name: + continue + + domain_name, obj_type = domain_obj_name.split(":", 1) + objs.setdefault(domain_name, {}).setdefault(obj_type, {}) + for refname, refdata in data.items(): + project, version, uri, text = refdata + objs[domain_name][obj_type][refname] = { + "loc": uri, + "text": None if (not text or text == "-") else text, + } + + return { + "name": project, + "version": version, + "base_url": None, + "objects": objs, + } + + +def to_sphinx(inv: InventoryType) -> SphinxInventoryType: + """Convert to a Sphinx compliant format.""" + objs: SphinxInventoryType = {} + for domain_name, obj_types in inv["objects"].items(): + for obj_type, refs in obj_types.items(): + for refname, refdata in refs.items(): + objs.setdefault(f"{domain_name}:{obj_type}", {})[refname] = ( + inv["name"], + inv["version"], + refdata["loc"], + refdata["text"] or "-", + ) + return objs + + +def load(stream: IO, base_url: str | None = None) -> InventoryType: + """Load inventory data from a stream.""" + reader = InventoryFileReader(stream) + line = reader.readline().rstrip() + if line == "# Sphinx inventory version 1": + return _load_v1(reader, base_url) + elif line == "# Sphinx inventory version 2": + return _load_v2(reader, base_url) + else: + raise ValueError(f"invalid inventory header: {line}") + + +def _load_v1(stream: InventoryFileReader, base_url: str | None) -> InventoryType: + """Load inventory data (format v1) from a stream.""" + projname = stream.readline().rstrip()[11:] + version = stream.readline().rstrip()[11:] + invdata: InventoryType = { + "name": projname, + "version": version, + "base_url": base_url, + "objects": {}, + } + for line in stream.readlines(): + name, objtype, location = line.rstrip().split(None, 2) + # version 1 did not add anchors to the location + domain = "py" + if objtype == "mod": + objtype = "module" + location += "#module-" + name + else: + location += "#" + name + invdata["objects"].setdefault(domain, {}).setdefault(objtype, {}) + invdata["objects"][domain][objtype][name] = {"loc": location, "text": None} + + return invdata + + +def _load_v2(stream: InventoryFileReader, base_url: str | None) -> InventoryType: + """Load inventory data (format v2) from a stream.""" + projname = stream.readline().rstrip()[11:] + version = stream.readline().rstrip()[11:] + invdata: InventoryType = { + "name": projname, + "version": version, + "base_url": base_url, + "objects": {}, + } + line = stream.readline() + if "zlib" not in line: + raise ValueError(f"invalid inventory header (not compressed): {line}") + + for line in stream.read_compressed_lines(): + # be careful to handle names with embedded spaces correctly + m = re.match(r"(?x)(.+?)\s+(\S+)\s+(-?\d+)\s+?(\S*)\s+(.*)", line.rstrip()) + if not m: + continue + name: str + type: str + name, type, _, location, text = m.groups() + if ":" not in type: + # wrong type value. type should be in the form of "{domain}:{objtype}" + # + # Note: To avoid the regex DoS, this is implemented in python (refs: #8175) + continue + if ( + type == "py:module" + and type in invdata["objects"] + and name in invdata["objects"][type] + ): + # due to a bug in 1.1 and below, + # two inventory entries are created + # for Python modules, and the first + # one is correct + continue + if location.endswith("$"): + location = location[:-1] + name + domain, objtype = type.split(":", 1) + invdata["objects"].setdefault(domain, {}).setdefault(objtype, {}) + if not text or text == "-": + text = None + invdata["objects"][domain][objtype][name] = {"loc": location, "text": text} + return invdata + + +_BUFSIZE = 16 * 1024 + + +class InventoryFileReader: + """A file reader for an inventory file. + + This reader supports mixture of texts and compressed texts. + """ + + def __init__(self, stream: IO) -> None: + self.stream = stream + self.buffer = b"" + self.eof = False + + def read_buffer(self) -> None: + chunk = self.stream.read(_BUFSIZE) + if chunk == b"": + self.eof = True + self.buffer += chunk + + def readline(self) -> str: + pos = self.buffer.find(b"\n") + if pos != -1: + line = self.buffer[:pos].decode() + self.buffer = self.buffer[pos + 1 :] + elif self.eof: + line = self.buffer.decode() + self.buffer = b"" + else: + self.read_buffer() + line = self.readline() + + return line + + def readlines(self) -> Iterator[str]: + while not self.eof: + line = self.readline() + if line: + yield line + + def read_compressed_chunks(self) -> Iterator[bytes]: + decompressor = zlib.decompressobj() + while not self.eof: + self.read_buffer() + yield decompressor.decompress(self.buffer) + self.buffer = b"" + yield decompressor.flush() + + def read_compressed_lines(self) -> Iterator[str]: + buf = b"" + for chunk in self.read_compressed_chunks(): + buf += chunk + pos = buf.find(b"\n") + while pos != -1: + yield buf[:pos].decode() + buf = buf[pos + 1 :] + pos = buf.find(b"\n") + + +@functools.lru_cache(maxsize=256) +def _create_regex(pat: str) -> re.Pattern[str]: + r"""Create a regex from a pattern, that can include `*` wildcards, + to match 0 or more characters. + + `\*` is translated as a literal `*`. + """ + regex = "" + backslash_last = False + for char in pat: + if backslash_last and char == "*": + regex += re.escape(char) + backslash_last = False + continue + if backslash_last: + regex += re.escape("\\") + backslash_last = False + if char == "\\": + backslash_last = True + continue + if char == "*": + regex += ".*" + continue + regex += re.escape(char) + + return re.compile(regex) + + +def match_with_wildcard(name: str, pattern: str | None) -> bool: + r"""Match a whole name with a pattern, that can include `*` wildcards, + to match 0 or more characters. + + To include a literal `*` in the pattern, use `\*`. + """ + if pattern is None: + return True + regex = _create_regex(pattern) + return regex.fullmatch(name) is not None + + +@dataclass +class InvMatch: + """A match from an inventory.""" + + inv: str + domain: str + otype: str + name: str + project: str + version: str + base_url: str | None + loc: str + text: str | None + + def asdict(self) -> dict[str, str]: + return asdict(self) + + +def filter_inventories( + inventories: dict[str, InventoryType], + *, + invs: str | None = None, + domains: str | None = None, + otypes: str | None = None, + targets: str | None = None, +) -> Iterator[InvMatch]: + r"""Filter a set of inventories. + + Filters are strings that can include `*` wildcards, to match 0 or more characters. + To include a literal `*` in the pattern, use `\*`. + + :param inventories: Mapping of inventory name to inventory data + :param invs: the inventory key filter + :param domains: the domain name filter + :param otypes: the object type filter + :param targets: the target name filter + """ + for inv_name, inv_data in inventories.items(): + if not match_with_wildcard(inv_name, invs): + continue + for domain_name, dom_data in inv_data["objects"].items(): + if not match_with_wildcard(domain_name, domains): + continue + for obj_type, obj_data in dom_data.items(): + if not match_with_wildcard(obj_type, otypes): + continue + for target, item_data in obj_data.items(): + if match_with_wildcard(target, targets): + yield InvMatch( + inv=inv_name, + domain=domain_name, + otype=obj_type, + name=target, + project=inv_data["name"], + version=inv_data["version"], + base_url=inv_data["base_url"], + loc=item_data["loc"], + text=item_data["text"], + ) + + +def filter_sphinx_inventories( + inventories: dict[str, SphinxInventoryType], + *, + invs: str | None = None, + domains: str | None = None, + otypes: str | None = None, + targets: str | None = None, +) -> Iterator[InvMatch]: + r"""Filter a set of sphinx style inventories. + + Filters are strings that can include `*` wildcards, to match 0 or more characters. + To include a literal `*` in the pattern, use `\*`. + + :param inventories: Mapping of inventory name to inventory data + :param invs: the inventory key filter + :param domains: the domain name filter + :param otypes: the object type filter + :param targets: the target name filter + """ + for inv_name, inv_data in inventories.items(): + if not match_with_wildcard(inv_name, invs): + continue + for domain_obj_name, data in inv_data.items(): + if ":" not in domain_obj_name: + continue + domain_name, obj_type = domain_obj_name.split(":", 1) + if not ( + match_with_wildcard(domain_name, domains) + and match_with_wildcard(obj_type, otypes) + ): + continue + for target in data: + if match_with_wildcard(target, targets): + project, version, loc, text = data[target] + yield ( + InvMatch( + inv=inv_name, + domain=domain_name, + otype=obj_type, + name=target, + project=project, + version=version, + base_url=None, + loc=loc, + text=None if (not text or text == "-") else text, + ) + ) + + +def filter_string( + invs: str | None, + domains: str | None, + otype: str | None, + target: str | None, + *, + delimiter: str = ":", +) -> str: + """Create a string representation of the filter, from the given arguments.""" + str_items = [] + for item in (invs, domains, otype, target): + if item is None: + str_items.append("*") + elif delimiter in item: + str_items.append(f'"{item}"') + else: + str_items.append(f"{item}") + return delimiter.join(str_items) + + +def fetch_inventory( + uri: str, *, timeout: None | float = None, base_url: None | str = None +) -> InventoryType: + """Fetch an inventory from a URL or local path.""" + if uri.startswith(("http://", "https://")): + with urlopen(uri, timeout=timeout) as stream: + return load(stream, base_url=base_url) + with open(uri, "rb") as stream: + return load(stream, base_url=base_url) + + +def inventory_cli(inputs: None | list[str] = None): + """Command line interface for fetching and parsing an inventory.""" + parser = argparse.ArgumentParser(description="Parse an inventory file.") + parser.add_argument("uri", metavar="[URL|PATH]", help="URI of the inventory file") + parser.add_argument( + "-d", + "--domain", + metavar="DOMAIN", + default="*", + help="Filter the inventory by domain (`*` = wildcard)", + ) + parser.add_argument( + "-o", + "--object-type", + metavar="TYPE", + default="*", + help="Filter the inventory by object type (`*` = wildcard)", + ) + parser.add_argument( + "-n", + "--name", + metavar="NAME", + default="*", + help="Filter the inventory by reference name (`*` = wildcard)", + ) + parser.add_argument( + "-l", + "--loc", + metavar="LOC", + help="Filter the inventory by reference location (`*` = wildcard)", + ) + parser.add_argument( + "-f", + "--format", + choices=["yaml", "json"], + default="yaml", + help="Output format", + ) + parser.add_argument( + "--timeout", + type=float, + metavar="SECONDS", + help="Timeout for fetching the inventory", + ) + args = parser.parse_args(inputs) + + base_url = None + if args.uri.startswith("http://") or args.uri.startswith("https://"): + try: + with urlopen(args.uri, timeout=args.timeout) as stream: + invdata = load(stream) + base_url = args.uri.rsplit("/", 1)[0] + except Exception: + with urlopen(args.uri + "/objects.inv", timeout=args.timeout) as stream: + invdata = load(stream) + base_url = args.uri + else: + with open(args.uri, "rb") as stream: + invdata = load(stream) + + filtered: InventoryType = { + "name": invdata["name"], + "version": invdata["version"], + "base_url": base_url, + "objects": {}, + } + for match in filter_inventories( + {"": invdata}, + domains=args.domain, + otypes=args.object_type, + targets=args.name, + ): + if args.loc and not match_with_wildcard(match.loc, args.loc): + continue + filtered["objects"].setdefault(match.domain, {}).setdefault(match.otype, {})[ + match.name + ] = { + "loc": match.loc, + "text": match.text, + } + + if args.format == "json": + print(json.dumps(filtered, indent=2, sort_keys=False)) + else: + print(yaml.dump(filtered, sort_keys=False)) + + +if __name__ == "__main__": + inventory_cli() diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__init__.py new file mode 100644 index 000000000..fac0c622f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__init__.py @@ -0,0 +1,8 @@ +"""Conversion of Markdown-it tokens to docutils AST. + +These renderers take the markdown-it parsed token stream +and convert it to the docutils AST. +The sphinx renderer is a subclass of the docutils one, +with some additional methods only available +*via* sphinx e.g. multi-document cross-referencing. +""" diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..198afe6bd Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/base.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/base.cpython-312.pyc new file mode 100644 index 000000000..025906553 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/base.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/html_to_nodes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/html_to_nodes.cpython-312.pyc new file mode 100644 index 000000000..df74e7941 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/html_to_nodes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/sphinx_.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/sphinx_.cpython-312.pyc new file mode 100644 index 000000000..a48b92401 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/sphinx_.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/transforms.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/transforms.cpython-312.pyc new file mode 100644 index 000000000..cfe487873 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/__pycache__/transforms.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/base.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/base.py new file mode 100644 index 000000000..3778dd317 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/base.py @@ -0,0 +1,1981 @@ +"""Convert Markdown-it tokens to docutils nodes.""" + +from __future__ import annotations + +import inspect +import json +import os +import posixpath +import re +from collections.abc import Callable, Iterable, Iterator, MutableMapping, Sequence +from contextlib import contextmanager, suppress +from datetime import date, datetime +from types import ModuleType +from typing import ( + TYPE_CHECKING, + Any, + cast, +) +from urllib.parse import urlparse + +import jinja2 +import yaml +from docutils import nodes +from docutils.frontend import get_default_settings +from docutils.languages import get_language +from docutils.parsers.rst import Directive, DirectiveError, directives, roles +from docutils.parsers.rst import Parser as RSTParser +from docutils.parsers.rst.directives.misc import Include +from docutils.parsers.rst.languages import get_language as get_language_rst +from docutils.statemachine import StringList +from docutils.transforms.components import Filter +from docutils.utils import Reporter, SystemMessage, new_document +from docutils.utils.code_analyzer import Lexer, LexerError, NumberLines +from markdown_it import MarkdownIt +from markdown_it.common.utils import escapeHtml +from markdown_it.renderer import RendererProtocol +from markdown_it.token import Token +from markdown_it.tree import SyntaxTreeNode + +from myst_parser import inventory +from myst_parser._compat import findall +from myst_parser.config.main import MdParserConfig, UrlSchemeType +from myst_parser.mocking import ( + MockIncludeDirective, + MockingError, + MockInliner, + MockRSTParser, + MockState, + MockStateMachine, +) +from myst_parser.parsers.directives import MarkupError, parse_directive_text +from myst_parser.warnings_ import MystWarnings, create_warning + +from .html_to_nodes import html_to_nodes + +if TYPE_CHECKING: + from sphinx.environment import BuildEnvironment + + +def make_document(source_path="notset", parser_cls=RSTParser) -> nodes.document: + """Create a new docutils document, with the parser classes' default settings.""" + settings = get_default_settings(parser_cls) + return new_document(source_path, settings=settings) + + +REGEX_SCHEME = re.compile(r"^([a-zA-Z][a-zA-Z0-9+.-]*):") +"""RFC 7595: A non-empty scheme component followed by a colon (:), +consisting of a sequence of characters beginning with a letter +and followed by any combination of letters, digits, plus (+), period (.), or hyphen (-). +Although schemes are case-insensitive, the canonical form is lowercase +and documents that specify schemes must do so with lowercase letters. +""" +REGEX_URI_TEMPLATE = re.compile( + r"{{\s*(uri|scheme|netloc|path|params|query|fragment)\s*}}" +) +REGEX_DIRECTIVE_START = re.compile(r"^[\s]{0,3}([`]{3,10}|[~]{3,10}|[:]{3,10})\{") + + +def token_line(token: SyntaxTreeNode, default: int | None = None) -> int: + """Retrieve the initial line of a token.""" + if not getattr(token, "map", None): + if default is not None: + return default + raise ValueError(f"token map not set: {token}") + return token.map[0] # type: ignore[index] + + +class DocutilsRenderer(RendererProtocol): + """A markdown-it-py renderer to populate (in-place) a `docutils.document` AST. + + Note, this render is not dependent on Sphinx. + """ + + __output__ = "docutils" + + def __init__(self, parser: MarkdownIt) -> None: + """Load the renderer (called by ``MarkdownIt``)""" + self.md = parser + self.rules = { + k: v + for k, v in inspect.getmembers(self, predicate=inspect.ismethod) + if k.startswith("render_") and k != "render_children" + } + # these are lazy loaded, when needed + self._inventories: None | dict[str, inventory.InventoryType] = None + + def __getattr__(self, name: str): + """Warn when the renderer has not been setup yet.""" + if name in ( + "md_env", + "md_config", + "md_options", + "document", + "current_node", + "reporter", + "language_module_rst", + "_heading_offset", + "_level_to_section", + ): + raise AttributeError( + f"'{name}' attribute is not available until setup_render() is called" + ) + raise AttributeError( + f"'{type(self).__name__}' object has no attribute '{name}'" + ) + + def setup_render( + self, options: dict[str, Any], env: MutableMapping[str, Any] + ) -> None: + """Setup the renderer with per render variables.""" + self.md_env = env + self.md_options = options + self.md_config: MdParserConfig = options["myst_config"] + self.document: nodes.document = options.get("document", make_document()) + self.current_node: nodes.Element = options.get("current_node", self.document) + self.reporter: Reporter = self.document.reporter + # note there are actually two possible language modules: + # one from docutils.languages, and one from docutils.parsers.rst.languages + self.language_module_rst: ModuleType = get_language_rst( + self.document.settings.language_code + ) + self._heading_offset: int = 0 + # a mapping of heading levels to its currently associated node + self._level_to_section: dict[int, nodes.document | nodes.section] = { + 0: self.document + } + # mapping of section slug to (line, id, implicit_text) + self._heading_slugs: dict[str, tuple[int | None, str, str]] = {} + + @property + def sphinx_env(self) -> BuildEnvironment | None: + """Return the sphinx env, if using Sphinx.""" + try: + return self.document.settings.env + except AttributeError: + return None + + def create_warning( + self, + message: str, + subtype: MystWarnings | str, + *, + wtype: str | None = None, + line: int | None = None, + append_to: nodes.Element | None = None, + ) -> nodes.system_message | None: + """Generate a warning, logging if it is necessary. + + If the warning type is listed in the ``suppress_warnings`` configuration, + then ``None`` will be returned and no warning logged. + """ + return create_warning( + self.document, + message, + subtype, + wtype=wtype, + line=line, + append_to=append_to, + ) + + def _render_tokens(self, tokens: list[Token]) -> None: + """Render the tokens.""" + # propagate line number down to inline elements + for token in tokens: + if not token.map: + continue + # For docutils we want 1 based line numbers (not 0) + token.map = [token.map[0] + 1, token.map[1] + 1] + for token_child in token.children or []: + token_child.map = token.map + + # nest tokens + node_tree = SyntaxTreeNode(tokens) + # render + for child in node_tree.children: + # skip hidden? + if f"render_{child.type}" in self.rules: + self.rules[f"render_{child.type}"](child) + else: + self.create_warning( + f"No render method for: {child.type}", + MystWarnings.RENDER_METHOD, + line=token_line(child, default=0), + append_to=self.current_node, + ) + + def render( + self, tokens: Sequence[Token], options, md_env: MutableMapping[str, Any] + ) -> nodes.document: + """Run the render on a token stream. + + :param tokens: list on block tokens to render + :param options: params of parser instance + :param md_env: the markdown-it environment sandbox associated with the tokens, + containing additional metadata like reference info + """ + self.setup_render(options, md_env) + self._render_initialise() + self._render_tokens(list(tokens)) + self._render_finalise() + return self.document + + def _render_initialise(self) -> None: + """Initialise the render of the document.""" + self.current_node.extend( + html_meta_to_nodes( + self.md_config.html_meta, + document=self.document, + line=0, + reporter=self.reporter, + ) + ) + + def _render_finalise(self) -> None: + """Finalise the render of the document.""" + + # save for later reference resolution + self.document.myst_slugs = self._heading_slugs + if self._heading_slugs and self.sphinx_env: + self.sphinx_env.metadata[self.sphinx_env.docname]["myst_slugs"] = ( + self._heading_slugs + ) + + # ensure these settings are set for later footnote transforms + self.document.settings.myst_footnote_transition = ( + self.md_config.footnote_transition + ) + self.document.settings.myst_footnote_sort = self.md_config.footnote_sort + + # log warnings for duplicate reference definitions + # "duplicate_refs": [{"href": "ijk", "label": "B", "map": [4, 5], "title": ""}], + for dup_ref in self.md_env.get("duplicate_refs", []): + self.create_warning( + f"Duplicate reference definition: {dup_ref['label']}", + MystWarnings.MD_DEF_DUPE, + line=dup_ref["map"][0] + 1, + append_to=self.document, + ) + + # Add the wordcount, generated by the ``mdit_py_plugins.wordcount_plugin``. + wordcount_metadata = self.md_env.get("wordcount", {}) + if wordcount_metadata: + # save the wordcount to the sphinx BuildEnvironment metadata + if self.sphinx_env is not None: + meta = self.sphinx_env.metadata.setdefault(self.sphinx_env.docname, {}) + meta["wordcount"] = wordcount_metadata + + # now add the wordcount as substitution definitions, + # so we can reference them in the document + for key in ("words", "minutes"): + value = wordcount_metadata.get(key, None) + if value is None: + continue + substitution_node = nodes.substitution_definition( + str(value), nodes.Text(str(value)) + ) + substitution_node.source = self.document["source"] + substitution_node["names"].append(f"wordcount-{key}") + self.document.note_substitution_def( + substitution_node, f"wordcount-{key}" + ) + + def nested_render_text( + self, + text: str, + lineno: int, + inline: bool = False, + temp_root_node: None | nodes.Element = None, + heading_offset: int = 0, + ) -> None: + """Render unparsed text (appending to the current node). + + :param text: the text to render + :param lineno: the starting line number of the text, within the full source + :param inline: whether the text is inline or block + :param temp_root_node: If set, allow sections to be created as children of this node + :param heading_offset: offset heading levels by this amount + """ + tokens = ( + self.md.parseInline(text, self.md_env) + if inline + else self.md.parse(text + "\n", self.md_env) + ) + + # remove front matter, if present, e.g. from included documents + if tokens and tokens[0].type == "front_matter": + tokens.pop(0) + + # update the line numbers + for token in tokens: + if token.map: + token.map = [token.map[0] + lineno, token.map[1] + lineno] + + @contextmanager + def _restore(): + current_heading_offset = self._heading_offset + self._heading_offset = heading_offset + if temp_root_node is not None: + # we need to temporarily set the root node, + # and we also want to restore the level_to_section mapping at the end + current_level_to_section = dict(self._level_to_section.items()) + current_root_node = self.md_env.get("temp_root_node", None) + self.md_env["temp_root_node"] = temp_root_node + yield + self._heading_offset = current_heading_offset + if temp_root_node is not None: + self.md_env["temp_root_node"] = current_root_node + self._level_to_section = current_level_to_section + + with _restore(): + self._render_tokens(tokens) + + @contextmanager + def current_node_context( + self, node: nodes.Element, append: bool = False + ) -> Iterator[None]: + """Context manager for temporarily setting the current node.""" + if append: + self.current_node.append(node) + current_node = self.current_node + self.current_node = node + yield + self.current_node = current_node + + def render_children(self, token: SyntaxTreeNode) -> None: + """Render the children of a token.""" + for child in token.children or []: + if f"render_{child.type}" in self.rules: + self.rules[f"render_{child.type}"](child) + else: + self.create_warning( + f"No render method for: {child.type}", + MystWarnings.RENDER_METHOD, + line=token_line(child, default=0), + append_to=self.current_node, + ) + + def add_line_and_source_path(self, node, token: SyntaxTreeNode) -> None: + """Copy the line number and document source path to the docutils node.""" + with suppress(ValueError): + node.line = token_line(token) + node.source = self.document["source"] + + def add_line_and_source_path_r( + self, nodes_: list[nodes.Element], token: SyntaxTreeNode + ) -> None: + """Copy the line number and document source path to the docutils nodes, + and recursively to all descendants. + """ + for node in nodes_: + self.add_line_and_source_path(node, token) + for child in findall(node)(): + self.add_line_and_source_path(child, token) + + def copy_attributes( + self, + token: SyntaxTreeNode, + node: nodes.Element, + keys: Sequence[str] = ("class",), + *, + converters: dict[str, Callable[[str], Any]] | None = None, + aliases: dict[str, str] | None = None, + ) -> None: + """Copy attributes on the token to the docutils node. + + :param token: the token to copy attributes from + :param node: the node to copy attributes to + :param keys: the keys to copy from the token (after aliasing) + :param converters: a dictionary of converters for the attributes + :param aliases: a dictionary mapping the token key name to the node key name + """ + if converters is None: + converters = {} + if aliases is None: + aliases = {} + for key, value in token.attrs.items(): + key = aliases.get(key, key) + if key not in keys: + continue + if key == "class": + node["classes"].extend(str(value).split()) + elif key == "id": + name = nodes.fully_normalize_name(str(value)) + node["names"].append(name) + self.document.note_explicit_target(node, node) + else: + if key in converters: + try: + value = converters[key](str(value)) + except ValueError: + self.create_warning( + f"Invalid {key!r} attribute value: {token.attrs[key]!r}", + MystWarnings.INVALID_ATTRIBUTE, + line=token_line(token, default=0), + append_to=node, + ) + continue + node[key] = value + + def update_section_level_state(self, section: nodes.section, level: int) -> None: + """Update the section level state, with the new current section and level.""" + # find the closest parent section + parent_level = max( + section_level + for section_level in self._level_to_section + if level > section_level + ) + parent = self._level_to_section[parent_level] + + # if we are jumping up to a non-consecutive level, + # then warn about this, since this will not be propagated in the docutils AST + if (level > parent_level) and (parent_level + 1 != level): + msg = f"Non-consecutive header level increase; H{parent_level} to H{level}" + if parent_level == 0: + msg = f"Document headings start at H{level}, not H1" + self.create_warning( + msg, + MystWarnings.MD_HEADING_NON_CONSECUTIVE, + line=section.line, + append_to=self.current_node, + ) + + # append the new section to the parent + parent.append(section) + # update the state for this section level + self._level_to_section[level] = section + + # Remove all descendant sections from the section level state + self._level_to_section = { + section_level: section + for section_level, section in self._level_to_section.items() + if section_level <= level + } + + def renderInlineAsText(self, tokens: list[SyntaxTreeNode]) -> str: # noqa: N802 + """Special kludge for image `alt` attributes to conform CommonMark spec. + + Don't try to use it! Spec requires to show `alt` content with stripped markup, + instead of simple escaping. + """ + result = "" + + for token in tokens or []: + if token.type == "text": + result += token.content + # elif token.type == "image": + # result += self.renderInlineAsText(token.children) + else: + result += self.renderInlineAsText(token.children or []) + return result + + # ### render methods for commonmark tokens + + def render_paragraph(self, token: SyntaxTreeNode) -> None: + para = nodes.paragraph(token.children[0].content if token.children else "") + self.copy_attributes(token, para, keys=("class", "id")) + self.add_line_and_source_path(para, token) + with self.current_node_context(para, append=True): + self.render_children(token) + + def render_inline(self, token: SyntaxTreeNode) -> None: + self.render_children(token) + + def render_text(self, token: SyntaxTreeNode) -> None: + self.current_node.append(nodes.Text(token.content)) + + def render_bullet_list(self, token: SyntaxTreeNode) -> None: + list_node = nodes.bullet_list() + if token.markup: + list_node["bullet"] = token.markup + self.copy_attributes(token, list_node, keys=("class", "id")) + self.add_line_and_source_path(list_node, token) + with self.current_node_context(list_node, append=True): + self.render_children(token) + + def render_ordered_list(self, token: SyntaxTreeNode) -> None: + style = "arabic" + if "style" in token.attrs: + style = { + "decimal": "arabic", + "lower-alpha": "loweralpha", + "upper-alpha": "upperalpha", + "lower-roman": "lowerroman", + "upper-roman": "upperroman", + }.get(str(token.attrs["style"]), style) + list_node = nodes.enumerated_list(enumtype=style, prefix="") + list_node["suffix"] = token.markup # for CommonMark, this should be "." or ")" + # start is starting number + self.copy_attributes(token, list_node, keys=("class", "id", "start")) + self.add_line_and_source_path(list_node, token) + with self.current_node_context(list_node, append=True): + self.render_children(token) + + def render_list_item(self, token: SyntaxTreeNode) -> None: + item_node = nodes.list_item() + self.copy_attributes(token, item_node, keys=("class", "id")) + self.add_line_and_source_path(item_node, token) + with self.current_node_context(item_node, append=True): + self.render_children(token) + + def render_em(self, token: SyntaxTreeNode) -> None: + node = nodes.emphasis() + self.add_line_and_source_path(node, token) + with self.current_node_context(node, append=True): + self.render_children(token) + + def render_softbreak(self, token: SyntaxTreeNode) -> None: + self.current_node.append(nodes.Text("\n")) + + def render_hardbreak(self, token: SyntaxTreeNode) -> None: + self.current_node.append(nodes.raw("", "<br />\n", format="html")) + self.current_node.append(nodes.raw("", "\\\\\n", format="latex")) + + def render_strong(self, token: SyntaxTreeNode) -> None: + node = nodes.strong() + self.add_line_and_source_path(node, token) + with self.current_node_context(node, append=True): + self.render_children(token) + + def render_blockquote(self, token: SyntaxTreeNode) -> None: + quote = nodes.block_quote() + self.copy_attributes(token, quote, keys=("class", "id")) + self.add_line_and_source_path(quote, token) + with self.current_node_context(quote, append=True): + self.render_children(token) + if "attribution" in token.attrs: + attribution = nodes.attribution(token.attrs["attribution"], "") + self.add_line_and_source_path(attribution, token) + with self.current_node_context(attribution, append=True): + self.nested_render_text( + str(token.attrs["attribution"]), + token_line(token, 0), + inline=True, + ) + + def render_hr(self, token: SyntaxTreeNode) -> None: + node = nodes.transition() + self.add_line_and_source_path(node, token) + self.current_node.append(node) + + def render_code_inline(self, token: SyntaxTreeNode) -> None: + node = nodes.literal(token.content, token.content) + self.add_line_and_source_path(node, token) + self.copy_attributes( + token, + node, + ("class", "id", "language"), + aliases={"lexer": "language", "l": "language"}, + ) + if "language" in node and "code" not in node["classes"]: + node["classes"].append("code") + self.current_node.append(node) + + @staticmethod + def _parse_linenos(emphasize_lines: str, num_lines: int) -> list[int]: + """Parse the `emphasize_lines` argument. + + Raises ValueError if the argument is invalid. + """ + from sphinx.util import parselinenos + + hl_lines = parselinenos(emphasize_lines, num_lines) + if any(i >= num_lines for i in hl_lines): + raise ValueError(f"out of range(1-{num_lines}") + + return [x + 1 for x in hl_lines if x < num_lines] + + def create_highlighted_code_block( + self, + text: str, + lexer_name: str | None, + number_lines: bool = False, + lineno_start: int = 1, + source: str | None = None, + line: int | None = None, + node_cls: type[nodes.Element] = nodes.literal_block, + emphasize_lines: list[int] | str | None = None, + ) -> nodes.Element: + """Create a literal block with syntax highlighting. + + This mimics the behaviour of the `code-block` directive. + + In docutils, this directive directly parses the text with the pygments lexer, + whereas in sphinx, the lexer name is only recorded as the `language` attribute, + and the text is lexed later by pygments within the `visit_literal_block` + method of the output format ``SphinxTranslator``. + + Note, this function does not add the literal block to the document. + """ + if self.sphinx_env is not None: + node = node_cls(text, text, language=lexer_name or "none") + if number_lines: + node["linenos"] = True + if lineno_start != 1: + node["highlight_args"] = {"linenostart": lineno_start} + if isinstance(emphasize_lines, str): + try: + emphasize_lines = self._parse_linenos( + emphasize_lines, len(text.splitlines()) + ) + except ValueError as err: + self.create_warning( + f"emphasize_lines: {err}", + MystWarnings.INVALID_ATTRIBUTE, + line=line, + ) + if isinstance(emphasize_lines, list | tuple): + # TODO emphasize_lines in docutils? + if "highlight_args" not in node: + node["highlight_args"] = {} + node["highlight_args"]["hl_lines"] = emphasize_lines + else: + node = node_cls( + text, classes=["code"] + ([lexer_name] if lexer_name else []) + ) + try: + lex_tokens = Lexer( + text, + lexer_name or "", + "short" if self.md_config.highlight_code_blocks else "none", + ) + except LexerError as err: + self.reporter.warning( + str(err), + **{ + name: value + for name, value in (("source", source), ("line", line)) + if value is not None + }, + ) + lex_tokens = Lexer(text, lexer_name or "", "none") + + if number_lines: + lex_tokens = NumberLines( + lex_tokens, lineno_start, lineno_start + len(text.splitlines()) + ) + + for classes, value in lex_tokens: + if classes: + node += nodes.inline(value, value, classes=classes) + else: + # insert as Text to decrease the verbosity of the output + node += nodes.Text(value) + + if source is not None: + node.source = source + if line is not None: + node.line = line + return node + + def render_code_block(self, token: SyntaxTreeNode) -> None: + lexer = token.info.split()[0] if token.info else None + lineno_start = 1 + number_lines = False + emphasize_lines = ( + str(token.attrs.get("emphasize-lines")) + if "emphasize-lines" in token.attrs + else None + ) + if "lineno-start" in token.attrs: + with suppress(ValueError): + lineno_start = int(token.attrs["lineno-start"]) + number_lines = True + node = self.create_highlighted_code_block( + token.content, + lexer, + lineno_start=lineno_start, + number_lines=number_lines, + source=self.document["source"], + line=token_line(token, 0) or None, + emphasize_lines=emphasize_lines, + ) + self.copy_attributes(token, node, ("class", "id")) + self.current_node.append(node) + + def render_fence(self, token: SyntaxTreeNode) -> None: + """Render a fenced code block.""" + # split the info into possible ```name arguments + parts = (token.info.strip() if token.info else "").split(maxsplit=1) + name = parts[0] if parts else "" + arguments = parts[1] if len(parts) > 1 else "" + + if (not self.md_config.commonmark_only) and (not self.md_config.gfm_only): + if name == "{eval-rst}": + return self.render_restructuredtext(token) + if name.startswith("{") and name.endswith("}"): + return self.render_directive(token, name[1:-1], arguments) + if name in self.md_config.fence_as_directive: + options = {k: str(v) for k, v in token.attrs.items()} + if "id" in options: + options["name"] = options.pop("id") + return self.render_directive( + token, name, arguments, additional_options=options + ) + + if not name and self.sphinx_env is not None: + # use the current highlight setting, via the ``highlight`` directive, + # or ``highlight_language`` configuration. + name = ( + self.sphinx_env.temp_data.get("highlight_language") + or self.sphinx_env.config.highlight_language + ) + + lineno_start = 1 + number_lines = name in self.md_config.number_code_blocks + emphasize_lines = ( + str(token.attrs.get("emphasize-lines")) + if "emphasize-lines" in token.attrs + else None + ) + if "lineno-start" in token.attrs: + with suppress(ValueError): + lineno_start = int(token.attrs["lineno-start"]) + number_lines = True + + node = self.create_highlighted_code_block( + token.content, + name, + number_lines=number_lines, + lineno_start=lineno_start, + source=self.document["source"], + line=token_line(token, 0) or None, + emphasize_lines=emphasize_lines, + ) + self.copy_attributes(token, node, ("class", "id")) + self.current_node.append(node) + + @property + def blocks_mathjax_processing(self) -> bool: + """Only add mathjax ignore classes if using sphinx, + and using the ``dollarmath`` extension, and ``myst_update_mathjax=True``. + """ + return ( + self.sphinx_env is not None + and "dollarmath" in self.md_config.enable_extensions + and self.md_config.update_mathjax + ) + + def generate_heading_target( + self, + token: SyntaxTreeNode, + level: int, + node: nodes.Element, + title_node: nodes.Element, + ) -> None: + """Generate a heading target, and add it to the document.""" + + implicit_text = clean_astext(title_node) + + # create a target reference for the section, based on the heading text. + # Note, this is an implicit target, meaning that it is not prioritised, + # during ref resolution, and is not stored in the document. + # TODO this is purely to mimic docutils, but maybe we don't need it? + # (since we have the slugify logic below) + name = nodes.fully_normalize_name(implicit_text) + node["names"].append(name) + self.document.note_implicit_target(node, node) + + if level > self.md_config.heading_anchors: + return + + # Create an implicit reference slug. + # The problem with this reference slug, + # is that it might not be in the "normalised" format required by docutils, + # https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#normalized-reference-names + # so we store it separately, and have separate logic than docutils + # TODO maybe revisit this assumption, or improve the logic + try: + slug = compute_unique_slug( + token, + self._heading_slugs, + self.md_config.heading_slug_func, + ) + except Exception as error: + self.create_warning( + str(error), + MystWarnings.HEADING_SLUG, + line=token_line(token, default=0), + append_to=self.current_node, + ) + else: + node["slug"] = slug + self._heading_slugs[slug] = (node.line, node["ids"][0], implicit_text) + + def render_heading(self, token: SyntaxTreeNode) -> None: + """Render a heading, e.g. `# Heading`.""" + + level = int(token.tag[1]) + self._heading_offset + + # sections are only allowed as a parent of a document or another section + # the only exception to this, is if a directive has called a nested parse, + # and specifically specified that sections are allowed to be created as children + # of its root node (a.k.a match_titles=True) + parent_of_temp_root = ( + self.md_env.get("temp_root_node", None) is not None + and self.current_node == self.md_env["temp_root_node"] + ) + if not ( + parent_of_temp_root + or isinstance(self.current_node, nodes.document | nodes.section) + ): + # if this is not the case, we create a rubric node instead + rubric = nodes.rubric(token.content, "", level=level) + self.add_line_and_source_path(rubric, token) + self.copy_attributes(token, rubric, ("class", "id")) + with self.current_node_context(rubric, append=True): + self.render_children(token) + self.generate_heading_target(token, level, rubric, rubric) + return + + # create the section node + new_section = nodes.section() + self.add_line_and_source_path(new_section, token) + self.copy_attributes(token, new_section, ("class", "id")) + # if a top level section, + # then add classes to set default mathjax processing to false + # we then turn it back on, on a per-node basis + if level == 1 and self.blocks_mathjax_processing: + new_section["classes"].extend(["tex2jax_ignore", "mathjax_ignore"]) + + # update the state of the section levels + self.update_section_level_state(new_section, level) + + # create the title for this section + title_node = nodes.title(token.children[0].content if token.children else "") + self.add_line_and_source_path(title_node, token) + new_section.append(title_node) + # render the heading children into the title + with self.current_node_context(title_node): + self.render_children(token) + + self.generate_heading_target(token, level, new_section, title_node) + + # set the section as the current node for subsequent rendering + self.current_node = new_section + + def render_link(self, token: SyntaxTreeNode) -> None: + """Parse `<http://link.com>` or `[text](link "title")` syntax to docutils AST: + + - If `myst_all_links_external` is True, forward to `render_link_url` + - If the link token has a class attribute containing `external`, + forward to `render_link_url` + - If the link is an id link (e.g. `#id`), forward to `render_link_anchor` + - If the link has a schema, and the schema is in `url_schemes` (e.g. `http:`), + forward to `render_link_url` + - If the link has an `inv:` schema, forward to `render_link_inventory` + - If the link is an autolink/linkify type link, forward to `render_link_url` + - Otherwise, forward to `render_link_internal` + """ + if ( + self.md_config.commonmark_only + or self.md_config.gfm_only + or self.md_config.all_links_external + ): + return self.render_link_url(token) + + if "class" in token.attrs and "external" in str(token.attrs["class"]).split(): + return self.render_link_url(token) + + href = cast(str, token.attrGet("href") or "") + if href.startswith("#"): + return self.render_link_anchor(token, href) + + scheme_match = REGEX_SCHEME.match(href) + scheme = None if scheme_match is None else scheme_match.group(1) + if scheme in self.md_config.url_schemes: + return self.render_link_url(token, self.md_config.url_schemes[scheme]) + + if scheme == "inv": + return self.render_link_inventory(token) + if scheme == "path": + return self.render_link_path(token) + if scheme == "project": + return self.render_link_project(token) + + if token.info == "auto": + # handles both autolink and linkify + return self.render_link_url(token) + + return self.render_link_unknown(token) + + def render_link_url( + self, token: SyntaxTreeNode, conversion: None | UrlSchemeType = None + ) -> None: + """Render link token (including autolink and linkify), + where the link has been identified as an external URL. + """ + ref_node = nodes.reference() + self.add_line_and_source_path(ref_node, token) + attribute_keys = ["class", "id", "reftitle", "target", "rel"] + if self.md_config.links_external_new_tab: + token.attrs["target"] = "_blank" + token.attrs["rel"] = "noreferer noopener" + self.copy_attributes( + token, ref_node, attribute_keys, aliases={"title": "reftitle"} + ) + uri = cast(str, token.attrGet("href") or "") + implicit_text: str | None = None + + if conversion is not None: + # implicit_template: str | None = None + # if isinstance(conversion, (list, tuple)): + # href_template, implicit_template = conversion + # else: + # href_template = conversion + # markdown-it encodes unsafe characters with percent-encoding + # we want to get back the original, source input + uri = self.md.normalizeLinkText(uri) + _parsed = urlparse(uri) + parsed = { + "uri": uri, + "scheme": _parsed.scheme, + "netloc": _parsed.netloc, + "path": _parsed.path, + "params": _parsed.params, + "query": _parsed.query, + "fragment": _parsed.fragment, + } + # Note we specifically do not use jinja2 here, + # to restrict the scope of the templating language, + # so that it can be used in a language agnostic way + if "url" in conversion: + uri = re.sub( + REGEX_URI_TEMPLATE, + lambda match: parsed.get(match.group(1), ""), + conversion["url"], + ) + uri = self.md.normalizeLink(uri) + if "title" in conversion and (token.info == "auto" or not token.children): + implicit_text = re.sub( + REGEX_URI_TEMPLATE, + lambda match: parsed.get(match.group(1), ""), + conversion["title"], + ) + if "classes" in conversion: + ref_node["classes"].extend(conversion["classes"]) + + ref_node["refuri"] = escapeHtml(uri) + if implicit_text is not None: + with self.current_node_context(ref_node, append=True): + self.current_node.append(nodes.Text(implicit_text)) + else: + with self.current_node_context(ref_node, append=True): + self.render_children(token) + + def render_link_path(self, token: SyntaxTreeNode) -> None: + """Render a link token like `<path:...>`.""" + self.create_warning( + "`path:` scheme not yet supported in docutils", + MystWarnings.NOT_SUPPORTED, + line=token_line(token, 0), + append_to=self.current_node, + ) + return self.render_link_url(token) + + def render_link_project(self, token: SyntaxTreeNode) -> None: + """Render a link token like `<project:...>`.""" + destination = cast(str, token.attrGet("href") or "") + if destination.startswith("project:"): + destination = destination[8:] + if destination.startswith("#"): + return self.render_link_anchor(token, destination) + self.create_warning( + "`project:` scheme for file paths not yet supported in docutils", + MystWarnings.NOT_SUPPORTED, + line=token_line(token, 0), + append_to=self.current_node, + ) + return self.render_link_url(token) + + def render_link_anchor(self, token: SyntaxTreeNode, target: str) -> None: + """Render link token like `[text](#target)`, to a local target. + + :target: the target id, e.g. `#target` + """ + ref_node = nodes.reference() + self.add_line_and_source_path(ref_node, token) + ref_node["id_link"] = True + ref_node["refuri"] = self.md.normalizeLinkText(target) + self.copy_attributes( + token, ref_node, ("class", "id", "reftitle"), aliases={"title": "reftitle"} + ) + self.current_node.append(ref_node) + if token.info != "auto": + with self.current_node_context(ref_node): + self.render_children(token) + + def render_link_unknown(self, token: SyntaxTreeNode) -> None: + """Render link token `[text](link "title")`, + where the link has not been identified as an external URL:: + + <reference refname="link" title="title"> + text + + `text` can contain nested syntax, e.g. `[**bold**](link "title")`. + + Note, this is overridden by `SphinxRenderer`, to use `pending_xref` nodes. + """ + ref_node = nodes.reference() + self.add_line_and_source_path(ref_node, token) + self.copy_attributes( + token, ref_node, ("class", "id", "reftitle"), aliases={"title": "reftitle"} + ) + ref_node["refname"] = cast(str, token.attrGet("href") or "") + self.document.note_refname(ref_node) + with self.current_node_context(ref_node, append=True): + self.render_children(token) + + def render_link_inventory(self, token: SyntaxTreeNode) -> None: + r"""Create a link to an inventory object. + + This assumes the href is of the form `<scheme>:<path>#<target>`. + The path is of the form `<invs>:<domains>:<otypes>`, + where each of the parts is optional, hence `<scheme>:#<target>` is also valid. + Each of the path parts can contain the `*` wildcard, for example: + `<scheme>:key:*:obj#targe*`. + `\*` is treated as a plain `*`. + """ + + # markdown-it encodes unsafe characters with percent-encoding + # we want to get back the original, source input + href = self.md.normalizeLinkText(cast(str, token.attrGet("href") or "")) + + # note if the link had explicit text or not (autolinks are always implicit) + explicit = (token.info != "auto") and bool(token.children) + + # split the href up into parts + uri_parts = urlparse(href) + target = uri_parts.fragment + invs, domains, otypes = None, None, None + if uri_parts.path: + path_parts = uri_parts.path.split(":") + with suppress(IndexError): + invs = path_parts[0] + domains = path_parts[1] + otypes = path_parts[2] + + # find the matches + matches = self.get_inventory_matches( + target=target, invs=invs, domains=domains, otypes=otypes + ) + + # warn for 0 or >1 matches + if not matches: + filter_str = inventory.filter_string(invs, domains, otypes, target) + self.create_warning( + f"No matches for {filter_str!r}", + MystWarnings.IREF_MISSING, + line=token_line(token, default=0), + append_to=self.current_node, + ) + return + if len(matches) > 1: + show_num = 3 + filter_str = inventory.filter_string(invs, domains, otypes, target) + matches_str = ", ".join( + [ + inventory.filter_string(m.inv, m.domain, m.otype, m.name) + for m in matches[:show_num] + ] + ) + if len(matches) > show_num: + matches_str += ", ..." + self.create_warning( + f"Multiple matches for {filter_str!r}: {matches_str}", + MystWarnings.IREF_AMBIGUOUS, + line=token_line(token, default=0), + append_to=self.current_node, + ) + + # create the docutils node + match = matches[0] + ref_node = nodes.reference("", "", internal=False) + ref_node["inv_match"] = inventory.filter_string( + match.inv, match.domain, match.otype, match.name + ) + self.add_line_and_source_path(ref_node, token) + self.copy_attributes( + token, ref_node, ("class", "id", "reftitle"), aliases={"title": "reftitle"} + ) + ref_node["refuri"] = ( + posixpath.join(match.base_url, match.loc) if match.base_url else match.loc + ) + if "reftitle" not in ref_node: + ref_node["reftitle"] = f"{match.project} {match.version}".strip() + self.current_node.append(ref_node) + if explicit: + with self.current_node_context(ref_node): + self.render_children(token) + elif match.text: + ref_node.append(nodes.Text(match.text)) + else: + ref_node.append(nodes.literal(match.name, match.name)) + + def get_inventory_matches( + self, + *, + invs: str | None, + domains: str | None, + otypes: str | None, + target: str | None, + ) -> list[inventory.InvMatch]: + """Return inventory matches. + + This will be overridden for sphinx, to use intersphinx config. + """ + if self._inventories is None: + self._inventories = {} + for key, (uri, path) in self.md_config.inventories.items(): + load_path = posixpath.join(uri, "objects.inv") if path is None else path + self.reporter.info(f"Loading inventory {key!r}: {load_path}") + try: + inv = inventory.fetch_inventory(load_path, base_url=uri) + except Exception as exc: + self.create_warning( + f"Failed to load inventory {key!r}: {exc}", + MystWarnings.INV_LOAD, + ) + else: + self._inventories[key] = inv + + return list( + inventory.filter_inventories( + self._inventories, + invs=invs, + domains=domains, + otypes=otypes, + targets=target, + ) + ) + + def render_html_inline(self, token: SyntaxTreeNode) -> None: + self.render_html_block(token) + + def render_html_block(self, token: SyntaxTreeNode) -> None: + node_list = html_to_nodes(token.content, token_line(token), self) + self.current_node.extend(node_list) + + def render_image(self, token: SyntaxTreeNode) -> None: + img_node = nodes.image() + self.add_line_and_source_path(img_node, token) + destination = cast(str, token.attrGet("src") or "") + + if self.md_env.get( + "relative-images", None + ) is not None and not REGEX_SCHEME.match(destination): + # make the path relative to an "including" document + # this is set when using the `relative-images` option of the MyST `include` directive + destination = os.path.normpath( + os.path.join( + self.md_env.get("relative-images", ""), + os.path.normpath(destination), + ) + ) + + img_node["uri"] = destination + + img_node["alt"] = self.renderInlineAsText(token.children or []) + + self.copy_attributes( + token, + img_node, + ("class", "id", "title", "width", "height", "align"), + converters={ + "width": directives.length_or_percentage_or_unitless, + "height": directives.length_or_unitless, + "align": lambda x: directives.choice(x, ("left", "center", "right")), + }, + aliases={"w": "width", "h": "height", "a": "align"}, + ) + + self.current_node.append(img_node) + + # ### render methods for plugin tokens + + def render_span(self, token: SyntaxTreeNode) -> None: + """Render an inline span token.""" + node = nodes.inline() + self.add_line_and_source_path(node, token) + self.copy_attributes(token, node, ("class", "id")) + with self.current_node_context(node, append=True): + self.render_children(token) + + def render_front_matter(self, token: SyntaxTreeNode) -> None: + """Pass document front matter data.""" + position = token_line(token, default=0) + + if isinstance(token.content, str): + try: + data = yaml.safe_load(token.content) + except (yaml.parser.ParserError, yaml.scanner.ScannerError): + self.create_warning( + "Malformed YAML", + MystWarnings.MD_TOPMATTER, + line=position, + append_to=self.current_node, + ) + return + else: + data = token.content + + if not isinstance(data, dict): + self.create_warning( + f"YAML is not a dict: {type(data)}", + MystWarnings.MD_TOPMATTER, + line=position, + append_to=self.current_node, + ) + return + + fields = { + k: v + for k, v in data.items() + if k not in ("myst", "mystnb", "substitutions", "html_meta") + } + if fields: + field_list = self.dict_to_fm_field_list( + fields, language_code=self.document.settings.language_code + ) + self.current_node.append(field_list) + + if data.get("title") and self.md_config.title_to_header: + self.nested_render_text(f"# {data['title']}", 0) + + def dict_to_fm_field_list( + self, data: dict[str, Any], language_code: str, line: int = 0 + ) -> nodes.field_list: + """Render each key/val pair as a docutils ``field_node``. + + Bibliographic keys below will be parsed as Markdown, + all others will be left as literal text. + + The field list should be at the start of the document, + and will then be converted to a `docinfo` node during the + `docutils.docutils.transforms.frontmatter.DocInfo` transform (priority 340), + and bibliographic keys (or their translation) will be converted to nodes:: + + {'author': docutils.nodes.author, + 'authors': docutils.nodes.authors, + 'organization': docutils.nodes.organization, + 'address': docutils.nodes.address, + 'contact': docutils.nodes.contact, + 'version': docutils.nodes.version, + 'revision': docutils.nodes.revision, + 'status': docutils.nodes.status, + 'date': docutils.nodes.date, + 'copyright': docutils.nodes.copyright, + 'dedication': docutils.nodes.topic, + 'abstract': docutils.nodes.topic} + + Also, the 'dedication' and 'abstract' will be placed outside the `docinfo`, + and so will always be shown in the document. + + If using sphinx, this `docinfo` node will later be extracted from the AST, + by the `DoctreeReadEvent` transform (priority 880), + calling `MetadataCollector.process_doc`. + In this case keys and values will be converted to strings and stored in + `app.env.metadata[app.env.docname]` + + See + https://www.sphinx-doc.org/en/master/usage/restructuredtext/field-lists.html + for docinfo fields used by sphinx. + + """ + field_list = nodes.field_list() + field_list.source, field_list.line = self.document["source"], line + + bibliofields = get_language(language_code).bibliographic_fields + + for key, value in data.items(): + if not isinstance(value, str | int | float | date | datetime): + value = json.dumps(value) + value = str(value) + body = nodes.paragraph() + body.source, body.line = self.document["source"], line + if key in bibliofields: + with self.current_node_context(body): + self.nested_render_text(value, line, inline=True) + else: + body += nodes.literal(value, value) + + field_node = nodes.field() + field_node.source = value + field_node += nodes.field_name(key, "", nodes.Text(key)) + field_node += nodes.field_body(value, *[body]) + field_list += field_node + + return field_list + + def render_table(self, token: SyntaxTreeNode) -> None: + # markdown-it table always contains at least a header: + assert token.children + header = token.children[0] + # with one header row + assert header.children + header_row = header.children[0] + assert header_row.children + + # top-level element + table = nodes.table() + table["classes"] += ["colwidths-auto"] + self.copy_attributes(token, table, ("class", "id")) + self.add_line_and_source_path(table, token) + self.current_node.append(table) + + # column settings element + maxcols = len(header_row.children) + colwidths = [100 // maxcols] * maxcols + tgroup = nodes.tgroup(cols=len(colwidths)) + table += tgroup + for colwidth in colwidths: + colspec = nodes.colspec(colwidth=colwidth) + tgroup += colspec + + # header + thead = nodes.thead() + tgroup += thead + with self.current_node_context(thead): + self.render_table_row(header_row) + + # body + if len(token.children) > 1: + body = token.children[1] + tbody = nodes.tbody() + tgroup += tbody + with self.current_node_context(tbody): + for body_row in body.children or []: + self.render_table_row(body_row) + + def render_table_row(self, token: SyntaxTreeNode) -> None: + row = nodes.row() + with self.current_node_context(row, append=True): + for child in token.children or []: + entry = nodes.entry() + para = nodes.paragraph( + child.children[0].content if child.children else "" + ) + style = child.attrGet("style") # i.e. the alignment when using e.g. :-- + if style and style in ( + "text-align:left", + "text-align:right", + "text-align:center", + ): + entry["classes"].append(f"text-{cast(str, style).split(':')[1]}") + with ( + self.current_node_context(entry, append=True), + self.current_node_context(para, append=True), + ): + self.render_children(child) + + def render_s(self, token: SyntaxTreeNode) -> None: + """Render a strikethrough token.""" + # TODO strikethrough not currently directly supported in docutils + self.create_warning( + "Strikethrough is currently only supported in HTML output", + MystWarnings.STRIKETHROUGH, + line=token_line(token, 0), + append_to=self.current_node, + ) + self.current_node.append(nodes.raw("", "<s>", format="html")) + self.render_children(token) + self.current_node.append(nodes.raw("", "</s>", format="html")) + + def render_math_inline(self, token: SyntaxTreeNode) -> None: + content = token.content + node = nodes.math(content, content) + self.add_line_and_source_path(node, token) + self.current_node.append(node) + + def render_math_inline_double(self, token: SyntaxTreeNode) -> None: + content = token.content + node = nodes.math_block(content, content, nowrap=False, number=None) + self.add_line_and_source_path(node, token) + self.current_node.append(node) + + def render_math_single(self, token: SyntaxTreeNode) -> None: + content = token.content + node = nodes.math(content, content) + self.add_line_and_source_path(node, token) + self.current_node.append(node) + + def render_math_block(self, token: SyntaxTreeNode) -> None: + content = token.content + node = nodes.math_block(content, content, nowrap=False, number=None) + self.add_line_and_source_path(node, token) + self.current_node.append(node) + + def render_math_block_label(self, token: SyntaxTreeNode) -> None: + content = token.content + label = token.info + node = nodes.math_block(content, content, nowrap=False, number=None) + self.add_line_and_source_path(node, token) + name = nodes.fully_normalize_name(label) + node["names"].append(name) + self.document.note_explicit_target(node, node) + self.current_node.append(node) + + def render_amsmath(self, token: SyntaxTreeNode) -> None: + # note docutils does not currently support the nowrap attribute + # or equation numbering, so this is overridden in the sphinx renderer + node = nodes.math_block( + token.content, token.content, nowrap=True, classes=["amsmath"] + ) + if token.meta["numbered"] != "*": + node["numbered"] = True + self.add_line_and_source_path(node, token) + self.current_node.append(node) + + def render_footnote_ref(self, token: SyntaxTreeNode) -> None: + """Footnote references are added as auto-numbered, + .i.e. `[^a]` is read as rST `[#a]_` + """ + target = token.meta["label"] + + refnode = nodes.footnote_reference(f"[^{target}]") + self.add_line_and_source_path(refnode, token) + if target.isdigit(): + # a manually numbered footnote, similar to rST ``[1]_`` + refnode += nodes.Text(target) + else: + # an auto-numbered footnote, similar to rST ``[#label]_`` + refnode["auto"] = 1 + self.document.note_autofootnote_ref(refnode) + + refnode["refname"] = target + self.document.note_footnote_ref(refnode) + + self.current_node.append(refnode) + + def render_footnote_reference(self, token: SyntaxTreeNode) -> None: + """Despite the name, this is actually a footnote definition, e.g. `[^a]: ...`""" + target = token.meta["label"] + + if target in self.document.nameids: + # note we chose to directly omit these footnotes in the parser, + # rather than let docutils/sphinx handle them, since otherwise you end up with a confusing warning: + # WARNING: Duplicate explicit target name: "x". [docutils] + # we use [ref.footnote] as the type/subtype, rather than a myst specific warning, + # to make it more aligned with sphinx warnings for unreferenced footnotes + self.create_warning( + f"Duplicate footnote definition found for label: '{target}'", + "footnote", + wtype="ref", + line=token_line(token), + append_to=self.current_node, + ) + return + + footnote = nodes.footnote() + self.add_line_and_source_path(footnote, token) + footnote["names"].append(target) + if target.isdigit(): + # a manually numbered footnote, similar to rST ``.. [1]`` + footnote += nodes.label("", target) + self.document.note_footnote(footnote) + else: + # an auto-numbered footnote, similar to rST ``.. [#label]`` + footnote["auto"] = 1 + self.document.note_autofootnote(footnote) + + self.document.note_explicit_target(footnote, footnote) + with self.current_node_context(footnote, append=True): + self.render_children(token) + + def render_myst_block_break(self, token: SyntaxTreeNode) -> None: + block_break = nodes.comment(token.content, token.content) + block_break["classes"] += ["block_break"] + self.add_line_and_source_path(block_break, token) + self.current_node.append(block_break) + + def render_myst_target(self, token: SyntaxTreeNode) -> None: + text = token.content + name = nodes.fully_normalize_name(text) + target = nodes.target(text) + target["names"].append(name) + self.add_line_and_source_path(target, token) + self.document.note_explicit_target(target, self.current_node) + self.current_node.append(target) + + def render_myst_line_comment(self, token: SyntaxTreeNode) -> None: + self.current_node.append(nodes.comment(token.content, token.content.strip())) + + def render_myst_role(self, token: SyntaxTreeNode) -> None: + name = token.meta["name"] + text = token.content + rawsource = f":{name}:`{token.content}`" + lineno = token_line(token) if token.map else 0 + role_func, messages = roles.role( + name, self.language_module_rst, lineno, self.reporter + ) + if not role_func: + self.create_warning( + f'Unknown interpreted text role "{name}".', + MystWarnings.UNKNOWN_ROLE, + line=lineno, + append_to=self.current_node, + ) + self.current_node.extend(messages) + return + inliner = MockInliner(self) + _nodes, messages2 = role_func(name, rawsource, text, lineno, inliner) + self.current_node += _nodes + messages2 + + def render_colon_fence(self, token: SyntaxTreeNode) -> None: + """Render a div block, with ``:`` colon delimiters.""" + # split the info into possible :::name arguments + parts = (token.info.strip() if token.info else "").split(maxsplit=1) + name = parts[0] if parts else "" + arguments = parts[1] if len(parts) > 1 else "" + + if name.startswith("{") and name.endswith("}"): + if token.content.startswith(":::"): + # the content starts with a nested fence block, + # but must distinguish between ``:options:``, so we add a new line + assert token.token is not None, '"colon_fence" must have a `token`' + linear_token = token.token.copy() + linear_token.content = "\n" + linear_token.content + token.token = linear_token + return self.render_directive(token, name[1:-1], arguments) + + container = nodes.container(is_div=True) + self.add_line_and_source_path(container, token) + self.copy_attributes(token, container, ("class", "id")) + if name: + # note, as per djot, the name is added to the end of the classes + container["classes"].append(name) + with self.current_node_context(container, append=True): + self.nested_render_text(token.content, token_line(token, 0)) + + def render_dl(self, token: SyntaxTreeNode) -> None: + """Render a definition list.""" + node = nodes.definition_list(classes=["simple", "myst"]) + self.copy_attributes(token, node, ("class", "id")) + self.add_line_and_source_path(node, token) + make_terms = ("glossary" in node["classes"]) and (self.sphinx_env is not None) + with self.current_node_context(node, append=True): + item = None + for child in token.children or []: + if child.type == "dt": + item = nodes.definition_list_item() + self.add_line_and_source_path(item, child) + with self.current_node_context(item, append=True): + term = nodes.term( + child.children[0].content if child.children else "" + ) + self.add_line_and_source_path(term, child) + with self.current_node_context(term): + self.render_children(child) + if make_terms: + from sphinx.domains.std import make_glossary_term + + term = make_glossary_term( + self.sphinx_env, # type: ignore[arg-type] + term.children, + None, + term.source, + term.line, + node_id=None, + document=self.document, + ) + self.current_node.append(term) + elif child.type == "dd": + if item is None: + error = self.reporter.error( + ( + "Found a definition in a definition list, " + "with no preceding term" + ), + # nodes.literal_block(content, content), + line=token_line(child), + ) + self.current_node += [error] + with self.current_node_context(item): + definition = nodes.definition() + self.add_line_and_source_path(definition, child) + with self.current_node_context(definition, append=True): + self.render_children(child) + else: + error_msg = self.reporter.error( + ( + "Expected a term/definition as a child of a definition list" + f", but found a: {child.type}" + ), + # nodes.literal_block(content, content), + line=token_line(child), + ) + self.current_node += [error_msg] + + def render_field_list(self, token: SyntaxTreeNode) -> None: + """Render a field list.""" + field_list = nodes.field_list(classes=["myst"]) + self.copy_attributes(token, field_list, ("class", "id")) + self.add_line_and_source_path(field_list, token) + with self.current_node_context(field_list, append=True): + # raise ValueError(token.pretty(show_text=True)) + children = (token.children or [])[:] + while children: + child = children.pop(0) + if child.type != "fieldlist_name": + error_msg = self.reporter.error( + ( + "Expected a fieldlist_name as a child of a field_list" + f", but found a: {child.type}" + ), + # nodes.literal_block(content, content), + line=token_line(child), + ) + self.current_node += [error_msg] + break + field = nodes.field() + self.add_line_and_source_path(field, child) + field_list += field + field_name = nodes.field_name() + self.add_line_and_source_path(field_name, child) + field += field_name + with self.current_node_context(field_name): + self.render_children(child) + field_body = nodes.field_body() + self.add_line_and_source_path(field_name, child) + field += field_body + if children and children[0].type == "fieldlist_body": + child = children.pop(0) + with self.current_node_context(field_body): + self.render_children(child) + + def render_restructuredtext(self, token: SyntaxTreeNode) -> None: + """Render the content of the token as restructuredtext.""" + # copy necessary elements (source, line no, env, reporter) + newdoc = make_document() + newdoc["source"] = self.document["source"] + newdoc.settings = self.document.settings + newdoc.reporter = self.reporter + # pad the line numbers artificially so they offset with the fence block + pseudosource = ("\n" * token_line(token)) + token.content + # actually parse the rst into our document + MockRSTParser().parse(pseudosource, newdoc) + for node in newdoc: + if node["names"]: + self.document.note_explicit_target(node, node) + self.current_node.extend(newdoc.children) + + def render_directive( + self, + token: SyntaxTreeNode, + name: str, + arguments: str, + *, + additional_options: dict[str, str] | None = None, + ) -> None: + """Render special fenced code blocks as directives. + + :param token: the token to render + :param name: the name of the directive + :param arguments: The remaining text on the same line as the directive name. + """ + position = token_line(token) + nodes_list = self.run_directive( + name, + arguments, + token.content, + position, + additional_options=additional_options, + ) + self.current_node += nodes_list + + def run_directive( + self, + name: str, + first_line: str, + content: str, + position: int, + additional_options: dict[str, str] | None = None, + ) -> list[nodes.Element]: + """Run a directive and return the generated nodes. + + :param name: the name of the directive + :param first_line: The text on the same line as the directive name. + May be an argument or body text, dependent on the directive + :param content: All text after the first line. Can include options. + :param position: The line number of the first line + :param additional_options: Additional options to add to the directive, + above those parsed from the content. + + """ + self.document.current_line = position + + # get directive class + output: tuple[Directive | None, list[SystemMessage]] = directives.directive( + name, self.language_module_rst, self.document + ) + directive_class, messages = output + if not directive_class: + warn_node = self.create_warning( + f"Unknown directive type: {name!r}", + MystWarnings.UNKNOWN_DIRECTIVE, + line=position, + ) + return ([warn_node] if warn_node else []) + messages + + if issubclass(directive_class, Include): + # this is a Markdown only option, + # to allow for altering relative image reference links + directive_class.option_spec["relative-images"] = directives.flag + directive_class.option_spec["relative-docs"] = directives.path + directive_class.option_spec["heading-offset"] = directives.nonnegative_int + + try: + parsed = parse_directive_text( + directive_class, + first_line, + content, + line=position, + additional_options=additional_options, + ) + except MarkupError as error: + error = self.reporter.error( + f"Directive '{name}': {error}", + line=position, + ) + return [error] + + for _warning in parsed.warnings: + self.create_warning( + f"{name!r}: {_warning.msg}", + _warning.type, + line=_warning.lineno if _warning.lineno is not None else position, + append_to=self.current_node, + ) + + # initialise directive + if issubclass(directive_class, Include): + directive_instance = MockIncludeDirective( + self, + name=name, + klass=directive_class, + arguments=parsed.arguments, + options=parsed.options, + body=parsed.body, + lineno=position, + ) + else: + state_machine = MockStateMachine(self, position) + state = MockState(self, state_machine, position) + directive_instance = directive_class( + name=name, + # the list of positional arguments + arguments=parsed.arguments, + # a dictionary mapping option names to values + options=parsed.options, + # the directive content line by line + content=StringList(parsed.body, self.document["source"]), + # the absolute line number of the first line of the directive + lineno=position, + # the line offset of the first line of the content + content_offset=parsed.body_offset, + # a string containing the entire directive + block_text="\n".join(parsed.body), + state=state, + state_machine=state_machine, + ) + + # run directive + try: + result = directive_instance.run() + except DirectiveError as error: + msg_node = self.reporter.system_message( + error.level, error.msg, line=position + ) + msg_node += nodes.literal_block(content, content) + result = [msg_node] + except MockingError as exc: + error_msg = self.reporter.error( + f"Directive '{name}' cannot be mocked: {exc.__class__.__name__}: {exc}", + nodes.literal_block(content, content), + line=position, + ) + return [error_msg] + + assert isinstance( + result, list + ), f'Directive "{name}" must return a list of nodes.' + for i in range(len(result)): + assert isinstance( + result[i], nodes.Node + ), f'Directive "{name}" returned non-Node object (index {i}): {result[i]}' + return result + + def render_substitution_inline(self, token: SyntaxTreeNode) -> None: + """Render inline substitution {{key}}.""" + self.render_substitution(token, inline=True) + + def render_substitution_block(self, token: SyntaxTreeNode) -> None: + """Render block substitution {{key}}.""" + self.render_substitution(token, inline=False) + + def render_substitution(self, token: SyntaxTreeNode, inline: bool) -> None: + """Substitutions are rendered by: + + 1. Combining global substitutions with front-matter substitutions + to create a variable context (front-matter takes priority) + 2. Add the sphinx `env` to the variable context (if available) + 3. Create the string content with Jinja2 (passing it the variable context) + 4. If the substitution is inline and not a directive, + parse to nodes ignoring block syntaxes (like lists or block-quotes), + otherwise parse to nodes with all syntax rules. + + """ + position = token_line(token) + + # front-matter substitutions take priority over config ones + variable_context: dict[str, Any] = {**self.md_config.substitutions} + if self.sphinx_env is not None: + variable_context["env"] = self.sphinx_env + + # fail on undefined variables + env = jinja2.Environment(undefined=jinja2.StrictUndefined) + + # try rendering + try: + rendered = env.from_string(f"{{{{{token.content}}}}}").render( + variable_context + ) + except Exception as error: + self.create_warning( + f"Substitution error:{error.__class__.__name__}: {error}", + MystWarnings.SUBSTITUTION, + line=position, + append_to=self.current_node, + ) + return + + # handle circular references + ast = env.parse(f"{{{{{token.content}}}}}") + references = { + n.name for n in ast.find_all(jinja2.nodes.Name) if n.name != "env" + } + self.document.sub_references = getattr(self.document, "sub_references", set()) + cyclic = references.intersection(self.document.sub_references) + if cyclic: + self.create_warning( + f"circular substitution reference: {cyclic}", + MystWarnings.SUBSTITUTION, + line=position, + append_to=self.current_node, + ) + return + + # TODO improve error reporting; + # at present, for a multi-line substitution, + # an error may point to a line lower than the substitution + # should it point to the source of the substitution? + # or the error message should at least indicate that its a substitution + + # we record used references before nested parsing, then remove them after + self.document.sub_references.update(references) + try: + if inline and not REGEX_DIRECTIVE_START.match(rendered): + self.nested_render_text(rendered, position, inline=True) + else: + self.nested_render_text(rendered, position) + finally: + self.document.sub_references.difference_update(references) + + +def html_meta_to_nodes( + data: dict[str, Any], document: nodes.document, line: int, reporter: Reporter +) -> list[nodes.pending | nodes.system_message]: + """Replicate the `meta` directive, + by converting a dictionary to a list of pending meta nodes + + See: + https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#html-metadata + """ + if not data: + return [] + + output = [] + + for key, value in data.items(): + content = str(value or "") + meta_node = nodes.meta(content) + meta_node.source = document["source"] + meta_node.line = line + meta_node["content"] = content + try: + if not content: + raise ValueError("No content") + for i, key_part in enumerate(key.split()): + if "=" not in key_part and i == 0: + meta_node["name"] = key_part + continue + if "=" not in key_part: + raise ValueError(f"no '=' in {key_part}") + attr_name, attr_val = key_part.split("=", 1) + if not (attr_name and attr_val): + raise ValueError(f"malformed {key_part}") + meta_node[attr_name.lower()] = attr_val + except ValueError as error: + msg = reporter.error(f'Error parsing meta tag attribute "{key}": {error}.') + output.append(msg) + continue + + pending = nodes.pending( + Filter, + {"component": "writer", "format": "html", "nodes": [meta_node]}, + ) + document.note_pending(pending) + output.append(pending) + + return output + + +def clean_astext(node: nodes.Element) -> str: + """Like node.astext(), but ignore images. + Copied from sphinx. + """ + node = node.deepcopy() + for img in findall(node)(nodes.image): + img["alt"] = "" + for raw in list(findall(node)(nodes.raw)): + raw.parent.remove(raw) + return node.astext() + + +_SLUGIFY_CLEAN_REGEX = re.compile(r"[^\w\u4e00-\u9fff\- ]") + + +def default_slugify(title: str) -> str: + """Default slugify function. + + This aims to mimic the GitHub Markdown format, see: + + - https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/toc_filter.rb + - https://gist.github.com/asabaylus/3071099 + """ + return _SLUGIFY_CLEAN_REGEX.sub("", title.lower().replace(" ", "-")) + + +def compute_unique_slug( + token_tree: SyntaxTreeNode, + slugs: Iterable[str], + slug_func: None | Callable[[str], str] = None, +) -> str: + """Compute the slug for a token. + + This directly mirrors the logic in `mdit_py_plugins.anchors_plugin` + """ + slug_func = default_slugify if slug_func is None else slug_func + tokens = token_tree.to_tokens() + inline_token = tokens[1] + title = "".join( + child.content + for child in (inline_token.children or []) + if child.type in ["text", "code_inline"] + ) + slug = slug_func(title) + i = 1 + while slug in slugs: + slug = f"{slug}-{i}" + i += 1 + return slug diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/html_to_nodes.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/html_to_nodes.py new file mode 100644 index 000000000..713cc0404 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/html_to_nodes.py @@ -0,0 +1,139 @@ +"""Convert HTML to docutils nodes.""" + +from __future__ import annotations + +import re +from typing import TYPE_CHECKING + +from docutils import nodes + +from myst_parser.parsers.parse_html import Data, tokenize_html +from myst_parser.warnings_ import MystWarnings + +if TYPE_CHECKING: + from .base import DocutilsRenderer + + +def make_error( + document: nodes.document, error_msg: str, text: str, line_number: int +) -> nodes.system_message: + return document.reporter.error( + error_msg, + nodes.literal_block(text, text), + line=line_number, + ) + + +OPTION_KEYS_IMAGE = {"class", "alt", "height", "width", "align", "name"} +# note: docutils also has scale and target + +OPTION_KEYS_ADMONITION = {"class", "name"} + +# See https://github.com/micromark/micromark-extension-gfm-tagfilter +RE_FLOW = re.compile( + r"<(\/?)(iframe|noembed|noframes|plaintext|script|style|title|textarea|xmp)(?=[\t\n\f\r />])", + re.IGNORECASE, +) + + +def default_html(text: str, source: str, line_number: int) -> list[nodes.Element]: + raw_html = nodes.raw("", text, format="html") + raw_html.source = source + raw_html.line = line_number + return [raw_html] + + +def html_to_nodes( + text: str, line_number: int, renderer: DocutilsRenderer +) -> list[nodes.Element]: + """Convert HTML to docutils nodes.""" + if renderer.md_config.gfm_only: + text, _ = RE_FLOW.subn(lambda s: s.group(0).replace("<", "<"), text) + + enable_html_img = "html_image" in renderer.md_config.enable_extensions + enable_html_admonition = "html_admonition" in renderer.md_config.enable_extensions + if not (enable_html_img or enable_html_admonition): + return default_html(text, renderer.document["source"], line_number) + + # parse the HTML to AST + try: + root = tokenize_html(text).strip(inplace=True, recurse=False) + except Exception: + msg_node = renderer.create_warning( + "HTML could not be parsed", MystWarnings.HTML_PARSE, line=line_number + ) + return ([msg_node] if msg_node else []) + default_html( + text, renderer.document["source"], line_number + ) + + if len(root) < 1: + # if empty + return default_html(text, renderer.document["source"], line_number) + + if not all( + (enable_html_img and child.name == "img") + or ( + enable_html_admonition + and child.name == "div" + and "admonition" in child.attrs.classes + ) + for child in root + ): + return default_html(text, renderer.document["source"], line_number) + + nodes_list = [] + for child in root: + if child.name == "img": + if "src" not in child.attrs: + return [ + renderer.reporter.error( + "<img> missing 'src' attribute", line=line_number + ) + ] + content = "\n".join( + f":{k}: {v}" + for k, v in sorted(child.attrs.items()) + if k in OPTION_KEYS_IMAGE + ) + nodes_list.extend( + renderer.run_directive( + "image", child.attrs["src"], content, line_number + ) + ) + + else: + children = child.strip().children + title = ( + "".join(child.render() for child in children.pop(0)) + if children + and children[0].name in ("div", "p") + and ( + "title" in children[0].attrs.classes + or "admonition-title" in children[0].attrs.classes + ) + else "Note" + ) + + options = "\n".join( + f":{k}: {v}" + for k, v in sorted(child.attrs.items()) + if k in OPTION_KEYS_ADMONITION + ).rstrip() + new_children = [] + for child in children: + if child.name == "p": + new_children.extend(child.children) + new_children.append(Data("\n\n")) + else: + new_children.append(child) + content = ( + options + + ("\n\n" if options else "") + + "".join(child.render() for child in new_children).lstrip() + ) + + nodes_list.extend( + renderer.run_directive("admonition", title, content, line_number) + ) + + return nodes_list diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/sphinx_.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/sphinx_.py new file mode 100644 index 000000000..b9b29225d --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/sphinx_.py @@ -0,0 +1,241 @@ +"""Convert Markdown-it tokens to docutils nodes, including sphinx specific elements.""" + +from __future__ import annotations + +import os +from pathlib import Path +from typing import cast +from uuid import uuid4 + +from docutils import nodes +from markdown_it.tree import SyntaxTreeNode +from sphinx import addnodes +from sphinx.domains.math import MathDomain +from sphinx.environment import BuildEnvironment +from sphinx.ext.intersphinx import InventoryAdapter +from sphinx.util import logging + +from myst_parser import inventory +from myst_parser.mdit_to_docutils.base import DocutilsRenderer, token_line +from myst_parser.warnings_ import MystWarnings + +LOGGER = logging.getLogger(__name__) + + +class SphinxRenderer(DocutilsRenderer): + """A markdown-it-py renderer to populate (in-place) a `docutils.document` AST. + + This is sub-class of `DocutilsRenderer` that handles sphinx specific aspects, + such as cross-referencing. + """ + + @property + def sphinx_env(self) -> BuildEnvironment: + return self.document.settings.env + + def _process_wrap_node( + self, + wrap_node: nodes.Element, + token: SyntaxTreeNode, + explicit: bool, + classes: list[str], + path_dest: str, + ): + """Process a wrap node, which is a node that wraps a link.""" + self.add_line_and_source_path(wrap_node, token) + self.copy_attributes(token, wrap_node, ("class", "id", "title")) + self.current_node.append(wrap_node) + + if explicit: + inner_node = nodes.inline("", "", classes=classes) + with self.current_node_context(inner_node): + self.render_children(token) + elif isinstance(wrap_node, addnodes.download_reference): + inner_node = nodes.literal(path_dest, path_dest, classes=classes) + else: + inner_node = nodes.inline("", "", classes=classes) + + wrap_node.append(inner_node) + + def _handle_relative_docs(self, destination: str) -> str: + """Make the path relative to an "including" document + + This is set when using the `relative-docs` option of the MyST `include` directive + """ + relative_include = self.md_env.get("relative-docs", None) + if relative_include is not None and destination.startswith(relative_include[0]): + source_dir, include_dir = relative_include[1:] + destination = os.path.relpath( + os.path.join(include_dir, os.path.normpath(destination)), source_dir + ) + return destination + + def render_link_project(self, token: SyntaxTreeNode) -> None: + destination = cast(str, token.attrGet("href") or "") + if destination.startswith("project:"): + destination = destination[8:] + if destination.startswith("#"): + return self.render_link_anchor(token, destination) + + if not self.sphinx_env.srcdir: # not set in some test situations + return self.render_link_url(token) + + destination = self.md.normalizeLinkText(destination) + destination = self._handle_relative_docs(destination) + path_dest, *_path_ids = destination.split("#", maxsplit=1) + path_id = _path_ids[0] if _path_ids else None + explicit = (token.info != "auto") and (len(token.children or []) > 0) + _, abs_path = self.sphinx_env.relfn2path(path_dest, self.sphinx_env.docname) + docname = self.sphinx_env.path2doc(abs_path) + if not docname: + self.create_warning( + f"Could not find document: {abs_path}", + MystWarnings.XREF_MISSING, + line=token_line(token, 0), + append_to=self.current_node, + ) + return self.render_link_url(token) + wrap_node = addnodes.pending_xref( + refdomain="doc", + reftarget=docname, + reftargetid=path_id, + refdoc=self.sphinx_env.docname, + reftype="myst", + refexplicit=explicit, + ) + classes = ["xref", "myst"] + self._process_wrap_node(wrap_node, token, explicit, classes, destination) + + def render_link_path(self, token: SyntaxTreeNode) -> None: + destination = self.md.normalizeLinkText(cast(str, token.attrGet("href") or "")) + if destination.startswith("path:"): + destination = destination[5:] + destination = self._handle_relative_docs(destination) + explicit = (token.info != "auto") and (len(token.children or []) > 0) + wrap_node = addnodes.download_reference( + refdomain=None, + reftarget=destination, + refdoc=self.sphinx_env.docname, + reftype="myst", + refexplicit=explicit, + ) + classes = ["xref", "download", "myst"] + self._process_wrap_node(wrap_node, token, explicit, classes, destination) + + def render_link_unknown(self, token: SyntaxTreeNode) -> None: + """Render link token `[text](link "title")`, + where the link has not been identified as an external URL. + """ + destination = self.md.normalizeLinkText(cast(str, token.attrGet("href") or "")) + destination = self._handle_relative_docs(destination) + + explicit = (token.info != "auto") and (len(token.children or []) > 0) + kwargs = { + "refdoc": self.sphinx_env.docname, + "reftype": "myst", + "refexplicit": explicit, + } + path_dest, *_path_ids = destination.split("#", maxsplit=1) + path_id = _path_ids[0] if _path_ids else None + + potential_path: None | Path = None + if self.sphinx_env.srcdir: # not set in some test situations + _, path_str = self.sphinx_env.relfn2path(path_dest, self.sphinx_env.docname) + potential_path = Path(path_str) + + if potential_path and potential_path.is_file(): + docname = self.sphinx_env.path2doc(str(potential_path)) + if docname: + wrap_node = addnodes.pending_xref( + refdomain="doc", reftarget=docname, reftargetid=path_id, **kwargs + ) + classes = ["xref", "myst"] + else: + wrap_node = addnodes.download_reference( + refdomain=None, reftarget=path_dest, **kwargs + ) + classes = ["xref", "download", "myst"] + else: + wrap_node = addnodes.pending_xref( + refdomain=None, reftarget=destination, **kwargs + ) + classes = ["xref", "myst"] + + self._process_wrap_node(wrap_node, token, explicit, classes, path_dest) + + def get_inventory_matches( + self, + *, + invs: str | None, + domains: str | None, + otypes: str | None, + target: str | None, + ) -> list[inventory.InvMatch]: + return list( + inventory.filter_sphinx_inventories( + InventoryAdapter(self.sphinx_env).named_inventory, + invs=invs, + domains=domains, + otypes=otypes, + targets=target, + ) + ) + + def render_math_block_label(self, token: SyntaxTreeNode) -> None: + """Render math with referenceable labels, e.g. ``$a=1$ (label)``.""" + label = token.info + content = token.content + node = nodes.math_block( + content, content, nowrap=False, number=None, label=label + ) + target = self.add_math_target(node) + self.add_line_and_source_path(target, token) + self.current_node.append(target) + self.add_line_and_source_path(node, token) + self.current_node.append(node) + + def _random_label(self) -> str: + return str(uuid4()) + + def render_amsmath(self, token: SyntaxTreeNode) -> None: + """Renderer for the amsmath extension.""" + # environment = token.meta["environment"] + content = token.content + + if token.meta["numbered"] != "*": + # TODO how to parse and reference labels within environment? + # for now we give create a unique hash, so the equation will be numbered + # but there will be no reference clashes + label = self._random_label() + node = nodes.math_block( + content, + content, + nowrap=True, + number=None, + classes=["amsmath"], + label=label, + ) + target = self.add_math_target(node) + self.add_line_and_source_path(target, token) + self.current_node.append(target) + else: + node = nodes.math_block( + content, content, nowrap=True, number=None, classes=["amsmath"] + ) + self.add_line_and_source_path(node, token) + self.current_node.append(node) + + def add_math_target(self, node: nodes.math_block) -> nodes.target: + # Code mainly copied from sphinx.directives.patches.MathDirective + + # register label to domain + domain = cast(MathDomain, self.sphinx_env.get_domain("math")) + domain.note_equation(self.sphinx_env.docname, node["label"], location=node) + node["number"] = domain.get_equation_number_for(node["label"]) + node["docname"] = self.sphinx_env.docname + + # create target node + node_id = nodes.make_id("equation-{}".format(node["label"])) + target = nodes.target("", "", ids=[node_id]) + self.document.note_explicit_target(target) + return target diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/transforms.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/transforms.py new file mode 100644 index 000000000..7815dc875 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mdit_to_docutils/transforms.py @@ -0,0 +1,271 @@ +"""Directives that can be applied to both Sphinx and docutils.""" + +from __future__ import annotations + +import typing as t + +from docutils import nodes +from docutils.transforms import Transform +from docutils.transforms.references import Footnotes +from markdown_it.common.normalize_url import normalizeLink + +from myst_parser._compat import findall +from myst_parser.mdit_to_docutils.base import clean_astext +from myst_parser.warnings_ import MystWarnings, create_warning + + +class UnreferencedFootnotesDetector(Transform): + """Detect unreferenced footnotes and emit warnings. + + Replicates https://github.com/sphinx-doc/sphinx/pull/12730, + but also allows for use in docutils (without sphinx). + """ + + default_priority = Footnotes.default_priority + 2 + + # document: nodes.document + + def apply(self, **kwargs: t.Any) -> None: + """Apply the transform.""" + + for node in self.document.footnotes: + # note we do not warn on duplicate footnotes here + # (i.e. where the name has been moved to dupnames) + # since this is already reported by docutils + if not node["backrefs"] and node["names"]: + create_warning( + self.document, + "Footnote [{}] is not referenced.".format(node["names"][0]) + if node["names"] + else node["dupnames"][0], + wtype="ref", + subtype="footnote", + node=node, + ) + for node in self.document.symbol_footnotes: + if not node["backrefs"]: + create_warning( + self.document, + "Footnote [*] is not referenced.", + wtype="ref", + subtype="footnote", + node=node, + ) + for node in self.document.autofootnotes: + # note we do not warn on duplicate footnotes here + # (i.e. where the name has been moved to dupnames) + # since this is already reported by docutils + if not node["backrefs"] and node["names"]: + create_warning( + self.document, + "Footnote [#] is not referenced.", + wtype="ref", + subtype="footnote", + node=node, + ) + + +class SortFootnotes(Transform): + """Sort auto-numbered, labelled footnotes by the order they are referenced. + + This is run before the docutils ``Footnote`` transform, where numbered labels are assigned. + """ + + default_priority = Footnotes.default_priority - 2 + + # document: nodes.document + + def apply(self, **kwargs: t.Any) -> None: + """Apply the transform.""" + if not self.document.settings.myst_footnote_sort: + return + + ref_order: list[str] = [ + node["refname"] + for node in self.document.autofootnote_refs + if "refname" in node + ] + + def _sort_key(node: nodes.footnote) -> int: + if node["names"] and node["names"][0] in ref_order: + return ref_order.index(node["names"][0]) + return 999 + + self.document.autofootnotes.sort(key=_sort_key) + + +class CollectFootnotes(Transform): + """Transform to move footnotes to the end of the document, and sort by label.""" + + default_priority = Footnotes.default_priority + 3 + + # document: nodes.document + + def apply(self, **kwargs: t.Any) -> None: + """Apply the transform.""" + if not self.document.settings.myst_footnote_sort: + return + + footnotes: list[tuple[str, nodes.footnote]] = [] + for footnote in ( + self.document.symbol_footnotes + + self.document.footnotes + + self.document.autofootnotes + ): + label = footnote.children[0] + footnotes.append((label.astext(), footnote)) + + if ( + footnotes + and self.document.settings.myst_footnote_transition + # avoid warning: Document or section may not begin with a transition + and not all(isinstance(c, nodes.footnote) for c in self.document.children) + ): + transition = nodes.transition(classes=["footnotes"]) + transition.source = self.document.source + self.document += transition + + def _sort_key(footnote: tuple[str, nodes.footnote]) -> int | str: + label, _ = footnote + try: + # ensure e.g 10 comes after 2 + return int(label) + except ValueError: + return label + + for _, footnote in sorted(footnotes, key=_sort_key): + footnote.parent.remove(footnote) + self.document += footnote + + +class ResolveAnchorIds(Transform): + """Transform for resolving `[name](#id)` type links.""" + + default_priority = 879 # this is the same as Sphinx's StandardDomain.process_doc + + def apply(self, **kwargs: t.Any) -> None: + """Apply the transform.""" + # gather the implicit heading slugs + # name -> (line, slug, title) + slugs: dict[str, tuple[int, str, str]] = getattr( + self.document, "myst_slugs", {} + ) + + # gather explicit references + # this follows the same logic as Sphinx's StandardDomain.process_doc + explicit: dict[str, tuple[str, None | str]] = {} + for name, is_explicit in self.document.nametypes.items(): + if not is_explicit: + continue + labelid = self.document.nameids[name] + if labelid is None: + continue + if labelid is None: + continue + node = self.document.ids[labelid] + if isinstance(node, nodes.target) and "refid" in node: + # indirect hyperlink targets + node = self.document.ids.get(node["refid"]) + labelid = node["names"][0] + if ( + node.tagname == "footnote" + or "refuri" in node + or node.tagname.startswith("desc_") + ): + # ignore footnote labels, labels automatically generated from a + # link and object descriptions + continue + + implicit_title = None + if node.tagname == "rubric": + implicit_title = clean_astext(node) + if implicit_title is None: + # handle sections and and other captioned elements + for subnode in node: + if isinstance(subnode, nodes.caption | nodes.title): + implicit_title = clean_astext(subnode) + break + if implicit_title is None: + # handle definition lists and field lists + if ( + isinstance(node, nodes.definition_list | nodes.field_list) + and node.children + ): + node = node[0] + if ( + isinstance(node, nodes.field | nodes.definition_list_item) + and node.children + ): + node = node[0] + if isinstance(node, nodes.term | nodes.field_name): + implicit_title = clean_astext(node) + + explicit[name] = (labelid, implicit_title) + + for refnode in findall(self.document)(nodes.reference): + if not refnode.get("id_link"): + continue + + target = refnode["refuri"][1:] + del refnode["refuri"] + + # search explicit first + if target in explicit: + ref_id, implicit_title = explicit[target] + refnode["refid"] = ref_id + if not refnode.children and implicit_title: + refnode += nodes.inline( + implicit_title, implicit_title, classes=["std", "std-ref"] + ) + elif not refnode.children: + refnode += nodes.inline( + "#" + target, "#" + target, classes=["std", "std-ref"] + ) + continue + + # now search implicit + if target in slugs: + _, sect_id, implicit_title = slugs[target] + refnode["refid"] = sect_id + if not refnode.children and implicit_title: + refnode += nodes.inline( + implicit_title, implicit_title, classes=["std", "std-ref"] + ) + continue + + # if still not found, and using sphinx, then create a pending_xref + if hasattr(self.document.settings, "env"): + from sphinx import addnodes + + pending = addnodes.pending_xref( + refdoc=self.document.settings.env.docname, + refdomain=None, + reftype="myst", + reftarget=target, + refexplicit=bool(refnode.children), + ) + inner_node = nodes.inline( + "", "", classes=["xref", "myst"] + refnode["classes"] + ) + for attr in ("ids", "names", "dupnames"): + inner_node[attr] = refnode[attr] + inner_node += refnode.children + pending += inner_node + refnode.parent.replace(refnode, pending) + continue + + # if still not found, and using docutils, then create a warning + # and simply output as a url + + create_warning( + self.document, + f"'myst' reference target not found: {target!r}", + MystWarnings.XREF_MISSING, + line=refnode.line, + append_to=refnode, + ) + refnode["refid"] = normalizeLink(target) + if not refnode.children: + refnode += nodes.inline( + "#" + target, "#" + target, classes=["std", "std-ref"] + ) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mocking.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mocking.py new file mode 100644 index 000000000..61a2b1724 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/mocking.py @@ -0,0 +1,555 @@ +"""This module provides classes to Mock the core components of the docutils.RSTParser, +the key difference being that nested parsing treats the text as Markdown not rST. +""" + +from __future__ import annotations + +import os +import re +import sys +from pathlib import Path +from typing import TYPE_CHECKING, Any + +from docutils import nodes +from docutils.parsers.rst import Directive, DirectiveError +from docutils.parsers.rst import Parser as RSTParser +from docutils.parsers.rst.directives.misc import Include +from docutils.parsers.rst.states import Body, Inliner, RSTStateMachine +from docutils.statemachine import StringList +from docutils.utils import unescape + +from .parsers.directives import MarkupError, parse_directive_text + +if TYPE_CHECKING: + from .mdit_to_docutils.base import DocutilsRenderer + + +class MockingError(Exception): + """An exception to signal an error during mocking of docutils components.""" + + +class MockInliner: + """A mock version of `docutils.parsers.rst.states.Inliner`. + + This is parsed to role functions. + """ + + def __init__(self, renderer: DocutilsRenderer): + """Initialize the mock inliner.""" + self._renderer = renderer + # here we mock that the `parse` method has already been called + # which is where these attributes are set (via the RST state Memo) + self.document = renderer.document + self.reporter = renderer.document.reporter + self.language = renderer.language_module_rst + self.parent = renderer.current_node + + if not hasattr(self.reporter, "get_source_and_line"): + # In docutils this is set by `RSTState.runtime_init` + self.reporter.get_source_and_line = lambda li: (self.document["source"], li) + + self.rfc_url = "rfc%d.html" + + def problematic( + self, text: str, rawsource: str, message: nodes.system_message + ) -> nodes.problematic: + """Record a system message from parsing.""" + msgid = self.document.set_id(message, self.parent) + problematic = nodes.problematic(rawsource, text, refid=msgid) + prbid = self.document.set_id(problematic) + message.add_backref(prbid) + return problematic + + def parse( + self, text: str, lineno: int, memo: Any, parent: nodes.Node + ) -> tuple[list[nodes.Node], list[nodes.system_message]]: + """Parse the text and return a list of nodes.""" + # note the only place this is normally called, + # is by `RSTState.inline_text`, or in directives: `self.state.inline_text`, + # and there the state parses its own parent + # self.reporter = memo.reporter + # self.document = memo.document + # self.language = memo.language + with self._renderer.current_node_context(parent): + # the parent is never actually appended to though, + # so we make a temporary parent to parse into + container = nodes.Element() + with self._renderer.current_node_context(container): + self._renderer.nested_render_text(text, lineno, inline=True) + + return container.children, [] + + def __getattr__(self, name: str): + """This method is only be called if the attribute requested has not + been defined. Defined attributes will not be overridden. + """ + # TODO use document.reporter mechanism? + if hasattr(Inliner, name): + msg = f"{type(self).__name__} has not yet implemented attribute '{name}'" + raise MockingError(msg).with_traceback(sys.exc_info()[2]) + msg = f"{type(self).__name__} has no attribute {name}" + raise MockingError(msg).with_traceback(sys.exc_info()[2]) + + +class MockState: + """A mock version of `docutils.parsers.rst.states.RSTState`. + + This is parsed to the `Directives.run()` method, + so that they may run nested parses on their content that will be parsed as markdown, + rather than RST. + """ + + def __init__( + self, + renderer: DocutilsRenderer, + state_machine: MockStateMachine, + lineno: int, + ): + self._renderer = renderer + self._lineno = lineno + self.document = renderer.document + self.reporter = renderer.document.reporter + self.state_machine = state_machine + self.inliner = MockInliner(renderer) + + class Struct: + document = self.document + reporter = self.document.reporter + language = renderer.language_module_rst + title_styles: list[str] = [] + section_level = max(renderer._level_to_section) + section_bubble_up_kludge = False + inliner = self.inliner + + self.memo = Struct + + def parse_directive_block( + self, + content: StringList, + line_offset: int, + directive: type[Directive], + option_presets: dict[str, Any], + ) -> tuple[list[str], dict[str, Any], StringList, int]: + """Parse the full directive text + + :raises MarkupError: for errors in parsing the directive + :returns: (arguments, options, content, content_offset) + """ + # note this is essentially only used by the docutils `role` directive + if option_presets: + raise MockingError("parse_directive_block: option_presets not implemented") + # TODO should argument_str always be ""? + parsed = parse_directive_text(directive, "", "\n".join(content)) + if parsed.warnings: + raise MarkupError(",".join(w.msg for w in parsed.warnings)) + return ( + parsed.arguments, + parsed.options, + StringList(parsed.body, source=content.source), + line_offset + parsed.body_offset, + ) + + def nested_parse( + self, + block: StringList, + input_offset: int, + node: nodes.Element, + match_titles: bool = False, + state_machine_class=None, + state_machine_kwargs=None, + ) -> None: + """Perform a nested parse of the input block, with ``node`` as the parent. + + :param block: The block of lines to parse. + :param input_offset: The offset of the first line of block, + to the starting line of the state (i.e. directive). + :param node: The parent node to attach the parsed content to. + :param match_titles: Whether to to allow the parsing of headings + (normally this is false, + since nested heading would break the document structure) + """ + sm_match_titles = self.state_machine.match_titles + with self._renderer.current_node_context(node): + self._renderer.nested_render_text( + "\n".join(block), + self._lineno + input_offset, + temp_root_node=node if match_titles else None, + ) + self.state_machine.match_titles = sm_match_titles + + def parse_target(self, block, block_text, lineno: int): + """ + Taken from https://github.com/docutils-mirror/docutils/blob/e88c5fb08d5cdfa8b4ac1020dd6f7177778d5990/docutils/parsers/rst/states.py#L1927 + """ + # Commenting out this code because it only applies to rST + # if block and block[-1].strip()[-1:] == "_": # possible indirect target + # reference = " ".join([line.strip() for line in block]) + # refname = self.is_reference(reference) + # if refname: + # return "refname", refname + reference = "".join(["".join(line.split()) for line in block]) + return "refuri", unescape(reference) + + def inline_text( + self, text: str, lineno: int + ) -> tuple[list[nodes.Element], list[nodes.Element]]: + """Parse text with only inline rules. + + :returns: (list of nodes, list of messages) + """ + return self.inliner.parse(text, lineno, self.memo, self._renderer.current_node) + + # U+2014 is an em-dash: + attribution_pattern = re.compile("^((?:---?(?!-)|\u2014) *)(.+)") + + def block_quote(self, lines: list[str], line_offset: int) -> list[nodes.Element]: + """Parse a block quote, which is a block of text, + followed by an (optional) attribution. + + :: + + No matter where you go, there you are. + + -- Buckaroo Banzai + """ + elements = [] + # split attribution + last_line_blank = False + blockquote_lines = lines + attribution_lines = [] + attribution_line_offset = None + # First line after a blank line must begin with a dash + for i, line in enumerate(lines): + if not line.strip(): + last_line_blank = True + continue + if not last_line_blank: + last_line_blank = False + continue + last_line_blank = False + match = self.attribution_pattern.match(line) + if not match: + continue + attribution_line_offset = i + attribution_lines = [match.group(2)] + for at_line in lines[i + 1 :]: + indented_line = at_line[len(match.group(1)) :] + if len(indented_line) != len(at_line.lstrip()): + break + attribution_lines.append(indented_line) + blockquote_lines = lines[:i] + break + # parse block + blockquote = nodes.block_quote() + self.nested_parse(blockquote_lines, line_offset, blockquote) + elements.append(blockquote) + # parse attribution + if attribution_lines: + attribution_text = "\n".join(attribution_lines) + lineno = self._lineno + line_offset + (attribution_line_offset or 0) + textnodes, messages = self.inline_text(attribution_text, lineno) + attribution = nodes.attribution(attribution_text, "", *textnodes) + ( + attribution.source, + attribution.line, + ) = self.state_machine.get_source_and_line(lineno) + blockquote += attribution + elements += messages + return elements + + def build_table(self, tabledata, tableline, stub_columns: int = 0, widths=None): + return Body.build_table(self, tabledata, tableline, stub_columns, widths) + + def build_table_row(self, rowdata, tableline): + return Body.build_table_row(self, rowdata, tableline) + + def nest_line_block_lines(self, block: nodes.line_block): + """Modify the line block element in-place, to nest line block segments. + + Line nodes are placed into child line block containers, based on their indentation. + """ + for index in range(1, len(block)): + if getattr(block[index], "indent", None) is None: + block[index].indent = block[index - 1].indent + self._nest_line_block_segment(block) + + def _nest_line_block_segment(self, block: nodes.line_block): + indents = [item.indent for item in block] + least = min(indents) + new_items = [] + new_block = nodes.line_block() + for item in block: + if item.indent > least: + new_block.append(item) + else: + if len(new_block): + self._nest_line_block_segment(new_block) + new_items.append(new_block) + new_block = nodes.line_block() + new_items.append(item) + if len(new_block): + self._nest_line_block_segment(new_block) + new_items.append(new_block) + block[:] = new_items + + def __getattr__(self, name: str): + """This method is only be called if the attribute requested has not + been defined. Defined attributes will not be overridden. + """ + cls = type(self).__name__ + msg = ( + f"{cls} has not yet implemented attribute '{name}'. " + "You can parse RST directly via the `{{eval-rst}}` directive: " + "https://myst-parser.readthedocs.io/en/latest/syntax/syntax.html#how-directives-parse-content" + if hasattr(Body, name) + else f"{cls} has no attribute '{name}'" + ) + raise MockingError(msg).with_traceback(sys.exc_info()[2]) + + +class MockStateMachine: + """A mock version of `docutils.parsers.rst.states.RSTStateMachine`. + + This is parsed to the `Directives.run()` method. + """ + + def __init__(self, renderer: DocutilsRenderer, lineno: int): + self._renderer = renderer + self._lineno = lineno + self.document = renderer.document + self.language = renderer.language_module_rst + self.reporter = self.document.reporter + self.node: nodes.Element = renderer.current_node + self.match_titles: bool = True + + def get_source(self, lineno: int | None = None): + """Return document source path.""" + return self.document["source"] + + def get_source_and_line(self, lineno: int | None = None): + """Return (source path, line) tuple for current or given line number.""" + return self.document["source"], lineno or self._lineno + + def __getattr__(self, name: str): + """This method is only be called if the attribute requested has not + been defined. Defined attributes will not be overridden. + """ + if hasattr(RSTStateMachine, name): + msg = f"{type(self).__name__} has not yet implemented attribute '{name}'" + raise MockingError(msg).with_traceback(sys.exc_info()[2]) + msg = f"{type(self).__name__} has no attribute {name}" + raise MockingError(msg).with_traceback(sys.exc_info()[2]) + + +class MockIncludeDirective: + """This directive uses a lot of statemachine logic that is not yet mocked. + Therefore, we treat it as a special case (at least for now). + + See: + https://docutils.sourceforge.io/docs/ref/rst/directives.html#including-an-external-document-fragment + """ + + def __init__( + self, + renderer: DocutilsRenderer, + name: str, + klass: type[Include], + arguments: list[str], + options: dict[str, Any], + body: list[str], + lineno: int, + ): + self.renderer = renderer + self.document = renderer.document + self.name = name + self.klass = klass + self.arguments = arguments + self.options = options + self.body = body + self.lineno = lineno + + def run(self) -> list[nodes.Element]: + from docutils.parsers.rst.directives.body import CodeBlock, NumberLines + + if not self.document.settings.file_insertion_enabled: + raise DirectiveError(2, f'Directive "{self.name}" disabled.') + + source_dir = Path(self.document["source"]).absolute().parent + include_arg = "".join([s.strip() for s in self.arguments[0].splitlines()]) + + if include_arg.startswith("<") and include_arg.endswith(">"): + # # docutils "standard" includes + path = Path(self.klass.standard_include_path).joinpath(include_arg[1:-1]) + else: + # if using sphinx interpret absolute paths "correctly", + # i.e. relative to source directory + try: + sphinx_env = self.document.settings.env + except AttributeError: + pass + else: + _, include_arg = sphinx_env.relfn2path(self.arguments[0]) + sphinx_env.note_included(include_arg) + path = Path(include_arg) + path = source_dir.joinpath(path) + # this ensures that the parent file is rebuilt if the included file changes + self.document.settings.record_dependencies.add(str(path)) + + # read file + encoding = self.options.get("encoding", self.document.settings.input_encoding) + error_handler = self.document.settings.input_encoding_error_handler + # tab_width = self.options.get("tab-width", self.document.settings.tab_width) + try: + file_content = path.read_text(encoding=encoding, errors=error_handler) + except FileNotFoundError as error: + raise DirectiveError( + 4, f'Directive "{self.name}": file not found: {str(path)!r}' + ) from error + except Exception as error: + raise DirectiveError( + 4, f'Directive "{self.name}": error reading file: {path}\n{error}.' + ) from error + + if self.renderer.sphinx_env is not None: + # Emit the "include-read" event + # see: https://github.com/sphinx-doc/sphinx/commit/ff18318613db56d0000db47e5c8f0140556cef0c + arg = [file_content] + relative_path = Path( + os.path.relpath(path, start=self.renderer.sphinx_env.srcdir) + ) + parent_docname = Path(self.renderer.document["source"]).stem + self.renderer.sphinx_env.app.events.emit( + "include-read", + relative_path, + parent_docname, + arg, + ) + file_content = arg[0] + + # get required section of text + startline = self.options.get("start-line", None) + endline = self.options.get("end-line", None) + file_content = "\n".join(file_content.splitlines()[startline:endline]) + startline = startline or 0 + for split_on_type in ["start-after", "end-before"]: + split_on = self.options.get(split_on_type, None) + if not split_on: + continue + split_index = file_content.find(split_on) + if split_index < 0: + raise DirectiveError( + 4, + f'Directive "{self.name}"; option "{split_on_type}": text not found "{split_on}".', + ) + if split_on_type == "start-after": + startline += split_index + len(split_on) + file_content = file_content[split_index + len(split_on) :] + else: + file_content = file_content[:split_index] + + if "literal" in self.options: + literal_block = nodes.literal_block( + file_content, source=str(path), classes=self.options.get("class", []) + ) + literal_block.line = 1 # TODO don;t think this should be 1? + self.add_name(literal_block) + if "number-lines" in self.options: + try: + startline = int(self.options["number-lines"] or 1) + except ValueError as err: + raise DirectiveError( + 3, ":number-lines: with non-integer start value" + ) from err + endline = startline + len(file_content.splitlines()) + if file_content.endswith("\n"): + file_content = file_content[:-1] + tokens = NumberLines([([], file_content)], startline, endline) + for classes, value in tokens: + if classes: + literal_block += nodes.inline(value, value, classes=classes) + else: + literal_block += nodes.Text(value) + else: + literal_block += nodes.Text(file_content) + return [literal_block] + if "code" in self.options: + self.options["source"] = str(path) + state_machine = MockStateMachine(self.renderer, self.lineno) + state = MockState(self.renderer, state_machine, self.lineno) + codeblock = CodeBlock( + name=self.name, + arguments=[self.options.pop("code")], + options=self.options, + content=file_content.splitlines(), + lineno=self.lineno, + content_offset=0, + block_text=file_content, + state=state, + state_machine=state_machine, + ) + return codeblock.run() + + # Here we perform a nested render, but temporarily setup the document/reporter + # with the correct document path and lineno for the included file. + source = self.renderer.document["source"] + rsource = self.renderer.reporter.source + line_func = getattr(self.renderer.reporter, "get_source_and_line", None) + try: + self.renderer.document["source"] = str(path) + self.renderer.reporter.source = str(path) + self.renderer.reporter.get_source_and_line = lambda li: (str(path), li) + if "relative-images" in self.options: + self.renderer.md_env["relative-images"] = os.path.relpath( + path.parent, source_dir + ) + if "relative-docs" in self.options: + self.renderer.md_env["relative-docs"] = ( + self.options["relative-docs"], + source_dir, + path.parent, + ) + self.renderer.nested_render_text( + file_content, + startline + 1, + heading_offset=self.options.get("heading-offset", 0), + ) + finally: + self.renderer.document["source"] = source + self.renderer.reporter.source = rsource + self.renderer.md_env.pop("relative-images", None) + self.renderer.md_env.pop("relative-docs", None) + if line_func is not None: + self.renderer.reporter.get_source_and_line = line_func + else: + del self.renderer.reporter.get_source_and_line + return [] + + def add_name(self, node: nodes.Element): + """Append self.options['name'] to node['names'] if it exists. + + Also normalize the name string and register it as explicit target. + """ + if "name" in self.options: + name = nodes.fully_normalize_name(self.options.pop("name")) + if "name" in node: + del node["name"] + node["names"].append(name) + self.renderer.document.note_explicit_target(node, node) + + +class MockRSTParser(RSTParser): + """RSTParser which avoids a negative side effect.""" + + def parse(self, inputstring: str, document: nodes.document): + """Parse the input to populate the document AST.""" + from docutils.parsers.rst import roles + + should_restore = False + if "" in roles._roles: + should_restore = True + blankrole = roles._roles[""] + + super().parse(inputstring, document) + + if should_restore: + roles._roles[""] = blankrole diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__init__.py new file mode 100644 index 000000000..26fbfcabc --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__init__.py @@ -0,0 +1 @@ +"""Parsers of MyST Markdown source text to docutils AST.""" diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..5867d6fac Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/directives.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/directives.cpython-312.pyc new file mode 100644 index 000000000..38d4e6d7f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/directives.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/docutils_.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/docutils_.cpython-312.pyc new file mode 100644 index 000000000..5f101d6d5 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/docutils_.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/mdit.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/mdit.cpython-312.pyc new file mode 100644 index 000000000..eefe667f2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/mdit.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/options.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/options.cpython-312.pyc new file mode 100644 index 000000000..0762188f9 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/options.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/parse_html.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/parse_html.cpython-312.pyc new file mode 100644 index 000000000..ef13f34ce Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/parse_html.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/sphinx_.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/sphinx_.cpython-312.pyc new file mode 100644 index 000000000..2e1fd0fbb Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/__pycache__/sphinx_.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/directives.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/directives.py new file mode 100644 index 000000000..d2512831b --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/directives.py @@ -0,0 +1,326 @@ +"""Fenced code blocks are parsed as directives, +if the block starts with ``{directive_name}``, +followed by arguments on the same line. + +Directive options are read from a YAML block, +if the first content line starts with ``---``, e.g. + +:: + + ```{directive_name} arguments + --- + option1: name + option2: | + Longer text block + --- + content... + ``` + +Or the option block will be parsed if the first content line starts with ``:``, +as a YAML block consisting of every line that starts with a ``:``, e.g. + +:: + + ```{directive_name} arguments + :option1: name + :option2: other + + content... + ``` + +If the first line of a directive's content is blank, this will be stripped +from the content. +This is to allow for separation between the option block and content. + +""" + +from __future__ import annotations + +import re +from collections.abc import Callable +from dataclasses import dataclass +from textwrap import dedent +from typing import Any + +import yaml +from docutils.parsers.rst import Directive +from docutils.parsers.rst.directives import flag +from docutils.parsers.rst.directives.misc import TestDirective +from docutils.parsers.rst.states import MarkupError + +from myst_parser.warnings_ import MystWarnings + +from .options import TokenizeError, options_to_items + + +@dataclass +class ParseWarnings: + msg: str + lineno: int | None = None + type: MystWarnings = MystWarnings.DIRECTIVE_PARSING + + +@dataclass +class DirectiveParsingResult: + arguments: list[str] + """The arguments parsed from the first line.""" + options: dict + """Options parsed from the YAML block.""" + body: list[str] + """The lines of body content""" + body_offset: int + """The number of lines to the start of the body content.""" + warnings: list[ParseWarnings] + """List of non-fatal errors encountered during parsing. + (message, line_number) + """ + + +def parse_directive_text( + directive_class: type[Directive], + first_line: str, + content: str, + *, + line: int | None = None, + validate_options: bool = True, + additional_options: dict[str, str] | None = None, +) -> DirectiveParsingResult: + """Parse (and validate) the full directive text. + + :param first_line: The text on the same line as the directive name. + May be an argument or body text, dependent on the directive + :param content: All text after the first line. Can include options. + :param validate_options: Whether to validate the values of options + This is actually only here to be used by myst-nb cells, + which converts options directly to JSON metadata, using the full YAML spec. + :param additional_options: Additional options to add to the directive, + above those parsed from the content (content options take priority). + + :raises MarkupError: if there is a fatal parsing/validation error + """ + parse_warnings: list[ParseWarnings] + options: dict[str, Any] + body_lines: list[str] + content_offset: int + has_options_block: bool + + if directive_class.option_spec: + # only look for an option block if there are possible options + # body, options, option_errors = _parse_directive_options( + result = _parse_directive_options( + content, + directive_class, + line=line, + as_yaml=not validate_options, + additional_options=additional_options, + ) + parse_warnings = result.warnings + has_options_block = result.has_options + options = result.options + body_lines = result.content.splitlines() + content_offset = len(content.splitlines()) - len(body_lines) + else: + parse_warnings = [] + has_options_block = False + options = {} + body_lines = content.splitlines() + content_offset = 0 + + if not (directive_class.required_arguments or directive_class.optional_arguments): + # If there are no possible arguments, then the body can start on the argument line + if first_line.strip(): + if has_options_block and any(body_lines): + parse_warnings.append( + ParseWarnings( + "Splitting content across first line and body, " + "when an options block is present, is not recommended" + ) + ) + body_lines.insert(0, first_line) + content_offset = 0 + arguments = [] + else: + arguments = parse_directive_arguments(directive_class, first_line) + + # remove first line of body if blank + # this is to allow space between the options and the content + if body_lines and not body_lines[0].strip(): + body_lines = body_lines[1:] + content_offset += 1 + + # check for body content + if body_lines and not directive_class.has_content: + parse_warnings.append(ParseWarnings("Has content, but none permitted")) + + return DirectiveParsingResult( + arguments, options, body_lines, content_offset, parse_warnings + ) + + +@dataclass +class _DirectiveOptions: + content: str + options: dict[str, Any] + warnings: list[ParseWarnings] + has_options: bool + + +def _parse_directive_options( + content: str, + directive_class: type[Directive], + as_yaml: bool, + line: int | None, + additional_options: dict[str, str] | None = None, +) -> _DirectiveOptions: + """Parse (and validate) the directive option section. + + :returns: (content, options, validation_errors) + """ + options_block: None | str = None + if content.startswith("---"): + line = None if line is None else line + 1 + content = "\n".join(content.splitlines()[1:]) + match = re.search(r"^-{3,}", content, re.MULTILINE) + if match: + options_block = content[: match.start()] + content = content[match.end() + 1 :] # TODO advance line number + else: + options_block = content + content = "" + options_block = dedent(options_block) + elif content.lstrip().startswith(":"): + content_lines = content.splitlines() + yaml_lines = [] + while content_lines: + if not content_lines[0].lstrip().startswith(":"): + break + yaml_lines.append(content_lines.pop(0).lstrip()[1:]) + options_block = "\n".join(yaml_lines) + content = "\n".join(content_lines) + + has_options_block = options_block is not None + + if as_yaml: + yaml_errors: list[ParseWarnings] = [] + try: + yaml_options = yaml.safe_load(options_block or "") or {} + except (yaml.parser.ParserError, yaml.scanner.ScannerError): + yaml_options = {} + yaml_errors.append( + ParseWarnings( + "Invalid options format (bad YAML)", + line, + MystWarnings.DIRECTIVE_OPTION, + ) + ) + if not isinstance(yaml_options, dict): + yaml_options = {} + yaml_errors.append( + ParseWarnings( + "Invalid options format (not a dict)", + line, + MystWarnings.DIRECTIVE_OPTION, + ) + ) + return _DirectiveOptions(content, yaml_options, yaml_errors, has_options_block) + + validation_errors: list[ParseWarnings] = [] + + options: dict[str, str] = {} + if options_block is not None: + try: + _options, state = options_to_items(options_block) + options = dict(_options) + except TokenizeError as err: + return _DirectiveOptions( + content, + options, + [ + ParseWarnings( + f"Invalid options format: {err.problem}", + line, + MystWarnings.DIRECTIVE_OPTION, + ) + ], + has_options_block, + ) + if state.has_comments: + validation_errors.append( + ParseWarnings( + "Directive options has # comments, which may not be supported in future versions.", + line, + MystWarnings.DIRECTIVE_OPTION_COMMENTS, + ) + ) + + if issubclass(directive_class, TestDirective): + # technically this directive spec only accepts one option ('option') + # but since its for testing only we accept all options + return _DirectiveOptions(content, options, [], has_options_block) + + if additional_options: + # The options block takes priority over additional options + options = {**additional_options, **options} + + # check options against spec + options_spec: dict[str, Callable] = directive_class.option_spec + unknown_options: list[str] = [] + new_options: dict[str, Any] = {} + value: str | None + for name, value in options.items(): + try: + converter = options_spec[name] + except KeyError: + unknown_options.append(name) + continue + if not value: + # restructured text parses empty option values as None + value = None + if converter is flag: + # flag will error if value is not empty, + # but to be more permissive we allow any value + value = None + try: + converted_value = converter(value) + except (ValueError, TypeError) as error: + validation_errors.append( + ParseWarnings( + f"Invalid option value for {name!r}: {value}: {error}", + line, + MystWarnings.DIRECTIVE_OPTION, + ) + ) + else: + new_options[name] = converted_value + + if unknown_options: + validation_errors.append( + ParseWarnings( + f"Unknown option keys: {sorted(unknown_options)} " + f"(allowed: {sorted(options_spec)})", + line, + MystWarnings.DIRECTIVE_OPTION, + ) + ) + + return _DirectiveOptions(content, new_options, validation_errors, has_options_block) + + +def parse_directive_arguments( + directive_cls: type[Directive], arg_text: str +) -> list[str]: + """Parse (and validate) the directive argument section.""" + required = directive_cls.required_arguments + optional = directive_cls.optional_arguments + arguments = arg_text.split() + if len(arguments) < required: + raise MarkupError(f"{required} argument(s) required, {len(arguments)} supplied") + elif len(arguments) > required + optional: + if directive_cls.final_argument_whitespace: + arguments = arg_text.split(None, required + optional - 1) + else: + raise MarkupError( + f"maximum {required + optional} argument(s) allowed, " + f"{len(arguments)} supplied" + ) + return arguments diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/docutils_.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/docutils_.py new file mode 100644 index 000000000..e17de44be --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/docutils_.py @@ -0,0 +1,519 @@ +"""MyST Markdown parser for docutils.""" + +from collections.abc import Callable, Iterable, Sequence +from dataclasses import Field +from typing import ( + Any, + Literal, + get_args, + get_origin, +) + +import yaml +from docutils import frontend, nodes +from docutils.core import default_description, publish_cmdline, publish_string +from docutils.frontend import filter_settings_spec +from docutils.parsers.rst import Parser as RstParser +from docutils.writers.html5_polyglot import HTMLTranslator, Writer + +from myst_parser.config.main import ( + MdParserConfig, + TopmatterReadError, + merge_file_level, + read_topmatter, +) +from myst_parser.mdit_to_docutils.base import DocutilsRenderer +from myst_parser.mdit_to_docutils.transforms import ( + CollectFootnotes, + ResolveAnchorIds, + SortFootnotes, + UnreferencedFootnotesDetector, +) +from myst_parser.parsers.mdit import create_md_parser +from myst_parser.warnings_ import MystWarnings, create_warning + + +def _validate_int( + setting, value, option_parser, config_parser=None, config_section=None +) -> int: + """Validate an integer setting.""" + return int(value) + + +def _validate_comma_separated_set( + setting, value, option_parser, config_parser=None, config_section=None +) -> set[str]: + """Validate an integer setting.""" + value = frontend.validate_comma_separated_list( + setting, value, option_parser, config_parser, config_section + ) + return set(value) + + +def _create_validate_tuple(length: int) -> Callable[..., tuple[str, ...]]: + """Create a validator for a tuple of length `length`.""" + + def _validate( + setting, value, option_parser, config_parser=None, config_section=None + ): + string_list = frontend.validate_comma_separated_list( + setting, value, option_parser, config_parser, config_section + ) + if len(string_list) != length: + raise ValueError( + f"Expecting {length} items in {setting}, got {len(string_list)}." + ) + return tuple(string_list) + + return _validate + + +class Unset: + """A sentinel class for unset settings.""" + + def __repr__(self): + return "UNSET" + + def __bool__(self): + # this allows to check if the setting is unset/falsy + return False + + +DOCUTILS_UNSET = Unset() +"""Sentinel for arguments not set through docutils.conf.""" + + +def _create_validate_yaml(field: Field): + """Create a deserializer/validator for a json setting.""" + + def _validate_yaml( + setting, value, option_parser, config_parser=None, config_section=None + ): + """Check/normalize a key-value pair setting. + + Items delimited by `,`, and key-value pairs delimited by `=`. + """ + try: + output = yaml.safe_load(value) + except Exception as err: + raise ValueError("Invalid YAML string") from err + if not isinstance(output, dict): + raise ValueError("Expecting a YAML dictionary") + return output + + return _validate_yaml + + +def _validate_url_schemes( + setting, value, option_parser, config_parser=None, config_section=None +): + """Validate a url_schemes setting. + + This is a tricky one, because it can be either a comma-separated list or a YAML dictionary. + """ + try: + output = yaml.safe_load(value) + except Exception as err: + raise ValueError("Invalid YAML string") from err + if isinstance(output, str): + output = {k: None for k in output.split(",")} + if not isinstance(output, dict): + raise ValueError("Expecting a comma-delimited str or YAML dictionary") + return output + + +def _attr_to_optparse_option(at: Field, default: Any) -> tuple[dict[str, Any], str]: + """Convert a field into a Docutils optparse options dict. + + :returns: (option_dict, default) + """ + if at.name == "url_schemes": + return { + "metavar": "<comma-delimited>|<yaml-dict>", + "validator": _validate_url_schemes, + }, ",".join(default) + if at.type is int: + return {"metavar": "<int>", "validator": _validate_int}, str(default) + if at.type is bool: + return { + "metavar": "<boolean>", + "validator": frontend.validate_boolean, + }, str(default) + if at.type is str or at.name == "heading_slug_func": + return { + "metavar": "<str>", + }, f"(default: '{default}')" + if get_origin(at.type) is Literal and all( + isinstance(a, str) for a in get_args(at.type) + ): + args = get_args(at.type) + return { + "metavar": f"<{'|'.join(repr(a) for a in args)}>", + "type": "choice", + "choices": args, + }, repr(default) + if at.type in (Iterable[str], Sequence[str]): + return { + "metavar": "<comma-delimited>", + "validator": frontend.validate_comma_separated_list, + }, ",".join(default) + if at.type == set[str]: + return { + "metavar": "<comma-delimited>", + "validator": _validate_comma_separated_set, + }, ",".join(default) + if at.type == tuple[str, str]: + return { + "metavar": "<str,str>", + "validator": _create_validate_tuple(2), + }, ",".join(default) + if at.type == int | type(None): + return { + "metavar": "<null|int>", + "validator": _validate_int, + }, str(default) + if at.type == Iterable[str] | type(None): + return { + "metavar": "<null|comma-delimited>", + "validator": frontend.validate_comma_separated_list, + }, ",".join(default) if default else "" + if get_origin(at.type) is dict: + return { + "metavar": "<yaml-dict>", + "validator": _create_validate_yaml(at), + }, str(default) if default else "" + raise AssertionError( + f"Configuration option {at.name} not set up for use in docutils.conf." + ) + + +def attr_to_optparse_option( + attribute: Field, default: Any, prefix: str = "myst_" +) -> tuple[str, list[str], dict[str, Any]]: + """Convert an ``MdParserConfig`` attribute into a Docutils setting tuple. + + :returns: A tuple of ``(help string, option flags, optparse kwargs)``. + """ + name = f"{prefix}{attribute.name}" + flag = "--" + name.replace("_", "-") + options = {"dest": name, "default": DOCUTILS_UNSET} + at_options, default_str = _attr_to_optparse_option(attribute, default) + options.update(at_options) + help_str = attribute.metadata.get("help", "") if attribute.metadata else "" + if default_str: + help_str += f" (default: {default_str})" + return (help_str, [flag], options) + + +def create_myst_settings_spec(config_cls=MdParserConfig, prefix: str = "myst_"): + """Return a list of Docutils setting for the docutils MyST section.""" + defaults = config_cls() + return tuple( + attr_to_optparse_option(at, getattr(defaults, at.name), prefix) + for at in config_cls.get_fields() + if ("docutils" not in at.metadata.get("omit", [])) + ) + + +def create_myst_config( + settings: frontend.Values, + config_cls=MdParserConfig, + prefix: str = "myst_", +): + """Create a configuration instance from the given settings.""" + values = {} + for attribute in config_cls.get_fields(): + if "docutils" in attribute.metadata.get("omit", []): + continue + setting = f"{prefix}{attribute.name}" + val = getattr(settings, setting, DOCUTILS_UNSET) + if val is not DOCUTILS_UNSET: + values[attribute.name] = val + return config_cls(**values) + + +class Parser(RstParser): + """Docutils parser for Markedly Structured Text (MyST).""" + + supported: tuple[str, ...] = ("md", "markdown", "myst") + """Aliases this parser supports.""" + + settings_spec = ( + "MyST options", + None, + create_myst_settings_spec(), + *RstParser.settings_spec, + ) + """Runtime settings specification.""" + + config_section = "myst parser" + config_section_dependencies = ("parsers",) + translate_section_name = None + + def get_transforms(self): + return super().get_transforms() + [ + UnreferencedFootnotesDetector, + SortFootnotes, + CollectFootnotes, + ResolveAnchorIds, + ] + + def parse(self, inputstring: str, document: nodes.document) -> None: + """Parse source text. + + :param inputstring: The source string to parse + :param document: The root docutils node to add AST elements to + """ + from docutils.writers._html_base import HTMLTranslator + + HTMLTranslator.visit_rubric = visit_rubric_html + HTMLTranslator.depart_rubric = depart_rubric_html + HTMLTranslator.visit_container = visit_container_html + HTMLTranslator.depart_container = depart_container_html + + self.setup_parse(inputstring, document) + + # check for exorbitantly long lines + if hasattr(document.settings, "line_length_limit"): + for i, line in enumerate(inputstring.split("\n")): + if len(line) > document.settings.line_length_limit: + error = document.reporter.error( + f"Line {i+1} exceeds the line-length-limit:" + f" {document.settings.line_length_limit}." + ) + document.append(error) + return + + # create parsing configuration from the global config + try: + config = create_myst_config(document.settings) + except Exception as exc: + error = document.reporter.error(f"Global myst configuration invalid: {exc}") + document.append(error) + config = MdParserConfig() + + if "attrs_image" in config.enable_extensions: + create_warning( + document, + "The `attrs_image` extension is deprecated, " + "please use `attrs_inline` instead.", + MystWarnings.DEPRECATED, + ) + + # update the global config with the file-level config + try: + topmatter = read_topmatter(inputstring) + except TopmatterReadError: + pass # this will be reported during the render + else: + if topmatter: + warning = lambda wtype, msg: create_warning( # noqa: E731 + document, msg, wtype, line=1, append_to=document + ) + config = merge_file_level(config, topmatter, warning) + + # parse content + parser = create_md_parser(config, DocutilsRenderer) + parser.options["document"] = document + parser.render(inputstring) + + # post-processing + + # replace raw nodes if raw is not allowed + if not getattr(document.settings, "raw_enabled", True): + for node in document.traverse(nodes.raw): + warning = document.reporter.warning("Raw content disabled.") + node.parent.replace(node, warning) + + self.finish_parse() + + +class SimpleTranslator(HTMLTranslator): + def stylesheet_call(self, *args, **kwargs): + return "" + + +class SimpleWriter(Writer): + settings_spec = filter_settings_spec( + Writer.settings_spec, + "template", + ) + + def apply_template(self): + subs = self.interpolation_dict() + return "{body}\n".format(**subs) + + def __init__(self): + self.parts = {} + self.translator_class = SimpleTranslator + + +def _run_cli(writer_name: str, writer_description: str, argv: list[str] | None): + """Run the command line interface for a particular writer.""" + publish_cmdline( + parser=Parser(), + writer_name=writer_name, + description=( + f"Generates {writer_description} from standalone MyST sources.\n{default_description}" + ), + argv=argv, + ) + + +def cli_html(argv: list[str] | None = None) -> None: + """Cmdline entrypoint for converting MyST to HTML.""" + _run_cli("html", "(X)HTML documents", argv) + + +def cli_html5(argv: list[str] | None = None): + """Cmdline entrypoint for converting MyST to HTML5.""" + _run_cli("html5", "HTML5 documents", argv) + + +def cli_html5_demo(argv: list[str] | None = None): + """Cmdline entrypoint for converting MyST to simple HTML5 demonstrations. + + This is a special case of the HTML5 writer, + that only outputs the body of the document. + """ + publish_cmdline( + parser=Parser(), + writer=SimpleWriter(), + description=( + f"Generates body HTML5 from standalone MyST sources.\n{default_description}" + ), + settings_overrides={ + "doctitle_xform": False, + "sectsubtitle_xform": False, + "initial_header_level": 1, + }, + argv=argv, + ) + + +def to_html5_demo(inputstring: str, **kwargs) -> str: + """Convert a MyST string to HTML5.""" + overrides = { + "doctitle_xform": False, + "sectsubtitle_xform": False, + "initial_header_level": 1, + "output_encoding": "unicode", + } + overrides.update(kwargs) + return publish_string( + inputstring, + parser=Parser(), + writer=SimpleWriter(), + settings_overrides=overrides, + ) + + +def cli_latex(argv: list[str] | None = None): + """Cmdline entrypoint for converting MyST to LaTeX.""" + _run_cli("latex", "LaTeX documents", argv) + + +def cli_xml(argv: list[str] | None = None): + """Cmdline entrypoint for converting MyST to XML.""" + _run_cli("xml", "Docutils-native XML", argv) + + +def cli_pseudoxml(argv: list[str] | None = None): + """Cmdline entrypoint for converting MyST to pseudo-XML.""" + _run_cli("pseudoxml", "pseudo-XML", argv) + + +def visit_rubric_html(self, node): + """Override the default HTML visit method for rubric nodes. + + docutils structures a document, based on the headings, into nested sections:: + + # h1 + ## h2 + ### h3 + + <section> + <title> + h1 + <section> + <title> + h2 + <section> + <title> + h3 + + This means that it is not possible to have "standard" headings nested inside + other components, such as blockquotes, because it would break the structure:: + + # h1 + > ## h2 + ### h3 + + <section> + <title> + h1 + <blockquote> + <section> + <title> + h2 + <section> + <title> + h3 + + we work around this shortcoming, in `DocutilsRenderer.render_heading`, + by identifying if a heading is inside another component + and instead outputting it as a "non-structural" rubric node, and capture the level:: + + <section> + <title> + h1 + <blockquote> + <rubric level=2> + h2 + <section> + <title> + h3 + + However, docutils natively just outputs rubrics as <p> tags, + and does not "honor" the heading level. + So here we override the visit/depart methods to output the correct <h> element + """ + if "level" in node: + self.body.append(self.starttag(node, f'h{node["level"]}', "", CLASS="rubric")) + else: + self.body.append(self.starttag(node, "p", "", CLASS="rubric")) + + +def depart_rubric_html(self, node): + """Override the default HTML visit method for rubric nodes. + + See explanation in `visit_rubric_html` + """ + if "level" in node: + self.body.append(f'</h{node["level"]}>\n') + else: + self.body.append("</p>\n") + + +def visit_container_html(self, node: nodes.Node): + """Override the default HTML visit method for container nodes. + + to remove the "container" class for divs + this avoids CSS clashes with the bootstrap theme + """ + classes = "docutils container" + attrs = {} + if node.get("is_div", False): + # we don't want the CSS for container for these nodes + classes = "docutils" + if "style" in node: + attrs["style"] = node["style"] + self.body.append(self.starttag(node, "div", CLASS=classes, **attrs)) + + +def depart_container_html(self, node: nodes.Node): + """Override the default HTML depart method for container nodes. + + See explanation in `visit_container_html` + """ + self.body.append("</div>\n") diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/mdit.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/mdit.py new file mode 100644 index 000000000..3e65c4dd2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/mdit.py @@ -0,0 +1,124 @@ +"""This module holds the ``create_md_parser`` function, +which creates a parser from the config. +""" + +from __future__ import annotations + +from collections.abc import Callable + +from markdown_it import MarkdownIt +from markdown_it.renderer import RendererProtocol +from mdit_py_plugins.amsmath import amsmath_plugin +from mdit_py_plugins.attrs import attrs_block_plugin, attrs_plugin +from mdit_py_plugins.colon_fence import colon_fence_plugin +from mdit_py_plugins.deflist import deflist_plugin +from mdit_py_plugins.dollarmath import dollarmath_plugin +from mdit_py_plugins.field_list import fieldlist_plugin +from mdit_py_plugins.footnote import footnote_plugin +from mdit_py_plugins.front_matter import front_matter_plugin +from mdit_py_plugins.myst_blocks import myst_block_plugin +from mdit_py_plugins.myst_role import myst_role_plugin +from mdit_py_plugins.substitution import substitution_plugin +from mdit_py_plugins.tasklists import tasklists_plugin +from mdit_py_plugins.wordcount import wordcount_plugin + +from myst_parser.config.main import MdParserConfig + + +def create_md_parser( + config: MdParserConfig, renderer: Callable[[MarkdownIt], RendererProtocol] +) -> MarkdownIt: + """Return a Markdown parser with the required MyST configuration.""" + + # TODO warn if linkify required and linkify-it-py not installed + # (currently the parse will unceremoniously except) + + if config.commonmark_only: + # see https://spec.commonmark.org/ + md = MarkdownIt("commonmark", renderer_cls=renderer).use( + wordcount_plugin, per_minute=config.words_per_minute + ) + md.options.update({"myst_config": config}) + return md + + if config.gfm_only: + # see https://github.github.com/gfm/ + md = ( + MarkdownIt("commonmark", renderer_cls=renderer) + # note, strikethrough currently only supported tentatively for HTML + .enable("strikethrough") + .enable("table") + .use(tasklists_plugin, enabled=config.enable_checkboxes) + .enable("linkify") + .use(wordcount_plugin, per_minute=config.words_per_minute) + ) + md.options.update({"linkify": True, "myst_config": config}) + return md + + md = ( + MarkdownIt("commonmark", renderer_cls=renderer) + .enable("table") + .use(front_matter_plugin) + .use(myst_block_plugin) + .use(myst_role_plugin) + .use(footnote_plugin, inline=False, move_to_end=False, always_match_refs=True) + .use(wordcount_plugin, per_minute=config.words_per_minute) + ) + + typographer = False + if "smartquotes" in config.enable_extensions: + md.enable("smartquotes") + typographer = True + if "replacements" in config.enable_extensions: + md.enable("replacements") + typographer = True + if "linkify" in config.enable_extensions: + md.enable("linkify") + if md.linkify is not None: + md.linkify.set({"fuzzy_link": config.linkify_fuzzy_links}) + if "strikethrough" in config.enable_extensions: + md.enable("strikethrough") + if "dollarmath" in config.enable_extensions: + md.use( + dollarmath_plugin, + allow_labels=config.dmath_allow_labels, + allow_space=config.dmath_allow_space, + allow_digits=config.dmath_allow_digits, + double_inline=config.dmath_double_inline, + ) + if "colon_fence" in config.enable_extensions: + md.use(colon_fence_plugin) + if "amsmath" in config.enable_extensions: + md.use(amsmath_plugin) + if "deflist" in config.enable_extensions: + md.use(deflist_plugin) + if "fieldlist" in config.enable_extensions: + md.use(fieldlist_plugin) + if "tasklist" in config.enable_extensions: + md.use(tasklists_plugin, enabled=config.enable_checkboxes) + if "substitution" in config.enable_extensions: + md.use(substitution_plugin, *config.sub_delimiters) + if "attrs_inline" in config.enable_extensions: + md.use( + attrs_plugin, + after=("image", "code_inline", "link_close", "span_close"), + spans=True, + span_after="footnote_ref", + ) + elif "attrs_image" in config.enable_extensions: + # TODO deprecate + md.use(attrs_plugin, after=("image",)) + if "attrs_block" in config.enable_extensions: + md.use(attrs_block_plugin) + for name in config.disable_syntax: + md.disable(name, True) + + md.options.update( + { + "typographer": typographer, + "linkify": "linkify" in config.enable_extensions, + "myst_config": config, + } + ) + + return md diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/options.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/options.py new file mode 100644 index 000000000..443a48650 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/options.py @@ -0,0 +1,680 @@ +"""Parser for directive options. + +This is a highly restricted parser for YAML, +which only allows a subset of YAML to be used for directive options: + +- Only block mappings are allowed at the top level +- Mapping keys are parsed as strings (plain or quoted) +- Mapping values are parsed as strings (plain, quoted, literal `|`, folded `>`) +- `#` Comments are allowed and blank lines + +Adapted from: +https://github.com/yaml/pyyaml/commit/957ae4d495cf8fcb5475c6c2f1bce801096b68a5 + +For a good description of multi-line YAML strings, see: +https://stackoverflow.com/a/21699210/5033292 +""" + +from __future__ import annotations + +from collections.abc import Iterable +from dataclasses import dataclass, replace +from typing import ClassVar, Final, Literal, cast + + +@dataclass +class Position: + """Position of a character in a stream.""" + + index: int + line: int + column: int + + +class StreamBuffer: + """A buffer for a stream of characters.""" + + def __init__(self, stream: str): + self._buffer = stream + _CHARS_END + self._index = 0 + self._line = 0 + self._column = 0 + + @property + def index(self) -> int: + return self._index + + @property + def line(self) -> int: + return self._line + + @property + def column(self) -> int: + return self._column + + def peek(self, index: int = 0) -> str: + return self._buffer[self._index + index] + + def prefix(self, length: int = 1) -> str: + return self._buffer[self._index : self._index + length] + + def forward(self, length: int = 1) -> None: + while length: + ch = self._buffer[self._index] + self._index += 1 + if ch in "\n\x85\u2028\u2029" or ( + ch == "\r" and self._buffer[self._index] != "\n" + ): + self._line += 1 + self._column = 0 + elif ch != "\ufeff": + self._column += 1 + length -= 1 + + def get_position(self) -> Position: + return Position(self._index, self._line, self._column) + + +@dataclass +class Token: + """A parsed token from a directive option stream.""" + + id: ClassVar[str] = "<unknown>" + start: Position + end: Position + + +@dataclass +class KeyToken(Token): + id: ClassVar[str] = "<key>" + value: str + style: Literal[None, "'", '"'] = None + """The original style of the string.""" + + +@dataclass +class ValueToken(Token): + id: ClassVar[str] = "<value>" + value: str + style: Literal[None, "'", '"', "|", ">"] = None + """The original style of the string.""" + + +@dataclass +class ColonToken(Token): + id: ClassVar[str] = "<colon>" + + +class TokenizeError(Exception): + def __init__( + self, + problem: str, + problem_mark: Position, + context: str | None = None, + context_mark: Position | None = None, + ): + """A YAML error with optional context. + + :param problem: The problem encountered + :param problem_mark: The position of the problem + :param context: The context of the error, e.g. the parent being scanned + :param context_mark: The position of the context + """ + self.context = context + self.context_mark = context_mark + self.problem = problem + self.problem_mark = problem_mark + + def clone(self, line_offset: int, column_offset: int) -> TokenizeError: + """Clone the error with the given line and column offsets.""" + return TokenizeError( + self.problem, + replace( + self.problem_mark, + line=self.problem_mark.line + line_offset, + column=self.problem_mark.column + column_offset, + ), + self.context, + None + if self.context_mark is None + else replace( + self.context_mark, + line=self.context_mark.line + line_offset, + column=self.context_mark.column + column_offset, + ), + ) + + def __str__(self) -> str: + lines = [] + if self.context is not None: + lines.append(self.context) + if self.context_mark is not None and ( + self.context_mark.line != self.problem_mark.line + or self.context_mark.column != self.problem_mark.column + ): + lines.append( + f"at line {self.context_mark.line}, column {self.context_mark.column}" + ) + if self.problem is not None: + lines.append(self.problem) + if self.problem_mark is not None: + lines.append( + f"at line {self.problem_mark.line}, column {self.problem_mark.column}" + ) + return "\n".join(lines) + + +@dataclass +class State: + has_comments: bool = False + + +def options_to_items( + text: str, line_offset: int = 0, column_offset: int = 0 +) -> tuple[list[tuple[str, str]], State]: + """Parse a directive option block into (key, value) tuples. + + :param text: The directive option text. + :param line_offset: The line offset to apply to the error positions. + :param column_offset: The column offset to apply to the error positions. + + :raises: `TokenizeError` + """ + output = [] + state = State() + for key_token, value_token in _to_tokens(text, state, line_offset, column_offset): + output.append( + (key_token.value, value_token.value if value_token is not None else "") + ) + return output, state + + +def _to_tokens( + text: str, state: State, line_offset: int = 0, column_offset: int = 0 +) -> Iterable[tuple[KeyToken, ValueToken | None]]: + """Parse a directive option, and yield key/value token pairs. + + :param text: The directive option text. + :param line_offset: The line offset to apply to the error positions. + :param column_offset: The column offset to apply to the error positions. + + :raises: `TokenizeError` + """ + key_token: KeyToken | None = None + try: + for token in _tokenize(text, state): + if isinstance(token, KeyToken): + if key_token is not None: + yield key_token, None + key_token = token + elif isinstance(token, ValueToken): + if key_token is None: + raise TokenizeError("expected key before value", token.start) + yield key_token, token + key_token = None + if key_token is not None: + yield key_token, None + except TokenizeError as exc: + if line_offset or column_offset: + raise exc.clone(line_offset, column_offset) from exc + raise + + +def _tokenize(text: str, state: State) -> Iterable[Token]: + """Yield tokens from a directive option stream.""" + stream = StreamBuffer(text) + + while True: + _scan_to_next_token(stream, state) + + if stream.peek() == _CHARS_END: + break + + if not stream.column == 0: + raise TokenizeError( + "expected key to start at column 0", stream.get_position() + ) + + # find key + ch = stream.peek() + if ch in ("'", '"'): + yield _scan_flow_scalar(stream, cast(Literal['"', "'"], ch), is_key=True) + else: + yield _scan_plain_scalar(stream, state, is_key=True) + + _scan_to_next_token(stream, state) + + # check next char is colon + space + if stream.peek() != ":": + raise TokenizeError("expected ':' after key", stream.get_position()) + + start_mark = stream.get_position() + stream.forward() + end_mark = stream.get_position() + yield ColonToken(start_mark, end_mark) + + _scan_to_next_token(stream, state) + + # now find value + ch = stream.peek() + if stream.column == 0: + pass + elif ch in ("|", ">"): + yield _scan_block_scalar(stream, cast(Literal["|", ">"], ch), state) + elif ch in ("'", '"'): + yield _scan_flow_scalar(stream, cast(Literal['"', "'"], ch), is_key=False) + else: + yield _scan_plain_scalar(stream, state, is_key=False) + + +def _scan_to_next_token(stream: StreamBuffer, state: State) -> None: + """Skip spaces, line breaks and comments. + + The byte order mark is also stripped, + if it's the first character in the stream. + """ + if stream.index == 0 and stream.peek() == "\ufeff": + stream.forward() + found = False + while not found: + while stream.peek() == " ": + stream.forward() + if stream.peek() == "#": + state.has_comments = True + while stream.peek() not in _CHARS_END_NEWLINE: + stream.forward() + if not _scan_line_break(stream): + found = True + + +def _scan_plain_scalar( + stream: StreamBuffer, state: State, is_key: bool = False +) -> KeyToken | ValueToken: + chunks = [] + start_mark = stream.get_position() + end_mark = start_mark + indent = 0 if is_key else 1 + spaces: list[str] = [] + while True: + length = 0 + if stream.peek() == "#": + state.has_comments = True + break + while True: + ch = stream.peek(length) + if ch in _CHARS_END_SPACE_TAB_NEWLINE or ( + is_key + and ch == ":" + and stream.peek(length + 1) in _CHARS_END_SPACE_TAB_NEWLINE + ): + break + length += 1 + if length == 0: + break + chunks.extend(spaces) + chunks.append(stream.prefix(length)) + stream.forward(length) + end_mark = stream.get_position() + spaces = _scan_plain_spaces(stream, allow_newline=(not is_key)) + if not spaces or stream.peek() == "#" or (stream.column < indent): + if stream.peek() == "#": + state.has_comments = True + break + + return ( + KeyToken(start_mark, end_mark, "".join(chunks)) + if is_key + else ValueToken(start_mark, end_mark, "".join(chunks)) + ) + + +def _scan_plain_spaces(stream: StreamBuffer, allow_newline: bool = True) -> list[str]: + chunks = [] + length = 0 + while stream.peek(length) == " ": + length += 1 + whitespaces = stream.prefix(length) + stream.forward(length) + ch = stream.peek() + if allow_newline and ch in _CHARS_NEWLINE: + line_break = _scan_line_break(stream) + breaks = [] + while stream.peek() in _CHARS_SPACE_NEWLINE: + if stream.peek() == " ": + stream.forward() + else: + breaks.append(_scan_line_break(stream)) + if line_break != "\n": + chunks.append(line_break) + elif not breaks: + chunks.append(" ") + chunks.extend(breaks) + elif whitespaces: + chunks.append(whitespaces) + return chunks + + +def _scan_line_break(stream: StreamBuffer) -> str: + # Transforms: + # '\r\n' : '\n' + # '\r' : '\n' + # '\n' : '\n' + # '\x85' : '\n' + # '\u2028' : '\u2028' + # '\u2029 : '\u2029' + # default : '' + ch = stream.peek() + if ch in "\r\n\x85": + if stream.prefix(2) == "\r\n": + stream.forward(2) + else: + stream.forward() + return "\n" + elif ch in "\u2028\u2029": + stream.forward() + return ch + return "" + + +def _scan_flow_scalar( + stream: StreamBuffer, style: Literal["'", '"'], is_key: bool = False +) -> KeyToken | ValueToken: + double = style == '"' + chunks = [] + start_mark = stream.get_position() + quote = stream.peek() + stream.forward() + chunks.extend(_scan_flow_scalar_non_spaces(stream, double, start_mark)) + while stream.peek() != quote: + chunks.extend(_scan_flow_scalar_spaces(stream, start_mark)) + chunks.extend(_scan_flow_scalar_non_spaces(stream, double, start_mark)) + stream.forward() + end_mark = stream.get_position() + return ( + KeyToken(start_mark, end_mark, "".join(chunks), style) + if is_key + else ValueToken(start_mark, end_mark, "".join(chunks), style) + ) + + +def _scan_flow_scalar_non_spaces( + stream: StreamBuffer, double: bool, start_mark: Position +) -> list[str]: + chunks = [] + while True: + length = 0 + while stream.peek(length) not in "'\"\\" + _CHARS_END_SPACE_TAB_NEWLINE: + length += 1 + if length: + chunks.append(stream.prefix(length)) + stream.forward(length) + ch = stream.peek() + if not double and ch == "'" and stream.peek(1) == "'": + chunks.append("'") + stream.forward(2) + elif (double and ch == "'") or (not double and ch in '"\\'): + chunks.append(ch) + stream.forward() + elif double and ch == "\\": + stream.forward() + ch = stream.peek() + if ch in _ESCAPE_REPLACEMENTS: + chunks.append(_ESCAPE_REPLACEMENTS[ch]) + stream.forward() + elif ch in _ESCAPE_CODES: + length = _ESCAPE_CODES[ch] + stream.forward() + for k in range(length): + if stream.peek(k) not in "0123456789ABCDEFabcdef": + raise TokenizeError( + f"expected escape sequence of {length} hexadecimal numbers, but found {stream.peek(k)!r}", + stream.get_position(), + "while scanning a double-quoted scalar", + start_mark, + ) + code = int(stream.prefix(length), 16) + chunks.append(chr(code)) + stream.forward(length) + elif ch in _CHARS_NEWLINE: + _scan_line_break(stream) + chunks.extend(_scan_flow_scalar_breaks(stream)) + else: + raise TokenizeError( + f"found unknown escape character {ch!r}", + stream.get_position(), + "while scanning a double-quoted scalar", + start_mark, + ) + else: + return chunks + + +def _scan_flow_scalar_spaces(stream: StreamBuffer, start_mark: Position) -> list[str]: + chunks = [] + length = 0 + while stream.peek(length) in " \t": + length += 1 + whitespaces = stream.prefix(length) + stream.forward(length) + ch = stream.peek() + if ch == _CHARS_END: + raise TokenizeError( + "found unexpected end of stream", + stream.get_position(), + "while scanning a quoted scalar", + start_mark, + ) + elif ch in _CHARS_NEWLINE: + line_break = _scan_line_break(stream) + breaks = _scan_flow_scalar_breaks(stream) + if line_break != "\n": + chunks.append(line_break) + elif not breaks: + chunks.append(" ") + chunks.extend(breaks) + else: + chunks.append(whitespaces) + return chunks + + +def _scan_flow_scalar_breaks(stream: StreamBuffer) -> list[str]: + chunks = [] + while True: + while stream.peek() in " \t": + stream.forward() + if stream.peek() in _CHARS_NEWLINE: + chunks.append(_scan_line_break(stream)) + else: + return chunks + + +def _scan_block_scalar( + stream: StreamBuffer, style: Literal["|", ">"], state: State +) -> ValueToken: + indent = 0 + folded = style == ">" + chunks = [] + start_mark = stream.get_position() + + # Scan the header. + stream.forward() + chomping, increment = _scan_block_scalar_indicators(stream, start_mark) + _scan_block_scalar_ignored_line(stream, start_mark, state) + + # Determine the indentation level and go to the first non-empty line. + min_indent = indent + 1 + if min_indent < 1: + min_indent = 1 + if increment is None: + breaks, max_indent, end_mark = _scan_block_scalar_indentation(stream) + indent = max(min_indent, max_indent) + else: + indent = min_indent + increment - 1 + breaks, end_mark = _scan_block_scalar_breaks(stream, indent) + line_break = "" + + # Scan the inner part of the block scalar. + while stream.column == indent and stream.peek() != _CHARS_END: + chunks.extend(breaks) + leading_non_space = stream.peek() not in " \t" + length = 0 + while stream.peek(length) not in _CHARS_END_NEWLINE: + length += 1 + chunks.append(stream.prefix(length)) + stream.forward(length) + line_break = _scan_line_break(stream) + breaks, end_mark = _scan_block_scalar_breaks(stream, indent) + if stream.column == indent and stream.peek() != _CHARS_END: + if ( + folded + and line_break == "\n" + and leading_non_space + and stream.peek() not in " \t" + ): + if not breaks: + chunks.append(" ") + else: + chunks.append(line_break) + else: + break + + # Chomp the tail. + if chomping is not False: + chunks.append(line_break) + if chomping is True: + chunks.extend(breaks) + + # We are done. + return ValueToken(start_mark, end_mark, "".join(chunks), style) + + +def _scan_block_scalar_indicators( + stream: StreamBuffer, start_mark: Position +) -> tuple[bool | None, int | None]: + chomping = None + increment = None + ch = stream.peek() + if ch in "+-": + chomping = ch == "+" + stream.forward() + ch = stream.peek() + if ch in "0123456789": + increment = int(ch) + if increment == 0: + raise TokenizeError( + "expected indentation indicator in the range 1-9, but found 0", + stream.get_position(), + "while scanning a block scalar", + start_mark, + ) + stream.forward() + elif ch in "0123456789": + increment = int(ch) + if increment == 0: + raise TokenizeError( + "expected indentation indicator in the range 1-9, but found 0", + stream.get_position(), + "while scanning a block scalar", + start_mark, + ) + stream.forward() + ch = stream.peek() + if ch in "+-": + chomping = ch == "+" + stream.forward() + ch = stream.peek() + if ch not in _CHARS_END_SPACE_NEWLINE: + raise TokenizeError( + f"expected chomping or indentation indicators, but found {ch!r}", + stream.get_position(), + "while scanning a block scalar", + start_mark, + ) + return chomping, increment + + +def _scan_block_scalar_ignored_line( + stream: StreamBuffer, start_mark: Position, state: State +) -> None: + while stream.peek() == " ": + stream.forward() + if stream.peek() == "#": + state.has_comments = True + while stream.peek() not in _CHARS_END_NEWLINE: + stream.forward() + ch = stream.peek() + if ch not in _CHARS_END_NEWLINE: + raise TokenizeError( + f"expected a comment or a line break, but found {ch!r}", + stream.get_position(), + "while scanning a block scalar", + start_mark, + ) + _scan_line_break(stream) + + +def _scan_block_scalar_indentation( + stream: StreamBuffer, +) -> tuple[list[str], int, Position]: + chunks = [] + max_indent = 0 + end_mark = stream.get_position() + while stream.peek() in _CHARS_SPACE_NEWLINE: + if stream.peek() != " ": + chunks.append(_scan_line_break(stream)) + end_mark = stream.get_position() + else: + stream.forward() + if stream.column > max_indent: + max_indent = stream.column + return chunks, max_indent, end_mark + + +def _scan_block_scalar_breaks( + stream: StreamBuffer, indent: int +) -> tuple[list[str], Position]: + chunks = [] + end_mark = stream.get_position() + while stream.column < indent and stream.peek() == " ": + stream.forward() + while stream.peek() in _CHARS_NEWLINE: + chunks.append(_scan_line_break(stream)) + end_mark = stream.get_position() + while stream.column < indent and stream.peek() == " ": + stream.forward() + return chunks, end_mark + + +_CHARS_END: Final[str] = "\0" +_CHARS_NEWLINE: Final[str] = "\r\n\x85\u2028\u2029" +_CHARS_END_NEWLINE: Final[str] = "\0\r\n\x85\u2028\u2029" +_CHARS_SPACE_NEWLINE: Final[str] = " \r\n\x85\u2028\u2029" +_CHARS_END_SPACE_NEWLINE: Final[str] = "\0 \r\n\x85\u2028\u2029" +_CHARS_END_SPACE_TAB_NEWLINE: Final[str] = "\0 \t\r\n\x85\u2028\u2029" + +_ESCAPE_REPLACEMENTS: Final[dict[str, str]] = { + "0": "\0", + "a": "\x07", + "b": "\x08", + "t": "\x09", + "\t": "\x09", + "n": "\x0a", + "v": "\x0b", + "f": "\x0c", + "r": "\x0d", + "e": "\x1b", + " ": "\x20", + '"': '"', + "\\": "\\", + "/": "/", + "N": "\x85", + "_": "\xa0", + "L": "\u2028", + "P": "\u2029", +} + +_ESCAPE_CODES: Final[dict[str, int]] = { + "x": 2, + "u": 4, + "U": 8, +} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/parse_html.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/parse_html.py new file mode 100644 index 000000000..d3b0c128d --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/parse_html.py @@ -0,0 +1,443 @@ +"""A simple but complete HTML to Abstract Syntax Tree (AST) parser. + +The AST can also reproduce the HTML text. + +Example:: + + >> text = '<div class="note"><p>text</p></div>' + >> ast = tokenize_html(text) + >> list(ast.walk(include_self=True)) + [Root(''), Tag('div', {'class': 'note'}), Tag('p'), Data('text')] + >> str(ast) + '<div class="note"><p>text</p></div>' + >> str(ast[0][0]) + '<p>text</p>' + +Note: optional tags are not accounted for +(see https://html.spec.whatwg.org/multipage/syntax.html#optional-tags) + +""" + +from __future__ import annotations + +import inspect +import itertools +from collections import abc, deque +from collections.abc import Callable, Iterable, Iterator +from html.parser import HTMLParser +from typing import Any + + +class Attribute(dict): + """This class holds the tags's attributes.""" + + def __getitem__(self, key: str) -> str: + """If self doesn't have the key it returns ''.""" + return self.get(key, "") + + @property + def classes(self) -> list[str]: + """Return 'class' attribute as list.""" + return self["class"].split() + + def __str__(self) -> str: + """Return a htmlized representation for attributes.""" + return " ".join(f'{key}="{value}"' for key, value in self.items()) + + +class Element(abc.MutableSequence): + """An Element of the xml/html document. + + All xml/html entities inherit from this class. + """ + + def __init__(self, name: str = "", attr: dict | None = None) -> None: + """Initialise the element.""" + self.name = name + self.attrs: Attribute = Attribute(attr or {}) + self._parent: Element | None = None + self._children: list[Element] = [] + + @property + def parent(self) -> Element | None: + """Return parent.""" + return self._parent + + @property + def children(self) -> list[Element]: + """Return copy of children.""" + return self._children[:] + + def reset_children(self, children: list[Element], deepcopy: bool = False): + new_children = [] + for i, item in enumerate(children): + assert isinstance(item, Element) + if deepcopy: + item = item.deepcopy() + if item._parent is None: + item._parent = self + elif item._parent != self: + raise AssertionError(f"different parent already set for item {i}") + new_children.append(item) + self._children = new_children + + def __getitem__(self, index: int) -> Element: # type: ignore[override] + return self._children[index] + + def __setitem__(self, index: int, item: Element): # type: ignore[override] + assert isinstance(item, Element) + if item._parent is not None and item._parent != self: + raise AssertionError(f"different parent already set for: {item!r}") + item._parent = self + return self._children.__setitem__(index, item) + + def __delitem__(self, index: int): # type: ignore[override] + return self._children.__delitem__(index) + + def __len__(self) -> int: + return self._children.__len__() + + def __iter__(self) -> Iterator[Element]: + yield from self._children + + def insert(self, index: int, item: Element): + assert isinstance(item, Element) + if item._parent is not None and item._parent != self: + raise AssertionError(f"different parent already set for: {item!r}") + item._parent = self + return self._children.insert(index, item) + + def deepcopy(self) -> Element: + """Recursively copy and remove parent.""" + _copy = self.__class__(self.name, self.attrs) + for child in self: + _copy_child = child.deepcopy() + _copy.append(_copy_child) + return _copy + + def __repr__(self) -> str: + text = f"{self.__class__.__name__}({self.name!r}" + if self.attrs: + text += f", {self.attrs!r}" + text += ")" + return text + + def render( + self, + tag_overrides: dict[str, Callable[[Element, dict], str]] | None = None, + **kwargs, + ) -> str: + """Returns a HTML string representation of the element. + + :param tag_overrides: Provide a dictionary of render function + for specific tag names, to override the normal render format + + """ + raise NotImplementedError + + def __str__(self) -> str: + return self.render() + + def __eq__(self, item: Any) -> bool: + return item is self + + def walk(self, include_self: bool = False) -> Iterator[Element]: + """Walk through the xml/html AST.""" + if include_self: + yield self + for child in self: + yield child + yield from child.walk() + + def strip(self, inplace: bool = False, recurse: bool = False) -> Element: + """Return copy with all `Data` tokens + that only contain whitespace / newlines removed. + """ + element = self + if not inplace: + element = self.deepcopy() + element.reset_children( + [ + e + for e in element.children + if not (isinstance(e, Data) and e.data.strip() == "") + ] + ) + if recurse: + for child in element: + child.strip(inplace=True, recurse=True) + return element + + def find( + self, + identifier: str | type[Element], + attrs: dict | None = None, + classes: Iterable[str] | None = None, + include_self: bool = False, + recurse: bool = True, + ) -> Iterator[Element]: + """Find all elements that match name and specific attributes.""" + iterator = self.walk() if recurse else self + if include_self: + iterator = itertools.chain([self], iterator) + test_func = ( + (lambda c: isinstance(c, identifier)) + if inspect.isclass(identifier) + else lambda c: c.name == identifier + ) + classes = set(classes) if classes is not None else classes + for child in iterator: + if test_func(child): + if classes is not None and not classes.issubset(child.attrs.classes): + continue + for key, value in (attrs or {}).items(): + if child.attrs[key] != value: + break + else: + yield child + + +class Root(Element): + """The root of the AST tree.""" + + def render(self, **kwargs) -> str: # type: ignore[override] + """Returns a string HTML representation of the structure.""" + return "".join(child.render(**kwargs) for child in self) + + +class Tag(Element): + """Represent xml/html tags under the form: <name key="value" ...> ... </name>.""" + + def render( + self, + tag_overrides: dict[str, Callable[[Element, dict], str]] | None = None, + **kwargs, + ) -> str: + if tag_overrides and self.name in tag_overrides: + return tag_overrides[self.name](self, tag_overrides) + return ( + f"<{self.name}{' ' if self.attrs else ''}{self.attrs}>" + + "".join( + child.render(tag_overrides=tag_overrides, **kwargs) for child in self + ) + + f"</{self.name}>" + ) + + +class XTag(Element): + """Represent XHTML style tags with no children, like `<img src="t.gif" />`""" + + def render( + self, + tag_overrides: dict[str, Callable[[Element, dict], str]] | None = None, + **kwargs, + ) -> str: + if tag_overrides is not None and self.name in tag_overrides: + return tag_overrides[self.name](self, tag_overrides) + return f"<{self.name}{' ' if self.attrs else ''}{self.attrs}/>" + + +class VoidTag(Element): + """Represent tags with no children, only start tag, like `<img src="t.gif" >`""" + + def render(self, **kwargs) -> str: # type: ignore[override] + return f"<{self.name}{' ' if self.attrs else ''}{self.attrs}>" + + +class TerminalElement(Element): + def __init__(self, data: str): + super().__init__("") + self.data: str = data + + def __repr__(self) -> str: + text = self.data + if len(text) > 20: + text = text[:17] + "..." + return f"{self.__class__.__name__}({text!r})" + + def deepcopy(self) -> TerminalElement: + """Copy and remove parent.""" + _copy = self.__class__(self.data) + return _copy + + +class Data(TerminalElement): + """Represent data inside xml/html documents, like raw text.""" + + def render(self, **kwargs) -> str: # type: ignore[override] + return self.data + + +class Declaration(TerminalElement): + """Represent declarations, like `<!DOCTYPE html>`""" + + def render(self, **kwargs) -> str: # type: ignore[override] + return f"<!{self.data}>" + + +class Comment(TerminalElement): + """Represent HTML comments""" + + def render(self, **kwargs) -> str: # type: ignore[override] + return f"<!--{self.data}-->" + + +class Pi(TerminalElement): + """Represent processing instructions like `<?xml-stylesheet ?>`""" + + def render(self, **kwargs) -> str: # type: ignore[override] + return f"<?{self.data}>" + + +class Char(TerminalElement): + """Represent character codes like: `�`""" + + def render(self, **kwargs) -> str: # type: ignore[override] + return f"&#{self.data};" + + +class Entity(TerminalElement): + """Represent entities like `&`""" + + def render(self, **kwargs) -> str: # type: ignore[override] + return f"&{self.data};" + + +class Tree: + """The engine class to generate the AST tree.""" + + def __init__(self, name: str = ""): + """Initialise Tree""" + self.name = name + self.outmost = Root(name) + self.stack: deque = deque() + self.stack.append(self.outmost) + + def clear(self): + """Clear the outmost and stack for a new parsing.""" + self.outmost = Root(self.name) + self.stack.clear() + self.stack.append(self.outmost) + + def last(self) -> Element: + """Return the last pointer which point to the actual tag scope.""" + return self.stack[-1] + + def nest_tag(self, name: str, attrs: dict): + """Nest a given tag at the bottom of the tree using + the last stack's pointer. + """ + pointer = self.stack.pop() + item = Tag(name, attrs) + pointer.append(item) + self.stack.append(pointer) + self.stack.append(item) + + def nest_xtag(self, name: str, attrs: dict): + """Nest an XTag onto the tree.""" + top = self.last() + item = XTag(name, attrs) + top.append(item) + + def nest_vtag(self, name: str, attrs: dict): + """Nest a VoidTag onto the tree.""" + top = self.last() + item = VoidTag(name, attrs) + top.append(item) + + def nest_terminal(self, klass: type[TerminalElement], data: str): + """Nest the data onto the tree.""" + top = self.last() + item = klass(data) + top.append(item) + + def enclose(self, name: str): + """When a closing tag is found, pop the pointer's scope from the stack, + to then point to the earlier scope's tag. + """ + count = 0 + for ind in reversed(self.stack): + count = count + 1 + if ind.name == name: + break + else: + count = 0 + + # It pops all the items which do not match with the closing tag. + for _ in range(count): + self.stack.pop() + + +class HtmlToAst(HTMLParser): + """The tokenizer class.""" + + # see https://html.spec.whatwg.org/multipage/syntax.html#void-elements + void_elements = { + "area", + "base", + "br", + "col", + "embed", + "hr", + "img", + "input", + "link", + "meta", + "param", + "source", + "track", + "wbr", + } + + def __init__(self, name: str = "", convert_charrefs: bool = False): + super().__init__(convert_charrefs=convert_charrefs) + self.struct = Tree(name) + + def feed(self, source: str) -> Root: # type: ignore[override] + """Parse the source string.""" + self.struct.clear() + super().feed(source) + return self.struct.outmost + + def handle_starttag(self, name: str, attr): + """When found an opening tag then nest it onto the tree.""" + if name in self.void_elements: + self.struct.nest_vtag(name, attr) + else: + self.struct.nest_tag(name, attr) + + def handle_startendtag(self, name: str, attr): + """When found a XHTML tag style then nest it up to the tree.""" + self.struct.nest_xtag(name, attr) + + def handle_endtag(self, name: str): + """When found a closing tag then makes it point to the right scope.""" + if name not in self.void_elements: + self.struct.enclose(name) + + def handle_data(self, data: str): + """Nest data onto the tree.""" + self.struct.nest_terminal(Data, data) + + def handle_decl(self, decl: str): + self.struct.nest_terminal(Declaration, decl) + + def unknown_decl(self, decl: str): + self.struct.nest_terminal(Declaration, decl) + + def handle_charref(self, data: str): + self.struct.nest_terminal(Char, data) + + def handle_entityref(self, data: str): + self.struct.nest_terminal(Entity, data) + + def handle_pi(self, data: str): + self.struct.nest_terminal(Pi, data) + + def handle_comment(self, data: str): + self.struct.nest_terminal(Comment, data) + + +def tokenize_html(text: str, name: str = "", convert_charrefs: bool = False) -> Root: + parser = HtmlToAst(name, convert_charrefs=convert_charrefs) + return parser.feed(text) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/sphinx_.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/sphinx_.py new file mode 100644 index 000000000..5708c950a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/parsers/sphinx_.py @@ -0,0 +1,83 @@ +"""MyST Markdown parser for sphinx.""" + +from __future__ import annotations + +from docutils import nodes +from docutils.parsers.rst import Parser as RstParser +from sphinx.parsers import Parser as SphinxParser +from sphinx.util import logging + +from myst_parser.config.main import ( + MdParserConfig, + TopmatterReadError, + merge_file_level, + read_topmatter, +) +from myst_parser.mdit_to_docutils.sphinx_ import SphinxRenderer +from myst_parser.mdit_to_docutils.transforms import ( + CollectFootnotes, + ResolveAnchorIds, + SortFootnotes, +) +from myst_parser.parsers.mdit import create_md_parser +from myst_parser.warnings_ import create_warning + +SPHINX_LOGGER = logging.getLogger(__name__) + + +class MystParser(SphinxParser): + """Sphinx parser for Markedly Structured Text (MyST).""" + + supported: tuple[str, ...] = ("md", "markdown", "myst") + """Aliases this parser supports.""" + + settings_spec = RstParser.settings_spec + """Runtime settings specification. + + Defines runtime settings and associated command-line options, as used by + `docutils.frontend.OptionParser`. This is a concatenation of tuples of: + + - Option group title (string or `None` which implies no group, just a list + of single options). + + - Description (string or `None`). + + - A sequence of option tuples + """ + + config_section = "myst parser" + config_section_dependencies = ("parsers",) + translate_section_name = None + + def get_transforms(self): + return super().get_transforms() + [ + SortFootnotes, + CollectFootnotes, + ResolveAnchorIds, + ] + + def parse(self, inputstring: str, document: nodes.document) -> None: + """Parse source text. + + :param inputstring: The source string to parse + :param document: The root docutils node to add AST elements to + + """ + # get the global config + config: MdParserConfig = document.settings.env.myst_config + + # update the global config with the file-level config + try: + topmatter = read_topmatter(inputstring) + except TopmatterReadError: + pass # this will be reported during the render + else: + if topmatter: + warning = lambda wtype, msg: create_warning( # noqa: E731 + document, msg, wtype, line=1, append_to=document + ) + config = merge_file_level(config, topmatter, warning) + + parser = create_md_parser(config, SphinxRenderer) + parser.options["document"] = document + parser.render(inputstring) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/py.typed b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/py.typed new file mode 100644 index 000000000..7632ecf77 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_.py new file mode 100644 index 000000000..f7a7de877 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_.py @@ -0,0 +1,9 @@ +"""A module for compatibility with the docutils>=0.17 `include` directive, in RST documents. + +For example:: + + .. include:: path/to/file.md + :parser: myst_parser.sphinx_ +""" + +from myst_parser.parsers.sphinx_ import MystParser as Parser # noqa: F401 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__init__.py new file mode 100644 index 000000000..1bfeb71a1 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__init__.py @@ -0,0 +1 @@ +"""Sphinx extension for myst_parser.""" diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..5f3a1bf92 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/directives.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/directives.cpython-312.pyc new file mode 100644 index 000000000..12c2e82de Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/directives.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/main.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/main.cpython-312.pyc new file mode 100644 index 000000000..97cabe897 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/main.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/mathjax.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/mathjax.cpython-312.pyc new file mode 100644 index 000000000..575396f51 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/mathjax.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/myst_refs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/myst_refs.cpython-312.pyc new file mode 100644 index 000000000..11b6bf185 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/__pycache__/myst_refs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/directives.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/directives.py new file mode 100644 index 000000000..b9af6e62c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/directives.py @@ -0,0 +1,137 @@ +"""MyST specific directives""" + +from __future__ import annotations + +from copy import copy +from typing import cast + +from docutils import nodes +from docutils.parsers.rst import directives +from sphinx.directives import SphinxDirective +from sphinx.util.docutils import SphinxRole + +from myst_parser.mocking import MockState + + +def align(argument): + return directives.choice(argument, ("left", "center", "right")) + + +def figwidth_value(argument): + if argument.lower() == "image": + return "image" + else: + return directives.length_or_percentage_or_unitless(argument, "px") + + +class SubstitutionReferenceRole(SphinxRole): + """Implement substitution references as a role. + + Note, in ``docutils/parsers/rst/roles.py`` this is left unimplemented. + """ + + def run(self) -> tuple[list[nodes.Node], list[nodes.system_message]]: + subref_node = nodes.substitution_reference(self.rawtext, self.text) + self.set_source_info(subref_node, self.lineno) + subref_node["refname"] = nodes.fully_normalize_name(self.text) + return [subref_node], [] + + +class FigureMarkdown(SphinxDirective): + """Directive for creating a figure with Markdown compatible syntax. + + Example:: + + :::{figure-md} target + <img src="img/fun-fish.png" alt="fishy" class="bg-primary mb-1" width="200px"> + + This is a caption in **Markdown** + ::: + + """ + + required_arguments = 0 + optional_arguments = 1 # image target + final_argument_whitespace = True + has_content = True + + option_spec = { + "width": figwidth_value, + "class": directives.class_option, + "align": align, + "name": directives.unchanged, + } + + def run(self) -> list[nodes.Node]: + figwidth = self.options.pop("width", None) + figclasses = self.options.pop("class", None) + align = self.options.pop("align", None) + + if not isinstance(self.state, MockState): + return [self.figure_error("Directive is only supported in myst parser")] + state = cast(MockState, self.state) + + # ensure html image enabled + myst_extensions = copy(state._renderer.md_config.enable_extensions) + node = nodes.Element() + try: + state._renderer.md_config.enable_extensions.add("html_image") + state.nested_parse(self.content, self.content_offset, node) + finally: + state._renderer.md_config.enable_extensions = myst_extensions + + if len(node.children) != 2: + return [ + self.figure_error( + "content should be one image, " + "followed by a single paragraph caption" + ) + ] + + image_node, caption_para = node.children + if isinstance(image_node, nodes.paragraph): + image_node = image_node[0] + + if not isinstance(image_node, nodes.image): + return [ + self.figure_error( + "content should be one image (not found), " + "followed by single paragraph caption" + ) + ] + + if not isinstance(caption_para, nodes.paragraph): + return [ + self.figure_error( + "content should be one image, " + "followed by single paragraph caption (not found)" + ) + ] + + caption_node = nodes.caption(caption_para.rawsource, "", *caption_para.children) + caption_node.source = caption_para.source + caption_node.line = caption_para.line + + figure_node = nodes.figure("", image_node, caption_node) + self.set_source_info(figure_node) + + if figwidth is not None: + figure_node["width"] = figwidth + if figclasses: + figure_node["classes"] += figclasses + if align: + figure_node["align"] = align + if self.arguments: + self.options["name"] = self.arguments[0] + self.add_name(figure_node) + + return [figure_node] + + def figure_error(self, message): + """A warning for reporting an invalid figure.""" + error = self.state_machine.reporter.error( + message, + nodes.literal_block(self.block_text, self.block_text), + line=self.lineno, + ) + return error diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/main.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/main.py new file mode 100644 index 000000000..eda129ac5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/main.py @@ -0,0 +1,108 @@ +"""The setup for the sphinx extension.""" + +from typing import Any + +import sphinx +from docutils import nodes +from sphinx.application import Sphinx +from sphinx.transforms import ( + UnreferencedFootnotesDetector as SphinxUnreferencedFootnotesDetector, +) + +from myst_parser.mdit_to_docutils.transforms import UnreferencedFootnotesDetector +from myst_parser.parsers.docutils_ import ( + depart_container_html, + depart_rubric_html, + visit_container_html, + visit_rubric_html, +) +from myst_parser.warnings_ import MystWarnings + + +def setup_sphinx(app: Sphinx, load_parser: bool = False) -> None: + """Initialize all settings and transforms in Sphinx. + + :param app: The Sphinx application object. + :param load_parser: Whether to load the parser. + """ + # we do this separately to setup, + # so that it can be called by external packages like myst_nb + from myst_parser.config.main import MdParserConfig + from myst_parser.parsers.sphinx_ import MystParser + from myst_parser.sphinx_ext.directives import ( + FigureMarkdown, + SubstitutionReferenceRole, + ) + from myst_parser.sphinx_ext.mathjax import override_mathjax + from myst_parser.sphinx_ext.myst_refs import MystReferenceResolver + + if load_parser: + app.add_source_suffix(".md", "markdown") + app.add_source_parser(MystParser) + + app.add_role("sub-ref", SubstitutionReferenceRole()) + app.add_directive("figure-md", FigureMarkdown) + + # TODO currently we globally replace sphinx's transform, + # to overcome issues it has (https://github.com/sphinx-doc/sphinx/pull/12730), + # but once this PR is merged/released, we should remove this + app.registry.transforms.remove(SphinxUnreferencedFootnotesDetector) + app.add_transform(UnreferencedFootnotesDetector) + + app.add_post_transform(MystReferenceResolver) + + # override only the html writer visit methods for rubric, to use the "level" attribute + # this allows for nested headers to be correctly rendered + if sphinx.version_info < (7, 4): + # This is now added in sphinx: https://github.com/sphinx-doc/sphinx/pull/12506 + app.add_node( + nodes.rubric, override=True, html=(visit_rubric_html, depart_rubric_html) + ) + # override only the html writer visit methods for container, + # to remove the "container" class for divs + # this avoids CSS clashes with the bootstrap theme + app.add_node( + nodes.container, + override=True, + html=(visit_container_html, depart_container_html), + ) + + for name, default, field in MdParserConfig().as_triple(): + if "sphinx" not in field.metadata.get("omit", []): + # TODO add types? + app.add_config_value(f"myst_{name}", default, "env", types=Any) # type: ignore[arg-type] + + app.connect("builder-inited", create_myst_config) + app.connect("builder-inited", override_mathjax) + + +def create_myst_config(app): + """Create the myst config object and add it to the sphinx environment.""" + from sphinx.util import logging + from sphinx.util.console import bold + + from myst_parser import __version__ + from myst_parser.config.main import MdParserConfig + + logger = logging.getLogger(__name__) + + values = { + name: app.config[f"myst_{name}"] + for name, _, field in MdParserConfig().as_triple() + if "sphinx" not in field.metadata.get("omit", []) + } + + try: + app.env.myst_config = MdParserConfig(**values) + logger.info(bold("myst v%s:") + " %s", __version__, app.env.myst_config) + except (TypeError, ValueError) as error: + logger.error("myst configuration invalid: %s", error.args[0]) + app.env.myst_config = MdParserConfig() + + if "attrs_image" in app.env.myst_config.enable_extensions: + logger.warning( + "The `attrs_image` extension is deprecated, " + "please use `attrs_inline` instead.", + type="myst", + subtype=MystWarnings.DEPRECATED.value, + ) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/mathjax.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/mathjax.py new file mode 100644 index 000000000..ec46e5b80 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/mathjax.py @@ -0,0 +1,119 @@ +"""Overrides to ``sphinx.ext.mathjax`` + +This fixes two issues: + +1. Mathjax should not search for ``$`` delimiters, nor LaTeX amsmath environments, + since we already achieve this with the dollarmath and amsmath mrakdown-it-py plugins +2. amsmath math blocks should be wrapped in mathjax delimiters (default ``\\[...\\]``), + and assigned an equation number + +""" + +from docutils import nodes +from sphinx.application import Sphinx +from sphinx.ext import mathjax +from sphinx.locale import _ +from sphinx.util import logging +from sphinx.util.math import get_node_equation_number +from sphinx.writers.html import HTMLTranslator + +logger = logging.getLogger(__name__) + + +def log_override_warning(app: Sphinx, version: int, current: str, new: str) -> None: + """Log a warning if MathJax configuration being overridden.""" + if logging.is_suppressed_warning("myst", "mathjax", app.config.suppress_warnings): + return + config_name = ( + "mathjax3_config['options']['processHtmlClass']" + if version == 3 + else "mathjax_config['tex2jax']['processClass']" + ) + logger.warning( + f"`{config_name}` is being overridden by myst-parser: '{current}' -> '{new}'. " + "Set `suppress_warnings=['myst.mathjax']` to ignore this warning, or " + "`myst_update_mathjax=False` if this is undesirable." + ) + + +def override_mathjax(app: Sphinx): + """Override aspects of the mathjax extension. + + MyST-Parser parses dollar and latex math, via markdown-it plugins. + Therefore, we tell Mathjax to only render these HTML elements. + This is accompanied by setting the `ignoreClass` on the top-level section of each MyST document. + """ + if ( + "amsmath" in app.config["myst_enable_extensions"] + and "mathjax" in app.registry.html_block_math_renderers + ): + app.registry.html_block_math_renderers["mathjax"] = ( + html_visit_displaymath, + None, + ) + + if "dollarmath" not in app.config["myst_enable_extensions"]: + return + if not app.env.myst_config.update_mathjax: # type: ignore[attr-defined] + return + + mjax_classes = app.env.myst_config.mathjax_classes # type: ignore[attr-defined] + + if "mathjax3_config" in app.config: + # sphinx 4 + mathjax 3 + app.config.mathjax3_config = app.config.mathjax3_config or {} + app.config.mathjax3_config.setdefault("options", {}) + if ( + "processHtmlClass" in app.config.mathjax3_config["options"] + and app.config.mathjax3_config["options"]["processHtmlClass"] + != mjax_classes + ): + log_override_warning( + app, + 3, + app.config.mathjax3_config["options"]["processHtmlClass"], + mjax_classes, + ) + app.config.mathjax3_config["options"]["processHtmlClass"] = mjax_classes + elif "mathjax_config" in app.config: + # sphinx 3 + mathjax 2 + app.config.mathjax_config = app.config.mathjax_config or {} + app.config.mathjax_config.setdefault("tex2jax", {}) + if ( + "processClass" in app.config.mathjax_config["tex2jax"] + and app.config.mathjax_config["tex2jax"]["processClass"] != mjax_classes + ): + log_override_warning( + app, + 2, + app.config.mathjax_config["tex2jax"]["processClass"], + mjax_classes, + ) + app.config.mathjax_config["tex2jax"]["processClass"] = mjax_classes + + +def html_visit_displaymath(self: HTMLTranslator, node: nodes.math_block) -> None: + """Override for sphinx.ext.mathjax.html_visit_displaymath to handle amsmath. + + By default displaymath, are normally wrapped in a prefix/suffix, + defined by mathjax_display, and labelled nodes are numbered. + However, this is not the case if the math_block is set as 'nowrap', as for amsmath. + Therefore, we need to override this behaviour. + """ + if "amsmath" in node.get("classes", []): + self.body.append( + self.starttag(node, "div", CLASS="math notranslate nohighlight amsmath") + ) + if node["number"]: + number = get_node_equation_number(self, node) + self.body.append(f'<span class="eqno">({number})') + self.add_permalink_ref(node, _("Permalink to this equation")) + self.body.append("</span>") + prefix, suffix = self.builder.config.mathjax_display + self.body.append(prefix) + self.body.append(self.encode(node.astext())) + self.body.append(suffix) + self.body.append("</div>\n") + raise nodes.SkipNode + + return mathjax.html_visit_displaymath(self, node) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/myst_refs.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/myst_refs.py new file mode 100644 index 000000000..5d69666fb --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/sphinx_ext/myst_refs.py @@ -0,0 +1,397 @@ +"""A post-transform for overriding the behaviour of sphinx reference resolution. + +This is applied to MyST type references only, such as ``[text](target)``, +and allows for nested syntax +""" + +from __future__ import annotations + +import re +from typing import Any, cast + +from docutils import nodes +from docutils.nodes import Element, document +from markdown_it.common.normalize_url import normalizeLink +from sphinx import addnodes +from sphinx.addnodes import pending_xref +from sphinx.domains.std import StandardDomain +from sphinx.errors import NoUri +from sphinx.ext.intersphinx import InventoryAdapter +from sphinx.transforms.post_transforms import ReferencesResolver +from sphinx.util import docname_join, logging +from sphinx.util.nodes import clean_astext, make_refnode + +from myst_parser import inventory +from myst_parser._compat import findall +from myst_parser.warnings_ import MystWarnings + +LOGGER = logging.getLogger(__name__) + + +class MystReferenceResolver(ReferencesResolver): + """Resolves cross-references on doctrees. + + Overrides default sphinx implementation, to allow for nested syntax + """ + + default_priority = 9 # higher priority than ReferencesResolver (10) + + def log_warning( + self, target: None | str, msg: str, subtype: MystWarnings, **kwargs: Any + ): + """Log a warning, with a myst type and specific subtype.""" + + # MyST references are warned about by default (the same as the `any` role) + # However, warnings can also be ignored by adding ("myst", target) + # nitpick_ignore/nitpick_ignore_regex lists + # https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-nitpicky + if ( + target + and self.config.nitpick_ignore + and ("myst", target) in self.config.nitpick_ignore + ): + return + if ( + target + and self.config.nitpick_ignore_regex + and any( + ( + re.fullmatch(ignore_type, "myst") + and re.fullmatch(ignore_target, target) + ) + for ignore_type, ignore_target in self.config.nitpick_ignore_regex + ) + ): + return + + LOGGER.warning(msg, type="myst", subtype=subtype.value, **kwargs) + + def run(self, **kwargs: Any) -> None: + self.document: document + for node in findall(self.document)(addnodes.pending_xref): + if node["reftype"] != "myst": + continue + + if node["refdomain"] == "doc": + self.resolve_myst_ref_doc(node) + continue + + newnode = None + contnode = cast(nodes.TextElement, node[0].deepcopy()) + target = node["reftarget"] + refdoc = node.get("refdoc", self.env.docname) + search_domains: None | list[str] = self.env.config.myst_ref_domains + + # try to resolve the reference within the local project, + # this asks all domains to resolve the reference, + # return None if no domain could resolve the reference + # or returns the first result, and logs a warning if + # multiple domains resolved the reference + try: + newnode = self.resolve_myst_ref_any( + refdoc, node, contnode, search_domains + ) + except NoUri: + newnode = contnode + if newnode is None: + # If no local domain could resolve the reference, try to + # resolve it as an inter-sphinx reference + newnode = self._resolve_myst_ref_intersphinx( + node, contnode, target, search_domains + ) + if newnode is None: + # if still not resolved, log a warning, + self.log_warning( + target, + f"'myst' cross-reference target not found: {target!r}", + MystWarnings.XREF_MISSING, + location=node, + ) + + # if the target could not be found, then default to using an external link + if not newnode: + newnode = nodes.reference() + newnode["refid"] = normalizeLink(target) + newnode.append(node[0].deepcopy()) + + # ensure the output node has some content + if ( + len(newnode.children) == 1 + and isinstance(newnode[0], nodes.inline) + and not (newnode[0].children) + ): + newnode[0].replace_self(nodes.literal(target, target)) + elif not newnode.children: + newnode.append(nodes.literal(target, target)) + + node.replace_self(newnode) + + def resolve_myst_ref_doc(self, node: pending_xref): + """Resolve a reference, from a markdown link, to another document, + optionally with a target id within that document. + """ + from_docname = node.get("refdoc", self.env.docname) + ref_docname: str = node["reftarget"] + ref_id: str | None = node["reftargetid"] + + if ref_docname not in self.env.all_docs: + self.log_warning( + ref_docname, + f"Unknown source document {ref_docname!r}", + MystWarnings.XREF_MISSING, + location=node, + ) + node.replace_self(node[0].deepcopy()) + return + + targetid = "" + implicit_text = "" + inner_classes = ["std", "std-doc"] + + if ref_id: + slug_to_section = self.env.metadata[ref_docname].get("myst_slugs", {}) + if ref_id not in slug_to_section: + self.log_warning( + ref_id, + f"local id not found in doc {ref_docname!r}: {ref_id!r}", + MystWarnings.XREF_MISSING, + location=node, + ) + targetid = ref_id + else: + _, targetid, implicit_text = slug_to_section[ref_id] + inner_classes = ["std", "std-ref"] + else: + implicit_text = clean_astext(self.env.titles[ref_docname]) + + if node["refexplicit"]: + caption = node.astext() + innernode = nodes.inline(caption, "", classes=inner_classes) + innernode.extend(node[0].children) + else: + innernode = nodes.inline( + implicit_text, implicit_text, classes=inner_classes + ) + + assert self.app.builder + try: + ref_node = make_refnode( + self.app.builder, from_docname, ref_docname, targetid, innernode + ) + except NoUri: + ref_node = innernode + node.replace_self(ref_node) + + def resolve_myst_ref_any( + self, + refdoc: str, + node: pending_xref, + contnode: Element, + only_domains: None | list[str], + ) -> Element | None: + """Resolve reference generated by the "myst" role; ``[text](#reference)``. + + This builds on the sphinx ``any`` role to also resolve: + + - Document references with extensions; ``[text](./doc.md)`` + - Document references with anchors with anchors; ``[text](./doc.md#target)`` + - Nested syntax for explicit text with std:doc and std:ref; + ``[**nested**](reference)`` + + """ + target: str = node["reftarget"] + results: list[tuple[str, Element]] = [] + + # resolve standard references + res = self._resolve_ref_nested(node, refdoc) + if res: + results.append(("std:ref", res)) + + # resolve doc names + res = self._resolve_doc_nested(node, refdoc) + if res: + results.append(("std:doc", res)) + + assert self.app.builder + + # next resolve for any other standard reference objects + if only_domains is None or "std" in only_domains: + stddomain = cast(StandardDomain, self.env.get_domain("std")) + for objtype in stddomain.object_types: + key = (objtype, target) + if objtype == "term": + key = (objtype, target.lower()) + if key in stddomain.objects: + docname, labelid = stddomain.objects[key] + domain_role = "std:" + (stddomain.role_for_objtype(objtype) or "") + ref_node = make_refnode( + self.app.builder, refdoc, docname, labelid, contnode + ) + results.append((domain_role, ref_node)) + + # finally resolve for any other type of allowed reference domain + for domain in self.env.domains.values(): + if domain.name == "std": + continue # we did this one already + if only_domains is not None and domain.name not in only_domains: + continue + try: + results.extend( + domain.resolve_any_xref( + self.env, refdoc, self.app.builder, target, node, contnode + ) + ) + except NotImplementedError: + # the domain doesn't yet support the new interface + # we have to manually collect possible references (SLOW) + if not (getattr(domain, "__module__", "").startswith("sphinx.")): + self.log_warning( + None, + f"Domain '{domain.__module__}::{domain.name}' has not " + "implemented a `resolve_any_xref` method", + MystWarnings.LEGACY_DOMAIN, + once=True, + ) + for role in domain.roles: + res = domain.resolve_xref( + self.env, refdoc, self.app.builder, role, target, node, contnode + ) + if res and len(res) and isinstance(res[0], nodes.Element): + results.append((f"{domain.name}:{role}", res)) + + # now, see how many matches we got... + if not results: + return None + if len(results) > 1: + + def stringify(name, node): + reftitle = node.get("reftitle", node.astext()) + return f":{name}:`{reftitle}`" + + candidates = " or ".join(stringify(name, role) for name, role in results) + self.log_warning( + target, + f"more than one target found for 'myst' cross-reference {target}: " + f"could be {candidates}", + MystWarnings.XREF_AMBIGUOUS, + location=node, + ) + + res_role, newnode = results[0] + # Override "myst" class with the actual role type to get the styling + # approximately correct. + res_domain = res_role.split(":")[0] + if len(newnode) > 0 and isinstance(newnode[0], nodes.Element): + newnode[0]["classes"] = newnode[0].get("classes", []) + [ + res_domain, + res_role.replace(":", "-"), + ] + + return newnode + + def _resolve_ref_nested( + self, node: pending_xref, fromdocname: str, target=None + ) -> Element | None: + """This is the same as ``sphinx.domains.std._resolve_ref_xref``, + but allows for nested syntax, rather than converting the inner node to raw text. + """ + stddomain = cast(StandardDomain, self.env.get_domain("std")) + target = target or node["reftarget"].lower() + + if node["refexplicit"]: + # reference to anonymous label; the reference uses + # the supplied link caption + docname, labelid = stddomain.anonlabels.get(target, ("", "")) + sectname = node.astext() + innernode = nodes.inline(sectname, "") + innernode.extend(node[0].children) + else: + # reference to named label; the final node will + # contain the section name after the label + docname, labelid, sectname = stddomain.labels.get(target, ("", "", "")) + innernode = nodes.inline(sectname, sectname) + + if not docname: + return None + + assert self.app.builder + return make_refnode(self.app.builder, fromdocname, docname, labelid, innernode) + + def _resolve_doc_nested( + self, node: pending_xref, fromdocname: str + ) -> Element | None: + """This is the same as ``sphinx.domains.std._resolve_doc_xref``, + but allows for nested syntax, rather than converting the inner node to raw text. + + It also allows for extensions on document names. + """ + docname = docname_join(node.get("refdoc", fromdocname), node["reftarget"]) + if docname not in self.env.all_docs: + return None + + if node["refexplicit"]: + # reference with explicit title + caption = node.astext() + innernode = nodes.inline(caption, "", classes=["doc"]) + innernode.extend(node[0].children) + else: + caption = clean_astext(self.env.titles[docname]) + innernode = nodes.inline(caption, caption, classes=["doc"]) + + assert self.app.builder + return make_refnode(self.app.builder, fromdocname, docname, "", innernode) + + def _resolve_myst_ref_intersphinx( + self, + node: nodes.Element, + contnode: nodes.Element, + target: str, + only_domains: list[str] | None, + ) -> None | nodes.reference: + """Resolve a myst reference to an intersphinx inventory.""" + matches = [ + m + for m in inventory.filter_sphinx_inventories( + InventoryAdapter(self.env).named_inventory, + targets=target, + ) + if only_domains is None or m.domain in only_domains + ] + if not matches: + return None + if len(matches) > 1: + # log a warning if there are multiple matches + show_num = 3 + matches_str = ", ".join( + [ + inventory.filter_string(m.inv, m.domain, m.otype, m.name) + for m in matches[:show_num] + ] + ) + if len(matches) > show_num: + matches_str += ", ..." + self.log_warning( + target, + f"Multiple matches found for {target!r}: {matches_str}", + MystWarnings.IREF_AMBIGUOUS, + location=node, + ) + # get the first match and create a reference node + match = matches[0] + newnode = nodes.reference("", "", internal=False, refuri=match.loc) + if "reftitle" in node: + newnode["reftitle"] = node["reftitle"] + else: + newnode["reftitle"] = f"{match.project} {match.version}".strip() + if node.get("refexplicit"): + newnode.append(contnode) + elif match.text: + newnode.append( + contnode.__class__(match.text, match.text, classes=["iref", "myst"]) + ) + else: + newnode.append( + nodes.literal(match.name, match.name, classes=["iref", "myst"]) + ) + + return newnode diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/warnings_.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/warnings_.py new file mode 100644 index 000000000..e4312f7fd --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/myst_parser/warnings_.py @@ -0,0 +1,162 @@ +"""Central handling of warnings for the myst extension.""" + +from __future__ import annotations + +from collections.abc import Sequence +from enum import Enum + +from docutils import nodes, utils + + +class MystWarnings(Enum): + """MyST warning types.""" + + DEPRECATED = "deprecated" + """Deprecated usage.""" + NOT_SUPPORTED = "not_supported" + """Functionality that is not yet supported in docutils.""" + + RENDER_METHOD = "render" + """The render method is not implemented.""" + + MD_TOPMATTER = "topmatter" + """Issue reading front-matter.""" + MD_DEF_DUPE = "duplicate_def" + """Duplicate Markdown reference definition.""" + MD_HEADING_NON_CONSECUTIVE = "header" + """Non-consecutive heading levels.""" + + DIRECTIVE_PARSING = "directive_parse" + """Issue parsing directive.""" + DIRECTIVE_OPTION = "directive_option" + """Issue parsing directive options.""" + DIRECTIVE_OPTION_COMMENTS = "directive_comments" + """Directive options has # comments, which may not be supported in future versions.""" + DIRECTIVE_BODY = "directive_body" + """Issue parsing directive body.""" + UNKNOWN_DIRECTIVE = "directive_unknown" + """Unknown directive.""" + UNKNOWN_ROLE = "role_unknown" + """Unknown role.""" + + # cross-reference resolution + XREF_AMBIGUOUS = "xref_ambiguous" + """Multiple targets were found for a cross-reference.""" + XREF_MISSING = "xref_missing" + """A target was not found for a cross-reference.""" + INV_LOAD = "inv_retrieval" + """Failure to retrieve or load an inventory.""" + IREF_MISSING = "iref_missing" + """A target was not found for an inventory reference.""" + IREF_AMBIGUOUS = "iref_ambiguous" + """Multiple targets were found for an inventory reference.""" + LEGACY_DOMAIN = "domains" + """A legacy domain found, which does not support `resolve_any_xref`.""" + + # extensions + HEADING_SLUG = "heading_slug" + """An error occurred computing a heading slug.""" + STRIKETHROUGH = "strikethrough" + """Strikethrough warning, since only implemented in HTML.""" + HTML_PARSE = "html" + """HTML could not be parsed.""" + INVALID_ATTRIBUTE = "attribute" + """Invalid attribute value.""" + SUBSTITUTION = "substitution" + """Substitution could not be resolved.""" + + +def _is_suppressed_warning( + type: str, subtype: str, suppress_warnings: Sequence[str] +) -> bool: + """Check whether the warning is suppressed or not. + + Mirrors: + https://github.com/sphinx-doc/sphinx/blob/47d9035bca9e83d6db30a0726a02dc9265bd66b1/sphinx/util/logging.py + """ + if type is None: + return False + + subtarget: str | None + + for warning_type in suppress_warnings: + if "." in warning_type: + target, subtarget = warning_type.split(".", 1) + else: + target, subtarget = warning_type, None + + if target == type and subtarget in (None, subtype, "*"): + return True + + return False + + +def create_warning( + document: nodes.document, + message: str, + subtype: MystWarnings | str, + *, + wtype: str | None = None, + node: nodes.Element | None = None, + line: int | None = None, + append_to: nodes.Element | None = None, +) -> nodes.system_message | None: + """Generate a warning, logging if it is necessary. + + If the warning type is listed in the ``suppress_warnings`` configuration, + then ``None`` will be returned and no warning logged. + """ + # In general we want to both create a warning node within the document AST, + # and also log the warning to output it in the CLI etc. + # docutils and sphinx have different ways of doing this, so we need to handle both. + # Note also that in general we want to show the type/subtype in the warning message, + # but this was added as an option to sphinx in v7.3, and made the default in v8.0. + + type_str = wtype if wtype is not None else "myst" + subtype_str = subtype if isinstance(subtype, str) else subtype.value + + message_with_type = f"{message} [{type_str}.{subtype_str}]" + + if hasattr(document.settings, "env"): + # Sphinx + from sphinx.util.logging import getLogger + + logger = getLogger(__name__) + logger.warning( + message, + type=type_str, + subtype=subtype_str, + location=node if node is not None else (document["source"], line), + ) + if _is_suppressed_warning( + type_str, subtype_str, document.settings.env.config.suppress_warnings + ): + return None + if node is not None: + _source, _line = utils.get_source_line(node) + else: + _source, _line = document["source"], line + msg_node = _create_warning_node(message_with_type, _source, _line) + else: + # docutils + if _is_suppressed_warning( + type_str, subtype_str, document.settings.myst_suppress_warnings or [] + ): + return None + kwargs = {} + if node is not None: + kwargs["base_node"] = node + elif line is not None: + kwargs["line"] = line + msg_node = document.reporter.warning(message_with_type, **kwargs) + + if append_to is not None: + append_to.append(msg_node) + return msg_node + + +def _create_warning_node( + msg: str, source: str, line: int | None +) -> nodes.system_message: + kwargs = {"line": line} if line is not None else {} + return nodes.system_message(msg, level=2, type="WARNING", source=source, **kwargs) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc index cbd45f80e..85924a376 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc index 034c2ff1e..975856db0 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc index db6f00df7..c39add4b1 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc index 173747e4b..62a91a0c7 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc index ee2b13101..7460f7f8d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc index 84e4e3c75..73c5c41a4 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc index 789ba81f0..1bd3d628c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc index 7ac10a4f7..9c78d0847 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc index 6613257d4..ffa31ea31 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc index eebc1fb81..a7fae649e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc index 4965723c0..ea0f88ed8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc index e95d61642..25df4fcf4 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc index ec86a6063..bdebd6b70 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc index e2a194327..70d173644 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc index ad76d84e6..4fe736c3d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc index 970cf2114..be4883102 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc index 0a708a584..ee68f29fc 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc index 9724976fa..9495c9029 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc index 21916e7da..3f1a24efd 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc index 74a9270db..ef792b2ba 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc index 849c2fe31..4dc0c2bca 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc index 5166134d8..0af65d207 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc index fea9baa1a..5a6555237 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc index 8ef9ead44..48ae33ac6 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc index 73cb5d375..3825de83e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc index 1f8a0dd7d..069149869 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc index 7a1d23034..a577b6e01 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc index bb8e757d8..71e0b2b7c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc index 267db78ea..cbf51a50a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc index 463eea8af..e29e20674 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc index 49fb1593c..caa9f7351 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc index a7af9924d..5e0b83f3d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc index 36c00d9e6..e6f5d7caf 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc index 9c6061508..04701438b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc index 7a8dc81ea..3eda39fb5 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc index 14acc7c99..2bb02ffe2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc index 1a6dec862..b26bcbfcc 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc index d1e1b6217..c537cf5fd 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc index 70c47ab59..530aa4a43 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc index 5025c6aa3..9f55d0110 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc index ee2f6360c..d29c39d4e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc index fa19cf31a..457c35d28 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc index 5bb9a878e..59bbf7275 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc index 476be9374..e86fe1c9d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc index 56fda49b2..eabc175a3 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc index 539145174..02486729d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc index dfc55a706..394e32948 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc index 7579e650b..24d8cfcce 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc index 78a92182d..73bae9c51 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc index 2f8000a3b..44c9c709a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc index fb010ba11..74f5b3f13 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc index 6bcf817ba..4e7879a65 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc index 7c633d956..b21d947b6 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc index 88b9d2978..a6631d5d1 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc index 364648a7b..74e12bc7d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc index 129602f49..f79473fd7 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc index 8b57cff40..d0b1bd2d6 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc index 80a0174c8..eb99ef47c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc index 9671b99c9..7d4a694db 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc index ada902fd1..5edd8135c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc index 924b453e4..f25811fd4 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc index 0d4ae2be4..f0a6e671b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc index eb94ad783..46e7b2a9f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc index 2b95ce765..f8cdc99ce 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc index db87f5eb7..9b9595cf9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc index 7e9e296e0..9657259cc 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc index 6b92ff18d..de175609d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc index 85c2ac3c1..19341408d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc index 4129fd9d6..f0832d65a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc index 2491133b9..08cf36293 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc index 98b18c12a..f512a1a9b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc index 4d0a15a04..90879a8fe 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc index d587dcdc9..551f3d39b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc index 9fcee4659..6e9ad21a2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc index 99923df72..a1f9e3710 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc index 13a5cdef3..6aef1562a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc index 73c6c8879..52a6a5667 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc index cef8c3264..54557c9f7 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc index 52d2881e4..a5cbf7fcc 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc index e74b1549c..e4d77c54c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc index d0a563687..ea4d33a63 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc index 9309d2ac9..8a79f4a38 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc index ff7e6e3fb..dcd958b85 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc index 4e29449f3..8664bd178 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc index e3fb19f26..eadf755f2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc index 1c3c1ad28..e58bee2dd 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc index 513a61ea8..81ed3caf1 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc index f70d52f3a..62d38490e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc index 65e36c040..5af21fa15 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc index a0adf7200..a1796648a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc index cc6e809fd..76a656941 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc index 0c13d9a0c..1b6de7a1a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc index 72d856ed2..1319784e5 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc index 3d730a435..c0e9a0726 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc index 4636c26a8..55a3fed02 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc index 135abda80..2c0abc836 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc index d34a37e75..c31634f2c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc index 97df30735..2bbb95fcf 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc index ae3e0395b..9dd6318ac 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc index b937fbb27..4e5c57883 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc index acf36079b..75ea91e9f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc index 3b061a591..962cea650 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc index 29e393f56..d499a3f9f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc index 3f93574b1..54e6bafe9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc index eccf37138..a85771941 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc index 8b07a8bfb..98284611c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc index e7d70b906..3ff1f3196 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc index c9506e840..a7bba7832 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc index d4cde8b4b..b95b79783 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc index 15fa6628d..8c48aa773 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc index d314245a5..84d112140 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc index 146357b5d..ab67e6438 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc index 89d80f31d..ef7197b38 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc index 34128e91c..a68345a42 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc index 78d0ad3fd..c8d1e5b65 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc index bdde7a980..023f583f3 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc index a6e9e526b..5f6c815f7 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc index 1bac690ce..25ee12edf 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc index 1e04437aa..4fca8339f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc index b287549d7..1328aa7a3 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc index e69f44e0a..2843f152b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc index 14bb83eb1..ca8394382 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc index b2a6135dc..5d99c40ae 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc index a1ec39688..6596529b8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc index e09680def..8354c6031 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc index dd59195b3..af45502a9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc index c3a0bd6fe..b0a4c196c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc index c7e6edb2c..71a916e36 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc index 29498cd82..39fde44d7 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc index 9b0a465e5..f0300519d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc index 5cc1b74e8..3697e1ea1 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc index cf4a96721..920478717 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc index cfb0d5059..e7826d397 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc index 836bc70ad..ed77f2542 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc index 775b69038..6529587a8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc index 4ee310ee5..033846673 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc index 4b7eeac6e..2563fba13 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc index 9fd13bfcc..a74992af1 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc index 45d1d229b..bd481854f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc index f43df5caf..b999942d6 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc index 3ae9392eb..62f01276f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc index 070c8925f..21d452a06 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc index 12aab50fc..8b00e7ed8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc index 5ada41787..3fab00247 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc index 42556696e..fb25be46e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc index 5e5158d08..ed71c0037 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc index 9301358f1..660b6c9ad 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc index 0208a4399..455eea024 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc index 6f949210e..4048d5b24 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc index 9f123007a..afd5703b5 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-312.pyc index 900cc78fb..83789f732 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc index f79dab322..19bbf37df 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc index c2ce4a664..4ef064149 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc index 24cae844d..a0d48b610 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-312.pyc index 883e38a50..b08d8dcfc 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc index ff9fb905a..1ca606a45 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc index a6071c36a..24d2b2c59 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc index 0176e07d5..15b271681 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc index 63beab465..1f5622331 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc index 82db2f350..e86fe6599 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc index fbf130af1..30abcd363 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc index f6ef0e0cb..53f66f043 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc index 5276c4861..5f71de798 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc index d0fef964f..6c702574b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc index 068288a4b..76eb15161 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc index 5bd8b3668..8efe81793 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc index 25de1556e..2b17ddbcc 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc index 230227239..e0dae5cd7 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc index 052515c6f..ea897d659 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc index 63c3b238f..ff2e11679 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc index c65574e59..a6d0d80bc 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc index f053ce7e2..328ad8503 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc index e648ab8dd..af11bd90e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc index d308428b6..e8f7f2eb8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc index fac2e0e3b..986e64ff0 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc index 1d15ef069..7ec26dca4 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-312.pyc index fc67d36e5..b297c9bc9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-312.pyc index aefa62ba5..957849981 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-312.pyc index 0f0d95c01..4a3025d5d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc index eb992b664..b9352f5f8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-312.pyc index 4aa9996bf..a6e4a78a9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc index 8f08141e6..5c12f5a10 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc index 742dd1151..d10a5c3d0 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc index ccb3a276c..468f5fabf 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc index 7c362fbe5..96e9457aa 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc index 02821983b..ef136493e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc index 6d46e3687..cda0d23d3 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc index 10cb9f5a0..8b964b856 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc index f6850f7cf..c7e449dbc 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc index 4c33f1145..faa964508 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc index 8c25428b4..95fe1f2ca 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc index d2f605553..2b47a8147 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc index 2e782dd48..acf142301 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc index 39ffa4001..7a4154b97 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc index 10cd27204..1aa16a61d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc index a9e55d631..bf78989f9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc index 6b711c159..18f65fc1d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc index 0ec89b9b4..15297c1e8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc index 85deb32a8..aa04f0d61 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc index e82c4aea7..53a5c1738 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc index 723433485..12587a4d4 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc index 0df3a7bb6..9a592e477 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc index ad099868b..bad879451 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc index 397dc4b53..c2fbf5dd8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc index 47123068e..a07b4e809 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc index 941cbca0d..89b7480d4 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc index 91b0a3905..3d07dfc1f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc index 3707dd539..44892d512 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc index c72978ac1..1689038dd 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc index 89f553956..04b2a602e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc index 018f466d7..5a2de47b2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc index da68acf2a..c5799a577 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc index b33dda6a2..5dffac149 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc index 476649bdd..02caa2744 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc index 91bff2dde..c85202c9a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc index 7229810d8..a0c63e0d8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc index edc2905e3..fcbe2c0f8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc index 8de26a282..e571f0a8e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc index b9e15e42f..3f69b3f98 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc index 774f07af7..1cdebe5dd 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc index 824911283..0f35c5186 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc index 4a584e17d..9326b757c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc index c7270a8d4..c3b3ccbe9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc index 3e84aaf10..29ddabab3 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc index 98549c0ac..82614997b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc index 51ae2226d..2cbc7ee7b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc index e201486c6..e68defb91 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-312.pyc index e4bf61fff..e5dd9f2b9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-312.pyc index 0601ff1c7..e21cc37cd 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-312.pyc index 09be83787..44c3bffb2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc index 83f9830ee..aa8ccea61 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc index b1a9c9026..0e1c0769c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc index 8557afcf0..0dabdf1aa 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc index 85712147c..8c2707d33 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc index 2c636d31b..b46356d61 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-312.pyc index 0e258683b..0da3c2f0b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc index 6927b2c64..85450a139 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc index 3db4d8354..47e356d2a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc index fd0f41fa5..15cf96ce0 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc index 400a57d24..7dc1ef1d8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc index 37ceba5eb..a2f2dbff5 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc index 49636cbb1..1598eab8a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc index 5c00c63b5..d4d09c0ce 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc index 9361f4841..c59d3702c 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc index 51899a38e..b31b64573 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc index 4f3ba45b2..7550db100 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc index 3fb9ad935..31465797b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc index 722ba832f..db5635ae2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc index 963dba8dc..030d8acf0 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc index b695a1e82..53be0360f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc index 2000b8446..0c1aae5b9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc index dcfa21e4c..b34eafed8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc index fe9796b48..d050515e2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc index 0f7b9886a..c5f0ef8f6 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc index 3fa2e6d58..8dc9fa0c8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc index 85aca5f72..42cc3230a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc index 5394561be..b5b2ce501 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc index 0be224c8e..ae71318e8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc index 4f76b0582..566be401e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc index a19a29351..281a46d5d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc index 083e816db..52e22c15e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc index 2870feff9..f9b78eb35 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc index 16cc8cbfc..fe4e9831a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc index 848e52f63..f16e13fb2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc index c37cdc488..975b791cf 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc index b70764a26..155c707f4 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc index 5cab64e6b..07dfc98a9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc index a409752e7..ed207d651 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc index 09d6d9c0c..cfa065043 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc index efc87f82c..3bbd465f9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc index 48e65cebb..e49b46ce5 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc index 1fc442878..10174a1d8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc index d79a93406..d5de1169a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc index 6db93bfc0..2421ca786 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc index 45728ca93..87e8ade5e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc index 6347efd1e..b32373320 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc index 27fc3ce58..c59c344c4 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc index 8dc4242d5..ad4063003 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc index 49f68af4d..d3e8f84cb 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc index f4c31d36c..e6e16633a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc index 3b0fba293..78dd547ed 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc index 7b697d448..ef0ade3e2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc index 7d98f60cf..fa260f0b4 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc index 0fa8d7aa8..84b0b6502 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc index c2fed9e89..e615edc07 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc index 2bdfa5643..2ea5c8a2a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc index 062f5078b..db23d7463 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc index da7170fd9..87580ea9f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc index e9f4bd477..30a32257e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc index 41e1a9a15..e0bbf1650 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc index 5c616d640..05ba728e0 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc index 27249fa16..80b4b784f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc index 4d2ddefeb..7800ee542 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc index 3d8e0b4be..31d2c9417 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc index 89d91389e..932fb078d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc index 9e9f09297..ffa80f608 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc index 7a0a248a8..8b448c1fc 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc index 6fb337a27..6474cf9f5 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc index ed21641a1..84135c776 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc index 1942b3ecb..690063c2d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc index 046830542..e57920293 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc index 428bae15b..19a60a326 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc index f1f13fb96..11c4ae7ea 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc index 2a1c28538..95901fefb 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc index 53f6414cd..214fec899 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc index 263e6cf27..ffb38961d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc index 6f0579296..6a1c5de8b 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc index a2dc2349a..93bb5e2d2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc index 2c70601e7..79e12728a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc index 45cb6e52a..755f0df88 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc index 3401e24c0..3ebdd82d1 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc index b5eb5dea3..7d18c8fce 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc index 0b0479e58..6a158a180 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc index 037cfffbf..af63d3dd9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc index 99f7d25ae..4f3fa62fe 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc index 212ddb91e..c54fa6270 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc index 8c480714a..1ab0ca44f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc index 175a9614e..0d5ad3349 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc index e237ecfeb..536c8866a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc index a82e39834..b8e43053f 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc index db77ad8fc..aef386eb0 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc index e7d933cfc..485b9e120 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc index c639701c8..773b25e20 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc index bb8e210ef..c347f88d4 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc index ab1fa6b20..b2645df60 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-312.pyc index abcf7764d..062af2599 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-312.pyc index 6b9dcc307..81caef3d9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-312.pyc index c40e304a9..fc24d7363 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-312.pyc index 26f9a6e50..258ca6329 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-312.pyc index c2897737b..9874072c1 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-312.pyc index bdd159aeb..b2e236d53 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc index 3f7870bbb..daaccb687 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-312.pyc index 0a2abefcb..25834ec70 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-312.pyc index 78fe91df5..d20f2a5b6 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc index 12e669d9b..4c658d800 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc index fda980f5a..811f6ccc2 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc index e378bc580..5505045fd 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc index b023fc91c..71f02c149 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc index 44948f7ad..9d3e25d00 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc index 9fbd6284b..2faef7eda 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc index 690c9311f..bca4df5fd 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc index c08c9dd0d..1cde6da53 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc index 4bee86b89..9d4cf838e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc index 64050cb48..4c3306e84 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc index 1fc20d955..876e5f2f9 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc index 6d7c86d7a..777d77b80 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc index 1a319a371..077e24146 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc index a0924d799..eeab09bbe 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc index 900d802ca..98be8cf8e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc index e7d5a211e..212feb89e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc index bc60d32da..b5cbcd1f6 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc index 25e64cffe..036253f4e 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc index 843455289..4891acc0a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc index 9b78e6674..e78dadeb3 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc index 9b721963d..2e8e60058 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc index 4896d6944..09d8f8193 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc index f31347a5b..c3d38bac3 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc index aa5750edc..9798201a7 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc index f6b270014..6605ecc31 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc index 0ed8cacc8..fdcd7c82a 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc index c43fb9f9e..a99b22d82 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc index 245f6b3d4..dc6925de8 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc index 6ca93d0e4..e6abe8017 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc index 094823c44..ce0df899d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc index 2501d0e34..9b53eabea 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc index 137f6c297..47f15ee9d 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc index 1926c1dc8..c8bd5ae02 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc index 1797ee3fe..9afd9a476 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__init__.py new file mode 100644 index 000000000..27bb7de3c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__init__.py @@ -0,0 +1,52 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +"""rinohtype + + +""" + +import os + +from importlib import import_module + +try: + import importlib.metadata as importlib_metadata +except ModuleNotFoundError: + import importlib_metadata + + +CORE_MODULES = ['annotation', 'attribute', 'color', 'dimension', 'document', + 'draw', 'element', 'flowable', 'glossary', 'highlight', + 'image', 'index', 'inline', 'layout', 'number', 'paper', + 'paragraph', 'reference', 'structure', 'style', 'table', + 'template', 'text'] + +__all__ = CORE_MODULES + ['font', 'fonts', 'frontend', 'backend', 'resource', + 'styleds', 'styles', 'stylesheets', 'templates', + 'strings', 'language'] + + +DATA_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'data') + + +__version__ = importlib_metadata.version('rinohtype') +__release_date__ = '2024-07-13' + + +from . import resource + +# create proxies for the core classes/constants at the top level for easy access +for name in CORE_MODULES: + module = import_module('.' + name, __name__) + module_dict, module_all = module.__dict__, module.__all__ + globals().update({name: module_dict[name] for name in module_all}) + __all__ += module_all + + +register_template = resource._DISTRIBUTION.register_template +register_typeface = resource._DISTRIBUTION.register_typeface diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__main__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__main__.py new file mode 100644 index 000000000..d5d83d99f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__main__.py @@ -0,0 +1,342 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import argparse +import os +import sys +import webbrowser + +from collections import OrderedDict +from contextlib import suppress +from pathlib import Path +from platform import platform + +from rinoh import __version__, __release_date__ + +from rinoh.attribute import Source +from rinoh.color import BLACK +from rinoh.dimension import PT, PERCENT +from rinoh.document import DocumentTree +from rinoh.draw import Stroke +from rinoh.flowable import StaticGroupedFlowables, GroupedFlowablesStyle +from rinoh.font import Typeface, FontSlant, FontWeight, FontWidth +from rinoh.font.google import installed_google_fonts_typefaces +from rinoh.paper import Paper, PAPER_BY_NAME +from rinoh.paragraph import ParagraphStyle, Paragraph, TabStop +from rinoh.resource import find_entry_points, ResourceNotFound +from rinoh.style import StyleSheet, StyleSheetFile +from rinoh.template import DocumentTemplate, TemplateConfigurationFile +from rinoh.templates import Article + + +DESCRIPTION = 'Render a structured document to PDF.' + +DOCS_URL = 'http://www.mos6581.org/rinohtype/' + +DEFAULT = ' (default: %(default)s)' + + +parser = argparse.ArgumentParser('rinoh', description=DESCRIPTION) +parser.add_argument('input', type=str, nargs='?', + help='the document to render') +parser.add_argument('-f', '--format', type=str, + help='the format of the input file' + + DEFAULT % dict(default='autodetect')) +parser.add_argument('-o', '--option', type=str, action='append', nargs=1, + default=[], metavar='OPTION=VALUE', + help='options to be passed to the input file reader') +parser.add_argument('-t', '--template', type=str, default='article', + metavar='NAME or FILENAME', + help='the document template or template configuration ' + 'file to use' + DEFAULT) +parser.add_argument('-s', '--stylesheet', type=str, metavar='NAME or FILENAME', + help='the style sheet used to style the document ' + 'elements ' + + DEFAULT % dict(default="the template's default")) +parser.add_argument('-O', '--output', type=str, + metavar='FILENAME or DIRECTORY', + help='write the PDF output to FILENAME or to an existing ' + 'DIRECTORY with a filename derived from the input ' + 'filename (default: the current working directory)') +parser.add_argument('-p', '--paper', type=str, + help='the paper size to render to ' + + DEFAULT % dict(default="the template's default")) +parser.add_argument('-i', '--install-resources', action='store_true', + help='automatically install missing resources (fonts, ' + 'templates, style sheets) from PyPI') +parser.add_argument('--list-templates', action='store_true', + help='list the installed document templates and exit') +parser.add_argument('--list-stylesheets', action='store_true', + help='list the installed style sheets and exit') +parser.add_argument('--list-fonts', metavar='FILENAME', type=str, nargs='?', + const=object, + help='list the installed fonts or, if FILENAME is given, ' + 'write a PDF file displaying all the fonts') +parser.add_argument('--list-formats', action='store_true', + help='list the supported input formats and exit') +parser.add_argument('--list-options', metavar='FRONTEND', type=str, + help='list the options supported by the given frontend ' + 'and exit') +parser.add_argument('--version', action='version', + version='%(prog)s {} ({})'.format(__version__, + __release_date__)) +parser.add_argument('--versions', action='store_true', + help='list versions of rinohtype and related software (for ' + 'inclusion in bug reports)') +parser.add_argument('--docs', action='store_true', + help='open the online documentation in the default ' + 'browser') + + +def get_distribution_name(dist): + return ('built-in' if dist.metadata['Name'] == 'rinohtype' + else '{0[Name]} {0[Version]}'.format(dist.metadata)) + + +def get_reader_by_name(format_name): + for entry_point, _ in find_entry_points('rinoh.frontends', format_name): + return entry_point.name, entry_point.load() + raise SystemExit("Unknown format '{}'. Run `{} --list-formats` to " + "find out which formats are supported." + .format(format_name, parser.prog)) + + +def get_reader_by_extension(file_extension): + for entry_point, dist in find_entry_points('rinoh.frontends'): + reader_cls = entry_point.load() + if file_extension in reader_cls.extensions: + print('Using the {} frontend [{}]' + .format(entry_point.name, get_distribution_name(dist))) + return entry_point.name, reader_cls + print("Cannot determine input format from extension '{}'; assuming " + "reStructuredText. You can specify the format using the `--format` " + "option. Run `{} --list-formats` to find out which formats are " + "supported.".format(file_extension, parser.prog)) + (entry_point, _), = find_entry_points('rinoh.frontends', 'reStructuredText') + return entry_point.name, entry_point.load() + + +def installed_typefaces(): + for entry_point, dist in find_entry_points('rinoh.typefaces'): + yield entry_point.load(), get_distribution_name(dist) + for typeface in installed_google_fonts_typefaces(): + yield typeface, 'Google Fonts' + + +def display_fonts(filename): + def font_paragraph(typeface, font): + style = ParagraphStyle(typeface=typeface, font_width=font.width, + font_slant=font.slant, font_weight=font.weight) + return Paragraph(' '.join((typeface.name, + FontWidth.to_name(font.width).title(), + font.slant.title(), + FontWeight.to_name(font.weight).title())), + style=style) + + def typeface_section(typeface, distribution): + group_style = GroupedFlowablesStyle(space_below=10*PT) + title_style = ParagraphStyle(keep_with_next=True, + tab_stops=[TabStop(100*PERCENT, 'right')], + border_bottom=Stroke(0.5*PT, BLACK), + padding_bottom=1*PT, + space_below=2*PT) + title = Paragraph('{}\t[{}]'.format(typeface.name, distribution), + style=title_style) + return StaticGroupedFlowables([title] + + [font_paragraph(typeface, font) + for font in typeface.fonts()], + style=group_style) + + document_tree = DocumentTree(typeface_section(typeface, dist) + for typeface, dist in installed_typefaces()) + template_cfg = Article.Configuration('fonts overview', parts=['contents']) + document = template_cfg.document(document_tree) + document.render(filename) + + +def main(): + global parser + args = parser.parse_args() + do_exit = False + if args.versions: + print(f'rinohtype {__version__} ({__release_date__})') + with suppress(ImportError): + import sphinx + print(f'Sphinx {sphinx.__version__}') + print(f'Python {sys.version}') + print(platform()) + return + if args.docs: + webbrowser.open(DOCS_URL) + return + if args.list_templates: + print('Installed document templates:') + for name, _ in sorted(DocumentTemplate.installed_resources): + print('- {}'.format(name)) + do_exit = True + if args.list_stylesheets: + print('Installed style sheets:') + for name, _ in sorted(StyleSheet.installed_resources): + print('- {}'.format(name)) + do_exit = True + if args.list_formats: + print('Supported input file formats:') + for entry_point, dist in find_entry_points('rinoh.frontends'): + reader_cls = entry_point.load() + print('- {} (.{}) [{}]' + .format(entry_point.name, ', .'.join(reader_cls.extensions), + get_distribution_name(dist))) + do_exit = True + if args.list_options: + reader_name, reader_cls = get_reader_by_name(args.list_options) + if list(reader_cls.supported_attributes): + print('Options supported by the {} frontend'.format(reader_name)) + for name in reader_cls.supported_attributes: + attr_def = reader_cls.attribute_definition(name) + print('- {} ({}): {}. Default: {}' + .format(name, attr_def.accepted_type.__name__, + attr_def.description, attr_def.default_value)) + else: + print('The {} frontend takes no options'.format(reader_name)) + do_exit = True + if args.list_fonts: + if args.list_fonts is object: + print('Installed fonts:') + for typeface, distribution in installed_typefaces(): + print('- {} [{}]' .format(typeface.name, distribution)) + widths = OrderedDict() + for font in typeface.fonts(): + widths.setdefault(font.width, []).append(font) + for width, fonts in widths.items(): + styles = [] + for font in fonts: + style = FontWeight.to_name(font.weight) + if font.slant != FontSlant.UPRIGHT: + style = '{}-{}'.format(font.slant, style) + styles.append(style) + print(' {}: {}'.format(FontWidth.to_name(width), + ', '.join(styles))) + else: + display_fonts(args.list_fonts) + do_exit = True + if do_exit: + return + + if args.input is None: + parser.print_help() + return + + template_cfg = {} + variables = {} + cwd_source = CwdSource() + if args.stylesheet: + try: + stylesheet = StyleSheet.from_string(args.stylesheet, + source=cwd_source) + except FileNotFoundError: + raise SystemExit("Could not find the style sheet '{}'. " + "Aborting.\n" + "Make sure the path to your style sheet is " + "correct, or run `{} --list-stylesheets` to find " + "out which style sheets are installed." + .format(args.stylesheet, parser.prog)) + template_cfg['stylesheet'] = stylesheet + if args.paper: + try: + variables['paper_size'] = Paper.from_string(args.paper.lower()) + except ValueError: + accepted = ', '.join(sorted(paper.name for paper + in PAPER_BY_NAME.values())) + raise SystemExit("Unknown paper size '{}'. Must be one of:\n" + " {}".format(args.paper, accepted)) + + if not os.path.exists(args.input): + raise SystemExit('{}: No such file'.format(args.input)) + input_dir, input_filename = os.path.split(args.input) + input_root, input_ext = os.path.splitext(input_filename) + + if args.output: + if os.path.isdir(args.output): + output_path = os.path.join(args.output, input_root) + else: + output_path = args.output + else: + output_path = input_root + + reader_name, reader_cls = (get_reader_by_name(args.format) if args.format + else get_reader_by_extension(input_ext[1:])) + str_options = dict((part.strip() for part in option.split('=', maxsplit=1)) + for option, in args.option) + try: + options = {} + for key, str_value in str_options.items(): + attr_def = reader_cls.attribute_definition(key) + options[key] = attr_def.accepted_type.from_string(str_value) + except KeyError as e: + raise SystemExit('The {} frontend does not accept the option {}' + .format(reader_name, e)) + except ValueError as e: + raise SystemExit("The value passed to the '{}' option is not valid:\n" + ' {}'.format(key, e)) + reader = reader_cls(**options) + + if os.path.isfile(args.template): + template_cfg['base'] = TemplateConfigurationFile(args.template, + source=cwd_source) + template_cls = template_cfg['base'].template + else: + try: + template_cls = DocumentTemplate.from_string(args.template) + except ResourceNotFound: + raise SystemExit("Could not find the template (configuration file) " + "'{}'. Aborting.\nMake sure the path to your " + "template configuration file is correct, or run " + "`{} --list-stylesheets` to find out which " + "templates are installed.".format(args.template, + parser.prog)) + + configuration = template_cls.Configuration('rinoh command line options', + **template_cfg) + configuration.variables.update(variables) + + document_tree = reader.parse(args.input) + while True: + try: + document = template_cls(document_tree, configuration=configuration) + success = document.render(output_path) + if not success: + raise SystemExit('Rendering completed with errors') + break + except ResourceNotFound as err: + if args.install_resources: + print("Attempting to the install the '{}' {} from PyPI:" + .format(err.resource_name, err.resource_type.title())) + success = Typeface.install_from_pypi(err.entry_point_name) + if not success: + raise SystemExit("No '{}' {} found on PyPI. Aborting." + .format(err.resource_name, + err.resource_type)) + else: + raise SystemExit("{} '{}' not installed. Consider passing the " + "--install-resources command line option." + .format(err.resource_type.title(), + err.resource_name)) + + +class CwdSource(Source): + @property + def location(self): + return 'current working directory' + + @property + def root(self): + return Path.cwd() + + +if __name__ == '__main__': + main() diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..3d24e511c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/__main__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 000000000..ebcec2634 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/__main__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/annotation.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/annotation.cpython-312.pyc new file mode 100644 index 000000000..d10a96e2c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/annotation.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/attribute.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/attribute.cpython-312.pyc new file mode 100644 index 000000000..149eb00e7 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/attribute.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/color.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/color.cpython-312.pyc new file mode 100644 index 000000000..f18afd886 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/color.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/csl_formatter.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/csl_formatter.cpython-312.pyc new file mode 100644 index 000000000..efe268f42 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/csl_formatter.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/dimension.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/dimension.cpython-312.pyc new file mode 100644 index 000000000..543fd346f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/dimension.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/document.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/document.cpython-312.pyc new file mode 100644 index 000000000..c4034a9b2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/document.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/draw.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/draw.cpython-312.pyc new file mode 100644 index 000000000..a345f78db Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/draw.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/element.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/element.cpython-312.pyc new file mode 100644 index 000000000..6da28d1f1 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/element.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/flowable.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/flowable.cpython-312.pyc new file mode 100644 index 000000000..b3433a13e Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/flowable.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/glossary.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/glossary.cpython-312.pyc new file mode 100644 index 000000000..96813c4dd Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/glossary.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/highlight.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/highlight.cpython-312.pyc new file mode 100644 index 000000000..617f4ea20 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/highlight.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/hyphenator.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/hyphenator.cpython-312.pyc new file mode 100644 index 000000000..9e283a90c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/hyphenator.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/image.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/image.cpython-312.pyc new file mode 100644 index 000000000..ff2fe7ab1 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/image.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/index.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/index.cpython-312.pyc new file mode 100644 index 000000000..59585bd7b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/index.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/inline.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/inline.cpython-312.pyc new file mode 100644 index 000000000..b16de4341 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/inline.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/layout.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/layout.cpython-312.pyc new file mode 100644 index 000000000..fdcd3876a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/layout.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/number.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/number.cpython-312.pyc new file mode 100644 index 000000000..6b7fc109b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/number.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/paper.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/paper.cpython-312.pyc new file mode 100644 index 000000000..c312575f7 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/paper.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/paragraph.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/paragraph.cpython-312.pyc new file mode 100644 index 000000000..959c59621 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/paragraph.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/reference.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/reference.cpython-312.pyc new file mode 100644 index 000000000..ea5a24b34 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/reference.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/resource.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/resource.cpython-312.pyc new file mode 100644 index 000000000..a9d7e1e34 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/resource.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/strings.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/strings.cpython-312.pyc new file mode 100644 index 000000000..2eb019ac6 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/strings.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/structure.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/structure.cpython-312.pyc new file mode 100644 index 000000000..1519188d5 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/structure.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/style.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/style.cpython-312.pyc new file mode 100644 index 000000000..4c685d3d0 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/style.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/styleds.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/styleds.cpython-312.pyc new file mode 100644 index 000000000..542662355 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/styleds.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/styles.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/styles.cpython-312.pyc new file mode 100644 index 000000000..f3723642f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/styles.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/table.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/table.cpython-312.pyc new file mode 100644 index 000000000..a06edf3a2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/table.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/template.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/template.cpython-312.pyc new file mode 100644 index 000000000..0711347fa Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/template.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/text.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/text.cpython-312.pyc new file mode 100644 index 000000000..4a0d85979 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/text.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/util.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/util.cpython-312.pyc new file mode 100644 index 000000000..197e3ddbe Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/util.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/warnings.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/warnings.cpython-312.pyc new file mode 100644 index 000000000..61df45f53 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/__pycache__/warnings.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/annotation.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/annotation.py new file mode 100644 index 000000000..ab31a59f4 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/annotation.py @@ -0,0 +1,56 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .util import Decorator + + +__all__ = ['NamedDestination', 'NamedDestinationLink', 'HyperLink', + 'AnnotatedSpan'] + + +class Annotation(object): + pass + + +class AnchorAnnotation(Annotation): + pass + + +class NamedDestination(AnchorAnnotation): + type = 'NamedDestination' + + def __init__(self, *names): + self.names = names + + +class LinkAnnotation(Annotation): + pass + + +class NamedDestinationLink(LinkAnnotation): + type = 'NamedDestinationLink' + + def __init__(self, name): + self.name = name + + def __repr__(self): + return f"{type(self).__name__}('{self.name}')" + + +class HyperLink(LinkAnnotation): + type = 'URI' + + def __init__(self, target): + self.target = target + + +class AnnotatedSpan(Decorator): + def __init__(self, span, anchor=None, link=None): + super().__init__(span) + self.anchor_annotation = anchor + self.link_annotation = link diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/attribute.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/attribute.py new file mode 100644 index 000000000..e2fdd2130 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/attribute.py @@ -0,0 +1,614 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import re + +from collections import OrderedDict +from configparser import ConfigParser +from io import StringIO +from itertools import chain +from pathlib import Path +from token import NUMBER, ENDMARKER, MINUS, PLUS, NAME, NEWLINE +from tokenize import generate_tokens +from warnings import warn + +from .util import (NamedDescriptor, WithNamedDescriptors, + NotImplementedAttribute, class_property, PeekIterator, + cached) + + +__all__ = ['AttributeType', 'AcceptNoneAttributeType', 'OptionSet', + 'OptionSetMeta', 'Attribute', 'OverrideDefault', + 'AttributesDictionary', 'Configurable', 'RuleSet', 'RuleSetFile', + 'Bool', 'Integer', 'ParseError', 'Var'] + + +class AttributeType(object): + def __eq__(self, other): + return type(self) == type(other) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not self == other + + @classmethod + def check_type(cls, value): + return isinstance(value, cls) + + @classmethod + def from_string(cls, string, source=None): + return cls.parse_string(string, source) + + @classmethod + def parse_string(cls, string, source): + tokens = TokenIterator(string) + value = cls.from_tokens(tokens, source) + if next(tokens).type != ENDMARKER: + raise ParseError('Syntax error') + return value + + @classmethod + def from_tokens(cls, tokens, source): + raise NotImplementedError(cls) + + @classmethod + def validate(cls, value): + if isinstance(value, str): + value = cls.from_string(value) + if not cls.check_type(value): + raise TypeError("{} is not of type {}".format(value, cls.__name__)) + return value + + @classmethod + def doc_repr(cls, value): + return '``{}``'.format(value) if value else '(no value)' + + @classmethod + def doc_format(cls): + warn('Missing implementation for {}.doc_format'.format(cls.__name__)) + return '' + + +class AcceptNoneAttributeType(AttributeType): + """Accepts 'none' (besides other values)""" + + @classmethod + def check_type(cls, value): + return (isinstance(value, type(None)) + or super(__class__, cls).check_type(value)) + + @classmethod + def from_string(cls, string, source=None): + if string.strip().lower() == 'none': + return None + return super(__class__, cls).from_string(string, source) + + @classmethod + def doc_repr(cls, value): + return '``{}``'.format('none' if value is None else value) + + +class OptionSetMeta(type): + def __new__(metacls, classname, bases, cls_dict): + cls = super().__new__(metacls, classname, bases, cls_dict) + cls.__doc__ = (cls_dict['__doc__'] + '\n\n' + if '__doc__' in cls_dict else '') + cls.__doc__ += 'Accepts: {}'.format(cls.doc_format()) + return cls + + def __getattr__(cls, item): + if item == 'NONE' and None in cls.values: + return None + string = item.lower().replace('_', ' ') + if item.isupper() and string in cls.values: + return string + raise AttributeError(item) + + def __iter__(cls): + return iter(cls.values) + + +class OptionSet(AttributeType, metaclass=OptionSetMeta): + """Accepts the values listed in :attr:`values`""" + + values = () + + @classmethod + def check_type(cls, value): + return value in cls.values + + @class_property + def value_strings(cls): + return ['none' if value is None else value.lower() + for value in cls.values] + + @classmethod + def _value_from_tokens(cls, tokens): + if tokens.next.type != NAME: + raise ParseError('Expecting a name') + token = next(tokens) + _, start_col = token.start + while tokens.next and tokens.next.exact_type in (NAME, MINUS): + token = next(tokens) + _, end_col = token.end + return token.line[start_col:end_col].strip() + + @classmethod + def from_tokens(cls, tokens, source): + option_string = cls._value_from_tokens(tokens) + try: + index = cls.value_strings.index(option_string.lower()) + except ValueError: + raise ValueError("'{}' is not a valid {}. Must be one of: '{}'" + .format(option_string, cls.__name__, + "', '".join(cls.value_strings))) + return cls.values[index] + + @classmethod + def doc_repr(cls, value): + return '``{}``'.format(value) + + @classmethod + def doc_format(cls): + return ', '.join('``{}``'.format(s) for s in cls.value_strings) + + +class Attribute(NamedDescriptor): + """Descriptor used to describe a style attribute""" + + def __init__(self, accepted_type, default_value, description): + self.name = None + self.accepted_type = accepted_type + self.default_value = accepted_type.validate(default_value) + self.description = description + self.source = None + + def __get__(self, style, type=None): + try: + return style.get(self.name, self.default_value) + except AttributeError: + return self + + def __set__(self, style, value): + if not self.accepted_type.check_type(value): + raise TypeError('The {} attribute only accepts {} instances' + .format(self.name, self.accepted_type.__name__)) + style[self.name] = value + + +class OverrideDefault(Attribute): + """Overrides the default value of an attribute defined in a superclass""" + + def __init__(self, default_value): + self._default_value = default_value + + @property + def overrides(self): + return self._overrides + + @overrides.setter + def overrides(self, attribute): + self._overrides = attribute + self.default_value = self.accepted_type.validate(self._default_value) + + @property + def accepted_type(self): + return self.overrides.accepted_type + + @property + def description(self): + return self.overrides.description + + +class WithAttributes(WithNamedDescriptors): + def __new__(mcls, classname, bases, cls_dict): + attributes = cls_dict['_attributes'] = OrderedDict() + doc = [] + for name, attr in cls_dict.items(): + if not isinstance(attr, Attribute): + continue + attributes[name] = attr + if isinstance(attr, OverrideDefault): + for mro_cls in (cls for base_cls in bases + for cls in base_cls.__mro__): + try: + attr.overrides = mro_cls._attributes[name] + break + except (AttributeError, KeyError): + pass + else: + raise NotImplementedError + battr = ':attr:`{0} <.{0}.{1}>`'.format(mro_cls.__name__, name) + inherits = f' (inherited from {battr})' + overrides = f' (overrides {battr} default)' + else: + inherits = overrides = '' + doc.append('{}: {}{}'.format(name, attr.description, inherits)) + format = attr.accepted_type.doc_format() + default = attr.accepted_type.doc_repr(attr.default_value) + doc.append('\n *Accepts* :class:`.{}`: {}\n' + .format(attr.accepted_type.__name__, format)) + doc.append('\n *Default*: {}{}\n' + .format(default, overrides)) + supported_attributes = list(name for name in attributes) + documented = set(supported_attributes) + for base_class in bases: + try: + supported_attributes.extend(base_class._supported_attributes) + except AttributeError: + continue + for mro_cls in base_class.__mro__: + for name, attr in getattr(mro_cls, '_attributes', {}).items(): + if name in documented: + continue + doc.append('{0}: {1} (inherited from :attr:`{2} <.{2}.{0}>`)' + .format(name, attr.description, + mro_cls.__name__)) + format = attr.accepted_type.doc_format() + default = attr.accepted_type.doc_repr(attr.default_value) + doc.append('\n *Accepts* :class:`.{}`: {}\n' + .format(attr.accepted_type.__name__, format)) + doc.append('\n *Default*: {}\n'.format(default)) + documented.add(name) + if doc: + attr_doc = '\n '.join(chain([' Attributes:'], doc)) + cls_dict['__doc__'] = (cls_dict.get('__doc__', '') + '\n\n' + + attr_doc) + cls_dict['_supported_attributes'] = supported_attributes + return super().__new__(mcls, classname, bases, cls_dict) + + @property + def _all_attributes(cls): + for mro_class in reversed(cls.__mro__): + for name in getattr(mro_class, '_attributes', ()): + yield name + + @property + def supported_attributes(cls): + for mro_class in cls.__mro__: + for name in getattr(mro_class, '_supported_attributes', ()): + yield name + + +class AttributesDictionary(OrderedDict, metaclass=WithAttributes): + def __init__(self, base=None, **attributes): + self.name = None + self.source = None + self.base = base + super().__init__(attributes) + + @classmethod + def _get_default(cls, attribute): + """Return the default value for `attribute`. + + If no default is specified in this style, get the default from the + nearest superclass. + If `attribute` is not supported, raise a :class:`KeyError`.""" + try: + for klass in cls.__mro__: + if attribute in klass._attributes: + return klass._attributes[attribute].default_value + except AttributeError: + raise KeyError("No attribute '{}' in {}".format(attribute, cls)) + + @classmethod + def attribute_definition(cls, name): + try: + for klass in cls.__mro__: + if name in klass._attributes: + return klass._attributes[name] + except AttributeError: + pass + raise KeyError(name) + + @classmethod + def attribute_type(cls, name): + try: + return cls.attribute_definition(name).accepted_type + except KeyError: + raise TypeError('{} is not a supported attribute for {}' + .format(name, cls.__name__)) + + @classmethod + def get_ruleset(self): + raise NotImplementedError + + +class DefaultValueException(Exception): + pass + + +class Configurable(object): + configuration_class = NotImplementedAttribute() + + def configuration_name(self, document): + raise NotImplementedError + + def get_config_value(self, attribute, document): + ruleset = self.configuration_class.get_ruleset(document) + return ruleset.get_value_for(self, attribute, document) + + +class BaseConfigurationException(Exception): + def __init__(self, base_name): + self.name = base_name + + +class Source(object): + """Describes where a :class:`DocumentElement` was defined""" + + @property + def location(self): + """Textual representation of this source""" + return repr(self) + + @property + def root(self): + """Directory path for resolving paths relative to this source""" + return None + + +class RuleSet(OrderedDict, Source): + main_section = NotImplementedAttribute() + + def __init__(self, name, base=None, source=None, **kwargs): + super().__init__(**kwargs) + self.name = name + self.base = base + self.source = source + self.variables = OrderedDict() + + def contains(self, name): + return name in self or (self.base and self.base.contains(name)) + + def find_source(self, name): + """Find top-most ruleset where configuration `name` is defined""" + if name in self: + return self.name + if self.base: + return self.base.find_source(name) + + def get_configuration(self, name): + try: + return self[name] + except KeyError: + if self.base: + return self.base.get_configuration(name) + raise + + def __setitem__(self, name, item): + assert name not in self + if isinstance(item, AttributesDictionary): # FIXME + self._validate_attributes(name, item) + super().__setitem__(name, item) + + def __call__(self, name, **kwargs): + self[name] = self.get_entry_class(name)(**kwargs) + + def __repr__(self): + return '{}({})'.format(type(self).__name__, self.name) + + def __str__(self): + return repr(self) + + def __bool__(self): + return True + + RE_VARIABLE = re.compile(r'^\$\(([a-z_ -]+)\)$', re.IGNORECASE) + + def _validate_attributes(self, name, attr_dict): + attr_dict.name = name + attr_dict.source = self + for key, val in attr_dict.items(): + attr_dict[key] = self._validate_attribute(attr_dict, key, val) + + def _validate_attribute(self, attr_dict, name, value): + attribute_type = attr_dict.attribute_type(name) + if isinstance(value, str): + stripped = value.replace('\n', ' ').strip() + m = self.RE_VARIABLE.match(stripped) + if m: + return Var(m.group(1)) + value = self._attribute_from_string(attribute_type, stripped) + elif hasattr(value, 'source'): + value.source = self + if not isinstance(value, Var) and not attribute_type.check_type(value): + raise TypeError("{} ({}) is not of the correct type for the '{}' " + "attribute".format(value, type(value).__name__, + name)) + return value + + @cached + def _attribute_from_string(self, attribute_type, string): + return attribute_type.from_string(string, self) + + def get_variable(self, configuration_class, attribute, variable): + try: + value = self.variables[variable.name] + except KeyError: + if not self.base: + raise VariableNotDefined("Variable '{}' is not defined" + .format(variable.name)) + return self.base.get_variable(configuration_class, attribute, + variable) + return self._validate_attribute(configuration_class, attribute, value) + + def get_entry_class(self, name): + raise NotImplementedError + + def _get_value_recursive(self, name, attribute): + if name in self: + entry = self[name] + if attribute in entry: + return entry[attribute] + elif isinstance(entry.base, str): + raise BaseConfigurationException(entry.base) + elif entry.base is not None: + return entry.base[attribute] + if self.base: + return self.base._get_value_recursive(name, attribute) + raise DefaultValueException + + @cached + def get_value(self, name, attribute): + try: + return self._get_value_recursive(name, attribute) + except BaseConfigurationException as exc: + return self.get_value(exc.name, attribute) + + def _get_value_lookup(self, configurable, attribute, document): + name = configurable.configuration_name(document) + return self.get_value(name, attribute) + + def get_value_for(self, configurable, attribute, document): + try: + value = self._get_value_lookup(configurable, attribute, document) + except DefaultValueException: + value = configurable.configuration_class._get_default(attribute) + if isinstance(value, Var): + configuration_class = configurable.configuration_class + value = self.get_variable(configuration_class, attribute, value) + return value + + +class RuleSetFile(RuleSet): + def __init__(self, filename, base=None, source=None, **kwargs): + self.filename = self._absolute_path(filename, source) + config = ConfigParser(default_section=None, delimiters=('=',), + interpolation=None) + with self.filename.open() as file: + config.read_file(file) + options = dict(config[self.main_section] + if config.has_section(self.main_section) else {}) + name = options.pop('name', filename) + base = options.pop('base', base) + options.update(kwargs) # optionally override options + super().__init__(name, base=base, source=source, **options) + if config.has_section('VARIABLES'): + for name, value in config.items('VARIABLES'): + self.variables[name] = value + for section_name, section_body in config.items(): + if section_name in (None, self.main_section, 'VARIABLES'): + continue + if ':' in section_name: + name, classifier = (s.strip() for s in section_name.split(':')) + else: + name, classifier = section_name.strip(), None + self.process_section(name, classifier, section_body.items()) + + @classmethod + def _absolute_path(cls, filename, source): + file_path = Path(filename) + if not file_path.is_absolute(): + if source is None or source.root is None: + raise ValueError('{} path should be absolute: {}' + .format(cls.__name__, file_path)) + file_path = source.root / file_path + return file_path + + @property + def location(self): + return str(self.filename.resolve()), None, None + + @property + def root(self): + return self.filename.parent.resolve() + + def process_section(self, section_name, classifier, items): + raise NotImplementedError + + +class Bool(AttributeType): + """Expresses a binary choice""" + + @classmethod + def check_type(cls, value): + return isinstance(value, bool) + + @classmethod + def from_tokens(cls, tokens, source): + string = next(tokens).string + lower_string = string.lower() + if lower_string not in ('true', 'false'): + raise ValueError("'{}' is not a valid {}. Must be one of 'true' " + "or 'false'".format(string, cls.__name__)) + return lower_string == 'true' + + @classmethod + def doc_repr(cls, value): + return '``{}``'.format(str(value).lower()) + + @classmethod + def doc_format(cls): + return '``true`` or ``false``' + + +class Integer(AttributeType): + """Accepts natural numbers""" + + @classmethod + def check_type(cls, value): + return isinstance(value, int) + + @classmethod + def from_tokens(cls, tokens, source): + token = next(tokens) + sign = 1 + if token.exact_type in (MINUS, PLUS): + sign = 1 if token.exact_type == PLUS else -1 + token = next(tokens) + if token.type != NUMBER: + raise ParseError('Expecting a number') + try: + value = int(token.string) + except ValueError: + raise ParseError('Expecting an integer') + return sign * value + + @classmethod + def doc_format(cls): + return 'a natural number (positive integer)' + + +class TokenIterator(PeekIterator): + """Tokenizes `string` and iterates over the tokens""" + + def __init__(self, string): + self.string = string + tokens = generate_tokens(StringIO(string).readline) + super().__init__(tokens) + + def _advance(self): + result = super()._advance() + if self.next and self.next.type == NEWLINE and self.next.string == '': + super()._advance() + return result + + +class ParseError(Exception): + pass + + +# variables + +class Var(object): + def __init__(self, name): + super().__init__() + self.name = name + + def __repr__(self): + return "{}('{}')".format(type(self).__name__, self.name) + + def __str__(self): + return '$({})'.format(self.name) + + def __eq__(self, other): + return self.name == other.name + + +class VariableNotDefined(Exception): + pass diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/__init__.py new file mode 100644 index 000000000..b55524bb4 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/__init__.py @@ -0,0 +1,9 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +__all__ = ['pdf'] diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..b2d17ceba Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__init__.py new file mode 100644 index 000000000..564394609 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__init__.py @@ -0,0 +1,453 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import math + +from io import BytesIO +from contextlib import contextmanager + +try: + from PIL import Image as PILImage +except ImportError: + PILImage = None + +from . import cos +from .reader import PDFReader, PDFPageReader +from .filter import FlateDecode +from .xobject.jpeg import JPEGReader +from .xobject.png import PNGReader + +from ...font.type1 import Type1Font +from ...font.opentype import OpenTypeFont +from ...number import NumberFormatBase + + +class Document(object): + extension = '.pdf' + + def __init__(self, creator, + title=None, author=None, subject=None, keywords=None): + self.cos_document = cos.Document(creator, title, author, subject, + keywords) + self.pages = [] + self.fonts = {} + self._font_number = 0 + self._image_number = 0 + + def get_unique_font_number(self): + self._font_number += 1 + return self._font_number + + def get_unique_image_number(self): + self._image_number += 1 + return self._image_number + + def get_metadata(self, field): + return str(self.cos_document.info[field.capitalize()]) + + def set_metadata(self, field, value): + self.cos_document.set_info(field.capitalize(), value) + + def register_font(self, font): + try: + font_number, font_rsc = self.fonts[font] + except KeyError: + symbolic = True + if isinstance(font, Type1Font): + font_file = (None if font.core else + cos.Type1FontFile(font.font_program.header, + font.font_program.body, + filter=FlateDecode())) + if font.encoding_scheme == 'AdobeStandardEncoding': + symbolic = False + elif isinstance(font, OpenTypeFont): + ff_cls = (cos.OpenTypeFontFile if 'CFF' in font + else cos.TrueTypeFontFile) + with open(font.filename, 'rb') as font_data: + font_file = ff_cls(font_data.read(), filter=FlateDecode()) + # TODO: properly determine flags + font_desc = cos.FontDescriptor(font, symbolic, font_file) + if isinstance(font, Type1Font): + font_rsc = cos.Type1Font(font, font_desc) + elif isinstance(font, OpenTypeFont): + cid_system_info = cos.CIDSystemInfo('Identity', 'Adobe', 0) + widths = font['hmtx']['advanceWidth'] + w = cos.Array([cos.Integer(0), + cos.Array(map(cos.Integer, widths))]) + cf_cls = cos.CIDFontType0 if 'CFF' in font else cos.CIDFontType2 + cid_font = cf_cls(font.name, cid_system_info, font_desc, w=w) + mapping = font['cmap'][font._encoding].mapping + to_unicode = cos.ToUnicode(mapping, filter=FlateDecode()) + font_rsc = cos.CompositeFont(cid_font, 'Identity-H', to_unicode) + font_number = self.get_unique_font_number() + self.fonts[font] = font_number, font_rsc + return font_number, font_rsc + + def create_outlines(self, sections_tree): + outlines = self.cos_document.catalog['Outlines'] = cos.Outlines() + self._create_outline_level(sections_tree, outlines, True) + + def _create_outline_level(self, sections_tree, parent, top_level): + count = 0 + for count, section_item in enumerate(sections_tree, start=1): + (section_id, section_number, + section_title, subsections_tree) = section_item + if section_number: + section_label = section_number + ' ' + section_title + else: + section_label = section_title + current = cos.OutlineEntry(section_label, section_id, parent) + if subsections_tree: + self._create_outline_level(subsections_tree, current, False) + if count == 1: + parent['First'] = current + else: + previous['Next'] = current + current['Prev'] = previous + previous = current + if count: + parent['Last'] = current + parent['Count'] = cos.Integer(count if top_level else - count) + + def write(self, file): + page_labels = self.cos_document.catalog['PageLabels']['Nums'] + for index, page in enumerate(self.pages): + contents = cos.Stream(filter=FlateDecode()) + contents.write(page.canvas.getvalue()) + page.cos_page['Contents'] = contents + rinoh_page = page.rinoh_page + number_format = (rinoh_page.document_part + .get_config_value('page_number_format', + rinoh_page.document)) + if number_format != 'continue': + pdf_number_format = PAGE_NUMBER_FORMATS[page.number_format] + prefix = rinoh_page.page_number_prefix + page_labels.append(cos.Integer(index)) + page_labels.append(cos.PageLabel(pdf_number_format, + label_prefix=prefix, + start=page.number)) + self.cos_document.write(file) + + +PAGE_NUMBER_FORMATS = {NumberFormatBase.NUMBER: cos.DECIMAL_ARABIC, + NumberFormatBase.LOWERCASE_CHARACTER: cos.LOWERCASE_LETTERS, + NumberFormatBase.UPPERCASE_CHARACTER: cos.UPPERCASE_LETTERS, + NumberFormatBase.LOWERCASE_ROMAN: cos.LOWERCASE_ROMAN, + NumberFormatBase.UPPERCASE_ROMAN: cos.UPPERCASE_ROMAN} + +SIDEWAYS_TO_ROTATE = {None: 0, + 'left': -90, + 'right': 90} + + +class Page(object): + def __init__(self, backend_document, width, height, rinoh_page): + self.backend_document = backend_document + rotate = SIDEWAYS_TO_ROTATE[rinoh_page.display_sideways] + cos_pages = backend_document.cos_document.catalog['Pages'] + self.cos_page = cos_pages.new_page(float(width), float(height), rotate) + self.width = width + self.height = height + self.rinoh_page = rinoh_page + self.number = rinoh_page.number + self.number_format = rinoh_page.number_format + self.canvas = PageCanvas(self) + self.backend_document.pages.append(self) + + def add_font_resource(self, font_name, font_rsc): + page_rsc = self.cos_page['Resources'] + fonts_dict = page_rsc.setdefault('Font', cos.Dictionary()) + fonts_dict[font_name] = font_rsc + + +class Canvas(BytesIO): + def __init__(self, clip=False): + super().__init__() + self.fonts = {} + self.images = {} + self.annotations = [] + + def append(self, parent_canvas, left, top): + with parent_canvas.save_state(): + parent_canvas.translate(left, top) + parent_canvas.write(self.getvalue()) + self.propagate_annotations(parent_canvas, left, top) + + def propagate_annotations(self, parent_canvas, left, top): + translated_annotations = (annotation_location + (left, top) + for annotation_location in self.annotations) + parent_canvas.fonts.update(self.fonts) + parent_canvas.images.update(self.images) + parent_canvas.annotations.extend(translated_annotations) + + def print(self, string): + self.write(string.encode('ascii') + b'\n') + + @contextmanager + def save_state(self): + self.print('q') + yield + self.print('Q') + + def translate(self, x, y): + self.print('1 0 0 1 {:f} {:f} cm'.format(x, - y)) + + def rotate(self, degrees): + rad = math.radians(degrees) + sine, cosine = math.sin(rad), math.cos(rad) + self.print('{cos:f} {sin:f} {neg_sin:f} {cos:f} 0 0 cm' + .format(cos=cosine, sin=sine, neg_sin=-sine)) + + def scale(self, x, y=None): + if y is None: + y = x + self.print('{:f} 0 0 {:f} 0 0 cm'.format(x, y)) + + def move_to(self, x, y): + self.print('{:f} {:f} m'.format(x, y)) + + def line_to(self, x, y): + self.print('{:f} {:f} l'.format(x, y)) + + def new_path(self): + pass + + def close_path(self): + self.print('h') + + def line_path(self, points): + self.new_path() + self.move_to(*points[0]) + for point in points[1:]: + self.line_to(*point) + + def line_width(self, width): + self.print('{0} w'.format(float(width))) + + def stroke_color(self, color): + r, g, b, a = color.rgba + self.print('{0} {1} {2} RG'.format(r, g, b)) + + def fill_color(self, color): + r, g, b, a = color.rgba + self.print('{0} {1} {2} rg'.format(r, g, b)) + + def stroke(self, line_width=None, color=None): + if color: + self.stroke_color(color) + if line_width: + self.line_width(line_width) + self.print('S') + + def fill(self, color=None): + with self.save_state(): + if color: + self.fill_color(color) + self.print('f') + + def stroke_and_fill(self, stroke_width, stroke_color, fill_color): + with self.save_state(): + self.line_width(stroke_width) + self.stroke_color(stroke_color) + self.fill_color(fill_color) + self.print('B') + + def register_font(self, document, font): + font_number, font_rsc = document.backend_document.register_font(font) + font_name = 'F{}'.format(font_number) + self.fonts.setdefault(font_name, font_rsc) + return font_name, font_rsc + + def show_glyphs(self, left, cursor, span, glyphs, container): + font = span.font(container) + size = span.height(container) + color = span.get_style('font_color', container) + font_name, font_rsc = self.register_font(container.document, font) + string = '' + current_string = '' + total_width = 0 + for glyph in glyphs: + glyph, width = glyph.metrics, glyph.width + total_width += width + displ = (1000 * width) / size + if font.encoding: + code = font_rsc.get_code(glyph) + char = CODE_TO_CHAR[code] + else: + code = glyph.code + high, low = code >> 8, code & 0xFF + char = CODE_TO_CHAR[high] + CODE_TO_CHAR[low] + adjust = int(glyph.width - displ) + if adjust: + string += '({}{}) {} '.format(current_string, char, adjust) + current_string = '' + else: + current_string += char + if current_string: + string += '({})'.format(current_string) + with self.save_state(): + self.print('BT') + self.print('/{} {} Tf'.format(font_name, size)) + self.fill_color(color) + y_offset = span.y_offset(container) + self.print('{:f} {:f} Td'.format(left, - (cursor - y_offset))) + self.print('[{}] TJ'.format(string)) + self.print('ET') + return total_width + + def annotate(self, annotation, left, top, width, height): + ann_loc = AnnotationLocation(annotation, left, top, width, height) + self.annotations.append(ann_loc) + + def place_image(self, image, left, top, document, + scale_width=1, scale_height=1, rotate=0): + image_number = document.backend_document.get_unique_image_number() + self.images[image_number] = image + rad = math.radians(rotate) + sine, cosine = abs(math.sin(rad)), abs(math.cos(rad)) + im_width = image.width * cosine + image.height * sine + im_height = image.width * sine + image.height * cosine + scaled_width = scale_width * im_width + scaled_height = scale_height * im_height + with self.save_state(): + self.translate(left, top) + self.translate(scaled_width / 2, scaled_height / 2) + self.rotate(rotate) + self.translate(- scale_width * image.width / 2, + scale_height * image.height / 2) + self.scale(scale_width, scale_height) + if image.xobject.subtype == 'Image': + self.scale(image.width, image.height) + self.print('/Im{} Do'.format(image_number)) + return scaled_width, scaled_height + + +class PageCanvas(Canvas): + def __init__(self, backend_page): + super().__init__(None) + self.backend_page = backend_page + self.translate(0, - float(backend_page.height)) + + def place_annotations(self): + # fonts + for font_name, font_rsc in self.fonts.items(): + self.backend_page.add_font_resource(font_name, font_rsc) + + # images + resources = self.backend_page.cos_page['Resources'] + for image_number, image in self.images.items(): + xobjects = resources.setdefault('XObject', cos.Dictionary()) + xobjects['Im{}'.format(image_number)] = image.xobject + + # annotations + page_height = float(self.backend_page.height) + cos_document = self.backend_page.backend_document.cos_document + cos_page = self.backend_page.cos_page + annots = cos_page.setdefault('Annots', cos.Array()) + for annotation_location in self.annotations: + annotation = annotation_location.annotation + left = annotation_location.left + top = page_height - annotation_location.top + if annotation.type == 'NamedDestination': + dest = cos.Array([cos_page, cos.Name('XYZ'), + cos.Real(left), cos.Real(top), + cos.Real(0)], indirect=True) + for name in annotation.names: + key = cos.String(name) + if key not in cos_document.dests: + cos_document.dests[key] = dest + continue + right = left + annotation_location.width + bottom = top - annotation_location.height + rect = cos.Rectangle(left, bottom, right, top) + if annotation.type == 'URI': + a = cos.URIAction(annotation.target) + annot = cos.LinkAnnotation(rect, action=a) + elif annotation.type == 'NamedDestinationLink': + name = cos.String(annotation.name) + annot = cos.LinkAnnotation(rect, destination=name) + else: + raise NotImplementedError + annots.append(annot) + + +class AnnotationLocation(object): + def __init__(self, annotation, left, top, width, height): + self.annotation = annotation + self.left = left + self.top = top + self.width = width + self.height = height + + def __add__(self, offset): + offset_left, offset_top = offset + return self.__class__(self.annotation, self.left + offset_left, + self.top + offset_top, self.width, self.height) + + +class Image(object): + def __init__(self, filename_or_file): + try: + file_position = filename_or_file.tell() + except AttributeError: + file_position = None + for Reader in (PDFPageReader, PNGReader, JPEGReader): + try: + self.xobject = Reader(filename_or_file) + break + except ValueError: + pass + finally: + if file_position is not None: + filename_or_file.seek(file_position) + else: + png_file = self._convert_to_png(filename_or_file) + self.xobject = PNGReader(png_file) + + @property + def width(self): + return self.xobject.width + + @property + def height(self): + return self.xobject.height + + @property + def dpi(self): + return self.xobject.dpi + + def _convert_to_png(self, filename_or_file): + if PILImage is None: + raise ModuleNotFoundError('The Pillow package is required to ' + 'handle image formats other than PNG, ' + 'JPEG and PDF') + png_image = BytesIO() + input_image = PILImage.open(filename_or_file) + metadata = {} + if 'dpi' in input_image.info and 0 not in input_image.info['dpi']: + metadata['dpi'] = input_image.info['dpi'] + input_image.save(png_image, 'PNG', **metadata) + png_image.seek(0) + return png_image + + +CODE_TO_CHAR = {} + + +def _code_to_char(code): + if code < 32 or code > 127: + char = r'\{:03o}'.format(code) + else: + char = chr(code) + if char in r'\()': + char = '\\' + char + return char + + +for code in range(256): + CODE_TO_CHAR[code] = _code_to_char(code) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..115130fd4 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/cos.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/cos.cpython-312.pyc new file mode 100644 index 000000000..0ebc71932 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/cos.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/filter.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/filter.cpython-312.pyc new file mode 100644 index 000000000..46a951c94 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/filter.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/pdfdoccodec.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/pdfdoccodec.cpython-312.pyc new file mode 100644 index 000000000..5c6bb7502 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/pdfdoccodec.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/reader.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/reader.cpython-312.pyc new file mode 100644 index 000000000..1f4ca7d85 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/reader.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/util.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/util.cpython-312.pyc new file mode 100644 index 000000000..c75959d7d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/__pycache__/util.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/cos.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/cos.py new file mode 100644 index 000000000..1074b50b2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/cos.py @@ -0,0 +1,1023 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import hashlib, time, sys + +from binascii import hexlify +from codecs import BOM_UTF16_BE +from contextlib import contextmanager +from collections import OrderedDict +from datetime import datetime, timezone +from functools import wraps +from io import BytesIO, SEEK_END +from itertools import chain + +from ... import __version__, __release_date__ + +from . import pdfdoccodec + +PDF_VERSION = '1.6' + +WHITESPACE = b'\0\t\n\f\r ' +DELIMITERS = b'()<>[]{}/%' + + +# TODO: max line length (not streams) + + +class Object(object): + PREFIX = b'' + POSTFIX = b'' + + def __init__(self, indirect=False): + self.indirect = indirect + + def __repr__(self): + return '{}({})'.format(self.__class__.__name__, self._repr()) + + @property + def object(self): + return self + + def bytes(self, document): + if self.indirect: + reference = document._by_object_id[id(self)] + out = reference.bytes(document) + else: + out = self.direct_bytes(document) + return out + + def direct_bytes(self, document): + return self.PREFIX + self._bytes(document) + self.POSTFIX + + def _bytes(self, document): + raise NotImplementedError + + def delete(self, document): + try: + reference = document._by_object_id[id(self)] + reference.delete() + except KeyError: + pass + + def short_repr(self): + return repr(self) + + def register_indirect(self, document, visited=None): + if self.indirect and id(self) not in visited: + document.register(self) + + +class Null(Object): + def __init__(self, indirect=False): + super().__init__(indirect) + + def __repr__(self): + return self.__class__.__name__ + + def __bool__(self): + return False + + def _bytes(self, document): + return b'null' + + +class Reference(object): + def __init__(self, document, identifier, generation): + self.document = document + self.identifier = identifier + self.generation = generation + + @property + def object(self): + return self.document[self.identifier] + + def bytes(self, document): + if document is self.document: + identifier, generation = self.identifier, self.generation + else: + obj = self.document[self.identifier] + reference = document.register(obj) + identifier, generation = reference.identifier, reference.generation + return '{} {} R'.format(identifier, generation).encode('utf_8') + + def delete(self, document=None): + if document == self.document: + del self.document[self.identifier] + + def __repr__(self): + return '{}<{} {}>'.format(self.object.__class__.__name__, + self.identifier, self.generation) + + +class Boolean(Object): + def __init__(self, value, indirect=False): + super().__init__(indirect) + self.value = value + + def __bool__(self): + return self.value + + def __eq__(self, other): + return self.value == other.value + + def _repr(self): + return self.value + + def _bytes(self, document): + return b'true' if self.value else b'false' + + +class Integer(Object, int): + def __new__(cls, value, base=10, indirect=False): + try: + obj = int.__new__(cls, value, base) + except TypeError: + obj = int.__new__(cls, value) + return obj + + def __init__(self, value, base=10, indirect=False): + Object.__init__(self, indirect) + + def _repr(self): + return int.__repr__(self) + + def _bytes(self, document): + return self._repr().encode('utf_8') + + +class Real(Object, float): + def __new__(cls, value, indirect=False): + return float.__new__(cls, value) + + def __init__(self, value, indirect=False): + Object.__init__(self, indirect) + + def _repr(self): + return float.__repr__(self) + + def _bytes(self, document): + return '{:.8f}'.format(self).rstrip('0').rstrip('.').encode('utf_8') + + +class String(Object, bytes): + PREFIX = b'(' + POSTFIX = b')' + ESCAPED_CHARACTERS = {ord(b'\n'): br'\n', + ord(b'\r'): br'\r', + ord(b'\t'): br'\t', + ord(b'\b'): br'\b', + ord(b'\f'): br'\f', + ord(b'\\'): br'\\', + ord(b'('): br'\(', + ord(b')'): br'\)'} + + def __new__(cls, value, indirect=False): + try: + value = value.encode('pdf_doc') + except UnicodeEncodeError: + value = BOM_UTF16_BE + value.encode('utf_16_be') + except AttributeError: + assert isinstance(value, bytes) + return bytes.__new__(cls, value) + + def __init__(self, value, indirect=False): + Object.__init__(self, indirect) + + def __str__(self): + if self.startswith(BOM_UTF16_BE): + return self.decode('utf_16') + else: + return self.decode('pdf_doc') + + def _repr(self): + try: + return "'" + str(self) + "'" + except UnicodeDecodeError: + return '<{}{}>'.format(hexlify(self[:10]).decode(), + '...' if len(self) > 10 else '') + + def _bytes(self, document): + escaped = bytearray() + for char in self: + if char in self.ESCAPED_CHARACTERS: + escaped += self.ESCAPED_CHARACTERS[char] + else: + escaped.append(char) + return escaped + + +class HexString(Object, bytes): + PREFIX = b'<' + POSTFIX = b'>' + + def __new__(cls, value, indirect=False): + return bytes.__new__(cls, value) + + def __init__(self, byte_string, indirect=False): + Object.__init__(self, indirect) + + def _repr(self): + return hexlify(self).decode() + + def _bytes(self, document): + return hexlify(self) + + +class Date(String): + def __new__(cls, timestamp, indirect=False): + local_timezone = timestamp.astimezone().tzinfo + utc_offset = local_timezone.utcoffset(timestamp) + utc_offset_minutes, utc_offset_seconds = divmod(utc_offset.seconds, 60) + utc_offset_hours, utc_offset_minutes = divmod(utc_offset_minutes, 60) + string = timestamp.strftime('D:%Y%m%d%H%M%S') + string += "{:+03d}'{:02d}'".format(utc_offset_hours, utc_offset_minutes) + return String.__new__(cls, string, indirect) + + +class Name(Object, bytes): + PREFIX = b'/' + + # TODO: names should be unique (per document), so check + def __new__(cls, value, indirect=False): + try: + value = value.encode('utf_8') + except AttributeError: + pass + return bytes.__new__(cls, value) + + def __init__(self, value, indirect=False): + Object.__init__(self, indirect) + + def __str__(self): + return self.decode('utf_8') + + def _repr(self): + return str(self) + + def _bytes(self, document): + escaped = bytearray() + for char in self: + if char in WHITESPACE + DELIMITERS + b'#': + escaped += '#{:02x}'.format(char).encode('ascii') + else: + escaped.append(char) + return escaped + + +class Container(Object): + def __init__(self, indirect=False): + super().__init__(indirect) + + def register_indirect(self, document, visited=None): + if visited is None: # visited helps prevent infinite looping when + visited = set() # an object holds a reference to an ancestor + if id(self) not in visited: + if self.indirect: + document.register(self) + visited.add(id(self)) + for item in self.children(): + item.register_indirect(document, visited) + + +class Array(Container, list): + PREFIX = b'[' + POSTFIX = b']' + + # TODO: not all methods of list are overridden, so funny + # behavior is to be expected + def __init__(self, items=[], indirect=False): + Container.__init__(self, indirect) + list.__init__(self, items) + + def __getitem__(self, arg): + if isinstance(arg, slice): + items = [elem.object for elem in super().__getitem__(arg)] + return self.__class__(items, indirect=self.indirect) + else: + return super().__getitem__(arg).object + + def _repr(self): + return ', '.join(elem.object.short_repr() for elem in self) + + def _bytes(self, document): + return b' '.join(elem.bytes(document) for elem in self) + + def short_repr(self): + return '<{} {}>'.format(self.__class__.__name__, id(self)) + + def children(self): + for item in self: + yield item.object + + +def convert_key_to_name(method): + @wraps(method) + def wrapper(obj, key, *args, **kwargs): + if not isinstance(key, Name): + key = Name(key) + return method(obj, key, *args, **kwargs) + return wrapper + + +class Dictionary(Container, OrderedDict): + PREFIX = b'<<' + POSTFIX = b'>>' + + type = None + subtype = None + + def __init__(self, *args, indirect=False, **items): + Container.__init__(self, indirect) + OrderedDict.__init__(self, *args, **items) + if self.__class__.type: + self['Type'] = Name(self.__class__.type) + if self.__class__.subtype: + self['Subtype'] = Name(self.__class__.subtype) + + def _repr(self): + return ', '.join('{}: {}'.format(key, value.object.short_repr()) + for key, value in self.items()) + + @convert_key_to_name + def __getitem__(self, key): + return super().__getitem__(key).object + + __setitem__ = convert_key_to_name(OrderedDict.__setitem__) + + __delitem__ = convert_key_to_name(OrderedDict.__delitem__) + + __contains__ = convert_key_to_name(OrderedDict.__contains__) + + get = convert_key_to_name(OrderedDict.get) + + setdefault = convert_key_to_name(OrderedDict.setdefault) # PyPy + + def _bytes(self, document): + return b' '.join(key.bytes(document) + b' ' + value.bytes(document) + for key, value in self.items()) + + def short_repr(self): + return '<{} {}>'.format(self.__class__.__name__, id(self)) + + def children(self): + for item in self.values(): + yield item.object + + +from .filter import PassThrough, FilterPipeline + + +class Stream(Dictionary): + def __init__(self, filter=None, **items): + # (Streams are always indirectly referenced) + self._data = BytesIO() + try: + self.filter = FilterPipeline(filter) + except TypeError: + self.filter = filter or PassThrough() + super().__init__(indirect=True, **items) + self._coder = None + + def direct_bytes(self, document): + out = bytearray() + self.reset() + if not isinstance(self.filter, PassThrough): + self['Filter'] = self.filter.name + if self.filter.params: + self['DecodeParms'] = self.filter.params + if 'Length' in self: + self['Length'].delete(document) + assert self._data.tell() == self._data.seek(0, SEEK_END) + self['Length'] = Integer(self._data.tell()) + out += super().direct_bytes(document) + out += b'\nstream\n' + out += self._data.getvalue() + out += b'\nendstream' + return out + + def read(self, n=-1): + try: + return self._coder.read(n) + except AttributeError: + self._data.seek(0) + self._coder = self.filter.decoder(self._data) + return self.read(n) + + def write(self, b, **kwargs): + try: + return self._coder.write(b) + except AttributeError: + self._data.seek(0) + self._coder = self.filter.encoder(self._data, **kwargs) + return self.write(b) + + def write_raw(self, b): + return self._data.write(b) + + def reset(self): + if self._coder: + self._coder.close() + self._coder = None + + def __getattr__(self, name): + # almost as good as inheriting from BytesIO (which is not possible) + return getattr(self._data, name) + + +class ObjectStream(Stream): + type = 'ObjStm' + + def get_object(self, document, index): + try: + object_reader = self._object_reader + offsets = self._offsets + except AttributeError: + decompressed_data = BytesIO(self.read()) + from .reader import PDFObjectReader + object_reader = PDFObjectReader(decompressed_data, document) + offsets = self._offsets = {} + for i in range(self['N']): + object_number = int(object_reader.read_number()) + offset = int(self['First'] + object_reader.read_number()) + offsets[i] = offset + self._object_reader = object_reader + object_reader.file.seek(offsets[index]) + return object_reader.next_item(indirect=True) + + + +class Document(dict): + PRODUCER = 'rinohtype v{} PDF backend ({})'.format(__version__, + __release_date__) + + def __init__(self, creator, + title=None, author=None, subject=None, keywords=None): + self.catalog = Catalog() + self.catalog['PageLabels'] = Dictionary(indirect=True) + self.catalog['PageLabels']['Nums'] = Array() + self.info = Dictionary(indirect=True) + self.timestamp = datetime.now() + self.set_info('Creator', creator) + self.set_info('Producer', self.PRODUCER) + self.set_info('Title', title) + self.set_info('Author', author) + self.set_info('Subject', subject) + self.set_info('Keywords', keywords) + self.info['CreationDate'] = Date(self.timestamp) + self.id = None + self.dests = {} + self._by_object_id = {} + + def get_page(self, index): + for i, page in enumerate(self.catalog['Pages'].pages): + if i == index: + return page + raise IndexError + + def register(self, obj): + try: + reference = self._by_object_id[id(obj)] + except KeyError: + identifier, generation = self.max_identifier + 1, 0 + reference = Reference(self, identifier, generation) + self._by_object_id[id(obj)] = reference + self[identifier] = obj + return reference + + @property + def max_identifier(self): + try: + identifier = max(self.keys()) + except ValueError: + identifier = 0 + return identifier + + def _write_xref_table(self, file, addresses): + def out(string): + file.write(string + b'\n') + + out(b'xref') + out('0 {}'.format(self.max_identifier + 1).encode('utf_8')) + out(b'0000000000 65535 f ') + for identifier in range(1, self.max_identifier + 1): + try: + address = addresses[identifier] + out('{:010d} {:05d} n '.format(address, 0).encode('utf_8')) + except KeyError: + out(b'0000000000 65535 f ') + + def set_info(self, field, string): + assert field in ('Creator', 'Producer', + 'Title', 'Author', 'Subject', 'Keywords') + if string: + if field in self.info: + self.info[field].delete(self) + self.info[field] = String(string) + + def build_dests_names_array(self): + if 'Names' in self.catalog: + self.catalog['Names'].delete(self) + names = self.catalog['Names'] = Dictionary(indirect=True) + dests = names['Dests'] = Dictionary(indirect=True) + dests_names = dests['Names'] = Array() + for name in sorted(self.dests): + dests_names.append(name) + dests_names.append(self.dests[name]) + + def write(self, file_or_filename): + def out(string): + file.write(string + b'\n') + + try: + file = open(file_or_filename, 'wb') + close_file = True + except TypeError: + file = file_or_filename + close_file = False + + self.build_dests_names_array() + self.catalog.register_indirect(self) + self.info.register_indirect(self) + if 'ModDate' in self.info: + self.info['ModDate'].delete(self) + self.info['ModDate'] = Date(self.timestamp) + + out('%PDF-{}'.format(PDF_VERSION).encode('utf_8')) + file.write(b'%\xDC\xE1\xD8\xB7\n') + # write out indirect objects + addresses = {} + for identifier in range(1, self.max_identifier + 1): + if identifier in self: + obj = self[identifier] + addresses[identifier] = file.tell() + out('{} 0 obj'.format(identifier).encode('utf_8')) + out(obj.direct_bytes(self)) + out(b'endobj') + xref_table_address = file.tell() + self._write_xref_table(file, addresses) + out(b'trailer') + trailer = Dictionary() + trailer['Size'] = Integer(self.max_identifier + 1) + trailer['Root'] = self.catalog + trailer['Info'] = self.info + # If using Python 3.9 or later, set usedforsecurity to False + md5sum = hashlib.md5() if sys.version_info < (3, 9) else hashlib.md5(usedforsecurity=False) + md5sum.update(str(self.timestamp).encode()) + md5sum.update(str(file.tell()).encode()) + for value in self.info.values(): + md5sum.update(value._bytes(self)) + new_id = HexString(md5sum.digest()) + if self.id: + self.id[1] = new_id + else: + self.id = Array([new_id, new_id]) + trailer['ID'] = self.id + out(trailer.bytes(self)) + out(b'startxref') + out(str(xref_table_address).encode('utf_8')) + out(b'%%EOF') + if close_file: + file.close() + + +class XRefStream(Stream): + type = 'XRef' + + +class Catalog(Dictionary): + type = 'Catalog' + + def __init__(self): + super().__init__(indirect=True) + self['Pages'] = Pages() + + +class Pages(Dictionary): + type = 'Pages' + + def __init__(self): + super().__init__(indirect=True) + self['Count'] = Integer(0) + self['Kids'] = Array() + + def new_page(self, width, height, rotate=None): + page = Page(self, width, height, rotate) + self['Kids'].append(page) + self['Count'] = Integer(self['Count'] + 1) + return page + + @property + def pages(self): + for kid in self['Kids']: + yield from kid.object.pages + + +class Page(Dictionary): + type = 'Page' + + def __init__(self, parent, width, height, rotate=0): + super().__init__(indirect=True) + self['Parent'] = parent + self['Resources'] = Dictionary() + self['MediaBox'] = Array([Integer(0), Integer(0), + Real(width), Real(height)]) + if rotate: + self['Rotate'] = Integer(rotate) + + @property + def pages(self): + yield self + + +DECIMAL_ARABIC = Name('D') +UPPERCASE_ROMAN = Name('R') +LOWERCASE_ROMAN = Name('r') +UPPERCASE_LETTERS = Name('A') +LOWERCASE_LETTERS = Name('a') + + +class PageLabel(Dictionary): + type = 'PageLabel' + + def __init__(self, numbering_style=None, label_prefix=None, start=None): + super().__init__(indirect=False) + if numbering_style: + self['S'] = numbering_style + if label_prefix is not None: + self['P'] = String(label_prefix) + if start is not None: + self['St'] = Integer(start) + + +class Outlines(Dictionary): + type = 'Outlines' + + def __init__(self): + super().__init__(indirect=True) + + +class OutlineEntry(Dictionary): + def __init__(self, title, destination, parent): + super().__init__(indirect=True) + self['Title'] = String(title) + self['Dest'] = String(destination) + self['Parent'] = parent + + +class Rectangle(Array): + def __init__(self, left, bottom, right, top, indirect=False): + super().__init__([Real(value) for value in (left, bottom, right, top)], + indirect) + + +# interactivity + +class Action(Dictionary): + type = 'Action' + action_type = None + + def __init__(self, next=None, indirect=False): + super().__init__(indirect=indirect) + if self.__class__.action_type: + self['S'] = Name(self.__class__.action_type) + if next: + self['Next'] = next + + +class Destination(Dictionary): + pass + + +class URIAction(Action): + action_type = 'URI' + + def __init__(self, uri, is_map=False, next=None, indirect=False): + super().__init__(next, indirect) + self['URI'] = String(uri) + self['IsMap'] = Boolean(is_map) + + +class Annotation(Dictionary): + type = 'Annot' + + def __init__(self, rectangle, indirect=False): + super().__init__(indirect=indirect) + self['Rect'] = rectangle + self['Border'] = Array(3 * [Integer(0)]) + + +class LinkAnnotation(Annotation): + subtype = 'Link' + + def __init__(self, rectangle, action=None, destination=None, + indirect=False): + super().__init__(rectangle, indirect) + assert (action and destination) is None + if action: + self['A'] = action + if destination: + self['Dest'] = destination + + +# fonts + +class Font(Dictionary): + type = 'Font' + + +class SimpleFont(Font): + def __init__(self): + raise NotImplementedError() + + +class Type1Font(Font): + subtype = 'Type1' + + def __init__(self, font, font_descriptor): + super().__init__(indirect=True) + self.font = font + self.differences = {} + self._free_codes = iter(i for i in chain(range(32, 255), range(0, 32)) + if i not in self.font.encoding.values()) + self['BaseFont'] = Name(font.name) + self['FontDescriptor'] = font_descriptor + + def get_code(self, glyph): + try: + try: + return self.font.encoding[glyph.name] + except KeyError: + return self.differences[glyph.name] + except KeyError: + try: + code = self.differences[glyph.name] = next(self._free_codes) + except StopIteration: + raise NotImplementedError('Encoding vector is full') + return code + + def register_indirect(self, document, visited=None): + if id(self) in visited: + return + try: + self.font + except AttributeError: # this font was parsed from a PDF file + pass + else: + for key in ('FirstChar', 'LastChar', 'Widths', 'Encoding'): + if key in self: + self[key].delete(document) + del self[key] + widths = {code: self.font._glyphs[name].width + for name, code in chain(self.font.encoding.items(), + self.differences.items())} + first, last = min(widths), max(widths) + self['FirstChar'] = Integer(first) + self['LastChar'] = Integer(last) + self['Widths'] = Array((Integer(widths[c] if c in widths else 0) + for c in range(first, last + 1)), True) + if self.differences: + self['Encoding'] = FontEncoding(differences=self.differences) + return super().register_indirect(document, visited=visited) + + +class CompositeFont(Font): + subtype = 'Type0' + + def __init__(self, descendant_font, encoding, to_unicode=None): + super().__init__(indirect=True) + self['BaseFont'] = descendant_font.composite_font_name(encoding) + self['DescendantFonts'] = Array([descendant_font], False) + try: + self['Encoding'] = Name(encoding) + except NotImplementedError: + self['Encoding'] = encoding + if to_unicode is not None: + self['ToUnicode'] = to_unicode + + +class CIDSystemInfo(Dictionary): + def __init__(self, ordering, registry, supplement): + super().__init__(indirect=False) + self['Ordering'] = String(ordering) + self['Registry'] = String(registry) + self['Supplement'] = Integer(supplement) + + +class CIDFont(Font): + def __init__(self, base_font, cid_system_info, font_descriptor, + dw=1000, w=None): + super().__init__(indirect=True) + self['BaseFont'] = Name(base_font) + self['FontDescriptor'] = font_descriptor + self['CIDSystemInfo'] = cid_system_info + self['DW'] = Integer(dw) + if w: + self['W'] = w + + def composite_font_name(self, encoding): + raise NotImplementedError() + + +class CIDFontType0(CIDFont): + # for embedding TrueType and OpenType/TTF fonts + + subtype = 'CIDFontType0' + + def __init__(self, base_font, cid_system_info, font_descriptor, + dw=1000, w=None): + super().__init__(base_font, cid_system_info, font_descriptor, dw, w) + + def composite_font_name(self, encoding): + try: + suffix = encoding['CMapName'] + except TypeError: + suffix = encoding + return Name('{}-{}'.format(self['BaseFont'], suffix)) + + +class CIDFontType2(CIDFont): + # for embedding OpenType/CFF fonts + + subtype = 'CIDFontType2' + + def __init__(self, base_font, cid_system_info, font_descriptor, + dw=1000, w=None, cid_to_gid_map=None): + super().__init__(base_font, cid_system_info, font_descriptor, dw, w) + if cid_to_gid_map: + self['CIDToGIDMap'] = cid_to_gid_map + + def composite_font_name(self, encoding): + return self['BaseFont'] + + +FIXED_PITCH = 0x01 +SERIF = 0x02 +SYMBOLIC = 0x04 +SCRIPT = 0x08 +NONSYMBOLIC = 0x20 +ITALIC = 0x40 +ALL_CAP = 0x10000 +SMALL_CAP = 0x20000 +FORCE_BOLD = 0x40000 + + +class FontDescriptor(Dictionary): + type = 'FontDescriptor' + + def __init__(self, font, symbolic, font_file=None): + super().__init__(indirect=True) + self['FontName'] = Name(font.name) + self['Flags'] = Integer(self.determine_flags(font, symbolic)) + self['FontBBox'] = Array([Integer(item) for item in font.bounding_box]) + self['ItalicAngle'] = Integer(font.italic_angle) + self['Ascent'] = Integer(font.ascender) + self['Descent'] = Integer(font.descender) + self['CapHeight'] = Integer(font.cap_height) + self['XHeight'] = Integer(font.x_height) + self['StemV'] = Integer(font.stem_v) + if font_file is not None: + self[font_file.key] = font_file + + def determine_flags(self, font, symbolic): + flags = SYMBOLIC if symbolic else NONSYMBOLIC + if font.fixed_pitch: + flags |= FIXED_PITCH + if font.italic: + flags |= ITALIC + return flags + + +class Type3FontDescriptor(FontDescriptor): + def __init__(self): + raise NotImplementedError() + + +class Type1FontFile(Stream): + key = 'FontFile' + + def __init__(self, header, body, filter=None): + super().__init__(filter) + self['Length1'] = Integer(len(header)) + self['Length2'] = Integer(len(body)) + self['Length3'] = Integer(0) + self.write(header) + self.write(body) + + +class TrueTypeFontFile(Stream): + key = 'FontFile2' + + def __init__(self, font_data, filter=None): + super().__init__(filter) + self.write(font_data) + + +class OpenTypeFontFile(Stream): + key = 'FontFile3' + + def __init__(self, font_data, filter=None): + super().__init__(filter) + self['Subtype'] = Name('OpenType') + self.write(font_data) + + +class FontEncoding(Dictionary): + def __init__(self, base_encoding=None, differences=None, indirect=True): + super().__init__(indirect=indirect) + self['Type'] = Name('Encoding') + if base_encoding: + self['BaseEncoding'] = Name(base_encoding) + if differences: + self['Differences'] = EncodingDifferences(differences) + + +class EncodingDifferences(Array): + def __init__(self, differences): + code_to_name = {code: name for name, code in differences.items()} + last_code = float('+inf') + array = [] + for code in sorted(code_to_name): + if code != last_code + 1: + array.append(Integer(code)) + array.append(Name(code_to_name[code])) + last_code = code + super().__init__(array) + + +class ToUnicode(Stream): + def __init__(self, mapping, filter=None): + super().__init__(filter=filter) + with self._begin_resource('/CIDInit /ProcSet findresource'): + with self._begin_resource('12 dict'): + with self._begin('cmap'): + cid_system_info = Dictionary() + cid_system_info['Registry'] = String('Adobe') + cid_system_info['Ordering'] = String('UCS') + cid_system_info['Supplement'] = Integer('0') + self._def('CIDSystemInfo', cid_system_info) + self._def('CMapName', Name('Adobe-Identity-UCS')) + self._def('CMapType', Integer(2)) + with self._begin('codespacerange', 1): + self._value(0x0000) + self._value(0xFFFF) + self.write(b'\n') + #with self._begin('bfrange', 1): + # # TODO: ranges should not cross first-byte limits + # self._value(0x0000) + # self._value(0xFFFF) + # self._value(0x0000) + # TODO: handle ligatures + cid_to_unicode = {unicode: cid + for cid, unicode in mapping.items()} + cids = sorted(cid_to_unicode.keys()) + num_sections, last = divmod(len(cids), 100) + section_sizes = num_sections * [100] + if last: + section_sizes += [last] + for i, size in enumerate(section_sizes): + with self._begin('bfchar', size): + for cid in cids[100 * i:100 * (i + 1)]: + char = chr(cid_to_unicode[cid]) + self._value(cid) + self._hex(char.encode('utf-16-be')) + self.write(b'\n') + self.print('CMapName currentdict /CMap defineresource pop') + + @contextmanager + def _begin_resource(self, string): + self.print('{} begin'.format(string)) + yield + self.print('end') + + @contextmanager + def _begin(self, string, length=None): + if length: + self.print('{} '.format(length), end='') + self.print('begin{}'.format(string)) + yield + self.print('end{}'.format(string)) + + def _def(self, key, value): + self.print('/{} '.format(key), end='') + self.write(value.bytes(None)) + self.print(' def') + + def _value(self, value, number_of_bytes=2): + self._hex(value.to_bytes(number_of_bytes, byteorder='big')) + + def _hex(self, bytes): + hex_str = HexString(bytes) + self.write(hex_str.bytes(None)) + + def print(self, strng, end='\n'): + self.write(strng.encode('ascii')) + self.write(end.encode('ascii')) + + +from .xobject import XObjectForm diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/filter.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/filter.py new file mode 100644 index 000000000..20300c43f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/filter.py @@ -0,0 +1,473 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import struct, zlib + +from binascii import hexlify, unhexlify +from math import ceil +from string import whitespace +from struct import pack, unpack + +from ...util import consumer, class_property +from .util import FIFOBuffer + + +class Filter(object): + params_class = None + + def __init__(self, params=None): + if self.params_class is None: + assert not params + self.params = params + + @class_property + def name(cls): + return Name(cls.__name__) + + def encoder(self, destination, **kwargs): + raise NotImplementedError + + def decoder(self, source, **kwargs): + raise NotImplementedError + + +class Encoder(object): + def __init__(self, destination): + self._destination = destination + + def write(self, b): + raise NotImplementedError + + def close(self): + self.flush() + self._destination.flush() + + def flush(self): + pass + + +class Decoder(object): + def __init__(self, source): + self._source = source + + def read(self, n=-1): + raise NotImplementedError + + def close(self): + pass + + +class PassThrough(Filter): + def encoder(self, destination): + return PassThroughEncoder(destination) + + def decoder(self, source): + return PassThroughDecoder(source) + + +class PassThroughEncoder(Encoder): + def write(self, b): + return self._destination.write(b) + + +class PassThroughDecoder(Decoder): + def read(self, n=-1): + return self._source.read(n) + + +class ASCIIHexDecode(Filter): + def encoder(self, destination): + return ASCIIHexEncoder(destination) + + def decoder(self, source): + return ASCIIHexDecoder(source) + + +class ASCIIHexEncoder(Encoder): + def write(self, b): + self._destination.write(hexlify(b)) + + +class ASCIIHexDecoder(Decoder): + def read(self, n=-1): + # TODO: remove spaces + # TODO: handle odd-length input to unhexlify + # TODO: handler > EOD marker (also after odd-length string) + return unhexlify(self._source.read(n)) + + +class ASCII85Decode(Filter): + def encoder(self, destination): + return ASCII85Encoder(destination) + + def decoder(self, source): + return ASCII85Decoder(source) + +try: + from base64 import a85encode, a85decode + + @consumer + def ascii85_encoder(destination): + rest = b'' + while True: + try: + in_bytes = rest + (yield) + except GeneratorExit: + break + rest_len = len(in_bytes) % 4 + if rest_len: + input, rest = in_bytes[:-rest_len], in_bytes[-rest_len:] + else: + input, rest = in_bytes, b'' + destination.write(a85encode(input)) + destination.write(a85encode(rest)) + destination.write(b'~>') # EOD marker + + + class ASCII85Encoder(Encoder): + def __init__(self, destination): + super().__init__(destination) + self._encoder = ascii85_encoder(destination) + + def write(self, b): + self._encoder.send(b) + + def flush(self): + self._encoder.close() + + + ASCII_WHITESPACE = whitespace.encode('ascii') + + class ASCII85Decoder(FIFOBuffer, Decoder): + def __init__(self, source): + super().__init__(source) + self.rest = b'' + + def read_from_source(self, n): + out_data = b'' + while len(out_data) < n: + in_data = self._source.read(n) + in_data = self.rest + in_data.translate(None, ASCII_WHITESPACE) + if not in_data: + self.rest = b'' + break + eod_index = in_data.find(b'~') + if eod_index > 0: + assert in_data[eod_index:] == b'~>' + out_data += a85decode(in_data[:eod_index]) + self.rest = b'' + break + rest_len = len(in_data) % 5 + if rest_len: + input, self.rest = in_data[:-rest_len], in_data[-rest_len:] + else: + input, self.rest = in_data, b'' + out_data += a85decode(input) + return out_data + +except ImportError: + class PythonVersionError(Exception): + pass + + exc = PythonVersionError('The ASCII85Decode filter requires Python >= 3.4') + + class ASCII85Encoder(Encoder): + def __init__(self, destination): + raise exc + + + class ASCII85Decoder(Decoder): + def __init__(self, source): + raise exc + + +from .cos import Name, Dictionary, Integer, Array, Null + + +class FlateDecodeParams(Dictionary): + def __init__(self, predictor=None, colors=None, bits_per_component=None, + columns=None): + super().__init__() + if predictor: + self['Predictor'] = Integer(predictor) + if colors: + self['Colors'] = Integer(colors) + if bits_per_component: + self['BitsPerComponent'] = Integer(bits_per_component) + if columns: + self['Columns'] = Integer(columns) + + @property + def bytes_per_column(self): + colors = self.get('Colors', 1) + bits_per_component = self.get('BitsPerComponent', 8) + columns = self.get('Columns', 1) + return ceil(colors * bits_per_component / 8 * columns) + + +class FlateDecode(Filter): + params_class = FlateDecodeParams + + def __init__(self, params=None, level=6): + super().__init__(params) + self.level = level + + def encoder(self, destination, bypass_predictor=False): + if not bypass_predictor and self.params: + raise NotImplementedError + return FlateEncoder(destination, self.level) + + def decoder(self, source): + decoded = FlateDecoder(source) + if self.params and self.params['Predictor'] > 1: + if self.params['Predictor'] >= 10: + return PNGReconstructor(decoded, self.params.bytes_per_column) + else: + raise NotImplementedError + else: + return decoded + + +class FlateEncoder(Encoder): + def __init__(self, destination, level): + super().__init__(destination) + self._compressor = zlib.compressobj(level) + + def write(self, b): + self._destination.write(self._compressor.compress(b)) + + def flush(self): + self._destination.write(self._compressor.flush()) + + +class FlateDecoder(FIFOBuffer, Decoder): + def __init__(self, source): + super().__init__(source) + self._decompressor = zlib.decompressobj() + + def read_from_source(self, n): + if self._decompressor is None: + return b'' + in_data = self._source.read(n) + out_data = self._decompressor.decompress(in_data) + if len(in_data) == 0: + out_data += self._decompressor.flush() + self._decompressor = None + elif len(out_data) == 0: + out_data = self.read_from_source(n) + return out_data + + +class LZWDecodeParams(FlateDecodeParams): + def __init__(self, predictor=None, colors=None, bits_per_component=None, + columns=None, early_change=None): + super().__init__(predictor, colors, bits_per_component, columns) + if early_change: + self['EarlyChange'] = Integer(early_change) + + +class LZWDecode(Filter): # not implemented + params_class = FlateDecodeParams + + +class PNGReconstructor(FIFOBuffer): + NONE = 0 + SUB = 1 + UP = 2 + AVERAGE = 3 + PAETH = 4 + + # TODO: bitsper... + def __init__(self, source, bytes_per_column): + super().__init__(source) + self.bytes_per_column = bytes_per_column + self._column_struct = struct.Struct('>{}B'.format(bytes_per_column)) + self._last_values = [0] * bytes_per_column + + def read_from_source(self, _n_ignored): + # number of bytes requested `n` is ignored; a single row is fetched + try: + predictor, = struct.unpack('>B', self._source.read(1)) + except struct.error: + return b'' + row = self._source.read(self._column_struct.size) + values = list(self._column_struct.unpack(row)) + + if predictor == self.NONE: + out_row = row + elif predictor == self.SUB: + recon_a = 0 + for index, filt_x in enumerate(values): + recon_a = values[index] = (filt_x + recon_a) % 256 + out_row = self._column_struct.pack(*values) + elif predictor == self.UP: + for index, (filt_x, recon_b) in enumerate(zip(values, + self._last_values)): + values[index] = (filt_x + recon_b) % 256 + out_row = self._column_struct.pack(*values) + elif predictor == self.AVERAGE: + recon_a = 0 + for index, (filt_x, recon_b) in enumerate(zip(values, + self._last_values)): + average = (recon_a + recon_b) // 2 + recon_a = values[index] = (filt_x + average) % 256 + out_row = self._column_struct.pack(*values) + elif predictor == self.PAETH: + recon_a = recon_c = 0 + for index, (filt_x, recon_b) in enumerate(zip(values, + self._last_values)): + prediction = paeth_predictor(recon_a, recon_b, recon_c) + recon_a = values[index] = (filt_x + prediction) % 256 + out_row = self._column_struct.pack(*values) + + self._last_values = values + return out_row + + +def paeth_predictor(a, b, c): + p = a + b - c + pa = abs(p - a) + pb = abs(p - b) + pc = abs(p - c) + if pa <= pb and pa <= pc: + return a + elif pb <= pc: + return b + else: + return c + + +class RunLengthDecode(Filter): + def encoder(self, destination): + return RunLengthEncoder(destination) + + def decoder(self, source): + return RunLengthDecoder(source) + + +@consumer +def run_length_encoder(destination): + def to_byte(value): + return pack('B', value) + + def write_repeat(byte, count): + destination.write(to_byte(257 - count)) + destination.write(byte) + return b'', 1 + + def flush(buffer): + destination.write(to_byte(len(buffer) - 1)) + destination.write(buffer) + return b'' + + last_byte = yield + buffer = b'' + same_count = 1 + while True: + try: + byte = yield + except GeneratorExit: + break + if byte == b'': + break + if byte != last_byte: + if same_count > 2: + _, same_count = write_repeat(last_byte, same_count) + else: + if last_byte: + buffer += last_byte * same_count + same_count = 1 + if len(buffer) >= 127: # not 128, as buffer can grow by 2 + buffer = flush(buffer) + else: + same_count += 1 + if buffer and same_count > 2: + buffer = flush(buffer) + if same_count == 128: + byte, same_count = write_repeat(last_byte, same_count) + last_byte = byte + if same_count > 2: + _, same_count = write_repeat(last_byte, same_count) + elif last_byte: + buffer += last_byte * same_count + if buffer: + flush(buffer) + destination.write(to_byte(128)) + + +class RunLengthEncoder(Encoder): + def __init__(self, destination): + super().__init__(destination) + self._encoder = run_length_encoder(destination) + + def write(self, b): + for i in range(len(b)): + self._encoder.send(b[i:i+1]) + + def flush(self): + self._encoder.close() + + +class RunLengthDecoder(FIFOBuffer, Decoder): + def read_from_source(self, n): + out_data = b'' + while len(out_data) < n: + in_byte = self._source.read(1) + if not in_byte: + break + length, = unpack('B', in_byte) + if length == 128: + break + elif length < 128: + out_data += self._source.read(length + 1) + else: + out_data += self._source.read(1) * (257 - length) + return out_data + + +class CCITTFaxDecode(Filter): # not implemented + pass + + +class JBIG2Decode(Filter): # not implemented + pass + + +class DCTDecode(Filter): # not implemented + pass + + +class JPXDecode(Filter): # not implemented + pass + + +class Crypt(Filter): # not implemented + pass + + +class FilterPipeline(list): + @property + def name(self): + return Array(Name(filter.name) for filter in self) + + @property + def params(self): + if not any(filter.params for filter in self): + return None + else: + return Array(filter.params or Null() for filter in self) + + def encoder(self, destination): + for filter in self: + destination = filter.encoder(destination) + return destination + + def decoder(self, source): + for filter in self: + source = filter.decoder(source) + return source diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/pdfdoccodec.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/pdfdoccodec.py new file mode 100644 index 000000000..100405081 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/pdfdoccodec.py @@ -0,0 +1,324 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import codecs + + +def search_function(encoding): + if encoding == 'pdf_doc': + return getregentry() + + +codecs.register(search_function) + + +### Codec APIs + +class Codec(codecs.Codec): + def encode(self, input, errors='strict'): + return codecs.charmap_encode(input, errors, encoding_table) + + def decode(self, input, errors='strict'): + return codecs.charmap_decode(input, errors, decoding_table) + + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input, self.errors, encoding_table)[0] + + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input, self.errors, decoding_table)[0] + + +class StreamWriter(Codec, codecs.StreamWriter): + pass + + +class StreamReader(Codec, codecs.StreamReader): + pass + + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='pdf-doc', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table (from the PDF reference) + +decoding_table = ( + '\ufffe' # 0x00 -> (NULL) + '\ufffe' # 0x01 -> (START OF HEADING) + '\ufffe' # 0x02 -> (START OF TEXT) + '\ufffe' # 0x03 -> (END OF TEXT) + '\ufffe' # 0x04 -> (END OF TEXT) + '\ufffe' # 0x05 -> (END OF TRANSMISSION) + '\ufffe' # 0x06 -> (ACKNOWLEDGE) + '\ufffe' # 0x07 -> (BELL) + '\ufffe' # 0x08 -> (BACKSPACE) + '\ufffe' # 0x09 -> (CHARACTER TABULATION) + '\ufffe' # 0x0A -> (LINE FEED) + '\ufffe' # 0x0B -> (LINE TABULATION) + '\ufffe' # 0x0C -> (FORM FEED) + '\ufffe' # 0x0D -> (CARRIAGE RETURN) + '\ufffe' # 0x0E -> (SHIFT OUT) + '\ufffe' # 0x0F -> (SHIFT IN) + '\ufffe' # 0x10 -> (DATA LINK ESCAPE) + '\ufffe' # 0x11 -> (DEVICE CONTROL ONE) + '\ufffe' # 0x12 -> (DEVICE CONTROL TWO) + '\ufffe' # 0x13 -> (DEVICE CONTROL THREE) + '\ufffe' # 0x14 -> (DEVICE CONTROL FOUR) + '\ufffe' # 0x15 -> (NEGATIVE ACKNOWLEDGE) + '\ufffe' # 0x16 -> (SYNCRONOUS IDLE) + '\ufffe' # 0x17 -> (END OF TRANSMISSION BLOCK) + '\u02d8' # 0x18 -> BREVE + '\u02c7' # 0x19 -> CARON + '\u02c6' # 0x1A -> MODIFIER LETTER CIRCUMFLEX ACCENT + '\u02d9' # 0x1B -> DOT ABOVE + '\u02dd' # 0x1C -> DOUBLE ACUTE ACCENT + '\u02db' # 0x1D -> OGONEK + '\u02da' # 0x1E -> RING ABOVE + '\u02dc' # 0x1F -> SMALL TILDE + ' ' # 0x20 -> SPACE ( ) + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK (") + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND (&) + "'" # 0x27 -> APOSTROPHE (') + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP (period) + '/' # 0x2F -> SOLIDUS (slash) + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGJT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS THAN SIGN (<) + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER THAN SIGN (>) + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> + 'B' # 0x42 -> + 'C' # 0x43 -> + 'D' # 0x44 -> + 'E' # 0x45 -> + 'F' # 0x46 -> + 'G' # 0x47 -> + 'H' # 0x48 -> + 'I' # 0x49 -> + 'J' # 0x4A -> + 'K' # 0x4B -> + 'L' # 0x4C -> + 'M' # 0x4D -> + 'N' # 0x4E -> + 'O' # 0x4F -> + 'P' # 0x50 -> + 'Q' # 0x51 -> + 'R' # 0x52 -> + 'S' # 0x53 -> + 'T' # 0x54 -> + 'U' # 0x55 -> + 'V' # 0x56 -> + 'W' # 0x57 -> + 'X' # 0x58 -> + 'Y' # 0x59 -> + 'Z' # 0x5A -> + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS (backslash) + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT (hat) + '_' # 0x5F -> LOW LINE (SPACING UNDERSCORE) + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> + 'b' # 0x62 -> + 'c' # 0x63 -> + 'd' # 0x64 -> + 'e' # 0x65 -> + 'f' # 0x66 -> + 'g' # 0x67 -> + 'h' # 0x68 -> + 'i' # 0x69 -> + 'j' # 0x6A -> + 'k' # 0x6B -> + 'l' # 0x6C -> + 'm' # 0x6D -> + 'n' # 0x6E -> + 'o' # 0x6F -> + 'p' # 0x70 -> + 'q' # 0x71 -> + 'r' # 0x72 -> + 's' # 0x73 -> + 't' # 0x74 -> + 'u' # 0x75 -> + 'v' # 0x76 -> + 'w' # 0x77 -> + 'x' # 0x78 -> + 'y' # 0x79 -> + 'z' # 0x7A -> + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\ufffe' # 0x7F -> Undefined + '\u2022' # 0x80 -> BULLET + '\u2020' # 0x81 -> DAGGER + '\u2021' # 0x82 -> DOUBLE DAGGER + '\u2026' # 0x83 -> HORIZONTAL ELLIPSIS + '\u2014' # 0x84 -> EM DASH + '\u2013' # 0x85 -> EN DASH + '\u0192' # 0x86 -> + '\u2044' # 0x87 -> FRACTION SLASH (solidus) + '\u2039' # 0x88 -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + '\u203a' # 0x89 -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + '\u2212' # 0x8A -> + '\u2030' # 0x8B -> PER MILLE SIGN + '\u201e' # 0x8C -> DOUBLE LOW-9 QUOTATION MARK (quotedblbase) + '\u201c' # 0x8D -> LEFT DOUBLE QUOTATION MARK (double quote left) + '\u201d' # 0x8E -> RIGHT DOUBLE QUOTATION MARK (quotedblright) + '\u2018' # 0x8F -> LEFT SINGLE QUOTATION MARK (quoteleft) + '\u2019' # 0x90 -> RIGHT SINGLE QUOTATION MARK (quoteright) + '\u201a' # 0x91 -> SINGLE LOW-9 QUOTATION MARK (quotesinglbase) + '\u2122' # 0x92 -> TRADE MARK SIGN + '\ufb01' # 0x93 -> LATIN SMALL LIGATURE FI + '\ufb02' # 0x94 -> LATIN SMALL LIGATURE FL + '\u0141' # 0x95 -> LATIN CAPITAL LETTER L WITH STROKE + '\u0152' # 0x96 -> LATIN CAPITAL LIGATURE OE + '\u0160' # 0x97 -> LATIN CAPITAL LETTER S WITH CARON + '\u0178' # 0x98 -> LATIN CAPITAL LETTER Y WITH DIAERESIS + '\u017d' # 0x99 -> LATIN CAPITAL LETTER Z WITH CARON + '\u0131' # 0x9A -> LATIN SMALL LETTER DOTLESS I + '\u0142' # 0x9B -> LATIN SMALL LETTER L WITH STROKE + '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE + '\u0161' # 0x9D -> LATIN SMALL LETTER S WITH CARON + '\u017e' # 0x9E -> LATIN SMALL LETTER Z WITH CARON + '\ufffe' # 0x9F -> Undefined + '\u20ac' # 0xA0 -> EURO SIGN + '\u00a1' # 0xA1 -> INVERTED EXCLAMATION MARK + '\xa2' # 0xA2 -> CENT SIGN + '\xa3' # 0xA3 -> POUND SIGN (sterling) + '\xa4' # 0xA4 -> CURRENCY SIGN + '\xa5' # 0xA5 -> YEN SIGN + '\xa6' # 0xA6 -> BROKEN BAR + '\xa7' # 0xA7 -> SECTION SIGN + '\xa8' # 0xA8 -> DIAERESIS + '\xa9' # 0xA9 -> COPYRIGHT SIGN + '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xac' # 0xAC -> NOT SIGN + '\ufffe' # 0xAD -> Undefined + '\xae' # 0xAE -> REGISTERED SIGN + '\xaf' # 0xAF -> MACRON + '\xb0' # 0xB0 -> DEGREE SIGN + '\xb1' # 0xB1 -> PLUS-MINUS SIGN + '\xb2' # 0xB2 -> SUPERSCRIPT TWO + '\xb3' # 0xB3 -> SUPERSCRIPT THREE + '\xb4' # 0xB4 -> ACUTE ACCENT + '\xb5' # 0xB5 -> MICRO SIGN + '\xb6' # 0xB6 -> PILCROW SIGN + '\xb7' # 0xB7 -> MIDDLE DOT + '\xb8' # 0xB8 -> CEDILLA + '\xb9' # 0xB9 -> SUPERSCRIPT ONE + '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + '\xbf' # 0xBF -> INVERTED QUESTION MARK + '\xc0' # 0xC0 -> + '\xc1' # 0xC1 -> + '\xc2' # 0xC2 -> + '\xc3' # 0xC3 -> + '\xc4' # 0xC4 -> + '\xc5' # 0xC5 -> + '\xc6' # 0xC6 -> + '\xc7' # 0xC7 -> + '\xc8' # 0xC8 -> + '\xc9' # 0xC9 -> + '\xca' # 0xCA -> + '\xcb' # 0xCB -> + '\xcc' # 0xCC -> + '\xcd' # 0xCD -> + '\xce' # 0xCE -> + '\xcf' # 0xCF -> + '\xd0' # 0xD0 -> + '\xd1' # 0xD1 -> + '\xd2' # 0xD2 -> + '\xd3' # 0xD3 -> + '\xd4' # 0xD4 -> + '\xd5' # 0xD5 -> + '\xd6' # 0xD6 -> + '\xd7' # 0xD7 -> + '\xd8' # 0xD8 -> + '\xd9' # 0xD9 -> + '\xda' # 0xDA -> + '\xdb' # 0xDB -> + '\xdc' # 0xDC -> + '\xdd' # 0xDD -> + '\xde' # 0xDE -> + '\xdf' # 0xDF -> + '\xe0' # 0xE0 -> + '\xe1' # 0xE1 -> + '\xe2' # 0xE2 -> + '\xe3' # 0xE3 -> + '\xe4' # 0xE4 -> + '\xe5' # 0xE5 -> + '\xe6' # 0xE6 -> + '\xe7' # 0xE7 -> + '\xe8' # 0xE8 -> + '\xe9' # 0xE9 -> + '\xea' # 0xEA -> + '\xeb' # 0xEB -> + '\xec' # 0xEC -> + '\xed' # 0xED -> + '\xee' # 0xEE -> + '\xef' # 0xEF -> + '\xf0' # 0xF0 -> + '\xf1' # 0xF1 -> + '\xf2' # 0xF2 -> + '\xf3' # 0xF3 -> + '\xf4' # 0xF4 -> + '\xf5' # 0xF5 -> + '\xf6' # 0xF6 -> + '\xf7' # 0xF7 -> + '\xf8' # 0xF8 -> + '\xf9' # 0xF9 -> + '\xfa' # 0xFA -> + '\xfb' # 0xFB -> + '\xfc' # 0xFC -> + '\xfd' # 0xFD -> + '\xfe' # 0xFE -> + '\xff' # 0xFF -> +) + +### Encoding table +encoding_table = codecs.charmap_build(decoding_table) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/reader.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/reader.py new file mode 100644 index 000000000..0a95c9280 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/reader.py @@ -0,0 +1,553 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import struct, time + +from binascii import unhexlify +from io import SEEK_CUR, SEEK_END +from pathlib import Path + +from ...util import all_subclasses +from . import cos +from .filter import Filter +from .xobject import XObjectForm + + +DICTIONARY_SUBCLASSES = {} +for cls in all_subclasses(cos.Dictionary): + if cls.type is not None: + DICTIONARY_SUBCLASSES.setdefault((cls.type, cls.subtype), cls) + +FILTER_SUBCLASSES = {cls.name: cls for cls in all_subclasses(Filter)} + + + +class PDFObjectReader(object): + def __init__(self, file_or_filename, document=None): + try: + filename = Path(file_or_filename) + self.file = filename.open('rb') + except TypeError: + self.file = file_or_filename + self.document = document or self + + def jump_to_next_line(self): + while True: + char = self.file.read(1) + if char == b'\n': + break + elif char == b'\r': + next_char = self.file.read(1) + if next_char != b'\n': + self.file.seek(-1, SEEK_CUR) + break + + def eat_whitespace(self): + while True: + char = self.file.read(1) + if char == b'': + break + if char not in cos.WHITESPACE: + self.file.seek(-1, SEEK_CUR) + break + + def next_token(self): + token = self.file.read(1) + if token in (cos.HexString.PREFIX, cos.HexString.POSTFIX): + # check for dict begin/end + char = self.file.read(1) + if char == token: + token += char + else: + self.file.seek(-1, SEEK_CUR) + elif token in cos.DELIMITERS + cos.WHITESPACE: + pass + else: + while True: + char = self.file.read(1) + if char in cos.DELIMITERS + cos.WHITESPACE: + self.file.seek(-1, SEEK_CUR) + break + token += char + return token + + def next_item(self, indirect=False): + self.eat_whitespace() + restore_pos = self.file.tell() + token = self.next_token() + if token == cos.String.PREFIX: + item = self.read_string(indirect) + elif token == cos.HexString.PREFIX: + item = self.read_hex_string(indirect) + elif token == cos.Array.PREFIX: + item = self.read_array(indirect) + elif token == cos.Name.PREFIX: + item = self.read_name(indirect) + elif token == cos.Dictionary.PREFIX: + item = self.read_dictionary_or_stream(indirect) + elif token == b'true': + item = cos.Boolean(True, indirect=indirect) + elif token == b'false': + item = cos.Boolean(False, indirect=indirect) + elif token == b'null': + item = cos.Null(indirect=indirect) + else: + # number or indirect reference + self.file.seek(restore_pos) + item = self.read_number(indirect) + restore_pos = self.file.tell() + if isinstance(item, cos.Integer): + try: + generation = self.read_number() + self.eat_whitespace() + r = self.next_token() + if isinstance(generation, cos.Integer) and r == b'R': + item = cos.Reference(self.document, int(item), + int(generation)) + else: + raise ValueError + except ValueError: + self.file.seek(restore_pos) + return item + + def peek(self, length=50): + restore_pos = self.file.tell() + print(self.file.read(length)) + self.file.seek(restore_pos) + + # TODO: move reader function outside to simplify unit testing + def read_array(self, indirect=False): + array = cos.Array(indirect=indirect) + while True: + self.eat_whitespace() + token = self.file.read(1) + if token == cos.Array.POSTFIX: + break + self.file.seek(-1, SEEK_CUR) + item = self.next_item() + array.append(item) + return array + + def read_name(self, indirect=False): + name = b'' + while True: + char = self.file.read(1) + if char in cos.DELIMITERS + cos.WHITESPACE: + self.file.seek(-1, SEEK_CUR) + break + elif char == b'#': + char_code = self.file.read(2) + char = chr(int(char_code.decode('ascii'), 16)).encode('ascii') + name += char + return cos.Name(name, indirect=indirect) + + def read_dictionary_or_stream(self, indirect=False): + dictionary = cos.Dictionary(indirect=indirect) + while True: + self.eat_whitespace() + token = self.next_token() + if token == cos.Dictionary.POSTFIX: + break + key, value = self.read_name(), self.next_item() + dictionary[key] = value + self.eat_whitespace() + dict_pos = self.file.tell() + if self.next_token() == b'stream': + self.jump_to_next_line() + length = int(dictionary['Length']) + if 'Filter' in dictionary: + filter_or_filters = dictionary['Filter'] + if isinstance(filter_or_filters, cos.Name): + filter_class = FILTER_SUBCLASSES[filter_or_filters] + try: + decode_params = dictionary['DecodeParms'] + decode_params.__class__ = filter_class.params_class + except KeyError: + decode_params = None + stream_filter = filter_class(params=decode_params) + else: + filter_classes = [FILTER_SUBCLASSES[filter_name] + for filter_name in filter_or_filters] + try: + stream_filter = [] + for fltr_cls, params in zip(filter_classes, + dictionary['DecodeParms']): + if params: + params.__class__ = fltr_cls.params_class + stream_filter.append(fltr_cls(params=params)) + except KeyError: + stream_filter = [filter_class() + for filter_class in filter_classes] + else: + stream_filter = None + stream = cos.Stream(stream_filter) + # copy dict contents: .update() would dereference Reference values! + for key, value in dictionary.items(): + stream[key] = value + stream._data.write(self.file.read(length)) + self.eat_whitespace() + assert self.next_token() == b'endstream' + dictionary = stream + else: + self.file.seek(dict_pos) + # try to map to specific Dictionary sub-class + type = dictionary.get('Type', None) + subtype = dictionary.get('Subtype', None) + key = str(type) if type else None, str(subtype) if subtype else None + if key in DICTIONARY_SUBCLASSES: + dictionary.__class__ = DICTIONARY_SUBCLASSES[key] + return dictionary + + escape_chars = b'nrtbf()\\' + + def read_string(self, indirect=False): + string = b'' + escape = False + parenthesis_level = 0 # TODO: is currently not used + while True: + char = self.file.read(1) + if escape: + if char in self.escape_chars: + string += char + elif char == b'\n': + pass + elif char == b'\r' and self.file.read(1) != '\n': + self.file.seek(-1, SEEK_CUR) + elif char.isdigit(): + for i in range(2): + extra = self.file.read(1) + if extra.isdigit(): + char += extra + else: + self.file.seek(-1, SEEK_CUR) + break + string += struct.pack('B', int(char, 8)) + else: + string += b'\\' + char + escape = False + elif char == b'\\': + escape = True + elif char == b'(': + parenthesis_level += 1 + elif char == b')' and parenthesis_level > 0: + parenthesis_level -= 1 + elif char == cos.String.POSTFIX: + break + else: + string += char + return cos.String(string, indirect=indirect) + + def read_hex_string(self, indirect=False): + hex_string = b'' + while True: + self.eat_whitespace() + char = self.file.read(1) + if char == cos.HexString.POSTFIX: + break + hex_string += char + if len(hex_string) % 2 > 0: + hex_string += b'0' + return cos.HexString(unhexlify(hex_string), indirect=indirect) + + def read_number(self, indirect=False): + self.eat_whitespace() + number_string = b'' + while True: + char = self.file.read(1) + if not char: + break + elif char not in b'+-.0123456789': + self.file.seek(-1, SEEK_CUR) + break + number_string += char + try: + number = cos.Integer(number_string, indirect=indirect) + except ValueError: + number = cos.Real(number_string, indirect=indirect) + return number + + +class PDFReader(PDFObjectReader, cos.Document): + PDF_SIGNATURE = b'%PDF' + + def __init__(self, file_or_filename): + super().__init__(file_or_filename) + self.file.seek(0) + if self.file.read(len(self.PDF_SIGNATURE)) != self.PDF_SIGNATURE: + raise ValueError('Not a PDF file: missing %PDF signature') + self.timestamp = time.time() + self._by_object_id = {} + xref_offset = self.find_xref_offset() + try: + self._xref, trailer = self.parse_xref_stream(xref_offset) + except ValueError: + self._xref, trailer = self.parse_xref_table(xref_offset) + if 'Info' in trailer: + self.info = trailer['Info'] + else: + self.info = cos.Dictionary() + self.id = trailer['ID'] if 'ID' in trailer else None + self._max_identifier_in_file = int(trailer['Size']) - 1 + self.catalog = trailer['Root'] + self.dests = cos.Dictionary() + try: + dests_names = iter(self.catalog['Names']['Dests']['Names']) + for name in dests_names: + dest = next(dests_names) + self.dests[name] = dest + except KeyError: + pass + + @property + def max_identifier(self): + return max(super().max_identifier, self._max_identifier_in_file) + + def __getitem__(self, identifier): + try: + obj = super().__getitem__(identifier) + except KeyError: + obj = self[identifier] = self._xref.get_object(identifier) + return obj + + def __delitem__(self, identifier): + del self._xref[identifier] + super().__delitem__(identifier) + + def parse_trailer(self): + assert self.next_token() == b'trailer' + self.jump_to_next_line() + trailer_dict = self.next_item() + return trailer_dict +##/Size: (Required; must not be an indirect reference) The total number of entries in the file's +##cross-reference table, as defined by the combination of the original section and all +##update sections. Equivalently, this value is 1 greater than the highest object number +##used in the file. +##Note: Any object in a cross-reference section whose number is greater than this value is +##ignored and considered missing. + + def parse_indirect_object(self, address): + # save file state + restore_pos = self.file.tell() + self.file.seek(address) + identifier = int(self.read_number()) + generation = int(self.read_number()) + self.eat_whitespace() + assert self.next_token() == b'obj' + self.eat_whitespace() + obj = self.next_item(indirect=True) + reference = cos.Reference(self, identifier, generation) + self._by_object_id[id(obj)] = reference + self.eat_whitespace() + assert self.next_token() == b'endobj' + self.file.seek(restore_pos) + return identifier, obj + + def parse_xref_table(self, offset): + xref = XRefTable(self) + self.file.seek(offset) + assert self.next_token() == b'xref' + while True: + try: + first, total = int(self.read_number()), self.read_number() + self.jump_to_next_line() + for identifier in range(first, first + total): + line = self.file.read(20) + fields = identifier, int(line[:10]), int(line[11:16]) + if line[17] == ord(b'n'): + xref[identifier] = IndirectObjectEntry(*fields) + else: + assert line[17] == ord(b'f') + xref[identifier] = FreeObjectEntry(*fields) + except ValueError: + break + trailer = self.parse_trailer() + prev_xref = xref_stm = None + if 'Prev' in trailer: + prev_xref, prev_trailer = self.parse_xref_table(trailer['Prev']) + if 'XRefStm' in trailer: + xref_stm, _ = self.parse_xref_stream(trailer['XRefStm']) + xref_stm.prev = prev_xref + xref.prev = xref_stm or prev_xref + return xref, trailer + + def parse_xref_stream(self, offset): + identifier, xref_stream = self.parse_indirect_object(offset) + self[identifier] = xref_stream + if 'Prev' in xref_stream: + prev = self.parse_indirect_object(xref_stream['Prev']) + else: + prev = None + xref = XRefTable(self, prev) + size = int(xref_stream['Size']) + widths = [int(width) for width in xref_stream['W']] + assert len(widths) == 3 + assert max(widths) <= 8 + if 'Index' in xref_stream: + index = iter(int(value) for value in xref_stream['Index']) + else: + index = iter((0, size)) + xref_stream.seek(0) + while True: + try: + first, total = next(index), next(index) + except StopIteration: + break + for identifier in range(first, first + total): + values = (xref_stream.read(width) for width in widths) + fields = [struct.unpack('>Q', value.rjust(8, b'\x00'))[0] + for value in values] + if widths[0] == 0: + field_type = 1 + else: + field_type = fields[0] + fields = fields[1:] + field_class = FIELD_CLASSES[field_type] + xref[identifier] = field_class(identifier, *fields) + assert identifier + 1 == size + return xref, xref_stream + + EOF_MARKER = b'%%EOF' + START_XREF = b'startxref' + + def find_xref_offset(self): + offset = self.file.seek(- len(self.EOF_MARKER), SEEK_END) + for i in range(10): + self.file.seek(offset) + if self.file.read(len(self.EOF_MARKER)) == self.EOF_MARKER: + break + offset -= 1 + else: + raise ValueError('Not a PDF file: missing %%EOF') + offset -= len(self.START_XREF) + while True: + self.file.seek(offset) + value = self.file.read(len(self.START_XREF)) + if value == self.START_XREF: + self.jump_to_next_line() + xref_offset = self.read_number() + break + offset -= 1 + return int(xref_offset) + + def iter_outlines(self, depth=float('+inf')): + """Iterate over the outline entries up to a given depth + + Args: + depth (int): the maximum depth of outline entries to yield + + Returns: + Iterator[(int, String, Array)]: entry depth, title and destination + + """ + try: + outlines = self.catalog['Outlines'] + entry = outlines['First'] + except KeyError: + return + stack = [outlines] + while True: + entry_depth = len(stack) - 1 + dest = entry['Dest'] + yield (entry_depth, entry['Title'], + dest if isinstance(dest, cos.Array) else self.dests[dest]) + if 'First' in entry and depth > entry_depth: + stack.append(entry) + entry = entry['First'] + elif 'Next' in entry: + entry = entry['Next'] + else: + while stack: + parent = stack.pop() + if 'Next' in parent: + entry = parent['Next'] + break + else: + break + + +class XRefTable(dict): + def __init__(self, document, prev=None): + self.document = document + self.prev = prev + + def get_object(self, identifier): + try: + return self[identifier].get_object(self.document) + except KeyError: + return self.prev.get_object(identifier) + + +class XRefEntry(object): + def get_object(self, document): + raise NotImplementedError + + +class FreeObjectEntry(XRefEntry): + def __init__(self, identifier, next_free_object_identifier, generation): + self.identifier = identifier + self.next_free_object_identifier = next_free_object_identifier + self.generation = generation + + def get_object(self, document): + raise Exception('Cannot retieve a free object with id {}' + .format(self.identifier)) + + +class IndirectObjectEntry(XRefEntry): + def __init__(self, identifier, address, generation=0): + self.identifier = identifier + self.address = address + self.generation = generation + + def get_object(self, document): + obj_identifier, obj = document.parse_indirect_object(self.address) + assert obj_identifier == self.identifier + return obj + + +class CompressedObjectEntry(XRefEntry): + def __init__(self, identifier, object_stream_identifier, object_index): + self.identifier = identifier + self.object_stream_identifier = object_stream_identifier + self.object_index = object_index + + def get_object(self, document): + object_stream = document[self.object_stream_identifier] + return object_stream.get_object(document, self.object_index) + + +FIELD_CLASSES = {0: FreeObjectEntry, + 1: IndirectObjectEntry, + 2: CompressedObjectEntry} + + +class PDFPageReader(XObjectForm): + def __init__(self, file_or_filename, page_number=1): + pdf_file = PDFReader(file_or_filename) + page = pdf_file.get_page(page_number - 1) + super().__init__(page['MediaBox']) + content_stream = page['Contents'] + if 'Filter' in content_stream: + self['Filter'] = content_stream['Filter'] + if 'Resources' in page: + self['Resources'] = page['Resources'] + self.write(content_stream.getvalue()) + + @property + def width(self): + _, _, width, _ = self['BBox'] + return width + + @property + def height(self): + _, _, _, height = self['BBox'] + return height + + @property + def dpi(self): + return None, None diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/util.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/util.py new file mode 100644 index 000000000..fa417b8c0 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/util.py @@ -0,0 +1,48 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from io import BytesIO, SEEK_END + + +class FIFOBuffer(object): + def __init__(self, source, buffer_size=4096): + self._source = source + self._buffer_size = buffer_size + self._fifo = BytesIO() + self._write_pos = 0 + self._read_pos = 0 + + @property + def size(self): + return self._write_pos - self._read_pos + + def read_from_source(self, n): + raise NotImplementedError + + def fill_buffer(self): + self._fifo.seek(self._write_pos) + data = self.read_from_source(self._buffer_size) + self._fifo.write(data) + self._write_pos = self._fifo.tell() + return len(data) > 0 + + def read(self, n=-1): + while n is None or n < 0 or self.size < n: + if not self.fill_buffer(): + break + self._fifo.seek(self._read_pos) + out = self._fifo.read(n) + self._read_pos = self._fifo.tell() + if self._read_pos >= self._buffer_size: + self._fifo = BytesIO(self._fifo.read()) + self._write_pos = self._fifo.seek(0, SEEK_END) + self._read_pos = 0 + return out + + def close(self): + pass diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__init__.py new file mode 100644 index 000000000..01b3f8dfa --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__init__.py @@ -0,0 +1,72 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from ..cos import Name, Integer, Stream + + +__all__ = ['XObject', 'XObjectForm', 'XObjectImage'] + + +class XObject(Stream): + type = 'XObject' + + +class XObjectForm(XObject): + subtype = 'Form' + + def __init__(self, bounding_box): + super().__init__() + self['BBox'] = bounding_box + + +class XObjectImage(XObject): + subtype = 'Image' + + DEFAULT_DPI = 72 + + def __init__(self, width, height, colorspace, bitspercomponent, + dpi_or_aspect_ratio=None, filter=None): + super().__init__(filter=filter) + self['Width'] = Integer(width) + self['Height'] = Integer(height) + self['ColorSpace'] = colorspace + self['BitsPerComponent'] = Integer(bitspercomponent) + if dpi_or_aspect_ratio is None: + self.dpi = (self.DEFAULT_DPI, self.DEFAULT_DPI) + else: + try: # horizontal and vertical DPI + self.dpi = _, _ = dpi_or_aspect_ratio + except TypeError: # pixel aspect ratio + ar = dpi_or_aspect_ratio + self.dpi = ((self.DEFAULT_DPI, self.DEFAULT_DPI / ar) if ar > 1 + else (self.DEFAULT_DPI * ar, self.DEFAULT_DPI)) + + @property + def width(self): + """Width of this image in postscript points""" + dpi_x, dpi_y = self.dpi + return self['Width'] / dpi_x * 72 + + @property + def height(self): + """Height of this image in postscript points""" + dpi_x, dpi_y = self.dpi + return self['Height'] / dpi_y * 72 + + +# color spaces +DEVICE_GRAY = Name('DeviceGray') +DEVICE_RGB = Name('DeviceRGB') +DEVICE_CMYK = Name('DeviceCMYK') +INDEXED = Name('Indexed') + +# rendering intents +ABSOLUTE_COLORIMETRIC = Name('AbsoluteColorimetric') +RELATIVE_COLORIMETRIC = Name('RelativeColorimetric') +SATURATION = Name('Saturation') +PERCEPTUAL = Name('Perceptual') diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..fbea52aae Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/jpeg.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/jpeg.cpython-312.pyc new file mode 100644 index 000000000..5abab827d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/jpeg.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/png.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/png.cpython-312.pyc new file mode 100644 index 000000000..b542befca Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/png.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/purepng.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/purepng.cpython-312.pyc new file mode 100644 index 000000000..a32e4e625 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/__pycache__/purepng.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/__init__.py new file mode 100644 index 000000000..9544ee0e7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/__init__.py @@ -0,0 +1,39 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +import os + +from ...filter import FlateDecode +from ...cos import Stream + + +__all__ = ['get_icc_stream', 'SRGB', 'ADOBERGB', 'UNCALIBRATED'] + + +SRGB = 'sRGB' +ADOBERGB = 'AdobeRGB' +UNCALIBRATED = None + +ICC_PATH = os.path.abspath(os.path.dirname(__file__)) +ICC_FILENAME = {SRGB: 'sRGB_IEC61966-2-1_black_scaled.icc', + ADOBERGB: None} # TODO +ICC_DATA = {} + + +def get_icc_stream(color_space): + icc_stream = Stream(filter=FlateDecode()) + try: + data = ICC_DATA[color_space] + except KeyError: + icc_file_path = os.path.join(ICC_PATH, ICC_FILENAME[color_space]) + stream = Stream(filter=FlateDecode()) + with open(icc_file_path, 'rb') as icc: + stream.write(icc.read()) + stream.reset() + data = ICC_DATA[color_space] = stream._data + icc_stream._data = data + return icc_stream diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..1153d3d8d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/sRGB_IEC61966-2-1_black_scaled.icc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/sRGB_IEC61966-2-1_black_scaled.icc new file mode 100644 index 000000000..a2c86458b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/sRGB_IEC61966-2-1_black_scaled.icc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/sRGB_IEC61966-2-1_black_scaled.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/sRGB_IEC61966-2-1_black_scaled.txt new file mode 100644 index 000000000..d392b3bba --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/icc/sRGB_IEC61966-2-1_black_scaled.txt @@ -0,0 +1,38 @@ +source: http://www.color.org/srgbprofiles.xalter#v2 + +sRGB v2 profiles +================ + +An ICC version 2 (v2) sRGB profiles is provided below, with XYZ black point +scaling to zero. This 'black scaled' profile has the preferred rendering +intent in the header set to 'perceptual'. + +The profile contains the standard linearized Bradford D65 to D50 chromatic +adaptation tag (this tag was often not present in older sRGB profiles), and +the media white point tag is set to D50 (as is required for ICC v4 display +profiles). This avoids the inappropriate color casts that older sRGB v2 ICC +profiles sometimes produced when the absolute colorimetric intent was used. + +The profile will work correctly when either Black Point Compensation (BPC) +is on in the CMM/application, or the other profile transform to be used for +the conversion is also black scaled. Black scaled profiles are needed when +BPC is desired for the conversion but the CMM to be used does not support +BPC. Most v2 sRGB profiles in current use are black scaled because they are +intended to be used as the source profile in conversions where the +destination profile perceptual intent will be used (v2 perceptual +transforms typically include black scaling). + +NOTE: This profile was revised in February 2015 to bring the black point +tag into alignment with current ISO and IEC recommendations. + +Terms of use +============ + +To anyone who acknowledges that the file "sRGB_IEC61966-2-1_black scaled.icc" +is provided "AS IS" WITH NO EXPRESS OR IMPLIED WARRANTY, permission to use, +copy and distribute these file for any purpose is hereby granted without fee, +provided that the file is not changed including the ICC copyright notice tag, +and that the name of ICC shall not be used in advertising or publicity +pertaining to distribution of the software without specific, written prior +permission. ICC makes no representations about the suitability of this +software for any purpose. \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/jpeg.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/jpeg.py new file mode 100644 index 000000000..ae0d0cee4 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/jpeg.py @@ -0,0 +1,309 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +from fractions import Fraction +from io import SEEK_CUR +from pathlib import Path +from struct import Struct, unpack, calcsize +from warnings import warn + +from ..cos import Name, Array, Stream, Integer +from ..filter import DCTDecode, FlateDecode + +from . import XObjectImage, DEVICE_GRAY, DEVICE_RGB, DEVICE_CMYK +from .icc import SRGB, UNCALIBRATED, get_icc_stream + + +__all__ = ['JPEGReader'] + + +def create_reader(data_format, process_struct=lambda data: data[0], endian='>'): + data_struct = Struct(endian + data_format) + def reader(jpeg_reader): + data = data_struct.unpack(jpeg_reader._file.read(data_struct.size)) + return process_struct(data) + return reader + + +# useful resources +# * http://fileformats.archiveteam.org/wiki/JPEG +# * libjpeg.txt from the Independent JPEG Group's reference implementation +# * http://www.ozhiker.com/electronics/pjmt/jpeg_info/app_segments.html +# * http://www.w3.org/Graphics/JPEG/ +# * http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf + +class JPEGReader(XObjectImage): + COLOR_SPACE = {1: DEVICE_GRAY, + 3: DEVICE_RGB, + 4: DEVICE_CMYK} + + def __init__(self, file_or_filename): + try: + self.filename = Path(file_or_filename) + self._file = self.filename.open('rb') + except TypeError: + self.filename = None + self._file = file_or_filename + (width, height, bits_per_component, num_components, exif_color_space, + icc_profile, adobe_color_transform, dpi) = self._get_metadata() + if bits_per_component != 8: + raise ValueError('PDF only supports JPEG files with 8 bits ' + 'per component') + device_color_space = self.COLOR_SPACE[num_components] + if icc_profile is None and exif_color_space is not UNCALIBRATED: + icc_profile = get_icc_stream(exif_color_space) + if icc_profile is not None: + icc_profile['N'] = Integer(num_components) + icc_profile['Alternate'] = device_color_space + colorspace = Array([Name('ICCBased'), icc_profile]) + else: + colorspace = device_color_space + super().__init__(width, height, colorspace, bits_per_component, dpi, + filter=DCTDecode()) + if adobe_color_transform and num_components == 4: # invert CMYK colors + self['Decode'] = Array([Integer(1), Integer(0)] * 4) + self._file.seek(0) + while True: + buffer = self._file.read(512 * 1024) # 512 KB + if not buffer: + break + self._data.write(buffer) + + read_uchar = create_reader('B') + + read_ushort = create_reader('H') + + def _density(self, density): + if density is None: + return None + x_density, y_density, unit = density + if unit == DPI: + dpi = x_density, y_density + elif unit == DPCM: + dpi = 2.54 * x_density, 2.54 * y_density + else: # unit is None; return aspect ratio + dpi = x_density / y_density + return dpi + + def _get_metadata(self): + dpi = None + icc_profile = None + exif_color_space = UNCALIBRATED + next_icc_part_number = 1 + num_icc_parts = 0 + adobe_color_xform = None + + self._file.seek(0) + prefix, marker = self.read_uchar(), self.read_uchar() + if (prefix, marker) != (0xFF, 0xD8): + raise ValueError('Not a JPEG file') + while True: + prefix, marker = self.read_uchar(), self.read_uchar() + while marker == 0xFF: + marker = self.read_uchar() + if prefix != 0xFF or marker == 0x00: + raise ValueError('Invalid or corrupt JPEG file') + header_length = self.read_ushort() + if marker == 0xE0: + density = self._parse_jfif_segment(header_length) + dpi = self._density(density) + elif marker == 0xE1: + result = self._parse_exif_segment(header_length) + if result: + density, exif_color_space = result + dpi = self._density(density) + elif marker == 0xE2: + icc_part_number, num_icc_parts, icc_part_bytes = \ + self._parse_icc_segment(header_length) + assert icc_part_number == next_icc_part_number + next_icc_part_number += 1 + if icc_profile is None: + assert icc_part_number == 1 + icc_profile = Stream(filter=FlateDecode()) + icc_profile.write(icc_part_bytes) + elif marker == 0xEE: + adobe_color_xform = self._parse_adobe_dct_segment(header_length) + elif (marker & 0xF0) == 0xC0 and marker not in (0xC4, 0xC8, 0xCC): + v_size, h_size, bits_per_component, num_components = \ + self._parse_start_of_frame(header_length) + break + else: + self._file.seek(header_length - 2, SEEK_CUR) + assert next_icc_part_number == num_icc_parts + 1 + return (h_size, v_size, bits_per_component, num_components, + exif_color_space, icc_profile, adobe_color_xform, dpi) + + JFIF_HEADER = create_reader('5s 2s B H H B B', lambda tuple: tuple) + + def _parse_jfif_segment(self, header_length): + (identifier, version, units, + h_density, v_density, h_thumbnail, v_thumbnail) = self.JFIF_HEADER() + assert identifier == b'JFIF\0' + thumbnail_size = 3 * h_thumbnail * v_thumbnail + assert header_length == 16 + thumbnail_size + return h_density, v_density, JFIF_UNITS[units] + + EXIF_HEADER = create_reader('5s B', lambda tuple: tuple) + EXIF_TIFF_HEADER = 'H I' + EXIF_TAG_FORMAT = 'H H I 4s' + + def _parse_exif_segment(self, header_length): + resume_position = self._file.tell() + header_length - 2 + identifier, null = self.EXIF_HEADER() + if identifier != b'Exif\0': + self._file.seek(resume_position) + return None + assert null == 0 + tiff_header_offset = self._file.tell() + byte_order = self.read_ushort() + endian = EXIF_ENDIAN[byte_order] + + tiff_header = create_reader(self.EXIF_TIFF_HEADER, + lambda tuple: tuple, endian) + fortytwo, ifd_offset = tiff_header(self) + assert fortytwo == 42 + self._file.seek(tiff_header_offset + ifd_offset) + ifd_0th = self._parse_exif_ifd(endian, tiff_header_offset) + color_space = UNCALIBRATED + if EXIF_IFD_POINTER in ifd_0th: + self._file.seek(tiff_header_offset + ifd_0th[EXIF_IFD_POINTER]) + ifd_exif = self._parse_exif_ifd(endian, tiff_header_offset) + try: + exif_color_space = ifd_exif[EXIF_COLOR_SPACE] + color_space = EXIF_COLOR_SPACES[exif_color_space] + except KeyError: + warn('The EXIF table in "{}" is missing color space information' + .format(self.filename)) + density = (float(ifd_0th.get(EXIF_X_RESOLUTION, 72)), + float(ifd_0th.get(EXIF_Y_RESOLUTION, 72)), + EXIF_UNITS[ifd_0th.get(EXIF_RESOLUTION_UNIT, 2)]) + self._file.seek(resume_position) + return density, color_space + + def _parse_exif_ifd(self, endian, tiff_header_offset): + read_ushort = create_reader('H', endian=endian) + tag_format = create_reader(self.EXIF_TAG_FORMAT, + lambda tuple: tuple, endian) + + def rational(numerator, denominator): + try: + return Fraction(numerator, denominator) + except ZeroDivisionError: + return None + + def get_value(type, count, value_or_offset): + value_format = EXIF_TAG_TYPE[type] + num_bytes = count * calcsize(value_format) + if num_bytes > 4: # offset + saved_offset = self._file.tell() + offset, = unpack(endian + 'I', value_or_offset) + self._file.seek(tiff_header_offset + offset) + data = self._file.read(num_bytes) + format = '{}{}'.format(endian, count * value_format) + self._file.seek(saved_offset) + else: + format = endian + value_format + data = value_or_offset[:calcsize(format)] + + raw_value = unpack(format, data) + if type in (1, 3, 4, 9): + try: + value, = raw_value + except ValueError: + value = raw_value + elif type == 2: + value = raw_value[0].decode('ISO-8859-1') + elif type in (5, 10): + try: + numerator, denominator = raw_value + value = rational(numerator, denominator) + except ValueError: + pairs = zip(*(iter(raw_value), ) * 2) + value = tuple(rational(num, denom) for num, denom in pairs) + elif type == 7: + value = raw_value + return value + + num_tags = read_ushort(self) + result = {} + for i in range(num_tags): + tag, type, count, value_or_offset = tag_format(self) + result[tag] = get_value(type, count, value_or_offset) + return result + + ICC_HEADER = create_reader('12s B B', lambda tuple: tuple) + + def _parse_icc_segment(self, header_length): + resume_position = self._file.tell() + header_length - 2 + identifier, part_number, num_parts = self.ICC_HEADER() + if identifier != b'ICC_PROFILE\0': + self._file.seek(resume_position) + return None + part_bytes = self._file.read(resume_position - self._file.tell()) + return part_number, num_parts, part_bytes + + ADOBE_DCT_HEADER = create_reader('5s H H H B', lambda tuple: tuple) + + def _parse_adobe_dct_segment(self, header_length): + assert header_length >= 14 + resume_position = self._file.tell() + header_length - 2 + identifier, version, flags1, flags2, color_transform = \ + self.ADOBE_DCT_HEADER() + if identifier != b'Adobe': + self._file.seek(resume_position) + return None + self._file.seek(resume_position) + return ADOBE_COLOR_TRANSFORM[color_transform] + + SOF_HEADER = create_reader('B H H B', lambda tuple: tuple) + + def _parse_start_of_frame(self, header_length): + resume_position = self._file.tell() + header_length - 2 + sample_precision, v_size, h_size, num_components = self.SOF_HEADER() + self._file.seek(resume_position) + return v_size, h_size, sample_precision, num_components + + +DPCM = 'dpcm' +DPI = 'dpi' + +JFIF_UNITS = {0: None, + 1: DPI, + 2: DPCM} + + +EXIF_ENDIAN = {0x4949: '<', + 0x4D4D: '>'} +EXIF_TAG_TYPE = {1: 'B', + 2: 's', + 3: 'H', + 4: 'I', + 5: 'II', + 7: 's', + 9: 'i', + 10: 'ii'} +EXIF_UNITS = {1: None, + 2: DPI, + 3: DPCM} +EXIF_COLOR_SPACES = {1: SRGB, + 0xFFFF: UNCALIBRATED} + +EXIF_X_RESOLUTION = 0x11A +EXIF_Y_RESOLUTION = 0x11B +EXIF_RESOLUTION_UNIT = 0x128 +EXIF_IFD_POINTER = 0x8769 + +EXIF_COLOR_SPACE = 0xA001 + + +UNKNOWN = 'RGB or CMYK' +YCC = 'YCbCr' +YCCK = 'YCCK' + +ADOBE_COLOR_TRANSFORM = {0: UNKNOWN, + 1: YCC, + 2: YCCK} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/png.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/png.py new file mode 100644 index 000000000..3adca84a9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/png.py @@ -0,0 +1,241 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +from io import BytesIO +from itertools import islice, chain +from pathlib import Path +from struct import Struct, pack + +from . import purepng + +from ..cos import Array, Integer, Stream, Name, Dictionary, Real +from ..filter import FlateDecode, FlateDecodeParams +from ....warnings import warn + +from . import (XObjectImage, DEVICE_GRAY, DEVICE_RGB, INDEXED, PERCEPTUAL, + ABSOLUTE_COLORIMETRIC, RELATIVE_COLORIMETRIC, SATURATION) +from .icc import get_icc_stream, SRGB + + +__all__ = ['PNGReader'] + + +class PNGReader(XObjectImage): + def __init__(self, file_or_filename): + png = purepng.Reader(str(file_or_filename) + if isinstance(file_or_filename, Path) + else file_or_filename) + try: + png.preamble() + except purepng.FormatError as format_error: + raise ValueError(*format_error.args) + color_params = FlateDecodeParams(predictor=10, colors=png.color_planes, + bits_per_component=png.bitdepth, + columns=png.width) + super().__init__(png.width, png.height, self._colorspace(png), + png.bitdepth, self._dpi(png), + filter=FlateDecode(color_params)) + if png.rendering_intent is not None: + self['Intent'] = RENDERING_INTENT[png.rendering_intent] + idat_decomp = png.idatdecomp() + if png.interlace == 1: + if isinstance(file_or_filename, Path): + warn(f"WARNING: Deinterlacing '{file_or_filename}' for " + "embedding into PDF; this can significantly slow down " + "rendering.") + iraw = bytearray(chain(*idat_decomp)) + raw = png.deinterlace(iraw) + bytes_per_row = png.width * png.planes + rows = (raw[i*bytes_per_row:(i+1)*bytes_per_row] + for i in range(png.height)) + writer = purepng.Writer(png.width, png.height, + alpha=png.alpha, bitdepth=png.bitdepth, + greyscale=png.greyscale, + palette=png.palette() if png.plte else None, + transparent=png.transparent, + compression=png.compression, + interlace=False) + idat_decomp = writer.idat(rows) + if png.alpha: # grayscale/RGB with alpha channel + smask_params = FlateDecodeParams(predictor=10, colors=1, + bits_per_component=png.bitdepth, + columns=png.width) + self['SMask'] = XObjectImage(png.width, png.height, DEVICE_GRAY, + png.bitdepth, + filter=FlateDecode(smask_params)) + for color_row, alpha_row in self._split_color_alpha(png, idat_decomp): + self.write(color_row, bypass_predictor=True) + self['SMask'].write(alpha_row, bypass_predictor=True) + else: + idat = (writer.comp_idat(idat_decomp) if png.interlace + else png.idat()) + for idat_chunk in idat: + self.write_raw(idat_chunk) + if png.trns: + if png.plte: # alpha values assigned to palette colors + # TODO: if only a single color has trn 0, go to else + self['SMask'] = XObjectImage(png.width, png.height, + DEVICE_GRAY, 8, + filter=FlateDecode()) + for alpha_row in self._plte_index_to_alpha(png): + self['SMask'].write(alpha_row) + else: # a single color is transparent + values = (value for value in png.transparent + for _ in range(2)) + self['Mask'] = Array(Integer(value) for value in values) + + def _dpi(self, png): + try: + (x_density, y_density), unit = png.resolution + if unit == 0: + return x_density / y_density # pixel aspect ratio + elif unit == 1: + return x_density / 100 * 2.54, y_density / 100 * 2.54 + except AttributeError: + return None + + def _colorspace(self, png): + device_color_space = COLOR_SPACE[png.color_type & 3] + icc_profile = self._icc_profile(png) + if icc_profile is None and png.rendering_intent is not None: + icc_profile = get_icc_stream(SRGB) + if icc_profile is not None: + icc_profile['N'] = Integer(3 if device_color_space == DEVICE_RGB + else 1) + icc_profile['Alternate'] = device_color_space + colorspace = Array([Name('ICCBased'), icc_profile]) + else: + def cal_chromaticity(cal_colorspace, white, red, green, blue): + xyz = chromaticity_to_XYZ(white, red, green, blue) + white_xyz, a_xyz, b_xyz, c_xyz = xyz + cal_colorspace['WhitePoint'] = Array([Real(value) for value + in white_xyz]) + if device_color_space == DEVICE_RGB: + cal_colorspace['Matrix'] = Array([Real(value) for x_y_z + in (a_xyz, b_xyz, c_xyz) + for value in x_y_z]) + + cal_colorspace = {} + if hasattr(png, 'gamma') and png.gamma != 0: + gamma = Real(1 / png.gamma) + cal_colorspace['Gamma'] = (Array([gamma] * 3) + if device_color_space == DEVICE_RGB + else gamma) + if hasattr(png, 'white_point'): + cal_chromaticity(cal_colorspace, png.white_point, + *png.rgb_points) + # TODO: assume sRGB if no color profile is set? + if cal_colorspace: + if 'WhitePoint' not in cal_colorspace: + # assume sRGB chromaticity + cal_chromaticity(cal_colorspace, *SRGB_CHROMATICITIES) + cal_type = (Name('CalGray') + if device_color_space == DEVICE_GRAY + else Name('CalRGB')) + colorspace = Array([cal_type, Dictionary(**cal_colorspace)]) + else: + colorspace = device_color_space + if png.colormap: # palette + num_entries = len(png.plte) // 3 + palette_stream = Stream(filter=FlateDecode()) + palette_stream.write(png.plte) + colorspace = Array([INDEXED, colorspace, + Integer(num_entries - 1), palette_stream]) + return colorspace + + def _icc_profile(self, png): + if hasattr(png, 'icc_profile'): + icc_profile = Stream(filter=FlateDecode()) + icc_profile_name, icc_profile_data = png.icc_profile + icc_profile.write(icc_profile_data) + return icc_profile + else: + return None + + def _split_color_alpha(self, png, idat_decomp): + bytedepth = png.bitdepth // 8 + num_color_bytes = png.color_planes * bytedepth + idat = BytesIO() + for idat_chunk in idat_decomp: + idat.write(idat_chunk) + row_num_bytes = 1 + (png.color_planes + 1) * bytedepth * png.width + pixel_color_fmt = '{}B{}x'.format(num_color_bytes, bytedepth) + pixel_alpha_fmt = '{}x{}B'.format(num_color_bytes, bytedepth) + row_color_struct = Struct('B' + pixel_color_fmt * png.width) + row_alpha_struct = Struct('B' + pixel_alpha_fmt * png.width) + idat.seek(0) + row_bytes = bytearray(row_num_bytes) + for i in range(png.height): + idat.readinto(row_bytes) + color_values = row_color_struct.unpack(row_bytes) + alpha_values = row_alpha_struct.unpack(row_bytes) + yield bytes(color_values), bytes(alpha_values) + assert idat.read() == b'' + + def _plte_index_to_alpha(self, png): + num_entries = len(png.plte) // 3 + frm = b''.join(pack('B', i) for i in range(num_entries)) + to = (b''.join(pack('B', alpha) for alpha in png.trns) + + b'\xFF' * (num_entries - len(png.trns))) + trans = bytearray.maketrans(frm, to) + rows = (self.read(png.row_bytes) for _ in range(png.height)) + if png.bitdepth < 8: + rows = to_8bit_per_pixel(rows, png.bitdepth, png.width) + for row_bytes in rows: + yield row_bytes.translate(trans) + assert self.read() == b'' + self.reset() + + +COLOR_SPACE = {0: DEVICE_GRAY, + 2: DEVICE_RGB, + 3: DEVICE_RGB} + +RENDERING_INTENT = {purepng.ABSOLUTE_COLORIMETRIC: ABSOLUTE_COLORIMETRIC, + purepng.RELATIVE_COLORIMETRIC: RELATIVE_COLORIMETRIC, + purepng.SATURATION: SATURATION, + purepng.PERCEPTUAL: PERCEPTUAL} + +# from ITU-R Recommendation BT.709-5 +SRGB_CHROMATICITIES = (0.3127, 0.329), (0.64, 0.33), (0.3, 0.6), (0.15, 0.06) + +def to_8bit_per_pixel(rows, bitdepth, width): + px_per_byte = 8 // bitdepth + mask = 2**bitdepth - 1 + shft = [(i - 1) * bitdepth for i in range(px_per_byte, 0, -1)] + + row_buffer = bytearray(width) + for row_bytes in rows: + row_buffer[:] = islice(((byte >> shift) & mask + for byte in row_bytes + for shift in shft), width) + yield row_buffer + + +def chromaticity_to_XYZ(white, red, green, blue): + """From the "CalRGB Color Spaces" section of "PDF Reference", 6th ed.""" + xW, yW = white + xR, yR = red + xG, yG = green + xB, yB = blue + R = G = B = 1.0 + + z = yW * ((xG - xB) * yR - (xR - xB) * yG + (xR - xG) * yB) + YA = yR / R * ((xG - xB) * yW - (xW - xB) * yG + (xW - xG) * yB) / z + XA = YA * xR / yR + ZA = YA * ((1 - xR) / yR - 1) + YB = - yG / G * ((xR - xB) * yW - (xW - xB) * yR + (xW - xR) * yB) / z + XB = YB * xG / yG + ZB = YB * ((1 - xG) / yG - 1) + YC = yB / B * ((xR - xG) * yW - (xW - xG) * yR + (xW - xR) * yG) / z + XC = YC * xB / yB + ZC = YC * ((1 - xB) / yB - 1) + XW = XA * R + XB * G + XC * B + YW = YA * R + YB * G + YC * B + ZW = ZA * R + ZB * G + ZC * B + + return (XW, YW, ZW), (XA, YA, ZA), (XB, YB, ZB), (XC, YC, ZC) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/purepng.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/purepng.py new file mode 100644 index 000000000..691f83856 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/backend/pdf/xobject/purepng.py @@ -0,0 +1,3060 @@ +#!/usr/bin/env python +# encoding=utf-8 +# +# png.py - PNG encoder/decoder in pure Python +# +# Copyright (C) 2015 Pavel Zlatovratskii <scondo@mail.ru> +# Copyright (C) 2006 Johann C. Rocholl <johann@browsershots.org> +# Portions Copyright (C) 2009 David Jones <drj@pobox.com> +# And probably portions Copyright (C) 2006 Nicko van Someren <nicko@nicko.org> +# +# Original concept by Johann C. Rocholl. +# +# LICENCE (MIT) +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +""" +Pure Python PNG Reader/Writer + +This Python module implements support for PNG images (see PNG +specification at http://www.w3.org/TR/2003/REC-PNG-20031110/ ). It reads +and writes PNG files with all allowable bit depths +(1/2/4/8/16/24/32/48/64 bits per pixel) and colour combinations: +greyscale (1/2/4/8/16 bit); RGB, RGBA, LA (greyscale with alpha) with +8/16 bits per channel; colour mapped images (1/2/4/8 bit). +Adam7 interlacing is supported for reading and +writing. A number of optional chunks can be specified (when writing) +and understood (when reading): ``tRNS``, ``bKGD``, ``gAMA``. + +For help, type ``import png; help(png)`` in your python interpreter. + +A good place to start is the :class:`Reader` and :class:`Writer` +classes. + +Requires Python 2.3. Best with Python 2.6 and higher. Installation is +trivial, but see the ``README.txt`` file (with the source distribution) +for details. + +A note on spelling and terminology +---------------------------------- + +Generally British English spelling is used in the documentation. So +that's "greyscale" and "colour". This not only matches the author's +native language, it's also used by the PNG specification. + +The major colour models supported by PNG (and hence by this module) are: +greyscale, RGB, greyscale--alpha, RGB--alpha. These are sometimes +referred to using the abbreviations: L, RGB, LA, RGBA. In this case +each letter abbreviates a single channel: *L* is for Luminance or Luma +or Lightness which is the channel used in greyscale images; *R*, *G*, +*B* stand for Red, Green, Blue, the components of a colour image; *A* +stands for Alpha, the opacity channel (used for transparency effects, +but higher values are more opaque, so it makes sense to call it +opacity). + +A note on formats +----------------- + +When getting pixel data out of this module (reading) and presenting +data to this module (writing) there are a number of ways the data could +be represented as a Python value. Generally this module uses one of +three formats called "flat row flat pixel", "boxed row flat pixel", and +"boxed row boxed pixel". Basically the concern is whether each pixel +and each row comes in its own little tuple (box), or not. + +Consider an image that is 3 pixels wide by 2 pixels high, and each pixel +has RGB components: + +Boxed row flat pixel:: + + iter([R,G,B, R,G,B, R,G,B], + [R,G,B, R,G,B, R,G,B]) + +Each row appears as its own sequence, but the pixels are flattened so +that three values for one pixel simply follow the three values for +the previous pixel. This is the most common format used, because it +provides a good compromise between space and convenience. +Row sequence supposed to be compatible with 'buffer' protocol in +addition to standard sequence methods so 'buffer()' can be used to +get fast per-byte access. +All rows are contained in iterable or iterable-compatible container. +(use 'iter()' to ensure) + +Flat row flat pixel:: + + [R,G,B, R,G,B, R,G,B, + R,G,B, R,G,B, R,G,B] + +The entire image is one single giant sequence of colour values. +Generally an array will be used (to save space), not a list. + +Boxed row boxed pixel:: + + list([ (R,G,B), (R,G,B), (R,G,B) ], + [ (R,G,B), (R,G,B), (R,G,B) ]) + +Each row appears in its own list, but each pixel also appears in its own +tuple. A serious memory burn in Python. + +In all cases the top row comes first, and for each row the pixels are +ordered from left-to-right. Within a pixel the values appear in the +order, R-G-B-A (or L-A for greyscale--alpha). + +There is a fourth format, mentioned because it is used internally, +is close to what lies inside a PNG file itself, and has some support +from the public API. This format is called packed. When packed, +each row is a sequence of bytes (integers from 0 to 255), just as +it is before PNG scanline filtering is applied. When the bit depth +is 8 this is essentially the same as boxed row flat pixel; when the +bit depth is less than 8, several pixels are packed into each byte; +when the bit depth is 16 (the only value more than 8 that is supported +by the PNG image format) each pixel value is decomposed into 2 bytes +(and `packed` is a misnomer). This format is used by the +:meth:`Writer.write_packed` method. It isn't usually a convenient +format, but may be just right if the source data for the PNG image +comes from something that uses a similar format (for example, 1-bit +BMPs, or another PNG file). + +And now, my famous members +-------------------------- +""" + +from array import array +import itertools +import logging +import math +# http://www.python.org/doc/2.4.4/lib/module-operator.html +import operator +import datetime +import time +import struct +import sys +import zlib +# http://www.python.org/doc/2.4.4/lib/module-warnings.html +import warnings + +try: + from functools import reduce +except ImportError: + # suppose to get there on python<2.7 where reduce is only built-in function + pass + +try: + from itertools import imap as map +except ImportError: + # On Python 3 there is no imap, but map works like imap instead + pass + +__version__ = "0.3.0" +__all__ = ['png_signature', 'Image', 'Reader', 'Writer', + 'Error', 'FormatError', 'ChunkError', + 'Filter', 'register_extra_filter', + 'write_chunks', 'from_array', 'parse_mode', 'MergedPlanes', + 'PERCEPTUAL', 'RELATIVE_COLORIMETRIC', 'SATURATION', + 'ABSOLUTE_COLORIMETRIC'] + + +# The PNG signature. +# http://www.w3.org/TR/PNG/#5PNG-file-signature +png_signature = struct.pack('8B', 137, 80, 78, 71, 13, 10, 26, 10) + +_adam7 = ((0, 0, 8, 8), + (4, 0, 8, 8), + (0, 4, 4, 8), + (2, 0, 4, 4), + (0, 2, 2, 4), + (1, 0, 2, 2), + (0, 1, 1, 2)) +# registered keywords +# http://www.w3.org/TR/2003/REC-PNG-20031110/#11keywords +_registered_kw = ('Title', 'Author', 'Description', 'Copyright', 'Software', + 'Disclaimer', 'Warning', 'Source', 'Comment', + 'Creation Time') + + +# rendering intent +PERCEPTUAL = 0 +RELATIVE_COLORIMETRIC = 1 +SATURATION = 2 +ABSOLUTE_COLORIMETRIC = 3 + + +def group(s, n): + """Repack iterator items into groups""" + # See http://www.python.org/doc/2.6/library/functions.html#zip + return list(zip(*[iter(s)] * n)) + + +def _rel_import(module, tgt): + """Using relative import in both Python 2 and Python 3""" + try: + exec("from ." + module + " import " + tgt, globals(), locals()) + except SyntaxError: + # On Python < 2.5 relative import cause syntax error + exec("from " + module + " import " + tgt, globals(), locals()) + except (ValueError, SystemError): + # relative import in non-package, try absolute + exec("from " + module + " import " + tgt, globals(), locals()) + return eval(tgt) + + +try: + next +except NameError: + def next(it): + """trivial `next` emulation""" + return it.next() +try: + bytes +except NameError: + bytes = str + + +# Define a bytearray_to_bytes() function. +# The definition of this function changes according to what +# version of Python we are on. +def bytearray_to_bytes(src): + """Default version""" + return bytes(src) + + +def newHarray(length=0): + """fast init by length""" + return array('H', [0]) * length + + +# bytearray is faster than array('B'), so we prefer to use it +# where available. +try: + # bytearray exists (>= Python 2.6). + newBarray = bytearray + copyBarray = bytearray +except NameError: + # bytearray does not exist. We're probably < Python 2.6 (the + # version in which bytearray appears). + def bytearray(src=tuple()): + """Bytearray-like array""" + return array('B', src) + + def newBarray(length=0): + """fast init by length""" + return array('B', [0]) * length + + if hasattr(array, '__copy__'): + # a bit faster if possible + copyBarray = array.__copy__ + else: + copyBarray = bytearray + + def bytearray_to_bytes(row): + """ + Convert bytearray to bytes. + + Recal that `row` will actually be an ``array``. + """ + return row.tostring() + +try: + from itertools import tee +except ImportError: + def tee(iterable, n=2): + """Return n independent iterators from a single iterable.""" + it = iter(iterable) + deques = [list() for _ in range(n)] + + def gen(mydeque): + while True: + if not mydeque: # when the local deque is empty + newval = next(it) # fetch a new value and + for d in deques: # load it to all the deques + d.append(newval) + yield mydeque.pop(0) + return tuple(map(gen, deques)) + + +# Python 3 workaround +try: + basestring +except NameError: + basestring = str + +# Conditionally convert to bytes. Works on Python 2 and Python 3. +try: + bytes('', 'ascii') + def strtobytes(x): return bytes(x, 'iso8859-1') # noqa + def bytestostr(x): return str(x, 'iso8859-1') # noqa +except (NameError, TypeError): + # We get NameError when bytes() does not exist (most Python + # 2.x versions), and TypeError when bytes() exists but is on + # Python 2.x (when it is an alias for str() and takes at most + # one argument). + strtobytes = str + bytestostr = str + +zerobyte = strtobytes(chr(0)) + +try: + set +except NameError: + from sets import Set as set + + +def peekiter(iterable): + """Return first row and also iterable with same items as original""" + it = iter(iterable) + one = next(it) + + def gen(): + """Generator that returns first and proxy other items from source""" + yield one + while True: + yield next(it) + return (one, gen()) + + +def check_palette(palette): + """ + Check a palette argument (to the :class:`Writer` class) for validity. + + Returns the palette as a list if okay; raises an exception otherwise. + """ + # None is the default and is allowed. + if palette is None: + return None + + p = list(palette) + if not (0 < len(p) <= 256): + raise ValueError("a palette must have between 1 and 256 entries") + seen_triple = False + for i,t in enumerate(p): + if len(t) not in (3,4): + raise ValueError( + "palette entry %d: entries must be 3- or 4-tuples." % i) + if len(t) == 3: + seen_triple = True + if seen_triple and len(t) == 4: + raise ValueError( + "palette entry %d: all 4-tuples must precede all 3-tuples" % i) + for x in t: + if int(x) != x or not(0 <= x <= 255): + raise ValueError( + "palette entry %d: values must be integer: 0 <= x <= 255" % i) + return p + + +def check_sizes(size, width, height): + """ + Check that these arguments, in supplied, are consistent. + + Return a (width, height) pair. + """ + if not size: + return width, height + + if len(size) != 2: + raise ValueError( + "size argument should be a pair (width, height)") + if width is not None and width != size[0]: + raise ValueError( + "size[0] (%r) and width (%r) should match when both are used." + % (size[0], width)) + if height is not None and height != size[1]: + raise ValueError( + "size[1] (%r) and height (%r) should match when both are used." + % (size[1], height)) + return size + + +def check_color(c, greyscale, which): + """ + Checks that a colour argument is the right form. + + Returns the colour + (which, if it's a bar integer, is "corrected" to a 1-tuple). + For transparent or background options. + """ + if c is None: + return c + if greyscale: + try: + len(c) + except TypeError: + c = (c,) + if len(c) != 1: + raise ValueError("%s for greyscale must be 1-tuple" % + which) + if not isinteger(c[0]): + raise ValueError( + "%s colour for greyscale must be integer" % which) + else: + if not (len(c) == 3 and + isinteger(c[0]) and + isinteger(c[1]) and + isinteger(c[2])): + raise ValueError( + "%s colour must be a triple of integers" % which) + return c + + +def check_time(value): + """Convert time from most popular representations to datetime""" + if value is None: + return None + if isinstance(value, (time.struct_time, tuple)): + return value + if isinstance(value, datetime.datetime): + return value.timetuple() + if isinstance(value, datetime.date): + res = datetime.datetime.utcnow() + res.replace(year=value.year, month=value.month, day=value.day) + return res.timetuple() + if isinstance(value, datetime.time): + return datetime.datetime.combine(datetime.date.today(), + value).timetuple() + if isinteger(value): + # Handle integer as timestamp + return time.gmtime(value) + if isinstance(value, basestring): + if value.lower() == 'now': + return time.gmtime() + # TODO: parsing some popular strings + raise ValueError("Unsupported time representation:" + repr(value)) + + +def popdict(src, keys): + """ + Extract all keys (with values) from `src` dictionary as new dictionary + + values are removed from source dictionary. + """ + new = {} + for key in keys: + if key in src: + new[key] = src.pop(key) + return new + + +def try_greyscale(pixels, alpha=False, dirty_alpha=True): + """ + Check if flatboxed RGB `pixels` could be converted to greyscale + + If could - return iterator with greyscale pixels, + otherwise return `False` constant + """ + planes = 3 + bool(alpha) + res = list() + apix = list() + for row in pixels: + green = row[1::planes] + if alpha: + apix.append(row[4:planes]) + if (green != row[0::planes] or green != row[2::planes]): + return False + else: + res.append(green) + if alpha: + return MergedPlanes(res, 1, apix, 1) + else: + return res + + +class Error(Exception): + + """Generic PurePNG error""" + + def __str__(self): + return self.__class__.__name__ + ': ' + ' '.join(self.args) + + +class FormatError(Error): + + """ + Problem with input file format. + + In other words, PNG file does + not conform to the specification in some way and is invalid. + """ + + +class ChunkError(FormatError): + + """Error in chunk handling""" + + +class BaseFilter(object): + + """ + Basic methods of filtering and other byte manipulations + + This part can be compile with Cython (see README.cython) + Private methods are declared as 'cdef' (unavailable from python) + for this compilation, so don't just rename it. + """ + + def __init__(self, bitdepth=8): + if bitdepth > 8: + self.fu = bitdepth // 8 + else: + self.fu = 1 + + def __undo_filter_sub(self, scanline): + """Undo sub filter.""" + ai = 0 + # Loops starts at index fu. + for i in range(self.fu, len(scanline)): + x = scanline[i] + a = scanline[ai] # result + scanline[i] = (x + a) & 0xff # result + ai += 1 + + def __do_filter_sub(self, scanline, result): + """Sub filter.""" + ai = 0 + for i in range(self.fu, len(result)): + x = scanline[i] + a = scanline[ai] + result[i] = (x - a) & 0xff + ai += 1 + + def __undo_filter_up(self, scanline): + """Undo up filter.""" + previous = self.prev + for i in range(len(scanline)): + x = scanline[i] + b = previous[i] + scanline[i] = (x + b) & 0xff # result + + def __do_filter_up(self, scanline, result): + """Up filter.""" + previous = self.prev + for i in range(len(result)): + x = scanline[i] + b = previous[i] + result[i] = (x - b) & 0xff + + def __undo_filter_average(self, scanline): + """Undo average filter.""" + ai = -self.fu + previous = self.prev + for i in range(len(scanline)): + x = scanline[i] + if ai < 0: + a = 0 + else: + a = scanline[ai] # result + b = previous[i] + scanline[i] = (x + ((a + b) >> 1)) & 0xff # result + ai += 1 + + def __do_filter_average(self, scanline, result): + """Average filter.""" + ai = -self.fu + previous = self.prev + for i in range(len(result)): + x = scanline[i] + if ai < 0: + a = 0 + else: + a = scanline[ai] + b = previous[i] + result[i] = (x - ((a + b) >> 1)) & 0xff + ai += 1 + + def __undo_filter_paeth(self, scanline): + """Undo Paeth filter.""" + ai = -self.fu + previous = self.prev + for i in range(len(scanline)): + x = scanline[i] + if ai < 0: + pr = previous[i] # a = c = 0 + else: + a = scanline[ai] # result + c = previous[ai] + b = previous[i] + pa = abs(b - c) # b + pb = abs(a - c) # 0 + pc = abs(a + b - c - c) # b + if pa <= pb and pa <= pc: # False + pr = a + elif pb <= pc: # True + pr = b + else: + pr = c + scanline[i] = (x + pr) & 0xff # result + ai += 1 + + def __do_filter_paeth(self, scanline, result): + """Paeth filter.""" + # http://www.w3.org/TR/PNG/#9Filter-type-4-Paeth + ai = -self.fu + previous = self.prev + for i in range(len(result)): + x = scanline[i] + if ai < 0: + pr = previous[i] # a = c = 0 + else: + a = scanline[ai] + c = previous[ai] + b = previous[i] + pa = abs(b - c) + pb = abs(a - c) + pc = abs(a + b - c - c) + if pa <= pb and pa <= pc: + pr = a + elif pb <= pc: + pr = b + else: + pr = c + result[i] = (x - pr) & 0xff + ai += 1 + + def undo_filter(self, filter_type, line): + """ + Undo the filter for a scanline. + + `scanline` is a sequence of bytes that does not include + the initial filter type byte. + + The scanline will have the effects of filtering removed. + Scanline modified inplace and also returned as result. + """ + assert 0 <= filter_type <= 4 + # For the first line of a pass, synthesize a dummy previous line. + if self.prev is None: + self.prev = newBarray(len(line)) + # Also it's possible to switch some filters to easier + if filter_type == 2: # "up" + filter_type = 0 + elif filter_type == 4: # "paeth" + filter_type = 1 + + # Call appropriate filter algorithm. + # 0 - do nothing + if filter_type == 1: + self.__undo_filter_sub(line) + elif filter_type == 2: + self.__undo_filter_up(line) + elif filter_type == 3: + self.__undo_filter_average(line) + elif filter_type == 4: + self.__undo_filter_paeth(line) + + # This will not work writing cython attributes from python + # Only 'cython from cython' or 'python from python' + self.prev[:] = line[:] + return line + + def _filter_scanline(self, filter_type, line, result): + """ + Apply a scanline filter to a scanline. + + `filter_type` specifies the filter type (0 to 4) + 'line` specifies the current (unfiltered) scanline as a sequence + of bytes; + """ + assert 0 <= filter_type < 5 + if self.prev is None: + # We're on the first line. Some of the filters can be reduced + # to simpler cases which makes handling the line "off the top" + # of the image simpler. "up" becomes "none"; "paeth" becomes + # "left" (non-trivial, but true). "average" needs to be handled + # specially. + if filter_type == 2: # "up" + filter_type = 0 + elif filter_type == 3: + self.prev = newBarray(len(line)) + elif filter_type == 4: # "paeth" + filter_type = 1 + + if filter_type == 1: + self.__do_filter_sub(line, result) + elif filter_type == 2: + self.__do_filter_up(line, result) + elif filter_type == 3: + self.__do_filter_average(line, result) + elif filter_type == 4: + self.__do_filter_paeth(line, result) + + # Todo: color conversion functions should be moved + # to a separate part in future + def convert_la_to_rgba(self, row, result): + """Convert a grayscale image with alpha to RGBA.""" + for i in range(len(row) // 3): + for j in range(3): + result[(4 * i) + j] = row[2 * i] + result[(4 * i) + 3] = row[(2 * i) + 1] + + def convert_l_to_rgba(self, row, result): + """ + Convert a grayscale image to RGBA. + + This method assumes the alpha channel in result is already + correctly initialized. + """ + for i in range(len(row) // 3): + for j in range(3): + result[(4 * i) + j] = row[i] + + def convert_rgb_to_rgba(self, row, result): + """ + Convert an RGB image to RGBA. + + This method assumes the alpha channel in result is already + correctly initialized. + """ + for i in range(len(row) // 3): + for j in range(3): + result[(4 * i) + j] = row[(3 * i) + j] + + +class Writer(object): + + """PNG encoder in pure Python.""" + + def __init__(self, width=None, height=None, + greyscale=False, + alpha=False, + bitdepth=8, + palette=None, + transparent=None, + background=None, + gamma=None, + compression=None, + interlace=False, + chunk_limit=2 ** 20, + icc_profile=None, + **kwargs + ): + """ + Create a PNG encoder object. + + Arguments: + + width, height + Image size in pixels, as two separate arguments. + greyscale + Input data is greyscale, not RGB. + alpha + Input data has alpha channel (RGBA or LA). + bitdepth + Bit depth: from 1 to 16. + palette + Create a palette for a colour mapped image (colour type 3). + transparent + Specify a transparent colour (create a ``tRNS`` chunk). + background + Specify a default background colour (create a ``bKGD`` chunk). + gamma + Specify a gamma value (create a ``gAMA`` chunk). + compression + zlib compression level: 0 (none) to 9 (more compressed); + default: -1 or None. + interlace + Create an interlaced image. + chunk_limit + Write multiple ``IDAT`` chunks to save memory. + icc_profile + tuple of (`name`, `databytes`) or just data bytes + to write ICC Profile + + Extra keywords: + text + see :meth:`set_text` + modification_time + see :meth:`set_modification_time` + resolution + see :meth:`set_resolution` + filter_type + Enable and specify PNG filter + see :meth:`set_filter_type` + + The image size (in pixels) can be specified either by using the + `width` and `height` arguments, or with the single `size` + argument. If `size` is used it should be a pair (*width*, + *height*). + + `greyscale` and `alpha` are booleans that specify whether + an image is greyscale (or colour), and whether it has an + alpha channel (or not). + + `bitdepth` specifies the bit depth of the source pixel values. + Each source pixel value must be an integer between 0 and + ``2**bitdepth-1``. For example, 8-bit images have values + between 0 and 255. PNG only stores images with bit depths of + 1,2,4,8, or 16. When `bitdepth` is not one of these values, + the next highest valid bit depth is selected, and an ``sBIT`` + (significant bits) chunk is generated that specifies the + original precision of the source image. In this case the + supplied pixel values will be rescaled to fit the range of + the selected bit depth. + + The details of which bit depth / colour model combinations the + PNG file format supports directly, are somewhat arcane + (refer to the PNG specification for full details). Briefly: + "small" bit depths (1,2,4) are only allowed with greyscale and + colour mapped images; colour mapped images cannot have bit depth + 16. + + For colour mapped images (in other words, when the `palette` + argument is specified) the `bitdepth` argument must match one of + the valid PNG bit depths: 1, 2, 4, or 8. (It is valid to have a + PNG image with a palette and an ``sBIT`` chunk, but the meaning + is slightly different; it would be awkward to press the + `bitdepth` argument into service for this.) + + The `palette` option, when specified, causes a colour mapped image + to be created: the PNG colour type is set to 3; `greyscale` must not + be set; `alpha` must not be set; `transparent` must not be set; + the bit depth must be 1, 2, 4, or 8. + When a colour mapped image is created, the pixel values + are palette indexes and the `bitdepth` argument specifies the size + of these indexes (not the size of the colour values in the palette). + + The palette argument value should be a sequence of 3- or + 4-tuples. 3-tuples specify RGB palette entries; 4-tuples + specify RGBA palette entries. If both 4-tuples and 3-tuples + appear in the sequence then all the 4-tuples must come + before all the 3-tuples. A ``PLTE`` chunk is created; if there + are 4-tuples then a ``tRNS`` chunk is created as well. The + ``PLTE`` chunk will contain all the RGB triples in the same + sequence; the ``tRNS`` chunk will contain the alpha channel for + all the 4-tuples, in the same sequence. Palette entries + are always 8-bit. + + If specified, the `transparent` and `background` parameters must + be a tuple with three integer values for red, green, blue, or + a simple integer (or singleton tuple) for a greyscale image. + + If specified, the `gamma` parameter must be a positive number + (generally, a `float`). A ``gAMA`` chunk will be created. + Note that this will not change the values of the pixels as + they appear in the PNG file, they are assumed to have already + been converted appropriately for the gamma specified. + + The `compression` argument specifies the compression level to + be used by the ``zlib`` module. Values from 1 to 9 specify + compression, with 9 being "more compressed" (usually smaller + and slower, but it doesn't always work out that way). 0 means + no compression. -1 and ``None`` both mean that the default + level of compression will be picked by the ``zlib`` module + (which is generally acceptable). + + If `interlace` is true then an interlaced image is created + (using PNG's so far only interface method, *Adam7*). This does + not affect how the pixels should be presented to the encoder, + rather it changes how they are arranged into the PNG file. + On slow connexions interlaced images can be partially decoded + by the browser to give a rough view of the image that is + successively refined as more image data appears. + + .. note :: + + Enabling the `interlace` option requires the entire image + to be processed in working memory. + + `chunk_limit` is used to limit the amount of memory used whilst + compressing the image. In order to avoid using large amounts of + memory, multiple ``IDAT`` chunks may be created. + """ + width, height = check_sizes(kwargs.pop('size', None), + width, height) + + if width <= 0 or height <= 0: + raise ValueError("width and height must be greater than zero") + if not isinteger(width) or not isinteger(height): + raise ValueError("width and height must be integers") + # http://www.w3.org/TR/PNG/#7Integers-and-byte-order + if width > 2**32-1 or height > 2**32-1: + raise ValueError("width and height cannot exceed 2**32-1") + + if alpha and transparent is not None: + raise ValueError( + "transparent colour not allowed with alpha channel") + + if 'bytes_per_sample' in kwargs and not bitdepth: + warnings.warn('please use bitdepth instead of bytes_per_sample', + DeprecationWarning) + if kwargs['bytes_per_sample'] not in (0.125, 0.25, 0.5, 1, 2): + raise ValueError( + "bytes per sample must be .125, .25, .5, 1, or 2") + bitdepth = int(8 * kwargs.pop('bytes_per_sample')) + + if 'resolution' not in kwargs and 'physical' in kwargs: + kwargs['resolution'] = kwargs.pop('physical') + warnings.warn('please use resolution instead of physilcal', + DeprecationWarning) + + if not isinteger(bitdepth) or bitdepth < 1 or 16 < bitdepth: + raise ValueError("bitdepth (%r) must be a postive integer <= 16" % + bitdepth) + + self.pixbitdepth = bitdepth + self.palette = check_palette(palette) + if self.palette: + if bitdepth not in (1, 2, 4, 8): + raise ValueError("with palette bitdepth must be 1, 2, 4, or 8") + if transparent is not None: + raise ValueError("transparent and palette not compatible") + if alpha: + raise ValueError("alpha and palette not compatible") + if greyscale: + if greyscale == 'try': + greyscale = False + raise ValueError("greyscale and palette not compatible") + + self.transparent = check_color(transparent, greyscale, 'transparent') + self.background = check_color(background, greyscale, 'background') + # At the moment the `planes` argument is ignored; + # its purpose is to act as a dummy so that + # ``Writer(x, y, **info)`` works, where `info` is a dictionary + # returned by Reader.read and friends. + # Ditto for `colormap` and `maxval`. + popdict(kwargs, ('planes', 'colormap', 'maxval')) + + for ex_kw in ('filter_type', 'text', 'resolution', 'modification_time', + 'rendering_intent', 'white_point', 'rgb_points'): + getattr(self, 'set_' + ex_kw)(kwargs.pop(ex_kw, None)) + # Keyword text support + kw_text = popdict(kwargs, _registered_kw) + if kw_text: + kw_text.update(self.text) + self.set_text(kw_text) + + if kwargs: + warnings.warn("Unknown writer args: " + str(kwargs)) + + # It's important that the true boolean values (greyscale, alpha, + # colormap, interlace) are converted to bool because Iverson's + # convention is relied upon later on. + self.width = width + self.height = height + self.gamma = gamma + if icc_profile: + if 'icc_profile_name' in kwargs: + warnings.warn("Use tuple (`name`, `data`) to provide" + " ICC Profile name", DeprecationWarning) + self.set_icc_profile(icc_profile, kwargs['icc_profile_name']) + else: + self.set_icc_profile(icc_profile) + else: + self.icc_profile = None + + if greyscale == 'try': + self.greyscale = 'try' + else: + self.greyscale = bool(greyscale) + + self.alpha = bool(alpha) + self.bitdepth = int(bitdepth) + self.compression = compression + self.chunk_limit = chunk_limit + self.interlace = bool(interlace) + + if bool(self.palette) and (self.greyscale or self.alpha): + raise FormatError("Paletted image could not be grayscale or" + " contain alpha plane") + + self.planes = (3, 1)[(self.greyscale and self.greyscale != 'try') or + bool(self.palette)] + self.alpha + + def set_icc_profile(self, profile=None, name='ICC Profile'): + """ + Add ICC Profile. + + Prefered way is tuple (`profile_name`, `profile_bytes`), but only + bytes with name as separate argument is also supported. + """ + if isinstance(profile, (basestring, bytes)): + icc_profile = [name, profile] + # TODO: more check + else: + icc_profile = profile + + if not icc_profile[0]: + raise Error("ICC profile should have a name") + elif not isinstance(icc_profile[0], bytes): + icc_profile[0] = strtobytes(icc_profile[0]) + self.icc_profile = icc_profile + + def set_text(self, text=None, **kwargs): + """ + Add textual information passed as dictionary. + + All pairs in dictionary will be written, but keys should be latin-1; + registered keywords could be used as arguments. + + When called more than once overwrite exist data. + """ + if text is None: + text = {} + text.update(popdict(kwargs, _registered_kw)) + if 'Creation Time' in text and\ + not isinstance(text['Creation Time'], (basestring, bytes)): + text['Creation Time'] = datetime.datetime( + *(check_time(text['Creation Time'])[:6])).isoformat() + self.text = text + + def set_filter_type(self, filter_type=None): + """ + Set(modify) filtering mode for better compression + + `filter_type` is number or name of filter type for better compression + see http://www.w3.org/TR/PNG/#9Filter-types for details + It's also possible to use adaptive strategy for choosing filter type + per row. Predefined strategies are `sum` and `entropy`. + Custom strategies can be added with :meth:`register_extra_filter` or + be callable passed with this argument. + (see more at :meth:`register_extra_filter`) + """ + if filter_type is None: + filter_type = 0 + elif isinstance(filter_type, basestring): + str_ftype = str(filter_type).lower() + filter_names = {'none': 0, + 'sub': 1, + 'up': 2, + 'average': 3, + 'paeth': 4} + if str_ftype in filter_names: + filter_type = filter_names[str_ftype] + self.filter_type = filter_type + + def set_modification_time(self, modification_time=True): + """ + Add time to be written as last modification time + + When called after initialisation configure to use + time of writing file + """ + if (isinstance(modification_time, basestring) and + modification_time.lower() == 'write') or\ + modification_time is True: + self.modification_time = True + else: + self.modification_time = check_time(modification_time) + + def set_resolution(self, resolution=None): + """ + Add physical pixel dimensions + + `resolution` supposed two be tuple of two parameterts: pixels per unit + and unit type; unit type may be omitted + pixels per unit could be simple integer or tuple of (ppu_x, ppu_y) + Also possible to use all three parameters im row + + * resolution = ((1, 4), ) # wide pixels (4:1) without unit specifier + * resolution = (300, 'inch') # 300dpi in both dimensions + * resolution = (4, 1, 0) # tall pixels (1:4) without unit specifier + """ + if resolution is None: + self.resolution = None + return + # All in row + if len(resolution) == 3: + resolution = ((resolution[0], resolution[1]), resolution[2]) + # Ensure length and convert all false to 0 (no unit) + if len(resolution) == 1 or not resolution[1]: + resolution = (resolution[0], 0) + # Single dimension + if isinstance(resolution[0], float) or isinteger(resolution[0]): + resolution = ((resolution[0], resolution[0]), resolution[1]) + # Unit conversion + if resolution[1] in (1, 'm', 'meter'): + resolution = (resolution[0], 1) + elif resolution[1] in ('i', 'in', 'inch'): + resolution = ((int(resolution[0][0] / 0.0254 + 0.5), + int(resolution[0][1] / 0.0254 + 0.5)), 1) + elif resolution[1] in ('cm', 'centimeter'): + resolution = ((resolution[0][0] * 100, + resolution[0][1] * 100), 1) + self.resolution = resolution + + def set_rendering_intent(self, rendering_intent): + """Set rendering intent variant for sRGB chunk""" + if rendering_intent not in (None, + PERCEPTUAL, + RELATIVE_COLORIMETRIC, + SATURATION, + ABSOLUTE_COLORIMETRIC): + raise FormatError('Unknown redering intent') + self.rendering_intent = rendering_intent + + def set_white_point(self, white_point, point2=None): + """Set white point part of cHRM chunk""" + if isinstance(white_point, float) and isinstance(point2, float): + white_point = (white_point, point2) + self.white_point = white_point + + def set_rgb_points(self, rgb_points, *args): + """Set rgb points part of cHRM chunk""" + if not args: + self.rgb_points = rgb_points + # separate tuples + elif len(args) == 2: + self.rgb_points = (rgb_points, args[0], args[1]) + # separate numbers + elif len(args) == 5: + self.rgb_points = ((rgb_points, args[0]), + (args[1], args[2]), + (args[3], args[4])) + + def __write_palette(self, outfile): + """ + Write``PLTE`` and if necessary a ``tRNS`` chunk to. + + This method should be called only from ``write_idat`` method + or chunk order will be ruined. + """ + # We must have true bitdepth within palette to use sBIT with palette + # if self.pixbitdepth != 8: + # write_chunk(outfile, 'sBIT', + # bytearray_to_bytes(bytearray((self.pixbitdepth,) * 3))) + p = bytearray() + t = bytearray() + + for x in self.palette: + p.extend(x[0:3]) + if len(x) > 3: + t.append(x[3]) + + write_chunk(outfile, 'PLTE', bytearray_to_bytes(p)) + if t: + # tRNS chunk is optional. Only needed if palette entries + # have alpha. + write_chunk(outfile, 'tRNS', bytearray_to_bytes(t)) + + def __write_srgb(self, outfile): + """ + Write colour reference information: gamma, iccp etc. + + This method should be called only from ``write_idat`` method + or chunk order will be ruined. + """ + if self.rendering_intent is not None and self.icc_profile is not None: + raise FormatError("sRGB(via rendering_intent) and iCCP could not" + "be present simultaneously") + # http://www.w3.org/TR/PNG/#11sRGB + if self.rendering_intent is not None: + write_chunk(outfile, 'sRGB', + struct.pack("B", int(self.rendering_intent))) + # http://www.w3.org/TR/PNG/#11cHRM + if (self.white_point is not None and self.rgb_points is None) or\ + (self.white_point is None and self.rgb_points is not None): + logging.warn("White and RGB points should be both specified to" + " write cHRM chunk") + self.white_point = None + self.rgb_points = None + if (self.white_point is not None and self.rgb_points is not None): + data = (self.white_point[0], self.white_point[1], + self.rgb_points[0][0], self.rgb_points[0][1], + self.rgb_points[1][0], self.rgb_points[1][1], + self.rgb_points[2][0], self.rgb_points[2][1], + ) + write_chunk(outfile, 'cHRM', + struct.pack("!8L", + *[int(round(it * 1e5)) for it in data])) + # http://www.w3.org/TR/PNG/#11gAMA + if self.gamma is not None: + write_chunk(outfile, 'gAMA', + struct.pack("!L", int(round(self.gamma * 1e5)))) + # http://www.w3.org/TR/PNG/#11iCCP + if self.icc_profile is not None: + if self.compression is None or self.compression == -1: + comp_level = 6 # zlib.Z_DEFAULT_COMPRESSION + else: + comp_level = self.compression + write_chunk(outfile, 'iCCP', + self.icc_profile[0] + zerobyte + + zerobyte + + zlib.compress(self.icc_profile[1], comp_level)) + + def __write_text(self, outfile): + """ + Write text information into file + + This method should be called only from ``write_idat`` method + or chunk order will be ruined. + """ + for k, v in self.text.items(): + if not isinstance(v, bytes): + try: + international = False + v = v.encode('latin-1') + except UnicodeEncodeError: + international = True + v = v.encode('utf-8') + else: + international = False + if not isinstance(k, bytes): + k = strtobytes(k) + if international: + # No compress, language tag or translated keyword for now + write_chunk(outfile, 'iTXt', k + zerobyte + + zerobyte + zerobyte + + zerobyte + zerobyte + v) + else: + write_chunk(outfile, 'tEXt', k + zerobyte + v) + + def write(self, outfile, rows): + """ + Write a PNG image to the output file. + + `rows` should be an iterable that yields each row in boxed row + flat pixel format. The rows should be the rows of the original + image, so there should be ``self.height`` rows of ``self.width * + self.planes`` values. If `interlace` is specified (when + creating the instance), then an interlaced PNG file will + be written. Supply the rows in the normal image order; + the interlacing is carried out internally. + + .. note :: + + Interlacing will require the entire image to be in working + memory. + """ + if self.interlace: + fmt = 'BH'[self.bitdepth > 8] + a = array(fmt, itertools.chain(*rows)) + return self.write_array(outfile, a) + else: + nrows = self.write_passes(outfile, rows) + if nrows != self.height: + raise ValueError( + "rows supplied (%d) does not match height (%d)" % + (nrows, self.height)) + + def write_passes(self, outfile, rows, packed=False): + """ + Write a PNG image to the output file. + + Most users are expected to find the :meth:`write` or + :meth:`write_array` method more convenient. + + The rows should be given to this method in the order that + they appear in the output file. For straightlaced images, + this is the usual top to bottom ordering, but for interlaced + images the rows should have already been interlaced before + passing them to this function. + + `rows` should be an iterable that yields each row. When + `packed` is ``False`` the rows should be in boxed row flat pixel + format; when `packed` is ``True`` each row should be a packed + sequence of bytes. + """ + # Try to optimize + if not packed: + if self.greyscale == 'try': + rows1, rows2 = tee(rows) + greyrows = try_greyscale(rows1, self.alpha) + if greyrows is not False: + rows = greyrows + self.greyscale = True + self.planes -= 2 + else: + self.greyscale = False + rows = rows2 + + if not self.palette: + # No palette, check for rescale + targetbitdepth = None + srcbitdepth = self.bitdepth + if self.alpha or not self.greyscale: + if self.bitdepth not in (8, 16): + targetbitdepth = (8, 16)[self.bitdepth > 8] + else: + assert self.greyscale + assert not self.alpha + if self.bitdepth not in (1, 2, 4, 8, 16): + if self.bitdepth > 8: + targetbitdepth = 16 + elif self.bitdepth == 3: + targetbitdepth = 4 + else: + assert self.bitdepth in (5, 6, 7) + targetbitdepth = 8 + + if targetbitdepth: + if packed: + raise Error("writing packed pixels not suitable for" + " bit depth %d" % self.bitdepth) + self.bitdepth = targetbitdepth + factor = \ + float(2**targetbitdepth - 1) / float(2**srcbitdepth - 1) + + def scalerow(inrows): + """Rescale all pixels""" + for row in inrows: + yield [int(round(factor * x)) for x in row] + + rows = scalerow(rows) + + self.write_idat(outfile, self.comp_idat(self.idat(rows, packed))) + return self.irows + + def write_idat(self, outfile, idat_sequence): + """ + Write png with IDAT to file + + `idat_sequence` should be iterable that produce IDAT chunks + compatible with `Writer` configuration. + """ + # http://www.w3.org/TR/PNG/#5PNG-file-signature + outfile.write(png_signature) + color_type = 4 * self.alpha + 2 * (not self.greyscale) +\ + bool(self.palette) + + # http://www.w3.org/TR/PNG/#11IHDR + write_chunk(outfile, 'IHDR', + struct.pack("!2I5B", self.width, self.height, + self.bitdepth, color_type, + 0, 0, self.interlace)) + # See :chunk:order + self.__write_srgb(outfile) + # See :chunk:order + # http://www.w3.org/TR/PNG/#11sBIT + if not self.palette and self.pixbitdepth != self.bitdepth: + # Write sBIT of palette within __write_palette + # TODO: support different bitdepth per plane + write_chunk(outfile, 'sBIT', + struct.pack('%dB' % self.planes, + *[self.pixbitdepth] * self.planes)) + # :chunk:order: Without a palette (PLTE chunk), ordering is + # relatively relaxed. With one, gamma info must precede PLTE + # chunk which must precede tRNS and bKGD. + # See http://www.w3.org/TR/PNG/#5ChunkOrdering + if self.palette: + self.__write_palette(outfile) + + # http://www.w3.org/TR/PNG/#11tRNS + if self.transparent is not None: + if self.greyscale: + write_chunk(outfile, 'tRNS', + struct.pack("!1H", *self.transparent)) + else: + write_chunk(outfile, 'tRNS', + struct.pack("!3H", *self.transparent)) + + # http://www.w3.org/TR/PNG/#11bKGD + if self.background is not None: + if self.greyscale: + write_chunk(outfile, 'bKGD', + struct.pack("!1H", *self.background)) + else: + write_chunk(outfile, 'bKGD', + struct.pack("!3H", *self.background)) + # http://www.w3.org/TR/PNG/#11pHYs + if self.resolution is not None: + write_chunk(outfile, 'pHYs', + struct.pack("!IIB", + self.resolution[0][0], + self.resolution[0][1], + self.resolution[1])) + # http://www.w3.org/TR/PNG/#11tIME + if self.modification_time is not None: + if self.modification_time is True: + self.modification_time = check_time('now') + write_chunk(outfile, 'tIME', + struct.pack("!H5B", *(self.modification_time[:6]))) + # http://www.w3.org/TR/PNG/#11textinfo + if self.text: + self.__write_text(outfile) + for idat in idat_sequence: + write_chunk(outfile, 'IDAT', idat) + # http://www.w3.org/TR/PNG/#11IEND + write_chunk(outfile, 'IEND') + + def comp_idat(self, idat): + """Generator that produce compressed IDAT chunks from IDAT data""" + # http://www.w3.org/TR/PNG/#11IDAT + if self.compression is not None: + compressor = zlib.compressobj(self.compression) + else: + compressor = zlib.compressobj() + for dat in idat: + compressed = compressor.compress(dat) + if len(compressed): + yield compressed + flushed = compressor.flush() + if len(flushed): + yield flushed + + def idat(self, rows, packed=False): + """Generator that produce uncompressed IDAT data from rows""" + # http://www.w3.org/TR/PNG/#11IDAT + filt = Filter(self.bitdepth * self.planes, + self.interlace, self.height) + data = bytearray() + + def byteextend(rowbytes): + """Default extending data with bytes. Applying filter""" + data.extend(filt.do_filter(self.filter_type, rowbytes)) + + # Choose an extend function based on the bitdepth. The extend + # function packs/decomposes the pixel values into bytes and + # stuffs them onto the data array. + if self.bitdepth == 8 or packed: + extend = byteextend + elif self.bitdepth == 16: + def extend(sl): + """Decompose into bytes before byteextend""" + fmt = '!%dH' % len(sl) + byteextend(bytearray(struct.pack(fmt, *sl))) + else: + # Pack into bytes + assert self.bitdepth < 8 + # samples per byte + spb = 8 // self.bitdepth + + def extend(sl): + """Pack into bytes before byteextend""" + a = bytearray(sl) + # Adding padding bytes so we can group into a whole + # number of spb-tuples. + l = float(len(a)) + extra = math.ceil(l / float(spb)) * spb - l + a.extend([0] * int(extra)) + # Pack into bytes + l = group(a, spb) + l = [reduce(lambda x, y: (x << self.bitdepth) + y, e) + for e in l] + byteextend(l) + + # Build the first row, testing mostly to see if we need to + # changed the extend function to cope with NumPy integer types + # (they cause our ordinary definition of extend to fail, so we + # wrap it). See + # http://code.google.com/p/pypng/issues/detail?id=44 + enumrows = enumerate(rows) + del rows + + # :todo: Certain exceptions in the call to ``.next()`` or the + # following try would indicate no row data supplied. + # Should catch. + i, row = next(enumrows) + try: + # If this fails... + extend(row) + except: + # ... try a version that converts the values to int first. + # Not only does this work for the (slightly broken) NumPy + # types, there are probably lots of other, unknown, "nearly" + # int types it works for. + def wrapmapint(f): + return lambda sl: f([int(x) for x in sl]) + extend = wrapmapint(extend) + del wrapmapint + extend(row) + + for i, row in enumrows: + extend(row) + if len(data) > self.chunk_limit: + yield bytearray_to_bytes(data) + # Because of our very witty definition of ``extend``, + # above, we must re-use the same ``data`` object. Hence + # we use ``del`` to empty this one, rather than create a + # fresh one (which would be my natural FP instinct). + del data[:] + if len(data): + yield bytearray_to_bytes(data) + self.irows = i + 1 + + def write_array(self, outfile, pixels): + """ + Write an array in flat row flat pixel format as a PNG file on + the output file. See also :meth:`write` method. + """ + + if self.interlace: + self.write_passes(outfile, self.array_scanlines_interlace(pixels)) + else: + self.write_passes(outfile, self.array_scanlines(pixels)) + + def write_packed(self, outfile, rows): + """ + Write PNG file to `outfile`. + + The pixel data comes from `rows` which should be in boxed row + packed format. Each row should be a sequence of packed bytes. + + Technically, this method does work for interlaced images but it + is best avoided. For interlaced images, the rows should be + presented in the order that they appear in the file. + + This method should not be used when the source image bit depth + is not one naturally supported by PNG; the bit depth should be + 1, 2, 4, 8, or 16. + """ + return self.write_passes(outfile, rows, packed=True) + + def array_scanlines(self, pixels): + """Generates boxed rows (flat pixels) from flat rows in an array.""" + # Values per row + vpr = self.width * self.planes + stop = 0 + for y in range(self.height): + start = stop + stop = start + vpr + yield pixels[start:stop] + + def array_scanlines_interlace(self, pixels): + """ + Generator for interlaced scanlines from an array. + + `pixels` is the full source image in flat row flat pixel format. + The generator yields each scanline of the reduced passes in turn, in + boxed row flat pixel format. + """ + # http://www.w3.org/TR/PNG/#8InterlaceMethods + # Array type. + fmt = 'BH'[self.bitdepth > 8] + # Value per row + vpr = self.width * self.planes + for xstart, ystart, xstep, ystep in _adam7: + if xstart >= self.width: + continue + # Pixels per row (of reduced image) + ppr = int(math.ceil((self.width-xstart)/float(xstep))) + # number of values in reduced image row. + row_len = ppr*self.planes + for y in range(ystart, self.height, ystep): + end_offset = (y + 1) * vpr + if xstep == 1: + # Last pass (0, 1, 1, 2)) + offset = y * vpr + yield pixels[offset:end_offset] + else: + row = array(fmt) + # There's no easier way to set the length of an array + row.extend(pixels[0:row_len]) + offset = y * vpr + xstart * self.planes + for i in range(self.planes): + row[i::self.planes] = \ + pixels[offset + i:end_offset:self.planes * xstep] + yield row + + +def write_chunk(outfile, tag, data=bytes()): + """Write a PNG chunk to the output file, including length and checksum.""" + # http://www.w3.org/TR/PNG/#5Chunk-layout + outfile.write(struct.pack("!I", len(data))) + tag = strtobytes(tag) + outfile.write(tag) + outfile.write(data) + checksum = zlib.crc32(tag) + checksum = zlib.crc32(data, checksum) + checksum &= 0xFFFFFFFF + outfile.write(struct.pack("!I", checksum)) + + +def write_chunks(out, chunks): + """Create a PNG file by writing out the chunks.""" + out.write(png_signature) + for chunk in chunks: + write_chunk(out, *chunk) + + +class MergedPlanes(object): + + """Merge two flatboxed iterator as new iterator""" + + def __init__(self, seq_left, nplanes_left, seq_right, nplanes_right, + bitdepth=None, width=None): + """ + Initialise merge iterator with sources + + Each row of this iterator is array of pixels consisting + of the `nplanes_left` elements of data from row of `seq_left' + iterator followed by the `nplanes_right` elements of data + from row of `seq_right` iterator. + + `seq_right` also may be integer instead of iterator this represent + filling pixels with this value + """ + self.seq_left = seq_left + self.nplanes_left = nplanes_left + if isinstance(seq_right, int): + self.seq_right = self.rigthgen(seq_right) + else: + self.seq_right = seq_right + self.nplanes_right = nplanes_right + self.nplanes_res = nplanes_left + nplanes_right + self.bitdepth = bitdepth + self.width = width + + def newarray(self, length, value=0): + """Initialise empty row""" + if self.bitdepth > 8: + return array('H', [value] * length) + else: + return bytearray([value] * length) + + def rigthgen(self, value=0): + """Generate rows to fill right pixels in int mode""" + while True: + yield self.newarray(self.nplanes_right * self.width, value) + + def next(self): + """Generate merged row, consuming rows of original iterstors""" + left = next(self.seq_left) + if self.width is None: + self.width = len(left) / self.nplanes_left + if self.bitdepth is None: + # Detect bitdepth + if hasattr(left, 'itemsize'): # array + self.bitdepth = left.itemsize * 8 + elif isinstance(left, (bytes, bytearray)): # bytearray + self.bitdepth = 8 + else: + raise Error("Unknown bitdepth for merging planes") + right = next(self.seq_right) + rowlength = self.nplanes_res * self.width + new = self.newarray(rowlength) + if type(left) == type(right) == type(new): + # slice assignment + for i in range(self.nplanes_left): + new[i::self.nplanes_res] = left[i::self.nplanes_left] + for i in range(self.nplanes_right): + i_ = i + self.nplanes_left + new[i_::self.nplanes_res] = right[i::self.nplanes_right] + else: + for i in range(self.nplanes_left): + for j in range(self.width): + new[(i * self.nplanes_res) + j] =\ + left[(i * self.nplanes_left) + j] + for i in range(self.nplanes_right): + i_ = i + self.nplanes_left + for j in range(self.width): + new[(i_ * self.nplanes_res) + j] =\ + right[(i * self.nplanes_right) + j] + return new + + def __next__(self): + """Iterator protocol""" + return self.next() + + def __iter__(self): + """Iterator protocol""" + return self + + +def interleave_planes(ipixels, apixels, ipsize, apsize): + """ + Interleave (colour) planes, e.g. RGB + A = RGBA. + + Return an array of pixels consisting of the `ipsize` elements of + data from each pixel in `ipixels` followed by the `apsize` elements + of data from each pixel in `apixels`. Conventionally `ipixels` + and `apixels` are byte arrays so the sizes are bytes, but it + actually works with any arrays of the same type. The returned + array is the same type as the input arrays which should be the + same type as each other. + """ + warnings.warn('please use `Merge Planes` class instead', + DeprecationWarning) + newi = MergedPlanes([ipixels], ipsize, [apixels], apsize) + return next(newi) + + +class Filter(BaseFilter): + def __init__(self, bitdepth=8, interlace=None, rows=None, prev=None): + BaseFilter.__init__(self, bitdepth) + if prev is None: + self.prev = None + else: + self.prev = bytearray(prev) + self.interlace = interlace + self.restarts = [] + if self.interlace: + for _, off, _, step in _adam7: + self.restarts.append((rows - off - 1 + step) // step) + + def filter_all(self, line): + """Doing all filters for specified line + + return filtered lines as list + For using with adaptive filters + """ + lines = [None] * 5 + for filter_type in range(5): # range save more than 'optimised' order + res = copyBarray(line) + self._filter_scanline(filter_type, line, res) + res.insert(0, filter_type) + lines[filter_type] = res + return lines + + adapt_methods = {} + + def adaptive_filter(self, strategy, line): + """ + Applying non-standart filters (e.g. adaptive selection) + + `strategy` may be one of following types: + + - string - find and use strategy with this name + - dict - find and use strategy by field 'name' of this dict + and use it with this dict as configuration + - callable - use this callable as strategy with empty dict as cfg + check :meth:`register_extra_filter` for documentation) + + `line` specifies the current (unfiltered) scanline as a sequence + of bytes; + """ + if isinstance(strategy, (basestring, bytes)): + strategy = {'name': str(strategy)} + if isinstance(strategy, dict): + cfg = strategy + strategy = Filter.adapt_methods.get(cfg['name']) + else: + cfg = {} + if strategy is None: + raise Error("Adaptive strategy not found") + else: + return strategy(line, cfg, self) + + def do_filter(self, filter_type, line): + """ + Applying filter, caring about prev line, interlacing etc. + + `filter_type` may be integer to apply basic filter or + adaptive strategy with dict + (`name` is reqired field, others may tune strategy) + """ + # Recall that filtering algorithms are applied to bytes, + # not to pixels, regardless of the bit depth or colour type + # of the image. + + line = bytearray(line) + if isinstance(filter_type, int): + res = bytearray(line) + self._filter_scanline(filter_type, line, res) + res.insert(0, filter_type) # Add filter type as the first byte + else: + res = self.adaptive_filter(filter_type, line) + self.prev = line + if self.restarts: + self.restarts[0] -= 1 + if self.restarts[0] == 0: + del self.restarts[0] + self.prev = None + return res + + +def register_extra_filter(selector, name): + """ + Register adaptive filter selection strategy for futher usage. + + `selector` - callable like ``def(line, cfg, filter_obj)`` + + - line - line for filtering + - cfg - dict with optional tuning + - filter_obj - instance of this class to get context or apply base filters + + callable should return chosen line + + `name` - name which may be used later to recall this strategy + """ + Filter.adapt_methods[str(name)] = selector + + +# Two basic adaptive strategies +def adapt_sum(line, cfg, filter_obj): + """Determine best filter by sum of all row values""" + lines = filter_obj.filter_all(line) + res_s = [sum(it) for it in lines] + r = res_s.index(min(res_s)) + return lines[r] +register_extra_filter(adapt_sum, 'sum') + + +def adapt_entropy(line, cfg, filter_obj): + """Determine best filter by dispersion of row values""" + lines = filter_obj.filter_all(line) + res_c = [len(set(it)) for it in lines] + r = res_c.index(min(res_c)) + return lines[r] +register_extra_filter(adapt_entropy, 'entropy') + + +def parse_mode(mode, default_bitdepth=None): + """Parse PIL-style mode and return tuple (grayscale, alpha, bitdeph)""" + # few special cases + if mode == 'P': + # Don't know what is pallette + raise Error('Unknown colour mode:' + mode) + elif mode == '1': + # Logical + return (True, False, 1) + elif mode == 'I': + # Integer + return (True, False, 16) + # here we go + if mode.startswith('L'): + grayscale = True + mode = mode[1:] + elif mode.startswith('RGB'): + grayscale = False + mode = mode[3:] + else: + raise Error('Unknown colour mode:' + mode) + + if mode.startswith('A'): + alpha = True + mode = mode[1:] + else: + alpha = False + + bitdepth = default_bitdepth + if mode.startswith(';'): + mode = mode[1:] + if mode: + try: + bitdepth = int(mode) + except (TypeError, ValueError): + raise Error('Unsupported bitdepth mode:' + mode) + return (grayscale, alpha, bitdepth) + + +def from_array(a, mode=None, info=None): + """ + Create a PNG :class:`Image` object from a 2- or 3-dimensional array. + + One application of this function is easy PIL-style saving: + ``png.from_array(pixels, 'L').save('foo.png')``. + + .. note : + + The use of the term *3-dimensional* is for marketing purposes + only. It doesn't actually work. Please bear with us. Meanwhile + enjoy the complimentary snacks (on request) and please use a + 2-dimensional array. + + Unless they are specified using the *info* parameter, the PNG's + height and width are taken from the array size. For a 3 dimensional + array the first axis is the height; the second axis is the width; + and the third axis is the channel number. Thus an RGB image that is + 16 pixels high and 8 wide will use an array that is 16x8x3. For 2 + dimensional arrays the first axis is the height, but the second axis + is ``width*channels``, so an RGB image that is 16 pixels high and 8 + wide will use a 2-dimensional array that is 16x24 (each row will be + 8*3 = 24 sample values). + + *mode* is a string that specifies the image colour format in a + PIL-style mode. It can be: + + ``'L'`` + greyscale (1 channel) + ``'LA'`` + greyscale with alpha (2 channel) + ``'RGB'`` + colour image (3 channel) + ``'RGBA'`` + colour image with alpha (4 channel) + + The mode string can also specify the bit depth (overriding how this + function normally derives the bit depth, see below). Appending + ``';16'`` to the mode will cause the PNG to be 16 bits per channel; + any decimal from 1 to 16 can be used to specify the bit depth. + + When a 2-dimensional array is used *mode* determines how many + channels the image has, and so allows the width to be derived from + the second array dimension. + + The array is expected to be a ``numpy`` array, but it can be any + suitable Python sequence. For example, a list of lists can be used: + ``png.from_array([[0, 255, 0], [255, 0, 255]], 'L')``. The exact + rules are: ``len(a)`` gives the first dimension, height; + ``len(a[0])`` gives the second dimension; ``len(a[0][0])`` gives the + third dimension, unless an exception is raised in which case a + 2-dimensional array is assumed. It's slightly more complicated than + that because an iterator of rows can be used, and it all still + works. Using an iterator allows data to be streamed efficiently. + + The bit depth of the PNG is normally taken from the array element's + datatype (but if *mode* specifies a bitdepth then that is used + instead). The array element's datatype is determined in a way which + is supposed to work both for ``numpy`` arrays and for Python + ``array.array`` objects. A 1 byte datatype will give a bit depth of + 8, a 2 byte datatype will give a bit depth of 16. If the datatype + does not have an implicit size, for example it is a plain Python + list of lists, as above, then a default of 8 is used. + + The *info* parameter is a dictionary that can be used to specify + metadata (in the same style as the arguments to the + :class:`png.Writer` class). For this function the keys that are + useful are: + + height + overrides the height derived from the array dimensions and allows + *a* to be an iterable. + width + overrides the width derived from the array dimensions. + bitdepth + overrides the bit depth derived from the element datatype (but + must match *mode* if that also specifies a bit depth). + + Generally anything specified in the + *info* dictionary will override any implicit choices that this + function would otherwise make, but must match any explicit ones. + For example, if the *info* dictionary has a ``greyscale`` key then + this must be true when mode is ``'L'`` or ``'LA'`` and false when + mode is ``'RGB'`` or ``'RGBA'``. + """ + # typechecks *info* to some extent. + if info is None: + info = {} + else: + info = dict(info) + + # Syntax check mode string. + grayscale, alpha, bitdepth = parse_mode(mode) + + # Colour format. + if 'greyscale' in info: + if bool(info['greyscale']) != grayscale: + raise Error("info['greyscale'] should match mode.") + info['greyscale'] = grayscale + if 'alpha' in info: + if bool(info['alpha']) != alpha: + raise Error("info['alpha'] should match mode.") + info['alpha'] = alpha + + # Get bitdepth from *mode* if possible. + if bitdepth: + if info.get('bitdepth') and bitdepth != info['bitdepth']: + raise Error("mode bitdepth (%d) should match info bitdepth (%d)." % + (bitdepth, info['bitdepth'])) + info['bitdepth'] = bitdepth + + planes = (3, 1)[grayscale] + alpha + if 'planes' in info: + if info['planes'] != planes: + raise Error("info['planes'] should match mode.") + + # Dimensions. + if 'size' in info: + info['width'], info['height'] = check_sizes(info.get('size'), + info.get('width'), + info.get('height')) + if 'height' not in info: + try: + l = len(a) + except TypeError: + raise Error( + "len(a) does not work, supply info['height'] instead.") + info['height'] = l + + # In order to work out whether we the array is 2D or 3D we need its + # first row, which requires that we take a copy of its iterator. + # We may also need the first row to derive width and bitdepth. + row, a = peekiter(a) + try: + row[0][0] + threed = True + testelement = row[0] + except (IndexError, TypeError): + threed = False + testelement = row + if 'width' not in info: + if threed: + width = len(row) + else: + width = len(row) // planes + info['width'] = width + + # Not implemented yet + assert not threed + + if 'bitdepth' not in info: + try: + dtype = testelement.dtype + # goto the "else:" clause. Sorry. + except AttributeError: + try: + # Try a Python array.array. + bitdepth = 8 * testelement.itemsize + except AttributeError: + # We can't determine it from the array element's + # datatype, use a default of 8. + bitdepth = 8 + else: + # If we got here without exception, we now assume that + # the array is a numpy array. + if dtype.kind == 'b': + bitdepth = 1 + else: + bitdepth = 8 * dtype.itemsize + info['bitdepth'] = bitdepth + + for thing in ('width', 'height', 'bitdepth', 'greyscale', 'alpha'): + assert thing in info + return Image(a, info) + +# So that refugee's from PIL feel more at home. Not documented. +fromarray = from_array + + +class Image(object): + + """ + A PNG image. + + You can create an :class:`Image` object from + an array of pixels by calling :meth:`png.from_array`. It can be + saved to disk with the :meth:`save` method. + """ + + def __init__(self, rows, info): + """The constructor is not public. Please do not call it.""" + self.rows = rows + self.info = info + + def save(self, file): + """ + Save the image to *file*. + + If *file* looks like an open file + descriptor then it is used, otherwise it is treated as a + filename and a fresh file is opened. + + In general, you can only call this method once; after it has + been called the first time and the PNG image has been saved, the + source data will have been streamed, and cannot be streamed + again. + """ + w = Writer(**self.info) + + try: + file.write + + def close(): + pass + except AttributeError: + file = open(file, 'wb') + + def close(): + file.close() + + try: + w.write(file, self.rows) + finally: + close() + + +class _readable(object): + + """A simple file-like interface for strings and arrays.""" + + def __init__(self, buf): + self.buf = buf + self.offset = 0 + + def read(self, n): + """Read `n` chars from buffer""" + r = self.buf[self.offset:self.offset + n] + if isinstance(r, array): + r = r.tostring() + self.offset += n + return r + + +class Reader(object): + + """PNG decoder in pure Python.""" + + def __init__(self, _guess=None, **kw): + """ + Create a PNG decoder object. + + The constructor expects exactly one keyword argument. If you + supply a positional argument instead, it will guess the input + type. You can choose among the following keyword arguments: + + filename + Name of input file (a PNG file). + file + A file-like object (object with a read() method). + bytes + ``array`` or ``string`` with PNG data. + """ + if ((_guess is not None and len(kw) != 0) or + (_guess is None and len(kw) != 1)): + raise TypeError("Reader() takes exactly 1 argument") + + # Will be the first 8 bytes, later on. See validate_signature. + self.signature = None + self.transparent = None + self.text = {} + # A pair of (len, chunk_type) if a chunk has been read but its data and + # checksum have not (in other words the file position is just + # past the 4 bytes that specify the chunk type). See preamble + # method for how this is used. + self.atchunk = None + + if _guess is not None: + if isinstance(_guess, array): + kw["bytes"] = _guess + elif isinstance(_guess, str): + kw["filename"] = _guess + elif hasattr(_guess, 'read'): + kw["file"] = _guess + + self.close_file = False + if "filename" in kw: + self.file = open(kw["filename"], "rb") + self.close_file = True + elif "file" in kw: + self.file = kw["file"] + elif "bytes" in kw: + self.file = _readable(kw["bytes"]) + else: + raise TypeError("expecting filename, file or bytes array") + + def __del__(self): + if self.close_file: + self.file.close() + + def chunk(self, seek=None, lenient=False): + """ + Read the next PNG chunk from the input file + + returns a (*chunk_type*, *data*) tuple. *chunk_type* is the chunk's + type as a byte string (all PNG chunk types are 4 bytes long). + *data* is the chunk's data content, as a byte string. + + If the optional `seek` argument is + specified then it will keep reading chunks until it either runs + out of file or finds the chunk_type specified by the argument. Note + that in general the order of chunks in PNGs is unspecified, so + using `seek` can cause you to miss chunks. + + If the optional `lenient` argument evaluates to `True`, + checksum failures will raise warnings rather than exceptions. + """ + self.validate_signature() + while True: + # http://www.w3.org/TR/PNG/#5Chunk-layout + if not self.atchunk: + self.atchunk = self.chunklentype() + length, chunk_type = self.atchunk + self.atchunk = None + data = self.file.read(length) + if len(data) != length: + raise ChunkError('Chunk %s too short for required %i octets.' + % (chunk_type, length)) + checksum = self.file.read(4) + if len(checksum) != 4: + raise ChunkError('Chunk %s too short for checksum.', + chunk_type) + if seek and chunk_type != seek: + continue + verify = zlib.crc32(strtobytes(chunk_type)) + verify = zlib.crc32(data, verify) + # Whether the output from zlib.crc32 is signed or not varies + # according to hideous implementation details, see + # http://bugs.python.org/issue1202 . + # We coerce it to be positive here (in a way which works on + # Python 2.3 and older). + verify &= 2**32 - 1 + verify = struct.pack('!I', verify) + if checksum != verify: + (a, ) = struct.unpack('!I', checksum) + (b, ) = struct.unpack('!I', verify) + message = "Checksum error in %s chunk: 0x%08X != 0x%08X." %\ + (chunk_type, a, b) + if lenient: + warnings.warn(message, RuntimeWarning) + else: + raise ChunkError(message) + return chunk_type, data + + def chunks(self): + """Return an iterator that will yield each chunk as a + (*chunktype*, *content*) pair. + """ + while True: + t,v = self.chunk() + yield t,v + if t == 'IEND': + break + + def deinterlace(self, raw): + """ + Read raw pixel data, undo filters, deinterlace, and flatten. + + Return in flat row flat pixel format. + """ + # Values per row (of the target image) + vpr = self.width * self.planes + + # Make a result array, and make it big enough. Interleaving + # writes to the output array randomly (well, not quite), so the + # entire output array must be in memory. + if self.bitdepth > 8: + a = newHarray(vpr * self.height) + else: + a = newBarray(vpr * self.height) + source_offset = 0 + filt = Filter(self.bitdepth * self.planes) + for xstart, ystart, xstep, ystep in _adam7: + if xstart >= self.width: + continue + # The previous (reconstructed) scanline. None at the + # beginning of a pass to indicate that there is no previous + # line. + filt.prev = None + # Pixels per row (reduced pass image) + ppr = int(math.ceil((self.width-xstart)/float(xstep))) + # Row size in bytes for this pass. + row_size = int(math.ceil(self.psize * ppr)) + for y in range(ystart, self.height, ystep): + filter_type = raw[source_offset] + scanline = raw[source_offset + 1:source_offset + row_size + 1] + source_offset += (row_size + 1) + if filter_type not in (0, 1, 2, 3, 4): + raise FormatError('Invalid PNG Filter Type.' + ' See http://www.w3.org/TR/2003/REC-PNG-20031110/#9Filters .') + filt.undo_filter(filter_type, scanline) + # Convert so that there is one element per pixel value + flat = self.serialtoflat(scanline, ppr) + end_offset = (y + 1) * vpr + if xstep == 1: + # Last pass (0, 1, 1, 2)) + assert xstart == 0 + offset = y * vpr + a[offset:end_offset] = flat + else: + offset = y * vpr + xstart * self.planes + for i in range(self.planes): + a[offset + i:end_offset:self.planes * xstep] = \ + flat[i::self.planes] + return a + + def iterboxed(self, rows): + """ + Iterator that yields each scanline in boxed row flat pixel format. + + `rows` should be an iterator that yields the bytes of + each row in turn. + """ + def asvalues(raw): + """ + Convert a row of raw bytes into a flat row. + + Result may or may not share with argument + """ + if self.bitdepth == 8: + return raw + if self.bitdepth == 16: + raw = bytearray_to_bytes(raw) + return array('H', struct.unpack('!%dH' % (len(raw) // 2), raw)) + assert self.bitdepth < 8 + width = self.width + # Samples per byte + spb = 8 // self.bitdepth + out = newBarray() + mask = 2 ** self.bitdepth - 1 + # reversed range(spb) + shifts = [self.bitdepth * it for it in range(spb - 1, -1, -1)] + for o in raw: + out.extend([mask & (o >> i) for i in shifts]) + return out[:width] + + return map(asvalues, rows) + + def serialtoflat(self, raw, width=None): + """Convert serial (byte stream) pixel data to flat row flat pixel.""" + if self.bitdepth == 8: + return raw + if self.bitdepth == 16: + raw = bytearray_to_bytes(raw) + return array('H', + struct.unpack('!%dH' % (len(raw) // 2), raw)) + assert self.bitdepth < 8 + if width is None: + width = self.width + # Samples per byte + spb = 8 // self.bitdepth + out = newBarray() + mask = 2**self.bitdepth - 1 + # reversed range(spb) + shifts = [self.bitdepth * it for it in range(spb - 1, -1, -1)] + l = width + for o in raw: + out.extend([(mask&(o>>s)) for s in shifts][:l]) + l -= spb + if l <= 0: + l = width + return out + + def iterstraight(self, raw): + """ + Iterator that undoes the effect of filtering + + Yields each row in serialised format (as a sequence of bytes). + Assumes input is straightlaced. `raw` should be an iterable + that yields the raw bytes in chunks of arbitrary size. + """ + # length of row, in bytes (with filter) + rb_1 = self.row_bytes + 1 + a = bytearray() + filt = Filter(self.bitdepth * self.planes) + for some in raw: + a.extend(some) + offset = 0 + while len(a) >= rb_1 + offset: + filter_type = a[offset] + if filter_type not in (0, 1, 2, 3, 4): + raise FormatError('Invalid PNG Filter Type.' + ' See http://www.w3.org/TR/2003/REC-PNG-20031110/#9Filters .') + scanline = a[offset + 1:offset + rb_1] + filt.undo_filter(filter_type, scanline) + yield scanline + offset += rb_1 + del a[:offset] + + if len(a) != 0: + # :file:format We get here with a file format error: + # when the available bytes (after decompressing) do not + # pack into exact rows. + raise FormatError( + 'Wrong size for decompressed IDAT chunk.') + assert len(a) == 0 + + def validate_signature(self): + """If signature (header) has not been read then read and validate it""" + if self.signature: + return + self.signature = self.file.read(8) + if self.signature != png_signature: + raise FormatError("PNG file has invalid signature.") + + def preamble(self, lenient=False): + """ + Extract the image metadata + + Extract the image metadata by reading the initial part of + the PNG file up to the start of the ``IDAT`` chunk. All the + chunks that precede the ``IDAT`` chunk are read and either + processed for metadata or discarded. + + If the optional `lenient` argument evaluates to `True`, checksum + failures will raise warnings rather than exceptions. + """ + self.validate_signature() + while True: + if not self.atchunk: + self.atchunk = self.chunklentype() + if self.atchunk is None: + raise FormatError( + 'This PNG file has no IDAT chunks.') + if self.atchunk[1] == 'IDAT': + return + self.process_chunk(lenient=lenient) + + def chunklentype(self): + """Reads just enough of the input to determine the next + chunk's length and type, returned as a (*length*, *chunk_type*) pair + where *chunk_type* is a string. If there are no more chunks, ``None`` + is returned. + """ + x = self.file.read(8) + if not x: + return None + if len(x) != 8: + raise FormatError( + 'End of file whilst reading chunk length and type.') + length, chunk_type = struct.unpack('!I4s', x) + chunk_type = bytestostr(chunk_type) + if length > 2**31-1: + raise FormatError('Chunk %s is too large: %d.' % (chunk_type, + length)) + return length, chunk_type + + def process_chunk(self, lenient=False): + """ + Process the next chunk and its data. + + If the optional `lenient` argument evaluates to `True`, + checksum failures will raise warnings rather than exceptions. + """ + chunk_type, data = self.chunk(lenient=lenient) + method = '_process_' + chunk_type + m = getattr(self, method, None) + if m: + m(data) + + def _process_IHDR(self, data): + # http://www.w3.org/TR/PNG/#11IHDR + if len(data) != 13: + raise FormatError('IHDR chunk has incorrect length.') + (self.width, self.height, self.bitdepth, self.color_type, + self.compression, self.filter, + self.interlace) = struct.unpack("!2I5B", data) + + check_bitdepth_colortype(self.bitdepth, self.color_type) + + if self.compression != 0: + raise Error("unknown compression method %d" % self.compression) + if self.filter != 0: + raise FormatError("Unknown filter method %d," + " see http://www.w3.org/TR/2003/REC-PNG-20031110/#9Filters ." + % self.filter) + if self.interlace not in (0,1): + raise FormatError("Unknown interlace method %d," + " see http://www.w3.org/TR/2003/REC-PNG-20031110/#8InterlaceMethods ." + % self.interlace) + + # Derived values + # http://www.w3.org/TR/PNG/#6Colour-values + colormap = bool(self.color_type & 1) + greyscale = not (self.color_type & 2) + alpha = bool(self.color_type & 4) + color_planes = (3,1)[greyscale or colormap] + planes = color_planes + alpha + + self.colormap = colormap + self.greyscale = greyscale + self.alpha = alpha + self.color_planes = color_planes + self.planes = planes + self.psize = float(self.bitdepth)/ float(8) * planes + if int(self.psize) == self.psize: + self.psize = int(self.psize) + self.row_bytes = int(math.ceil(self.width * self.psize)) + # Stores PLTE chunk if present, and is used to check + # chunk ordering constraints. + self.plte = None + # Stores tRNS chunk if present, and is used to check chunk + # ordering constraints. + self.trns = None + # Stores sbit chunk if present. + self.sbit = None + # If an sRGB chunk is present, rendering intent is updated + self.rendering_intent = None + + def _process_PLTE(self, data): + # http://www.w3.org/TR/PNG/#11PLTE + if self.plte: + warnings.warn("Multiple PLTE chunks present.") + self.plte = data + if len(data) % 3 != 0: + raise FormatError( + "PLTE chunk's length should be a multiple of 3.") + if len(data) > (2**self.bitdepth)*3: + raise FormatError("PLTE chunk is too long.") + if len(data) == 0: + raise FormatError("Empty PLTE is not allowed.") + + def _process_bKGD(self, data): + try: + if self.colormap: + if not self.plte: + warnings.warn( + "PLTE chunk is required before bKGD chunk.") + self.background = struct.unpack('B', data) + else: + self.background = struct.unpack("!%dH" % self.color_planes, + data) + except struct.error: + raise FormatError("bKGD chunk has incorrect length.") + + def _process_tRNS(self, data): + # http://www.w3.org/TR/PNG/#11tRNS + self.trns = data + if self.colormap: + if not self.plte: + warnings.warn("PLTE chunk is required before tRNS chunk.") + else: + if len(data) > len(self.plte)/3: + # Was warning, but promoted to Error as it + # would otherwise cause pain later on. + raise FormatError("tRNS chunk is too long.") + else: + if self.alpha: + raise FormatError( + "tRNS chunk is not valid with colour type %d." % + self.color_type) + try: + self.transparent = \ + struct.unpack("!%dH" % self.color_planes, data) + except struct.error: + raise FormatError("tRNS chunk has incorrect length.") + + def _process_gAMA(self, data): + try: + self.gamma = struct.unpack("!L", data)[0] / 100000.0 + except struct.error: + raise FormatError("gAMA chunk has incorrect length.") + + def _process_iCCP(self, data): + i = data.index(zerobyte) + icc_profile_name = data[:i] + compression = data[i:i + 1] + # TODO: Raise FormatError + assert (compression == zerobyte) + icc_profile_string = zlib.decompress(data[i + 2:]) + self.icc_profile = (icc_profile_name, icc_profile_string) + + def _process_sBIT(self, data): + self.sbit = data + if (self.colormap and len(data) != 3 or + not self.colormap and len(data) != self.planes): + raise FormatError("sBIT chunk has incorrect length.") + + def _process_sRGB(self, data): + self.rendering_intent, = struct.unpack('B', data) + + def _process_cHRM(self, data): + if len(data) != struct.calcsize("!8L"): + raise FormatError("cHRM chunk has incorrect length.") + white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y = \ + tuple([value / 100000.0 for value in struct.unpack("!8L", data)]) + self.white_point = white_x, white_y + self.rgb_points = (red_x, red_y), (green_x, green_y), (blue_x, blue_y) + + def _process_tEXt(self, data): + # http://www.w3.org/TR/PNG/#11tEXt + i = data.index(zerobyte) + keyword = data[:i] + try: + keyword = str(keyword, 'latin-1') + except: + pass + self.text[keyword] = data[i + 1:].decode('latin-1') + + def _process_zTXt(self, data): + # http://www.w3.org/TR/PNG/#11zTXt + i = data.index(zerobyte) + keyword = data[:i] + try: + keyword = str(keyword, 'latin-1') + except: + pass + # TODO: Raise FormatError + assert data[i:i + 1] == zerobyte + text = zlib.decompress(data[i + 2:]).decode('latin-1') + self.text[keyword] = text + + def _process_iTXt(self, data): + # http://www.w3.org/TR/PNG/#11iTXt + i = data.index(zerobyte) + keyword = data[:i] + try: + keyword = str(keyword, 'latin-1') + except: + pass + compress_flag = data[i + 1: i + 2] + if (compress_flag != zerobyte): + # TODO: Support for compression!! + return + # TODO: Raise FormatError + compress_method = data[i + 2: i + 3] + assert (compress_method == zerobyte) + data_ = data[i + 3:] + i = data_.index(zerobyte) + # skip language tag + data_ = data_[i + 1:] + i = data_.index(zerobyte) + # skip translated keyword + data_ = data_[i + 1:] + self.text[keyword] = data_.decode('utf-8') + + def _process_pHYs(self, data): + # http://www.w3.org/TR/PNG/#11pHYs + ppux, ppuy, unit = struct.unpack('!IIB', data) + self.resolution = ((ppux, ppuy), unit) + + def _process_tIME(self, data): + # http://www.w3.org/TR/PNG/#11tIME + fmt = "!H5B" + if len(data) != struct.calcsize(fmt): + raise FormatError("tIME chunk has incorrect length.") + self.last_mod_time = struct.unpack(fmt, data) + + def idat(self, lenient=False): + """Iterator that yields all the ``IDAT`` chunks as strings.""" + while True: + try: + chunk_type, data = self.chunk(lenient=lenient) + except ValueError: + e = sys.exc_info()[1] + raise ChunkError(e.args[0]) + if chunk_type == 'IEND': + # http://www.w3.org/TR/PNG/#11IEND + break + if chunk_type != 'IDAT': + continue + # chunk_type == 'IDAT' + # http://www.w3.org/TR/PNG/#11IDAT + if self.colormap and not self.plte: + warnings.warn("PLTE chunk is required before IDAT chunk") + yield data + + def idatdecomp(self, lenient=False, max_length=0): + """Iterator that yields decompressed ``IDAT`` strings.""" + # Currently, with no max_length paramter to decompress, this + # routine will do one yield per IDAT chunk. So not very + # incremental. + d = zlib.decompressobj() + # Each IDAT chunk is passed to the decompressor, then any + # remaining state is decompressed out. + for data in self.idat(lenient): + # :todo: add a max_length argument here to limit output + # size. + yield bytearray(d.decompress(data)) + yield bytearray(d.flush()) + + def read(self, lenient=False): + """ + Read the PNG file and decode it. + + Returns (`width`, `height`, `pixels`, `metadata`). + + May use excessive memory. + + `pixels` are returned in boxed row flat pixel format. + + If the optional `lenient` argument evaluates to True, + checksum failures will raise warnings rather than exceptions. + """ + self.preamble(lenient=lenient) + raw = self.idatdecomp(lenient) + + if self.interlace: + raw = bytearray(itertools.chain(*raw)) + arraycode = 'BH'[self.bitdepth > 8] + # Like :meth:`group` but producing an array.array object for + # each row. + pixels = map(lambda *row: array(arraycode, row), + *[iter(self.deinterlace(raw))]*self.width*self.planes) + else: + pixels = self.iterboxed(self.iterstraight(raw)) + meta = dict() + for attr in 'greyscale alpha planes bitdepth interlace'.split(): + meta[attr] = getattr(self, attr) + meta['size'] = (self.width, self.height) + for attr in ('gamma', 'transparent', 'background', 'last_mod_time', + 'icc_profile', 'resolution', 'text', + 'rendering_intent', 'white_point', 'rgb_points'): + a = getattr(self, attr, None) + if a is not None: + meta[attr] = a + if self.plte: + meta['palette'] = self.palette() + return self.width, self.height, pixels, meta + + def read_flat(self): + """ + Read a PNG file and decode it into flat row flat pixel format. + + Returns (*width*, *height*, *pixels*, *metadata*). + + May use excessive memory. + + `pixels` are returned in flat row flat pixel format. + + See also the :meth:`read` method which returns pixels in the + more stream-friendly boxed row flat pixel format. + """ + x, y, pixel, meta = self.read() + arraycode = 'BH'[meta['bitdepth'] > 8] + pixel = array(arraycode, itertools.chain(*pixel)) + return x, y, pixel, meta + + def palette(self, alpha='natural'): + """ + Returns a palette that is a sequence of 3-tuples or 4-tuples + + Synthesizing it from the ``PLTE`` and ``tRNS`` chunks. These + chunks should have already been processed (for example, by + calling the :meth:`preamble` method). All the tuples are the + same size: 3-tuples if there is no ``tRNS`` chunk, 4-tuples when + there is a ``tRNS`` chunk. Assumes that the image is colour type + 3 and therefore a ``PLTE`` chunk is required. + + If the `alpha` argument is ``'force'`` then an alpha channel is + always added, forcing the result to be a sequence of 4-tuples. + """ + if not self.plte: + raise FormatError( + "Required PLTE chunk is missing in colour type 3 image.") + plte = group(bytearray(self.plte), 3) + if self.trns or alpha == 'force': + trns = bytearray(self.trns or strtobytes('')) + trns.extend([255]*(len(plte)-len(trns))) + plte = list(map(operator.add, plte, group(trns, 1))) + return plte + + def asDirect(self): + """Returns the image data as a direct representation of an + ``x * y * planes`` array. This method is intended to remove the + need for callers to deal with palettes and transparency + themselves. Images with a palette (colour type 3) + are converted to RGB or RGBA; images with transparency (a + ``tRNS`` chunk) are converted to LA or RGBA as appropriate. + When returned in this format the pixel values represent the + colour value directly without needing to refer to palettes or + transparency information. + + Like the :meth:`read` method this method returns a 4-tuple: + + (*width*, *height*, *pixels*, *meta*) + + This method normally returns pixel values with the bit depth + they have in the source image, but when the source PNG has an + ``sBIT`` chunk it is inspected and can reduce the bit depth of + the result pixels; pixel values will be reduced according to + the bit depth specified in the ``sBIT`` chunk (PNG nerds should + note a single result bit depth is used for all channels; the + maximum of the ones specified in the ``sBIT`` chunk. An RGB565 + image will be rescaled to 6-bit RGB666). + + The *meta* dictionary that is returned reflects the `direct` + format and not the original source image. For example, an RGB + source image with a ``tRNS`` chunk to represent a transparent + colour, will have ``planes=3`` and ``alpha=False`` for the + source image, but the *meta* dictionary returned by this method + will have ``planes=4`` and ``alpha=True`` because an alpha + channel is synthesized and added. + + *pixels* is the pixel data in boxed row flat pixel format (just + like the :meth:`read` method). + + All the other aspects of the image data are not changed. + """ + self.preamble() + # Simple case, no conversion necessary. + if not self.colormap and not self.trns and not self.sbit: + return self.read() + + x, y, pixels, meta = self.read() + + if self.colormap: + meta['colormap'] = False + meta['alpha'] = bool(self.trns) + meta['bitdepth'] = 8 + meta['planes'] = 3 + bool(self.trns) + plte = self.palette() + + def iterpal(pixels): + for row in pixels: + row = [plte[i] for i in row] + yield bytearray(itertools.chain(*row)) + pixels = iterpal(pixels) + elif self.trns: + # It would be nice if there was some reasonable way + # of doing this without generating a whole load of + # intermediate tuples. But tuples does seem like the + # easiest way, with no other way clearly much simpler or + # much faster. (Actually, the L to LA conversion could + # perhaps go faster (all those 1-tuples!), but I still + # wonder whether the code proliferation is worth it) + it = self.transparent + maxval = 2**meta['bitdepth'] - 1 + planes = meta['planes'] + meta['alpha'] = True + meta['planes'] += 1 + if meta['bitdepth'] > 8: + def wrap_array(row): + return array('H', row) + else: + wrap_array = bytearray + + def itertrns(pixels): + for row in pixels: + # For each row we group it into pixels, then form a + # characterisation vector that says whether each + # pixel is opaque or not. Then we convert + # True/False to 0/maxval (by multiplication), + # and add it as the extra channel. + row = group(row, planes) + opa = [maxval * (it != i) for i in row] + opa = zip(opa) # convert to 1-tuples + yield wrap_array(itertools.chain(*list(map(operator.add, + row, opa)))) + pixels = itertrns(pixels) + targetbitdepth = None + if self.sbit: + sbit = struct.unpack('%dB' % len(self.sbit), self.sbit) + targetbitdepth = max(sbit) + if targetbitdepth > meta['bitdepth']: + raise Error('sBIT chunk %r exceeds bitdepth %d' % + (sbit, self.bitdepth)) + if min(sbit) <= 0: + raise Error('sBIT chunk %r has a 0-entry' % sbit) + if targetbitdepth == meta['bitdepth']: + targetbitdepth = None + if targetbitdepth: + shift = meta['bitdepth'] - targetbitdepth + meta['bitdepth'] = targetbitdepth + + def itershift(pixels): + for row in pixels: + yield array('BH'[targetbitdepth > 8], + [it >> shift for it in row]) + pixels = itershift(pixels) + return x, y, pixels, meta + + def asFloat(self, maxval=1.0): + """Return image pixels as per :meth:`asDirect` method, but scale + all pixel values to be floating point values between 0.0 and + *maxval*. + """ + x, y, pixels, info = self.asDirect() + sourcemaxval = 2**info['bitdepth'] - 1 + del info['bitdepth'] + info['maxval'] = float(maxval) + factor = float(maxval) / float(sourcemaxval) + + def iterfloat(): + for row in pixels: + yield [factor * it for it in row] + return x, y, iterfloat(), info + + def _as_rescale(self, get, targetbitdepth): + """Helper used by :meth:`asRGB8` and :meth:`asRGBA8`.""" + width, height, pixels, meta = get() + maxval = 2**meta['bitdepth'] - 1 + targetmaxval = 2**targetbitdepth - 1 + factor = float(targetmaxval) / float(maxval) + meta['bitdepth'] = targetbitdepth + + def iterscale(rows): + for row in rows: + yield array('BH'[targetbitdepth > 8], + [int(round(x * factor)) for x in row]) + if maxval == targetmaxval: + return width, height, pixels, meta + else: + if 'transparent' in meta: + transparent = meta['transparent'] + if isinstance(transparent, tuple): + transparent = tuple(list( + iterscale((transparent,)) + )[0]) + else: + transparent = tuple(list( + iterscale(((transparent,),)) + )[0])[0] + meta['transparent'] = transparent + return width, height, iterscale(pixels), meta + + def asRGB8(self): + """ + Return the image data as an RGB pixels with 8-bits per sample. + + This is like the :meth:`asRGB` method except that + this method additionally rescales the values so that they + are all between 0 and 255 (8-bit). In the case where the + source image has a bit depth < 8 the transformation preserves + all the information; where the source image has bit depth + > 8, then rescaling to 8-bit values loses precision. No + dithering is performed. Like :meth:`asRGB`, an alpha channel + in the source image will raise an exception. + + This function returns a 4-tuple: + (*width*, *height*, *pixels*, *metadata*). + *width*, *height*, *metadata* are as per the + :meth:`read` method. + + *pixels* is the pixel data in boxed row flat pixel format. + """ + return self._as_rescale(self.asRGB, 8) + + def asRGBA8(self): + """ + Return the image data as RGBA pixels with 8-bits per sample. + + This method is similar to :meth:`asRGB8` and + :meth:`asRGBA`: The result pixels have an alpha channel, *and* + values are rescaled to the range 0 to 255. The alpha channel is + synthesized if necessary (with a small speed penalty). + """ + return self._as_rescale(self.asRGBA, 8) + + def asRGB(self): + """ + Return image as RGB pixels. + + RGB colour images are passed through unchanged; + greyscales are expanded into RGB triplets + (there is a small speed overhead for doing this). + + An alpha channel in the source image will raise an exception. + + The return values are as for the :meth:`read` method + except that the *metadata* reflect the returned pixels, not the + source image. In particular, for this method + ``metadata['greyscale']`` will be ``False``. + """ + width, height, pixels, meta = self.asDirect() + if meta['alpha']: + raise Error("will not convert image with alpha channel to RGB") + if not meta['greyscale']: + return width, height, pixels, meta + meta['greyscale'] = False + newarray = (newBarray, newHarray)[meta['bitdepth'] > 8] + + def iterrgb(): + for row in pixels: + a = newarray(3 * width) + for i in range(3): + a[i::3] = row + yield a + return width, height, iterrgb(), meta + + def asRGBA(self): + """ + Return image as RGBA pixels. + + Greyscales are expanded into RGB triplets; + an alpha channel is synthesized if necessary. + The return values are as for the :meth:`read` method + except that the *metadata* reflect the returned pixels, not the + source image. In particular, for this method + ``metadata['greyscale']`` will be ``False``, and + ``metadata['alpha']`` will be ``True``. + """ + width, height, pixels, meta = self.asDirect() + if meta['alpha'] and not meta['greyscale']: + return width, height, pixels, meta + maxval = 2**meta['bitdepth'] - 1 + if meta['bitdepth'] > 8: + def newarray(): + return array('H', [maxval] * 4 * width) + else: + def newarray(): + return bytearray([maxval] * 4 * width) + + # Not best way, but we have only array of bytes accelerated now + if meta['bitdepth'] <= 8: + filt = BaseFilter() + else: + filt = iBaseFilter() + + if meta['alpha'] and meta['greyscale']: + # LA to RGBA + def convert(): + for row in pixels: + # Create a fresh target row, then copy L channel + # into first three target channels, and A channel + # into fourth channel. + a = newarray() + filt.convert_la_to_rgba(row, a) + yield a + elif meta['greyscale']: + # L to RGBA + def convert(): + for row in pixels: + a = newarray() + filt.convert_l_to_rgba(row, a) + yield a + else: + assert not meta['alpha'] and not meta['greyscale'] + # RGB to RGBA + + def convert(): + for row in pixels: + a = newarray() + filt.convert_rgb_to_rgba(row, a) + yield a + meta['alpha'] = True + meta['greyscale'] = False + return width, height, convert(), meta + + +def check_bitdepth_colortype(bitdepth, colortype): + """ + Check that `bitdepth` and `colortype` are both valid, + and specified in a valid combination. Returns if valid, + raise an Exception if not valid. + """ + if bitdepth not in (1, 2, 4, 8, 16): + raise FormatError("invalid bit depth %d" % bitdepth) + if colortype not in (0, 2, 3, 4, 6): + raise FormatError("invalid colour type %d" % colortype) + # Check indexed (palettized) images have 8 or fewer bits + # per pixel; check only indexed or greyscale images have + # fewer than 8 bits per pixel. + if colortype & 1 and bitdepth > 8: + raise FormatError( + "Indexed images (colour type %d) cannot" + " have bitdepth > 8 (bit depth %d)." + " See http://www.w3.org/TR/2003/REC-PNG-20031110/#table111 ." + % (bitdepth, colortype)) + if bitdepth < 8 and colortype not in (0, 3): + raise FormatError("Illegal combination of bit depth (%d)" + " and colour type (%d)." + " See http://www.w3.org/TR/2003/REC-PNG-20031110/#table111 ." + % (bitdepth, colortype)) + + +def isinteger(x): + """Check if `x` is platform native integer""" + try: + return int(x) == x + except (TypeError, ValueError): + return False + + +# === Legacy Version Support === + +# In order to work on Python 2.3 we fix up a recurring annoyance involving +# the array type. In Python 2.3 an array cannot be initialised with an +# array, and it cannot be extended with a list (or other sequence). +# Both of those are repeated issues in the code. Whilst I would not +# normally tolerate this sort of behaviour, here we "shim" a replacement +# for array into place (and hope no-one notices). You never read this. + +try: + array('B').extend([]) + array('B', array('B')) +except TypeError: + # Expect to get here on Python 2.3 + class _array_shim(array): + true_array = array + + def __new__(cls, typecode, init=None): + super_new = super(_array_shim, cls).__new__ + it = super_new(cls, typecode) + if init is None: + return it + it.extend(init) + return it + + def extend(self, extension): + super_extend = super(_array_shim, self).extend + if isinstance(extension, self.true_array): + return super_extend(extension) + if not isinstance(extension, (list, str)): + # Convert to list. Allows iterators to work. + extension = list(extension) + return super_extend(self.true_array(self.typecode, extension)) + array = _array_shim + + # Original array initialisation is faster but multiplication change class + def newBarray(length=0): + return array('B', [0] * length) + + def newHarray(length=0): + return array('H', [0] * length) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/color.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/color.py new file mode 100644 index 000000000..3e0a06065 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/color.py @@ -0,0 +1,116 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +import binascii +import struct + +from itertools import repeat + +from .attribute import AcceptNoneAttributeType, ParseError + +__all__ = ['Color', 'HexColor', 'BLACK', 'WHITE', 'RED', 'GREEN', 'BLUE', + 'Gray', 'GRAY10', 'GRAY25', 'GRAY50', 'GRAY75', 'GRAY90'] + + +class Color(AcceptNoneAttributeType): + """Color defined by component values + + Args: + red (float): red component (0 .. 1) + blue (float): blue component (0 .. 1) + green (float): green component (0 .. 1) + alpha (float): opacity (0 .. 1) + + """ + + def __init__(self, red, green, blue, alpha=1): + for value in (red, green, blue, alpha): + if not 0 <= value <= 1: + raise ValueError('Color component values can range from 0 to 1') + self.r = red + self.g = green + self.b = blue + self.a = alpha + + def __str__(self): + rgba_bytes = struct.pack(4 * 'B', *(int(c * 255) for c in self.rgba)) + string = binascii.hexlify(rgba_bytes).decode('ascii') + if string.endswith('ff'): + string = string[:-2] + if string[::2] == string[1::2]: + string = string[::2] + return '#' + string + + def __repr__(self): + return '{}({}, {}, {}, {})'.format(type(self).__name__, *self.rgba) + + @property + def rgba(self): + return self.r, self.g, self.b, self.a + + @classmethod + def parse_string(cls, string, source): + try: + return HexColor(string) + except ValueError: + raise ParseError("'{}' is not a valid {}. Must be a HEX string." + .format(string, cls.__name__)) + + @classmethod + def doc_format(cls): + return ('HEX string with optional alpha component ' + '(``#RRGGBB``, ``#RRGGBBAA``, ``#RGB`` or ``#RGBA``)') + + +class HexColor(Color): + """Color defined as a hexadecimal string + + Args: + string (str): ``#RGBA`` or ``#RRGGBBAA`` (``#`` and ``A`` are optional) + + """ + def __init__(self, string): + if string.startswith('#'): + string = string[1:] + if len(string) in (3, 4): + string = ''.join(repeated for char in string + for repeated in repeat(char, 2)) + string = string.encode('ascii') + try: + r, g, b = struct.unpack('BBB', binascii.unhexlify(string[:6])) + if string[6:]: + a, = struct.unpack('B', binascii.unhexlify(string[6:])) + else: + a = 255 + except (struct.error, binascii.Error): + raise ValueError('Bad color string passed to ' + + self.__class__.__name__) + super().__init__(*(value / 255 for value in (r, g, b, a))) + + +class Gray(Color): + """Shade of gray + + Args: + luminance (float): brightness (0 .. 1) + alpha (float): opacity (0 .. 1) + + """ + def __init__(self, luminance, alpha=1): + super().__init__(luminance, luminance, luminance, alpha) + + +BLACK = Color(0, 0, 0) +WHITE = Color(1, 1, 1) +GRAY10 = Gray(0.10) +GRAY25 = Gray(0.25) +GRAY50 = Gray(0.50) +GRAY75 = Gray(0.75) +GRAY90 = Gray(0.90) +RED = Color(1, 0, 0) +GREEN = Color(0, 1, 0) +BLUE = Color(0, 0, 1) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/csl_formatter.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/csl_formatter.py new file mode 100644 index 000000000..616592cfe --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/csl_formatter.py @@ -0,0 +1,36 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .flowable import GroupedFlowables +from .paragraph import Paragraph +from . import text + + +def preformat(text): + return text + + +def factory(cls): + def __init__(self, string): + return super(self.__class__, self).__init__(str(string)) + space = {'__init__': __init__} + return type(cls.__name__, (cls, ), space) + + +Italic = factory(text.Italic) +Oblique = factory(text.Italic) + +Bold = factory(text.Bold) +Light = factory(text.Bold) + +Underline = factory(text.Bold) + +Superscript = factory(text.Superscript) +Subscript = factory(text.Subscript) + +SmallCaps = factory(text.SmallCaps) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier-Bold.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier-Bold.afm new file mode 100644 index 000000000..eb80542b1 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier-Bold.afm @@ -0,0 +1,342 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Mon Jun 23 16:28:00 1997 +Comment UniqueID 43048 +Comment VMusage 41139 52164 +FontName Courier-Bold +FullName Courier Bold +FamilyName Courier +Weight Bold +ItalicAngle 0 +IsFixedPitch true +CharacterSet ExtendedRoman +FontBBox -113 -250 749 801 +UnderlinePosition -100 +UnderlineThickness 50 +Version 003.000 +Notice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +EncodingScheme AdobeStandardEncoding +CapHeight 562 +XHeight 439 +Ascender 629 +Descender -157 +StdHW 84 +StdVW 106 +StartCharMetrics 315 +C 32 ; WX 600 ; N space ; B 0 0 0 0 ; +C 33 ; WX 600 ; N exclam ; B 202 -15 398 572 ; +C 34 ; WX 600 ; N quotedbl ; B 135 277 465 562 ; +C 35 ; WX 600 ; N numbersign ; B 56 -45 544 651 ; +C 36 ; WX 600 ; N dollar ; B 82 -126 519 666 ; +C 37 ; WX 600 ; N percent ; B 5 -15 595 616 ; +C 38 ; WX 600 ; N ampersand ; B 36 -15 546 543 ; +C 39 ; WX 600 ; N quoteright ; B 171 277 423 562 ; +C 40 ; WX 600 ; N parenleft ; B 219 -102 461 616 ; +C 41 ; WX 600 ; N parenright ; B 139 -102 381 616 ; +C 42 ; WX 600 ; N asterisk ; B 91 219 509 601 ; +C 43 ; WX 600 ; N plus ; B 71 39 529 478 ; +C 44 ; WX 600 ; N comma ; B 123 -111 393 174 ; +C 45 ; WX 600 ; N hyphen ; B 100 203 500 313 ; +C 46 ; WX 600 ; N period ; B 192 -15 408 171 ; +C 47 ; WX 600 ; N slash ; B 98 -77 502 626 ; +C 48 ; WX 600 ; N zero ; B 87 -15 513 616 ; +C 49 ; WX 600 ; N one ; B 81 0 539 616 ; +C 50 ; WX 600 ; N two ; B 61 0 499 616 ; +C 51 ; WX 600 ; N three ; B 63 -15 501 616 ; +C 52 ; WX 600 ; N four ; B 53 0 507 616 ; +C 53 ; WX 600 ; N five ; B 70 -15 521 601 ; +C 54 ; WX 600 ; N six ; B 90 -15 521 616 ; +C 55 ; WX 600 ; N seven ; B 55 0 494 601 ; +C 56 ; WX 600 ; N eight ; B 83 -15 517 616 ; +C 57 ; WX 600 ; N nine ; B 79 -15 510 616 ; +C 58 ; WX 600 ; N colon ; B 191 -15 407 425 ; +C 59 ; WX 600 ; N semicolon ; B 123 -111 408 425 ; +C 60 ; WX 600 ; N less ; B 66 15 523 501 ; +C 61 ; WX 600 ; N equal ; B 71 118 529 398 ; +C 62 ; WX 600 ; N greater ; B 77 15 534 501 ; +C 63 ; WX 600 ; N question ; B 98 -14 501 580 ; +C 64 ; WX 600 ; N at ; B 16 -15 584 616 ; +C 65 ; WX 600 ; N A ; B -9 0 609 562 ; +C 66 ; WX 600 ; N B ; B 30 0 573 562 ; +C 67 ; WX 600 ; N C ; B 22 -18 560 580 ; +C 68 ; WX 600 ; N D ; B 30 0 594 562 ; +C 69 ; WX 600 ; N E ; B 25 0 560 562 ; +C 70 ; WX 600 ; N F ; B 39 0 570 562 ; +C 71 ; WX 600 ; N G ; B 22 -18 594 580 ; +C 72 ; WX 600 ; N H ; B 20 0 580 562 ; +C 73 ; WX 600 ; N I ; B 77 0 523 562 ; +C 74 ; WX 600 ; N J ; B 37 -18 601 562 ; +C 75 ; WX 600 ; N K ; B 21 0 599 562 ; +C 76 ; WX 600 ; N L ; B 39 0 578 562 ; +C 77 ; WX 600 ; N M ; B -2 0 602 562 ; +C 78 ; WX 600 ; N N ; B 8 -12 610 562 ; +C 79 ; WX 600 ; N O ; B 22 -18 578 580 ; +C 80 ; WX 600 ; N P ; B 48 0 559 562 ; +C 81 ; WX 600 ; N Q ; B 32 -138 578 580 ; +C 82 ; WX 600 ; N R ; B 24 0 599 562 ; +C 83 ; WX 600 ; N S ; B 47 -22 553 582 ; +C 84 ; WX 600 ; N T ; B 21 0 579 562 ; +C 85 ; WX 600 ; N U ; B 4 -18 596 562 ; +C 86 ; WX 600 ; N V ; B -13 0 613 562 ; +C 87 ; WX 600 ; N W ; B -18 0 618 562 ; +C 88 ; WX 600 ; N X ; B 12 0 588 562 ; +C 89 ; WX 600 ; N Y ; B 12 0 589 562 ; +C 90 ; WX 600 ; N Z ; B 62 0 539 562 ; +C 91 ; WX 600 ; N bracketleft ; B 245 -102 475 616 ; +C 92 ; WX 600 ; N backslash ; B 99 -77 503 626 ; +C 93 ; WX 600 ; N bracketright ; B 125 -102 355 616 ; +C 94 ; WX 600 ; N asciicircum ; B 108 250 492 616 ; +C 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ; +C 96 ; WX 600 ; N quoteleft ; B 178 277 428 562 ; +C 97 ; WX 600 ; N a ; B 35 -15 570 454 ; +C 98 ; WX 600 ; N b ; B 0 -15 584 626 ; +C 99 ; WX 600 ; N c ; B 40 -15 545 459 ; +C 100 ; WX 600 ; N d ; B 20 -15 591 626 ; +C 101 ; WX 600 ; N e ; B 40 -15 563 454 ; +C 102 ; WX 600 ; N f ; B 83 0 547 626 ; L i fi ; L l fl ; +C 103 ; WX 600 ; N g ; B 30 -146 580 454 ; +C 104 ; WX 600 ; N h ; B 5 0 592 626 ; +C 105 ; WX 600 ; N i ; B 77 0 523 658 ; +C 106 ; WX 600 ; N j ; B 63 -146 440 658 ; +C 107 ; WX 600 ; N k ; B 20 0 585 626 ; +C 108 ; WX 600 ; N l ; B 77 0 523 626 ; +C 109 ; WX 600 ; N m ; B -22 0 626 454 ; +C 110 ; WX 600 ; N n ; B 18 0 592 454 ; +C 111 ; WX 600 ; N o ; B 30 -15 570 454 ; +C 112 ; WX 600 ; N p ; B -1 -142 570 454 ; +C 113 ; WX 600 ; N q ; B 20 -142 591 454 ; +C 114 ; WX 600 ; N r ; B 47 0 580 454 ; +C 115 ; WX 600 ; N s ; B 68 -17 535 459 ; +C 116 ; WX 600 ; N t ; B 47 -15 532 562 ; +C 117 ; WX 600 ; N u ; B -1 -15 569 439 ; +C 118 ; WX 600 ; N v ; B -1 0 601 439 ; +C 119 ; WX 600 ; N w ; B -18 0 618 439 ; +C 120 ; WX 600 ; N x ; B 6 0 594 439 ; +C 121 ; WX 600 ; N y ; B -4 -142 601 439 ; +C 122 ; WX 600 ; N z ; B 81 0 520 439 ; +C 123 ; WX 600 ; N braceleft ; B 160 -102 464 616 ; +C 124 ; WX 600 ; N bar ; B 255 -250 345 750 ; +C 125 ; WX 600 ; N braceright ; B 136 -102 440 616 ; +C 126 ; WX 600 ; N asciitilde ; B 71 153 530 356 ; +C 161 ; WX 600 ; N exclamdown ; B 202 -146 398 449 ; +C 162 ; WX 600 ; N cent ; B 66 -49 518 614 ; +C 163 ; WX 600 ; N sterling ; B 72 -28 558 611 ; +C 164 ; WX 600 ; N fraction ; B 25 -60 576 661 ; +C 165 ; WX 600 ; N yen ; B 10 0 590 562 ; +C 166 ; WX 600 ; N florin ; B -30 -131 572 616 ; +C 167 ; WX 600 ; N section ; B 83 -70 517 580 ; +C 168 ; WX 600 ; N currency ; B 54 49 546 517 ; +C 169 ; WX 600 ; N quotesingle ; B 227 277 373 562 ; +C 170 ; WX 600 ; N quotedblleft ; B 71 277 535 562 ; +C 171 ; WX 600 ; N guillemotleft ; B 8 70 553 446 ; +C 172 ; WX 600 ; N guilsinglleft ; B 141 70 459 446 ; +C 173 ; WX 600 ; N guilsinglright ; B 141 70 459 446 ; +C 174 ; WX 600 ; N fi ; B 12 0 593 626 ; +C 175 ; WX 600 ; N fl ; B 12 0 593 626 ; +C 177 ; WX 600 ; N endash ; B 65 203 535 313 ; +C 178 ; WX 600 ; N dagger ; B 106 -70 494 580 ; +C 179 ; WX 600 ; N daggerdbl ; B 106 -70 494 580 ; +C 180 ; WX 600 ; N periodcentered ; B 196 165 404 351 ; +C 182 ; WX 600 ; N paragraph ; B 6 -70 576 580 ; +C 183 ; WX 600 ; N bullet ; B 140 132 460 430 ; +C 184 ; WX 600 ; N quotesinglbase ; B 175 -142 427 143 ; +C 185 ; WX 600 ; N quotedblbase ; B 65 -142 529 143 ; +C 186 ; WX 600 ; N quotedblright ; B 61 277 525 562 ; +C 187 ; WX 600 ; N guillemotright ; B 47 70 592 446 ; +C 188 ; WX 600 ; N ellipsis ; B 26 -15 574 116 ; +C 189 ; WX 600 ; N perthousand ; B -113 -15 713 616 ; +C 191 ; WX 600 ; N questiondown ; B 99 -146 502 449 ; +C 193 ; WX 600 ; N grave ; B 132 508 395 661 ; +C 194 ; WX 600 ; N acute ; B 205 508 468 661 ; +C 195 ; WX 600 ; N circumflex ; B 103 483 497 657 ; +C 196 ; WX 600 ; N tilde ; B 89 493 512 636 ; +C 197 ; WX 600 ; N macron ; B 88 505 512 585 ; +C 198 ; WX 600 ; N breve ; B 83 468 517 631 ; +C 199 ; WX 600 ; N dotaccent ; B 230 498 370 638 ; +C 200 ; WX 600 ; N dieresis ; B 128 498 472 638 ; +C 202 ; WX 600 ; N ring ; B 198 481 402 678 ; +C 203 ; WX 600 ; N cedilla ; B 205 -206 387 0 ; +C 205 ; WX 600 ; N hungarumlaut ; B 68 488 588 661 ; +C 206 ; WX 600 ; N ogonek ; B 169 -199 400 0 ; +C 207 ; WX 600 ; N caron ; B 103 493 497 667 ; +C 208 ; WX 600 ; N emdash ; B -10 203 610 313 ; +C 225 ; WX 600 ; N AE ; B -29 0 602 562 ; +C 227 ; WX 600 ; N ordfeminine ; B 147 196 453 580 ; +C 232 ; WX 600 ; N Lslash ; B 39 0 578 562 ; +C 233 ; WX 600 ; N Oslash ; B 22 -22 578 584 ; +C 234 ; WX 600 ; N OE ; B -25 0 595 562 ; +C 235 ; WX 600 ; N ordmasculine ; B 147 196 453 580 ; +C 241 ; WX 600 ; N ae ; B -4 -15 601 454 ; +C 245 ; WX 600 ; N dotlessi ; B 77 0 523 439 ; +C 248 ; WX 600 ; N lslash ; B 77 0 523 626 ; +C 249 ; WX 600 ; N oslash ; B 30 -24 570 463 ; +C 250 ; WX 600 ; N oe ; B -18 -15 611 454 ; +C 251 ; WX 600 ; N germandbls ; B 22 -15 596 626 ; +C -1 ; WX 600 ; N Idieresis ; B 77 0 523 761 ; +C -1 ; WX 600 ; N eacute ; B 40 -15 563 661 ; +C -1 ; WX 600 ; N abreve ; B 35 -15 570 661 ; +C -1 ; WX 600 ; N uhungarumlaut ; B -1 -15 628 661 ; +C -1 ; WX 600 ; N ecaron ; B 40 -15 563 667 ; +C -1 ; WX 600 ; N Ydieresis ; B 12 0 589 761 ; +C -1 ; WX 600 ; N divide ; B 71 16 529 500 ; +C -1 ; WX 600 ; N Yacute ; B 12 0 589 784 ; +C -1 ; WX 600 ; N Acircumflex ; B -9 0 609 780 ; +C -1 ; WX 600 ; N aacute ; B 35 -15 570 661 ; +C -1 ; WX 600 ; N Ucircumflex ; B 4 -18 596 780 ; +C -1 ; WX 600 ; N yacute ; B -4 -142 601 661 ; +C -1 ; WX 600 ; N scommaaccent ; B 68 -250 535 459 ; +C -1 ; WX 600 ; N ecircumflex ; B 40 -15 563 657 ; +C -1 ; WX 600 ; N Uring ; B 4 -18 596 801 ; +C -1 ; WX 600 ; N Udieresis ; B 4 -18 596 761 ; +C -1 ; WX 600 ; N aogonek ; B 35 -199 586 454 ; +C -1 ; WX 600 ; N Uacute ; B 4 -18 596 784 ; +C -1 ; WX 600 ; N uogonek ; B -1 -199 585 439 ; +C -1 ; WX 600 ; N Edieresis ; B 25 0 560 761 ; +C -1 ; WX 600 ; N Dcroat ; B 30 0 594 562 ; +C -1 ; WX 600 ; N commaaccent ; B 205 -250 397 -57 ; +C -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ; +C -1 ; WX 600 ; N Emacron ; B 25 0 560 708 ; +C -1 ; WX 600 ; N ccaron ; B 40 -15 545 667 ; +C -1 ; WX 600 ; N aring ; B 35 -15 570 678 ; +C -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 610 562 ; +C -1 ; WX 600 ; N lacute ; B 77 0 523 801 ; +C -1 ; WX 600 ; N agrave ; B 35 -15 570 661 ; +C -1 ; WX 600 ; N Tcommaaccent ; B 21 -250 579 562 ; +C -1 ; WX 600 ; N Cacute ; B 22 -18 560 784 ; +C -1 ; WX 600 ; N atilde ; B 35 -15 570 636 ; +C -1 ; WX 600 ; N Edotaccent ; B 25 0 560 761 ; +C -1 ; WX 600 ; N scaron ; B 68 -17 535 667 ; +C -1 ; WX 600 ; N scedilla ; B 68 -206 535 459 ; +C -1 ; WX 600 ; N iacute ; B 77 0 523 661 ; +C -1 ; WX 600 ; N lozenge ; B 66 0 534 740 ; +C -1 ; WX 600 ; N Rcaron ; B 24 0 599 790 ; +C -1 ; WX 600 ; N Gcommaaccent ; B 22 -250 594 580 ; +C -1 ; WX 600 ; N ucircumflex ; B -1 -15 569 657 ; +C -1 ; WX 600 ; N acircumflex ; B 35 -15 570 657 ; +C -1 ; WX 600 ; N Amacron ; B -9 0 609 708 ; +C -1 ; WX 600 ; N rcaron ; B 47 0 580 667 ; +C -1 ; WX 600 ; N ccedilla ; B 40 -206 545 459 ; +C -1 ; WX 600 ; N Zdotaccent ; B 62 0 539 761 ; +C -1 ; WX 600 ; N Thorn ; B 48 0 557 562 ; +C -1 ; WX 600 ; N Omacron ; B 22 -18 578 708 ; +C -1 ; WX 600 ; N Racute ; B 24 0 599 784 ; +C -1 ; WX 600 ; N Sacute ; B 47 -22 553 784 ; +C -1 ; WX 600 ; N dcaron ; B 20 -15 727 626 ; +C -1 ; WX 600 ; N Umacron ; B 4 -18 596 708 ; +C -1 ; WX 600 ; N uring ; B -1 -15 569 678 ; +C -1 ; WX 600 ; N threesuperior ; B 138 222 433 616 ; +C -1 ; WX 600 ; N Ograve ; B 22 -18 578 784 ; +C -1 ; WX 600 ; N Agrave ; B -9 0 609 784 ; +C -1 ; WX 600 ; N Abreve ; B -9 0 609 784 ; +C -1 ; WX 600 ; N multiply ; B 81 39 520 478 ; +C -1 ; WX 600 ; N uacute ; B -1 -15 569 661 ; +C -1 ; WX 600 ; N Tcaron ; B 21 0 579 790 ; +C -1 ; WX 600 ; N partialdiff ; B 63 -38 537 728 ; +C -1 ; WX 600 ; N ydieresis ; B -4 -142 601 638 ; +C -1 ; WX 600 ; N Nacute ; B 8 -12 610 784 ; +C -1 ; WX 600 ; N icircumflex ; B 73 0 523 657 ; +C -1 ; WX 600 ; N Ecircumflex ; B 25 0 560 780 ; +C -1 ; WX 600 ; N adieresis ; B 35 -15 570 638 ; +C -1 ; WX 600 ; N edieresis ; B 40 -15 563 638 ; +C -1 ; WX 600 ; N cacute ; B 40 -15 545 661 ; +C -1 ; WX 600 ; N nacute ; B 18 0 592 661 ; +C -1 ; WX 600 ; N umacron ; B -1 -15 569 585 ; +C -1 ; WX 600 ; N Ncaron ; B 8 -12 610 790 ; +C -1 ; WX 600 ; N Iacute ; B 77 0 523 784 ; +C -1 ; WX 600 ; N plusminus ; B 71 24 529 515 ; +C -1 ; WX 600 ; N brokenbar ; B 255 -175 345 675 ; +C -1 ; WX 600 ; N registered ; B 0 -18 600 580 ; +C -1 ; WX 600 ; N Gbreve ; B 22 -18 594 784 ; +C -1 ; WX 600 ; N Idotaccent ; B 77 0 523 761 ; +C -1 ; WX 600 ; N summation ; B 15 -10 586 706 ; +C -1 ; WX 600 ; N Egrave ; B 25 0 560 784 ; +C -1 ; WX 600 ; N racute ; B 47 0 580 661 ; +C -1 ; WX 600 ; N omacron ; B 30 -15 570 585 ; +C -1 ; WX 600 ; N Zacute ; B 62 0 539 784 ; +C -1 ; WX 600 ; N Zcaron ; B 62 0 539 790 ; +C -1 ; WX 600 ; N greaterequal ; B 26 0 523 696 ; +C -1 ; WX 600 ; N Eth ; B 30 0 594 562 ; +C -1 ; WX 600 ; N Ccedilla ; B 22 -206 560 580 ; +C -1 ; WX 600 ; N lcommaaccent ; B 77 -250 523 626 ; +C -1 ; WX 600 ; N tcaron ; B 47 -15 532 703 ; +C -1 ; WX 600 ; N eogonek ; B 40 -199 563 454 ; +C -1 ; WX 600 ; N Uogonek ; B 4 -199 596 562 ; +C -1 ; WX 600 ; N Aacute ; B -9 0 609 784 ; +C -1 ; WX 600 ; N Adieresis ; B -9 0 609 761 ; +C -1 ; WX 600 ; N egrave ; B 40 -15 563 661 ; +C -1 ; WX 600 ; N zacute ; B 81 0 520 661 ; +C -1 ; WX 600 ; N iogonek ; B 77 -199 523 658 ; +C -1 ; WX 600 ; N Oacute ; B 22 -18 578 784 ; +C -1 ; WX 600 ; N oacute ; B 30 -15 570 661 ; +C -1 ; WX 600 ; N amacron ; B 35 -15 570 585 ; +C -1 ; WX 600 ; N sacute ; B 68 -17 535 661 ; +C -1 ; WX 600 ; N idieresis ; B 77 0 523 618 ; +C -1 ; WX 600 ; N Ocircumflex ; B 22 -18 578 780 ; +C -1 ; WX 600 ; N Ugrave ; B 4 -18 596 784 ; +C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ; +C -1 ; WX 600 ; N thorn ; B -14 -142 570 626 ; +C -1 ; WX 600 ; N twosuperior ; B 143 230 436 616 ; +C -1 ; WX 600 ; N Odieresis ; B 22 -18 578 761 ; +C -1 ; WX 600 ; N mu ; B -1 -142 569 439 ; +C -1 ; WX 600 ; N igrave ; B 77 0 523 661 ; +C -1 ; WX 600 ; N ohungarumlaut ; B 30 -15 668 661 ; +C -1 ; WX 600 ; N Eogonek ; B 25 -199 576 562 ; +C -1 ; WX 600 ; N dcroat ; B 20 -15 591 626 ; +C -1 ; WX 600 ; N threequarters ; B -47 -60 648 661 ; +C -1 ; WX 600 ; N Scedilla ; B 47 -206 553 582 ; +C -1 ; WX 600 ; N lcaron ; B 77 0 597 626 ; +C -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 599 562 ; +C -1 ; WX 600 ; N Lacute ; B 39 0 578 784 ; +C -1 ; WX 600 ; N trademark ; B -9 230 749 562 ; +C -1 ; WX 600 ; N edotaccent ; B 40 -15 563 638 ; +C -1 ; WX 600 ; N Igrave ; B 77 0 523 784 ; +C -1 ; WX 600 ; N Imacron ; B 77 0 523 708 ; +C -1 ; WX 600 ; N Lcaron ; B 39 0 637 562 ; +C -1 ; WX 600 ; N onehalf ; B -47 -60 648 661 ; +C -1 ; WX 600 ; N lessequal ; B 26 0 523 696 ; +C -1 ; WX 600 ; N ocircumflex ; B 30 -15 570 657 ; +C -1 ; WX 600 ; N ntilde ; B 18 0 592 636 ; +C -1 ; WX 600 ; N Uhungarumlaut ; B 4 -18 638 784 ; +C -1 ; WX 600 ; N Eacute ; B 25 0 560 784 ; +C -1 ; WX 600 ; N emacron ; B 40 -15 563 585 ; +C -1 ; WX 600 ; N gbreve ; B 30 -146 580 661 ; +C -1 ; WX 600 ; N onequarter ; B -56 -60 656 661 ; +C -1 ; WX 600 ; N Scaron ; B 47 -22 553 790 ; +C -1 ; WX 600 ; N Scommaaccent ; B 47 -250 553 582 ; +C -1 ; WX 600 ; N Ohungarumlaut ; B 22 -18 628 784 ; +C -1 ; WX 600 ; N degree ; B 86 243 474 616 ; +C -1 ; WX 600 ; N ograve ; B 30 -15 570 661 ; +C -1 ; WX 600 ; N Ccaron ; B 22 -18 560 790 ; +C -1 ; WX 600 ; N ugrave ; B -1 -15 569 661 ; +C -1 ; WX 600 ; N radical ; B -19 -104 473 778 ; +C -1 ; WX 600 ; N Dcaron ; B 30 0 594 790 ; +C -1 ; WX 600 ; N rcommaaccent ; B 47 -250 580 454 ; +C -1 ; WX 600 ; N Ntilde ; B 8 -12 610 759 ; +C -1 ; WX 600 ; N otilde ; B 30 -15 570 636 ; +C -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 599 562 ; +C -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 578 562 ; +C -1 ; WX 600 ; N Atilde ; B -9 0 609 759 ; +C -1 ; WX 600 ; N Aogonek ; B -9 -199 625 562 ; +C -1 ; WX 600 ; N Aring ; B -9 0 609 801 ; +C -1 ; WX 600 ; N Otilde ; B 22 -18 578 759 ; +C -1 ; WX 600 ; N zdotaccent ; B 81 0 520 638 ; +C -1 ; WX 600 ; N Ecaron ; B 25 0 560 790 ; +C -1 ; WX 600 ; N Iogonek ; B 77 -199 523 562 ; +C -1 ; WX 600 ; N kcommaaccent ; B 20 -250 585 626 ; +C -1 ; WX 600 ; N minus ; B 71 203 529 313 ; +C -1 ; WX 600 ; N Icircumflex ; B 77 0 523 780 ; +C -1 ; WX 600 ; N ncaron ; B 18 0 592 667 ; +C -1 ; WX 600 ; N tcommaaccent ; B 47 -250 532 562 ; +C -1 ; WX 600 ; N logicalnot ; B 71 103 529 413 ; +C -1 ; WX 600 ; N odieresis ; B 30 -15 570 638 ; +C -1 ; WX 600 ; N udieresis ; B -1 -15 569 638 ; +C -1 ; WX 600 ; N notequal ; B 12 -47 537 563 ; +C -1 ; WX 600 ; N gcommaaccent ; B 30 -146 580 714 ; +C -1 ; WX 600 ; N eth ; B 58 -27 543 626 ; +C -1 ; WX 600 ; N zcaron ; B 81 0 520 667 ; +C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 592 454 ; +C -1 ; WX 600 ; N onesuperior ; B 153 230 447 616 ; +C -1 ; WX 600 ; N imacron ; B 77 0 523 585 ; +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier-BoldOblique.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier-BoldOblique.afm new file mode 100644 index 000000000..29d3b8b10 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier-BoldOblique.afm @@ -0,0 +1,342 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Mon Jun 23 16:28:46 1997 +Comment UniqueID 43049 +Comment VMusage 17529 79244 +FontName Courier-BoldOblique +FullName Courier Bold Oblique +FamilyName Courier +Weight Bold +ItalicAngle -12 +IsFixedPitch true +CharacterSet ExtendedRoman +FontBBox -57 -250 869 801 +UnderlinePosition -100 +UnderlineThickness 50 +Version 003.000 +Notice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +EncodingScheme AdobeStandardEncoding +CapHeight 562 +XHeight 439 +Ascender 629 +Descender -157 +StdHW 84 +StdVW 106 +StartCharMetrics 315 +C 32 ; WX 600 ; N space ; B 0 0 0 0 ; +C 33 ; WX 600 ; N exclam ; B 215 -15 495 572 ; +C 34 ; WX 600 ; N quotedbl ; B 211 277 585 562 ; +C 35 ; WX 600 ; N numbersign ; B 88 -45 641 651 ; +C 36 ; WX 600 ; N dollar ; B 87 -126 630 666 ; +C 37 ; WX 600 ; N percent ; B 101 -15 625 616 ; +C 38 ; WX 600 ; N ampersand ; B 61 -15 595 543 ; +C 39 ; WX 600 ; N quoteright ; B 229 277 543 562 ; +C 40 ; WX 600 ; N parenleft ; B 265 -102 592 616 ; +C 41 ; WX 600 ; N parenright ; B 117 -102 444 616 ; +C 42 ; WX 600 ; N asterisk ; B 179 219 598 601 ; +C 43 ; WX 600 ; N plus ; B 114 39 596 478 ; +C 44 ; WX 600 ; N comma ; B 99 -111 430 174 ; +C 45 ; WX 600 ; N hyphen ; B 143 203 567 313 ; +C 46 ; WX 600 ; N period ; B 206 -15 427 171 ; +C 47 ; WX 600 ; N slash ; B 90 -77 626 626 ; +C 48 ; WX 600 ; N zero ; B 135 -15 593 616 ; +C 49 ; WX 600 ; N one ; B 93 0 562 616 ; +C 50 ; WX 600 ; N two ; B 61 0 594 616 ; +C 51 ; WX 600 ; N three ; B 71 -15 571 616 ; +C 52 ; WX 600 ; N four ; B 81 0 559 616 ; +C 53 ; WX 600 ; N five ; B 77 -15 621 601 ; +C 54 ; WX 600 ; N six ; B 135 -15 652 616 ; +C 55 ; WX 600 ; N seven ; B 147 0 622 601 ; +C 56 ; WX 600 ; N eight ; B 115 -15 604 616 ; +C 57 ; WX 600 ; N nine ; B 75 -15 592 616 ; +C 58 ; WX 600 ; N colon ; B 205 -15 480 425 ; +C 59 ; WX 600 ; N semicolon ; B 99 -111 481 425 ; +C 60 ; WX 600 ; N less ; B 120 15 613 501 ; +C 61 ; WX 600 ; N equal ; B 96 118 614 398 ; +C 62 ; WX 600 ; N greater ; B 97 15 589 501 ; +C 63 ; WX 600 ; N question ; B 183 -14 592 580 ; +C 64 ; WX 600 ; N at ; B 65 -15 642 616 ; +C 65 ; WX 600 ; N A ; B -9 0 632 562 ; +C 66 ; WX 600 ; N B ; B 30 0 630 562 ; +C 67 ; WX 600 ; N C ; B 74 -18 675 580 ; +C 68 ; WX 600 ; N D ; B 30 0 664 562 ; +C 69 ; WX 600 ; N E ; B 25 0 670 562 ; +C 70 ; WX 600 ; N F ; B 39 0 684 562 ; +C 71 ; WX 600 ; N G ; B 74 -18 675 580 ; +C 72 ; WX 600 ; N H ; B 20 0 700 562 ; +C 73 ; WX 600 ; N I ; B 77 0 643 562 ; +C 74 ; WX 600 ; N J ; B 58 -18 721 562 ; +C 75 ; WX 600 ; N K ; B 21 0 692 562 ; +C 76 ; WX 600 ; N L ; B 39 0 636 562 ; +C 77 ; WX 600 ; N M ; B -2 0 722 562 ; +C 78 ; WX 600 ; N N ; B 8 -12 730 562 ; +C 79 ; WX 600 ; N O ; B 74 -18 645 580 ; +C 80 ; WX 600 ; N P ; B 48 0 643 562 ; +C 81 ; WX 600 ; N Q ; B 83 -138 636 580 ; +C 82 ; WX 600 ; N R ; B 24 0 617 562 ; +C 83 ; WX 600 ; N S ; B 54 -22 673 582 ; +C 84 ; WX 600 ; N T ; B 86 0 679 562 ; +C 85 ; WX 600 ; N U ; B 101 -18 716 562 ; +C 86 ; WX 600 ; N V ; B 84 0 733 562 ; +C 87 ; WX 600 ; N W ; B 79 0 738 562 ; +C 88 ; WX 600 ; N X ; B 12 0 690 562 ; +C 89 ; WX 600 ; N Y ; B 109 0 709 562 ; +C 90 ; WX 600 ; N Z ; B 62 0 637 562 ; +C 91 ; WX 600 ; N bracketleft ; B 223 -102 606 616 ; +C 92 ; WX 600 ; N backslash ; B 222 -77 496 626 ; +C 93 ; WX 600 ; N bracketright ; B 103 -102 486 616 ; +C 94 ; WX 600 ; N asciicircum ; B 171 250 556 616 ; +C 95 ; WX 600 ; N underscore ; B -27 -125 585 -75 ; +C 96 ; WX 600 ; N quoteleft ; B 297 277 487 562 ; +C 97 ; WX 600 ; N a ; B 61 -15 593 454 ; +C 98 ; WX 600 ; N b ; B 13 -15 636 626 ; +C 99 ; WX 600 ; N c ; B 81 -15 631 459 ; +C 100 ; WX 600 ; N d ; B 60 -15 645 626 ; +C 101 ; WX 600 ; N e ; B 81 -15 605 454 ; +C 102 ; WX 600 ; N f ; B 83 0 677 626 ; L i fi ; L l fl ; +C 103 ; WX 600 ; N g ; B 40 -146 674 454 ; +C 104 ; WX 600 ; N h ; B 18 0 615 626 ; +C 105 ; WX 600 ; N i ; B 77 0 546 658 ; +C 106 ; WX 600 ; N j ; B 36 -146 580 658 ; +C 107 ; WX 600 ; N k ; B 33 0 643 626 ; +C 108 ; WX 600 ; N l ; B 77 0 546 626 ; +C 109 ; WX 600 ; N m ; B -22 0 649 454 ; +C 110 ; WX 600 ; N n ; B 18 0 615 454 ; +C 111 ; WX 600 ; N o ; B 71 -15 622 454 ; +C 112 ; WX 600 ; N p ; B -32 -142 622 454 ; +C 113 ; WX 600 ; N q ; B 60 -142 685 454 ; +C 114 ; WX 600 ; N r ; B 47 0 655 454 ; +C 115 ; WX 600 ; N s ; B 66 -17 608 459 ; +C 116 ; WX 600 ; N t ; B 118 -15 567 562 ; +C 117 ; WX 600 ; N u ; B 70 -15 592 439 ; +C 118 ; WX 600 ; N v ; B 70 0 695 439 ; +C 119 ; WX 600 ; N w ; B 53 0 712 439 ; +C 120 ; WX 600 ; N x ; B 6 0 671 439 ; +C 121 ; WX 600 ; N y ; B -21 -142 695 439 ; +C 122 ; WX 600 ; N z ; B 81 0 614 439 ; +C 123 ; WX 600 ; N braceleft ; B 203 -102 595 616 ; +C 124 ; WX 600 ; N bar ; B 201 -250 505 750 ; +C 125 ; WX 600 ; N braceright ; B 114 -102 506 616 ; +C 126 ; WX 600 ; N asciitilde ; B 120 153 590 356 ; +C 161 ; WX 600 ; N exclamdown ; B 196 -146 477 449 ; +C 162 ; WX 600 ; N cent ; B 121 -49 605 614 ; +C 163 ; WX 600 ; N sterling ; B 106 -28 650 611 ; +C 164 ; WX 600 ; N fraction ; B 22 -60 708 661 ; +C 165 ; WX 600 ; N yen ; B 98 0 710 562 ; +C 166 ; WX 600 ; N florin ; B -57 -131 702 616 ; +C 167 ; WX 600 ; N section ; B 74 -70 620 580 ; +C 168 ; WX 600 ; N currency ; B 77 49 644 517 ; +C 169 ; WX 600 ; N quotesingle ; B 303 277 493 562 ; +C 170 ; WX 600 ; N quotedblleft ; B 190 277 594 562 ; +C 171 ; WX 600 ; N guillemotleft ; B 62 70 639 446 ; +C 172 ; WX 600 ; N guilsinglleft ; B 195 70 545 446 ; +C 173 ; WX 600 ; N guilsinglright ; B 165 70 514 446 ; +C 174 ; WX 600 ; N fi ; B 12 0 644 626 ; +C 175 ; WX 600 ; N fl ; B 12 0 644 626 ; +C 177 ; WX 600 ; N endash ; B 108 203 602 313 ; +C 178 ; WX 600 ; N dagger ; B 175 -70 586 580 ; +C 179 ; WX 600 ; N daggerdbl ; B 121 -70 587 580 ; +C 180 ; WX 600 ; N periodcentered ; B 248 165 461 351 ; +C 182 ; WX 600 ; N paragraph ; B 61 -70 700 580 ; +C 183 ; WX 600 ; N bullet ; B 196 132 523 430 ; +C 184 ; WX 600 ; N quotesinglbase ; B 144 -142 458 143 ; +C 185 ; WX 600 ; N quotedblbase ; B 34 -142 560 143 ; +C 186 ; WX 600 ; N quotedblright ; B 119 277 645 562 ; +C 187 ; WX 600 ; N guillemotright ; B 71 70 647 446 ; +C 188 ; WX 600 ; N ellipsis ; B 35 -15 587 116 ; +C 189 ; WX 600 ; N perthousand ; B -45 -15 743 616 ; +C 191 ; WX 600 ; N questiondown ; B 100 -146 509 449 ; +C 193 ; WX 600 ; N grave ; B 272 508 503 661 ; +C 194 ; WX 600 ; N acute ; B 312 508 609 661 ; +C 195 ; WX 600 ; N circumflex ; B 212 483 607 657 ; +C 196 ; WX 600 ; N tilde ; B 199 493 643 636 ; +C 197 ; WX 600 ; N macron ; B 195 505 637 585 ; +C 198 ; WX 600 ; N breve ; B 217 468 652 631 ; +C 199 ; WX 600 ; N dotaccent ; B 348 498 493 638 ; +C 200 ; WX 600 ; N dieresis ; B 246 498 595 638 ; +C 202 ; WX 600 ; N ring ; B 319 481 528 678 ; +C 203 ; WX 600 ; N cedilla ; B 168 -206 368 0 ; +C 205 ; WX 600 ; N hungarumlaut ; B 171 488 729 661 ; +C 206 ; WX 600 ; N ogonek ; B 143 -199 367 0 ; +C 207 ; WX 600 ; N caron ; B 238 493 633 667 ; +C 208 ; WX 600 ; N emdash ; B 33 203 677 313 ; +C 225 ; WX 600 ; N AE ; B -29 0 708 562 ; +C 227 ; WX 600 ; N ordfeminine ; B 188 196 526 580 ; +C 232 ; WX 600 ; N Lslash ; B 39 0 636 562 ; +C 233 ; WX 600 ; N Oslash ; B 48 -22 673 584 ; +C 234 ; WX 600 ; N OE ; B 26 0 701 562 ; +C 235 ; WX 600 ; N ordmasculine ; B 188 196 543 580 ; +C 241 ; WX 600 ; N ae ; B 21 -15 652 454 ; +C 245 ; WX 600 ; N dotlessi ; B 77 0 546 439 ; +C 248 ; WX 600 ; N lslash ; B 77 0 587 626 ; +C 249 ; WX 600 ; N oslash ; B 54 -24 638 463 ; +C 250 ; WX 600 ; N oe ; B 18 -15 662 454 ; +C 251 ; WX 600 ; N germandbls ; B 22 -15 629 626 ; +C -1 ; WX 600 ; N Idieresis ; B 77 0 643 761 ; +C -1 ; WX 600 ; N eacute ; B 81 -15 609 661 ; +C -1 ; WX 600 ; N abreve ; B 61 -15 658 661 ; +C -1 ; WX 600 ; N uhungarumlaut ; B 70 -15 769 661 ; +C -1 ; WX 600 ; N ecaron ; B 81 -15 633 667 ; +C -1 ; WX 600 ; N Ydieresis ; B 109 0 709 761 ; +C -1 ; WX 600 ; N divide ; B 114 16 596 500 ; +C -1 ; WX 600 ; N Yacute ; B 109 0 709 784 ; +C -1 ; WX 600 ; N Acircumflex ; B -9 0 632 780 ; +C -1 ; WX 600 ; N aacute ; B 61 -15 609 661 ; +C -1 ; WX 600 ; N Ucircumflex ; B 101 -18 716 780 ; +C -1 ; WX 600 ; N yacute ; B -21 -142 695 661 ; +C -1 ; WX 600 ; N scommaaccent ; B 66 -250 608 459 ; +C -1 ; WX 600 ; N ecircumflex ; B 81 -15 607 657 ; +C -1 ; WX 600 ; N Uring ; B 101 -18 716 801 ; +C -1 ; WX 600 ; N Udieresis ; B 101 -18 716 761 ; +C -1 ; WX 600 ; N aogonek ; B 61 -199 593 454 ; +C -1 ; WX 600 ; N Uacute ; B 101 -18 716 784 ; +C -1 ; WX 600 ; N uogonek ; B 70 -199 592 439 ; +C -1 ; WX 600 ; N Edieresis ; B 25 0 670 761 ; +C -1 ; WX 600 ; N Dcroat ; B 30 0 664 562 ; +C -1 ; WX 600 ; N commaaccent ; B 151 -250 385 -57 ; +C -1 ; WX 600 ; N copyright ; B 53 -18 667 580 ; +C -1 ; WX 600 ; N Emacron ; B 25 0 670 708 ; +C -1 ; WX 600 ; N ccaron ; B 81 -15 633 667 ; +C -1 ; WX 600 ; N aring ; B 61 -15 593 678 ; +C -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 730 562 ; +C -1 ; WX 600 ; N lacute ; B 77 0 639 801 ; +C -1 ; WX 600 ; N agrave ; B 61 -15 593 661 ; +C -1 ; WX 600 ; N Tcommaaccent ; B 86 -250 679 562 ; +C -1 ; WX 600 ; N Cacute ; B 74 -18 675 784 ; +C -1 ; WX 600 ; N atilde ; B 61 -15 643 636 ; +C -1 ; WX 600 ; N Edotaccent ; B 25 0 670 761 ; +C -1 ; WX 600 ; N scaron ; B 66 -17 633 667 ; +C -1 ; WX 600 ; N scedilla ; B 66 -206 608 459 ; +C -1 ; WX 600 ; N iacute ; B 77 0 609 661 ; +C -1 ; WX 600 ; N lozenge ; B 145 0 614 740 ; +C -1 ; WX 600 ; N Rcaron ; B 24 0 659 790 ; +C -1 ; WX 600 ; N Gcommaaccent ; B 74 -250 675 580 ; +C -1 ; WX 600 ; N ucircumflex ; B 70 -15 597 657 ; +C -1 ; WX 600 ; N acircumflex ; B 61 -15 607 657 ; +C -1 ; WX 600 ; N Amacron ; B -9 0 633 708 ; +C -1 ; WX 600 ; N rcaron ; B 47 0 655 667 ; +C -1 ; WX 600 ; N ccedilla ; B 81 -206 631 459 ; +C -1 ; WX 600 ; N Zdotaccent ; B 62 0 637 761 ; +C -1 ; WX 600 ; N Thorn ; B 48 0 620 562 ; +C -1 ; WX 600 ; N Omacron ; B 74 -18 663 708 ; +C -1 ; WX 600 ; N Racute ; B 24 0 665 784 ; +C -1 ; WX 600 ; N Sacute ; B 54 -22 673 784 ; +C -1 ; WX 600 ; N dcaron ; B 60 -15 861 626 ; +C -1 ; WX 600 ; N Umacron ; B 101 -18 716 708 ; +C -1 ; WX 600 ; N uring ; B 70 -15 592 678 ; +C -1 ; WX 600 ; N threesuperior ; B 193 222 526 616 ; +C -1 ; WX 600 ; N Ograve ; B 74 -18 645 784 ; +C -1 ; WX 600 ; N Agrave ; B -9 0 632 784 ; +C -1 ; WX 600 ; N Abreve ; B -9 0 684 784 ; +C -1 ; WX 600 ; N multiply ; B 104 39 606 478 ; +C -1 ; WX 600 ; N uacute ; B 70 -15 599 661 ; +C -1 ; WX 600 ; N Tcaron ; B 86 0 679 790 ; +C -1 ; WX 600 ; N partialdiff ; B 91 -38 627 728 ; +C -1 ; WX 600 ; N ydieresis ; B -21 -142 695 638 ; +C -1 ; WX 600 ; N Nacute ; B 8 -12 730 784 ; +C -1 ; WX 600 ; N icircumflex ; B 77 0 577 657 ; +C -1 ; WX 600 ; N Ecircumflex ; B 25 0 670 780 ; +C -1 ; WX 600 ; N adieresis ; B 61 -15 595 638 ; +C -1 ; WX 600 ; N edieresis ; B 81 -15 605 638 ; +C -1 ; WX 600 ; N cacute ; B 81 -15 649 661 ; +C -1 ; WX 600 ; N nacute ; B 18 0 639 661 ; +C -1 ; WX 600 ; N umacron ; B 70 -15 637 585 ; +C -1 ; WX 600 ; N Ncaron ; B 8 -12 730 790 ; +C -1 ; WX 600 ; N Iacute ; B 77 0 643 784 ; +C -1 ; WX 600 ; N plusminus ; B 76 24 614 515 ; +C -1 ; WX 600 ; N brokenbar ; B 217 -175 489 675 ; +C -1 ; WX 600 ; N registered ; B 53 -18 667 580 ; +C -1 ; WX 600 ; N Gbreve ; B 74 -18 684 784 ; +C -1 ; WX 600 ; N Idotaccent ; B 77 0 643 761 ; +C -1 ; WX 600 ; N summation ; B 15 -10 672 706 ; +C -1 ; WX 600 ; N Egrave ; B 25 0 670 784 ; +C -1 ; WX 600 ; N racute ; B 47 0 655 661 ; +C -1 ; WX 600 ; N omacron ; B 71 -15 637 585 ; +C -1 ; WX 600 ; N Zacute ; B 62 0 665 784 ; +C -1 ; WX 600 ; N Zcaron ; B 62 0 659 790 ; +C -1 ; WX 600 ; N greaterequal ; B 26 0 627 696 ; +C -1 ; WX 600 ; N Eth ; B 30 0 664 562 ; +C -1 ; WX 600 ; N Ccedilla ; B 74 -206 675 580 ; +C -1 ; WX 600 ; N lcommaaccent ; B 77 -250 546 626 ; +C -1 ; WX 600 ; N tcaron ; B 118 -15 627 703 ; +C -1 ; WX 600 ; N eogonek ; B 81 -199 605 454 ; +C -1 ; WX 600 ; N Uogonek ; B 101 -199 716 562 ; +C -1 ; WX 600 ; N Aacute ; B -9 0 655 784 ; +C -1 ; WX 600 ; N Adieresis ; B -9 0 632 761 ; +C -1 ; WX 600 ; N egrave ; B 81 -15 605 661 ; +C -1 ; WX 600 ; N zacute ; B 81 0 614 661 ; +C -1 ; WX 600 ; N iogonek ; B 77 -199 546 658 ; +C -1 ; WX 600 ; N Oacute ; B 74 -18 645 784 ; +C -1 ; WX 600 ; N oacute ; B 71 -15 649 661 ; +C -1 ; WX 600 ; N amacron ; B 61 -15 637 585 ; +C -1 ; WX 600 ; N sacute ; B 66 -17 609 661 ; +C -1 ; WX 600 ; N idieresis ; B 77 0 561 618 ; +C -1 ; WX 600 ; N Ocircumflex ; B 74 -18 645 780 ; +C -1 ; WX 600 ; N Ugrave ; B 101 -18 716 784 ; +C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ; +C -1 ; WX 600 ; N thorn ; B -32 -142 622 626 ; +C -1 ; WX 600 ; N twosuperior ; B 191 230 542 616 ; +C -1 ; WX 600 ; N Odieresis ; B 74 -18 645 761 ; +C -1 ; WX 600 ; N mu ; B 49 -142 592 439 ; +C -1 ; WX 600 ; N igrave ; B 77 0 546 661 ; +C -1 ; WX 600 ; N ohungarumlaut ; B 71 -15 809 661 ; +C -1 ; WX 600 ; N Eogonek ; B 25 -199 670 562 ; +C -1 ; WX 600 ; N dcroat ; B 60 -15 712 626 ; +C -1 ; WX 600 ; N threequarters ; B 8 -60 699 661 ; +C -1 ; WX 600 ; N Scedilla ; B 54 -206 673 582 ; +C -1 ; WX 600 ; N lcaron ; B 77 0 731 626 ; +C -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 692 562 ; +C -1 ; WX 600 ; N Lacute ; B 39 0 636 784 ; +C -1 ; WX 600 ; N trademark ; B 86 230 869 562 ; +C -1 ; WX 600 ; N edotaccent ; B 81 -15 605 638 ; +C -1 ; WX 600 ; N Igrave ; B 77 0 643 784 ; +C -1 ; WX 600 ; N Imacron ; B 77 0 663 708 ; +C -1 ; WX 600 ; N Lcaron ; B 39 0 757 562 ; +C -1 ; WX 600 ; N onehalf ; B 22 -60 716 661 ; +C -1 ; WX 600 ; N lessequal ; B 26 0 671 696 ; +C -1 ; WX 600 ; N ocircumflex ; B 71 -15 622 657 ; +C -1 ; WX 600 ; N ntilde ; B 18 0 643 636 ; +C -1 ; WX 600 ; N Uhungarumlaut ; B 101 -18 805 784 ; +C -1 ; WX 600 ; N Eacute ; B 25 0 670 784 ; +C -1 ; WX 600 ; N emacron ; B 81 -15 637 585 ; +C -1 ; WX 600 ; N gbreve ; B 40 -146 674 661 ; +C -1 ; WX 600 ; N onequarter ; B 13 -60 707 661 ; +C -1 ; WX 600 ; N Scaron ; B 54 -22 689 790 ; +C -1 ; WX 600 ; N Scommaaccent ; B 54 -250 673 582 ; +C -1 ; WX 600 ; N Ohungarumlaut ; B 74 -18 795 784 ; +C -1 ; WX 600 ; N degree ; B 173 243 570 616 ; +C -1 ; WX 600 ; N ograve ; B 71 -15 622 661 ; +C -1 ; WX 600 ; N Ccaron ; B 74 -18 689 790 ; +C -1 ; WX 600 ; N ugrave ; B 70 -15 592 661 ; +C -1 ; WX 600 ; N radical ; B 67 -104 635 778 ; +C -1 ; WX 600 ; N Dcaron ; B 30 0 664 790 ; +C -1 ; WX 600 ; N rcommaaccent ; B 47 -250 655 454 ; +C -1 ; WX 600 ; N Ntilde ; B 8 -12 730 759 ; +C -1 ; WX 600 ; N otilde ; B 71 -15 643 636 ; +C -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 617 562 ; +C -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 636 562 ; +C -1 ; WX 600 ; N Atilde ; B -9 0 669 759 ; +C -1 ; WX 600 ; N Aogonek ; B -9 -199 632 562 ; +C -1 ; WX 600 ; N Aring ; B -9 0 632 801 ; +C -1 ; WX 600 ; N Otilde ; B 74 -18 669 759 ; +C -1 ; WX 600 ; N zdotaccent ; B 81 0 614 638 ; +C -1 ; WX 600 ; N Ecaron ; B 25 0 670 790 ; +C -1 ; WX 600 ; N Iogonek ; B 77 -199 643 562 ; +C -1 ; WX 600 ; N kcommaaccent ; B 33 -250 643 626 ; +C -1 ; WX 600 ; N minus ; B 114 203 596 313 ; +C -1 ; WX 600 ; N Icircumflex ; B 77 0 643 780 ; +C -1 ; WX 600 ; N ncaron ; B 18 0 633 667 ; +C -1 ; WX 600 ; N tcommaaccent ; B 118 -250 567 562 ; +C -1 ; WX 600 ; N logicalnot ; B 135 103 617 413 ; +C -1 ; WX 600 ; N odieresis ; B 71 -15 622 638 ; +C -1 ; WX 600 ; N udieresis ; B 70 -15 595 638 ; +C -1 ; WX 600 ; N notequal ; B 30 -47 626 563 ; +C -1 ; WX 600 ; N gcommaaccent ; B 40 -146 674 714 ; +C -1 ; WX 600 ; N eth ; B 93 -27 661 626 ; +C -1 ; WX 600 ; N zcaron ; B 81 0 643 667 ; +C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 615 454 ; +C -1 ; WX 600 ; N onesuperior ; B 212 230 514 616 ; +C -1 ; WX 600 ; N imacron ; B 77 0 575 585 ; +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier-Oblique.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier-Oblique.afm new file mode 100644 index 000000000..3dc163f77 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier-Oblique.afm @@ -0,0 +1,342 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 17:37:52 1997 +Comment UniqueID 43051 +Comment VMusage 16248 75829 +FontName Courier-Oblique +FullName Courier Oblique +FamilyName Courier +Weight Medium +ItalicAngle -12 +IsFixedPitch true +CharacterSet ExtendedRoman +FontBBox -27 -250 849 805 +UnderlinePosition -100 +UnderlineThickness 50 +Version 003.000 +Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +EncodingScheme AdobeStandardEncoding +CapHeight 562 +XHeight 426 +Ascender 629 +Descender -157 +StdHW 51 +StdVW 51 +StartCharMetrics 315 +C 32 ; WX 600 ; N space ; B 0 0 0 0 ; +C 33 ; WX 600 ; N exclam ; B 243 -15 464 572 ; +C 34 ; WX 600 ; N quotedbl ; B 273 328 532 562 ; +C 35 ; WX 600 ; N numbersign ; B 133 -32 596 639 ; +C 36 ; WX 600 ; N dollar ; B 108 -126 596 662 ; +C 37 ; WX 600 ; N percent ; B 134 -15 599 622 ; +C 38 ; WX 600 ; N ampersand ; B 87 -15 580 543 ; +C 39 ; WX 600 ; N quoteright ; B 283 328 495 562 ; +C 40 ; WX 600 ; N parenleft ; B 313 -108 572 622 ; +C 41 ; WX 600 ; N parenright ; B 137 -108 396 622 ; +C 42 ; WX 600 ; N asterisk ; B 212 257 580 607 ; +C 43 ; WX 600 ; N plus ; B 129 44 580 470 ; +C 44 ; WX 600 ; N comma ; B 157 -112 370 122 ; +C 45 ; WX 600 ; N hyphen ; B 152 231 558 285 ; +C 46 ; WX 600 ; N period ; B 238 -15 382 109 ; +C 47 ; WX 600 ; N slash ; B 112 -80 604 629 ; +C 48 ; WX 600 ; N zero ; B 154 -15 575 622 ; +C 49 ; WX 600 ; N one ; B 98 0 515 622 ; +C 50 ; WX 600 ; N two ; B 70 0 568 622 ; +C 51 ; WX 600 ; N three ; B 82 -15 538 622 ; +C 52 ; WX 600 ; N four ; B 108 0 541 622 ; +C 53 ; WX 600 ; N five ; B 99 -15 589 607 ; +C 54 ; WX 600 ; N six ; B 155 -15 629 622 ; +C 55 ; WX 600 ; N seven ; B 182 0 612 607 ; +C 56 ; WX 600 ; N eight ; B 132 -15 588 622 ; +C 57 ; WX 600 ; N nine ; B 93 -15 574 622 ; +C 58 ; WX 600 ; N colon ; B 238 -15 441 385 ; +C 59 ; WX 600 ; N semicolon ; B 157 -112 441 385 ; +C 60 ; WX 600 ; N less ; B 96 42 610 472 ; +C 61 ; WX 600 ; N equal ; B 109 138 600 376 ; +C 62 ; WX 600 ; N greater ; B 85 42 599 472 ; +C 63 ; WX 600 ; N question ; B 222 -15 583 572 ; +C 64 ; WX 600 ; N at ; B 127 -15 582 622 ; +C 65 ; WX 600 ; N A ; B 3 0 607 562 ; +C 66 ; WX 600 ; N B ; B 43 0 616 562 ; +C 67 ; WX 600 ; N C ; B 93 -18 655 580 ; +C 68 ; WX 600 ; N D ; B 43 0 645 562 ; +C 69 ; WX 600 ; N E ; B 53 0 660 562 ; +C 70 ; WX 600 ; N F ; B 53 0 660 562 ; +C 71 ; WX 600 ; N G ; B 83 -18 645 580 ; +C 72 ; WX 600 ; N H ; B 32 0 687 562 ; +C 73 ; WX 600 ; N I ; B 96 0 623 562 ; +C 74 ; WX 600 ; N J ; B 52 -18 685 562 ; +C 75 ; WX 600 ; N K ; B 38 0 671 562 ; +C 76 ; WX 600 ; N L ; B 47 0 607 562 ; +C 77 ; WX 600 ; N M ; B 4 0 715 562 ; +C 78 ; WX 600 ; N N ; B 7 -13 712 562 ; +C 79 ; WX 600 ; N O ; B 94 -18 625 580 ; +C 80 ; WX 600 ; N P ; B 79 0 644 562 ; +C 81 ; WX 600 ; N Q ; B 95 -138 625 580 ; +C 82 ; WX 600 ; N R ; B 38 0 598 562 ; +C 83 ; WX 600 ; N S ; B 76 -20 650 580 ; +C 84 ; WX 600 ; N T ; B 108 0 665 562 ; +C 85 ; WX 600 ; N U ; B 125 -18 702 562 ; +C 86 ; WX 600 ; N V ; B 105 -13 723 562 ; +C 87 ; WX 600 ; N W ; B 106 -13 722 562 ; +C 88 ; WX 600 ; N X ; B 23 0 675 562 ; +C 89 ; WX 600 ; N Y ; B 133 0 695 562 ; +C 90 ; WX 600 ; N Z ; B 86 0 610 562 ; +C 91 ; WX 600 ; N bracketleft ; B 246 -108 574 622 ; +C 92 ; WX 600 ; N backslash ; B 249 -80 468 629 ; +C 93 ; WX 600 ; N bracketright ; B 135 -108 463 622 ; +C 94 ; WX 600 ; N asciicircum ; B 175 354 587 622 ; +C 95 ; WX 600 ; N underscore ; B -27 -125 584 -75 ; +C 96 ; WX 600 ; N quoteleft ; B 343 328 457 562 ; +C 97 ; WX 600 ; N a ; B 76 -15 569 441 ; +C 98 ; WX 600 ; N b ; B 29 -15 625 629 ; +C 99 ; WX 600 ; N c ; B 106 -15 608 441 ; +C 100 ; WX 600 ; N d ; B 85 -15 640 629 ; +C 101 ; WX 600 ; N e ; B 106 -15 598 441 ; +C 102 ; WX 600 ; N f ; B 114 0 662 629 ; L i fi ; L l fl ; +C 103 ; WX 600 ; N g ; B 61 -157 657 441 ; +C 104 ; WX 600 ; N h ; B 33 0 592 629 ; +C 105 ; WX 600 ; N i ; B 95 0 515 657 ; +C 106 ; WX 600 ; N j ; B 52 -157 550 657 ; +C 107 ; WX 600 ; N k ; B 58 0 633 629 ; +C 108 ; WX 600 ; N l ; B 95 0 515 629 ; +C 109 ; WX 600 ; N m ; B -5 0 615 441 ; +C 110 ; WX 600 ; N n ; B 26 0 585 441 ; +C 111 ; WX 600 ; N o ; B 102 -15 588 441 ; +C 112 ; WX 600 ; N p ; B -24 -157 605 441 ; +C 113 ; WX 600 ; N q ; B 85 -157 682 441 ; +C 114 ; WX 600 ; N r ; B 60 0 636 441 ; +C 115 ; WX 600 ; N s ; B 78 -15 584 441 ; +C 116 ; WX 600 ; N t ; B 167 -15 561 561 ; +C 117 ; WX 600 ; N u ; B 101 -15 572 426 ; +C 118 ; WX 600 ; N v ; B 90 -10 681 426 ; +C 119 ; WX 600 ; N w ; B 76 -10 695 426 ; +C 120 ; WX 600 ; N x ; B 20 0 655 426 ; +C 121 ; WX 600 ; N y ; B -4 -157 683 426 ; +C 122 ; WX 600 ; N z ; B 99 0 593 426 ; +C 123 ; WX 600 ; N braceleft ; B 233 -108 569 622 ; +C 124 ; WX 600 ; N bar ; B 222 -250 485 750 ; +C 125 ; WX 600 ; N braceright ; B 140 -108 477 622 ; +C 126 ; WX 600 ; N asciitilde ; B 116 197 600 320 ; +C 161 ; WX 600 ; N exclamdown ; B 225 -157 445 430 ; +C 162 ; WX 600 ; N cent ; B 151 -49 588 614 ; +C 163 ; WX 600 ; N sterling ; B 124 -21 621 611 ; +C 164 ; WX 600 ; N fraction ; B 84 -57 646 665 ; +C 165 ; WX 600 ; N yen ; B 120 0 693 562 ; +C 166 ; WX 600 ; N florin ; B -26 -143 671 622 ; +C 167 ; WX 600 ; N section ; B 104 -78 590 580 ; +C 168 ; WX 600 ; N currency ; B 94 58 628 506 ; +C 169 ; WX 600 ; N quotesingle ; B 345 328 460 562 ; +C 170 ; WX 600 ; N quotedblleft ; B 262 328 541 562 ; +C 171 ; WX 600 ; N guillemotleft ; B 92 70 652 446 ; +C 172 ; WX 600 ; N guilsinglleft ; B 204 70 540 446 ; +C 173 ; WX 600 ; N guilsinglright ; B 170 70 506 446 ; +C 174 ; WX 600 ; N fi ; B 3 0 619 629 ; +C 175 ; WX 600 ; N fl ; B 3 0 619 629 ; +C 177 ; WX 600 ; N endash ; B 124 231 586 285 ; +C 178 ; WX 600 ; N dagger ; B 217 -78 546 580 ; +C 179 ; WX 600 ; N daggerdbl ; B 163 -78 546 580 ; +C 180 ; WX 600 ; N periodcentered ; B 275 189 434 327 ; +C 182 ; WX 600 ; N paragraph ; B 100 -78 630 562 ; +C 183 ; WX 600 ; N bullet ; B 224 130 485 383 ; +C 184 ; WX 600 ; N quotesinglbase ; B 185 -134 397 100 ; +C 185 ; WX 600 ; N quotedblbase ; B 115 -134 478 100 ; +C 186 ; WX 600 ; N quotedblright ; B 213 328 576 562 ; +C 187 ; WX 600 ; N guillemotright ; B 58 70 618 446 ; +C 188 ; WX 600 ; N ellipsis ; B 46 -15 575 111 ; +C 189 ; WX 600 ; N perthousand ; B 59 -15 627 622 ; +C 191 ; WX 600 ; N questiondown ; B 105 -157 466 430 ; +C 193 ; WX 600 ; N grave ; B 294 497 484 672 ; +C 194 ; WX 600 ; N acute ; B 348 497 612 672 ; +C 195 ; WX 600 ; N circumflex ; B 229 477 581 654 ; +C 196 ; WX 600 ; N tilde ; B 212 489 629 606 ; +C 197 ; WX 600 ; N macron ; B 232 525 600 565 ; +C 198 ; WX 600 ; N breve ; B 279 501 576 609 ; +C 199 ; WX 600 ; N dotaccent ; B 373 537 478 640 ; +C 200 ; WX 600 ; N dieresis ; B 272 537 579 640 ; +C 202 ; WX 600 ; N ring ; B 332 463 500 627 ; +C 203 ; WX 600 ; N cedilla ; B 197 -151 344 10 ; +C 205 ; WX 600 ; N hungarumlaut ; B 239 497 683 672 ; +C 206 ; WX 600 ; N ogonek ; B 189 -172 377 4 ; +C 207 ; WX 600 ; N caron ; B 262 492 614 669 ; +C 208 ; WX 600 ; N emdash ; B 49 231 661 285 ; +C 225 ; WX 600 ; N AE ; B 3 0 655 562 ; +C 227 ; WX 600 ; N ordfeminine ; B 209 249 512 580 ; +C 232 ; WX 600 ; N Lslash ; B 47 0 607 562 ; +C 233 ; WX 600 ; N Oslash ; B 94 -80 625 629 ; +C 234 ; WX 600 ; N OE ; B 59 0 672 562 ; +C 235 ; WX 600 ; N ordmasculine ; B 210 249 535 580 ; +C 241 ; WX 600 ; N ae ; B 41 -15 626 441 ; +C 245 ; WX 600 ; N dotlessi ; B 95 0 515 426 ; +C 248 ; WX 600 ; N lslash ; B 95 0 587 629 ; +C 249 ; WX 600 ; N oslash ; B 102 -80 588 506 ; +C 250 ; WX 600 ; N oe ; B 54 -15 615 441 ; +C 251 ; WX 600 ; N germandbls ; B 48 -15 617 629 ; +C -1 ; WX 600 ; N Idieresis ; B 96 0 623 753 ; +C -1 ; WX 600 ; N eacute ; B 106 -15 612 672 ; +C -1 ; WX 600 ; N abreve ; B 76 -15 576 609 ; +C -1 ; WX 600 ; N uhungarumlaut ; B 101 -15 723 672 ; +C -1 ; WX 600 ; N ecaron ; B 106 -15 614 669 ; +C -1 ; WX 600 ; N Ydieresis ; B 133 0 695 753 ; +C -1 ; WX 600 ; N divide ; B 136 48 573 467 ; +C -1 ; WX 600 ; N Yacute ; B 133 0 695 805 ; +C -1 ; WX 600 ; N Acircumflex ; B 3 0 607 787 ; +C -1 ; WX 600 ; N aacute ; B 76 -15 612 672 ; +C -1 ; WX 600 ; N Ucircumflex ; B 125 -18 702 787 ; +C -1 ; WX 600 ; N yacute ; B -4 -157 683 672 ; +C -1 ; WX 600 ; N scommaaccent ; B 78 -250 584 441 ; +C -1 ; WX 600 ; N ecircumflex ; B 106 -15 598 654 ; +C -1 ; WX 600 ; N Uring ; B 125 -18 702 760 ; +C -1 ; WX 600 ; N Udieresis ; B 125 -18 702 753 ; +C -1 ; WX 600 ; N aogonek ; B 76 -172 569 441 ; +C -1 ; WX 600 ; N Uacute ; B 125 -18 702 805 ; +C -1 ; WX 600 ; N uogonek ; B 101 -172 572 426 ; +C -1 ; WX 600 ; N Edieresis ; B 53 0 660 753 ; +C -1 ; WX 600 ; N Dcroat ; B 43 0 645 562 ; +C -1 ; WX 600 ; N commaaccent ; B 145 -250 323 -58 ; +C -1 ; WX 600 ; N copyright ; B 53 -18 667 580 ; +C -1 ; WX 600 ; N Emacron ; B 53 0 660 698 ; +C -1 ; WX 600 ; N ccaron ; B 106 -15 614 669 ; +C -1 ; WX 600 ; N aring ; B 76 -15 569 627 ; +C -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 712 562 ; +C -1 ; WX 600 ; N lacute ; B 95 0 640 805 ; +C -1 ; WX 600 ; N agrave ; B 76 -15 569 672 ; +C -1 ; WX 600 ; N Tcommaaccent ; B 108 -250 665 562 ; +C -1 ; WX 600 ; N Cacute ; B 93 -18 655 805 ; +C -1 ; WX 600 ; N atilde ; B 76 -15 629 606 ; +C -1 ; WX 600 ; N Edotaccent ; B 53 0 660 753 ; +C -1 ; WX 600 ; N scaron ; B 78 -15 614 669 ; +C -1 ; WX 600 ; N scedilla ; B 78 -151 584 441 ; +C -1 ; WX 600 ; N iacute ; B 95 0 612 672 ; +C -1 ; WX 600 ; N lozenge ; B 94 0 519 706 ; +C -1 ; WX 600 ; N Rcaron ; B 38 0 642 802 ; +C -1 ; WX 600 ; N Gcommaaccent ; B 83 -250 645 580 ; +C -1 ; WX 600 ; N ucircumflex ; B 101 -15 572 654 ; +C -1 ; WX 600 ; N acircumflex ; B 76 -15 581 654 ; +C -1 ; WX 600 ; N Amacron ; B 3 0 607 698 ; +C -1 ; WX 600 ; N rcaron ; B 60 0 636 669 ; +C -1 ; WX 600 ; N ccedilla ; B 106 -151 614 441 ; +C -1 ; WX 600 ; N Zdotaccent ; B 86 0 610 753 ; +C -1 ; WX 600 ; N Thorn ; B 79 0 606 562 ; +C -1 ; WX 600 ; N Omacron ; B 94 -18 628 698 ; +C -1 ; WX 600 ; N Racute ; B 38 0 670 805 ; +C -1 ; WX 600 ; N Sacute ; B 76 -20 650 805 ; +C -1 ; WX 600 ; N dcaron ; B 85 -15 849 629 ; +C -1 ; WX 600 ; N Umacron ; B 125 -18 702 698 ; +C -1 ; WX 600 ; N uring ; B 101 -15 572 627 ; +C -1 ; WX 600 ; N threesuperior ; B 213 240 501 622 ; +C -1 ; WX 600 ; N Ograve ; B 94 -18 625 805 ; +C -1 ; WX 600 ; N Agrave ; B 3 0 607 805 ; +C -1 ; WX 600 ; N Abreve ; B 3 0 607 732 ; +C -1 ; WX 600 ; N multiply ; B 103 43 607 470 ; +C -1 ; WX 600 ; N uacute ; B 101 -15 602 672 ; +C -1 ; WX 600 ; N Tcaron ; B 108 0 665 802 ; +C -1 ; WX 600 ; N partialdiff ; B 45 -38 546 710 ; +C -1 ; WX 600 ; N ydieresis ; B -4 -157 683 620 ; +C -1 ; WX 600 ; N Nacute ; B 7 -13 712 805 ; +C -1 ; WX 600 ; N icircumflex ; B 95 0 551 654 ; +C -1 ; WX 600 ; N Ecircumflex ; B 53 0 660 787 ; +C -1 ; WX 600 ; N adieresis ; B 76 -15 575 620 ; +C -1 ; WX 600 ; N edieresis ; B 106 -15 598 620 ; +C -1 ; WX 600 ; N cacute ; B 106 -15 612 672 ; +C -1 ; WX 600 ; N nacute ; B 26 0 602 672 ; +C -1 ; WX 600 ; N umacron ; B 101 -15 600 565 ; +C -1 ; WX 600 ; N Ncaron ; B 7 -13 712 802 ; +C -1 ; WX 600 ; N Iacute ; B 96 0 640 805 ; +C -1 ; WX 600 ; N plusminus ; B 96 44 594 558 ; +C -1 ; WX 600 ; N brokenbar ; B 238 -175 469 675 ; +C -1 ; WX 600 ; N registered ; B 53 -18 667 580 ; +C -1 ; WX 600 ; N Gbreve ; B 83 -18 645 732 ; +C -1 ; WX 600 ; N Idotaccent ; B 96 0 623 753 ; +C -1 ; WX 600 ; N summation ; B 15 -10 670 706 ; +C -1 ; WX 600 ; N Egrave ; B 53 0 660 805 ; +C -1 ; WX 600 ; N racute ; B 60 0 636 672 ; +C -1 ; WX 600 ; N omacron ; B 102 -15 600 565 ; +C -1 ; WX 600 ; N Zacute ; B 86 0 670 805 ; +C -1 ; WX 600 ; N Zcaron ; B 86 0 642 802 ; +C -1 ; WX 600 ; N greaterequal ; B 98 0 594 710 ; +C -1 ; WX 600 ; N Eth ; B 43 0 645 562 ; +C -1 ; WX 600 ; N Ccedilla ; B 93 -151 658 580 ; +C -1 ; WX 600 ; N lcommaaccent ; B 95 -250 515 629 ; +C -1 ; WX 600 ; N tcaron ; B 167 -15 587 717 ; +C -1 ; WX 600 ; N eogonek ; B 106 -172 598 441 ; +C -1 ; WX 600 ; N Uogonek ; B 124 -172 702 562 ; +C -1 ; WX 600 ; N Aacute ; B 3 0 660 805 ; +C -1 ; WX 600 ; N Adieresis ; B 3 0 607 753 ; +C -1 ; WX 600 ; N egrave ; B 106 -15 598 672 ; +C -1 ; WX 600 ; N zacute ; B 99 0 612 672 ; +C -1 ; WX 600 ; N iogonek ; B 95 -172 515 657 ; +C -1 ; WX 600 ; N Oacute ; B 94 -18 640 805 ; +C -1 ; WX 600 ; N oacute ; B 102 -15 612 672 ; +C -1 ; WX 600 ; N amacron ; B 76 -15 600 565 ; +C -1 ; WX 600 ; N sacute ; B 78 -15 612 672 ; +C -1 ; WX 600 ; N idieresis ; B 95 0 545 620 ; +C -1 ; WX 600 ; N Ocircumflex ; B 94 -18 625 787 ; +C -1 ; WX 600 ; N Ugrave ; B 125 -18 702 805 ; +C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ; +C -1 ; WX 600 ; N thorn ; B -24 -157 605 629 ; +C -1 ; WX 600 ; N twosuperior ; B 230 249 535 622 ; +C -1 ; WX 600 ; N Odieresis ; B 94 -18 625 753 ; +C -1 ; WX 600 ; N mu ; B 72 -157 572 426 ; +C -1 ; WX 600 ; N igrave ; B 95 0 515 672 ; +C -1 ; WX 600 ; N ohungarumlaut ; B 102 -15 723 672 ; +C -1 ; WX 600 ; N Eogonek ; B 53 -172 660 562 ; +C -1 ; WX 600 ; N dcroat ; B 85 -15 704 629 ; +C -1 ; WX 600 ; N threequarters ; B 73 -56 659 666 ; +C -1 ; WX 600 ; N Scedilla ; B 76 -151 650 580 ; +C -1 ; WX 600 ; N lcaron ; B 95 0 667 629 ; +C -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 671 562 ; +C -1 ; WX 600 ; N Lacute ; B 47 0 607 805 ; +C -1 ; WX 600 ; N trademark ; B 75 263 742 562 ; +C -1 ; WX 600 ; N edotaccent ; B 106 -15 598 620 ; +C -1 ; WX 600 ; N Igrave ; B 96 0 623 805 ; +C -1 ; WX 600 ; N Imacron ; B 96 0 628 698 ; +C -1 ; WX 600 ; N Lcaron ; B 47 0 632 562 ; +C -1 ; WX 600 ; N onehalf ; B 65 -57 669 665 ; +C -1 ; WX 600 ; N lessequal ; B 98 0 645 710 ; +C -1 ; WX 600 ; N ocircumflex ; B 102 -15 588 654 ; +C -1 ; WX 600 ; N ntilde ; B 26 0 629 606 ; +C -1 ; WX 600 ; N Uhungarumlaut ; B 125 -18 761 805 ; +C -1 ; WX 600 ; N Eacute ; B 53 0 670 805 ; +C -1 ; WX 600 ; N emacron ; B 106 -15 600 565 ; +C -1 ; WX 600 ; N gbreve ; B 61 -157 657 609 ; +C -1 ; WX 600 ; N onequarter ; B 65 -57 674 665 ; +C -1 ; WX 600 ; N Scaron ; B 76 -20 672 802 ; +C -1 ; WX 600 ; N Scommaaccent ; B 76 -250 650 580 ; +C -1 ; WX 600 ; N Ohungarumlaut ; B 94 -18 751 805 ; +C -1 ; WX 600 ; N degree ; B 214 269 576 622 ; +C -1 ; WX 600 ; N ograve ; B 102 -15 588 672 ; +C -1 ; WX 600 ; N Ccaron ; B 93 -18 672 802 ; +C -1 ; WX 600 ; N ugrave ; B 101 -15 572 672 ; +C -1 ; WX 600 ; N radical ; B 85 -15 765 792 ; +C -1 ; WX 600 ; N Dcaron ; B 43 0 645 802 ; +C -1 ; WX 600 ; N rcommaaccent ; B 60 -250 636 441 ; +C -1 ; WX 600 ; N Ntilde ; B 7 -13 712 729 ; +C -1 ; WX 600 ; N otilde ; B 102 -15 629 606 ; +C -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 598 562 ; +C -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 607 562 ; +C -1 ; WX 600 ; N Atilde ; B 3 0 655 729 ; +C -1 ; WX 600 ; N Aogonek ; B 3 -172 607 562 ; +C -1 ; WX 600 ; N Aring ; B 3 0 607 750 ; +C -1 ; WX 600 ; N Otilde ; B 94 -18 655 729 ; +C -1 ; WX 600 ; N zdotaccent ; B 99 0 593 620 ; +C -1 ; WX 600 ; N Ecaron ; B 53 0 660 802 ; +C -1 ; WX 600 ; N Iogonek ; B 96 -172 623 562 ; +C -1 ; WX 600 ; N kcommaaccent ; B 58 -250 633 629 ; +C -1 ; WX 600 ; N minus ; B 129 232 580 283 ; +C -1 ; WX 600 ; N Icircumflex ; B 96 0 623 787 ; +C -1 ; WX 600 ; N ncaron ; B 26 0 614 669 ; +C -1 ; WX 600 ; N tcommaaccent ; B 165 -250 561 561 ; +C -1 ; WX 600 ; N logicalnot ; B 155 108 591 369 ; +C -1 ; WX 600 ; N odieresis ; B 102 -15 588 620 ; +C -1 ; WX 600 ; N udieresis ; B 101 -15 575 620 ; +C -1 ; WX 600 ; N notequal ; B 43 -16 621 529 ; +C -1 ; WX 600 ; N gcommaaccent ; B 61 -157 657 708 ; +C -1 ; WX 600 ; N eth ; B 102 -15 639 629 ; +C -1 ; WX 600 ; N zcaron ; B 99 0 624 669 ; +C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 585 441 ; +C -1 ; WX 600 ; N onesuperior ; B 231 249 491 622 ; +C -1 ; WX 600 ; N imacron ; B 95 0 543 565 ; +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier.afm new file mode 100644 index 000000000..2f7be81d5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Courier.afm @@ -0,0 +1,342 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 17:27:09 1997 +Comment UniqueID 43050 +Comment VMusage 39754 50779 +FontName Courier +FullName Courier +FamilyName Courier +Weight Medium +ItalicAngle 0 +IsFixedPitch true +CharacterSet ExtendedRoman +FontBBox -23 -250 715 805 +UnderlinePosition -100 +UnderlineThickness 50 +Version 003.000 +Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +EncodingScheme AdobeStandardEncoding +CapHeight 562 +XHeight 426 +Ascender 629 +Descender -157 +StdHW 51 +StdVW 51 +StartCharMetrics 315 +C 32 ; WX 600 ; N space ; B 0 0 0 0 ; +C 33 ; WX 600 ; N exclam ; B 236 -15 364 572 ; +C 34 ; WX 600 ; N quotedbl ; B 187 328 413 562 ; +C 35 ; WX 600 ; N numbersign ; B 93 -32 507 639 ; +C 36 ; WX 600 ; N dollar ; B 105 -126 496 662 ; +C 37 ; WX 600 ; N percent ; B 81 -15 518 622 ; +C 38 ; WX 600 ; N ampersand ; B 63 -15 538 543 ; +C 39 ; WX 600 ; N quoteright ; B 213 328 376 562 ; +C 40 ; WX 600 ; N parenleft ; B 269 -108 440 622 ; +C 41 ; WX 600 ; N parenright ; B 160 -108 331 622 ; +C 42 ; WX 600 ; N asterisk ; B 116 257 484 607 ; +C 43 ; WX 600 ; N plus ; B 80 44 520 470 ; +C 44 ; WX 600 ; N comma ; B 181 -112 344 122 ; +C 45 ; WX 600 ; N hyphen ; B 103 231 497 285 ; +C 46 ; WX 600 ; N period ; B 229 -15 371 109 ; +C 47 ; WX 600 ; N slash ; B 125 -80 475 629 ; +C 48 ; WX 600 ; N zero ; B 106 -15 494 622 ; +C 49 ; WX 600 ; N one ; B 96 0 505 622 ; +C 50 ; WX 600 ; N two ; B 70 0 471 622 ; +C 51 ; WX 600 ; N three ; B 75 -15 466 622 ; +C 52 ; WX 600 ; N four ; B 78 0 500 622 ; +C 53 ; WX 600 ; N five ; B 92 -15 497 607 ; +C 54 ; WX 600 ; N six ; B 111 -15 497 622 ; +C 55 ; WX 600 ; N seven ; B 82 0 483 607 ; +C 56 ; WX 600 ; N eight ; B 102 -15 498 622 ; +C 57 ; WX 600 ; N nine ; B 96 -15 489 622 ; +C 58 ; WX 600 ; N colon ; B 229 -15 371 385 ; +C 59 ; WX 600 ; N semicolon ; B 181 -112 371 385 ; +C 60 ; WX 600 ; N less ; B 41 42 519 472 ; +C 61 ; WX 600 ; N equal ; B 80 138 520 376 ; +C 62 ; WX 600 ; N greater ; B 66 42 544 472 ; +C 63 ; WX 600 ; N question ; B 129 -15 492 572 ; +C 64 ; WX 600 ; N at ; B 77 -15 533 622 ; +C 65 ; WX 600 ; N A ; B 3 0 597 562 ; +C 66 ; WX 600 ; N B ; B 43 0 559 562 ; +C 67 ; WX 600 ; N C ; B 41 -18 540 580 ; +C 68 ; WX 600 ; N D ; B 43 0 574 562 ; +C 69 ; WX 600 ; N E ; B 53 0 550 562 ; +C 70 ; WX 600 ; N F ; B 53 0 545 562 ; +C 71 ; WX 600 ; N G ; B 31 -18 575 580 ; +C 72 ; WX 600 ; N H ; B 32 0 568 562 ; +C 73 ; WX 600 ; N I ; B 96 0 504 562 ; +C 74 ; WX 600 ; N J ; B 34 -18 566 562 ; +C 75 ; WX 600 ; N K ; B 38 0 582 562 ; +C 76 ; WX 600 ; N L ; B 47 0 554 562 ; +C 77 ; WX 600 ; N M ; B 4 0 596 562 ; +C 78 ; WX 600 ; N N ; B 7 -13 593 562 ; +C 79 ; WX 600 ; N O ; B 43 -18 557 580 ; +C 80 ; WX 600 ; N P ; B 79 0 558 562 ; +C 81 ; WX 600 ; N Q ; B 43 -138 557 580 ; +C 82 ; WX 600 ; N R ; B 38 0 588 562 ; +C 83 ; WX 600 ; N S ; B 72 -20 529 580 ; +C 84 ; WX 600 ; N T ; B 38 0 563 562 ; +C 85 ; WX 600 ; N U ; B 17 -18 583 562 ; +C 86 ; WX 600 ; N V ; B -4 -13 604 562 ; +C 87 ; WX 600 ; N W ; B -3 -13 603 562 ; +C 88 ; WX 600 ; N X ; B 23 0 577 562 ; +C 89 ; WX 600 ; N Y ; B 24 0 576 562 ; +C 90 ; WX 600 ; N Z ; B 86 0 514 562 ; +C 91 ; WX 600 ; N bracketleft ; B 269 -108 442 622 ; +C 92 ; WX 600 ; N backslash ; B 118 -80 482 629 ; +C 93 ; WX 600 ; N bracketright ; B 158 -108 331 622 ; +C 94 ; WX 600 ; N asciicircum ; B 94 354 506 622 ; +C 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ; +C 96 ; WX 600 ; N quoteleft ; B 224 328 387 562 ; +C 97 ; WX 600 ; N a ; B 53 -15 559 441 ; +C 98 ; WX 600 ; N b ; B 14 -15 575 629 ; +C 99 ; WX 600 ; N c ; B 66 -15 529 441 ; +C 100 ; WX 600 ; N d ; B 45 -15 591 629 ; +C 101 ; WX 600 ; N e ; B 66 -15 548 441 ; +C 102 ; WX 600 ; N f ; B 114 0 531 629 ; L i fi ; L l fl ; +C 103 ; WX 600 ; N g ; B 45 -157 566 441 ; +C 104 ; WX 600 ; N h ; B 18 0 582 629 ; +C 105 ; WX 600 ; N i ; B 95 0 505 657 ; +C 106 ; WX 600 ; N j ; B 82 -157 410 657 ; +C 107 ; WX 600 ; N k ; B 43 0 580 629 ; +C 108 ; WX 600 ; N l ; B 95 0 505 629 ; +C 109 ; WX 600 ; N m ; B -5 0 605 441 ; +C 110 ; WX 600 ; N n ; B 26 0 575 441 ; +C 111 ; WX 600 ; N o ; B 62 -15 538 441 ; +C 112 ; WX 600 ; N p ; B 9 -157 555 441 ; +C 113 ; WX 600 ; N q ; B 45 -157 591 441 ; +C 114 ; WX 600 ; N r ; B 60 0 559 441 ; +C 115 ; WX 600 ; N s ; B 80 -15 513 441 ; +C 116 ; WX 600 ; N t ; B 87 -15 530 561 ; +C 117 ; WX 600 ; N u ; B 21 -15 562 426 ; +C 118 ; WX 600 ; N v ; B 10 -10 590 426 ; +C 119 ; WX 600 ; N w ; B -4 -10 604 426 ; +C 120 ; WX 600 ; N x ; B 20 0 580 426 ; +C 121 ; WX 600 ; N y ; B 7 -157 592 426 ; +C 122 ; WX 600 ; N z ; B 99 0 502 426 ; +C 123 ; WX 600 ; N braceleft ; B 182 -108 437 622 ; +C 124 ; WX 600 ; N bar ; B 275 -250 326 750 ; +C 125 ; WX 600 ; N braceright ; B 163 -108 418 622 ; +C 126 ; WX 600 ; N asciitilde ; B 63 197 540 320 ; +C 161 ; WX 600 ; N exclamdown ; B 236 -157 364 430 ; +C 162 ; WX 600 ; N cent ; B 96 -49 500 614 ; +C 163 ; WX 600 ; N sterling ; B 84 -21 521 611 ; +C 164 ; WX 600 ; N fraction ; B 92 -57 509 665 ; +C 165 ; WX 600 ; N yen ; B 26 0 574 562 ; +C 166 ; WX 600 ; N florin ; B 4 -143 539 622 ; +C 167 ; WX 600 ; N section ; B 113 -78 488 580 ; +C 168 ; WX 600 ; N currency ; B 73 58 527 506 ; +C 169 ; WX 600 ; N quotesingle ; B 259 328 341 562 ; +C 170 ; WX 600 ; N quotedblleft ; B 143 328 471 562 ; +C 171 ; WX 600 ; N guillemotleft ; B 37 70 563 446 ; +C 172 ; WX 600 ; N guilsinglleft ; B 149 70 451 446 ; +C 173 ; WX 600 ; N guilsinglright ; B 149 70 451 446 ; +C 174 ; WX 600 ; N fi ; B 3 0 597 629 ; +C 175 ; WX 600 ; N fl ; B 3 0 597 629 ; +C 177 ; WX 600 ; N endash ; B 75 231 525 285 ; +C 178 ; WX 600 ; N dagger ; B 141 -78 459 580 ; +C 179 ; WX 600 ; N daggerdbl ; B 141 -78 459 580 ; +C 180 ; WX 600 ; N periodcentered ; B 222 189 378 327 ; +C 182 ; WX 600 ; N paragraph ; B 50 -78 511 562 ; +C 183 ; WX 600 ; N bullet ; B 172 130 428 383 ; +C 184 ; WX 600 ; N quotesinglbase ; B 213 -134 376 100 ; +C 185 ; WX 600 ; N quotedblbase ; B 143 -134 457 100 ; +C 186 ; WX 600 ; N quotedblright ; B 143 328 457 562 ; +C 187 ; WX 600 ; N guillemotright ; B 37 70 563 446 ; +C 188 ; WX 600 ; N ellipsis ; B 37 -15 563 111 ; +C 189 ; WX 600 ; N perthousand ; B 3 -15 600 622 ; +C 191 ; WX 600 ; N questiondown ; B 108 -157 471 430 ; +C 193 ; WX 600 ; N grave ; B 151 497 378 672 ; +C 194 ; WX 600 ; N acute ; B 242 497 469 672 ; +C 195 ; WX 600 ; N circumflex ; B 124 477 476 654 ; +C 196 ; WX 600 ; N tilde ; B 105 489 503 606 ; +C 197 ; WX 600 ; N macron ; B 120 525 480 565 ; +C 198 ; WX 600 ; N breve ; B 153 501 447 609 ; +C 199 ; WX 600 ; N dotaccent ; B 249 537 352 640 ; +C 200 ; WX 600 ; N dieresis ; B 148 537 453 640 ; +C 202 ; WX 600 ; N ring ; B 218 463 382 627 ; +C 203 ; WX 600 ; N cedilla ; B 224 -151 362 10 ; +C 205 ; WX 600 ; N hungarumlaut ; B 133 497 540 672 ; +C 206 ; WX 600 ; N ogonek ; B 211 -172 407 4 ; +C 207 ; WX 600 ; N caron ; B 124 492 476 669 ; +C 208 ; WX 600 ; N emdash ; B 0 231 600 285 ; +C 225 ; WX 600 ; N AE ; B 3 0 550 562 ; +C 227 ; WX 600 ; N ordfeminine ; B 156 249 442 580 ; +C 232 ; WX 600 ; N Lslash ; B 47 0 554 562 ; +C 233 ; WX 600 ; N Oslash ; B 43 -80 557 629 ; +C 234 ; WX 600 ; N OE ; B 7 0 567 562 ; +C 235 ; WX 600 ; N ordmasculine ; B 157 249 443 580 ; +C 241 ; WX 600 ; N ae ; B 19 -15 570 441 ; +C 245 ; WX 600 ; N dotlessi ; B 95 0 505 426 ; +C 248 ; WX 600 ; N lslash ; B 95 0 505 629 ; +C 249 ; WX 600 ; N oslash ; B 62 -80 538 506 ; +C 250 ; WX 600 ; N oe ; B 19 -15 559 441 ; +C 251 ; WX 600 ; N germandbls ; B 48 -15 588 629 ; +C -1 ; WX 600 ; N Idieresis ; B 96 0 504 753 ; +C -1 ; WX 600 ; N eacute ; B 66 -15 548 672 ; +C -1 ; WX 600 ; N abreve ; B 53 -15 559 609 ; +C -1 ; WX 600 ; N uhungarumlaut ; B 21 -15 580 672 ; +C -1 ; WX 600 ; N ecaron ; B 66 -15 548 669 ; +C -1 ; WX 600 ; N Ydieresis ; B 24 0 576 753 ; +C -1 ; WX 600 ; N divide ; B 87 48 513 467 ; +C -1 ; WX 600 ; N Yacute ; B 24 0 576 805 ; +C -1 ; WX 600 ; N Acircumflex ; B 3 0 597 787 ; +C -1 ; WX 600 ; N aacute ; B 53 -15 559 672 ; +C -1 ; WX 600 ; N Ucircumflex ; B 17 -18 583 787 ; +C -1 ; WX 600 ; N yacute ; B 7 -157 592 672 ; +C -1 ; WX 600 ; N scommaaccent ; B 80 -250 513 441 ; +C -1 ; WX 600 ; N ecircumflex ; B 66 -15 548 654 ; +C -1 ; WX 600 ; N Uring ; B 17 -18 583 760 ; +C -1 ; WX 600 ; N Udieresis ; B 17 -18 583 753 ; +C -1 ; WX 600 ; N aogonek ; B 53 -172 587 441 ; +C -1 ; WX 600 ; N Uacute ; B 17 -18 583 805 ; +C -1 ; WX 600 ; N uogonek ; B 21 -172 590 426 ; +C -1 ; WX 600 ; N Edieresis ; B 53 0 550 753 ; +C -1 ; WX 600 ; N Dcroat ; B 30 0 574 562 ; +C -1 ; WX 600 ; N commaaccent ; B 198 -250 335 -58 ; +C -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ; +C -1 ; WX 600 ; N Emacron ; B 53 0 550 698 ; +C -1 ; WX 600 ; N ccaron ; B 66 -15 529 669 ; +C -1 ; WX 600 ; N aring ; B 53 -15 559 627 ; +C -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 593 562 ; +C -1 ; WX 600 ; N lacute ; B 95 0 505 805 ; +C -1 ; WX 600 ; N agrave ; B 53 -15 559 672 ; +C -1 ; WX 600 ; N Tcommaaccent ; B 38 -250 563 562 ; +C -1 ; WX 600 ; N Cacute ; B 41 -18 540 805 ; +C -1 ; WX 600 ; N atilde ; B 53 -15 559 606 ; +C -1 ; WX 600 ; N Edotaccent ; B 53 0 550 753 ; +C -1 ; WX 600 ; N scaron ; B 80 -15 513 669 ; +C -1 ; WX 600 ; N scedilla ; B 80 -151 513 441 ; +C -1 ; WX 600 ; N iacute ; B 95 0 505 672 ; +C -1 ; WX 600 ; N lozenge ; B 18 0 443 706 ; +C -1 ; WX 600 ; N Rcaron ; B 38 0 588 802 ; +C -1 ; WX 600 ; N Gcommaaccent ; B 31 -250 575 580 ; +C -1 ; WX 600 ; N ucircumflex ; B 21 -15 562 654 ; +C -1 ; WX 600 ; N acircumflex ; B 53 -15 559 654 ; +C -1 ; WX 600 ; N Amacron ; B 3 0 597 698 ; +C -1 ; WX 600 ; N rcaron ; B 60 0 559 669 ; +C -1 ; WX 600 ; N ccedilla ; B 66 -151 529 441 ; +C -1 ; WX 600 ; N Zdotaccent ; B 86 0 514 753 ; +C -1 ; WX 600 ; N Thorn ; B 79 0 538 562 ; +C -1 ; WX 600 ; N Omacron ; B 43 -18 557 698 ; +C -1 ; WX 600 ; N Racute ; B 38 0 588 805 ; +C -1 ; WX 600 ; N Sacute ; B 72 -20 529 805 ; +C -1 ; WX 600 ; N dcaron ; B 45 -15 715 629 ; +C -1 ; WX 600 ; N Umacron ; B 17 -18 583 698 ; +C -1 ; WX 600 ; N uring ; B 21 -15 562 627 ; +C -1 ; WX 600 ; N threesuperior ; B 155 240 406 622 ; +C -1 ; WX 600 ; N Ograve ; B 43 -18 557 805 ; +C -1 ; WX 600 ; N Agrave ; B 3 0 597 805 ; +C -1 ; WX 600 ; N Abreve ; B 3 0 597 732 ; +C -1 ; WX 600 ; N multiply ; B 87 43 515 470 ; +C -1 ; WX 600 ; N uacute ; B 21 -15 562 672 ; +C -1 ; WX 600 ; N Tcaron ; B 38 0 563 802 ; +C -1 ; WX 600 ; N partialdiff ; B 17 -38 459 710 ; +C -1 ; WX 600 ; N ydieresis ; B 7 -157 592 620 ; +C -1 ; WX 600 ; N Nacute ; B 7 -13 593 805 ; +C -1 ; WX 600 ; N icircumflex ; B 94 0 505 654 ; +C -1 ; WX 600 ; N Ecircumflex ; B 53 0 550 787 ; +C -1 ; WX 600 ; N adieresis ; B 53 -15 559 620 ; +C -1 ; WX 600 ; N edieresis ; B 66 -15 548 620 ; +C -1 ; WX 600 ; N cacute ; B 66 -15 529 672 ; +C -1 ; WX 600 ; N nacute ; B 26 0 575 672 ; +C -1 ; WX 600 ; N umacron ; B 21 -15 562 565 ; +C -1 ; WX 600 ; N Ncaron ; B 7 -13 593 802 ; +C -1 ; WX 600 ; N Iacute ; B 96 0 504 805 ; +C -1 ; WX 600 ; N plusminus ; B 87 44 513 558 ; +C -1 ; WX 600 ; N brokenbar ; B 275 -175 326 675 ; +C -1 ; WX 600 ; N registered ; B 0 -18 600 580 ; +C -1 ; WX 600 ; N Gbreve ; B 31 -18 575 732 ; +C -1 ; WX 600 ; N Idotaccent ; B 96 0 504 753 ; +C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ; +C -1 ; WX 600 ; N Egrave ; B 53 0 550 805 ; +C -1 ; WX 600 ; N racute ; B 60 0 559 672 ; +C -1 ; WX 600 ; N omacron ; B 62 -15 538 565 ; +C -1 ; WX 600 ; N Zacute ; B 86 0 514 805 ; +C -1 ; WX 600 ; N Zcaron ; B 86 0 514 802 ; +C -1 ; WX 600 ; N greaterequal ; B 98 0 502 710 ; +C -1 ; WX 600 ; N Eth ; B 30 0 574 562 ; +C -1 ; WX 600 ; N Ccedilla ; B 41 -151 540 580 ; +C -1 ; WX 600 ; N lcommaaccent ; B 95 -250 505 629 ; +C -1 ; WX 600 ; N tcaron ; B 87 -15 530 717 ; +C -1 ; WX 600 ; N eogonek ; B 66 -172 548 441 ; +C -1 ; WX 600 ; N Uogonek ; B 17 -172 583 562 ; +C -1 ; WX 600 ; N Aacute ; B 3 0 597 805 ; +C -1 ; WX 600 ; N Adieresis ; B 3 0 597 753 ; +C -1 ; WX 600 ; N egrave ; B 66 -15 548 672 ; +C -1 ; WX 600 ; N zacute ; B 99 0 502 672 ; +C -1 ; WX 600 ; N iogonek ; B 95 -172 505 657 ; +C -1 ; WX 600 ; N Oacute ; B 43 -18 557 805 ; +C -1 ; WX 600 ; N oacute ; B 62 -15 538 672 ; +C -1 ; WX 600 ; N amacron ; B 53 -15 559 565 ; +C -1 ; WX 600 ; N sacute ; B 80 -15 513 672 ; +C -1 ; WX 600 ; N idieresis ; B 95 0 505 620 ; +C -1 ; WX 600 ; N Ocircumflex ; B 43 -18 557 787 ; +C -1 ; WX 600 ; N Ugrave ; B 17 -18 583 805 ; +C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ; +C -1 ; WX 600 ; N thorn ; B -6 -157 555 629 ; +C -1 ; WX 600 ; N twosuperior ; B 177 249 424 622 ; +C -1 ; WX 600 ; N Odieresis ; B 43 -18 557 753 ; +C -1 ; WX 600 ; N mu ; B 21 -157 562 426 ; +C -1 ; WX 600 ; N igrave ; B 95 0 505 672 ; +C -1 ; WX 600 ; N ohungarumlaut ; B 62 -15 580 672 ; +C -1 ; WX 600 ; N Eogonek ; B 53 -172 561 562 ; +C -1 ; WX 600 ; N dcroat ; B 45 -15 591 629 ; +C -1 ; WX 600 ; N threequarters ; B 8 -56 593 666 ; +C -1 ; WX 600 ; N Scedilla ; B 72 -151 529 580 ; +C -1 ; WX 600 ; N lcaron ; B 95 0 533 629 ; +C -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 582 562 ; +C -1 ; WX 600 ; N Lacute ; B 47 0 554 805 ; +C -1 ; WX 600 ; N trademark ; B -23 263 623 562 ; +C -1 ; WX 600 ; N edotaccent ; B 66 -15 548 620 ; +C -1 ; WX 600 ; N Igrave ; B 96 0 504 805 ; +C -1 ; WX 600 ; N Imacron ; B 96 0 504 698 ; +C -1 ; WX 600 ; N Lcaron ; B 47 0 554 562 ; +C -1 ; WX 600 ; N onehalf ; B 0 -57 611 665 ; +C -1 ; WX 600 ; N lessequal ; B 98 0 502 710 ; +C -1 ; WX 600 ; N ocircumflex ; B 62 -15 538 654 ; +C -1 ; WX 600 ; N ntilde ; B 26 0 575 606 ; +C -1 ; WX 600 ; N Uhungarumlaut ; B 17 -18 590 805 ; +C -1 ; WX 600 ; N Eacute ; B 53 0 550 805 ; +C -1 ; WX 600 ; N emacron ; B 66 -15 548 565 ; +C -1 ; WX 600 ; N gbreve ; B 45 -157 566 609 ; +C -1 ; WX 600 ; N onequarter ; B 0 -57 600 665 ; +C -1 ; WX 600 ; N Scaron ; B 72 -20 529 802 ; +C -1 ; WX 600 ; N Scommaaccent ; B 72 -250 529 580 ; +C -1 ; WX 600 ; N Ohungarumlaut ; B 43 -18 580 805 ; +C -1 ; WX 600 ; N degree ; B 123 269 477 622 ; +C -1 ; WX 600 ; N ograve ; B 62 -15 538 672 ; +C -1 ; WX 600 ; N Ccaron ; B 41 -18 540 802 ; +C -1 ; WX 600 ; N ugrave ; B 21 -15 562 672 ; +C -1 ; WX 600 ; N radical ; B 3 -15 597 792 ; +C -1 ; WX 600 ; N Dcaron ; B 43 0 574 802 ; +C -1 ; WX 600 ; N rcommaaccent ; B 60 -250 559 441 ; +C -1 ; WX 600 ; N Ntilde ; B 7 -13 593 729 ; +C -1 ; WX 600 ; N otilde ; B 62 -15 538 606 ; +C -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 588 562 ; +C -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 554 562 ; +C -1 ; WX 600 ; N Atilde ; B 3 0 597 729 ; +C -1 ; WX 600 ; N Aogonek ; B 3 -172 608 562 ; +C -1 ; WX 600 ; N Aring ; B 3 0 597 750 ; +C -1 ; WX 600 ; N Otilde ; B 43 -18 557 729 ; +C -1 ; WX 600 ; N zdotaccent ; B 99 0 502 620 ; +C -1 ; WX 600 ; N Ecaron ; B 53 0 550 802 ; +C -1 ; WX 600 ; N Iogonek ; B 96 -172 504 562 ; +C -1 ; WX 600 ; N kcommaaccent ; B 43 -250 580 629 ; +C -1 ; WX 600 ; N minus ; B 80 232 520 283 ; +C -1 ; WX 600 ; N Icircumflex ; B 96 0 504 787 ; +C -1 ; WX 600 ; N ncaron ; B 26 0 575 669 ; +C -1 ; WX 600 ; N tcommaaccent ; B 87 -250 530 561 ; +C -1 ; WX 600 ; N logicalnot ; B 87 108 513 369 ; +C -1 ; WX 600 ; N odieresis ; B 62 -15 538 620 ; +C -1 ; WX 600 ; N udieresis ; B 21 -15 562 620 ; +C -1 ; WX 600 ; N notequal ; B 15 -16 540 529 ; +C -1 ; WX 600 ; N gcommaaccent ; B 45 -157 566 708 ; +C -1 ; WX 600 ; N eth ; B 62 -15 538 629 ; +C -1 ; WX 600 ; N zcaron ; B 99 0 502 669 ; +C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 575 441 ; +C -1 ; WX 600 ; N onesuperior ; B 172 249 428 622 ; +C -1 ; WX 600 ; N imacron ; B 95 0 505 565 ; +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica-Bold.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica-Bold.afm new file mode 100644 index 000000000..837c594e0 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica-Bold.afm @@ -0,0 +1,2827 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:43:52 1997 +Comment UniqueID 43052 +Comment VMusage 37169 48194 +FontName Helvetica-Bold +FullName Helvetica Bold +FamilyName Helvetica +Weight Bold +ItalicAngle 0 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -170 -228 1003 962 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 718 +XHeight 532 +Ascender 718 +Descender -207 +StdHW 118 +StdVW 140 +StartCharMetrics 315 +C 32 ; WX 278 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 90 0 244 718 ; +C 34 ; WX 474 ; N quotedbl ; B 98 447 376 718 ; +C 35 ; WX 556 ; N numbersign ; B 18 0 538 698 ; +C 36 ; WX 556 ; N dollar ; B 30 -115 523 775 ; +C 37 ; WX 889 ; N percent ; B 28 -19 861 710 ; +C 38 ; WX 722 ; N ampersand ; B 54 -19 701 718 ; +C 39 ; WX 278 ; N quoteright ; B 69 445 209 718 ; +C 40 ; WX 333 ; N parenleft ; B 35 -208 314 734 ; +C 41 ; WX 333 ; N parenright ; B 19 -208 298 734 ; +C 42 ; WX 389 ; N asterisk ; B 27 387 362 718 ; +C 43 ; WX 584 ; N plus ; B 40 0 544 506 ; +C 44 ; WX 278 ; N comma ; B 64 -168 214 146 ; +C 45 ; WX 333 ; N hyphen ; B 27 215 306 345 ; +C 46 ; WX 278 ; N period ; B 64 0 214 146 ; +C 47 ; WX 278 ; N slash ; B -33 -19 311 737 ; +C 48 ; WX 556 ; N zero ; B 32 -19 524 710 ; +C 49 ; WX 556 ; N one ; B 69 0 378 710 ; +C 50 ; WX 556 ; N two ; B 26 0 511 710 ; +C 51 ; WX 556 ; N three ; B 27 -19 516 710 ; +C 52 ; WX 556 ; N four ; B 27 0 526 710 ; +C 53 ; WX 556 ; N five ; B 27 -19 516 698 ; +C 54 ; WX 556 ; N six ; B 31 -19 520 710 ; +C 55 ; WX 556 ; N seven ; B 25 0 528 698 ; +C 56 ; WX 556 ; N eight ; B 32 -19 524 710 ; +C 57 ; WX 556 ; N nine ; B 30 -19 522 710 ; +C 58 ; WX 333 ; N colon ; B 92 0 242 512 ; +C 59 ; WX 333 ; N semicolon ; B 92 -168 242 512 ; +C 60 ; WX 584 ; N less ; B 38 -8 546 514 ; +C 61 ; WX 584 ; N equal ; B 40 87 544 419 ; +C 62 ; WX 584 ; N greater ; B 38 -8 546 514 ; +C 63 ; WX 611 ; N question ; B 60 0 556 727 ; +C 64 ; WX 975 ; N at ; B 118 -19 856 737 ; +C 65 ; WX 722 ; N A ; B 20 0 702 718 ; +C 66 ; WX 722 ; N B ; B 76 0 669 718 ; +C 67 ; WX 722 ; N C ; B 44 -19 684 737 ; +C 68 ; WX 722 ; N D ; B 76 0 685 718 ; +C 69 ; WX 667 ; N E ; B 76 0 621 718 ; +C 70 ; WX 611 ; N F ; B 76 0 587 718 ; +C 71 ; WX 778 ; N G ; B 44 -19 713 737 ; +C 72 ; WX 722 ; N H ; B 71 0 651 718 ; +C 73 ; WX 278 ; N I ; B 64 0 214 718 ; +C 74 ; WX 556 ; N J ; B 22 -18 484 718 ; +C 75 ; WX 722 ; N K ; B 87 0 722 718 ; +C 76 ; WX 611 ; N L ; B 76 0 583 718 ; +C 77 ; WX 833 ; N M ; B 69 0 765 718 ; +C 78 ; WX 722 ; N N ; B 69 0 654 718 ; +C 79 ; WX 778 ; N O ; B 44 -19 734 737 ; +C 80 ; WX 667 ; N P ; B 76 0 627 718 ; +C 81 ; WX 778 ; N Q ; B 44 -52 737 737 ; +C 82 ; WX 722 ; N R ; B 76 0 677 718 ; +C 83 ; WX 667 ; N S ; B 39 -19 629 737 ; +C 84 ; WX 611 ; N T ; B 14 0 598 718 ; +C 85 ; WX 722 ; N U ; B 72 -19 651 718 ; +C 86 ; WX 667 ; N V ; B 19 0 648 718 ; +C 87 ; WX 944 ; N W ; B 16 0 929 718 ; +C 88 ; WX 667 ; N X ; B 14 0 653 718 ; +C 89 ; WX 667 ; N Y ; B 15 0 653 718 ; +C 90 ; WX 611 ; N Z ; B 25 0 586 718 ; +C 91 ; WX 333 ; N bracketleft ; B 63 -196 309 722 ; +C 92 ; WX 278 ; N backslash ; B -33 -19 311 737 ; +C 93 ; WX 333 ; N bracketright ; B 24 -196 270 722 ; +C 94 ; WX 584 ; N asciicircum ; B 62 323 522 698 ; +C 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ; +C 96 ; WX 278 ; N quoteleft ; B 69 454 209 727 ; +C 97 ; WX 556 ; N a ; B 29 -14 527 546 ; +C 98 ; WX 611 ; N b ; B 61 -14 578 718 ; +C 99 ; WX 556 ; N c ; B 34 -14 524 546 ; +C 100 ; WX 611 ; N d ; B 34 -14 551 718 ; +C 101 ; WX 556 ; N e ; B 23 -14 528 546 ; +C 102 ; WX 333 ; N f ; B 10 0 318 727 ; L i fi ; L l fl ; +C 103 ; WX 611 ; N g ; B 40 -217 553 546 ; +C 104 ; WX 611 ; N h ; B 65 0 546 718 ; +C 105 ; WX 278 ; N i ; B 69 0 209 725 ; +C 106 ; WX 278 ; N j ; B 3 -214 209 725 ; +C 107 ; WX 556 ; N k ; B 69 0 562 718 ; +C 108 ; WX 278 ; N l ; B 69 0 209 718 ; +C 109 ; WX 889 ; N m ; B 64 0 826 546 ; +C 110 ; WX 611 ; N n ; B 65 0 546 546 ; +C 111 ; WX 611 ; N o ; B 34 -14 578 546 ; +C 112 ; WX 611 ; N p ; B 62 -207 578 546 ; +C 113 ; WX 611 ; N q ; B 34 -207 552 546 ; +C 114 ; WX 389 ; N r ; B 64 0 373 546 ; +C 115 ; WX 556 ; N s ; B 30 -14 519 546 ; +C 116 ; WX 333 ; N t ; B 10 -6 309 676 ; +C 117 ; WX 611 ; N u ; B 66 -14 545 532 ; +C 118 ; WX 556 ; N v ; B 13 0 543 532 ; +C 119 ; WX 778 ; N w ; B 10 0 769 532 ; +C 120 ; WX 556 ; N x ; B 15 0 541 532 ; +C 121 ; WX 556 ; N y ; B 10 -214 539 532 ; +C 122 ; WX 500 ; N z ; B 20 0 480 532 ; +C 123 ; WX 389 ; N braceleft ; B 48 -196 365 722 ; +C 124 ; WX 280 ; N bar ; B 84 -225 196 775 ; +C 125 ; WX 389 ; N braceright ; B 24 -196 341 722 ; +C 126 ; WX 584 ; N asciitilde ; B 61 163 523 343 ; +C 161 ; WX 333 ; N exclamdown ; B 90 -186 244 532 ; +C 162 ; WX 556 ; N cent ; B 34 -118 524 628 ; +C 163 ; WX 556 ; N sterling ; B 28 -16 541 718 ; +C 164 ; WX 167 ; N fraction ; B -170 -19 336 710 ; +C 165 ; WX 556 ; N yen ; B -9 0 565 698 ; +C 166 ; WX 556 ; N florin ; B -10 -210 516 737 ; +C 167 ; WX 556 ; N section ; B 34 -184 522 727 ; +C 168 ; WX 556 ; N currency ; B -3 76 559 636 ; +C 169 ; WX 238 ; N quotesingle ; B 70 447 168 718 ; +C 170 ; WX 500 ; N quotedblleft ; B 64 454 436 727 ; +C 171 ; WX 556 ; N guillemotleft ; B 88 76 468 484 ; +C 172 ; WX 333 ; N guilsinglleft ; B 83 76 250 484 ; +C 173 ; WX 333 ; N guilsinglright ; B 83 76 250 484 ; +C 174 ; WX 611 ; N fi ; B 10 0 542 727 ; +C 175 ; WX 611 ; N fl ; B 10 0 542 727 ; +C 177 ; WX 556 ; N endash ; B 0 227 556 333 ; +C 178 ; WX 556 ; N dagger ; B 36 -171 520 718 ; +C 179 ; WX 556 ; N daggerdbl ; B 36 -171 520 718 ; +C 180 ; WX 278 ; N periodcentered ; B 58 172 220 334 ; +C 182 ; WX 556 ; N paragraph ; B -8 -191 539 700 ; +C 183 ; WX 350 ; N bullet ; B 10 194 340 524 ; +C 184 ; WX 278 ; N quotesinglbase ; B 69 -146 209 127 ; +C 185 ; WX 500 ; N quotedblbase ; B 64 -146 436 127 ; +C 186 ; WX 500 ; N quotedblright ; B 64 445 436 718 ; +C 187 ; WX 556 ; N guillemotright ; B 88 76 468 484 ; +C 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ; +C 189 ; WX 1000 ; N perthousand ; B -3 -19 1003 710 ; +C 191 ; WX 611 ; N questiondown ; B 55 -195 551 532 ; +C 193 ; WX 333 ; N grave ; B -23 604 225 750 ; +C 194 ; WX 333 ; N acute ; B 108 604 356 750 ; +C 195 ; WX 333 ; N circumflex ; B -10 604 343 750 ; +C 196 ; WX 333 ; N tilde ; B -17 610 350 737 ; +C 197 ; WX 333 ; N macron ; B -6 604 339 678 ; +C 198 ; WX 333 ; N breve ; B -2 604 335 750 ; +C 199 ; WX 333 ; N dotaccent ; B 104 614 230 729 ; +C 200 ; WX 333 ; N dieresis ; B 6 614 327 729 ; +C 202 ; WX 333 ; N ring ; B 59 568 275 776 ; +C 203 ; WX 333 ; N cedilla ; B 6 -228 245 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B 9 604 486 750 ; +C 206 ; WX 333 ; N ogonek ; B 71 -228 304 0 ; +C 207 ; WX 333 ; N caron ; B -10 604 343 750 ; +C 208 ; WX 1000 ; N emdash ; B 0 227 1000 333 ; +C 225 ; WX 1000 ; N AE ; B 5 0 954 718 ; +C 227 ; WX 370 ; N ordfeminine ; B 22 401 347 737 ; +C 232 ; WX 611 ; N Lslash ; B -20 0 583 718 ; +C 233 ; WX 778 ; N Oslash ; B 33 -27 744 745 ; +C 234 ; WX 1000 ; N OE ; B 37 -19 961 737 ; +C 235 ; WX 365 ; N ordmasculine ; B 6 401 360 737 ; +C 241 ; WX 889 ; N ae ; B 29 -14 858 546 ; +C 245 ; WX 278 ; N dotlessi ; B 69 0 209 532 ; +C 248 ; WX 278 ; N lslash ; B -18 0 296 718 ; +C 249 ; WX 611 ; N oslash ; B 22 -29 589 560 ; +C 250 ; WX 944 ; N oe ; B 34 -14 912 546 ; +C 251 ; WX 611 ; N germandbls ; B 69 -14 579 731 ; +C -1 ; WX 278 ; N Idieresis ; B -21 0 300 915 ; +C -1 ; WX 556 ; N eacute ; B 23 -14 528 750 ; +C -1 ; WX 556 ; N abreve ; B 29 -14 527 750 ; +C -1 ; WX 611 ; N uhungarumlaut ; B 66 -14 625 750 ; +C -1 ; WX 556 ; N ecaron ; B 23 -14 528 750 ; +C -1 ; WX 667 ; N Ydieresis ; B 15 0 653 915 ; +C -1 ; WX 584 ; N divide ; B 40 -42 544 548 ; +C -1 ; WX 667 ; N Yacute ; B 15 0 653 936 ; +C -1 ; WX 722 ; N Acircumflex ; B 20 0 702 936 ; +C -1 ; WX 556 ; N aacute ; B 29 -14 527 750 ; +C -1 ; WX 722 ; N Ucircumflex ; B 72 -19 651 936 ; +C -1 ; WX 556 ; N yacute ; B 10 -214 539 750 ; +C -1 ; WX 556 ; N scommaaccent ; B 30 -228 519 546 ; +C -1 ; WX 556 ; N ecircumflex ; B 23 -14 528 750 ; +C -1 ; WX 722 ; N Uring ; B 72 -19 651 962 ; +C -1 ; WX 722 ; N Udieresis ; B 72 -19 651 915 ; +C -1 ; WX 556 ; N aogonek ; B 29 -224 545 546 ; +C -1 ; WX 722 ; N Uacute ; B 72 -19 651 936 ; +C -1 ; WX 611 ; N uogonek ; B 66 -228 545 532 ; +C -1 ; WX 667 ; N Edieresis ; B 76 0 621 915 ; +C -1 ; WX 722 ; N Dcroat ; B -5 0 685 718 ; +C -1 ; WX 250 ; N commaaccent ; B 64 -228 199 -50 ; +C -1 ; WX 737 ; N copyright ; B -11 -19 749 737 ; +C -1 ; WX 667 ; N Emacron ; B 76 0 621 864 ; +C -1 ; WX 556 ; N ccaron ; B 34 -14 524 750 ; +C -1 ; WX 556 ; N aring ; B 29 -14 527 776 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 654 718 ; +C -1 ; WX 278 ; N lacute ; B 69 0 329 936 ; +C -1 ; WX 556 ; N agrave ; B 29 -14 527 750 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 14 -228 598 718 ; +C -1 ; WX 722 ; N Cacute ; B 44 -19 684 936 ; +C -1 ; WX 556 ; N atilde ; B 29 -14 527 737 ; +C -1 ; WX 667 ; N Edotaccent ; B 76 0 621 915 ; +C -1 ; WX 556 ; N scaron ; B 30 -14 519 750 ; +C -1 ; WX 556 ; N scedilla ; B 30 -228 519 546 ; +C -1 ; WX 278 ; N iacute ; B 69 0 329 750 ; +C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ; +C -1 ; WX 722 ; N Rcaron ; B 76 0 677 936 ; +C -1 ; WX 778 ; N Gcommaaccent ; B 44 -228 713 737 ; +C -1 ; WX 611 ; N ucircumflex ; B 66 -14 545 750 ; +C -1 ; WX 556 ; N acircumflex ; B 29 -14 527 750 ; +C -1 ; WX 722 ; N Amacron ; B 20 0 702 864 ; +C -1 ; WX 389 ; N rcaron ; B 18 0 373 750 ; +C -1 ; WX 556 ; N ccedilla ; B 34 -228 524 546 ; +C -1 ; WX 611 ; N Zdotaccent ; B 25 0 586 915 ; +C -1 ; WX 667 ; N Thorn ; B 76 0 627 718 ; +C -1 ; WX 778 ; N Omacron ; B 44 -19 734 864 ; +C -1 ; WX 722 ; N Racute ; B 76 0 677 936 ; +C -1 ; WX 667 ; N Sacute ; B 39 -19 629 936 ; +C -1 ; WX 743 ; N dcaron ; B 34 -14 750 718 ; +C -1 ; WX 722 ; N Umacron ; B 72 -19 651 864 ; +C -1 ; WX 611 ; N uring ; B 66 -14 545 776 ; +C -1 ; WX 333 ; N threesuperior ; B 8 271 326 710 ; +C -1 ; WX 778 ; N Ograve ; B 44 -19 734 936 ; +C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ; +C -1 ; WX 722 ; N Abreve ; B 20 0 702 936 ; +C -1 ; WX 584 ; N multiply ; B 40 1 545 505 ; +C -1 ; WX 611 ; N uacute ; B 66 -14 545 750 ; +C -1 ; WX 611 ; N Tcaron ; B 14 0 598 936 ; +C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ; +C -1 ; WX 556 ; N ydieresis ; B 10 -214 539 729 ; +C -1 ; WX 722 ; N Nacute ; B 69 0 654 936 ; +C -1 ; WX 278 ; N icircumflex ; B -37 0 316 750 ; +C -1 ; WX 667 ; N Ecircumflex ; B 76 0 621 936 ; +C -1 ; WX 556 ; N adieresis ; B 29 -14 527 729 ; +C -1 ; WX 556 ; N edieresis ; B 23 -14 528 729 ; +C -1 ; WX 556 ; N cacute ; B 34 -14 524 750 ; +C -1 ; WX 611 ; N nacute ; B 65 0 546 750 ; +C -1 ; WX 611 ; N umacron ; B 66 -14 545 678 ; +C -1 ; WX 722 ; N Ncaron ; B 69 0 654 936 ; +C -1 ; WX 278 ; N Iacute ; B 64 0 329 936 ; +C -1 ; WX 584 ; N plusminus ; B 40 0 544 506 ; +C -1 ; WX 280 ; N brokenbar ; B 84 -150 196 700 ; +C -1 ; WX 737 ; N registered ; B -11 -19 748 737 ; +C -1 ; WX 778 ; N Gbreve ; B 44 -19 713 936 ; +C -1 ; WX 278 ; N Idotaccent ; B 64 0 214 915 ; +C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ; +C -1 ; WX 667 ; N Egrave ; B 76 0 621 936 ; +C -1 ; WX 389 ; N racute ; B 64 0 384 750 ; +C -1 ; WX 611 ; N omacron ; B 34 -14 578 678 ; +C -1 ; WX 611 ; N Zacute ; B 25 0 586 936 ; +C -1 ; WX 611 ; N Zcaron ; B 25 0 586 936 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; +C -1 ; WX 722 ; N Eth ; B -5 0 685 718 ; +C -1 ; WX 722 ; N Ccedilla ; B 44 -228 684 737 ; +C -1 ; WX 278 ; N lcommaaccent ; B 69 -228 213 718 ; +C -1 ; WX 389 ; N tcaron ; B 10 -6 421 878 ; +C -1 ; WX 556 ; N eogonek ; B 23 -228 528 546 ; +C -1 ; WX 722 ; N Uogonek ; B 72 -228 651 718 ; +C -1 ; WX 722 ; N Aacute ; B 20 0 702 936 ; +C -1 ; WX 722 ; N Adieresis ; B 20 0 702 915 ; +C -1 ; WX 556 ; N egrave ; B 23 -14 528 750 ; +C -1 ; WX 500 ; N zacute ; B 20 0 480 750 ; +C -1 ; WX 278 ; N iogonek ; B 16 -224 249 725 ; +C -1 ; WX 778 ; N Oacute ; B 44 -19 734 936 ; +C -1 ; WX 611 ; N oacute ; B 34 -14 578 750 ; +C -1 ; WX 556 ; N amacron ; B 29 -14 527 678 ; +C -1 ; WX 556 ; N sacute ; B 30 -14 519 750 ; +C -1 ; WX 278 ; N idieresis ; B -21 0 300 729 ; +C -1 ; WX 778 ; N Ocircumflex ; B 44 -19 734 936 ; +C -1 ; WX 722 ; N Ugrave ; B 72 -19 651 936 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 611 ; N thorn ; B 62 -208 578 718 ; +C -1 ; WX 333 ; N twosuperior ; B 9 283 324 710 ; +C -1 ; WX 778 ; N Odieresis ; B 44 -19 734 915 ; +C -1 ; WX 611 ; N mu ; B 66 -207 545 532 ; +C -1 ; WX 278 ; N igrave ; B -50 0 209 750 ; +C -1 ; WX 611 ; N ohungarumlaut ; B 34 -14 625 750 ; +C -1 ; WX 667 ; N Eogonek ; B 76 -224 639 718 ; +C -1 ; WX 611 ; N dcroat ; B 34 -14 650 718 ; +C -1 ; WX 834 ; N threequarters ; B 16 -19 799 710 ; +C -1 ; WX 667 ; N Scedilla ; B 39 -228 629 737 ; +C -1 ; WX 400 ; N lcaron ; B 69 0 408 718 ; +C -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 722 718 ; +C -1 ; WX 611 ; N Lacute ; B 76 0 583 936 ; +C -1 ; WX 1000 ; N trademark ; B 44 306 956 718 ; +C -1 ; WX 556 ; N edotaccent ; B 23 -14 528 729 ; +C -1 ; WX 278 ; N Igrave ; B -50 0 214 936 ; +C -1 ; WX 278 ; N Imacron ; B -33 0 312 864 ; +C -1 ; WX 611 ; N Lcaron ; B 76 0 583 718 ; +C -1 ; WX 834 ; N onehalf ; B 26 -19 794 710 ; +C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; +C -1 ; WX 611 ; N ocircumflex ; B 34 -14 578 750 ; +C -1 ; WX 611 ; N ntilde ; B 65 0 546 737 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 72 -19 681 936 ; +C -1 ; WX 667 ; N Eacute ; B 76 0 621 936 ; +C -1 ; WX 556 ; N emacron ; B 23 -14 528 678 ; +C -1 ; WX 611 ; N gbreve ; B 40 -217 553 750 ; +C -1 ; WX 834 ; N onequarter ; B 26 -19 766 710 ; +C -1 ; WX 667 ; N Scaron ; B 39 -19 629 936 ; +C -1 ; WX 667 ; N Scommaaccent ; B 39 -228 629 737 ; +C -1 ; WX 778 ; N Ohungarumlaut ; B 44 -19 734 936 ; +C -1 ; WX 400 ; N degree ; B 57 426 343 712 ; +C -1 ; WX 611 ; N ograve ; B 34 -14 578 750 ; +C -1 ; WX 722 ; N Ccaron ; B 44 -19 684 936 ; +C -1 ; WX 611 ; N ugrave ; B 66 -14 545 750 ; +C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ; +C -1 ; WX 722 ; N Dcaron ; B 76 0 685 936 ; +C -1 ; WX 389 ; N rcommaaccent ; B 64 -228 373 546 ; +C -1 ; WX 722 ; N Ntilde ; B 69 0 654 923 ; +C -1 ; WX 611 ; N otilde ; B 34 -14 578 737 ; +C -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 677 718 ; +C -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 583 718 ; +C -1 ; WX 722 ; N Atilde ; B 20 0 702 923 ; +C -1 ; WX 722 ; N Aogonek ; B 20 -224 742 718 ; +C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ; +C -1 ; WX 778 ; N Otilde ; B 44 -19 734 923 ; +C -1 ; WX 500 ; N zdotaccent ; B 20 0 480 729 ; +C -1 ; WX 667 ; N Ecaron ; B 76 0 621 936 ; +C -1 ; WX 278 ; N Iogonek ; B -11 -228 222 718 ; +C -1 ; WX 556 ; N kcommaaccent ; B 69 -228 562 718 ; +C -1 ; WX 584 ; N minus ; B 40 197 544 309 ; +C -1 ; WX 278 ; N Icircumflex ; B -37 0 316 936 ; +C -1 ; WX 611 ; N ncaron ; B 65 0 546 750 ; +C -1 ; WX 333 ; N tcommaaccent ; B 10 -228 309 676 ; +C -1 ; WX 584 ; N logicalnot ; B 40 108 544 419 ; +C -1 ; WX 611 ; N odieresis ; B 34 -14 578 729 ; +C -1 ; WX 611 ; N udieresis ; B 66 -14 545 729 ; +C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ; +C -1 ; WX 611 ; N gcommaaccent ; B 40 -217 553 850 ; +C -1 ; WX 611 ; N eth ; B 34 -14 578 737 ; +C -1 ; WX 500 ; N zcaron ; B 20 0 480 750 ; +C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 546 546 ; +C -1 ; WX 333 ; N onesuperior ; B 26 283 237 710 ; +C -1 ; WX 278 ; N imacron ; B -8 0 285 678 ; +C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2481 +KPX A C -40 +KPX A Cacute -40 +KPX A Ccaron -40 +KPX A Ccedilla -40 +KPX A G -50 +KPX A Gbreve -50 +KPX A Gcommaaccent -50 +KPX A O -40 +KPX A Oacute -40 +KPX A Ocircumflex -40 +KPX A Odieresis -40 +KPX A Ograve -40 +KPX A Ohungarumlaut -40 +KPX A Omacron -40 +KPX A Oslash -40 +KPX A Otilde -40 +KPX A Q -40 +KPX A T -90 +KPX A Tcaron -90 +KPX A Tcommaaccent -90 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -80 +KPX A W -60 +KPX A Y -110 +KPX A Yacute -110 +KPX A Ydieresis -110 +KPX A u -30 +KPX A uacute -30 +KPX A ucircumflex -30 +KPX A udieresis -30 +KPX A ugrave -30 +KPX A uhungarumlaut -30 +KPX A umacron -30 +KPX A uogonek -30 +KPX A uring -30 +KPX A v -40 +KPX A w -30 +KPX A y -30 +KPX A yacute -30 +KPX A ydieresis -30 +KPX Aacute C -40 +KPX Aacute Cacute -40 +KPX Aacute Ccaron -40 +KPX Aacute Ccedilla -40 +KPX Aacute G -50 +KPX Aacute Gbreve -50 +KPX Aacute Gcommaaccent -50 +KPX Aacute O -40 +KPX Aacute Oacute -40 +KPX Aacute Ocircumflex -40 +KPX Aacute Odieresis -40 +KPX Aacute Ograve -40 +KPX Aacute Ohungarumlaut -40 +KPX Aacute Omacron -40 +KPX Aacute Oslash -40 +KPX Aacute Otilde -40 +KPX Aacute Q -40 +KPX Aacute T -90 +KPX Aacute Tcaron -90 +KPX Aacute Tcommaaccent -90 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -80 +KPX Aacute W -60 +KPX Aacute Y -110 +KPX Aacute Yacute -110 +KPX Aacute Ydieresis -110 +KPX Aacute u -30 +KPX Aacute uacute -30 +KPX Aacute ucircumflex -30 +KPX Aacute udieresis -30 +KPX Aacute ugrave -30 +KPX Aacute uhungarumlaut -30 +KPX Aacute umacron -30 +KPX Aacute uogonek -30 +KPX Aacute uring -30 +KPX Aacute v -40 +KPX Aacute w -30 +KPX Aacute y -30 +KPX Aacute yacute -30 +KPX Aacute ydieresis -30 +KPX Abreve C -40 +KPX Abreve Cacute -40 +KPX Abreve Ccaron -40 +KPX Abreve Ccedilla -40 +KPX Abreve G -50 +KPX Abreve Gbreve -50 +KPX Abreve Gcommaaccent -50 +KPX Abreve O -40 +KPX Abreve Oacute -40 +KPX Abreve Ocircumflex -40 +KPX Abreve Odieresis -40 +KPX Abreve Ograve -40 +KPX Abreve Ohungarumlaut -40 +KPX Abreve Omacron -40 +KPX Abreve Oslash -40 +KPX Abreve Otilde -40 +KPX Abreve Q -40 +KPX Abreve T -90 +KPX Abreve Tcaron -90 +KPX Abreve Tcommaaccent -90 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -80 +KPX Abreve W -60 +KPX Abreve Y -110 +KPX Abreve Yacute -110 +KPX Abreve Ydieresis -110 +KPX Abreve u -30 +KPX Abreve uacute -30 +KPX Abreve ucircumflex -30 +KPX Abreve udieresis -30 +KPX Abreve ugrave -30 +KPX Abreve uhungarumlaut -30 +KPX Abreve umacron -30 +KPX Abreve uogonek -30 +KPX Abreve uring -30 +KPX Abreve v -40 +KPX Abreve w -30 +KPX Abreve y -30 +KPX Abreve yacute -30 +KPX Abreve ydieresis -30 +KPX Acircumflex C -40 +KPX Acircumflex Cacute -40 +KPX Acircumflex Ccaron -40 +KPX Acircumflex Ccedilla -40 +KPX Acircumflex G -50 +KPX Acircumflex Gbreve -50 +KPX Acircumflex Gcommaaccent -50 +KPX Acircumflex O -40 +KPX Acircumflex Oacute -40 +KPX Acircumflex Ocircumflex -40 +KPX Acircumflex Odieresis -40 +KPX Acircumflex Ograve -40 +KPX Acircumflex Ohungarumlaut -40 +KPX Acircumflex Omacron -40 +KPX Acircumflex Oslash -40 +KPX Acircumflex Otilde -40 +KPX Acircumflex Q -40 +KPX Acircumflex T -90 +KPX Acircumflex Tcaron -90 +KPX Acircumflex Tcommaaccent -90 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -80 +KPX Acircumflex W -60 +KPX Acircumflex Y -110 +KPX Acircumflex Yacute -110 +KPX Acircumflex Ydieresis -110 +KPX Acircumflex u -30 +KPX Acircumflex uacute -30 +KPX Acircumflex ucircumflex -30 +KPX Acircumflex udieresis -30 +KPX Acircumflex ugrave -30 +KPX Acircumflex uhungarumlaut -30 +KPX Acircumflex umacron -30 +KPX Acircumflex uogonek -30 +KPX Acircumflex uring -30 +KPX Acircumflex v -40 +KPX Acircumflex w -30 +KPX Acircumflex y -30 +KPX Acircumflex yacute -30 +KPX Acircumflex ydieresis -30 +KPX Adieresis C -40 +KPX Adieresis Cacute -40 +KPX Adieresis Ccaron -40 +KPX Adieresis Ccedilla -40 +KPX Adieresis G -50 +KPX Adieresis Gbreve -50 +KPX Adieresis Gcommaaccent -50 +KPX Adieresis O -40 +KPX Adieresis Oacute -40 +KPX Adieresis Ocircumflex -40 +KPX Adieresis Odieresis -40 +KPX Adieresis Ograve -40 +KPX Adieresis Ohungarumlaut -40 +KPX Adieresis Omacron -40 +KPX Adieresis Oslash -40 +KPX Adieresis Otilde -40 +KPX Adieresis Q -40 +KPX Adieresis T -90 +KPX Adieresis Tcaron -90 +KPX Adieresis Tcommaaccent -90 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -80 +KPX Adieresis W -60 +KPX Adieresis Y -110 +KPX Adieresis Yacute -110 +KPX Adieresis Ydieresis -110 +KPX Adieresis u -30 +KPX Adieresis uacute -30 +KPX Adieresis ucircumflex -30 +KPX Adieresis udieresis -30 +KPX Adieresis ugrave -30 +KPX Adieresis uhungarumlaut -30 +KPX Adieresis umacron -30 +KPX Adieresis uogonek -30 +KPX Adieresis uring -30 +KPX Adieresis v -40 +KPX Adieresis w -30 +KPX Adieresis y -30 +KPX Adieresis yacute -30 +KPX Adieresis ydieresis -30 +KPX Agrave C -40 +KPX Agrave Cacute -40 +KPX Agrave Ccaron -40 +KPX Agrave Ccedilla -40 +KPX Agrave G -50 +KPX Agrave Gbreve -50 +KPX Agrave Gcommaaccent -50 +KPX Agrave O -40 +KPX Agrave Oacute -40 +KPX Agrave Ocircumflex -40 +KPX Agrave Odieresis -40 +KPX Agrave Ograve -40 +KPX Agrave Ohungarumlaut -40 +KPX Agrave Omacron -40 +KPX Agrave Oslash -40 +KPX Agrave Otilde -40 +KPX Agrave Q -40 +KPX Agrave T -90 +KPX Agrave Tcaron -90 +KPX Agrave Tcommaaccent -90 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -80 +KPX Agrave W -60 +KPX Agrave Y -110 +KPX Agrave Yacute -110 +KPX Agrave Ydieresis -110 +KPX Agrave u -30 +KPX Agrave uacute -30 +KPX Agrave ucircumflex -30 +KPX Agrave udieresis -30 +KPX Agrave ugrave -30 +KPX Agrave uhungarumlaut -30 +KPX Agrave umacron -30 +KPX Agrave uogonek -30 +KPX Agrave uring -30 +KPX Agrave v -40 +KPX Agrave w -30 +KPX Agrave y -30 +KPX Agrave yacute -30 +KPX Agrave ydieresis -30 +KPX Amacron C -40 +KPX Amacron Cacute -40 +KPX Amacron Ccaron -40 +KPX Amacron Ccedilla -40 +KPX Amacron G -50 +KPX Amacron Gbreve -50 +KPX Amacron Gcommaaccent -50 +KPX Amacron O -40 +KPX Amacron Oacute -40 +KPX Amacron Ocircumflex -40 +KPX Amacron Odieresis -40 +KPX Amacron Ograve -40 +KPX Amacron Ohungarumlaut -40 +KPX Amacron Omacron -40 +KPX Amacron Oslash -40 +KPX Amacron Otilde -40 +KPX Amacron Q -40 +KPX Amacron T -90 +KPX Amacron Tcaron -90 +KPX Amacron Tcommaaccent -90 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -80 +KPX Amacron W -60 +KPX Amacron Y -110 +KPX Amacron Yacute -110 +KPX Amacron Ydieresis -110 +KPX Amacron u -30 +KPX Amacron uacute -30 +KPX Amacron ucircumflex -30 +KPX Amacron udieresis -30 +KPX Amacron ugrave -30 +KPX Amacron uhungarumlaut -30 +KPX Amacron umacron -30 +KPX Amacron uogonek -30 +KPX Amacron uring -30 +KPX Amacron v -40 +KPX Amacron w -30 +KPX Amacron y -30 +KPX Amacron yacute -30 +KPX Amacron ydieresis -30 +KPX Aogonek C -40 +KPX Aogonek Cacute -40 +KPX Aogonek Ccaron -40 +KPX Aogonek Ccedilla -40 +KPX Aogonek G -50 +KPX Aogonek Gbreve -50 +KPX Aogonek Gcommaaccent -50 +KPX Aogonek O -40 +KPX Aogonek Oacute -40 +KPX Aogonek Ocircumflex -40 +KPX Aogonek Odieresis -40 +KPX Aogonek Ograve -40 +KPX Aogonek Ohungarumlaut -40 +KPX Aogonek Omacron -40 +KPX Aogonek Oslash -40 +KPX Aogonek Otilde -40 +KPX Aogonek Q -40 +KPX Aogonek T -90 +KPX Aogonek Tcaron -90 +KPX Aogonek Tcommaaccent -90 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -80 +KPX Aogonek W -60 +KPX Aogonek Y -110 +KPX Aogonek Yacute -110 +KPX Aogonek Ydieresis -110 +KPX Aogonek u -30 +KPX Aogonek uacute -30 +KPX Aogonek ucircumflex -30 +KPX Aogonek udieresis -30 +KPX Aogonek ugrave -30 +KPX Aogonek uhungarumlaut -30 +KPX Aogonek umacron -30 +KPX Aogonek uogonek -30 +KPX Aogonek uring -30 +KPX Aogonek v -40 +KPX Aogonek w -30 +KPX Aogonek y -30 +KPX Aogonek yacute -30 +KPX Aogonek ydieresis -30 +KPX Aring C -40 +KPX Aring Cacute -40 +KPX Aring Ccaron -40 +KPX Aring Ccedilla -40 +KPX Aring G -50 +KPX Aring Gbreve -50 +KPX Aring Gcommaaccent -50 +KPX Aring O -40 +KPX Aring Oacute -40 +KPX Aring Ocircumflex -40 +KPX Aring Odieresis -40 +KPX Aring Ograve -40 +KPX Aring Ohungarumlaut -40 +KPX Aring Omacron -40 +KPX Aring Oslash -40 +KPX Aring Otilde -40 +KPX Aring Q -40 +KPX Aring T -90 +KPX Aring Tcaron -90 +KPX Aring Tcommaaccent -90 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -80 +KPX Aring W -60 +KPX Aring Y -110 +KPX Aring Yacute -110 +KPX Aring Ydieresis -110 +KPX Aring u -30 +KPX Aring uacute -30 +KPX Aring ucircumflex -30 +KPX Aring udieresis -30 +KPX Aring ugrave -30 +KPX Aring uhungarumlaut -30 +KPX Aring umacron -30 +KPX Aring uogonek -30 +KPX Aring uring -30 +KPX Aring v -40 +KPX Aring w -30 +KPX Aring y -30 +KPX Aring yacute -30 +KPX Aring ydieresis -30 +KPX Atilde C -40 +KPX Atilde Cacute -40 +KPX Atilde Ccaron -40 +KPX Atilde Ccedilla -40 +KPX Atilde G -50 +KPX Atilde Gbreve -50 +KPX Atilde Gcommaaccent -50 +KPX Atilde O -40 +KPX Atilde Oacute -40 +KPX Atilde Ocircumflex -40 +KPX Atilde Odieresis -40 +KPX Atilde Ograve -40 +KPX Atilde Ohungarumlaut -40 +KPX Atilde Omacron -40 +KPX Atilde Oslash -40 +KPX Atilde Otilde -40 +KPX Atilde Q -40 +KPX Atilde T -90 +KPX Atilde Tcaron -90 +KPX Atilde Tcommaaccent -90 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -80 +KPX Atilde W -60 +KPX Atilde Y -110 +KPX Atilde Yacute -110 +KPX Atilde Ydieresis -110 +KPX Atilde u -30 +KPX Atilde uacute -30 +KPX Atilde ucircumflex -30 +KPX Atilde udieresis -30 +KPX Atilde ugrave -30 +KPX Atilde uhungarumlaut -30 +KPX Atilde umacron -30 +KPX Atilde uogonek -30 +KPX Atilde uring -30 +KPX Atilde v -40 +KPX Atilde w -30 +KPX Atilde y -30 +KPX Atilde yacute -30 +KPX Atilde ydieresis -30 +KPX B A -30 +KPX B Aacute -30 +KPX B Abreve -30 +KPX B Acircumflex -30 +KPX B Adieresis -30 +KPX B Agrave -30 +KPX B Amacron -30 +KPX B Aogonek -30 +KPX B Aring -30 +KPX B Atilde -30 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -40 +KPX D Aacute -40 +KPX D Abreve -40 +KPX D Acircumflex -40 +KPX D Adieresis -40 +KPX D Agrave -40 +KPX D Amacron -40 +KPX D Aogonek -40 +KPX D Aring -40 +KPX D Atilde -40 +KPX D V -40 +KPX D W -40 +KPX D Y -70 +KPX D Yacute -70 +KPX D Ydieresis -70 +KPX D comma -30 +KPX D period -30 +KPX Dcaron A -40 +KPX Dcaron Aacute -40 +KPX Dcaron Abreve -40 +KPX Dcaron Acircumflex -40 +KPX Dcaron Adieresis -40 +KPX Dcaron Agrave -40 +KPX Dcaron Amacron -40 +KPX Dcaron Aogonek -40 +KPX Dcaron Aring -40 +KPX Dcaron Atilde -40 +KPX Dcaron V -40 +KPX Dcaron W -40 +KPX Dcaron Y -70 +KPX Dcaron Yacute -70 +KPX Dcaron Ydieresis -70 +KPX Dcaron comma -30 +KPX Dcaron period -30 +KPX Dcroat A -40 +KPX Dcroat Aacute -40 +KPX Dcroat Abreve -40 +KPX Dcroat Acircumflex -40 +KPX Dcroat Adieresis -40 +KPX Dcroat Agrave -40 +KPX Dcroat Amacron -40 +KPX Dcroat Aogonek -40 +KPX Dcroat Aring -40 +KPX Dcroat Atilde -40 +KPX Dcroat V -40 +KPX Dcroat W -40 +KPX Dcroat Y -70 +KPX Dcroat Yacute -70 +KPX Dcroat Ydieresis -70 +KPX Dcroat comma -30 +KPX Dcroat period -30 +KPX F A -80 +KPX F Aacute -80 +KPX F Abreve -80 +KPX F Acircumflex -80 +KPX F Adieresis -80 +KPX F Agrave -80 +KPX F Amacron -80 +KPX F Aogonek -80 +KPX F Aring -80 +KPX F Atilde -80 +KPX F a -20 +KPX F aacute -20 +KPX F abreve -20 +KPX F acircumflex -20 +KPX F adieresis -20 +KPX F agrave -20 +KPX F amacron -20 +KPX F aogonek -20 +KPX F aring -20 +KPX F atilde -20 +KPX F comma -100 +KPX F period -100 +KPX J A -20 +KPX J Aacute -20 +KPX J Abreve -20 +KPX J Acircumflex -20 +KPX J Adieresis -20 +KPX J Agrave -20 +KPX J Amacron -20 +KPX J Aogonek -20 +KPX J Aring -20 +KPX J Atilde -20 +KPX J comma -20 +KPX J period -20 +KPX J u -20 +KPX J uacute -20 +KPX J ucircumflex -20 +KPX J udieresis -20 +KPX J ugrave -20 +KPX J uhungarumlaut -20 +KPX J umacron -20 +KPX J uogonek -20 +KPX J uring -20 +KPX K O -30 +KPX K Oacute -30 +KPX K Ocircumflex -30 +KPX K Odieresis -30 +KPX K Ograve -30 +KPX K Ohungarumlaut -30 +KPX K Omacron -30 +KPX K Oslash -30 +KPX K Otilde -30 +KPX K e -15 +KPX K eacute -15 +KPX K ecaron -15 +KPX K ecircumflex -15 +KPX K edieresis -15 +KPX K edotaccent -15 +KPX K egrave -15 +KPX K emacron -15 +KPX K eogonek -15 +KPX K o -35 +KPX K oacute -35 +KPX K ocircumflex -35 +KPX K odieresis -35 +KPX K ograve -35 +KPX K ohungarumlaut -35 +KPX K omacron -35 +KPX K oslash -35 +KPX K otilde -35 +KPX K u -30 +KPX K uacute -30 +KPX K ucircumflex -30 +KPX K udieresis -30 +KPX K ugrave -30 +KPX K uhungarumlaut -30 +KPX K umacron -30 +KPX K uogonek -30 +KPX K uring -30 +KPX K y -40 +KPX K yacute -40 +KPX K ydieresis -40 +KPX Kcommaaccent O -30 +KPX Kcommaaccent Oacute -30 +KPX Kcommaaccent Ocircumflex -30 +KPX Kcommaaccent Odieresis -30 +KPX Kcommaaccent Ograve -30 +KPX Kcommaaccent Ohungarumlaut -30 +KPX Kcommaaccent Omacron -30 +KPX Kcommaaccent Oslash -30 +KPX Kcommaaccent Otilde -30 +KPX Kcommaaccent e -15 +KPX Kcommaaccent eacute -15 +KPX Kcommaaccent ecaron -15 +KPX Kcommaaccent ecircumflex -15 +KPX Kcommaaccent edieresis -15 +KPX Kcommaaccent edotaccent -15 +KPX Kcommaaccent egrave -15 +KPX Kcommaaccent emacron -15 +KPX Kcommaaccent eogonek -15 +KPX Kcommaaccent o -35 +KPX Kcommaaccent oacute -35 +KPX Kcommaaccent ocircumflex -35 +KPX Kcommaaccent odieresis -35 +KPX Kcommaaccent ograve -35 +KPX Kcommaaccent ohungarumlaut -35 +KPX Kcommaaccent omacron -35 +KPX Kcommaaccent oslash -35 +KPX Kcommaaccent otilde -35 +KPX Kcommaaccent u -30 +KPX Kcommaaccent uacute -30 +KPX Kcommaaccent ucircumflex -30 +KPX Kcommaaccent udieresis -30 +KPX Kcommaaccent ugrave -30 +KPX Kcommaaccent uhungarumlaut -30 +KPX Kcommaaccent umacron -30 +KPX Kcommaaccent uogonek -30 +KPX Kcommaaccent uring -30 +KPX Kcommaaccent y -40 +KPX Kcommaaccent yacute -40 +KPX Kcommaaccent ydieresis -40 +KPX L T -90 +KPX L Tcaron -90 +KPX L Tcommaaccent -90 +KPX L V -110 +KPX L W -80 +KPX L Y -120 +KPX L Yacute -120 +KPX L Ydieresis -120 +KPX L quotedblright -140 +KPX L quoteright -140 +KPX L y -30 +KPX L yacute -30 +KPX L ydieresis -30 +KPX Lacute T -90 +KPX Lacute Tcaron -90 +KPX Lacute Tcommaaccent -90 +KPX Lacute V -110 +KPX Lacute W -80 +KPX Lacute Y -120 +KPX Lacute Yacute -120 +KPX Lacute Ydieresis -120 +KPX Lacute quotedblright -140 +KPX Lacute quoteright -140 +KPX Lacute y -30 +KPX Lacute yacute -30 +KPX Lacute ydieresis -30 +KPX Lcommaaccent T -90 +KPX Lcommaaccent Tcaron -90 +KPX Lcommaaccent Tcommaaccent -90 +KPX Lcommaaccent V -110 +KPX Lcommaaccent W -80 +KPX Lcommaaccent Y -120 +KPX Lcommaaccent Yacute -120 +KPX Lcommaaccent Ydieresis -120 +KPX Lcommaaccent quotedblright -140 +KPX Lcommaaccent quoteright -140 +KPX Lcommaaccent y -30 +KPX Lcommaaccent yacute -30 +KPX Lcommaaccent ydieresis -30 +KPX Lslash T -90 +KPX Lslash Tcaron -90 +KPX Lslash Tcommaaccent -90 +KPX Lslash V -110 +KPX Lslash W -80 +KPX Lslash Y -120 +KPX Lslash Yacute -120 +KPX Lslash Ydieresis -120 +KPX Lslash quotedblright -140 +KPX Lslash quoteright -140 +KPX Lslash y -30 +KPX Lslash yacute -30 +KPX Lslash ydieresis -30 +KPX O A -50 +KPX O Aacute -50 +KPX O Abreve -50 +KPX O Acircumflex -50 +KPX O Adieresis -50 +KPX O Agrave -50 +KPX O Amacron -50 +KPX O Aogonek -50 +KPX O Aring -50 +KPX O Atilde -50 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -50 +KPX O X -50 +KPX O Y -70 +KPX O Yacute -70 +KPX O Ydieresis -70 +KPX O comma -40 +KPX O period -40 +KPX Oacute A -50 +KPX Oacute Aacute -50 +KPX Oacute Abreve -50 +KPX Oacute Acircumflex -50 +KPX Oacute Adieresis -50 +KPX Oacute Agrave -50 +KPX Oacute Amacron -50 +KPX Oacute Aogonek -50 +KPX Oacute Aring -50 +KPX Oacute Atilde -50 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -50 +KPX Oacute X -50 +KPX Oacute Y -70 +KPX Oacute Yacute -70 +KPX Oacute Ydieresis -70 +KPX Oacute comma -40 +KPX Oacute period -40 +KPX Ocircumflex A -50 +KPX Ocircumflex Aacute -50 +KPX Ocircumflex Abreve -50 +KPX Ocircumflex Acircumflex -50 +KPX Ocircumflex Adieresis -50 +KPX Ocircumflex Agrave -50 +KPX Ocircumflex Amacron -50 +KPX Ocircumflex Aogonek -50 +KPX Ocircumflex Aring -50 +KPX Ocircumflex Atilde -50 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -50 +KPX Ocircumflex X -50 +KPX Ocircumflex Y -70 +KPX Ocircumflex Yacute -70 +KPX Ocircumflex Ydieresis -70 +KPX Ocircumflex comma -40 +KPX Ocircumflex period -40 +KPX Odieresis A -50 +KPX Odieresis Aacute -50 +KPX Odieresis Abreve -50 +KPX Odieresis Acircumflex -50 +KPX Odieresis Adieresis -50 +KPX Odieresis Agrave -50 +KPX Odieresis Amacron -50 +KPX Odieresis Aogonek -50 +KPX Odieresis Aring -50 +KPX Odieresis Atilde -50 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -50 +KPX Odieresis X -50 +KPX Odieresis Y -70 +KPX Odieresis Yacute -70 +KPX Odieresis Ydieresis -70 +KPX Odieresis comma -40 +KPX Odieresis period -40 +KPX Ograve A -50 +KPX Ograve Aacute -50 +KPX Ograve Abreve -50 +KPX Ograve Acircumflex -50 +KPX Ograve Adieresis -50 +KPX Ograve Agrave -50 +KPX Ograve Amacron -50 +KPX Ograve Aogonek -50 +KPX Ograve Aring -50 +KPX Ograve Atilde -50 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -50 +KPX Ograve X -50 +KPX Ograve Y -70 +KPX Ograve Yacute -70 +KPX Ograve Ydieresis -70 +KPX Ograve comma -40 +KPX Ograve period -40 +KPX Ohungarumlaut A -50 +KPX Ohungarumlaut Aacute -50 +KPX Ohungarumlaut Abreve -50 +KPX Ohungarumlaut Acircumflex -50 +KPX Ohungarumlaut Adieresis -50 +KPX Ohungarumlaut Agrave -50 +KPX Ohungarumlaut Amacron -50 +KPX Ohungarumlaut Aogonek -50 +KPX Ohungarumlaut Aring -50 +KPX Ohungarumlaut Atilde -50 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -50 +KPX Ohungarumlaut X -50 +KPX Ohungarumlaut Y -70 +KPX Ohungarumlaut Yacute -70 +KPX Ohungarumlaut Ydieresis -70 +KPX Ohungarumlaut comma -40 +KPX Ohungarumlaut period -40 +KPX Omacron A -50 +KPX Omacron Aacute -50 +KPX Omacron Abreve -50 +KPX Omacron Acircumflex -50 +KPX Omacron Adieresis -50 +KPX Omacron Agrave -50 +KPX Omacron Amacron -50 +KPX Omacron Aogonek -50 +KPX Omacron Aring -50 +KPX Omacron Atilde -50 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -50 +KPX Omacron X -50 +KPX Omacron Y -70 +KPX Omacron Yacute -70 +KPX Omacron Ydieresis -70 +KPX Omacron comma -40 +KPX Omacron period -40 +KPX Oslash A -50 +KPX Oslash Aacute -50 +KPX Oslash Abreve -50 +KPX Oslash Acircumflex -50 +KPX Oslash Adieresis -50 +KPX Oslash Agrave -50 +KPX Oslash Amacron -50 +KPX Oslash Aogonek -50 +KPX Oslash Aring -50 +KPX Oslash Atilde -50 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -50 +KPX Oslash X -50 +KPX Oslash Y -70 +KPX Oslash Yacute -70 +KPX Oslash Ydieresis -70 +KPX Oslash comma -40 +KPX Oslash period -40 +KPX Otilde A -50 +KPX Otilde Aacute -50 +KPX Otilde Abreve -50 +KPX Otilde Acircumflex -50 +KPX Otilde Adieresis -50 +KPX Otilde Agrave -50 +KPX Otilde Amacron -50 +KPX Otilde Aogonek -50 +KPX Otilde Aring -50 +KPX Otilde Atilde -50 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -50 +KPX Otilde X -50 +KPX Otilde Y -70 +KPX Otilde Yacute -70 +KPX Otilde Ydieresis -70 +KPX Otilde comma -40 +KPX Otilde period -40 +KPX P A -100 +KPX P Aacute -100 +KPX P Abreve -100 +KPX P Acircumflex -100 +KPX P Adieresis -100 +KPX P Agrave -100 +KPX P Amacron -100 +KPX P Aogonek -100 +KPX P Aring -100 +KPX P Atilde -100 +KPX P a -30 +KPX P aacute -30 +KPX P abreve -30 +KPX P acircumflex -30 +KPX P adieresis -30 +KPX P agrave -30 +KPX P amacron -30 +KPX P aogonek -30 +KPX P aring -30 +KPX P atilde -30 +KPX P comma -120 +KPX P e -30 +KPX P eacute -30 +KPX P ecaron -30 +KPX P ecircumflex -30 +KPX P edieresis -30 +KPX P edotaccent -30 +KPX P egrave -30 +KPX P emacron -30 +KPX P eogonek -30 +KPX P o -40 +KPX P oacute -40 +KPX P ocircumflex -40 +KPX P odieresis -40 +KPX P ograve -40 +KPX P ohungarumlaut -40 +KPX P omacron -40 +KPX P oslash -40 +KPX P otilde -40 +KPX P period -120 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX Q comma 20 +KPX Q period 20 +KPX R O -20 +KPX R Oacute -20 +KPX R Ocircumflex -20 +KPX R Odieresis -20 +KPX R Ograve -20 +KPX R Ohungarumlaut -20 +KPX R Omacron -20 +KPX R Oslash -20 +KPX R Otilde -20 +KPX R T -20 +KPX R Tcaron -20 +KPX R Tcommaaccent -20 +KPX R U -20 +KPX R Uacute -20 +KPX R Ucircumflex -20 +KPX R Udieresis -20 +KPX R Ugrave -20 +KPX R Uhungarumlaut -20 +KPX R Umacron -20 +KPX R Uogonek -20 +KPX R Uring -20 +KPX R V -50 +KPX R W -40 +KPX R Y -50 +KPX R Yacute -50 +KPX R Ydieresis -50 +KPX Racute O -20 +KPX Racute Oacute -20 +KPX Racute Ocircumflex -20 +KPX Racute Odieresis -20 +KPX Racute Ograve -20 +KPX Racute Ohungarumlaut -20 +KPX Racute Omacron -20 +KPX Racute Oslash -20 +KPX Racute Otilde -20 +KPX Racute T -20 +KPX Racute Tcaron -20 +KPX Racute Tcommaaccent -20 +KPX Racute U -20 +KPX Racute Uacute -20 +KPX Racute Ucircumflex -20 +KPX Racute Udieresis -20 +KPX Racute Ugrave -20 +KPX Racute Uhungarumlaut -20 +KPX Racute Umacron -20 +KPX Racute Uogonek -20 +KPX Racute Uring -20 +KPX Racute V -50 +KPX Racute W -40 +KPX Racute Y -50 +KPX Racute Yacute -50 +KPX Racute Ydieresis -50 +KPX Rcaron O -20 +KPX Rcaron Oacute -20 +KPX Rcaron Ocircumflex -20 +KPX Rcaron Odieresis -20 +KPX Rcaron Ograve -20 +KPX Rcaron Ohungarumlaut -20 +KPX Rcaron Omacron -20 +KPX Rcaron Oslash -20 +KPX Rcaron Otilde -20 +KPX Rcaron T -20 +KPX Rcaron Tcaron -20 +KPX Rcaron Tcommaaccent -20 +KPX Rcaron U -20 +KPX Rcaron Uacute -20 +KPX Rcaron Ucircumflex -20 +KPX Rcaron Udieresis -20 +KPX Rcaron Ugrave -20 +KPX Rcaron Uhungarumlaut -20 +KPX Rcaron Umacron -20 +KPX Rcaron Uogonek -20 +KPX Rcaron Uring -20 +KPX Rcaron V -50 +KPX Rcaron W -40 +KPX Rcaron Y -50 +KPX Rcaron Yacute -50 +KPX Rcaron Ydieresis -50 +KPX Rcommaaccent O -20 +KPX Rcommaaccent Oacute -20 +KPX Rcommaaccent Ocircumflex -20 +KPX Rcommaaccent Odieresis -20 +KPX Rcommaaccent Ograve -20 +KPX Rcommaaccent Ohungarumlaut -20 +KPX Rcommaaccent Omacron -20 +KPX Rcommaaccent Oslash -20 +KPX Rcommaaccent Otilde -20 +KPX Rcommaaccent T -20 +KPX Rcommaaccent Tcaron -20 +KPX Rcommaaccent Tcommaaccent -20 +KPX Rcommaaccent U -20 +KPX Rcommaaccent Uacute -20 +KPX Rcommaaccent Ucircumflex -20 +KPX Rcommaaccent Udieresis -20 +KPX Rcommaaccent Ugrave -20 +KPX Rcommaaccent Uhungarumlaut -20 +KPX Rcommaaccent Umacron -20 +KPX Rcommaaccent Uogonek -20 +KPX Rcommaaccent Uring -20 +KPX Rcommaaccent V -50 +KPX Rcommaaccent W -40 +KPX Rcommaaccent Y -50 +KPX Rcommaaccent Yacute -50 +KPX Rcommaaccent Ydieresis -50 +KPX T A -90 +KPX T Aacute -90 +KPX T Abreve -90 +KPX T Acircumflex -90 +KPX T Adieresis -90 +KPX T Agrave -90 +KPX T Amacron -90 +KPX T Aogonek -90 +KPX T Aring -90 +KPX T Atilde -90 +KPX T O -40 +KPX T Oacute -40 +KPX T Ocircumflex -40 +KPX T Odieresis -40 +KPX T Ograve -40 +KPX T Ohungarumlaut -40 +KPX T Omacron -40 +KPX T Oslash -40 +KPX T Otilde -40 +KPX T a -80 +KPX T aacute -80 +KPX T abreve -80 +KPX T acircumflex -80 +KPX T adieresis -80 +KPX T agrave -80 +KPX T amacron -80 +KPX T aogonek -80 +KPX T aring -80 +KPX T atilde -80 +KPX T colon -40 +KPX T comma -80 +KPX T e -60 +KPX T eacute -60 +KPX T ecaron -60 +KPX T ecircumflex -60 +KPX T edieresis -60 +KPX T edotaccent -60 +KPX T egrave -60 +KPX T emacron -60 +KPX T eogonek -60 +KPX T hyphen -120 +KPX T o -80 +KPX T oacute -80 +KPX T ocircumflex -80 +KPX T odieresis -80 +KPX T ograve -80 +KPX T ohungarumlaut -80 +KPX T omacron -80 +KPX T oslash -80 +KPX T otilde -80 +KPX T period -80 +KPX T r -80 +KPX T racute -80 +KPX T rcommaaccent -80 +KPX T semicolon -40 +KPX T u -90 +KPX T uacute -90 +KPX T ucircumflex -90 +KPX T udieresis -90 +KPX T ugrave -90 +KPX T uhungarumlaut -90 +KPX T umacron -90 +KPX T uogonek -90 +KPX T uring -90 +KPX T w -60 +KPX T y -60 +KPX T yacute -60 +KPX T ydieresis -60 +KPX Tcaron A -90 +KPX Tcaron Aacute -90 +KPX Tcaron Abreve -90 +KPX Tcaron Acircumflex -90 +KPX Tcaron Adieresis -90 +KPX Tcaron Agrave -90 +KPX Tcaron Amacron -90 +KPX Tcaron Aogonek -90 +KPX Tcaron Aring -90 +KPX Tcaron Atilde -90 +KPX Tcaron O -40 +KPX Tcaron Oacute -40 +KPX Tcaron Ocircumflex -40 +KPX Tcaron Odieresis -40 +KPX Tcaron Ograve -40 +KPX Tcaron Ohungarumlaut -40 +KPX Tcaron Omacron -40 +KPX Tcaron Oslash -40 +KPX Tcaron Otilde -40 +KPX Tcaron a -80 +KPX Tcaron aacute -80 +KPX Tcaron abreve -80 +KPX Tcaron acircumflex -80 +KPX Tcaron adieresis -80 +KPX Tcaron agrave -80 +KPX Tcaron amacron -80 +KPX Tcaron aogonek -80 +KPX Tcaron aring -80 +KPX Tcaron atilde -80 +KPX Tcaron colon -40 +KPX Tcaron comma -80 +KPX Tcaron e -60 +KPX Tcaron eacute -60 +KPX Tcaron ecaron -60 +KPX Tcaron ecircumflex -60 +KPX Tcaron edieresis -60 +KPX Tcaron edotaccent -60 +KPX Tcaron egrave -60 +KPX Tcaron emacron -60 +KPX Tcaron eogonek -60 +KPX Tcaron hyphen -120 +KPX Tcaron o -80 +KPX Tcaron oacute -80 +KPX Tcaron ocircumflex -80 +KPX Tcaron odieresis -80 +KPX Tcaron ograve -80 +KPX Tcaron ohungarumlaut -80 +KPX Tcaron omacron -80 +KPX Tcaron oslash -80 +KPX Tcaron otilde -80 +KPX Tcaron period -80 +KPX Tcaron r -80 +KPX Tcaron racute -80 +KPX Tcaron rcommaaccent -80 +KPX Tcaron semicolon -40 +KPX Tcaron u -90 +KPX Tcaron uacute -90 +KPX Tcaron ucircumflex -90 +KPX Tcaron udieresis -90 +KPX Tcaron ugrave -90 +KPX Tcaron uhungarumlaut -90 +KPX Tcaron umacron -90 +KPX Tcaron uogonek -90 +KPX Tcaron uring -90 +KPX Tcaron w -60 +KPX Tcaron y -60 +KPX Tcaron yacute -60 +KPX Tcaron ydieresis -60 +KPX Tcommaaccent A -90 +KPX Tcommaaccent Aacute -90 +KPX Tcommaaccent Abreve -90 +KPX Tcommaaccent Acircumflex -90 +KPX Tcommaaccent Adieresis -90 +KPX Tcommaaccent Agrave -90 +KPX Tcommaaccent Amacron -90 +KPX Tcommaaccent Aogonek -90 +KPX Tcommaaccent Aring -90 +KPX Tcommaaccent Atilde -90 +KPX Tcommaaccent O -40 +KPX Tcommaaccent Oacute -40 +KPX Tcommaaccent Ocircumflex -40 +KPX Tcommaaccent Odieresis -40 +KPX Tcommaaccent Ograve -40 +KPX Tcommaaccent Ohungarumlaut -40 +KPX Tcommaaccent Omacron -40 +KPX Tcommaaccent Oslash -40 +KPX Tcommaaccent Otilde -40 +KPX Tcommaaccent a -80 +KPX Tcommaaccent aacute -80 +KPX Tcommaaccent abreve -80 +KPX Tcommaaccent acircumflex -80 +KPX Tcommaaccent adieresis -80 +KPX Tcommaaccent agrave -80 +KPX Tcommaaccent amacron -80 +KPX Tcommaaccent aogonek -80 +KPX Tcommaaccent aring -80 +KPX Tcommaaccent atilde -80 +KPX Tcommaaccent colon -40 +KPX Tcommaaccent comma -80 +KPX Tcommaaccent e -60 +KPX Tcommaaccent eacute -60 +KPX Tcommaaccent ecaron -60 +KPX Tcommaaccent ecircumflex -60 +KPX Tcommaaccent edieresis -60 +KPX Tcommaaccent edotaccent -60 +KPX Tcommaaccent egrave -60 +KPX Tcommaaccent emacron -60 +KPX Tcommaaccent eogonek -60 +KPX Tcommaaccent hyphen -120 +KPX Tcommaaccent o -80 +KPX Tcommaaccent oacute -80 +KPX Tcommaaccent ocircumflex -80 +KPX Tcommaaccent odieresis -80 +KPX Tcommaaccent ograve -80 +KPX Tcommaaccent ohungarumlaut -80 +KPX Tcommaaccent omacron -80 +KPX Tcommaaccent oslash -80 +KPX Tcommaaccent otilde -80 +KPX Tcommaaccent period -80 +KPX Tcommaaccent r -80 +KPX Tcommaaccent racute -80 +KPX Tcommaaccent rcommaaccent -80 +KPX Tcommaaccent semicolon -40 +KPX Tcommaaccent u -90 +KPX Tcommaaccent uacute -90 +KPX Tcommaaccent ucircumflex -90 +KPX Tcommaaccent udieresis -90 +KPX Tcommaaccent ugrave -90 +KPX Tcommaaccent uhungarumlaut -90 +KPX Tcommaaccent umacron -90 +KPX Tcommaaccent uogonek -90 +KPX Tcommaaccent uring -90 +KPX Tcommaaccent w -60 +KPX Tcommaaccent y -60 +KPX Tcommaaccent yacute -60 +KPX Tcommaaccent ydieresis -60 +KPX U A -50 +KPX U Aacute -50 +KPX U Abreve -50 +KPX U Acircumflex -50 +KPX U Adieresis -50 +KPX U Agrave -50 +KPX U Amacron -50 +KPX U Aogonek -50 +KPX U Aring -50 +KPX U Atilde -50 +KPX U comma -30 +KPX U period -30 +KPX Uacute A -50 +KPX Uacute Aacute -50 +KPX Uacute Abreve -50 +KPX Uacute Acircumflex -50 +KPX Uacute Adieresis -50 +KPX Uacute Agrave -50 +KPX Uacute Amacron -50 +KPX Uacute Aogonek -50 +KPX Uacute Aring -50 +KPX Uacute Atilde -50 +KPX Uacute comma -30 +KPX Uacute period -30 +KPX Ucircumflex A -50 +KPX Ucircumflex Aacute -50 +KPX Ucircumflex Abreve -50 +KPX Ucircumflex Acircumflex -50 +KPX Ucircumflex Adieresis -50 +KPX Ucircumflex Agrave -50 +KPX Ucircumflex Amacron -50 +KPX Ucircumflex Aogonek -50 +KPX Ucircumflex Aring -50 +KPX Ucircumflex Atilde -50 +KPX Ucircumflex comma -30 +KPX Ucircumflex period -30 +KPX Udieresis A -50 +KPX Udieresis Aacute -50 +KPX Udieresis Abreve -50 +KPX Udieresis Acircumflex -50 +KPX Udieresis Adieresis -50 +KPX Udieresis Agrave -50 +KPX Udieresis Amacron -50 +KPX Udieresis Aogonek -50 +KPX Udieresis Aring -50 +KPX Udieresis Atilde -50 +KPX Udieresis comma -30 +KPX Udieresis period -30 +KPX Ugrave A -50 +KPX Ugrave Aacute -50 +KPX Ugrave Abreve -50 +KPX Ugrave Acircumflex -50 +KPX Ugrave Adieresis -50 +KPX Ugrave Agrave -50 +KPX Ugrave Amacron -50 +KPX Ugrave Aogonek -50 +KPX Ugrave Aring -50 +KPX Ugrave Atilde -50 +KPX Ugrave comma -30 +KPX Ugrave period -30 +KPX Uhungarumlaut A -50 +KPX Uhungarumlaut Aacute -50 +KPX Uhungarumlaut Abreve -50 +KPX Uhungarumlaut Acircumflex -50 +KPX Uhungarumlaut Adieresis -50 +KPX Uhungarumlaut Agrave -50 +KPX Uhungarumlaut Amacron -50 +KPX Uhungarumlaut Aogonek -50 +KPX Uhungarumlaut Aring -50 +KPX Uhungarumlaut Atilde -50 +KPX Uhungarumlaut comma -30 +KPX Uhungarumlaut period -30 +KPX Umacron A -50 +KPX Umacron Aacute -50 +KPX Umacron Abreve -50 +KPX Umacron Acircumflex -50 +KPX Umacron Adieresis -50 +KPX Umacron Agrave -50 +KPX Umacron Amacron -50 +KPX Umacron Aogonek -50 +KPX Umacron Aring -50 +KPX Umacron Atilde -50 +KPX Umacron comma -30 +KPX Umacron period -30 +KPX Uogonek A -50 +KPX Uogonek Aacute -50 +KPX Uogonek Abreve -50 +KPX Uogonek Acircumflex -50 +KPX Uogonek Adieresis -50 +KPX Uogonek Agrave -50 +KPX Uogonek Amacron -50 +KPX Uogonek Aogonek -50 +KPX Uogonek Aring -50 +KPX Uogonek Atilde -50 +KPX Uogonek comma -30 +KPX Uogonek period -30 +KPX Uring A -50 +KPX Uring Aacute -50 +KPX Uring Abreve -50 +KPX Uring Acircumflex -50 +KPX Uring Adieresis -50 +KPX Uring Agrave -50 +KPX Uring Amacron -50 +KPX Uring Aogonek -50 +KPX Uring Aring -50 +KPX Uring Atilde -50 +KPX Uring comma -30 +KPX Uring period -30 +KPX V A -80 +KPX V Aacute -80 +KPX V Abreve -80 +KPX V Acircumflex -80 +KPX V Adieresis -80 +KPX V Agrave -80 +KPX V Amacron -80 +KPX V Aogonek -80 +KPX V Aring -80 +KPX V Atilde -80 +KPX V G -50 +KPX V Gbreve -50 +KPX V Gcommaaccent -50 +KPX V O -50 +KPX V Oacute -50 +KPX V Ocircumflex -50 +KPX V Odieresis -50 +KPX V Ograve -50 +KPX V Ohungarumlaut -50 +KPX V Omacron -50 +KPX V Oslash -50 +KPX V Otilde -50 +KPX V a -60 +KPX V aacute -60 +KPX V abreve -60 +KPX V acircumflex -60 +KPX V adieresis -60 +KPX V agrave -60 +KPX V amacron -60 +KPX V aogonek -60 +KPX V aring -60 +KPX V atilde -60 +KPX V colon -40 +KPX V comma -120 +KPX V e -50 +KPX V eacute -50 +KPX V ecaron -50 +KPX V ecircumflex -50 +KPX V edieresis -50 +KPX V edotaccent -50 +KPX V egrave -50 +KPX V emacron -50 +KPX V eogonek -50 +KPX V hyphen -80 +KPX V o -90 +KPX V oacute -90 +KPX V ocircumflex -90 +KPX V odieresis -90 +KPX V ograve -90 +KPX V ohungarumlaut -90 +KPX V omacron -90 +KPX V oslash -90 +KPX V otilde -90 +KPX V period -120 +KPX V semicolon -40 +KPX V u -60 +KPX V uacute -60 +KPX V ucircumflex -60 +KPX V udieresis -60 +KPX V ugrave -60 +KPX V uhungarumlaut -60 +KPX V umacron -60 +KPX V uogonek -60 +KPX V uring -60 +KPX W A -60 +KPX W Aacute -60 +KPX W Abreve -60 +KPX W Acircumflex -60 +KPX W Adieresis -60 +KPX W Agrave -60 +KPX W Amacron -60 +KPX W Aogonek -60 +KPX W Aring -60 +KPX W Atilde -60 +KPX W O -20 +KPX W Oacute -20 +KPX W Ocircumflex -20 +KPX W Odieresis -20 +KPX W Ograve -20 +KPX W Ohungarumlaut -20 +KPX W Omacron -20 +KPX W Oslash -20 +KPX W Otilde -20 +KPX W a -40 +KPX W aacute -40 +KPX W abreve -40 +KPX W acircumflex -40 +KPX W adieresis -40 +KPX W agrave -40 +KPX W amacron -40 +KPX W aogonek -40 +KPX W aring -40 +KPX W atilde -40 +KPX W colon -10 +KPX W comma -80 +KPX W e -35 +KPX W eacute -35 +KPX W ecaron -35 +KPX W ecircumflex -35 +KPX W edieresis -35 +KPX W edotaccent -35 +KPX W egrave -35 +KPX W emacron -35 +KPX W eogonek -35 +KPX W hyphen -40 +KPX W o -60 +KPX W oacute -60 +KPX W ocircumflex -60 +KPX W odieresis -60 +KPX W ograve -60 +KPX W ohungarumlaut -60 +KPX W omacron -60 +KPX W oslash -60 +KPX W otilde -60 +KPX W period -80 +KPX W semicolon -10 +KPX W u -45 +KPX W uacute -45 +KPX W ucircumflex -45 +KPX W udieresis -45 +KPX W ugrave -45 +KPX W uhungarumlaut -45 +KPX W umacron -45 +KPX W uogonek -45 +KPX W uring -45 +KPX W y -20 +KPX W yacute -20 +KPX W ydieresis -20 +KPX Y A -110 +KPX Y Aacute -110 +KPX Y Abreve -110 +KPX Y Acircumflex -110 +KPX Y Adieresis -110 +KPX Y Agrave -110 +KPX Y Amacron -110 +KPX Y Aogonek -110 +KPX Y Aring -110 +KPX Y Atilde -110 +KPX Y O -70 +KPX Y Oacute -70 +KPX Y Ocircumflex -70 +KPX Y Odieresis -70 +KPX Y Ograve -70 +KPX Y Ohungarumlaut -70 +KPX Y Omacron -70 +KPX Y Oslash -70 +KPX Y Otilde -70 +KPX Y a -90 +KPX Y aacute -90 +KPX Y abreve -90 +KPX Y acircumflex -90 +KPX Y adieresis -90 +KPX Y agrave -90 +KPX Y amacron -90 +KPX Y aogonek -90 +KPX Y aring -90 +KPX Y atilde -90 +KPX Y colon -50 +KPX Y comma -100 +KPX Y e -80 +KPX Y eacute -80 +KPX Y ecaron -80 +KPX Y ecircumflex -80 +KPX Y edieresis -80 +KPX Y edotaccent -80 +KPX Y egrave -80 +KPX Y emacron -80 +KPX Y eogonek -80 +KPX Y o -100 +KPX Y oacute -100 +KPX Y ocircumflex -100 +KPX Y odieresis -100 +KPX Y ograve -100 +KPX Y ohungarumlaut -100 +KPX Y omacron -100 +KPX Y oslash -100 +KPX Y otilde -100 +KPX Y period -100 +KPX Y semicolon -50 +KPX Y u -100 +KPX Y uacute -100 +KPX Y ucircumflex -100 +KPX Y udieresis -100 +KPX Y ugrave -100 +KPX Y uhungarumlaut -100 +KPX Y umacron -100 +KPX Y uogonek -100 +KPX Y uring -100 +KPX Yacute A -110 +KPX Yacute Aacute -110 +KPX Yacute Abreve -110 +KPX Yacute Acircumflex -110 +KPX Yacute Adieresis -110 +KPX Yacute Agrave -110 +KPX Yacute Amacron -110 +KPX Yacute Aogonek -110 +KPX Yacute Aring -110 +KPX Yacute Atilde -110 +KPX Yacute O -70 +KPX Yacute Oacute -70 +KPX Yacute Ocircumflex -70 +KPX Yacute Odieresis -70 +KPX Yacute Ograve -70 +KPX Yacute Ohungarumlaut -70 +KPX Yacute Omacron -70 +KPX Yacute Oslash -70 +KPX Yacute Otilde -70 +KPX Yacute a -90 +KPX Yacute aacute -90 +KPX Yacute abreve -90 +KPX Yacute acircumflex -90 +KPX Yacute adieresis -90 +KPX Yacute agrave -90 +KPX Yacute amacron -90 +KPX Yacute aogonek -90 +KPX Yacute aring -90 +KPX Yacute atilde -90 +KPX Yacute colon -50 +KPX Yacute comma -100 +KPX Yacute e -80 +KPX Yacute eacute -80 +KPX Yacute ecaron -80 +KPX Yacute ecircumflex -80 +KPX Yacute edieresis -80 +KPX Yacute edotaccent -80 +KPX Yacute egrave -80 +KPX Yacute emacron -80 +KPX Yacute eogonek -80 +KPX Yacute o -100 +KPX Yacute oacute -100 +KPX Yacute ocircumflex -100 +KPX Yacute odieresis -100 +KPX Yacute ograve -100 +KPX Yacute ohungarumlaut -100 +KPX Yacute omacron -100 +KPX Yacute oslash -100 +KPX Yacute otilde -100 +KPX Yacute period -100 +KPX Yacute semicolon -50 +KPX Yacute u -100 +KPX Yacute uacute -100 +KPX Yacute ucircumflex -100 +KPX Yacute udieresis -100 +KPX Yacute ugrave -100 +KPX Yacute uhungarumlaut -100 +KPX Yacute umacron -100 +KPX Yacute uogonek -100 +KPX Yacute uring -100 +KPX Ydieresis A -110 +KPX Ydieresis Aacute -110 +KPX Ydieresis Abreve -110 +KPX Ydieresis Acircumflex -110 +KPX Ydieresis Adieresis -110 +KPX Ydieresis Agrave -110 +KPX Ydieresis Amacron -110 +KPX Ydieresis Aogonek -110 +KPX Ydieresis Aring -110 +KPX Ydieresis Atilde -110 +KPX Ydieresis O -70 +KPX Ydieresis Oacute -70 +KPX Ydieresis Ocircumflex -70 +KPX Ydieresis Odieresis -70 +KPX Ydieresis Ograve -70 +KPX Ydieresis Ohungarumlaut -70 +KPX Ydieresis Omacron -70 +KPX Ydieresis Oslash -70 +KPX Ydieresis Otilde -70 +KPX Ydieresis a -90 +KPX Ydieresis aacute -90 +KPX Ydieresis abreve -90 +KPX Ydieresis acircumflex -90 +KPX Ydieresis adieresis -90 +KPX Ydieresis agrave -90 +KPX Ydieresis amacron -90 +KPX Ydieresis aogonek -90 +KPX Ydieresis aring -90 +KPX Ydieresis atilde -90 +KPX Ydieresis colon -50 +KPX Ydieresis comma -100 +KPX Ydieresis e -80 +KPX Ydieresis eacute -80 +KPX Ydieresis ecaron -80 +KPX Ydieresis ecircumflex -80 +KPX Ydieresis edieresis -80 +KPX Ydieresis edotaccent -80 +KPX Ydieresis egrave -80 +KPX Ydieresis emacron -80 +KPX Ydieresis eogonek -80 +KPX Ydieresis o -100 +KPX Ydieresis oacute -100 +KPX Ydieresis ocircumflex -100 +KPX Ydieresis odieresis -100 +KPX Ydieresis ograve -100 +KPX Ydieresis ohungarumlaut -100 +KPX Ydieresis omacron -100 +KPX Ydieresis oslash -100 +KPX Ydieresis otilde -100 +KPX Ydieresis period -100 +KPX Ydieresis semicolon -50 +KPX Ydieresis u -100 +KPX Ydieresis uacute -100 +KPX Ydieresis ucircumflex -100 +KPX Ydieresis udieresis -100 +KPX Ydieresis ugrave -100 +KPX Ydieresis uhungarumlaut -100 +KPX Ydieresis umacron -100 +KPX Ydieresis uogonek -100 +KPX Ydieresis uring -100 +KPX a g -10 +KPX a gbreve -10 +KPX a gcommaaccent -10 +KPX a v -15 +KPX a w -15 +KPX a y -20 +KPX a yacute -20 +KPX a ydieresis -20 +KPX aacute g -10 +KPX aacute gbreve -10 +KPX aacute gcommaaccent -10 +KPX aacute v -15 +KPX aacute w -15 +KPX aacute y -20 +KPX aacute yacute -20 +KPX aacute ydieresis -20 +KPX abreve g -10 +KPX abreve gbreve -10 +KPX abreve gcommaaccent -10 +KPX abreve v -15 +KPX abreve w -15 +KPX abreve y -20 +KPX abreve yacute -20 +KPX abreve ydieresis -20 +KPX acircumflex g -10 +KPX acircumflex gbreve -10 +KPX acircumflex gcommaaccent -10 +KPX acircumflex v -15 +KPX acircumflex w -15 +KPX acircumflex y -20 +KPX acircumflex yacute -20 +KPX acircumflex ydieresis -20 +KPX adieresis g -10 +KPX adieresis gbreve -10 +KPX adieresis gcommaaccent -10 +KPX adieresis v -15 +KPX adieresis w -15 +KPX adieresis y -20 +KPX adieresis yacute -20 +KPX adieresis ydieresis -20 +KPX agrave g -10 +KPX agrave gbreve -10 +KPX agrave gcommaaccent -10 +KPX agrave v -15 +KPX agrave w -15 +KPX agrave y -20 +KPX agrave yacute -20 +KPX agrave ydieresis -20 +KPX amacron g -10 +KPX amacron gbreve -10 +KPX amacron gcommaaccent -10 +KPX amacron v -15 +KPX amacron w -15 +KPX amacron y -20 +KPX amacron yacute -20 +KPX amacron ydieresis -20 +KPX aogonek g -10 +KPX aogonek gbreve -10 +KPX aogonek gcommaaccent -10 +KPX aogonek v -15 +KPX aogonek w -15 +KPX aogonek y -20 +KPX aogonek yacute -20 +KPX aogonek ydieresis -20 +KPX aring g -10 +KPX aring gbreve -10 +KPX aring gcommaaccent -10 +KPX aring v -15 +KPX aring w -15 +KPX aring y -20 +KPX aring yacute -20 +KPX aring ydieresis -20 +KPX atilde g -10 +KPX atilde gbreve -10 +KPX atilde gcommaaccent -10 +KPX atilde v -15 +KPX atilde w -15 +KPX atilde y -20 +KPX atilde yacute -20 +KPX atilde ydieresis -20 +KPX b l -10 +KPX b lacute -10 +KPX b lcommaaccent -10 +KPX b lslash -10 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -20 +KPX b y -20 +KPX b yacute -20 +KPX b ydieresis -20 +KPX c h -10 +KPX c k -20 +KPX c kcommaaccent -20 +KPX c l -20 +KPX c lacute -20 +KPX c lcommaaccent -20 +KPX c lslash -20 +KPX c y -10 +KPX c yacute -10 +KPX c ydieresis -10 +KPX cacute h -10 +KPX cacute k -20 +KPX cacute kcommaaccent -20 +KPX cacute l -20 +KPX cacute lacute -20 +KPX cacute lcommaaccent -20 +KPX cacute lslash -20 +KPX cacute y -10 +KPX cacute yacute -10 +KPX cacute ydieresis -10 +KPX ccaron h -10 +KPX ccaron k -20 +KPX ccaron kcommaaccent -20 +KPX ccaron l -20 +KPX ccaron lacute -20 +KPX ccaron lcommaaccent -20 +KPX ccaron lslash -20 +KPX ccaron y -10 +KPX ccaron yacute -10 +KPX ccaron ydieresis -10 +KPX ccedilla h -10 +KPX ccedilla k -20 +KPX ccedilla kcommaaccent -20 +KPX ccedilla l -20 +KPX ccedilla lacute -20 +KPX ccedilla lcommaaccent -20 +KPX ccedilla lslash -20 +KPX ccedilla y -10 +KPX ccedilla yacute -10 +KPX ccedilla ydieresis -10 +KPX colon space -40 +KPX comma quotedblright -120 +KPX comma quoteright -120 +KPX comma space -40 +KPX d d -10 +KPX d dcroat -10 +KPX d v -15 +KPX d w -15 +KPX d y -15 +KPX d yacute -15 +KPX d ydieresis -15 +KPX dcroat d -10 +KPX dcroat dcroat -10 +KPX dcroat v -15 +KPX dcroat w -15 +KPX dcroat y -15 +KPX dcroat yacute -15 +KPX dcroat ydieresis -15 +KPX e comma 10 +KPX e period 20 +KPX e v -15 +KPX e w -15 +KPX e x -15 +KPX e y -15 +KPX e yacute -15 +KPX e ydieresis -15 +KPX eacute comma 10 +KPX eacute period 20 +KPX eacute v -15 +KPX eacute w -15 +KPX eacute x -15 +KPX eacute y -15 +KPX eacute yacute -15 +KPX eacute ydieresis -15 +KPX ecaron comma 10 +KPX ecaron period 20 +KPX ecaron v -15 +KPX ecaron w -15 +KPX ecaron x -15 +KPX ecaron y -15 +KPX ecaron yacute -15 +KPX ecaron ydieresis -15 +KPX ecircumflex comma 10 +KPX ecircumflex period 20 +KPX ecircumflex v -15 +KPX ecircumflex w -15 +KPX ecircumflex x -15 +KPX ecircumflex y -15 +KPX ecircumflex yacute -15 +KPX ecircumflex ydieresis -15 +KPX edieresis comma 10 +KPX edieresis period 20 +KPX edieresis v -15 +KPX edieresis w -15 +KPX edieresis x -15 +KPX edieresis y -15 +KPX edieresis yacute -15 +KPX edieresis ydieresis -15 +KPX edotaccent comma 10 +KPX edotaccent period 20 +KPX edotaccent v -15 +KPX edotaccent w -15 +KPX edotaccent x -15 +KPX edotaccent y -15 +KPX edotaccent yacute -15 +KPX edotaccent ydieresis -15 +KPX egrave comma 10 +KPX egrave period 20 +KPX egrave v -15 +KPX egrave w -15 +KPX egrave x -15 +KPX egrave y -15 +KPX egrave yacute -15 +KPX egrave ydieresis -15 +KPX emacron comma 10 +KPX emacron period 20 +KPX emacron v -15 +KPX emacron w -15 +KPX emacron x -15 +KPX emacron y -15 +KPX emacron yacute -15 +KPX emacron ydieresis -15 +KPX eogonek comma 10 +KPX eogonek period 20 +KPX eogonek v -15 +KPX eogonek w -15 +KPX eogonek x -15 +KPX eogonek y -15 +KPX eogonek yacute -15 +KPX eogonek ydieresis -15 +KPX f comma -10 +KPX f e -10 +KPX f eacute -10 +KPX f ecaron -10 +KPX f ecircumflex -10 +KPX f edieresis -10 +KPX f edotaccent -10 +KPX f egrave -10 +KPX f emacron -10 +KPX f eogonek -10 +KPX f o -20 +KPX f oacute -20 +KPX f ocircumflex -20 +KPX f odieresis -20 +KPX f ograve -20 +KPX f ohungarumlaut -20 +KPX f omacron -20 +KPX f oslash -20 +KPX f otilde -20 +KPX f period -10 +KPX f quotedblright 30 +KPX f quoteright 30 +KPX g e 10 +KPX g eacute 10 +KPX g ecaron 10 +KPX g ecircumflex 10 +KPX g edieresis 10 +KPX g edotaccent 10 +KPX g egrave 10 +KPX g emacron 10 +KPX g eogonek 10 +KPX g g -10 +KPX g gbreve -10 +KPX g gcommaaccent -10 +KPX gbreve e 10 +KPX gbreve eacute 10 +KPX gbreve ecaron 10 +KPX gbreve ecircumflex 10 +KPX gbreve edieresis 10 +KPX gbreve edotaccent 10 +KPX gbreve egrave 10 +KPX gbreve emacron 10 +KPX gbreve eogonek 10 +KPX gbreve g -10 +KPX gbreve gbreve -10 +KPX gbreve gcommaaccent -10 +KPX gcommaaccent e 10 +KPX gcommaaccent eacute 10 +KPX gcommaaccent ecaron 10 +KPX gcommaaccent ecircumflex 10 +KPX gcommaaccent edieresis 10 +KPX gcommaaccent edotaccent 10 +KPX gcommaaccent egrave 10 +KPX gcommaaccent emacron 10 +KPX gcommaaccent eogonek 10 +KPX gcommaaccent g -10 +KPX gcommaaccent gbreve -10 +KPX gcommaaccent gcommaaccent -10 +KPX h y -20 +KPX h yacute -20 +KPX h ydieresis -20 +KPX k o -15 +KPX k oacute -15 +KPX k ocircumflex -15 +KPX k odieresis -15 +KPX k ograve -15 +KPX k ohungarumlaut -15 +KPX k omacron -15 +KPX k oslash -15 +KPX k otilde -15 +KPX kcommaaccent o -15 +KPX kcommaaccent oacute -15 +KPX kcommaaccent ocircumflex -15 +KPX kcommaaccent odieresis -15 +KPX kcommaaccent ograve -15 +KPX kcommaaccent ohungarumlaut -15 +KPX kcommaaccent omacron -15 +KPX kcommaaccent oslash -15 +KPX kcommaaccent otilde -15 +KPX l w -15 +KPX l y -15 +KPX l yacute -15 +KPX l ydieresis -15 +KPX lacute w -15 +KPX lacute y -15 +KPX lacute yacute -15 +KPX lacute ydieresis -15 +KPX lcommaaccent w -15 +KPX lcommaaccent y -15 +KPX lcommaaccent yacute -15 +KPX lcommaaccent ydieresis -15 +KPX lslash w -15 +KPX lslash y -15 +KPX lslash yacute -15 +KPX lslash ydieresis -15 +KPX m u -20 +KPX m uacute -20 +KPX m ucircumflex -20 +KPX m udieresis -20 +KPX m ugrave -20 +KPX m uhungarumlaut -20 +KPX m umacron -20 +KPX m uogonek -20 +KPX m uring -20 +KPX m y -30 +KPX m yacute -30 +KPX m ydieresis -30 +KPX n u -10 +KPX n uacute -10 +KPX n ucircumflex -10 +KPX n udieresis -10 +KPX n ugrave -10 +KPX n uhungarumlaut -10 +KPX n umacron -10 +KPX n uogonek -10 +KPX n uring -10 +KPX n v -40 +KPX n y -20 +KPX n yacute -20 +KPX n ydieresis -20 +KPX nacute u -10 +KPX nacute uacute -10 +KPX nacute ucircumflex -10 +KPX nacute udieresis -10 +KPX nacute ugrave -10 +KPX nacute uhungarumlaut -10 +KPX nacute umacron -10 +KPX nacute uogonek -10 +KPX nacute uring -10 +KPX nacute v -40 +KPX nacute y -20 +KPX nacute yacute -20 +KPX nacute ydieresis -20 +KPX ncaron u -10 +KPX ncaron uacute -10 +KPX ncaron ucircumflex -10 +KPX ncaron udieresis -10 +KPX ncaron ugrave -10 +KPX ncaron uhungarumlaut -10 +KPX ncaron umacron -10 +KPX ncaron uogonek -10 +KPX ncaron uring -10 +KPX ncaron v -40 +KPX ncaron y -20 +KPX ncaron yacute -20 +KPX ncaron ydieresis -20 +KPX ncommaaccent u -10 +KPX ncommaaccent uacute -10 +KPX ncommaaccent ucircumflex -10 +KPX ncommaaccent udieresis -10 +KPX ncommaaccent ugrave -10 +KPX ncommaaccent uhungarumlaut -10 +KPX ncommaaccent umacron -10 +KPX ncommaaccent uogonek -10 +KPX ncommaaccent uring -10 +KPX ncommaaccent v -40 +KPX ncommaaccent y -20 +KPX ncommaaccent yacute -20 +KPX ncommaaccent ydieresis -20 +KPX ntilde u -10 +KPX ntilde uacute -10 +KPX ntilde ucircumflex -10 +KPX ntilde udieresis -10 +KPX ntilde ugrave -10 +KPX ntilde uhungarumlaut -10 +KPX ntilde umacron -10 +KPX ntilde uogonek -10 +KPX ntilde uring -10 +KPX ntilde v -40 +KPX ntilde y -20 +KPX ntilde yacute -20 +KPX ntilde ydieresis -20 +KPX o v -20 +KPX o w -15 +KPX o x -30 +KPX o y -20 +KPX o yacute -20 +KPX o ydieresis -20 +KPX oacute v -20 +KPX oacute w -15 +KPX oacute x -30 +KPX oacute y -20 +KPX oacute yacute -20 +KPX oacute ydieresis -20 +KPX ocircumflex v -20 +KPX ocircumflex w -15 +KPX ocircumflex x -30 +KPX ocircumflex y -20 +KPX ocircumflex yacute -20 +KPX ocircumflex ydieresis -20 +KPX odieresis v -20 +KPX odieresis w -15 +KPX odieresis x -30 +KPX odieresis y -20 +KPX odieresis yacute -20 +KPX odieresis ydieresis -20 +KPX ograve v -20 +KPX ograve w -15 +KPX ograve x -30 +KPX ograve y -20 +KPX ograve yacute -20 +KPX ograve ydieresis -20 +KPX ohungarumlaut v -20 +KPX ohungarumlaut w -15 +KPX ohungarumlaut x -30 +KPX ohungarumlaut y -20 +KPX ohungarumlaut yacute -20 +KPX ohungarumlaut ydieresis -20 +KPX omacron v -20 +KPX omacron w -15 +KPX omacron x -30 +KPX omacron y -20 +KPX omacron yacute -20 +KPX omacron ydieresis -20 +KPX oslash v -20 +KPX oslash w -15 +KPX oslash x -30 +KPX oslash y -20 +KPX oslash yacute -20 +KPX oslash ydieresis -20 +KPX otilde v -20 +KPX otilde w -15 +KPX otilde x -30 +KPX otilde y -20 +KPX otilde yacute -20 +KPX otilde ydieresis -20 +KPX p y -15 +KPX p yacute -15 +KPX p ydieresis -15 +KPX period quotedblright -120 +KPX period quoteright -120 +KPX period space -40 +KPX quotedblright space -80 +KPX quoteleft quoteleft -46 +KPX quoteright d -80 +KPX quoteright dcroat -80 +KPX quoteright l -20 +KPX quoteright lacute -20 +KPX quoteright lcommaaccent -20 +KPX quoteright lslash -20 +KPX quoteright quoteright -46 +KPX quoteright r -40 +KPX quoteright racute -40 +KPX quoteright rcaron -40 +KPX quoteright rcommaaccent -40 +KPX quoteright s -60 +KPX quoteright sacute -60 +KPX quoteright scaron -60 +KPX quoteright scedilla -60 +KPX quoteright scommaaccent -60 +KPX quoteright space -80 +KPX quoteright v -20 +KPX r c -20 +KPX r cacute -20 +KPX r ccaron -20 +KPX r ccedilla -20 +KPX r comma -60 +KPX r d -20 +KPX r dcroat -20 +KPX r g -15 +KPX r gbreve -15 +KPX r gcommaaccent -15 +KPX r hyphen -20 +KPX r o -20 +KPX r oacute -20 +KPX r ocircumflex -20 +KPX r odieresis -20 +KPX r ograve -20 +KPX r ohungarumlaut -20 +KPX r omacron -20 +KPX r oslash -20 +KPX r otilde -20 +KPX r period -60 +KPX r q -20 +KPX r s -15 +KPX r sacute -15 +KPX r scaron -15 +KPX r scedilla -15 +KPX r scommaaccent -15 +KPX r t 20 +KPX r tcommaaccent 20 +KPX r v 10 +KPX r y 10 +KPX r yacute 10 +KPX r ydieresis 10 +KPX racute c -20 +KPX racute cacute -20 +KPX racute ccaron -20 +KPX racute ccedilla -20 +KPX racute comma -60 +KPX racute d -20 +KPX racute dcroat -20 +KPX racute g -15 +KPX racute gbreve -15 +KPX racute gcommaaccent -15 +KPX racute hyphen -20 +KPX racute o -20 +KPX racute oacute -20 +KPX racute ocircumflex -20 +KPX racute odieresis -20 +KPX racute ograve -20 +KPX racute ohungarumlaut -20 +KPX racute omacron -20 +KPX racute oslash -20 +KPX racute otilde -20 +KPX racute period -60 +KPX racute q -20 +KPX racute s -15 +KPX racute sacute -15 +KPX racute scaron -15 +KPX racute scedilla -15 +KPX racute scommaaccent -15 +KPX racute t 20 +KPX racute tcommaaccent 20 +KPX racute v 10 +KPX racute y 10 +KPX racute yacute 10 +KPX racute ydieresis 10 +KPX rcaron c -20 +KPX rcaron cacute -20 +KPX rcaron ccaron -20 +KPX rcaron ccedilla -20 +KPX rcaron comma -60 +KPX rcaron d -20 +KPX rcaron dcroat -20 +KPX rcaron g -15 +KPX rcaron gbreve -15 +KPX rcaron gcommaaccent -15 +KPX rcaron hyphen -20 +KPX rcaron o -20 +KPX rcaron oacute -20 +KPX rcaron ocircumflex -20 +KPX rcaron odieresis -20 +KPX rcaron ograve -20 +KPX rcaron ohungarumlaut -20 +KPX rcaron omacron -20 +KPX rcaron oslash -20 +KPX rcaron otilde -20 +KPX rcaron period -60 +KPX rcaron q -20 +KPX rcaron s -15 +KPX rcaron sacute -15 +KPX rcaron scaron -15 +KPX rcaron scedilla -15 +KPX rcaron scommaaccent -15 +KPX rcaron t 20 +KPX rcaron tcommaaccent 20 +KPX rcaron v 10 +KPX rcaron y 10 +KPX rcaron yacute 10 +KPX rcaron ydieresis 10 +KPX rcommaaccent c -20 +KPX rcommaaccent cacute -20 +KPX rcommaaccent ccaron -20 +KPX rcommaaccent ccedilla -20 +KPX rcommaaccent comma -60 +KPX rcommaaccent d -20 +KPX rcommaaccent dcroat -20 +KPX rcommaaccent g -15 +KPX rcommaaccent gbreve -15 +KPX rcommaaccent gcommaaccent -15 +KPX rcommaaccent hyphen -20 +KPX rcommaaccent o -20 +KPX rcommaaccent oacute -20 +KPX rcommaaccent ocircumflex -20 +KPX rcommaaccent odieresis -20 +KPX rcommaaccent ograve -20 +KPX rcommaaccent ohungarumlaut -20 +KPX rcommaaccent omacron -20 +KPX rcommaaccent oslash -20 +KPX rcommaaccent otilde -20 +KPX rcommaaccent period -60 +KPX rcommaaccent q -20 +KPX rcommaaccent s -15 +KPX rcommaaccent sacute -15 +KPX rcommaaccent scaron -15 +KPX rcommaaccent scedilla -15 +KPX rcommaaccent scommaaccent -15 +KPX rcommaaccent t 20 +KPX rcommaaccent tcommaaccent 20 +KPX rcommaaccent v 10 +KPX rcommaaccent y 10 +KPX rcommaaccent yacute 10 +KPX rcommaaccent ydieresis 10 +KPX s w -15 +KPX sacute w -15 +KPX scaron w -15 +KPX scedilla w -15 +KPX scommaaccent w -15 +KPX semicolon space -40 +KPX space T -100 +KPX space Tcaron -100 +KPX space Tcommaaccent -100 +KPX space V -80 +KPX space W -80 +KPX space Y -120 +KPX space Yacute -120 +KPX space Ydieresis -120 +KPX space quotedblleft -80 +KPX space quoteleft -60 +KPX v a -20 +KPX v aacute -20 +KPX v abreve -20 +KPX v acircumflex -20 +KPX v adieresis -20 +KPX v agrave -20 +KPX v amacron -20 +KPX v aogonek -20 +KPX v aring -20 +KPX v atilde -20 +KPX v comma -80 +KPX v o -30 +KPX v oacute -30 +KPX v ocircumflex -30 +KPX v odieresis -30 +KPX v ograve -30 +KPX v ohungarumlaut -30 +KPX v omacron -30 +KPX v oslash -30 +KPX v otilde -30 +KPX v period -80 +KPX w comma -40 +KPX w o -20 +KPX w oacute -20 +KPX w ocircumflex -20 +KPX w odieresis -20 +KPX w ograve -20 +KPX w ohungarumlaut -20 +KPX w omacron -20 +KPX w oslash -20 +KPX w otilde -20 +KPX w period -40 +KPX x e -10 +KPX x eacute -10 +KPX x ecaron -10 +KPX x ecircumflex -10 +KPX x edieresis -10 +KPX x edotaccent -10 +KPX x egrave -10 +KPX x emacron -10 +KPX x eogonek -10 +KPX y a -30 +KPX y aacute -30 +KPX y abreve -30 +KPX y acircumflex -30 +KPX y adieresis -30 +KPX y agrave -30 +KPX y amacron -30 +KPX y aogonek -30 +KPX y aring -30 +KPX y atilde -30 +KPX y comma -80 +KPX y e -10 +KPX y eacute -10 +KPX y ecaron -10 +KPX y ecircumflex -10 +KPX y edieresis -10 +KPX y edotaccent -10 +KPX y egrave -10 +KPX y emacron -10 +KPX y eogonek -10 +KPX y o -25 +KPX y oacute -25 +KPX y ocircumflex -25 +KPX y odieresis -25 +KPX y ograve -25 +KPX y ohungarumlaut -25 +KPX y omacron -25 +KPX y oslash -25 +KPX y otilde -25 +KPX y period -80 +KPX yacute a -30 +KPX yacute aacute -30 +KPX yacute abreve -30 +KPX yacute acircumflex -30 +KPX yacute adieresis -30 +KPX yacute agrave -30 +KPX yacute amacron -30 +KPX yacute aogonek -30 +KPX yacute aring -30 +KPX yacute atilde -30 +KPX yacute comma -80 +KPX yacute e -10 +KPX yacute eacute -10 +KPX yacute ecaron -10 +KPX yacute ecircumflex -10 +KPX yacute edieresis -10 +KPX yacute edotaccent -10 +KPX yacute egrave -10 +KPX yacute emacron -10 +KPX yacute eogonek -10 +KPX yacute o -25 +KPX yacute oacute -25 +KPX yacute ocircumflex -25 +KPX yacute odieresis -25 +KPX yacute ograve -25 +KPX yacute ohungarumlaut -25 +KPX yacute omacron -25 +KPX yacute oslash -25 +KPX yacute otilde -25 +KPX yacute period -80 +KPX ydieresis a -30 +KPX ydieresis aacute -30 +KPX ydieresis abreve -30 +KPX ydieresis acircumflex -30 +KPX ydieresis adieresis -30 +KPX ydieresis agrave -30 +KPX ydieresis amacron -30 +KPX ydieresis aogonek -30 +KPX ydieresis aring -30 +KPX ydieresis atilde -30 +KPX ydieresis comma -80 +KPX ydieresis e -10 +KPX ydieresis eacute -10 +KPX ydieresis ecaron -10 +KPX ydieresis ecircumflex -10 +KPX ydieresis edieresis -10 +KPX ydieresis edotaccent -10 +KPX ydieresis egrave -10 +KPX ydieresis emacron -10 +KPX ydieresis eogonek -10 +KPX ydieresis o -25 +KPX ydieresis oacute -25 +KPX ydieresis ocircumflex -25 +KPX ydieresis odieresis -25 +KPX ydieresis ograve -25 +KPX ydieresis ohungarumlaut -25 +KPX ydieresis omacron -25 +KPX ydieresis oslash -25 +KPX ydieresis otilde -25 +KPX ydieresis period -80 +KPX z e 10 +KPX z eacute 10 +KPX z ecaron 10 +KPX z ecircumflex 10 +KPX z edieresis 10 +KPX z edotaccent 10 +KPX z egrave 10 +KPX z emacron 10 +KPX z eogonek 10 +KPX zacute e 10 +KPX zacute eacute 10 +KPX zacute ecaron 10 +KPX zacute ecircumflex 10 +KPX zacute edieresis 10 +KPX zacute edotaccent 10 +KPX zacute egrave 10 +KPX zacute emacron 10 +KPX zacute eogonek 10 +KPX zcaron e 10 +KPX zcaron eacute 10 +KPX zcaron ecaron 10 +KPX zcaron ecircumflex 10 +KPX zcaron edieresis 10 +KPX zcaron edotaccent 10 +KPX zcaron egrave 10 +KPX zcaron emacron 10 +KPX zcaron eogonek 10 +KPX zdotaccent e 10 +KPX zdotaccent eacute 10 +KPX zdotaccent ecaron 10 +KPX zdotaccent ecircumflex 10 +KPX zdotaccent edieresis 10 +KPX zdotaccent edotaccent 10 +KPX zdotaccent egrave 10 +KPX zdotaccent emacron 10 +KPX zdotaccent eogonek 10 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica-BoldOblique.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica-BoldOblique.afm new file mode 100644 index 000000000..1715b2104 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica-BoldOblique.afm @@ -0,0 +1,2827 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:45:12 1997 +Comment UniqueID 43053 +Comment VMusage 14482 68586 +FontName Helvetica-BoldOblique +FullName Helvetica Bold Oblique +FamilyName Helvetica +Weight Bold +ItalicAngle -12 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -174 -228 1114 962 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 718 +XHeight 532 +Ascender 718 +Descender -207 +StdHW 118 +StdVW 140 +StartCharMetrics 315 +C 32 ; WX 278 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 94 0 397 718 ; +C 34 ; WX 474 ; N quotedbl ; B 193 447 529 718 ; +C 35 ; WX 556 ; N numbersign ; B 60 0 644 698 ; +C 36 ; WX 556 ; N dollar ; B 67 -115 622 775 ; +C 37 ; WX 889 ; N percent ; B 136 -19 901 710 ; +C 38 ; WX 722 ; N ampersand ; B 89 -19 732 718 ; +C 39 ; WX 278 ; N quoteright ; B 167 445 362 718 ; +C 40 ; WX 333 ; N parenleft ; B 76 -208 470 734 ; +C 41 ; WX 333 ; N parenright ; B -25 -208 369 734 ; +C 42 ; WX 389 ; N asterisk ; B 146 387 481 718 ; +C 43 ; WX 584 ; N plus ; B 82 0 610 506 ; +C 44 ; WX 278 ; N comma ; B 28 -168 245 146 ; +C 45 ; WX 333 ; N hyphen ; B 73 215 379 345 ; +C 46 ; WX 278 ; N period ; B 64 0 245 146 ; +C 47 ; WX 278 ; N slash ; B -37 -19 468 737 ; +C 48 ; WX 556 ; N zero ; B 86 -19 617 710 ; +C 49 ; WX 556 ; N one ; B 173 0 529 710 ; +C 50 ; WX 556 ; N two ; B 26 0 619 710 ; +C 51 ; WX 556 ; N three ; B 65 -19 608 710 ; +C 52 ; WX 556 ; N four ; B 60 0 598 710 ; +C 53 ; WX 556 ; N five ; B 64 -19 636 698 ; +C 54 ; WX 556 ; N six ; B 85 -19 619 710 ; +C 55 ; WX 556 ; N seven ; B 125 0 676 698 ; +C 56 ; WX 556 ; N eight ; B 69 -19 616 710 ; +C 57 ; WX 556 ; N nine ; B 78 -19 615 710 ; +C 58 ; WX 333 ; N colon ; B 92 0 351 512 ; +C 59 ; WX 333 ; N semicolon ; B 56 -168 351 512 ; +C 60 ; WX 584 ; N less ; B 82 -8 655 514 ; +C 61 ; WX 584 ; N equal ; B 58 87 633 419 ; +C 62 ; WX 584 ; N greater ; B 36 -8 609 514 ; +C 63 ; WX 611 ; N question ; B 165 0 671 727 ; +C 64 ; WX 975 ; N at ; B 186 -19 954 737 ; +C 65 ; WX 722 ; N A ; B 20 0 702 718 ; +C 66 ; WX 722 ; N B ; B 76 0 764 718 ; +C 67 ; WX 722 ; N C ; B 107 -19 789 737 ; +C 68 ; WX 722 ; N D ; B 76 0 777 718 ; +C 69 ; WX 667 ; N E ; B 76 0 757 718 ; +C 70 ; WX 611 ; N F ; B 76 0 740 718 ; +C 71 ; WX 778 ; N G ; B 108 -19 817 737 ; +C 72 ; WX 722 ; N H ; B 71 0 804 718 ; +C 73 ; WX 278 ; N I ; B 64 0 367 718 ; +C 74 ; WX 556 ; N J ; B 60 -18 637 718 ; +C 75 ; WX 722 ; N K ; B 87 0 858 718 ; +C 76 ; WX 611 ; N L ; B 76 0 611 718 ; +C 77 ; WX 833 ; N M ; B 69 0 918 718 ; +C 78 ; WX 722 ; N N ; B 69 0 807 718 ; +C 79 ; WX 778 ; N O ; B 107 -19 823 737 ; +C 80 ; WX 667 ; N P ; B 76 0 738 718 ; +C 81 ; WX 778 ; N Q ; B 107 -52 823 737 ; +C 82 ; WX 722 ; N R ; B 76 0 778 718 ; +C 83 ; WX 667 ; N S ; B 81 -19 718 737 ; +C 84 ; WX 611 ; N T ; B 140 0 751 718 ; +C 85 ; WX 722 ; N U ; B 116 -19 804 718 ; +C 86 ; WX 667 ; N V ; B 172 0 801 718 ; +C 87 ; WX 944 ; N W ; B 169 0 1082 718 ; +C 88 ; WX 667 ; N X ; B 14 0 791 718 ; +C 89 ; WX 667 ; N Y ; B 168 0 806 718 ; +C 90 ; WX 611 ; N Z ; B 25 0 737 718 ; +C 91 ; WX 333 ; N bracketleft ; B 21 -196 462 722 ; +C 92 ; WX 278 ; N backslash ; B 124 -19 307 737 ; +C 93 ; WX 333 ; N bracketright ; B -18 -196 423 722 ; +C 94 ; WX 584 ; N asciicircum ; B 131 323 591 698 ; +C 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ; +C 96 ; WX 278 ; N quoteleft ; B 165 454 361 727 ; +C 97 ; WX 556 ; N a ; B 55 -14 583 546 ; +C 98 ; WX 611 ; N b ; B 61 -14 645 718 ; +C 99 ; WX 556 ; N c ; B 79 -14 599 546 ; +C 100 ; WX 611 ; N d ; B 82 -14 704 718 ; +C 101 ; WX 556 ; N e ; B 70 -14 593 546 ; +C 102 ; WX 333 ; N f ; B 87 0 469 727 ; L i fi ; L l fl ; +C 103 ; WX 611 ; N g ; B 38 -217 666 546 ; +C 104 ; WX 611 ; N h ; B 65 0 629 718 ; +C 105 ; WX 278 ; N i ; B 69 0 363 725 ; +C 106 ; WX 278 ; N j ; B -42 -214 363 725 ; +C 107 ; WX 556 ; N k ; B 69 0 670 718 ; +C 108 ; WX 278 ; N l ; B 69 0 362 718 ; +C 109 ; WX 889 ; N m ; B 64 0 909 546 ; +C 110 ; WX 611 ; N n ; B 65 0 629 546 ; +C 111 ; WX 611 ; N o ; B 82 -14 643 546 ; +C 112 ; WX 611 ; N p ; B 18 -207 645 546 ; +C 113 ; WX 611 ; N q ; B 80 -207 665 546 ; +C 114 ; WX 389 ; N r ; B 64 0 489 546 ; +C 115 ; WX 556 ; N s ; B 63 -14 584 546 ; +C 116 ; WX 333 ; N t ; B 100 -6 422 676 ; +C 117 ; WX 611 ; N u ; B 98 -14 658 532 ; +C 118 ; WX 556 ; N v ; B 126 0 656 532 ; +C 119 ; WX 778 ; N w ; B 123 0 882 532 ; +C 120 ; WX 556 ; N x ; B 15 0 648 532 ; +C 121 ; WX 556 ; N y ; B 42 -214 652 532 ; +C 122 ; WX 500 ; N z ; B 20 0 583 532 ; +C 123 ; WX 389 ; N braceleft ; B 94 -196 518 722 ; +C 124 ; WX 280 ; N bar ; B 36 -225 361 775 ; +C 125 ; WX 389 ; N braceright ; B -18 -196 407 722 ; +C 126 ; WX 584 ; N asciitilde ; B 115 163 577 343 ; +C 161 ; WX 333 ; N exclamdown ; B 50 -186 353 532 ; +C 162 ; WX 556 ; N cent ; B 79 -118 599 628 ; +C 163 ; WX 556 ; N sterling ; B 50 -16 635 718 ; +C 164 ; WX 167 ; N fraction ; B -174 -19 487 710 ; +C 165 ; WX 556 ; N yen ; B 60 0 713 698 ; +C 166 ; WX 556 ; N florin ; B -50 -210 669 737 ; +C 167 ; WX 556 ; N section ; B 61 -184 598 727 ; +C 168 ; WX 556 ; N currency ; B 27 76 680 636 ; +C 169 ; WX 238 ; N quotesingle ; B 165 447 321 718 ; +C 170 ; WX 500 ; N quotedblleft ; B 160 454 588 727 ; +C 171 ; WX 556 ; N guillemotleft ; B 135 76 571 484 ; +C 172 ; WX 333 ; N guilsinglleft ; B 130 76 353 484 ; +C 173 ; WX 333 ; N guilsinglright ; B 99 76 322 484 ; +C 174 ; WX 611 ; N fi ; B 87 0 696 727 ; +C 175 ; WX 611 ; N fl ; B 87 0 695 727 ; +C 177 ; WX 556 ; N endash ; B 48 227 627 333 ; +C 178 ; WX 556 ; N dagger ; B 118 -171 626 718 ; +C 179 ; WX 556 ; N daggerdbl ; B 46 -171 628 718 ; +C 180 ; WX 278 ; N periodcentered ; B 110 172 276 334 ; +C 182 ; WX 556 ; N paragraph ; B 98 -191 688 700 ; +C 183 ; WX 350 ; N bullet ; B 83 194 420 524 ; +C 184 ; WX 278 ; N quotesinglbase ; B 41 -146 236 127 ; +C 185 ; WX 500 ; N quotedblbase ; B 36 -146 463 127 ; +C 186 ; WX 500 ; N quotedblright ; B 162 445 589 718 ; +C 187 ; WX 556 ; N guillemotright ; B 104 76 540 484 ; +C 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ; +C 189 ; WX 1000 ; N perthousand ; B 76 -19 1038 710 ; +C 191 ; WX 611 ; N questiondown ; B 53 -195 559 532 ; +C 193 ; WX 333 ; N grave ; B 136 604 353 750 ; +C 194 ; WX 333 ; N acute ; B 236 604 515 750 ; +C 195 ; WX 333 ; N circumflex ; B 118 604 471 750 ; +C 196 ; WX 333 ; N tilde ; B 113 610 507 737 ; +C 197 ; WX 333 ; N macron ; B 122 604 483 678 ; +C 198 ; WX 333 ; N breve ; B 156 604 494 750 ; +C 199 ; WX 333 ; N dotaccent ; B 235 614 385 729 ; +C 200 ; WX 333 ; N dieresis ; B 137 614 482 729 ; +C 202 ; WX 333 ; N ring ; B 200 568 420 776 ; +C 203 ; WX 333 ; N cedilla ; B -37 -228 220 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B 137 604 645 750 ; +C 206 ; WX 333 ; N ogonek ; B 41 -228 264 0 ; +C 207 ; WX 333 ; N caron ; B 149 604 502 750 ; +C 208 ; WX 1000 ; N emdash ; B 48 227 1071 333 ; +C 225 ; WX 1000 ; N AE ; B 5 0 1100 718 ; +C 227 ; WX 370 ; N ordfeminine ; B 125 401 465 737 ; +C 232 ; WX 611 ; N Lslash ; B 34 0 611 718 ; +C 233 ; WX 778 ; N Oslash ; B 35 -27 894 745 ; +C 234 ; WX 1000 ; N OE ; B 99 -19 1114 737 ; +C 235 ; WX 365 ; N ordmasculine ; B 123 401 485 737 ; +C 241 ; WX 889 ; N ae ; B 56 -14 923 546 ; +C 245 ; WX 278 ; N dotlessi ; B 69 0 322 532 ; +C 248 ; WX 278 ; N lslash ; B 40 0 407 718 ; +C 249 ; WX 611 ; N oslash ; B 22 -29 701 560 ; +C 250 ; WX 944 ; N oe ; B 82 -14 977 546 ; +C 251 ; WX 611 ; N germandbls ; B 69 -14 657 731 ; +C -1 ; WX 278 ; N Idieresis ; B 64 0 494 915 ; +C -1 ; WX 556 ; N eacute ; B 70 -14 627 750 ; +C -1 ; WX 556 ; N abreve ; B 55 -14 606 750 ; +C -1 ; WX 611 ; N uhungarumlaut ; B 98 -14 784 750 ; +C -1 ; WX 556 ; N ecaron ; B 70 -14 614 750 ; +C -1 ; WX 667 ; N Ydieresis ; B 168 0 806 915 ; +C -1 ; WX 584 ; N divide ; B 82 -42 610 548 ; +C -1 ; WX 667 ; N Yacute ; B 168 0 806 936 ; +C -1 ; WX 722 ; N Acircumflex ; B 20 0 706 936 ; +C -1 ; WX 556 ; N aacute ; B 55 -14 627 750 ; +C -1 ; WX 722 ; N Ucircumflex ; B 116 -19 804 936 ; +C -1 ; WX 556 ; N yacute ; B 42 -214 652 750 ; +C -1 ; WX 556 ; N scommaaccent ; B 63 -228 584 546 ; +C -1 ; WX 556 ; N ecircumflex ; B 70 -14 593 750 ; +C -1 ; WX 722 ; N Uring ; B 116 -19 804 962 ; +C -1 ; WX 722 ; N Udieresis ; B 116 -19 804 915 ; +C -1 ; WX 556 ; N aogonek ; B 55 -224 583 546 ; +C -1 ; WX 722 ; N Uacute ; B 116 -19 804 936 ; +C -1 ; WX 611 ; N uogonek ; B 98 -228 658 532 ; +C -1 ; WX 667 ; N Edieresis ; B 76 0 757 915 ; +C -1 ; WX 722 ; N Dcroat ; B 62 0 777 718 ; +C -1 ; WX 250 ; N commaaccent ; B 16 -228 188 -50 ; +C -1 ; WX 737 ; N copyright ; B 56 -19 835 737 ; +C -1 ; WX 667 ; N Emacron ; B 76 0 757 864 ; +C -1 ; WX 556 ; N ccaron ; B 79 -14 614 750 ; +C -1 ; WX 556 ; N aring ; B 55 -14 583 776 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 807 718 ; +C -1 ; WX 278 ; N lacute ; B 69 0 528 936 ; +C -1 ; WX 556 ; N agrave ; B 55 -14 583 750 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 140 -228 751 718 ; +C -1 ; WX 722 ; N Cacute ; B 107 -19 789 936 ; +C -1 ; WX 556 ; N atilde ; B 55 -14 619 737 ; +C -1 ; WX 667 ; N Edotaccent ; B 76 0 757 915 ; +C -1 ; WX 556 ; N scaron ; B 63 -14 614 750 ; +C -1 ; WX 556 ; N scedilla ; B 63 -228 584 546 ; +C -1 ; WX 278 ; N iacute ; B 69 0 488 750 ; +C -1 ; WX 494 ; N lozenge ; B 90 0 564 745 ; +C -1 ; WX 722 ; N Rcaron ; B 76 0 778 936 ; +C -1 ; WX 778 ; N Gcommaaccent ; B 108 -228 817 737 ; +C -1 ; WX 611 ; N ucircumflex ; B 98 -14 658 750 ; +C -1 ; WX 556 ; N acircumflex ; B 55 -14 583 750 ; +C -1 ; WX 722 ; N Amacron ; B 20 0 718 864 ; +C -1 ; WX 389 ; N rcaron ; B 64 0 530 750 ; +C -1 ; WX 556 ; N ccedilla ; B 79 -228 599 546 ; +C -1 ; WX 611 ; N Zdotaccent ; B 25 0 737 915 ; +C -1 ; WX 667 ; N Thorn ; B 76 0 716 718 ; +C -1 ; WX 778 ; N Omacron ; B 107 -19 823 864 ; +C -1 ; WX 722 ; N Racute ; B 76 0 778 936 ; +C -1 ; WX 667 ; N Sacute ; B 81 -19 722 936 ; +C -1 ; WX 743 ; N dcaron ; B 82 -14 903 718 ; +C -1 ; WX 722 ; N Umacron ; B 116 -19 804 864 ; +C -1 ; WX 611 ; N uring ; B 98 -14 658 776 ; +C -1 ; WX 333 ; N threesuperior ; B 91 271 441 710 ; +C -1 ; WX 778 ; N Ograve ; B 107 -19 823 936 ; +C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ; +C -1 ; WX 722 ; N Abreve ; B 20 0 729 936 ; +C -1 ; WX 584 ; N multiply ; B 57 1 635 505 ; +C -1 ; WX 611 ; N uacute ; B 98 -14 658 750 ; +C -1 ; WX 611 ; N Tcaron ; B 140 0 751 936 ; +C -1 ; WX 494 ; N partialdiff ; B 43 -21 585 750 ; +C -1 ; WX 556 ; N ydieresis ; B 42 -214 652 729 ; +C -1 ; WX 722 ; N Nacute ; B 69 0 807 936 ; +C -1 ; WX 278 ; N icircumflex ; B 69 0 444 750 ; +C -1 ; WX 667 ; N Ecircumflex ; B 76 0 757 936 ; +C -1 ; WX 556 ; N adieresis ; B 55 -14 594 729 ; +C -1 ; WX 556 ; N edieresis ; B 70 -14 594 729 ; +C -1 ; WX 556 ; N cacute ; B 79 -14 627 750 ; +C -1 ; WX 611 ; N nacute ; B 65 0 654 750 ; +C -1 ; WX 611 ; N umacron ; B 98 -14 658 678 ; +C -1 ; WX 722 ; N Ncaron ; B 69 0 807 936 ; +C -1 ; WX 278 ; N Iacute ; B 64 0 528 936 ; +C -1 ; WX 584 ; N plusminus ; B 40 0 625 506 ; +C -1 ; WX 280 ; N brokenbar ; B 52 -150 345 700 ; +C -1 ; WX 737 ; N registered ; B 55 -19 834 737 ; +C -1 ; WX 778 ; N Gbreve ; B 108 -19 817 936 ; +C -1 ; WX 278 ; N Idotaccent ; B 64 0 397 915 ; +C -1 ; WX 600 ; N summation ; B 14 -10 670 706 ; +C -1 ; WX 667 ; N Egrave ; B 76 0 757 936 ; +C -1 ; WX 389 ; N racute ; B 64 0 543 750 ; +C -1 ; WX 611 ; N omacron ; B 82 -14 643 678 ; +C -1 ; WX 611 ; N Zacute ; B 25 0 737 936 ; +C -1 ; WX 611 ; N Zcaron ; B 25 0 737 936 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 629 704 ; +C -1 ; WX 722 ; N Eth ; B 62 0 777 718 ; +C -1 ; WX 722 ; N Ccedilla ; B 107 -228 789 737 ; +C -1 ; WX 278 ; N lcommaaccent ; B 30 -228 362 718 ; +C -1 ; WX 389 ; N tcaron ; B 100 -6 608 878 ; +C -1 ; WX 556 ; N eogonek ; B 70 -228 593 546 ; +C -1 ; WX 722 ; N Uogonek ; B 116 -228 804 718 ; +C -1 ; WX 722 ; N Aacute ; B 20 0 750 936 ; +C -1 ; WX 722 ; N Adieresis ; B 20 0 716 915 ; +C -1 ; WX 556 ; N egrave ; B 70 -14 593 750 ; +C -1 ; WX 500 ; N zacute ; B 20 0 599 750 ; +C -1 ; WX 278 ; N iogonek ; B -14 -224 363 725 ; +C -1 ; WX 778 ; N Oacute ; B 107 -19 823 936 ; +C -1 ; WX 611 ; N oacute ; B 82 -14 654 750 ; +C -1 ; WX 556 ; N amacron ; B 55 -14 595 678 ; +C -1 ; WX 556 ; N sacute ; B 63 -14 627 750 ; +C -1 ; WX 278 ; N idieresis ; B 69 0 455 729 ; +C -1 ; WX 778 ; N Ocircumflex ; B 107 -19 823 936 ; +C -1 ; WX 722 ; N Ugrave ; B 116 -19 804 936 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 611 ; N thorn ; B 18 -208 645 718 ; +C -1 ; WX 333 ; N twosuperior ; B 69 283 449 710 ; +C -1 ; WX 778 ; N Odieresis ; B 107 -19 823 915 ; +C -1 ; WX 611 ; N mu ; B 22 -207 658 532 ; +C -1 ; WX 278 ; N igrave ; B 69 0 326 750 ; +C -1 ; WX 611 ; N ohungarumlaut ; B 82 -14 784 750 ; +C -1 ; WX 667 ; N Eogonek ; B 76 -224 757 718 ; +C -1 ; WX 611 ; N dcroat ; B 82 -14 789 718 ; +C -1 ; WX 834 ; N threequarters ; B 99 -19 839 710 ; +C -1 ; WX 667 ; N Scedilla ; B 81 -228 718 737 ; +C -1 ; WX 400 ; N lcaron ; B 69 0 561 718 ; +C -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 858 718 ; +C -1 ; WX 611 ; N Lacute ; B 76 0 611 936 ; +C -1 ; WX 1000 ; N trademark ; B 179 306 1109 718 ; +C -1 ; WX 556 ; N edotaccent ; B 70 -14 593 729 ; +C -1 ; WX 278 ; N Igrave ; B 64 0 367 936 ; +C -1 ; WX 278 ; N Imacron ; B 64 0 496 864 ; +C -1 ; WX 611 ; N Lcaron ; B 76 0 643 718 ; +C -1 ; WX 834 ; N onehalf ; B 132 -19 858 710 ; +C -1 ; WX 549 ; N lessequal ; B 29 0 676 704 ; +C -1 ; WX 611 ; N ocircumflex ; B 82 -14 643 750 ; +C -1 ; WX 611 ; N ntilde ; B 65 0 646 737 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 116 -19 880 936 ; +C -1 ; WX 667 ; N Eacute ; B 76 0 757 936 ; +C -1 ; WX 556 ; N emacron ; B 70 -14 595 678 ; +C -1 ; WX 611 ; N gbreve ; B 38 -217 666 750 ; +C -1 ; WX 834 ; N onequarter ; B 132 -19 806 710 ; +C -1 ; WX 667 ; N Scaron ; B 81 -19 718 936 ; +C -1 ; WX 667 ; N Scommaaccent ; B 81 -228 718 737 ; +C -1 ; WX 778 ; N Ohungarumlaut ; B 107 -19 908 936 ; +C -1 ; WX 400 ; N degree ; B 175 426 467 712 ; +C -1 ; WX 611 ; N ograve ; B 82 -14 643 750 ; +C -1 ; WX 722 ; N Ccaron ; B 107 -19 789 936 ; +C -1 ; WX 611 ; N ugrave ; B 98 -14 658 750 ; +C -1 ; WX 549 ; N radical ; B 112 -46 689 850 ; +C -1 ; WX 722 ; N Dcaron ; B 76 0 777 936 ; +C -1 ; WX 389 ; N rcommaaccent ; B 26 -228 489 546 ; +C -1 ; WX 722 ; N Ntilde ; B 69 0 807 923 ; +C -1 ; WX 611 ; N otilde ; B 82 -14 646 737 ; +C -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 778 718 ; +C -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 611 718 ; +C -1 ; WX 722 ; N Atilde ; B 20 0 741 923 ; +C -1 ; WX 722 ; N Aogonek ; B 20 -224 702 718 ; +C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ; +C -1 ; WX 778 ; N Otilde ; B 107 -19 823 923 ; +C -1 ; WX 500 ; N zdotaccent ; B 20 0 583 729 ; +C -1 ; WX 667 ; N Ecaron ; B 76 0 757 936 ; +C -1 ; WX 278 ; N Iogonek ; B -41 -228 367 718 ; +C -1 ; WX 556 ; N kcommaaccent ; B 69 -228 670 718 ; +C -1 ; WX 584 ; N minus ; B 82 197 610 309 ; +C -1 ; WX 278 ; N Icircumflex ; B 64 0 484 936 ; +C -1 ; WX 611 ; N ncaron ; B 65 0 641 750 ; +C -1 ; WX 333 ; N tcommaaccent ; B 58 -228 422 676 ; +C -1 ; WX 584 ; N logicalnot ; B 105 108 633 419 ; +C -1 ; WX 611 ; N odieresis ; B 82 -14 643 729 ; +C -1 ; WX 611 ; N udieresis ; B 98 -14 658 729 ; +C -1 ; WX 549 ; N notequal ; B 32 -49 630 570 ; +C -1 ; WX 611 ; N gcommaaccent ; B 38 -217 666 850 ; +C -1 ; WX 611 ; N eth ; B 82 -14 670 737 ; +C -1 ; WX 500 ; N zcaron ; B 20 0 586 750 ; +C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 629 546 ; +C -1 ; WX 333 ; N onesuperior ; B 148 283 388 710 ; +C -1 ; WX 278 ; N imacron ; B 69 0 429 678 ; +C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2481 +KPX A C -40 +KPX A Cacute -40 +KPX A Ccaron -40 +KPX A Ccedilla -40 +KPX A G -50 +KPX A Gbreve -50 +KPX A Gcommaaccent -50 +KPX A O -40 +KPX A Oacute -40 +KPX A Ocircumflex -40 +KPX A Odieresis -40 +KPX A Ograve -40 +KPX A Ohungarumlaut -40 +KPX A Omacron -40 +KPX A Oslash -40 +KPX A Otilde -40 +KPX A Q -40 +KPX A T -90 +KPX A Tcaron -90 +KPX A Tcommaaccent -90 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -80 +KPX A W -60 +KPX A Y -110 +KPX A Yacute -110 +KPX A Ydieresis -110 +KPX A u -30 +KPX A uacute -30 +KPX A ucircumflex -30 +KPX A udieresis -30 +KPX A ugrave -30 +KPX A uhungarumlaut -30 +KPX A umacron -30 +KPX A uogonek -30 +KPX A uring -30 +KPX A v -40 +KPX A w -30 +KPX A y -30 +KPX A yacute -30 +KPX A ydieresis -30 +KPX Aacute C -40 +KPX Aacute Cacute -40 +KPX Aacute Ccaron -40 +KPX Aacute Ccedilla -40 +KPX Aacute G -50 +KPX Aacute Gbreve -50 +KPX Aacute Gcommaaccent -50 +KPX Aacute O -40 +KPX Aacute Oacute -40 +KPX Aacute Ocircumflex -40 +KPX Aacute Odieresis -40 +KPX Aacute Ograve -40 +KPX Aacute Ohungarumlaut -40 +KPX Aacute Omacron -40 +KPX Aacute Oslash -40 +KPX Aacute Otilde -40 +KPX Aacute Q -40 +KPX Aacute T -90 +KPX Aacute Tcaron -90 +KPX Aacute Tcommaaccent -90 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -80 +KPX Aacute W -60 +KPX Aacute Y -110 +KPX Aacute Yacute -110 +KPX Aacute Ydieresis -110 +KPX Aacute u -30 +KPX Aacute uacute -30 +KPX Aacute ucircumflex -30 +KPX Aacute udieresis -30 +KPX Aacute ugrave -30 +KPX Aacute uhungarumlaut -30 +KPX Aacute umacron -30 +KPX Aacute uogonek -30 +KPX Aacute uring -30 +KPX Aacute v -40 +KPX Aacute w -30 +KPX Aacute y -30 +KPX Aacute yacute -30 +KPX Aacute ydieresis -30 +KPX Abreve C -40 +KPX Abreve Cacute -40 +KPX Abreve Ccaron -40 +KPX Abreve Ccedilla -40 +KPX Abreve G -50 +KPX Abreve Gbreve -50 +KPX Abreve Gcommaaccent -50 +KPX Abreve O -40 +KPX Abreve Oacute -40 +KPX Abreve Ocircumflex -40 +KPX Abreve Odieresis -40 +KPX Abreve Ograve -40 +KPX Abreve Ohungarumlaut -40 +KPX Abreve Omacron -40 +KPX Abreve Oslash -40 +KPX Abreve Otilde -40 +KPX Abreve Q -40 +KPX Abreve T -90 +KPX Abreve Tcaron -90 +KPX Abreve Tcommaaccent -90 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -80 +KPX Abreve W -60 +KPX Abreve Y -110 +KPX Abreve Yacute -110 +KPX Abreve Ydieresis -110 +KPX Abreve u -30 +KPX Abreve uacute -30 +KPX Abreve ucircumflex -30 +KPX Abreve udieresis -30 +KPX Abreve ugrave -30 +KPX Abreve uhungarumlaut -30 +KPX Abreve umacron -30 +KPX Abreve uogonek -30 +KPX Abreve uring -30 +KPX Abreve v -40 +KPX Abreve w -30 +KPX Abreve y -30 +KPX Abreve yacute -30 +KPX Abreve ydieresis -30 +KPX Acircumflex C -40 +KPX Acircumflex Cacute -40 +KPX Acircumflex Ccaron -40 +KPX Acircumflex Ccedilla -40 +KPX Acircumflex G -50 +KPX Acircumflex Gbreve -50 +KPX Acircumflex Gcommaaccent -50 +KPX Acircumflex O -40 +KPX Acircumflex Oacute -40 +KPX Acircumflex Ocircumflex -40 +KPX Acircumflex Odieresis -40 +KPX Acircumflex Ograve -40 +KPX Acircumflex Ohungarumlaut -40 +KPX Acircumflex Omacron -40 +KPX Acircumflex Oslash -40 +KPX Acircumflex Otilde -40 +KPX Acircumflex Q -40 +KPX Acircumflex T -90 +KPX Acircumflex Tcaron -90 +KPX Acircumflex Tcommaaccent -90 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -80 +KPX Acircumflex W -60 +KPX Acircumflex Y -110 +KPX Acircumflex Yacute -110 +KPX Acircumflex Ydieresis -110 +KPX Acircumflex u -30 +KPX Acircumflex uacute -30 +KPX Acircumflex ucircumflex -30 +KPX Acircumflex udieresis -30 +KPX Acircumflex ugrave -30 +KPX Acircumflex uhungarumlaut -30 +KPX Acircumflex umacron -30 +KPX Acircumflex uogonek -30 +KPX Acircumflex uring -30 +KPX Acircumflex v -40 +KPX Acircumflex w -30 +KPX Acircumflex y -30 +KPX Acircumflex yacute -30 +KPX Acircumflex ydieresis -30 +KPX Adieresis C -40 +KPX Adieresis Cacute -40 +KPX Adieresis Ccaron -40 +KPX Adieresis Ccedilla -40 +KPX Adieresis G -50 +KPX Adieresis Gbreve -50 +KPX Adieresis Gcommaaccent -50 +KPX Adieresis O -40 +KPX Adieresis Oacute -40 +KPX Adieresis Ocircumflex -40 +KPX Adieresis Odieresis -40 +KPX Adieresis Ograve -40 +KPX Adieresis Ohungarumlaut -40 +KPX Adieresis Omacron -40 +KPX Adieresis Oslash -40 +KPX Adieresis Otilde -40 +KPX Adieresis Q -40 +KPX Adieresis T -90 +KPX Adieresis Tcaron -90 +KPX Adieresis Tcommaaccent -90 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -80 +KPX Adieresis W -60 +KPX Adieresis Y -110 +KPX Adieresis Yacute -110 +KPX Adieresis Ydieresis -110 +KPX Adieresis u -30 +KPX Adieresis uacute -30 +KPX Adieresis ucircumflex -30 +KPX Adieresis udieresis -30 +KPX Adieresis ugrave -30 +KPX Adieresis uhungarumlaut -30 +KPX Adieresis umacron -30 +KPX Adieresis uogonek -30 +KPX Adieresis uring -30 +KPX Adieresis v -40 +KPX Adieresis w -30 +KPX Adieresis y -30 +KPX Adieresis yacute -30 +KPX Adieresis ydieresis -30 +KPX Agrave C -40 +KPX Agrave Cacute -40 +KPX Agrave Ccaron -40 +KPX Agrave Ccedilla -40 +KPX Agrave G -50 +KPX Agrave Gbreve -50 +KPX Agrave Gcommaaccent -50 +KPX Agrave O -40 +KPX Agrave Oacute -40 +KPX Agrave Ocircumflex -40 +KPX Agrave Odieresis -40 +KPX Agrave Ograve -40 +KPX Agrave Ohungarumlaut -40 +KPX Agrave Omacron -40 +KPX Agrave Oslash -40 +KPX Agrave Otilde -40 +KPX Agrave Q -40 +KPX Agrave T -90 +KPX Agrave Tcaron -90 +KPX Agrave Tcommaaccent -90 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -80 +KPX Agrave W -60 +KPX Agrave Y -110 +KPX Agrave Yacute -110 +KPX Agrave Ydieresis -110 +KPX Agrave u -30 +KPX Agrave uacute -30 +KPX Agrave ucircumflex -30 +KPX Agrave udieresis -30 +KPX Agrave ugrave -30 +KPX Agrave uhungarumlaut -30 +KPX Agrave umacron -30 +KPX Agrave uogonek -30 +KPX Agrave uring -30 +KPX Agrave v -40 +KPX Agrave w -30 +KPX Agrave y -30 +KPX Agrave yacute -30 +KPX Agrave ydieresis -30 +KPX Amacron C -40 +KPX Amacron Cacute -40 +KPX Amacron Ccaron -40 +KPX Amacron Ccedilla -40 +KPX Amacron G -50 +KPX Amacron Gbreve -50 +KPX Amacron Gcommaaccent -50 +KPX Amacron O -40 +KPX Amacron Oacute -40 +KPX Amacron Ocircumflex -40 +KPX Amacron Odieresis -40 +KPX Amacron Ograve -40 +KPX Amacron Ohungarumlaut -40 +KPX Amacron Omacron -40 +KPX Amacron Oslash -40 +KPX Amacron Otilde -40 +KPX Amacron Q -40 +KPX Amacron T -90 +KPX Amacron Tcaron -90 +KPX Amacron Tcommaaccent -90 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -80 +KPX Amacron W -60 +KPX Amacron Y -110 +KPX Amacron Yacute -110 +KPX Amacron Ydieresis -110 +KPX Amacron u -30 +KPX Amacron uacute -30 +KPX Amacron ucircumflex -30 +KPX Amacron udieresis -30 +KPX Amacron ugrave -30 +KPX Amacron uhungarumlaut -30 +KPX Amacron umacron -30 +KPX Amacron uogonek -30 +KPX Amacron uring -30 +KPX Amacron v -40 +KPX Amacron w -30 +KPX Amacron y -30 +KPX Amacron yacute -30 +KPX Amacron ydieresis -30 +KPX Aogonek C -40 +KPX Aogonek Cacute -40 +KPX Aogonek Ccaron -40 +KPX Aogonek Ccedilla -40 +KPX Aogonek G -50 +KPX Aogonek Gbreve -50 +KPX Aogonek Gcommaaccent -50 +KPX Aogonek O -40 +KPX Aogonek Oacute -40 +KPX Aogonek Ocircumflex -40 +KPX Aogonek Odieresis -40 +KPX Aogonek Ograve -40 +KPX Aogonek Ohungarumlaut -40 +KPX Aogonek Omacron -40 +KPX Aogonek Oslash -40 +KPX Aogonek Otilde -40 +KPX Aogonek Q -40 +KPX Aogonek T -90 +KPX Aogonek Tcaron -90 +KPX Aogonek Tcommaaccent -90 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -80 +KPX Aogonek W -60 +KPX Aogonek Y -110 +KPX Aogonek Yacute -110 +KPX Aogonek Ydieresis -110 +KPX Aogonek u -30 +KPX Aogonek uacute -30 +KPX Aogonek ucircumflex -30 +KPX Aogonek udieresis -30 +KPX Aogonek ugrave -30 +KPX Aogonek uhungarumlaut -30 +KPX Aogonek umacron -30 +KPX Aogonek uogonek -30 +KPX Aogonek uring -30 +KPX Aogonek v -40 +KPX Aogonek w -30 +KPX Aogonek y -30 +KPX Aogonek yacute -30 +KPX Aogonek ydieresis -30 +KPX Aring C -40 +KPX Aring Cacute -40 +KPX Aring Ccaron -40 +KPX Aring Ccedilla -40 +KPX Aring G -50 +KPX Aring Gbreve -50 +KPX Aring Gcommaaccent -50 +KPX Aring O -40 +KPX Aring Oacute -40 +KPX Aring Ocircumflex -40 +KPX Aring Odieresis -40 +KPX Aring Ograve -40 +KPX Aring Ohungarumlaut -40 +KPX Aring Omacron -40 +KPX Aring Oslash -40 +KPX Aring Otilde -40 +KPX Aring Q -40 +KPX Aring T -90 +KPX Aring Tcaron -90 +KPX Aring Tcommaaccent -90 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -80 +KPX Aring W -60 +KPX Aring Y -110 +KPX Aring Yacute -110 +KPX Aring Ydieresis -110 +KPX Aring u -30 +KPX Aring uacute -30 +KPX Aring ucircumflex -30 +KPX Aring udieresis -30 +KPX Aring ugrave -30 +KPX Aring uhungarumlaut -30 +KPX Aring umacron -30 +KPX Aring uogonek -30 +KPX Aring uring -30 +KPX Aring v -40 +KPX Aring w -30 +KPX Aring y -30 +KPX Aring yacute -30 +KPX Aring ydieresis -30 +KPX Atilde C -40 +KPX Atilde Cacute -40 +KPX Atilde Ccaron -40 +KPX Atilde Ccedilla -40 +KPX Atilde G -50 +KPX Atilde Gbreve -50 +KPX Atilde Gcommaaccent -50 +KPX Atilde O -40 +KPX Atilde Oacute -40 +KPX Atilde Ocircumflex -40 +KPX Atilde Odieresis -40 +KPX Atilde Ograve -40 +KPX Atilde Ohungarumlaut -40 +KPX Atilde Omacron -40 +KPX Atilde Oslash -40 +KPX Atilde Otilde -40 +KPX Atilde Q -40 +KPX Atilde T -90 +KPX Atilde Tcaron -90 +KPX Atilde Tcommaaccent -90 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -80 +KPX Atilde W -60 +KPX Atilde Y -110 +KPX Atilde Yacute -110 +KPX Atilde Ydieresis -110 +KPX Atilde u -30 +KPX Atilde uacute -30 +KPX Atilde ucircumflex -30 +KPX Atilde udieresis -30 +KPX Atilde ugrave -30 +KPX Atilde uhungarumlaut -30 +KPX Atilde umacron -30 +KPX Atilde uogonek -30 +KPX Atilde uring -30 +KPX Atilde v -40 +KPX Atilde w -30 +KPX Atilde y -30 +KPX Atilde yacute -30 +KPX Atilde ydieresis -30 +KPX B A -30 +KPX B Aacute -30 +KPX B Abreve -30 +KPX B Acircumflex -30 +KPX B Adieresis -30 +KPX B Agrave -30 +KPX B Amacron -30 +KPX B Aogonek -30 +KPX B Aring -30 +KPX B Atilde -30 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -40 +KPX D Aacute -40 +KPX D Abreve -40 +KPX D Acircumflex -40 +KPX D Adieresis -40 +KPX D Agrave -40 +KPX D Amacron -40 +KPX D Aogonek -40 +KPX D Aring -40 +KPX D Atilde -40 +KPX D V -40 +KPX D W -40 +KPX D Y -70 +KPX D Yacute -70 +KPX D Ydieresis -70 +KPX D comma -30 +KPX D period -30 +KPX Dcaron A -40 +KPX Dcaron Aacute -40 +KPX Dcaron Abreve -40 +KPX Dcaron Acircumflex -40 +KPX Dcaron Adieresis -40 +KPX Dcaron Agrave -40 +KPX Dcaron Amacron -40 +KPX Dcaron Aogonek -40 +KPX Dcaron Aring -40 +KPX Dcaron Atilde -40 +KPX Dcaron V -40 +KPX Dcaron W -40 +KPX Dcaron Y -70 +KPX Dcaron Yacute -70 +KPX Dcaron Ydieresis -70 +KPX Dcaron comma -30 +KPX Dcaron period -30 +KPX Dcroat A -40 +KPX Dcroat Aacute -40 +KPX Dcroat Abreve -40 +KPX Dcroat Acircumflex -40 +KPX Dcroat Adieresis -40 +KPX Dcroat Agrave -40 +KPX Dcroat Amacron -40 +KPX Dcroat Aogonek -40 +KPX Dcroat Aring -40 +KPX Dcroat Atilde -40 +KPX Dcroat V -40 +KPX Dcroat W -40 +KPX Dcroat Y -70 +KPX Dcroat Yacute -70 +KPX Dcroat Ydieresis -70 +KPX Dcroat comma -30 +KPX Dcroat period -30 +KPX F A -80 +KPX F Aacute -80 +KPX F Abreve -80 +KPX F Acircumflex -80 +KPX F Adieresis -80 +KPX F Agrave -80 +KPX F Amacron -80 +KPX F Aogonek -80 +KPX F Aring -80 +KPX F Atilde -80 +KPX F a -20 +KPX F aacute -20 +KPX F abreve -20 +KPX F acircumflex -20 +KPX F adieresis -20 +KPX F agrave -20 +KPX F amacron -20 +KPX F aogonek -20 +KPX F aring -20 +KPX F atilde -20 +KPX F comma -100 +KPX F period -100 +KPX J A -20 +KPX J Aacute -20 +KPX J Abreve -20 +KPX J Acircumflex -20 +KPX J Adieresis -20 +KPX J Agrave -20 +KPX J Amacron -20 +KPX J Aogonek -20 +KPX J Aring -20 +KPX J Atilde -20 +KPX J comma -20 +KPX J period -20 +KPX J u -20 +KPX J uacute -20 +KPX J ucircumflex -20 +KPX J udieresis -20 +KPX J ugrave -20 +KPX J uhungarumlaut -20 +KPX J umacron -20 +KPX J uogonek -20 +KPX J uring -20 +KPX K O -30 +KPX K Oacute -30 +KPX K Ocircumflex -30 +KPX K Odieresis -30 +KPX K Ograve -30 +KPX K Ohungarumlaut -30 +KPX K Omacron -30 +KPX K Oslash -30 +KPX K Otilde -30 +KPX K e -15 +KPX K eacute -15 +KPX K ecaron -15 +KPX K ecircumflex -15 +KPX K edieresis -15 +KPX K edotaccent -15 +KPX K egrave -15 +KPX K emacron -15 +KPX K eogonek -15 +KPX K o -35 +KPX K oacute -35 +KPX K ocircumflex -35 +KPX K odieresis -35 +KPX K ograve -35 +KPX K ohungarumlaut -35 +KPX K omacron -35 +KPX K oslash -35 +KPX K otilde -35 +KPX K u -30 +KPX K uacute -30 +KPX K ucircumflex -30 +KPX K udieresis -30 +KPX K ugrave -30 +KPX K uhungarumlaut -30 +KPX K umacron -30 +KPX K uogonek -30 +KPX K uring -30 +KPX K y -40 +KPX K yacute -40 +KPX K ydieresis -40 +KPX Kcommaaccent O -30 +KPX Kcommaaccent Oacute -30 +KPX Kcommaaccent Ocircumflex -30 +KPX Kcommaaccent Odieresis -30 +KPX Kcommaaccent Ograve -30 +KPX Kcommaaccent Ohungarumlaut -30 +KPX Kcommaaccent Omacron -30 +KPX Kcommaaccent Oslash -30 +KPX Kcommaaccent Otilde -30 +KPX Kcommaaccent e -15 +KPX Kcommaaccent eacute -15 +KPX Kcommaaccent ecaron -15 +KPX Kcommaaccent ecircumflex -15 +KPX Kcommaaccent edieresis -15 +KPX Kcommaaccent edotaccent -15 +KPX Kcommaaccent egrave -15 +KPX Kcommaaccent emacron -15 +KPX Kcommaaccent eogonek -15 +KPX Kcommaaccent o -35 +KPX Kcommaaccent oacute -35 +KPX Kcommaaccent ocircumflex -35 +KPX Kcommaaccent odieresis -35 +KPX Kcommaaccent ograve -35 +KPX Kcommaaccent ohungarumlaut -35 +KPX Kcommaaccent omacron -35 +KPX Kcommaaccent oslash -35 +KPX Kcommaaccent otilde -35 +KPX Kcommaaccent u -30 +KPX Kcommaaccent uacute -30 +KPX Kcommaaccent ucircumflex -30 +KPX Kcommaaccent udieresis -30 +KPX Kcommaaccent ugrave -30 +KPX Kcommaaccent uhungarumlaut -30 +KPX Kcommaaccent umacron -30 +KPX Kcommaaccent uogonek -30 +KPX Kcommaaccent uring -30 +KPX Kcommaaccent y -40 +KPX Kcommaaccent yacute -40 +KPX Kcommaaccent ydieresis -40 +KPX L T -90 +KPX L Tcaron -90 +KPX L Tcommaaccent -90 +KPX L V -110 +KPX L W -80 +KPX L Y -120 +KPX L Yacute -120 +KPX L Ydieresis -120 +KPX L quotedblright -140 +KPX L quoteright -140 +KPX L y -30 +KPX L yacute -30 +KPX L ydieresis -30 +KPX Lacute T -90 +KPX Lacute Tcaron -90 +KPX Lacute Tcommaaccent -90 +KPX Lacute V -110 +KPX Lacute W -80 +KPX Lacute Y -120 +KPX Lacute Yacute -120 +KPX Lacute Ydieresis -120 +KPX Lacute quotedblright -140 +KPX Lacute quoteright -140 +KPX Lacute y -30 +KPX Lacute yacute -30 +KPX Lacute ydieresis -30 +KPX Lcommaaccent T -90 +KPX Lcommaaccent Tcaron -90 +KPX Lcommaaccent Tcommaaccent -90 +KPX Lcommaaccent V -110 +KPX Lcommaaccent W -80 +KPX Lcommaaccent Y -120 +KPX Lcommaaccent Yacute -120 +KPX Lcommaaccent Ydieresis -120 +KPX Lcommaaccent quotedblright -140 +KPX Lcommaaccent quoteright -140 +KPX Lcommaaccent y -30 +KPX Lcommaaccent yacute -30 +KPX Lcommaaccent ydieresis -30 +KPX Lslash T -90 +KPX Lslash Tcaron -90 +KPX Lslash Tcommaaccent -90 +KPX Lslash V -110 +KPX Lslash W -80 +KPX Lslash Y -120 +KPX Lslash Yacute -120 +KPX Lslash Ydieresis -120 +KPX Lslash quotedblright -140 +KPX Lslash quoteright -140 +KPX Lslash y -30 +KPX Lslash yacute -30 +KPX Lslash ydieresis -30 +KPX O A -50 +KPX O Aacute -50 +KPX O Abreve -50 +KPX O Acircumflex -50 +KPX O Adieresis -50 +KPX O Agrave -50 +KPX O Amacron -50 +KPX O Aogonek -50 +KPX O Aring -50 +KPX O Atilde -50 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -50 +KPX O X -50 +KPX O Y -70 +KPX O Yacute -70 +KPX O Ydieresis -70 +KPX O comma -40 +KPX O period -40 +KPX Oacute A -50 +KPX Oacute Aacute -50 +KPX Oacute Abreve -50 +KPX Oacute Acircumflex -50 +KPX Oacute Adieresis -50 +KPX Oacute Agrave -50 +KPX Oacute Amacron -50 +KPX Oacute Aogonek -50 +KPX Oacute Aring -50 +KPX Oacute Atilde -50 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -50 +KPX Oacute X -50 +KPX Oacute Y -70 +KPX Oacute Yacute -70 +KPX Oacute Ydieresis -70 +KPX Oacute comma -40 +KPX Oacute period -40 +KPX Ocircumflex A -50 +KPX Ocircumflex Aacute -50 +KPX Ocircumflex Abreve -50 +KPX Ocircumflex Acircumflex -50 +KPX Ocircumflex Adieresis -50 +KPX Ocircumflex Agrave -50 +KPX Ocircumflex Amacron -50 +KPX Ocircumflex Aogonek -50 +KPX Ocircumflex Aring -50 +KPX Ocircumflex Atilde -50 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -50 +KPX Ocircumflex X -50 +KPX Ocircumflex Y -70 +KPX Ocircumflex Yacute -70 +KPX Ocircumflex Ydieresis -70 +KPX Ocircumflex comma -40 +KPX Ocircumflex period -40 +KPX Odieresis A -50 +KPX Odieresis Aacute -50 +KPX Odieresis Abreve -50 +KPX Odieresis Acircumflex -50 +KPX Odieresis Adieresis -50 +KPX Odieresis Agrave -50 +KPX Odieresis Amacron -50 +KPX Odieresis Aogonek -50 +KPX Odieresis Aring -50 +KPX Odieresis Atilde -50 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -50 +KPX Odieresis X -50 +KPX Odieresis Y -70 +KPX Odieresis Yacute -70 +KPX Odieresis Ydieresis -70 +KPX Odieresis comma -40 +KPX Odieresis period -40 +KPX Ograve A -50 +KPX Ograve Aacute -50 +KPX Ograve Abreve -50 +KPX Ograve Acircumflex -50 +KPX Ograve Adieresis -50 +KPX Ograve Agrave -50 +KPX Ograve Amacron -50 +KPX Ograve Aogonek -50 +KPX Ograve Aring -50 +KPX Ograve Atilde -50 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -50 +KPX Ograve X -50 +KPX Ograve Y -70 +KPX Ograve Yacute -70 +KPX Ograve Ydieresis -70 +KPX Ograve comma -40 +KPX Ograve period -40 +KPX Ohungarumlaut A -50 +KPX Ohungarumlaut Aacute -50 +KPX Ohungarumlaut Abreve -50 +KPX Ohungarumlaut Acircumflex -50 +KPX Ohungarumlaut Adieresis -50 +KPX Ohungarumlaut Agrave -50 +KPX Ohungarumlaut Amacron -50 +KPX Ohungarumlaut Aogonek -50 +KPX Ohungarumlaut Aring -50 +KPX Ohungarumlaut Atilde -50 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -50 +KPX Ohungarumlaut X -50 +KPX Ohungarumlaut Y -70 +KPX Ohungarumlaut Yacute -70 +KPX Ohungarumlaut Ydieresis -70 +KPX Ohungarumlaut comma -40 +KPX Ohungarumlaut period -40 +KPX Omacron A -50 +KPX Omacron Aacute -50 +KPX Omacron Abreve -50 +KPX Omacron Acircumflex -50 +KPX Omacron Adieresis -50 +KPX Omacron Agrave -50 +KPX Omacron Amacron -50 +KPX Omacron Aogonek -50 +KPX Omacron Aring -50 +KPX Omacron Atilde -50 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -50 +KPX Omacron X -50 +KPX Omacron Y -70 +KPX Omacron Yacute -70 +KPX Omacron Ydieresis -70 +KPX Omacron comma -40 +KPX Omacron period -40 +KPX Oslash A -50 +KPX Oslash Aacute -50 +KPX Oslash Abreve -50 +KPX Oslash Acircumflex -50 +KPX Oslash Adieresis -50 +KPX Oslash Agrave -50 +KPX Oslash Amacron -50 +KPX Oslash Aogonek -50 +KPX Oslash Aring -50 +KPX Oslash Atilde -50 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -50 +KPX Oslash X -50 +KPX Oslash Y -70 +KPX Oslash Yacute -70 +KPX Oslash Ydieresis -70 +KPX Oslash comma -40 +KPX Oslash period -40 +KPX Otilde A -50 +KPX Otilde Aacute -50 +KPX Otilde Abreve -50 +KPX Otilde Acircumflex -50 +KPX Otilde Adieresis -50 +KPX Otilde Agrave -50 +KPX Otilde Amacron -50 +KPX Otilde Aogonek -50 +KPX Otilde Aring -50 +KPX Otilde Atilde -50 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -50 +KPX Otilde X -50 +KPX Otilde Y -70 +KPX Otilde Yacute -70 +KPX Otilde Ydieresis -70 +KPX Otilde comma -40 +KPX Otilde period -40 +KPX P A -100 +KPX P Aacute -100 +KPX P Abreve -100 +KPX P Acircumflex -100 +KPX P Adieresis -100 +KPX P Agrave -100 +KPX P Amacron -100 +KPX P Aogonek -100 +KPX P Aring -100 +KPX P Atilde -100 +KPX P a -30 +KPX P aacute -30 +KPX P abreve -30 +KPX P acircumflex -30 +KPX P adieresis -30 +KPX P agrave -30 +KPX P amacron -30 +KPX P aogonek -30 +KPX P aring -30 +KPX P atilde -30 +KPX P comma -120 +KPX P e -30 +KPX P eacute -30 +KPX P ecaron -30 +KPX P ecircumflex -30 +KPX P edieresis -30 +KPX P edotaccent -30 +KPX P egrave -30 +KPX P emacron -30 +KPX P eogonek -30 +KPX P o -40 +KPX P oacute -40 +KPX P ocircumflex -40 +KPX P odieresis -40 +KPX P ograve -40 +KPX P ohungarumlaut -40 +KPX P omacron -40 +KPX P oslash -40 +KPX P otilde -40 +KPX P period -120 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX Q comma 20 +KPX Q period 20 +KPX R O -20 +KPX R Oacute -20 +KPX R Ocircumflex -20 +KPX R Odieresis -20 +KPX R Ograve -20 +KPX R Ohungarumlaut -20 +KPX R Omacron -20 +KPX R Oslash -20 +KPX R Otilde -20 +KPX R T -20 +KPX R Tcaron -20 +KPX R Tcommaaccent -20 +KPX R U -20 +KPX R Uacute -20 +KPX R Ucircumflex -20 +KPX R Udieresis -20 +KPX R Ugrave -20 +KPX R Uhungarumlaut -20 +KPX R Umacron -20 +KPX R Uogonek -20 +KPX R Uring -20 +KPX R V -50 +KPX R W -40 +KPX R Y -50 +KPX R Yacute -50 +KPX R Ydieresis -50 +KPX Racute O -20 +KPX Racute Oacute -20 +KPX Racute Ocircumflex -20 +KPX Racute Odieresis -20 +KPX Racute Ograve -20 +KPX Racute Ohungarumlaut -20 +KPX Racute Omacron -20 +KPX Racute Oslash -20 +KPX Racute Otilde -20 +KPX Racute T -20 +KPX Racute Tcaron -20 +KPX Racute Tcommaaccent -20 +KPX Racute U -20 +KPX Racute Uacute -20 +KPX Racute Ucircumflex -20 +KPX Racute Udieresis -20 +KPX Racute Ugrave -20 +KPX Racute Uhungarumlaut -20 +KPX Racute Umacron -20 +KPX Racute Uogonek -20 +KPX Racute Uring -20 +KPX Racute V -50 +KPX Racute W -40 +KPX Racute Y -50 +KPX Racute Yacute -50 +KPX Racute Ydieresis -50 +KPX Rcaron O -20 +KPX Rcaron Oacute -20 +KPX Rcaron Ocircumflex -20 +KPX Rcaron Odieresis -20 +KPX Rcaron Ograve -20 +KPX Rcaron Ohungarumlaut -20 +KPX Rcaron Omacron -20 +KPX Rcaron Oslash -20 +KPX Rcaron Otilde -20 +KPX Rcaron T -20 +KPX Rcaron Tcaron -20 +KPX Rcaron Tcommaaccent -20 +KPX Rcaron U -20 +KPX Rcaron Uacute -20 +KPX Rcaron Ucircumflex -20 +KPX Rcaron Udieresis -20 +KPX Rcaron Ugrave -20 +KPX Rcaron Uhungarumlaut -20 +KPX Rcaron Umacron -20 +KPX Rcaron Uogonek -20 +KPX Rcaron Uring -20 +KPX Rcaron V -50 +KPX Rcaron W -40 +KPX Rcaron Y -50 +KPX Rcaron Yacute -50 +KPX Rcaron Ydieresis -50 +KPX Rcommaaccent O -20 +KPX Rcommaaccent Oacute -20 +KPX Rcommaaccent Ocircumflex -20 +KPX Rcommaaccent Odieresis -20 +KPX Rcommaaccent Ograve -20 +KPX Rcommaaccent Ohungarumlaut -20 +KPX Rcommaaccent Omacron -20 +KPX Rcommaaccent Oslash -20 +KPX Rcommaaccent Otilde -20 +KPX Rcommaaccent T -20 +KPX Rcommaaccent Tcaron -20 +KPX Rcommaaccent Tcommaaccent -20 +KPX Rcommaaccent U -20 +KPX Rcommaaccent Uacute -20 +KPX Rcommaaccent Ucircumflex -20 +KPX Rcommaaccent Udieresis -20 +KPX Rcommaaccent Ugrave -20 +KPX Rcommaaccent Uhungarumlaut -20 +KPX Rcommaaccent Umacron -20 +KPX Rcommaaccent Uogonek -20 +KPX Rcommaaccent Uring -20 +KPX Rcommaaccent V -50 +KPX Rcommaaccent W -40 +KPX Rcommaaccent Y -50 +KPX Rcommaaccent Yacute -50 +KPX Rcommaaccent Ydieresis -50 +KPX T A -90 +KPX T Aacute -90 +KPX T Abreve -90 +KPX T Acircumflex -90 +KPX T Adieresis -90 +KPX T Agrave -90 +KPX T Amacron -90 +KPX T Aogonek -90 +KPX T Aring -90 +KPX T Atilde -90 +KPX T O -40 +KPX T Oacute -40 +KPX T Ocircumflex -40 +KPX T Odieresis -40 +KPX T Ograve -40 +KPX T Ohungarumlaut -40 +KPX T Omacron -40 +KPX T Oslash -40 +KPX T Otilde -40 +KPX T a -80 +KPX T aacute -80 +KPX T abreve -80 +KPX T acircumflex -80 +KPX T adieresis -80 +KPX T agrave -80 +KPX T amacron -80 +KPX T aogonek -80 +KPX T aring -80 +KPX T atilde -80 +KPX T colon -40 +KPX T comma -80 +KPX T e -60 +KPX T eacute -60 +KPX T ecaron -60 +KPX T ecircumflex -60 +KPX T edieresis -60 +KPX T edotaccent -60 +KPX T egrave -60 +KPX T emacron -60 +KPX T eogonek -60 +KPX T hyphen -120 +KPX T o -80 +KPX T oacute -80 +KPX T ocircumflex -80 +KPX T odieresis -80 +KPX T ograve -80 +KPX T ohungarumlaut -80 +KPX T omacron -80 +KPX T oslash -80 +KPX T otilde -80 +KPX T period -80 +KPX T r -80 +KPX T racute -80 +KPX T rcommaaccent -80 +KPX T semicolon -40 +KPX T u -90 +KPX T uacute -90 +KPX T ucircumflex -90 +KPX T udieresis -90 +KPX T ugrave -90 +KPX T uhungarumlaut -90 +KPX T umacron -90 +KPX T uogonek -90 +KPX T uring -90 +KPX T w -60 +KPX T y -60 +KPX T yacute -60 +KPX T ydieresis -60 +KPX Tcaron A -90 +KPX Tcaron Aacute -90 +KPX Tcaron Abreve -90 +KPX Tcaron Acircumflex -90 +KPX Tcaron Adieresis -90 +KPX Tcaron Agrave -90 +KPX Tcaron Amacron -90 +KPX Tcaron Aogonek -90 +KPX Tcaron Aring -90 +KPX Tcaron Atilde -90 +KPX Tcaron O -40 +KPX Tcaron Oacute -40 +KPX Tcaron Ocircumflex -40 +KPX Tcaron Odieresis -40 +KPX Tcaron Ograve -40 +KPX Tcaron Ohungarumlaut -40 +KPX Tcaron Omacron -40 +KPX Tcaron Oslash -40 +KPX Tcaron Otilde -40 +KPX Tcaron a -80 +KPX Tcaron aacute -80 +KPX Tcaron abreve -80 +KPX Tcaron acircumflex -80 +KPX Tcaron adieresis -80 +KPX Tcaron agrave -80 +KPX Tcaron amacron -80 +KPX Tcaron aogonek -80 +KPX Tcaron aring -80 +KPX Tcaron atilde -80 +KPX Tcaron colon -40 +KPX Tcaron comma -80 +KPX Tcaron e -60 +KPX Tcaron eacute -60 +KPX Tcaron ecaron -60 +KPX Tcaron ecircumflex -60 +KPX Tcaron edieresis -60 +KPX Tcaron edotaccent -60 +KPX Tcaron egrave -60 +KPX Tcaron emacron -60 +KPX Tcaron eogonek -60 +KPX Tcaron hyphen -120 +KPX Tcaron o -80 +KPX Tcaron oacute -80 +KPX Tcaron ocircumflex -80 +KPX Tcaron odieresis -80 +KPX Tcaron ograve -80 +KPX Tcaron ohungarumlaut -80 +KPX Tcaron omacron -80 +KPX Tcaron oslash -80 +KPX Tcaron otilde -80 +KPX Tcaron period -80 +KPX Tcaron r -80 +KPX Tcaron racute -80 +KPX Tcaron rcommaaccent -80 +KPX Tcaron semicolon -40 +KPX Tcaron u -90 +KPX Tcaron uacute -90 +KPX Tcaron ucircumflex -90 +KPX Tcaron udieresis -90 +KPX Tcaron ugrave -90 +KPX Tcaron uhungarumlaut -90 +KPX Tcaron umacron -90 +KPX Tcaron uogonek -90 +KPX Tcaron uring -90 +KPX Tcaron w -60 +KPX Tcaron y -60 +KPX Tcaron yacute -60 +KPX Tcaron ydieresis -60 +KPX Tcommaaccent A -90 +KPX Tcommaaccent Aacute -90 +KPX Tcommaaccent Abreve -90 +KPX Tcommaaccent Acircumflex -90 +KPX Tcommaaccent Adieresis -90 +KPX Tcommaaccent Agrave -90 +KPX Tcommaaccent Amacron -90 +KPX Tcommaaccent Aogonek -90 +KPX Tcommaaccent Aring -90 +KPX Tcommaaccent Atilde -90 +KPX Tcommaaccent O -40 +KPX Tcommaaccent Oacute -40 +KPX Tcommaaccent Ocircumflex -40 +KPX Tcommaaccent Odieresis -40 +KPX Tcommaaccent Ograve -40 +KPX Tcommaaccent Ohungarumlaut -40 +KPX Tcommaaccent Omacron -40 +KPX Tcommaaccent Oslash -40 +KPX Tcommaaccent Otilde -40 +KPX Tcommaaccent a -80 +KPX Tcommaaccent aacute -80 +KPX Tcommaaccent abreve -80 +KPX Tcommaaccent acircumflex -80 +KPX Tcommaaccent adieresis -80 +KPX Tcommaaccent agrave -80 +KPX Tcommaaccent amacron -80 +KPX Tcommaaccent aogonek -80 +KPX Tcommaaccent aring -80 +KPX Tcommaaccent atilde -80 +KPX Tcommaaccent colon -40 +KPX Tcommaaccent comma -80 +KPX Tcommaaccent e -60 +KPX Tcommaaccent eacute -60 +KPX Tcommaaccent ecaron -60 +KPX Tcommaaccent ecircumflex -60 +KPX Tcommaaccent edieresis -60 +KPX Tcommaaccent edotaccent -60 +KPX Tcommaaccent egrave -60 +KPX Tcommaaccent emacron -60 +KPX Tcommaaccent eogonek -60 +KPX Tcommaaccent hyphen -120 +KPX Tcommaaccent o -80 +KPX Tcommaaccent oacute -80 +KPX Tcommaaccent ocircumflex -80 +KPX Tcommaaccent odieresis -80 +KPX Tcommaaccent ograve -80 +KPX Tcommaaccent ohungarumlaut -80 +KPX Tcommaaccent omacron -80 +KPX Tcommaaccent oslash -80 +KPX Tcommaaccent otilde -80 +KPX Tcommaaccent period -80 +KPX Tcommaaccent r -80 +KPX Tcommaaccent racute -80 +KPX Tcommaaccent rcommaaccent -80 +KPX Tcommaaccent semicolon -40 +KPX Tcommaaccent u -90 +KPX Tcommaaccent uacute -90 +KPX Tcommaaccent ucircumflex -90 +KPX Tcommaaccent udieresis -90 +KPX Tcommaaccent ugrave -90 +KPX Tcommaaccent uhungarumlaut -90 +KPX Tcommaaccent umacron -90 +KPX Tcommaaccent uogonek -90 +KPX Tcommaaccent uring -90 +KPX Tcommaaccent w -60 +KPX Tcommaaccent y -60 +KPX Tcommaaccent yacute -60 +KPX Tcommaaccent ydieresis -60 +KPX U A -50 +KPX U Aacute -50 +KPX U Abreve -50 +KPX U Acircumflex -50 +KPX U Adieresis -50 +KPX U Agrave -50 +KPX U Amacron -50 +KPX U Aogonek -50 +KPX U Aring -50 +KPX U Atilde -50 +KPX U comma -30 +KPX U period -30 +KPX Uacute A -50 +KPX Uacute Aacute -50 +KPX Uacute Abreve -50 +KPX Uacute Acircumflex -50 +KPX Uacute Adieresis -50 +KPX Uacute Agrave -50 +KPX Uacute Amacron -50 +KPX Uacute Aogonek -50 +KPX Uacute Aring -50 +KPX Uacute Atilde -50 +KPX Uacute comma -30 +KPX Uacute period -30 +KPX Ucircumflex A -50 +KPX Ucircumflex Aacute -50 +KPX Ucircumflex Abreve -50 +KPX Ucircumflex Acircumflex -50 +KPX Ucircumflex Adieresis -50 +KPX Ucircumflex Agrave -50 +KPX Ucircumflex Amacron -50 +KPX Ucircumflex Aogonek -50 +KPX Ucircumflex Aring -50 +KPX Ucircumflex Atilde -50 +KPX Ucircumflex comma -30 +KPX Ucircumflex period -30 +KPX Udieresis A -50 +KPX Udieresis Aacute -50 +KPX Udieresis Abreve -50 +KPX Udieresis Acircumflex -50 +KPX Udieresis Adieresis -50 +KPX Udieresis Agrave -50 +KPX Udieresis Amacron -50 +KPX Udieresis Aogonek -50 +KPX Udieresis Aring -50 +KPX Udieresis Atilde -50 +KPX Udieresis comma -30 +KPX Udieresis period -30 +KPX Ugrave A -50 +KPX Ugrave Aacute -50 +KPX Ugrave Abreve -50 +KPX Ugrave Acircumflex -50 +KPX Ugrave Adieresis -50 +KPX Ugrave Agrave -50 +KPX Ugrave Amacron -50 +KPX Ugrave Aogonek -50 +KPX Ugrave Aring -50 +KPX Ugrave Atilde -50 +KPX Ugrave comma -30 +KPX Ugrave period -30 +KPX Uhungarumlaut A -50 +KPX Uhungarumlaut Aacute -50 +KPX Uhungarumlaut Abreve -50 +KPX Uhungarumlaut Acircumflex -50 +KPX Uhungarumlaut Adieresis -50 +KPX Uhungarumlaut Agrave -50 +KPX Uhungarumlaut Amacron -50 +KPX Uhungarumlaut Aogonek -50 +KPX Uhungarumlaut Aring -50 +KPX Uhungarumlaut Atilde -50 +KPX Uhungarumlaut comma -30 +KPX Uhungarumlaut period -30 +KPX Umacron A -50 +KPX Umacron Aacute -50 +KPX Umacron Abreve -50 +KPX Umacron Acircumflex -50 +KPX Umacron Adieresis -50 +KPX Umacron Agrave -50 +KPX Umacron Amacron -50 +KPX Umacron Aogonek -50 +KPX Umacron Aring -50 +KPX Umacron Atilde -50 +KPX Umacron comma -30 +KPX Umacron period -30 +KPX Uogonek A -50 +KPX Uogonek Aacute -50 +KPX Uogonek Abreve -50 +KPX Uogonek Acircumflex -50 +KPX Uogonek Adieresis -50 +KPX Uogonek Agrave -50 +KPX Uogonek Amacron -50 +KPX Uogonek Aogonek -50 +KPX Uogonek Aring -50 +KPX Uogonek Atilde -50 +KPX Uogonek comma -30 +KPX Uogonek period -30 +KPX Uring A -50 +KPX Uring Aacute -50 +KPX Uring Abreve -50 +KPX Uring Acircumflex -50 +KPX Uring Adieresis -50 +KPX Uring Agrave -50 +KPX Uring Amacron -50 +KPX Uring Aogonek -50 +KPX Uring Aring -50 +KPX Uring Atilde -50 +KPX Uring comma -30 +KPX Uring period -30 +KPX V A -80 +KPX V Aacute -80 +KPX V Abreve -80 +KPX V Acircumflex -80 +KPX V Adieresis -80 +KPX V Agrave -80 +KPX V Amacron -80 +KPX V Aogonek -80 +KPX V Aring -80 +KPX V Atilde -80 +KPX V G -50 +KPX V Gbreve -50 +KPX V Gcommaaccent -50 +KPX V O -50 +KPX V Oacute -50 +KPX V Ocircumflex -50 +KPX V Odieresis -50 +KPX V Ograve -50 +KPX V Ohungarumlaut -50 +KPX V Omacron -50 +KPX V Oslash -50 +KPX V Otilde -50 +KPX V a -60 +KPX V aacute -60 +KPX V abreve -60 +KPX V acircumflex -60 +KPX V adieresis -60 +KPX V agrave -60 +KPX V amacron -60 +KPX V aogonek -60 +KPX V aring -60 +KPX V atilde -60 +KPX V colon -40 +KPX V comma -120 +KPX V e -50 +KPX V eacute -50 +KPX V ecaron -50 +KPX V ecircumflex -50 +KPX V edieresis -50 +KPX V edotaccent -50 +KPX V egrave -50 +KPX V emacron -50 +KPX V eogonek -50 +KPX V hyphen -80 +KPX V o -90 +KPX V oacute -90 +KPX V ocircumflex -90 +KPX V odieresis -90 +KPX V ograve -90 +KPX V ohungarumlaut -90 +KPX V omacron -90 +KPX V oslash -90 +KPX V otilde -90 +KPX V period -120 +KPX V semicolon -40 +KPX V u -60 +KPX V uacute -60 +KPX V ucircumflex -60 +KPX V udieresis -60 +KPX V ugrave -60 +KPX V uhungarumlaut -60 +KPX V umacron -60 +KPX V uogonek -60 +KPX V uring -60 +KPX W A -60 +KPX W Aacute -60 +KPX W Abreve -60 +KPX W Acircumflex -60 +KPX W Adieresis -60 +KPX W Agrave -60 +KPX W Amacron -60 +KPX W Aogonek -60 +KPX W Aring -60 +KPX W Atilde -60 +KPX W O -20 +KPX W Oacute -20 +KPX W Ocircumflex -20 +KPX W Odieresis -20 +KPX W Ograve -20 +KPX W Ohungarumlaut -20 +KPX W Omacron -20 +KPX W Oslash -20 +KPX W Otilde -20 +KPX W a -40 +KPX W aacute -40 +KPX W abreve -40 +KPX W acircumflex -40 +KPX W adieresis -40 +KPX W agrave -40 +KPX W amacron -40 +KPX W aogonek -40 +KPX W aring -40 +KPX W atilde -40 +KPX W colon -10 +KPX W comma -80 +KPX W e -35 +KPX W eacute -35 +KPX W ecaron -35 +KPX W ecircumflex -35 +KPX W edieresis -35 +KPX W edotaccent -35 +KPX W egrave -35 +KPX W emacron -35 +KPX W eogonek -35 +KPX W hyphen -40 +KPX W o -60 +KPX W oacute -60 +KPX W ocircumflex -60 +KPX W odieresis -60 +KPX W ograve -60 +KPX W ohungarumlaut -60 +KPX W omacron -60 +KPX W oslash -60 +KPX W otilde -60 +KPX W period -80 +KPX W semicolon -10 +KPX W u -45 +KPX W uacute -45 +KPX W ucircumflex -45 +KPX W udieresis -45 +KPX W ugrave -45 +KPX W uhungarumlaut -45 +KPX W umacron -45 +KPX W uogonek -45 +KPX W uring -45 +KPX W y -20 +KPX W yacute -20 +KPX W ydieresis -20 +KPX Y A -110 +KPX Y Aacute -110 +KPX Y Abreve -110 +KPX Y Acircumflex -110 +KPX Y Adieresis -110 +KPX Y Agrave -110 +KPX Y Amacron -110 +KPX Y Aogonek -110 +KPX Y Aring -110 +KPX Y Atilde -110 +KPX Y O -70 +KPX Y Oacute -70 +KPX Y Ocircumflex -70 +KPX Y Odieresis -70 +KPX Y Ograve -70 +KPX Y Ohungarumlaut -70 +KPX Y Omacron -70 +KPX Y Oslash -70 +KPX Y Otilde -70 +KPX Y a -90 +KPX Y aacute -90 +KPX Y abreve -90 +KPX Y acircumflex -90 +KPX Y adieresis -90 +KPX Y agrave -90 +KPX Y amacron -90 +KPX Y aogonek -90 +KPX Y aring -90 +KPX Y atilde -90 +KPX Y colon -50 +KPX Y comma -100 +KPX Y e -80 +KPX Y eacute -80 +KPX Y ecaron -80 +KPX Y ecircumflex -80 +KPX Y edieresis -80 +KPX Y edotaccent -80 +KPX Y egrave -80 +KPX Y emacron -80 +KPX Y eogonek -80 +KPX Y o -100 +KPX Y oacute -100 +KPX Y ocircumflex -100 +KPX Y odieresis -100 +KPX Y ograve -100 +KPX Y ohungarumlaut -100 +KPX Y omacron -100 +KPX Y oslash -100 +KPX Y otilde -100 +KPX Y period -100 +KPX Y semicolon -50 +KPX Y u -100 +KPX Y uacute -100 +KPX Y ucircumflex -100 +KPX Y udieresis -100 +KPX Y ugrave -100 +KPX Y uhungarumlaut -100 +KPX Y umacron -100 +KPX Y uogonek -100 +KPX Y uring -100 +KPX Yacute A -110 +KPX Yacute Aacute -110 +KPX Yacute Abreve -110 +KPX Yacute Acircumflex -110 +KPX Yacute Adieresis -110 +KPX Yacute Agrave -110 +KPX Yacute Amacron -110 +KPX Yacute Aogonek -110 +KPX Yacute Aring -110 +KPX Yacute Atilde -110 +KPX Yacute O -70 +KPX Yacute Oacute -70 +KPX Yacute Ocircumflex -70 +KPX Yacute Odieresis -70 +KPX Yacute Ograve -70 +KPX Yacute Ohungarumlaut -70 +KPX Yacute Omacron -70 +KPX Yacute Oslash -70 +KPX Yacute Otilde -70 +KPX Yacute a -90 +KPX Yacute aacute -90 +KPX Yacute abreve -90 +KPX Yacute acircumflex -90 +KPX Yacute adieresis -90 +KPX Yacute agrave -90 +KPX Yacute amacron -90 +KPX Yacute aogonek -90 +KPX Yacute aring -90 +KPX Yacute atilde -90 +KPX Yacute colon -50 +KPX Yacute comma -100 +KPX Yacute e -80 +KPX Yacute eacute -80 +KPX Yacute ecaron -80 +KPX Yacute ecircumflex -80 +KPX Yacute edieresis -80 +KPX Yacute edotaccent -80 +KPX Yacute egrave -80 +KPX Yacute emacron -80 +KPX Yacute eogonek -80 +KPX Yacute o -100 +KPX Yacute oacute -100 +KPX Yacute ocircumflex -100 +KPX Yacute odieresis -100 +KPX Yacute ograve -100 +KPX Yacute ohungarumlaut -100 +KPX Yacute omacron -100 +KPX Yacute oslash -100 +KPX Yacute otilde -100 +KPX Yacute period -100 +KPX Yacute semicolon -50 +KPX Yacute u -100 +KPX Yacute uacute -100 +KPX Yacute ucircumflex -100 +KPX Yacute udieresis -100 +KPX Yacute ugrave -100 +KPX Yacute uhungarumlaut -100 +KPX Yacute umacron -100 +KPX Yacute uogonek -100 +KPX Yacute uring -100 +KPX Ydieresis A -110 +KPX Ydieresis Aacute -110 +KPX Ydieresis Abreve -110 +KPX Ydieresis Acircumflex -110 +KPX Ydieresis Adieresis -110 +KPX Ydieresis Agrave -110 +KPX Ydieresis Amacron -110 +KPX Ydieresis Aogonek -110 +KPX Ydieresis Aring -110 +KPX Ydieresis Atilde -110 +KPX Ydieresis O -70 +KPX Ydieresis Oacute -70 +KPX Ydieresis Ocircumflex -70 +KPX Ydieresis Odieresis -70 +KPX Ydieresis Ograve -70 +KPX Ydieresis Ohungarumlaut -70 +KPX Ydieresis Omacron -70 +KPX Ydieresis Oslash -70 +KPX Ydieresis Otilde -70 +KPX Ydieresis a -90 +KPX Ydieresis aacute -90 +KPX Ydieresis abreve -90 +KPX Ydieresis acircumflex -90 +KPX Ydieresis adieresis -90 +KPX Ydieresis agrave -90 +KPX Ydieresis amacron -90 +KPX Ydieresis aogonek -90 +KPX Ydieresis aring -90 +KPX Ydieresis atilde -90 +KPX Ydieresis colon -50 +KPX Ydieresis comma -100 +KPX Ydieresis e -80 +KPX Ydieresis eacute -80 +KPX Ydieresis ecaron -80 +KPX Ydieresis ecircumflex -80 +KPX Ydieresis edieresis -80 +KPX Ydieresis edotaccent -80 +KPX Ydieresis egrave -80 +KPX Ydieresis emacron -80 +KPX Ydieresis eogonek -80 +KPX Ydieresis o -100 +KPX Ydieresis oacute -100 +KPX Ydieresis ocircumflex -100 +KPX Ydieresis odieresis -100 +KPX Ydieresis ograve -100 +KPX Ydieresis ohungarumlaut -100 +KPX Ydieresis omacron -100 +KPX Ydieresis oslash -100 +KPX Ydieresis otilde -100 +KPX Ydieresis period -100 +KPX Ydieresis semicolon -50 +KPX Ydieresis u -100 +KPX Ydieresis uacute -100 +KPX Ydieresis ucircumflex -100 +KPX Ydieresis udieresis -100 +KPX Ydieresis ugrave -100 +KPX Ydieresis uhungarumlaut -100 +KPX Ydieresis umacron -100 +KPX Ydieresis uogonek -100 +KPX Ydieresis uring -100 +KPX a g -10 +KPX a gbreve -10 +KPX a gcommaaccent -10 +KPX a v -15 +KPX a w -15 +KPX a y -20 +KPX a yacute -20 +KPX a ydieresis -20 +KPX aacute g -10 +KPX aacute gbreve -10 +KPX aacute gcommaaccent -10 +KPX aacute v -15 +KPX aacute w -15 +KPX aacute y -20 +KPX aacute yacute -20 +KPX aacute ydieresis -20 +KPX abreve g -10 +KPX abreve gbreve -10 +KPX abreve gcommaaccent -10 +KPX abreve v -15 +KPX abreve w -15 +KPX abreve y -20 +KPX abreve yacute -20 +KPX abreve ydieresis -20 +KPX acircumflex g -10 +KPX acircumflex gbreve -10 +KPX acircumflex gcommaaccent -10 +KPX acircumflex v -15 +KPX acircumflex w -15 +KPX acircumflex y -20 +KPX acircumflex yacute -20 +KPX acircumflex ydieresis -20 +KPX adieresis g -10 +KPX adieresis gbreve -10 +KPX adieresis gcommaaccent -10 +KPX adieresis v -15 +KPX adieresis w -15 +KPX adieresis y -20 +KPX adieresis yacute -20 +KPX adieresis ydieresis -20 +KPX agrave g -10 +KPX agrave gbreve -10 +KPX agrave gcommaaccent -10 +KPX agrave v -15 +KPX agrave w -15 +KPX agrave y -20 +KPX agrave yacute -20 +KPX agrave ydieresis -20 +KPX amacron g -10 +KPX amacron gbreve -10 +KPX amacron gcommaaccent -10 +KPX amacron v -15 +KPX amacron w -15 +KPX amacron y -20 +KPX amacron yacute -20 +KPX amacron ydieresis -20 +KPX aogonek g -10 +KPX aogonek gbreve -10 +KPX aogonek gcommaaccent -10 +KPX aogonek v -15 +KPX aogonek w -15 +KPX aogonek y -20 +KPX aogonek yacute -20 +KPX aogonek ydieresis -20 +KPX aring g -10 +KPX aring gbreve -10 +KPX aring gcommaaccent -10 +KPX aring v -15 +KPX aring w -15 +KPX aring y -20 +KPX aring yacute -20 +KPX aring ydieresis -20 +KPX atilde g -10 +KPX atilde gbreve -10 +KPX atilde gcommaaccent -10 +KPX atilde v -15 +KPX atilde w -15 +KPX atilde y -20 +KPX atilde yacute -20 +KPX atilde ydieresis -20 +KPX b l -10 +KPX b lacute -10 +KPX b lcommaaccent -10 +KPX b lslash -10 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -20 +KPX b y -20 +KPX b yacute -20 +KPX b ydieresis -20 +KPX c h -10 +KPX c k -20 +KPX c kcommaaccent -20 +KPX c l -20 +KPX c lacute -20 +KPX c lcommaaccent -20 +KPX c lslash -20 +KPX c y -10 +KPX c yacute -10 +KPX c ydieresis -10 +KPX cacute h -10 +KPX cacute k -20 +KPX cacute kcommaaccent -20 +KPX cacute l -20 +KPX cacute lacute -20 +KPX cacute lcommaaccent -20 +KPX cacute lslash -20 +KPX cacute y -10 +KPX cacute yacute -10 +KPX cacute ydieresis -10 +KPX ccaron h -10 +KPX ccaron k -20 +KPX ccaron kcommaaccent -20 +KPX ccaron l -20 +KPX ccaron lacute -20 +KPX ccaron lcommaaccent -20 +KPX ccaron lslash -20 +KPX ccaron y -10 +KPX ccaron yacute -10 +KPX ccaron ydieresis -10 +KPX ccedilla h -10 +KPX ccedilla k -20 +KPX ccedilla kcommaaccent -20 +KPX ccedilla l -20 +KPX ccedilla lacute -20 +KPX ccedilla lcommaaccent -20 +KPX ccedilla lslash -20 +KPX ccedilla y -10 +KPX ccedilla yacute -10 +KPX ccedilla ydieresis -10 +KPX colon space -40 +KPX comma quotedblright -120 +KPX comma quoteright -120 +KPX comma space -40 +KPX d d -10 +KPX d dcroat -10 +KPX d v -15 +KPX d w -15 +KPX d y -15 +KPX d yacute -15 +KPX d ydieresis -15 +KPX dcroat d -10 +KPX dcroat dcroat -10 +KPX dcroat v -15 +KPX dcroat w -15 +KPX dcroat y -15 +KPX dcroat yacute -15 +KPX dcroat ydieresis -15 +KPX e comma 10 +KPX e period 20 +KPX e v -15 +KPX e w -15 +KPX e x -15 +KPX e y -15 +KPX e yacute -15 +KPX e ydieresis -15 +KPX eacute comma 10 +KPX eacute period 20 +KPX eacute v -15 +KPX eacute w -15 +KPX eacute x -15 +KPX eacute y -15 +KPX eacute yacute -15 +KPX eacute ydieresis -15 +KPX ecaron comma 10 +KPX ecaron period 20 +KPX ecaron v -15 +KPX ecaron w -15 +KPX ecaron x -15 +KPX ecaron y -15 +KPX ecaron yacute -15 +KPX ecaron ydieresis -15 +KPX ecircumflex comma 10 +KPX ecircumflex period 20 +KPX ecircumflex v -15 +KPX ecircumflex w -15 +KPX ecircumflex x -15 +KPX ecircumflex y -15 +KPX ecircumflex yacute -15 +KPX ecircumflex ydieresis -15 +KPX edieresis comma 10 +KPX edieresis period 20 +KPX edieresis v -15 +KPX edieresis w -15 +KPX edieresis x -15 +KPX edieresis y -15 +KPX edieresis yacute -15 +KPX edieresis ydieresis -15 +KPX edotaccent comma 10 +KPX edotaccent period 20 +KPX edotaccent v -15 +KPX edotaccent w -15 +KPX edotaccent x -15 +KPX edotaccent y -15 +KPX edotaccent yacute -15 +KPX edotaccent ydieresis -15 +KPX egrave comma 10 +KPX egrave period 20 +KPX egrave v -15 +KPX egrave w -15 +KPX egrave x -15 +KPX egrave y -15 +KPX egrave yacute -15 +KPX egrave ydieresis -15 +KPX emacron comma 10 +KPX emacron period 20 +KPX emacron v -15 +KPX emacron w -15 +KPX emacron x -15 +KPX emacron y -15 +KPX emacron yacute -15 +KPX emacron ydieresis -15 +KPX eogonek comma 10 +KPX eogonek period 20 +KPX eogonek v -15 +KPX eogonek w -15 +KPX eogonek x -15 +KPX eogonek y -15 +KPX eogonek yacute -15 +KPX eogonek ydieresis -15 +KPX f comma -10 +KPX f e -10 +KPX f eacute -10 +KPX f ecaron -10 +KPX f ecircumflex -10 +KPX f edieresis -10 +KPX f edotaccent -10 +KPX f egrave -10 +KPX f emacron -10 +KPX f eogonek -10 +KPX f o -20 +KPX f oacute -20 +KPX f ocircumflex -20 +KPX f odieresis -20 +KPX f ograve -20 +KPX f ohungarumlaut -20 +KPX f omacron -20 +KPX f oslash -20 +KPX f otilde -20 +KPX f period -10 +KPX f quotedblright 30 +KPX f quoteright 30 +KPX g e 10 +KPX g eacute 10 +KPX g ecaron 10 +KPX g ecircumflex 10 +KPX g edieresis 10 +KPX g edotaccent 10 +KPX g egrave 10 +KPX g emacron 10 +KPX g eogonek 10 +KPX g g -10 +KPX g gbreve -10 +KPX g gcommaaccent -10 +KPX gbreve e 10 +KPX gbreve eacute 10 +KPX gbreve ecaron 10 +KPX gbreve ecircumflex 10 +KPX gbreve edieresis 10 +KPX gbreve edotaccent 10 +KPX gbreve egrave 10 +KPX gbreve emacron 10 +KPX gbreve eogonek 10 +KPX gbreve g -10 +KPX gbreve gbreve -10 +KPX gbreve gcommaaccent -10 +KPX gcommaaccent e 10 +KPX gcommaaccent eacute 10 +KPX gcommaaccent ecaron 10 +KPX gcommaaccent ecircumflex 10 +KPX gcommaaccent edieresis 10 +KPX gcommaaccent edotaccent 10 +KPX gcommaaccent egrave 10 +KPX gcommaaccent emacron 10 +KPX gcommaaccent eogonek 10 +KPX gcommaaccent g -10 +KPX gcommaaccent gbreve -10 +KPX gcommaaccent gcommaaccent -10 +KPX h y -20 +KPX h yacute -20 +KPX h ydieresis -20 +KPX k o -15 +KPX k oacute -15 +KPX k ocircumflex -15 +KPX k odieresis -15 +KPX k ograve -15 +KPX k ohungarumlaut -15 +KPX k omacron -15 +KPX k oslash -15 +KPX k otilde -15 +KPX kcommaaccent o -15 +KPX kcommaaccent oacute -15 +KPX kcommaaccent ocircumflex -15 +KPX kcommaaccent odieresis -15 +KPX kcommaaccent ograve -15 +KPX kcommaaccent ohungarumlaut -15 +KPX kcommaaccent omacron -15 +KPX kcommaaccent oslash -15 +KPX kcommaaccent otilde -15 +KPX l w -15 +KPX l y -15 +KPX l yacute -15 +KPX l ydieresis -15 +KPX lacute w -15 +KPX lacute y -15 +KPX lacute yacute -15 +KPX lacute ydieresis -15 +KPX lcommaaccent w -15 +KPX lcommaaccent y -15 +KPX lcommaaccent yacute -15 +KPX lcommaaccent ydieresis -15 +KPX lslash w -15 +KPX lslash y -15 +KPX lslash yacute -15 +KPX lslash ydieresis -15 +KPX m u -20 +KPX m uacute -20 +KPX m ucircumflex -20 +KPX m udieresis -20 +KPX m ugrave -20 +KPX m uhungarumlaut -20 +KPX m umacron -20 +KPX m uogonek -20 +KPX m uring -20 +KPX m y -30 +KPX m yacute -30 +KPX m ydieresis -30 +KPX n u -10 +KPX n uacute -10 +KPX n ucircumflex -10 +KPX n udieresis -10 +KPX n ugrave -10 +KPX n uhungarumlaut -10 +KPX n umacron -10 +KPX n uogonek -10 +KPX n uring -10 +KPX n v -40 +KPX n y -20 +KPX n yacute -20 +KPX n ydieresis -20 +KPX nacute u -10 +KPX nacute uacute -10 +KPX nacute ucircumflex -10 +KPX nacute udieresis -10 +KPX nacute ugrave -10 +KPX nacute uhungarumlaut -10 +KPX nacute umacron -10 +KPX nacute uogonek -10 +KPX nacute uring -10 +KPX nacute v -40 +KPX nacute y -20 +KPX nacute yacute -20 +KPX nacute ydieresis -20 +KPX ncaron u -10 +KPX ncaron uacute -10 +KPX ncaron ucircumflex -10 +KPX ncaron udieresis -10 +KPX ncaron ugrave -10 +KPX ncaron uhungarumlaut -10 +KPX ncaron umacron -10 +KPX ncaron uogonek -10 +KPX ncaron uring -10 +KPX ncaron v -40 +KPX ncaron y -20 +KPX ncaron yacute -20 +KPX ncaron ydieresis -20 +KPX ncommaaccent u -10 +KPX ncommaaccent uacute -10 +KPX ncommaaccent ucircumflex -10 +KPX ncommaaccent udieresis -10 +KPX ncommaaccent ugrave -10 +KPX ncommaaccent uhungarumlaut -10 +KPX ncommaaccent umacron -10 +KPX ncommaaccent uogonek -10 +KPX ncommaaccent uring -10 +KPX ncommaaccent v -40 +KPX ncommaaccent y -20 +KPX ncommaaccent yacute -20 +KPX ncommaaccent ydieresis -20 +KPX ntilde u -10 +KPX ntilde uacute -10 +KPX ntilde ucircumflex -10 +KPX ntilde udieresis -10 +KPX ntilde ugrave -10 +KPX ntilde uhungarumlaut -10 +KPX ntilde umacron -10 +KPX ntilde uogonek -10 +KPX ntilde uring -10 +KPX ntilde v -40 +KPX ntilde y -20 +KPX ntilde yacute -20 +KPX ntilde ydieresis -20 +KPX o v -20 +KPX o w -15 +KPX o x -30 +KPX o y -20 +KPX o yacute -20 +KPX o ydieresis -20 +KPX oacute v -20 +KPX oacute w -15 +KPX oacute x -30 +KPX oacute y -20 +KPX oacute yacute -20 +KPX oacute ydieresis -20 +KPX ocircumflex v -20 +KPX ocircumflex w -15 +KPX ocircumflex x -30 +KPX ocircumflex y -20 +KPX ocircumflex yacute -20 +KPX ocircumflex ydieresis -20 +KPX odieresis v -20 +KPX odieresis w -15 +KPX odieresis x -30 +KPX odieresis y -20 +KPX odieresis yacute -20 +KPX odieresis ydieresis -20 +KPX ograve v -20 +KPX ograve w -15 +KPX ograve x -30 +KPX ograve y -20 +KPX ograve yacute -20 +KPX ograve ydieresis -20 +KPX ohungarumlaut v -20 +KPX ohungarumlaut w -15 +KPX ohungarumlaut x -30 +KPX ohungarumlaut y -20 +KPX ohungarumlaut yacute -20 +KPX ohungarumlaut ydieresis -20 +KPX omacron v -20 +KPX omacron w -15 +KPX omacron x -30 +KPX omacron y -20 +KPX omacron yacute -20 +KPX omacron ydieresis -20 +KPX oslash v -20 +KPX oslash w -15 +KPX oslash x -30 +KPX oslash y -20 +KPX oslash yacute -20 +KPX oslash ydieresis -20 +KPX otilde v -20 +KPX otilde w -15 +KPX otilde x -30 +KPX otilde y -20 +KPX otilde yacute -20 +KPX otilde ydieresis -20 +KPX p y -15 +KPX p yacute -15 +KPX p ydieresis -15 +KPX period quotedblright -120 +KPX period quoteright -120 +KPX period space -40 +KPX quotedblright space -80 +KPX quoteleft quoteleft -46 +KPX quoteright d -80 +KPX quoteright dcroat -80 +KPX quoteright l -20 +KPX quoteright lacute -20 +KPX quoteright lcommaaccent -20 +KPX quoteright lslash -20 +KPX quoteright quoteright -46 +KPX quoteright r -40 +KPX quoteright racute -40 +KPX quoteright rcaron -40 +KPX quoteright rcommaaccent -40 +KPX quoteright s -60 +KPX quoteright sacute -60 +KPX quoteright scaron -60 +KPX quoteright scedilla -60 +KPX quoteright scommaaccent -60 +KPX quoteright space -80 +KPX quoteright v -20 +KPX r c -20 +KPX r cacute -20 +KPX r ccaron -20 +KPX r ccedilla -20 +KPX r comma -60 +KPX r d -20 +KPX r dcroat -20 +KPX r g -15 +KPX r gbreve -15 +KPX r gcommaaccent -15 +KPX r hyphen -20 +KPX r o -20 +KPX r oacute -20 +KPX r ocircumflex -20 +KPX r odieresis -20 +KPX r ograve -20 +KPX r ohungarumlaut -20 +KPX r omacron -20 +KPX r oslash -20 +KPX r otilde -20 +KPX r period -60 +KPX r q -20 +KPX r s -15 +KPX r sacute -15 +KPX r scaron -15 +KPX r scedilla -15 +KPX r scommaaccent -15 +KPX r t 20 +KPX r tcommaaccent 20 +KPX r v 10 +KPX r y 10 +KPX r yacute 10 +KPX r ydieresis 10 +KPX racute c -20 +KPX racute cacute -20 +KPX racute ccaron -20 +KPX racute ccedilla -20 +KPX racute comma -60 +KPX racute d -20 +KPX racute dcroat -20 +KPX racute g -15 +KPX racute gbreve -15 +KPX racute gcommaaccent -15 +KPX racute hyphen -20 +KPX racute o -20 +KPX racute oacute -20 +KPX racute ocircumflex -20 +KPX racute odieresis -20 +KPX racute ograve -20 +KPX racute ohungarumlaut -20 +KPX racute omacron -20 +KPX racute oslash -20 +KPX racute otilde -20 +KPX racute period -60 +KPX racute q -20 +KPX racute s -15 +KPX racute sacute -15 +KPX racute scaron -15 +KPX racute scedilla -15 +KPX racute scommaaccent -15 +KPX racute t 20 +KPX racute tcommaaccent 20 +KPX racute v 10 +KPX racute y 10 +KPX racute yacute 10 +KPX racute ydieresis 10 +KPX rcaron c -20 +KPX rcaron cacute -20 +KPX rcaron ccaron -20 +KPX rcaron ccedilla -20 +KPX rcaron comma -60 +KPX rcaron d -20 +KPX rcaron dcroat -20 +KPX rcaron g -15 +KPX rcaron gbreve -15 +KPX rcaron gcommaaccent -15 +KPX rcaron hyphen -20 +KPX rcaron o -20 +KPX rcaron oacute -20 +KPX rcaron ocircumflex -20 +KPX rcaron odieresis -20 +KPX rcaron ograve -20 +KPX rcaron ohungarumlaut -20 +KPX rcaron omacron -20 +KPX rcaron oslash -20 +KPX rcaron otilde -20 +KPX rcaron period -60 +KPX rcaron q -20 +KPX rcaron s -15 +KPX rcaron sacute -15 +KPX rcaron scaron -15 +KPX rcaron scedilla -15 +KPX rcaron scommaaccent -15 +KPX rcaron t 20 +KPX rcaron tcommaaccent 20 +KPX rcaron v 10 +KPX rcaron y 10 +KPX rcaron yacute 10 +KPX rcaron ydieresis 10 +KPX rcommaaccent c -20 +KPX rcommaaccent cacute -20 +KPX rcommaaccent ccaron -20 +KPX rcommaaccent ccedilla -20 +KPX rcommaaccent comma -60 +KPX rcommaaccent d -20 +KPX rcommaaccent dcroat -20 +KPX rcommaaccent g -15 +KPX rcommaaccent gbreve -15 +KPX rcommaaccent gcommaaccent -15 +KPX rcommaaccent hyphen -20 +KPX rcommaaccent o -20 +KPX rcommaaccent oacute -20 +KPX rcommaaccent ocircumflex -20 +KPX rcommaaccent odieresis -20 +KPX rcommaaccent ograve -20 +KPX rcommaaccent ohungarumlaut -20 +KPX rcommaaccent omacron -20 +KPX rcommaaccent oslash -20 +KPX rcommaaccent otilde -20 +KPX rcommaaccent period -60 +KPX rcommaaccent q -20 +KPX rcommaaccent s -15 +KPX rcommaaccent sacute -15 +KPX rcommaaccent scaron -15 +KPX rcommaaccent scedilla -15 +KPX rcommaaccent scommaaccent -15 +KPX rcommaaccent t 20 +KPX rcommaaccent tcommaaccent 20 +KPX rcommaaccent v 10 +KPX rcommaaccent y 10 +KPX rcommaaccent yacute 10 +KPX rcommaaccent ydieresis 10 +KPX s w -15 +KPX sacute w -15 +KPX scaron w -15 +KPX scedilla w -15 +KPX scommaaccent w -15 +KPX semicolon space -40 +KPX space T -100 +KPX space Tcaron -100 +KPX space Tcommaaccent -100 +KPX space V -80 +KPX space W -80 +KPX space Y -120 +KPX space Yacute -120 +KPX space Ydieresis -120 +KPX space quotedblleft -80 +KPX space quoteleft -60 +KPX v a -20 +KPX v aacute -20 +KPX v abreve -20 +KPX v acircumflex -20 +KPX v adieresis -20 +KPX v agrave -20 +KPX v amacron -20 +KPX v aogonek -20 +KPX v aring -20 +KPX v atilde -20 +KPX v comma -80 +KPX v o -30 +KPX v oacute -30 +KPX v ocircumflex -30 +KPX v odieresis -30 +KPX v ograve -30 +KPX v ohungarumlaut -30 +KPX v omacron -30 +KPX v oslash -30 +KPX v otilde -30 +KPX v period -80 +KPX w comma -40 +KPX w o -20 +KPX w oacute -20 +KPX w ocircumflex -20 +KPX w odieresis -20 +KPX w ograve -20 +KPX w ohungarumlaut -20 +KPX w omacron -20 +KPX w oslash -20 +KPX w otilde -20 +KPX w period -40 +KPX x e -10 +KPX x eacute -10 +KPX x ecaron -10 +KPX x ecircumflex -10 +KPX x edieresis -10 +KPX x edotaccent -10 +KPX x egrave -10 +KPX x emacron -10 +KPX x eogonek -10 +KPX y a -30 +KPX y aacute -30 +KPX y abreve -30 +KPX y acircumflex -30 +KPX y adieresis -30 +KPX y agrave -30 +KPX y amacron -30 +KPX y aogonek -30 +KPX y aring -30 +KPX y atilde -30 +KPX y comma -80 +KPX y e -10 +KPX y eacute -10 +KPX y ecaron -10 +KPX y ecircumflex -10 +KPX y edieresis -10 +KPX y edotaccent -10 +KPX y egrave -10 +KPX y emacron -10 +KPX y eogonek -10 +KPX y o -25 +KPX y oacute -25 +KPX y ocircumflex -25 +KPX y odieresis -25 +KPX y ograve -25 +KPX y ohungarumlaut -25 +KPX y omacron -25 +KPX y oslash -25 +KPX y otilde -25 +KPX y period -80 +KPX yacute a -30 +KPX yacute aacute -30 +KPX yacute abreve -30 +KPX yacute acircumflex -30 +KPX yacute adieresis -30 +KPX yacute agrave -30 +KPX yacute amacron -30 +KPX yacute aogonek -30 +KPX yacute aring -30 +KPX yacute atilde -30 +KPX yacute comma -80 +KPX yacute e -10 +KPX yacute eacute -10 +KPX yacute ecaron -10 +KPX yacute ecircumflex -10 +KPX yacute edieresis -10 +KPX yacute edotaccent -10 +KPX yacute egrave -10 +KPX yacute emacron -10 +KPX yacute eogonek -10 +KPX yacute o -25 +KPX yacute oacute -25 +KPX yacute ocircumflex -25 +KPX yacute odieresis -25 +KPX yacute ograve -25 +KPX yacute ohungarumlaut -25 +KPX yacute omacron -25 +KPX yacute oslash -25 +KPX yacute otilde -25 +KPX yacute period -80 +KPX ydieresis a -30 +KPX ydieresis aacute -30 +KPX ydieresis abreve -30 +KPX ydieresis acircumflex -30 +KPX ydieresis adieresis -30 +KPX ydieresis agrave -30 +KPX ydieresis amacron -30 +KPX ydieresis aogonek -30 +KPX ydieresis aring -30 +KPX ydieresis atilde -30 +KPX ydieresis comma -80 +KPX ydieresis e -10 +KPX ydieresis eacute -10 +KPX ydieresis ecaron -10 +KPX ydieresis ecircumflex -10 +KPX ydieresis edieresis -10 +KPX ydieresis edotaccent -10 +KPX ydieresis egrave -10 +KPX ydieresis emacron -10 +KPX ydieresis eogonek -10 +KPX ydieresis o -25 +KPX ydieresis oacute -25 +KPX ydieresis ocircumflex -25 +KPX ydieresis odieresis -25 +KPX ydieresis ograve -25 +KPX ydieresis ohungarumlaut -25 +KPX ydieresis omacron -25 +KPX ydieresis oslash -25 +KPX ydieresis otilde -25 +KPX ydieresis period -80 +KPX z e 10 +KPX z eacute 10 +KPX z ecaron 10 +KPX z ecircumflex 10 +KPX z edieresis 10 +KPX z edotaccent 10 +KPX z egrave 10 +KPX z emacron 10 +KPX z eogonek 10 +KPX zacute e 10 +KPX zacute eacute 10 +KPX zacute ecaron 10 +KPX zacute ecircumflex 10 +KPX zacute edieresis 10 +KPX zacute edotaccent 10 +KPX zacute egrave 10 +KPX zacute emacron 10 +KPX zacute eogonek 10 +KPX zcaron e 10 +KPX zcaron eacute 10 +KPX zcaron ecaron 10 +KPX zcaron ecircumflex 10 +KPX zcaron edieresis 10 +KPX zcaron edotaccent 10 +KPX zcaron egrave 10 +KPX zcaron emacron 10 +KPX zcaron eogonek 10 +KPX zdotaccent e 10 +KPX zdotaccent eacute 10 +KPX zdotaccent ecaron 10 +KPX zdotaccent ecircumflex 10 +KPX zdotaccent edieresis 10 +KPX zdotaccent edotaccent 10 +KPX zdotaccent egrave 10 +KPX zdotaccent emacron 10 +KPX zdotaccent eogonek 10 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica-Oblique.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica-Oblique.afm new file mode 100644 index 000000000..7a7af0017 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica-Oblique.afm @@ -0,0 +1,3051 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:44:31 1997 +Comment UniqueID 43055 +Comment VMusage 14960 69346 +FontName Helvetica-Oblique +FullName Helvetica Oblique +FamilyName Helvetica +Weight Medium +ItalicAngle -12 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -170 -225 1116 931 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 718 +XHeight 523 +Ascender 718 +Descender -207 +StdHW 76 +StdVW 88 +StartCharMetrics 315 +C 32 ; WX 278 ; N space ; B 0 0 0 0 ; +C 33 ; WX 278 ; N exclam ; B 90 0 340 718 ; +C 34 ; WX 355 ; N quotedbl ; B 168 463 438 718 ; +C 35 ; WX 556 ; N numbersign ; B 73 0 631 688 ; +C 36 ; WX 556 ; N dollar ; B 69 -115 617 775 ; +C 37 ; WX 889 ; N percent ; B 147 -19 889 703 ; +C 38 ; WX 667 ; N ampersand ; B 77 -15 647 718 ; +C 39 ; WX 222 ; N quoteright ; B 151 463 310 718 ; +C 40 ; WX 333 ; N parenleft ; B 108 -207 454 733 ; +C 41 ; WX 333 ; N parenright ; B -9 -207 337 733 ; +C 42 ; WX 389 ; N asterisk ; B 165 431 475 718 ; +C 43 ; WX 584 ; N plus ; B 85 0 606 505 ; +C 44 ; WX 278 ; N comma ; B 56 -147 214 106 ; +C 45 ; WX 333 ; N hyphen ; B 93 232 357 322 ; +C 46 ; WX 278 ; N period ; B 87 0 214 106 ; +C 47 ; WX 278 ; N slash ; B -21 -19 452 737 ; +C 48 ; WX 556 ; N zero ; B 93 -19 608 703 ; +C 49 ; WX 556 ; N one ; B 207 0 508 703 ; +C 50 ; WX 556 ; N two ; B 26 0 617 703 ; +C 51 ; WX 556 ; N three ; B 75 -19 610 703 ; +C 52 ; WX 556 ; N four ; B 61 0 576 703 ; +C 53 ; WX 556 ; N five ; B 68 -19 621 688 ; +C 54 ; WX 556 ; N six ; B 91 -19 615 703 ; +C 55 ; WX 556 ; N seven ; B 137 0 669 688 ; +C 56 ; WX 556 ; N eight ; B 74 -19 607 703 ; +C 57 ; WX 556 ; N nine ; B 82 -19 609 703 ; +C 58 ; WX 278 ; N colon ; B 87 0 301 516 ; +C 59 ; WX 278 ; N semicolon ; B 56 -147 301 516 ; +C 60 ; WX 584 ; N less ; B 94 11 641 495 ; +C 61 ; WX 584 ; N equal ; B 63 115 628 390 ; +C 62 ; WX 584 ; N greater ; B 50 11 597 495 ; +C 63 ; WX 556 ; N question ; B 161 0 610 727 ; +C 64 ; WX 1015 ; N at ; B 215 -19 965 737 ; +C 65 ; WX 667 ; N A ; B 14 0 654 718 ; +C 66 ; WX 667 ; N B ; B 74 0 712 718 ; +C 67 ; WX 722 ; N C ; B 108 -19 782 737 ; +C 68 ; WX 722 ; N D ; B 81 0 764 718 ; +C 69 ; WX 667 ; N E ; B 86 0 762 718 ; +C 70 ; WX 611 ; N F ; B 86 0 736 718 ; +C 71 ; WX 778 ; N G ; B 111 -19 799 737 ; +C 72 ; WX 722 ; N H ; B 77 0 799 718 ; +C 73 ; WX 278 ; N I ; B 91 0 341 718 ; +C 74 ; WX 500 ; N J ; B 47 -19 581 718 ; +C 75 ; WX 667 ; N K ; B 76 0 808 718 ; +C 76 ; WX 556 ; N L ; B 76 0 555 718 ; +C 77 ; WX 833 ; N M ; B 73 0 914 718 ; +C 78 ; WX 722 ; N N ; B 76 0 799 718 ; +C 79 ; WX 778 ; N O ; B 105 -19 826 737 ; +C 80 ; WX 667 ; N P ; B 86 0 737 718 ; +C 81 ; WX 778 ; N Q ; B 105 -56 826 737 ; +C 82 ; WX 722 ; N R ; B 88 0 773 718 ; +C 83 ; WX 667 ; N S ; B 90 -19 713 737 ; +C 84 ; WX 611 ; N T ; B 148 0 750 718 ; +C 85 ; WX 722 ; N U ; B 123 -19 797 718 ; +C 86 ; WX 667 ; N V ; B 173 0 800 718 ; +C 87 ; WX 944 ; N W ; B 169 0 1081 718 ; +C 88 ; WX 667 ; N X ; B 19 0 790 718 ; +C 89 ; WX 667 ; N Y ; B 167 0 806 718 ; +C 90 ; WX 611 ; N Z ; B 23 0 741 718 ; +C 91 ; WX 278 ; N bracketleft ; B 21 -196 403 722 ; +C 92 ; WX 278 ; N backslash ; B 140 -19 291 737 ; +C 93 ; WX 278 ; N bracketright ; B -14 -196 368 722 ; +C 94 ; WX 469 ; N asciicircum ; B 42 264 539 688 ; +C 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ; +C 96 ; WX 222 ; N quoteleft ; B 165 470 323 725 ; +C 97 ; WX 556 ; N a ; B 61 -15 559 538 ; +C 98 ; WX 556 ; N b ; B 58 -15 584 718 ; +C 99 ; WX 500 ; N c ; B 74 -15 553 538 ; +C 100 ; WX 556 ; N d ; B 84 -15 652 718 ; +C 101 ; WX 556 ; N e ; B 84 -15 578 538 ; +C 102 ; WX 278 ; N f ; B 86 0 416 728 ; L i fi ; L l fl ; +C 103 ; WX 556 ; N g ; B 42 -220 610 538 ; +C 104 ; WX 556 ; N h ; B 65 0 573 718 ; +C 105 ; WX 222 ; N i ; B 67 0 308 718 ; +C 106 ; WX 222 ; N j ; B -60 -210 308 718 ; +C 107 ; WX 500 ; N k ; B 67 0 600 718 ; +C 108 ; WX 222 ; N l ; B 67 0 308 718 ; +C 109 ; WX 833 ; N m ; B 65 0 852 538 ; +C 110 ; WX 556 ; N n ; B 65 0 573 538 ; +C 111 ; WX 556 ; N o ; B 83 -14 585 538 ; +C 112 ; WX 556 ; N p ; B 14 -207 584 538 ; +C 113 ; WX 556 ; N q ; B 84 -207 605 538 ; +C 114 ; WX 333 ; N r ; B 77 0 446 538 ; +C 115 ; WX 500 ; N s ; B 63 -15 529 538 ; +C 116 ; WX 278 ; N t ; B 102 -7 368 669 ; +C 117 ; WX 556 ; N u ; B 94 -15 600 523 ; +C 118 ; WX 500 ; N v ; B 119 0 603 523 ; +C 119 ; WX 722 ; N w ; B 125 0 820 523 ; +C 120 ; WX 500 ; N x ; B 11 0 594 523 ; +C 121 ; WX 500 ; N y ; B 15 -214 600 523 ; +C 122 ; WX 500 ; N z ; B 31 0 571 523 ; +C 123 ; WX 334 ; N braceleft ; B 92 -196 445 722 ; +C 124 ; WX 260 ; N bar ; B 46 -225 332 775 ; +C 125 ; WX 334 ; N braceright ; B 0 -196 354 722 ; +C 126 ; WX 584 ; N asciitilde ; B 111 180 580 326 ; +C 161 ; WX 333 ; N exclamdown ; B 77 -195 326 523 ; +C 162 ; WX 556 ; N cent ; B 95 -115 584 623 ; +C 163 ; WX 556 ; N sterling ; B 49 -16 634 718 ; +C 164 ; WX 167 ; N fraction ; B -170 -19 482 703 ; +C 165 ; WX 556 ; N yen ; B 81 0 699 688 ; +C 166 ; WX 556 ; N florin ; B -52 -207 654 737 ; +C 167 ; WX 556 ; N section ; B 76 -191 584 737 ; +C 168 ; WX 556 ; N currency ; B 60 99 646 603 ; +C 169 ; WX 191 ; N quotesingle ; B 157 463 285 718 ; +C 170 ; WX 333 ; N quotedblleft ; B 138 470 461 725 ; +C 171 ; WX 556 ; N guillemotleft ; B 146 108 554 446 ; +C 172 ; WX 333 ; N guilsinglleft ; B 137 108 340 446 ; +C 173 ; WX 333 ; N guilsinglright ; B 111 108 314 446 ; +C 174 ; WX 500 ; N fi ; B 86 0 587 728 ; +C 175 ; WX 500 ; N fl ; B 86 0 585 728 ; +C 177 ; WX 556 ; N endash ; B 51 240 623 313 ; +C 178 ; WX 556 ; N dagger ; B 135 -159 622 718 ; +C 179 ; WX 556 ; N daggerdbl ; B 52 -159 623 718 ; +C 180 ; WX 278 ; N periodcentered ; B 129 190 257 315 ; +C 182 ; WX 537 ; N paragraph ; B 126 -173 650 718 ; +C 183 ; WX 350 ; N bullet ; B 91 202 413 517 ; +C 184 ; WX 222 ; N quotesinglbase ; B 21 -149 180 106 ; +C 185 ; WX 333 ; N quotedblbase ; B -6 -149 318 106 ; +C 186 ; WX 333 ; N quotedblright ; B 124 463 448 718 ; +C 187 ; WX 556 ; N guillemotright ; B 120 108 528 446 ; +C 188 ; WX 1000 ; N ellipsis ; B 115 0 908 106 ; +C 189 ; WX 1000 ; N perthousand ; B 88 -19 1029 703 ; +C 191 ; WX 611 ; N questiondown ; B 85 -201 534 525 ; +C 193 ; WX 333 ; N grave ; B 170 593 337 734 ; +C 194 ; WX 333 ; N acute ; B 248 593 475 734 ; +C 195 ; WX 333 ; N circumflex ; B 147 593 438 734 ; +C 196 ; WX 333 ; N tilde ; B 125 606 490 722 ; +C 197 ; WX 333 ; N macron ; B 143 627 468 684 ; +C 198 ; WX 333 ; N breve ; B 167 595 476 731 ; +C 199 ; WX 333 ; N dotaccent ; B 249 604 362 706 ; +C 200 ; WX 333 ; N dieresis ; B 168 604 443 706 ; +C 202 ; WX 333 ; N ring ; B 214 572 402 756 ; +C 203 ; WX 333 ; N cedilla ; B 2 -225 232 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B 157 593 565 734 ; +C 206 ; WX 333 ; N ogonek ; B 43 -225 249 0 ; +C 207 ; WX 333 ; N caron ; B 177 593 468 734 ; +C 208 ; WX 1000 ; N emdash ; B 51 240 1067 313 ; +C 225 ; WX 1000 ; N AE ; B 8 0 1097 718 ; +C 227 ; WX 370 ; N ordfeminine ; B 127 405 449 737 ; +C 232 ; WX 556 ; N Lslash ; B 41 0 555 718 ; +C 233 ; WX 778 ; N Oslash ; B 43 -19 890 737 ; +C 234 ; WX 1000 ; N OE ; B 98 -19 1116 737 ; +C 235 ; WX 365 ; N ordmasculine ; B 141 405 468 737 ; +C 241 ; WX 889 ; N ae ; B 61 -15 909 538 ; +C 245 ; WX 278 ; N dotlessi ; B 95 0 294 523 ; +C 248 ; WX 222 ; N lslash ; B 41 0 347 718 ; +C 249 ; WX 611 ; N oslash ; B 29 -22 647 545 ; +C 250 ; WX 944 ; N oe ; B 83 -15 964 538 ; +C 251 ; WX 611 ; N germandbls ; B 67 -15 658 728 ; +C -1 ; WX 278 ; N Idieresis ; B 91 0 458 901 ; +C -1 ; WX 556 ; N eacute ; B 84 -15 587 734 ; +C -1 ; WX 556 ; N abreve ; B 61 -15 578 731 ; +C -1 ; WX 556 ; N uhungarumlaut ; B 94 -15 677 734 ; +C -1 ; WX 556 ; N ecaron ; B 84 -15 580 734 ; +C -1 ; WX 667 ; N Ydieresis ; B 167 0 806 901 ; +C -1 ; WX 584 ; N divide ; B 85 -19 606 524 ; +C -1 ; WX 667 ; N Yacute ; B 167 0 806 929 ; +C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ; +C -1 ; WX 556 ; N aacute ; B 61 -15 587 734 ; +C -1 ; WX 722 ; N Ucircumflex ; B 123 -19 797 929 ; +C -1 ; WX 500 ; N yacute ; B 15 -214 600 734 ; +C -1 ; WX 500 ; N scommaaccent ; B 63 -225 529 538 ; +C -1 ; WX 556 ; N ecircumflex ; B 84 -15 578 734 ; +C -1 ; WX 722 ; N Uring ; B 123 -19 797 931 ; +C -1 ; WX 722 ; N Udieresis ; B 123 -19 797 901 ; +C -1 ; WX 556 ; N aogonek ; B 61 -220 559 538 ; +C -1 ; WX 722 ; N Uacute ; B 123 -19 797 929 ; +C -1 ; WX 556 ; N uogonek ; B 94 -225 600 523 ; +C -1 ; WX 667 ; N Edieresis ; B 86 0 762 901 ; +C -1 ; WX 722 ; N Dcroat ; B 69 0 764 718 ; +C -1 ; WX 250 ; N commaaccent ; B 39 -225 172 -40 ; +C -1 ; WX 737 ; N copyright ; B 54 -19 837 737 ; +C -1 ; WX 667 ; N Emacron ; B 86 0 762 879 ; +C -1 ; WX 500 ; N ccaron ; B 74 -15 553 734 ; +C -1 ; WX 556 ; N aring ; B 61 -15 559 756 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 799 718 ; +C -1 ; WX 222 ; N lacute ; B 67 0 461 929 ; +C -1 ; WX 556 ; N agrave ; B 61 -15 559 734 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 148 -225 750 718 ; +C -1 ; WX 722 ; N Cacute ; B 108 -19 782 929 ; +C -1 ; WX 556 ; N atilde ; B 61 -15 592 722 ; +C -1 ; WX 667 ; N Edotaccent ; B 86 0 762 901 ; +C -1 ; WX 500 ; N scaron ; B 63 -15 552 734 ; +C -1 ; WX 500 ; N scedilla ; B 63 -225 529 538 ; +C -1 ; WX 278 ; N iacute ; B 95 0 448 734 ; +C -1 ; WX 471 ; N lozenge ; B 88 0 540 728 ; +C -1 ; WX 722 ; N Rcaron ; B 88 0 773 929 ; +C -1 ; WX 778 ; N Gcommaaccent ; B 111 -225 799 737 ; +C -1 ; WX 556 ; N ucircumflex ; B 94 -15 600 734 ; +C -1 ; WX 556 ; N acircumflex ; B 61 -15 559 734 ; +C -1 ; WX 667 ; N Amacron ; B 14 0 677 879 ; +C -1 ; WX 333 ; N rcaron ; B 77 0 508 734 ; +C -1 ; WX 500 ; N ccedilla ; B 74 -225 553 538 ; +C -1 ; WX 611 ; N Zdotaccent ; B 23 0 741 901 ; +C -1 ; WX 667 ; N Thorn ; B 86 0 712 718 ; +C -1 ; WX 778 ; N Omacron ; B 105 -19 826 879 ; +C -1 ; WX 722 ; N Racute ; B 88 0 773 929 ; +C -1 ; WX 667 ; N Sacute ; B 90 -19 713 929 ; +C -1 ; WX 643 ; N dcaron ; B 84 -15 808 718 ; +C -1 ; WX 722 ; N Umacron ; B 123 -19 797 879 ; +C -1 ; WX 556 ; N uring ; B 94 -15 600 756 ; +C -1 ; WX 333 ; N threesuperior ; B 90 270 436 703 ; +C -1 ; WX 778 ; N Ograve ; B 105 -19 826 929 ; +C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ; +C -1 ; WX 667 ; N Abreve ; B 14 0 685 926 ; +C -1 ; WX 584 ; N multiply ; B 50 0 642 506 ; +C -1 ; WX 556 ; N uacute ; B 94 -15 600 734 ; +C -1 ; WX 611 ; N Tcaron ; B 148 0 750 929 ; +C -1 ; WX 476 ; N partialdiff ; B 41 -38 550 714 ; +C -1 ; WX 500 ; N ydieresis ; B 15 -214 600 706 ; +C -1 ; WX 722 ; N Nacute ; B 76 0 799 929 ; +C -1 ; WX 278 ; N icircumflex ; B 95 0 411 734 ; +C -1 ; WX 667 ; N Ecircumflex ; B 86 0 762 929 ; +C -1 ; WX 556 ; N adieresis ; B 61 -15 559 706 ; +C -1 ; WX 556 ; N edieresis ; B 84 -15 578 706 ; +C -1 ; WX 500 ; N cacute ; B 74 -15 559 734 ; +C -1 ; WX 556 ; N nacute ; B 65 0 587 734 ; +C -1 ; WX 556 ; N umacron ; B 94 -15 600 684 ; +C -1 ; WX 722 ; N Ncaron ; B 76 0 799 929 ; +C -1 ; WX 278 ; N Iacute ; B 91 0 489 929 ; +C -1 ; WX 584 ; N plusminus ; B 39 0 618 506 ; +C -1 ; WX 260 ; N brokenbar ; B 62 -150 316 700 ; +C -1 ; WX 737 ; N registered ; B 54 -19 837 737 ; +C -1 ; WX 778 ; N Gbreve ; B 111 -19 799 926 ; +C -1 ; WX 278 ; N Idotaccent ; B 91 0 377 901 ; +C -1 ; WX 600 ; N summation ; B 15 -10 671 706 ; +C -1 ; WX 667 ; N Egrave ; B 86 0 762 929 ; +C -1 ; WX 333 ; N racute ; B 77 0 475 734 ; +C -1 ; WX 556 ; N omacron ; B 83 -14 585 684 ; +C -1 ; WX 611 ; N Zacute ; B 23 0 741 929 ; +C -1 ; WX 611 ; N Zcaron ; B 23 0 741 929 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 620 674 ; +C -1 ; WX 722 ; N Eth ; B 69 0 764 718 ; +C -1 ; WX 722 ; N Ccedilla ; B 108 -225 782 737 ; +C -1 ; WX 222 ; N lcommaaccent ; B 25 -225 308 718 ; +C -1 ; WX 317 ; N tcaron ; B 102 -7 501 808 ; +C -1 ; WX 556 ; N eogonek ; B 84 -225 578 538 ; +C -1 ; WX 722 ; N Uogonek ; B 123 -225 797 718 ; +C -1 ; WX 667 ; N Aacute ; B 14 0 683 929 ; +C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ; +C -1 ; WX 556 ; N egrave ; B 84 -15 578 734 ; +C -1 ; WX 500 ; N zacute ; B 31 0 571 734 ; +C -1 ; WX 222 ; N iogonek ; B -61 -225 308 718 ; +C -1 ; WX 778 ; N Oacute ; B 105 -19 826 929 ; +C -1 ; WX 556 ; N oacute ; B 83 -14 587 734 ; +C -1 ; WX 556 ; N amacron ; B 61 -15 580 684 ; +C -1 ; WX 500 ; N sacute ; B 63 -15 559 734 ; +C -1 ; WX 278 ; N idieresis ; B 95 0 416 706 ; +C -1 ; WX 778 ; N Ocircumflex ; B 105 -19 826 929 ; +C -1 ; WX 722 ; N Ugrave ; B 123 -19 797 929 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 556 ; N thorn ; B 14 -207 584 718 ; +C -1 ; WX 333 ; N twosuperior ; B 64 281 449 703 ; +C -1 ; WX 778 ; N Odieresis ; B 105 -19 826 901 ; +C -1 ; WX 556 ; N mu ; B 24 -207 600 523 ; +C -1 ; WX 278 ; N igrave ; B 95 0 310 734 ; +C -1 ; WX 556 ; N ohungarumlaut ; B 83 -14 677 734 ; +C -1 ; WX 667 ; N Eogonek ; B 86 -220 762 718 ; +C -1 ; WX 556 ; N dcroat ; B 84 -15 689 718 ; +C -1 ; WX 834 ; N threequarters ; B 130 -19 861 703 ; +C -1 ; WX 667 ; N Scedilla ; B 90 -225 713 737 ; +C -1 ; WX 299 ; N lcaron ; B 67 0 464 718 ; +C -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 808 718 ; +C -1 ; WX 556 ; N Lacute ; B 76 0 555 929 ; +C -1 ; WX 1000 ; N trademark ; B 186 306 1056 718 ; +C -1 ; WX 556 ; N edotaccent ; B 84 -15 578 706 ; +C -1 ; WX 278 ; N Igrave ; B 91 0 351 929 ; +C -1 ; WX 278 ; N Imacron ; B 91 0 483 879 ; +C -1 ; WX 556 ; N Lcaron ; B 76 0 570 718 ; +C -1 ; WX 834 ; N onehalf ; B 114 -19 839 703 ; +C -1 ; WX 549 ; N lessequal ; B 26 0 666 674 ; +C -1 ; WX 556 ; N ocircumflex ; B 83 -14 585 734 ; +C -1 ; WX 556 ; N ntilde ; B 65 0 592 722 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 123 -19 801 929 ; +C -1 ; WX 667 ; N Eacute ; B 86 0 762 929 ; +C -1 ; WX 556 ; N emacron ; B 84 -15 580 684 ; +C -1 ; WX 556 ; N gbreve ; B 42 -220 610 731 ; +C -1 ; WX 834 ; N onequarter ; B 150 -19 802 703 ; +C -1 ; WX 667 ; N Scaron ; B 90 -19 713 929 ; +C -1 ; WX 667 ; N Scommaaccent ; B 90 -225 713 737 ; +C -1 ; WX 778 ; N Ohungarumlaut ; B 105 -19 829 929 ; +C -1 ; WX 400 ; N degree ; B 169 411 468 703 ; +C -1 ; WX 556 ; N ograve ; B 83 -14 585 734 ; +C -1 ; WX 722 ; N Ccaron ; B 108 -19 782 929 ; +C -1 ; WX 556 ; N ugrave ; B 94 -15 600 734 ; +C -1 ; WX 453 ; N radical ; B 79 -80 617 762 ; +C -1 ; WX 722 ; N Dcaron ; B 81 0 764 929 ; +C -1 ; WX 333 ; N rcommaaccent ; B 30 -225 446 538 ; +C -1 ; WX 722 ; N Ntilde ; B 76 0 799 917 ; +C -1 ; WX 556 ; N otilde ; B 83 -14 602 722 ; +C -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 773 718 ; +C -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 555 718 ; +C -1 ; WX 667 ; N Atilde ; B 14 0 699 917 ; +C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ; +C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ; +C -1 ; WX 778 ; N Otilde ; B 105 -19 826 917 ; +C -1 ; WX 500 ; N zdotaccent ; B 31 0 571 706 ; +C -1 ; WX 667 ; N Ecaron ; B 86 0 762 929 ; +C -1 ; WX 278 ; N Iogonek ; B -33 -225 341 718 ; +C -1 ; WX 500 ; N kcommaaccent ; B 67 -225 600 718 ; +C -1 ; WX 584 ; N minus ; B 85 216 606 289 ; +C -1 ; WX 278 ; N Icircumflex ; B 91 0 452 929 ; +C -1 ; WX 556 ; N ncaron ; B 65 0 580 734 ; +C -1 ; WX 278 ; N tcommaaccent ; B 63 -225 368 669 ; +C -1 ; WX 584 ; N logicalnot ; B 106 108 628 390 ; +C -1 ; WX 556 ; N odieresis ; B 83 -14 585 706 ; +C -1 ; WX 556 ; N udieresis ; B 94 -15 600 706 ; +C -1 ; WX 549 ; N notequal ; B 34 -35 623 551 ; +C -1 ; WX 556 ; N gcommaaccent ; B 42 -220 610 822 ; +C -1 ; WX 556 ; N eth ; B 81 -15 617 737 ; +C -1 ; WX 500 ; N zcaron ; B 31 0 571 734 ; +C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 573 538 ; +C -1 ; WX 333 ; N onesuperior ; B 166 281 371 703 ; +C -1 ; WX 278 ; N imacron ; B 95 0 417 684 ; +C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2705 +KPX A C -30 +KPX A Cacute -30 +KPX A Ccaron -30 +KPX A Ccedilla -30 +KPX A G -30 +KPX A Gbreve -30 +KPX A Gcommaaccent -30 +KPX A O -30 +KPX A Oacute -30 +KPX A Ocircumflex -30 +KPX A Odieresis -30 +KPX A Ograve -30 +KPX A Ohungarumlaut -30 +KPX A Omacron -30 +KPX A Oslash -30 +KPX A Otilde -30 +KPX A Q -30 +KPX A T -120 +KPX A Tcaron -120 +KPX A Tcommaaccent -120 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -70 +KPX A W -50 +KPX A Y -100 +KPX A Yacute -100 +KPX A Ydieresis -100 +KPX A u -30 +KPX A uacute -30 +KPX A ucircumflex -30 +KPX A udieresis -30 +KPX A ugrave -30 +KPX A uhungarumlaut -30 +KPX A umacron -30 +KPX A uogonek -30 +KPX A uring -30 +KPX A v -40 +KPX A w -40 +KPX A y -40 +KPX A yacute -40 +KPX A ydieresis -40 +KPX Aacute C -30 +KPX Aacute Cacute -30 +KPX Aacute Ccaron -30 +KPX Aacute Ccedilla -30 +KPX Aacute G -30 +KPX Aacute Gbreve -30 +KPX Aacute Gcommaaccent -30 +KPX Aacute O -30 +KPX Aacute Oacute -30 +KPX Aacute Ocircumflex -30 +KPX Aacute Odieresis -30 +KPX Aacute Ograve -30 +KPX Aacute Ohungarumlaut -30 +KPX Aacute Omacron -30 +KPX Aacute Oslash -30 +KPX Aacute Otilde -30 +KPX Aacute Q -30 +KPX Aacute T -120 +KPX Aacute Tcaron -120 +KPX Aacute Tcommaaccent -120 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -70 +KPX Aacute W -50 +KPX Aacute Y -100 +KPX Aacute Yacute -100 +KPX Aacute Ydieresis -100 +KPX Aacute u -30 +KPX Aacute uacute -30 +KPX Aacute ucircumflex -30 +KPX Aacute udieresis -30 +KPX Aacute ugrave -30 +KPX Aacute uhungarumlaut -30 +KPX Aacute umacron -30 +KPX Aacute uogonek -30 +KPX Aacute uring -30 +KPX Aacute v -40 +KPX Aacute w -40 +KPX Aacute y -40 +KPX Aacute yacute -40 +KPX Aacute ydieresis -40 +KPX Abreve C -30 +KPX Abreve Cacute -30 +KPX Abreve Ccaron -30 +KPX Abreve Ccedilla -30 +KPX Abreve G -30 +KPX Abreve Gbreve -30 +KPX Abreve Gcommaaccent -30 +KPX Abreve O -30 +KPX Abreve Oacute -30 +KPX Abreve Ocircumflex -30 +KPX Abreve Odieresis -30 +KPX Abreve Ograve -30 +KPX Abreve Ohungarumlaut -30 +KPX Abreve Omacron -30 +KPX Abreve Oslash -30 +KPX Abreve Otilde -30 +KPX Abreve Q -30 +KPX Abreve T -120 +KPX Abreve Tcaron -120 +KPX Abreve Tcommaaccent -120 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -70 +KPX Abreve W -50 +KPX Abreve Y -100 +KPX Abreve Yacute -100 +KPX Abreve Ydieresis -100 +KPX Abreve u -30 +KPX Abreve uacute -30 +KPX Abreve ucircumflex -30 +KPX Abreve udieresis -30 +KPX Abreve ugrave -30 +KPX Abreve uhungarumlaut -30 +KPX Abreve umacron -30 +KPX Abreve uogonek -30 +KPX Abreve uring -30 +KPX Abreve v -40 +KPX Abreve w -40 +KPX Abreve y -40 +KPX Abreve yacute -40 +KPX Abreve ydieresis -40 +KPX Acircumflex C -30 +KPX Acircumflex Cacute -30 +KPX Acircumflex Ccaron -30 +KPX Acircumflex Ccedilla -30 +KPX Acircumflex G -30 +KPX Acircumflex Gbreve -30 +KPX Acircumflex Gcommaaccent -30 +KPX Acircumflex O -30 +KPX Acircumflex Oacute -30 +KPX Acircumflex Ocircumflex -30 +KPX Acircumflex Odieresis -30 +KPX Acircumflex Ograve -30 +KPX Acircumflex Ohungarumlaut -30 +KPX Acircumflex Omacron -30 +KPX Acircumflex Oslash -30 +KPX Acircumflex Otilde -30 +KPX Acircumflex Q -30 +KPX Acircumflex T -120 +KPX Acircumflex Tcaron -120 +KPX Acircumflex Tcommaaccent -120 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -70 +KPX Acircumflex W -50 +KPX Acircumflex Y -100 +KPX Acircumflex Yacute -100 +KPX Acircumflex Ydieresis -100 +KPX Acircumflex u -30 +KPX Acircumflex uacute -30 +KPX Acircumflex ucircumflex -30 +KPX Acircumflex udieresis -30 +KPX Acircumflex ugrave -30 +KPX Acircumflex uhungarumlaut -30 +KPX Acircumflex umacron -30 +KPX Acircumflex uogonek -30 +KPX Acircumflex uring -30 +KPX Acircumflex v -40 +KPX Acircumflex w -40 +KPX Acircumflex y -40 +KPX Acircumflex yacute -40 +KPX Acircumflex ydieresis -40 +KPX Adieresis C -30 +KPX Adieresis Cacute -30 +KPX Adieresis Ccaron -30 +KPX Adieresis Ccedilla -30 +KPX Adieresis G -30 +KPX Adieresis Gbreve -30 +KPX Adieresis Gcommaaccent -30 +KPX Adieresis O -30 +KPX Adieresis Oacute -30 +KPX Adieresis Ocircumflex -30 +KPX Adieresis Odieresis -30 +KPX Adieresis Ograve -30 +KPX Adieresis Ohungarumlaut -30 +KPX Adieresis Omacron -30 +KPX Adieresis Oslash -30 +KPX Adieresis Otilde -30 +KPX Adieresis Q -30 +KPX Adieresis T -120 +KPX Adieresis Tcaron -120 +KPX Adieresis Tcommaaccent -120 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -70 +KPX Adieresis W -50 +KPX Adieresis Y -100 +KPX Adieresis Yacute -100 +KPX Adieresis Ydieresis -100 +KPX Adieresis u -30 +KPX Adieresis uacute -30 +KPX Adieresis ucircumflex -30 +KPX Adieresis udieresis -30 +KPX Adieresis ugrave -30 +KPX Adieresis uhungarumlaut -30 +KPX Adieresis umacron -30 +KPX Adieresis uogonek -30 +KPX Adieresis uring -30 +KPX Adieresis v -40 +KPX Adieresis w -40 +KPX Adieresis y -40 +KPX Adieresis yacute -40 +KPX Adieresis ydieresis -40 +KPX Agrave C -30 +KPX Agrave Cacute -30 +KPX Agrave Ccaron -30 +KPX Agrave Ccedilla -30 +KPX Agrave G -30 +KPX Agrave Gbreve -30 +KPX Agrave Gcommaaccent -30 +KPX Agrave O -30 +KPX Agrave Oacute -30 +KPX Agrave Ocircumflex -30 +KPX Agrave Odieresis -30 +KPX Agrave Ograve -30 +KPX Agrave Ohungarumlaut -30 +KPX Agrave Omacron -30 +KPX Agrave Oslash -30 +KPX Agrave Otilde -30 +KPX Agrave Q -30 +KPX Agrave T -120 +KPX Agrave Tcaron -120 +KPX Agrave Tcommaaccent -120 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -70 +KPX Agrave W -50 +KPX Agrave Y -100 +KPX Agrave Yacute -100 +KPX Agrave Ydieresis -100 +KPX Agrave u -30 +KPX Agrave uacute -30 +KPX Agrave ucircumflex -30 +KPX Agrave udieresis -30 +KPX Agrave ugrave -30 +KPX Agrave uhungarumlaut -30 +KPX Agrave umacron -30 +KPX Agrave uogonek -30 +KPX Agrave uring -30 +KPX Agrave v -40 +KPX Agrave w -40 +KPX Agrave y -40 +KPX Agrave yacute -40 +KPX Agrave ydieresis -40 +KPX Amacron C -30 +KPX Amacron Cacute -30 +KPX Amacron Ccaron -30 +KPX Amacron Ccedilla -30 +KPX Amacron G -30 +KPX Amacron Gbreve -30 +KPX Amacron Gcommaaccent -30 +KPX Amacron O -30 +KPX Amacron Oacute -30 +KPX Amacron Ocircumflex -30 +KPX Amacron Odieresis -30 +KPX Amacron Ograve -30 +KPX Amacron Ohungarumlaut -30 +KPX Amacron Omacron -30 +KPX Amacron Oslash -30 +KPX Amacron Otilde -30 +KPX Amacron Q -30 +KPX Amacron T -120 +KPX Amacron Tcaron -120 +KPX Amacron Tcommaaccent -120 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -70 +KPX Amacron W -50 +KPX Amacron Y -100 +KPX Amacron Yacute -100 +KPX Amacron Ydieresis -100 +KPX Amacron u -30 +KPX Amacron uacute -30 +KPX Amacron ucircumflex -30 +KPX Amacron udieresis -30 +KPX Amacron ugrave -30 +KPX Amacron uhungarumlaut -30 +KPX Amacron umacron -30 +KPX Amacron uogonek -30 +KPX Amacron uring -30 +KPX Amacron v -40 +KPX Amacron w -40 +KPX Amacron y -40 +KPX Amacron yacute -40 +KPX Amacron ydieresis -40 +KPX Aogonek C -30 +KPX Aogonek Cacute -30 +KPX Aogonek Ccaron -30 +KPX Aogonek Ccedilla -30 +KPX Aogonek G -30 +KPX Aogonek Gbreve -30 +KPX Aogonek Gcommaaccent -30 +KPX Aogonek O -30 +KPX Aogonek Oacute -30 +KPX Aogonek Ocircumflex -30 +KPX Aogonek Odieresis -30 +KPX Aogonek Ograve -30 +KPX Aogonek Ohungarumlaut -30 +KPX Aogonek Omacron -30 +KPX Aogonek Oslash -30 +KPX Aogonek Otilde -30 +KPX Aogonek Q -30 +KPX Aogonek T -120 +KPX Aogonek Tcaron -120 +KPX Aogonek Tcommaaccent -120 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -70 +KPX Aogonek W -50 +KPX Aogonek Y -100 +KPX Aogonek Yacute -100 +KPX Aogonek Ydieresis -100 +KPX Aogonek u -30 +KPX Aogonek uacute -30 +KPX Aogonek ucircumflex -30 +KPX Aogonek udieresis -30 +KPX Aogonek ugrave -30 +KPX Aogonek uhungarumlaut -30 +KPX Aogonek umacron -30 +KPX Aogonek uogonek -30 +KPX Aogonek uring -30 +KPX Aogonek v -40 +KPX Aogonek w -40 +KPX Aogonek y -40 +KPX Aogonek yacute -40 +KPX Aogonek ydieresis -40 +KPX Aring C -30 +KPX Aring Cacute -30 +KPX Aring Ccaron -30 +KPX Aring Ccedilla -30 +KPX Aring G -30 +KPX Aring Gbreve -30 +KPX Aring Gcommaaccent -30 +KPX Aring O -30 +KPX Aring Oacute -30 +KPX Aring Ocircumflex -30 +KPX Aring Odieresis -30 +KPX Aring Ograve -30 +KPX Aring Ohungarumlaut -30 +KPX Aring Omacron -30 +KPX Aring Oslash -30 +KPX Aring Otilde -30 +KPX Aring Q -30 +KPX Aring T -120 +KPX Aring Tcaron -120 +KPX Aring Tcommaaccent -120 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -70 +KPX Aring W -50 +KPX Aring Y -100 +KPX Aring Yacute -100 +KPX Aring Ydieresis -100 +KPX Aring u -30 +KPX Aring uacute -30 +KPX Aring ucircumflex -30 +KPX Aring udieresis -30 +KPX Aring ugrave -30 +KPX Aring uhungarumlaut -30 +KPX Aring umacron -30 +KPX Aring uogonek -30 +KPX Aring uring -30 +KPX Aring v -40 +KPX Aring w -40 +KPX Aring y -40 +KPX Aring yacute -40 +KPX Aring ydieresis -40 +KPX Atilde C -30 +KPX Atilde Cacute -30 +KPX Atilde Ccaron -30 +KPX Atilde Ccedilla -30 +KPX Atilde G -30 +KPX Atilde Gbreve -30 +KPX Atilde Gcommaaccent -30 +KPX Atilde O -30 +KPX Atilde Oacute -30 +KPX Atilde Ocircumflex -30 +KPX Atilde Odieresis -30 +KPX Atilde Ograve -30 +KPX Atilde Ohungarumlaut -30 +KPX Atilde Omacron -30 +KPX Atilde Oslash -30 +KPX Atilde Otilde -30 +KPX Atilde Q -30 +KPX Atilde T -120 +KPX Atilde Tcaron -120 +KPX Atilde Tcommaaccent -120 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -70 +KPX Atilde W -50 +KPX Atilde Y -100 +KPX Atilde Yacute -100 +KPX Atilde Ydieresis -100 +KPX Atilde u -30 +KPX Atilde uacute -30 +KPX Atilde ucircumflex -30 +KPX Atilde udieresis -30 +KPX Atilde ugrave -30 +KPX Atilde uhungarumlaut -30 +KPX Atilde umacron -30 +KPX Atilde uogonek -30 +KPX Atilde uring -30 +KPX Atilde v -40 +KPX Atilde w -40 +KPX Atilde y -40 +KPX Atilde yacute -40 +KPX Atilde ydieresis -40 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX B comma -20 +KPX B period -20 +KPX C comma -30 +KPX C period -30 +KPX Cacute comma -30 +KPX Cacute period -30 +KPX Ccaron comma -30 +KPX Ccaron period -30 +KPX Ccedilla comma -30 +KPX Ccedilla period -30 +KPX D A -40 +KPX D Aacute -40 +KPX D Abreve -40 +KPX D Acircumflex -40 +KPX D Adieresis -40 +KPX D Agrave -40 +KPX D Amacron -40 +KPX D Aogonek -40 +KPX D Aring -40 +KPX D Atilde -40 +KPX D V -70 +KPX D W -40 +KPX D Y -90 +KPX D Yacute -90 +KPX D Ydieresis -90 +KPX D comma -70 +KPX D period -70 +KPX Dcaron A -40 +KPX Dcaron Aacute -40 +KPX Dcaron Abreve -40 +KPX Dcaron Acircumflex -40 +KPX Dcaron Adieresis -40 +KPX Dcaron Agrave -40 +KPX Dcaron Amacron -40 +KPX Dcaron Aogonek -40 +KPX Dcaron Aring -40 +KPX Dcaron Atilde -40 +KPX Dcaron V -70 +KPX Dcaron W -40 +KPX Dcaron Y -90 +KPX Dcaron Yacute -90 +KPX Dcaron Ydieresis -90 +KPX Dcaron comma -70 +KPX Dcaron period -70 +KPX Dcroat A -40 +KPX Dcroat Aacute -40 +KPX Dcroat Abreve -40 +KPX Dcroat Acircumflex -40 +KPX Dcroat Adieresis -40 +KPX Dcroat Agrave -40 +KPX Dcroat Amacron -40 +KPX Dcroat Aogonek -40 +KPX Dcroat Aring -40 +KPX Dcroat Atilde -40 +KPX Dcroat V -70 +KPX Dcroat W -40 +KPX Dcroat Y -90 +KPX Dcroat Yacute -90 +KPX Dcroat Ydieresis -90 +KPX Dcroat comma -70 +KPX Dcroat period -70 +KPX F A -80 +KPX F Aacute -80 +KPX F Abreve -80 +KPX F Acircumflex -80 +KPX F Adieresis -80 +KPX F Agrave -80 +KPX F Amacron -80 +KPX F Aogonek -80 +KPX F Aring -80 +KPX F Atilde -80 +KPX F a -50 +KPX F aacute -50 +KPX F abreve -50 +KPX F acircumflex -50 +KPX F adieresis -50 +KPX F agrave -50 +KPX F amacron -50 +KPX F aogonek -50 +KPX F aring -50 +KPX F atilde -50 +KPX F comma -150 +KPX F e -30 +KPX F eacute -30 +KPX F ecaron -30 +KPX F ecircumflex -30 +KPX F edieresis -30 +KPX F edotaccent -30 +KPX F egrave -30 +KPX F emacron -30 +KPX F eogonek -30 +KPX F o -30 +KPX F oacute -30 +KPX F ocircumflex -30 +KPX F odieresis -30 +KPX F ograve -30 +KPX F ohungarumlaut -30 +KPX F omacron -30 +KPX F oslash -30 +KPX F otilde -30 +KPX F period -150 +KPX F r -45 +KPX F racute -45 +KPX F rcaron -45 +KPX F rcommaaccent -45 +KPX J A -20 +KPX J Aacute -20 +KPX J Abreve -20 +KPX J Acircumflex -20 +KPX J Adieresis -20 +KPX J Agrave -20 +KPX J Amacron -20 +KPX J Aogonek -20 +KPX J Aring -20 +KPX J Atilde -20 +KPX J a -20 +KPX J aacute -20 +KPX J abreve -20 +KPX J acircumflex -20 +KPX J adieresis -20 +KPX J agrave -20 +KPX J amacron -20 +KPX J aogonek -20 +KPX J aring -20 +KPX J atilde -20 +KPX J comma -30 +KPX J period -30 +KPX J u -20 +KPX J uacute -20 +KPX J ucircumflex -20 +KPX J udieresis -20 +KPX J ugrave -20 +KPX J uhungarumlaut -20 +KPX J umacron -20 +KPX J uogonek -20 +KPX J uring -20 +KPX K O -50 +KPX K Oacute -50 +KPX K Ocircumflex -50 +KPX K Odieresis -50 +KPX K Ograve -50 +KPX K Ohungarumlaut -50 +KPX K Omacron -50 +KPX K Oslash -50 +KPX K Otilde -50 +KPX K e -40 +KPX K eacute -40 +KPX K ecaron -40 +KPX K ecircumflex -40 +KPX K edieresis -40 +KPX K edotaccent -40 +KPX K egrave -40 +KPX K emacron -40 +KPX K eogonek -40 +KPX K o -40 +KPX K oacute -40 +KPX K ocircumflex -40 +KPX K odieresis -40 +KPX K ograve -40 +KPX K ohungarumlaut -40 +KPX K omacron -40 +KPX K oslash -40 +KPX K otilde -40 +KPX K u -30 +KPX K uacute -30 +KPX K ucircumflex -30 +KPX K udieresis -30 +KPX K ugrave -30 +KPX K uhungarumlaut -30 +KPX K umacron -30 +KPX K uogonek -30 +KPX K uring -30 +KPX K y -50 +KPX K yacute -50 +KPX K ydieresis -50 +KPX Kcommaaccent O -50 +KPX Kcommaaccent Oacute -50 +KPX Kcommaaccent Ocircumflex -50 +KPX Kcommaaccent Odieresis -50 +KPX Kcommaaccent Ograve -50 +KPX Kcommaaccent Ohungarumlaut -50 +KPX Kcommaaccent Omacron -50 +KPX Kcommaaccent Oslash -50 +KPX Kcommaaccent Otilde -50 +KPX Kcommaaccent e -40 +KPX Kcommaaccent eacute -40 +KPX Kcommaaccent ecaron -40 +KPX Kcommaaccent ecircumflex -40 +KPX Kcommaaccent edieresis -40 +KPX Kcommaaccent edotaccent -40 +KPX Kcommaaccent egrave -40 +KPX Kcommaaccent emacron -40 +KPX Kcommaaccent eogonek -40 +KPX Kcommaaccent o -40 +KPX Kcommaaccent oacute -40 +KPX Kcommaaccent ocircumflex -40 +KPX Kcommaaccent odieresis -40 +KPX Kcommaaccent ograve -40 +KPX Kcommaaccent ohungarumlaut -40 +KPX Kcommaaccent omacron -40 +KPX Kcommaaccent oslash -40 +KPX Kcommaaccent otilde -40 +KPX Kcommaaccent u -30 +KPX Kcommaaccent uacute -30 +KPX Kcommaaccent ucircumflex -30 +KPX Kcommaaccent udieresis -30 +KPX Kcommaaccent ugrave -30 +KPX Kcommaaccent uhungarumlaut -30 +KPX Kcommaaccent umacron -30 +KPX Kcommaaccent uogonek -30 +KPX Kcommaaccent uring -30 +KPX Kcommaaccent y -50 +KPX Kcommaaccent yacute -50 +KPX Kcommaaccent ydieresis -50 +KPX L T -110 +KPX L Tcaron -110 +KPX L Tcommaaccent -110 +KPX L V -110 +KPX L W -70 +KPX L Y -140 +KPX L Yacute -140 +KPX L Ydieresis -140 +KPX L quotedblright -140 +KPX L quoteright -160 +KPX L y -30 +KPX L yacute -30 +KPX L ydieresis -30 +KPX Lacute T -110 +KPX Lacute Tcaron -110 +KPX Lacute Tcommaaccent -110 +KPX Lacute V -110 +KPX Lacute W -70 +KPX Lacute Y -140 +KPX Lacute Yacute -140 +KPX Lacute Ydieresis -140 +KPX Lacute quotedblright -140 +KPX Lacute quoteright -160 +KPX Lacute y -30 +KPX Lacute yacute -30 +KPX Lacute ydieresis -30 +KPX Lcaron T -110 +KPX Lcaron Tcaron -110 +KPX Lcaron Tcommaaccent -110 +KPX Lcaron V -110 +KPX Lcaron W -70 +KPX Lcaron Y -140 +KPX Lcaron Yacute -140 +KPX Lcaron Ydieresis -140 +KPX Lcaron quotedblright -140 +KPX Lcaron quoteright -160 +KPX Lcaron y -30 +KPX Lcaron yacute -30 +KPX Lcaron ydieresis -30 +KPX Lcommaaccent T -110 +KPX Lcommaaccent Tcaron -110 +KPX Lcommaaccent Tcommaaccent -110 +KPX Lcommaaccent V -110 +KPX Lcommaaccent W -70 +KPX Lcommaaccent Y -140 +KPX Lcommaaccent Yacute -140 +KPX Lcommaaccent Ydieresis -140 +KPX Lcommaaccent quotedblright -140 +KPX Lcommaaccent quoteright -160 +KPX Lcommaaccent y -30 +KPX Lcommaaccent yacute -30 +KPX Lcommaaccent ydieresis -30 +KPX Lslash T -110 +KPX Lslash Tcaron -110 +KPX Lslash Tcommaaccent -110 +KPX Lslash V -110 +KPX Lslash W -70 +KPX Lslash Y -140 +KPX Lslash Yacute -140 +KPX Lslash Ydieresis -140 +KPX Lslash quotedblright -140 +KPX Lslash quoteright -160 +KPX Lslash y -30 +KPX Lslash yacute -30 +KPX Lslash ydieresis -30 +KPX O A -20 +KPX O Aacute -20 +KPX O Abreve -20 +KPX O Acircumflex -20 +KPX O Adieresis -20 +KPX O Agrave -20 +KPX O Amacron -20 +KPX O Aogonek -20 +KPX O Aring -20 +KPX O Atilde -20 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -30 +KPX O X -60 +KPX O Y -70 +KPX O Yacute -70 +KPX O Ydieresis -70 +KPX O comma -40 +KPX O period -40 +KPX Oacute A -20 +KPX Oacute Aacute -20 +KPX Oacute Abreve -20 +KPX Oacute Acircumflex -20 +KPX Oacute Adieresis -20 +KPX Oacute Agrave -20 +KPX Oacute Amacron -20 +KPX Oacute Aogonek -20 +KPX Oacute Aring -20 +KPX Oacute Atilde -20 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -30 +KPX Oacute X -60 +KPX Oacute Y -70 +KPX Oacute Yacute -70 +KPX Oacute Ydieresis -70 +KPX Oacute comma -40 +KPX Oacute period -40 +KPX Ocircumflex A -20 +KPX Ocircumflex Aacute -20 +KPX Ocircumflex Abreve -20 +KPX Ocircumflex Acircumflex -20 +KPX Ocircumflex Adieresis -20 +KPX Ocircumflex Agrave -20 +KPX Ocircumflex Amacron -20 +KPX Ocircumflex Aogonek -20 +KPX Ocircumflex Aring -20 +KPX Ocircumflex Atilde -20 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -30 +KPX Ocircumflex X -60 +KPX Ocircumflex Y -70 +KPX Ocircumflex Yacute -70 +KPX Ocircumflex Ydieresis -70 +KPX Ocircumflex comma -40 +KPX Ocircumflex period -40 +KPX Odieresis A -20 +KPX Odieresis Aacute -20 +KPX Odieresis Abreve -20 +KPX Odieresis Acircumflex -20 +KPX Odieresis Adieresis -20 +KPX Odieresis Agrave -20 +KPX Odieresis Amacron -20 +KPX Odieresis Aogonek -20 +KPX Odieresis Aring -20 +KPX Odieresis Atilde -20 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -30 +KPX Odieresis X -60 +KPX Odieresis Y -70 +KPX Odieresis Yacute -70 +KPX Odieresis Ydieresis -70 +KPX Odieresis comma -40 +KPX Odieresis period -40 +KPX Ograve A -20 +KPX Ograve Aacute -20 +KPX Ograve Abreve -20 +KPX Ograve Acircumflex -20 +KPX Ograve Adieresis -20 +KPX Ograve Agrave -20 +KPX Ograve Amacron -20 +KPX Ograve Aogonek -20 +KPX Ograve Aring -20 +KPX Ograve Atilde -20 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -30 +KPX Ograve X -60 +KPX Ograve Y -70 +KPX Ograve Yacute -70 +KPX Ograve Ydieresis -70 +KPX Ograve comma -40 +KPX Ograve period -40 +KPX Ohungarumlaut A -20 +KPX Ohungarumlaut Aacute -20 +KPX Ohungarumlaut Abreve -20 +KPX Ohungarumlaut Acircumflex -20 +KPX Ohungarumlaut Adieresis -20 +KPX Ohungarumlaut Agrave -20 +KPX Ohungarumlaut Amacron -20 +KPX Ohungarumlaut Aogonek -20 +KPX Ohungarumlaut Aring -20 +KPX Ohungarumlaut Atilde -20 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -30 +KPX Ohungarumlaut X -60 +KPX Ohungarumlaut Y -70 +KPX Ohungarumlaut Yacute -70 +KPX Ohungarumlaut Ydieresis -70 +KPX Ohungarumlaut comma -40 +KPX Ohungarumlaut period -40 +KPX Omacron A -20 +KPX Omacron Aacute -20 +KPX Omacron Abreve -20 +KPX Omacron Acircumflex -20 +KPX Omacron Adieresis -20 +KPX Omacron Agrave -20 +KPX Omacron Amacron -20 +KPX Omacron Aogonek -20 +KPX Omacron Aring -20 +KPX Omacron Atilde -20 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -30 +KPX Omacron X -60 +KPX Omacron Y -70 +KPX Omacron Yacute -70 +KPX Omacron Ydieresis -70 +KPX Omacron comma -40 +KPX Omacron period -40 +KPX Oslash A -20 +KPX Oslash Aacute -20 +KPX Oslash Abreve -20 +KPX Oslash Acircumflex -20 +KPX Oslash Adieresis -20 +KPX Oslash Agrave -20 +KPX Oslash Amacron -20 +KPX Oslash Aogonek -20 +KPX Oslash Aring -20 +KPX Oslash Atilde -20 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -30 +KPX Oslash X -60 +KPX Oslash Y -70 +KPX Oslash Yacute -70 +KPX Oslash Ydieresis -70 +KPX Oslash comma -40 +KPX Oslash period -40 +KPX Otilde A -20 +KPX Otilde Aacute -20 +KPX Otilde Abreve -20 +KPX Otilde Acircumflex -20 +KPX Otilde Adieresis -20 +KPX Otilde Agrave -20 +KPX Otilde Amacron -20 +KPX Otilde Aogonek -20 +KPX Otilde Aring -20 +KPX Otilde Atilde -20 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -30 +KPX Otilde X -60 +KPX Otilde Y -70 +KPX Otilde Yacute -70 +KPX Otilde Ydieresis -70 +KPX Otilde comma -40 +KPX Otilde period -40 +KPX P A -120 +KPX P Aacute -120 +KPX P Abreve -120 +KPX P Acircumflex -120 +KPX P Adieresis -120 +KPX P Agrave -120 +KPX P Amacron -120 +KPX P Aogonek -120 +KPX P Aring -120 +KPX P Atilde -120 +KPX P a -40 +KPX P aacute -40 +KPX P abreve -40 +KPX P acircumflex -40 +KPX P adieresis -40 +KPX P agrave -40 +KPX P amacron -40 +KPX P aogonek -40 +KPX P aring -40 +KPX P atilde -40 +KPX P comma -180 +KPX P e -50 +KPX P eacute -50 +KPX P ecaron -50 +KPX P ecircumflex -50 +KPX P edieresis -50 +KPX P edotaccent -50 +KPX P egrave -50 +KPX P emacron -50 +KPX P eogonek -50 +KPX P o -50 +KPX P oacute -50 +KPX P ocircumflex -50 +KPX P odieresis -50 +KPX P ograve -50 +KPX P ohungarumlaut -50 +KPX P omacron -50 +KPX P oslash -50 +KPX P otilde -50 +KPX P period -180 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX R O -20 +KPX R Oacute -20 +KPX R Ocircumflex -20 +KPX R Odieresis -20 +KPX R Ograve -20 +KPX R Ohungarumlaut -20 +KPX R Omacron -20 +KPX R Oslash -20 +KPX R Otilde -20 +KPX R T -30 +KPX R Tcaron -30 +KPX R Tcommaaccent -30 +KPX R U -40 +KPX R Uacute -40 +KPX R Ucircumflex -40 +KPX R Udieresis -40 +KPX R Ugrave -40 +KPX R Uhungarumlaut -40 +KPX R Umacron -40 +KPX R Uogonek -40 +KPX R Uring -40 +KPX R V -50 +KPX R W -30 +KPX R Y -50 +KPX R Yacute -50 +KPX R Ydieresis -50 +KPX Racute O -20 +KPX Racute Oacute -20 +KPX Racute Ocircumflex -20 +KPX Racute Odieresis -20 +KPX Racute Ograve -20 +KPX Racute Ohungarumlaut -20 +KPX Racute Omacron -20 +KPX Racute Oslash -20 +KPX Racute Otilde -20 +KPX Racute T -30 +KPX Racute Tcaron -30 +KPX Racute Tcommaaccent -30 +KPX Racute U -40 +KPX Racute Uacute -40 +KPX Racute Ucircumflex -40 +KPX Racute Udieresis -40 +KPX Racute Ugrave -40 +KPX Racute Uhungarumlaut -40 +KPX Racute Umacron -40 +KPX Racute Uogonek -40 +KPX Racute Uring -40 +KPX Racute V -50 +KPX Racute W -30 +KPX Racute Y -50 +KPX Racute Yacute -50 +KPX Racute Ydieresis -50 +KPX Rcaron O -20 +KPX Rcaron Oacute -20 +KPX Rcaron Ocircumflex -20 +KPX Rcaron Odieresis -20 +KPX Rcaron Ograve -20 +KPX Rcaron Ohungarumlaut -20 +KPX Rcaron Omacron -20 +KPX Rcaron Oslash -20 +KPX Rcaron Otilde -20 +KPX Rcaron T -30 +KPX Rcaron Tcaron -30 +KPX Rcaron Tcommaaccent -30 +KPX Rcaron U -40 +KPX Rcaron Uacute -40 +KPX Rcaron Ucircumflex -40 +KPX Rcaron Udieresis -40 +KPX Rcaron Ugrave -40 +KPX Rcaron Uhungarumlaut -40 +KPX Rcaron Umacron -40 +KPX Rcaron Uogonek -40 +KPX Rcaron Uring -40 +KPX Rcaron V -50 +KPX Rcaron W -30 +KPX Rcaron Y -50 +KPX Rcaron Yacute -50 +KPX Rcaron Ydieresis -50 +KPX Rcommaaccent O -20 +KPX Rcommaaccent Oacute -20 +KPX Rcommaaccent Ocircumflex -20 +KPX Rcommaaccent Odieresis -20 +KPX Rcommaaccent Ograve -20 +KPX Rcommaaccent Ohungarumlaut -20 +KPX Rcommaaccent Omacron -20 +KPX Rcommaaccent Oslash -20 +KPX Rcommaaccent Otilde -20 +KPX Rcommaaccent T -30 +KPX Rcommaaccent Tcaron -30 +KPX Rcommaaccent Tcommaaccent -30 +KPX Rcommaaccent U -40 +KPX Rcommaaccent Uacute -40 +KPX Rcommaaccent Ucircumflex -40 +KPX Rcommaaccent Udieresis -40 +KPX Rcommaaccent Ugrave -40 +KPX Rcommaaccent Uhungarumlaut -40 +KPX Rcommaaccent Umacron -40 +KPX Rcommaaccent Uogonek -40 +KPX Rcommaaccent Uring -40 +KPX Rcommaaccent V -50 +KPX Rcommaaccent W -30 +KPX Rcommaaccent Y -50 +KPX Rcommaaccent Yacute -50 +KPX Rcommaaccent Ydieresis -50 +KPX S comma -20 +KPX S period -20 +KPX Sacute comma -20 +KPX Sacute period -20 +KPX Scaron comma -20 +KPX Scaron period -20 +KPX Scedilla comma -20 +KPX Scedilla period -20 +KPX Scommaaccent comma -20 +KPX Scommaaccent period -20 +KPX T A -120 +KPX T Aacute -120 +KPX T Abreve -120 +KPX T Acircumflex -120 +KPX T Adieresis -120 +KPX T Agrave -120 +KPX T Amacron -120 +KPX T Aogonek -120 +KPX T Aring -120 +KPX T Atilde -120 +KPX T O -40 +KPX T Oacute -40 +KPX T Ocircumflex -40 +KPX T Odieresis -40 +KPX T Ograve -40 +KPX T Ohungarumlaut -40 +KPX T Omacron -40 +KPX T Oslash -40 +KPX T Otilde -40 +KPX T a -120 +KPX T aacute -120 +KPX T abreve -60 +KPX T acircumflex -120 +KPX T adieresis -120 +KPX T agrave -120 +KPX T amacron -60 +KPX T aogonek -120 +KPX T aring -120 +KPX T atilde -60 +KPX T colon -20 +KPX T comma -120 +KPX T e -120 +KPX T eacute -120 +KPX T ecaron -120 +KPX T ecircumflex -120 +KPX T edieresis -120 +KPX T edotaccent -120 +KPX T egrave -60 +KPX T emacron -60 +KPX T eogonek -120 +KPX T hyphen -140 +KPX T o -120 +KPX T oacute -120 +KPX T ocircumflex -120 +KPX T odieresis -120 +KPX T ograve -120 +KPX T ohungarumlaut -120 +KPX T omacron -60 +KPX T oslash -120 +KPX T otilde -60 +KPX T period -120 +KPX T r -120 +KPX T racute -120 +KPX T rcaron -120 +KPX T rcommaaccent -120 +KPX T semicolon -20 +KPX T u -120 +KPX T uacute -120 +KPX T ucircumflex -120 +KPX T udieresis -120 +KPX T ugrave -120 +KPX T uhungarumlaut -120 +KPX T umacron -60 +KPX T uogonek -120 +KPX T uring -120 +KPX T w -120 +KPX T y -120 +KPX T yacute -120 +KPX T ydieresis -60 +KPX Tcaron A -120 +KPX Tcaron Aacute -120 +KPX Tcaron Abreve -120 +KPX Tcaron Acircumflex -120 +KPX Tcaron Adieresis -120 +KPX Tcaron Agrave -120 +KPX Tcaron Amacron -120 +KPX Tcaron Aogonek -120 +KPX Tcaron Aring -120 +KPX Tcaron Atilde -120 +KPX Tcaron O -40 +KPX Tcaron Oacute -40 +KPX Tcaron Ocircumflex -40 +KPX Tcaron Odieresis -40 +KPX Tcaron Ograve -40 +KPX Tcaron Ohungarumlaut -40 +KPX Tcaron Omacron -40 +KPX Tcaron Oslash -40 +KPX Tcaron Otilde -40 +KPX Tcaron a -120 +KPX Tcaron aacute -120 +KPX Tcaron abreve -60 +KPX Tcaron acircumflex -120 +KPX Tcaron adieresis -120 +KPX Tcaron agrave -120 +KPX Tcaron amacron -60 +KPX Tcaron aogonek -120 +KPX Tcaron aring -120 +KPX Tcaron atilde -60 +KPX Tcaron colon -20 +KPX Tcaron comma -120 +KPX Tcaron e -120 +KPX Tcaron eacute -120 +KPX Tcaron ecaron -120 +KPX Tcaron ecircumflex -120 +KPX Tcaron edieresis -120 +KPX Tcaron edotaccent -120 +KPX Tcaron egrave -60 +KPX Tcaron emacron -60 +KPX Tcaron eogonek -120 +KPX Tcaron hyphen -140 +KPX Tcaron o -120 +KPX Tcaron oacute -120 +KPX Tcaron ocircumflex -120 +KPX Tcaron odieresis -120 +KPX Tcaron ograve -120 +KPX Tcaron ohungarumlaut -120 +KPX Tcaron omacron -60 +KPX Tcaron oslash -120 +KPX Tcaron otilde -60 +KPX Tcaron period -120 +KPX Tcaron r -120 +KPX Tcaron racute -120 +KPX Tcaron rcaron -120 +KPX Tcaron rcommaaccent -120 +KPX Tcaron semicolon -20 +KPX Tcaron u -120 +KPX Tcaron uacute -120 +KPX Tcaron ucircumflex -120 +KPX Tcaron udieresis -120 +KPX Tcaron ugrave -120 +KPX Tcaron uhungarumlaut -120 +KPX Tcaron umacron -60 +KPX Tcaron uogonek -120 +KPX Tcaron uring -120 +KPX Tcaron w -120 +KPX Tcaron y -120 +KPX Tcaron yacute -120 +KPX Tcaron ydieresis -60 +KPX Tcommaaccent A -120 +KPX Tcommaaccent Aacute -120 +KPX Tcommaaccent Abreve -120 +KPX Tcommaaccent Acircumflex -120 +KPX Tcommaaccent Adieresis -120 +KPX Tcommaaccent Agrave -120 +KPX Tcommaaccent Amacron -120 +KPX Tcommaaccent Aogonek -120 +KPX Tcommaaccent Aring -120 +KPX Tcommaaccent Atilde -120 +KPX Tcommaaccent O -40 +KPX Tcommaaccent Oacute -40 +KPX Tcommaaccent Ocircumflex -40 +KPX Tcommaaccent Odieresis -40 +KPX Tcommaaccent Ograve -40 +KPX Tcommaaccent Ohungarumlaut -40 +KPX Tcommaaccent Omacron -40 +KPX Tcommaaccent Oslash -40 +KPX Tcommaaccent Otilde -40 +KPX Tcommaaccent a -120 +KPX Tcommaaccent aacute -120 +KPX Tcommaaccent abreve -60 +KPX Tcommaaccent acircumflex -120 +KPX Tcommaaccent adieresis -120 +KPX Tcommaaccent agrave -120 +KPX Tcommaaccent amacron -60 +KPX Tcommaaccent aogonek -120 +KPX Tcommaaccent aring -120 +KPX Tcommaaccent atilde -60 +KPX Tcommaaccent colon -20 +KPX Tcommaaccent comma -120 +KPX Tcommaaccent e -120 +KPX Tcommaaccent eacute -120 +KPX Tcommaaccent ecaron -120 +KPX Tcommaaccent ecircumflex -120 +KPX Tcommaaccent edieresis -120 +KPX Tcommaaccent edotaccent -120 +KPX Tcommaaccent egrave -60 +KPX Tcommaaccent emacron -60 +KPX Tcommaaccent eogonek -120 +KPX Tcommaaccent hyphen -140 +KPX Tcommaaccent o -120 +KPX Tcommaaccent oacute -120 +KPX Tcommaaccent ocircumflex -120 +KPX Tcommaaccent odieresis -120 +KPX Tcommaaccent ograve -120 +KPX Tcommaaccent ohungarumlaut -120 +KPX Tcommaaccent omacron -60 +KPX Tcommaaccent oslash -120 +KPX Tcommaaccent otilde -60 +KPX Tcommaaccent period -120 +KPX Tcommaaccent r -120 +KPX Tcommaaccent racute -120 +KPX Tcommaaccent rcaron -120 +KPX Tcommaaccent rcommaaccent -120 +KPX Tcommaaccent semicolon -20 +KPX Tcommaaccent u -120 +KPX Tcommaaccent uacute -120 +KPX Tcommaaccent ucircumflex -120 +KPX Tcommaaccent udieresis -120 +KPX Tcommaaccent ugrave -120 +KPX Tcommaaccent uhungarumlaut -120 +KPX Tcommaaccent umacron -60 +KPX Tcommaaccent uogonek -120 +KPX Tcommaaccent uring -120 +KPX Tcommaaccent w -120 +KPX Tcommaaccent y -120 +KPX Tcommaaccent yacute -120 +KPX Tcommaaccent ydieresis -60 +KPX U A -40 +KPX U Aacute -40 +KPX U Abreve -40 +KPX U Acircumflex -40 +KPX U Adieresis -40 +KPX U Agrave -40 +KPX U Amacron -40 +KPX U Aogonek -40 +KPX U Aring -40 +KPX U Atilde -40 +KPX U comma -40 +KPX U period -40 +KPX Uacute A -40 +KPX Uacute Aacute -40 +KPX Uacute Abreve -40 +KPX Uacute Acircumflex -40 +KPX Uacute Adieresis -40 +KPX Uacute Agrave -40 +KPX Uacute Amacron -40 +KPX Uacute Aogonek -40 +KPX Uacute Aring -40 +KPX Uacute Atilde -40 +KPX Uacute comma -40 +KPX Uacute period -40 +KPX Ucircumflex A -40 +KPX Ucircumflex Aacute -40 +KPX Ucircumflex Abreve -40 +KPX Ucircumflex Acircumflex -40 +KPX Ucircumflex Adieresis -40 +KPX Ucircumflex Agrave -40 +KPX Ucircumflex Amacron -40 +KPX Ucircumflex Aogonek -40 +KPX Ucircumflex Aring -40 +KPX Ucircumflex Atilde -40 +KPX Ucircumflex comma -40 +KPX Ucircumflex period -40 +KPX Udieresis A -40 +KPX Udieresis Aacute -40 +KPX Udieresis Abreve -40 +KPX Udieresis Acircumflex -40 +KPX Udieresis Adieresis -40 +KPX Udieresis Agrave -40 +KPX Udieresis Amacron -40 +KPX Udieresis Aogonek -40 +KPX Udieresis Aring -40 +KPX Udieresis Atilde -40 +KPX Udieresis comma -40 +KPX Udieresis period -40 +KPX Ugrave A -40 +KPX Ugrave Aacute -40 +KPX Ugrave Abreve -40 +KPX Ugrave Acircumflex -40 +KPX Ugrave Adieresis -40 +KPX Ugrave Agrave -40 +KPX Ugrave Amacron -40 +KPX Ugrave Aogonek -40 +KPX Ugrave Aring -40 +KPX Ugrave Atilde -40 +KPX Ugrave comma -40 +KPX Ugrave period -40 +KPX Uhungarumlaut A -40 +KPX Uhungarumlaut Aacute -40 +KPX Uhungarumlaut Abreve -40 +KPX Uhungarumlaut Acircumflex -40 +KPX Uhungarumlaut Adieresis -40 +KPX Uhungarumlaut Agrave -40 +KPX Uhungarumlaut Amacron -40 +KPX Uhungarumlaut Aogonek -40 +KPX Uhungarumlaut Aring -40 +KPX Uhungarumlaut Atilde -40 +KPX Uhungarumlaut comma -40 +KPX Uhungarumlaut period -40 +KPX Umacron A -40 +KPX Umacron Aacute -40 +KPX Umacron Abreve -40 +KPX Umacron Acircumflex -40 +KPX Umacron Adieresis -40 +KPX Umacron Agrave -40 +KPX Umacron Amacron -40 +KPX Umacron Aogonek -40 +KPX Umacron Aring -40 +KPX Umacron Atilde -40 +KPX Umacron comma -40 +KPX Umacron period -40 +KPX Uogonek A -40 +KPX Uogonek Aacute -40 +KPX Uogonek Abreve -40 +KPX Uogonek Acircumflex -40 +KPX Uogonek Adieresis -40 +KPX Uogonek Agrave -40 +KPX Uogonek Amacron -40 +KPX Uogonek Aogonek -40 +KPX Uogonek Aring -40 +KPX Uogonek Atilde -40 +KPX Uogonek comma -40 +KPX Uogonek period -40 +KPX Uring A -40 +KPX Uring Aacute -40 +KPX Uring Abreve -40 +KPX Uring Acircumflex -40 +KPX Uring Adieresis -40 +KPX Uring Agrave -40 +KPX Uring Amacron -40 +KPX Uring Aogonek -40 +KPX Uring Aring -40 +KPX Uring Atilde -40 +KPX Uring comma -40 +KPX Uring period -40 +KPX V A -80 +KPX V Aacute -80 +KPX V Abreve -80 +KPX V Acircumflex -80 +KPX V Adieresis -80 +KPX V Agrave -80 +KPX V Amacron -80 +KPX V Aogonek -80 +KPX V Aring -80 +KPX V Atilde -80 +KPX V G -40 +KPX V Gbreve -40 +KPX V Gcommaaccent -40 +KPX V O -40 +KPX V Oacute -40 +KPX V Ocircumflex -40 +KPX V Odieresis -40 +KPX V Ograve -40 +KPX V Ohungarumlaut -40 +KPX V Omacron -40 +KPX V Oslash -40 +KPX V Otilde -40 +KPX V a -70 +KPX V aacute -70 +KPX V abreve -70 +KPX V acircumflex -70 +KPX V adieresis -70 +KPX V agrave -70 +KPX V amacron -70 +KPX V aogonek -70 +KPX V aring -70 +KPX V atilde -70 +KPX V colon -40 +KPX V comma -125 +KPX V e -80 +KPX V eacute -80 +KPX V ecaron -80 +KPX V ecircumflex -80 +KPX V edieresis -80 +KPX V edotaccent -80 +KPX V egrave -80 +KPX V emacron -80 +KPX V eogonek -80 +KPX V hyphen -80 +KPX V o -80 +KPX V oacute -80 +KPX V ocircumflex -80 +KPX V odieresis -80 +KPX V ograve -80 +KPX V ohungarumlaut -80 +KPX V omacron -80 +KPX V oslash -80 +KPX V otilde -80 +KPX V period -125 +KPX V semicolon -40 +KPX V u -70 +KPX V uacute -70 +KPX V ucircumflex -70 +KPX V udieresis -70 +KPX V ugrave -70 +KPX V uhungarumlaut -70 +KPX V umacron -70 +KPX V uogonek -70 +KPX V uring -70 +KPX W A -50 +KPX W Aacute -50 +KPX W Abreve -50 +KPX W Acircumflex -50 +KPX W Adieresis -50 +KPX W Agrave -50 +KPX W Amacron -50 +KPX W Aogonek -50 +KPX W Aring -50 +KPX W Atilde -50 +KPX W O -20 +KPX W Oacute -20 +KPX W Ocircumflex -20 +KPX W Odieresis -20 +KPX W Ograve -20 +KPX W Ohungarumlaut -20 +KPX W Omacron -20 +KPX W Oslash -20 +KPX W Otilde -20 +KPX W a -40 +KPX W aacute -40 +KPX W abreve -40 +KPX W acircumflex -40 +KPX W adieresis -40 +KPX W agrave -40 +KPX W amacron -40 +KPX W aogonek -40 +KPX W aring -40 +KPX W atilde -40 +KPX W comma -80 +KPX W e -30 +KPX W eacute -30 +KPX W ecaron -30 +KPX W ecircumflex -30 +KPX W edieresis -30 +KPX W edotaccent -30 +KPX W egrave -30 +KPX W emacron -30 +KPX W eogonek -30 +KPX W hyphen -40 +KPX W o -30 +KPX W oacute -30 +KPX W ocircumflex -30 +KPX W odieresis -30 +KPX W ograve -30 +KPX W ohungarumlaut -30 +KPX W omacron -30 +KPX W oslash -30 +KPX W otilde -30 +KPX W period -80 +KPX W u -30 +KPX W uacute -30 +KPX W ucircumflex -30 +KPX W udieresis -30 +KPX W ugrave -30 +KPX W uhungarumlaut -30 +KPX W umacron -30 +KPX W uogonek -30 +KPX W uring -30 +KPX W y -20 +KPX W yacute -20 +KPX W ydieresis -20 +KPX Y A -110 +KPX Y Aacute -110 +KPX Y Abreve -110 +KPX Y Acircumflex -110 +KPX Y Adieresis -110 +KPX Y Agrave -110 +KPX Y Amacron -110 +KPX Y Aogonek -110 +KPX Y Aring -110 +KPX Y Atilde -110 +KPX Y O -85 +KPX Y Oacute -85 +KPX Y Ocircumflex -85 +KPX Y Odieresis -85 +KPX Y Ograve -85 +KPX Y Ohungarumlaut -85 +KPX Y Omacron -85 +KPX Y Oslash -85 +KPX Y Otilde -85 +KPX Y a -140 +KPX Y aacute -140 +KPX Y abreve -70 +KPX Y acircumflex -140 +KPX Y adieresis -140 +KPX Y agrave -140 +KPX Y amacron -70 +KPX Y aogonek -140 +KPX Y aring -140 +KPX Y atilde -140 +KPX Y colon -60 +KPX Y comma -140 +KPX Y e -140 +KPX Y eacute -140 +KPX Y ecaron -140 +KPX Y ecircumflex -140 +KPX Y edieresis -140 +KPX Y edotaccent -140 +KPX Y egrave -140 +KPX Y emacron -70 +KPX Y eogonek -140 +KPX Y hyphen -140 +KPX Y i -20 +KPX Y iacute -20 +KPX Y iogonek -20 +KPX Y o -140 +KPX Y oacute -140 +KPX Y ocircumflex -140 +KPX Y odieresis -140 +KPX Y ograve -140 +KPX Y ohungarumlaut -140 +KPX Y omacron -140 +KPX Y oslash -140 +KPX Y otilde -140 +KPX Y period -140 +KPX Y semicolon -60 +KPX Y u -110 +KPX Y uacute -110 +KPX Y ucircumflex -110 +KPX Y udieresis -110 +KPX Y ugrave -110 +KPX Y uhungarumlaut -110 +KPX Y umacron -110 +KPX Y uogonek -110 +KPX Y uring -110 +KPX Yacute A -110 +KPX Yacute Aacute -110 +KPX Yacute Abreve -110 +KPX Yacute Acircumflex -110 +KPX Yacute Adieresis -110 +KPX Yacute Agrave -110 +KPX Yacute Amacron -110 +KPX Yacute Aogonek -110 +KPX Yacute Aring -110 +KPX Yacute Atilde -110 +KPX Yacute O -85 +KPX Yacute Oacute -85 +KPX Yacute Ocircumflex -85 +KPX Yacute Odieresis -85 +KPX Yacute Ograve -85 +KPX Yacute Ohungarumlaut -85 +KPX Yacute Omacron -85 +KPX Yacute Oslash -85 +KPX Yacute Otilde -85 +KPX Yacute a -140 +KPX Yacute aacute -140 +KPX Yacute abreve -70 +KPX Yacute acircumflex -140 +KPX Yacute adieresis -140 +KPX Yacute agrave -140 +KPX Yacute amacron -70 +KPX Yacute aogonek -140 +KPX Yacute aring -140 +KPX Yacute atilde -70 +KPX Yacute colon -60 +KPX Yacute comma -140 +KPX Yacute e -140 +KPX Yacute eacute -140 +KPX Yacute ecaron -140 +KPX Yacute ecircumflex -140 +KPX Yacute edieresis -140 +KPX Yacute edotaccent -140 +KPX Yacute egrave -140 +KPX Yacute emacron -70 +KPX Yacute eogonek -140 +KPX Yacute hyphen -140 +KPX Yacute i -20 +KPX Yacute iacute -20 +KPX Yacute iogonek -20 +KPX Yacute o -140 +KPX Yacute oacute -140 +KPX Yacute ocircumflex -140 +KPX Yacute odieresis -140 +KPX Yacute ograve -140 +KPX Yacute ohungarumlaut -140 +KPX Yacute omacron -70 +KPX Yacute oslash -140 +KPX Yacute otilde -140 +KPX Yacute period -140 +KPX Yacute semicolon -60 +KPX Yacute u -110 +KPX Yacute uacute -110 +KPX Yacute ucircumflex -110 +KPX Yacute udieresis -110 +KPX Yacute ugrave -110 +KPX Yacute uhungarumlaut -110 +KPX Yacute umacron -110 +KPX Yacute uogonek -110 +KPX Yacute uring -110 +KPX Ydieresis A -110 +KPX Ydieresis Aacute -110 +KPX Ydieresis Abreve -110 +KPX Ydieresis Acircumflex -110 +KPX Ydieresis Adieresis -110 +KPX Ydieresis Agrave -110 +KPX Ydieresis Amacron -110 +KPX Ydieresis Aogonek -110 +KPX Ydieresis Aring -110 +KPX Ydieresis Atilde -110 +KPX Ydieresis O -85 +KPX Ydieresis Oacute -85 +KPX Ydieresis Ocircumflex -85 +KPX Ydieresis Odieresis -85 +KPX Ydieresis Ograve -85 +KPX Ydieresis Ohungarumlaut -85 +KPX Ydieresis Omacron -85 +KPX Ydieresis Oslash -85 +KPX Ydieresis Otilde -85 +KPX Ydieresis a -140 +KPX Ydieresis aacute -140 +KPX Ydieresis abreve -70 +KPX Ydieresis acircumflex -140 +KPX Ydieresis adieresis -140 +KPX Ydieresis agrave -140 +KPX Ydieresis amacron -70 +KPX Ydieresis aogonek -140 +KPX Ydieresis aring -140 +KPX Ydieresis atilde -70 +KPX Ydieresis colon -60 +KPX Ydieresis comma -140 +KPX Ydieresis e -140 +KPX Ydieresis eacute -140 +KPX Ydieresis ecaron -140 +KPX Ydieresis ecircumflex -140 +KPX Ydieresis edieresis -140 +KPX Ydieresis edotaccent -140 +KPX Ydieresis egrave -140 +KPX Ydieresis emacron -70 +KPX Ydieresis eogonek -140 +KPX Ydieresis hyphen -140 +KPX Ydieresis i -20 +KPX Ydieresis iacute -20 +KPX Ydieresis iogonek -20 +KPX Ydieresis o -140 +KPX Ydieresis oacute -140 +KPX Ydieresis ocircumflex -140 +KPX Ydieresis odieresis -140 +KPX Ydieresis ograve -140 +KPX Ydieresis ohungarumlaut -140 +KPX Ydieresis omacron -140 +KPX Ydieresis oslash -140 +KPX Ydieresis otilde -140 +KPX Ydieresis period -140 +KPX Ydieresis semicolon -60 +KPX Ydieresis u -110 +KPX Ydieresis uacute -110 +KPX Ydieresis ucircumflex -110 +KPX Ydieresis udieresis -110 +KPX Ydieresis ugrave -110 +KPX Ydieresis uhungarumlaut -110 +KPX Ydieresis umacron -110 +KPX Ydieresis uogonek -110 +KPX Ydieresis uring -110 +KPX a v -20 +KPX a w -20 +KPX a y -30 +KPX a yacute -30 +KPX a ydieresis -30 +KPX aacute v -20 +KPX aacute w -20 +KPX aacute y -30 +KPX aacute yacute -30 +KPX aacute ydieresis -30 +KPX abreve v -20 +KPX abreve w -20 +KPX abreve y -30 +KPX abreve yacute -30 +KPX abreve ydieresis -30 +KPX acircumflex v -20 +KPX acircumflex w -20 +KPX acircumflex y -30 +KPX acircumflex yacute -30 +KPX acircumflex ydieresis -30 +KPX adieresis v -20 +KPX adieresis w -20 +KPX adieresis y -30 +KPX adieresis yacute -30 +KPX adieresis ydieresis -30 +KPX agrave v -20 +KPX agrave w -20 +KPX agrave y -30 +KPX agrave yacute -30 +KPX agrave ydieresis -30 +KPX amacron v -20 +KPX amacron w -20 +KPX amacron y -30 +KPX amacron yacute -30 +KPX amacron ydieresis -30 +KPX aogonek v -20 +KPX aogonek w -20 +KPX aogonek y -30 +KPX aogonek yacute -30 +KPX aogonek ydieresis -30 +KPX aring v -20 +KPX aring w -20 +KPX aring y -30 +KPX aring yacute -30 +KPX aring ydieresis -30 +KPX atilde v -20 +KPX atilde w -20 +KPX atilde y -30 +KPX atilde yacute -30 +KPX atilde ydieresis -30 +KPX b b -10 +KPX b comma -40 +KPX b l -20 +KPX b lacute -20 +KPX b lcommaaccent -20 +KPX b lslash -20 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -20 +KPX b y -20 +KPX b yacute -20 +KPX b ydieresis -20 +KPX c comma -15 +KPX c k -20 +KPX c kcommaaccent -20 +KPX cacute comma -15 +KPX cacute k -20 +KPX cacute kcommaaccent -20 +KPX ccaron comma -15 +KPX ccaron k -20 +KPX ccaron kcommaaccent -20 +KPX ccedilla comma -15 +KPX ccedilla k -20 +KPX ccedilla kcommaaccent -20 +KPX colon space -50 +KPX comma quotedblright -100 +KPX comma quoteright -100 +KPX e comma -15 +KPX e period -15 +KPX e v -30 +KPX e w -20 +KPX e x -30 +KPX e y -20 +KPX e yacute -20 +KPX e ydieresis -20 +KPX eacute comma -15 +KPX eacute period -15 +KPX eacute v -30 +KPX eacute w -20 +KPX eacute x -30 +KPX eacute y -20 +KPX eacute yacute -20 +KPX eacute ydieresis -20 +KPX ecaron comma -15 +KPX ecaron period -15 +KPX ecaron v -30 +KPX ecaron w -20 +KPX ecaron x -30 +KPX ecaron y -20 +KPX ecaron yacute -20 +KPX ecaron ydieresis -20 +KPX ecircumflex comma -15 +KPX ecircumflex period -15 +KPX ecircumflex v -30 +KPX ecircumflex w -20 +KPX ecircumflex x -30 +KPX ecircumflex y -20 +KPX ecircumflex yacute -20 +KPX ecircumflex ydieresis -20 +KPX edieresis comma -15 +KPX edieresis period -15 +KPX edieresis v -30 +KPX edieresis w -20 +KPX edieresis x -30 +KPX edieresis y -20 +KPX edieresis yacute -20 +KPX edieresis ydieresis -20 +KPX edotaccent comma -15 +KPX edotaccent period -15 +KPX edotaccent v -30 +KPX edotaccent w -20 +KPX edotaccent x -30 +KPX edotaccent y -20 +KPX edotaccent yacute -20 +KPX edotaccent ydieresis -20 +KPX egrave comma -15 +KPX egrave period -15 +KPX egrave v -30 +KPX egrave w -20 +KPX egrave x -30 +KPX egrave y -20 +KPX egrave yacute -20 +KPX egrave ydieresis -20 +KPX emacron comma -15 +KPX emacron period -15 +KPX emacron v -30 +KPX emacron w -20 +KPX emacron x -30 +KPX emacron y -20 +KPX emacron yacute -20 +KPX emacron ydieresis -20 +KPX eogonek comma -15 +KPX eogonek period -15 +KPX eogonek v -30 +KPX eogonek w -20 +KPX eogonek x -30 +KPX eogonek y -20 +KPX eogonek yacute -20 +KPX eogonek ydieresis -20 +KPX f a -30 +KPX f aacute -30 +KPX f abreve -30 +KPX f acircumflex -30 +KPX f adieresis -30 +KPX f agrave -30 +KPX f amacron -30 +KPX f aogonek -30 +KPX f aring -30 +KPX f atilde -30 +KPX f comma -30 +KPX f dotlessi -28 +KPX f e -30 +KPX f eacute -30 +KPX f ecaron -30 +KPX f ecircumflex -30 +KPX f edieresis -30 +KPX f edotaccent -30 +KPX f egrave -30 +KPX f emacron -30 +KPX f eogonek -30 +KPX f o -30 +KPX f oacute -30 +KPX f ocircumflex -30 +KPX f odieresis -30 +KPX f ograve -30 +KPX f ohungarumlaut -30 +KPX f omacron -30 +KPX f oslash -30 +KPX f otilde -30 +KPX f period -30 +KPX f quotedblright 60 +KPX f quoteright 50 +KPX g r -10 +KPX g racute -10 +KPX g rcaron -10 +KPX g rcommaaccent -10 +KPX gbreve r -10 +KPX gbreve racute -10 +KPX gbreve rcaron -10 +KPX gbreve rcommaaccent -10 +KPX gcommaaccent r -10 +KPX gcommaaccent racute -10 +KPX gcommaaccent rcaron -10 +KPX gcommaaccent rcommaaccent -10 +KPX h y -30 +KPX h yacute -30 +KPX h ydieresis -30 +KPX k e -20 +KPX k eacute -20 +KPX k ecaron -20 +KPX k ecircumflex -20 +KPX k edieresis -20 +KPX k edotaccent -20 +KPX k egrave -20 +KPX k emacron -20 +KPX k eogonek -20 +KPX k o -20 +KPX k oacute -20 +KPX k ocircumflex -20 +KPX k odieresis -20 +KPX k ograve -20 +KPX k ohungarumlaut -20 +KPX k omacron -20 +KPX k oslash -20 +KPX k otilde -20 +KPX kcommaaccent e -20 +KPX kcommaaccent eacute -20 +KPX kcommaaccent ecaron -20 +KPX kcommaaccent ecircumflex -20 +KPX kcommaaccent edieresis -20 +KPX kcommaaccent edotaccent -20 +KPX kcommaaccent egrave -20 +KPX kcommaaccent emacron -20 +KPX kcommaaccent eogonek -20 +KPX kcommaaccent o -20 +KPX kcommaaccent oacute -20 +KPX kcommaaccent ocircumflex -20 +KPX kcommaaccent odieresis -20 +KPX kcommaaccent ograve -20 +KPX kcommaaccent ohungarumlaut -20 +KPX kcommaaccent omacron -20 +KPX kcommaaccent oslash -20 +KPX kcommaaccent otilde -20 +KPX m u -10 +KPX m uacute -10 +KPX m ucircumflex -10 +KPX m udieresis -10 +KPX m ugrave -10 +KPX m uhungarumlaut -10 +KPX m umacron -10 +KPX m uogonek -10 +KPX m uring -10 +KPX m y -15 +KPX m yacute -15 +KPX m ydieresis -15 +KPX n u -10 +KPX n uacute -10 +KPX n ucircumflex -10 +KPX n udieresis -10 +KPX n ugrave -10 +KPX n uhungarumlaut -10 +KPX n umacron -10 +KPX n uogonek -10 +KPX n uring -10 +KPX n v -20 +KPX n y -15 +KPX n yacute -15 +KPX n ydieresis -15 +KPX nacute u -10 +KPX nacute uacute -10 +KPX nacute ucircumflex -10 +KPX nacute udieresis -10 +KPX nacute ugrave -10 +KPX nacute uhungarumlaut -10 +KPX nacute umacron -10 +KPX nacute uogonek -10 +KPX nacute uring -10 +KPX nacute v -20 +KPX nacute y -15 +KPX nacute yacute -15 +KPX nacute ydieresis -15 +KPX ncaron u -10 +KPX ncaron uacute -10 +KPX ncaron ucircumflex -10 +KPX ncaron udieresis -10 +KPX ncaron ugrave -10 +KPX ncaron uhungarumlaut -10 +KPX ncaron umacron -10 +KPX ncaron uogonek -10 +KPX ncaron uring -10 +KPX ncaron v -20 +KPX ncaron y -15 +KPX ncaron yacute -15 +KPX ncaron ydieresis -15 +KPX ncommaaccent u -10 +KPX ncommaaccent uacute -10 +KPX ncommaaccent ucircumflex -10 +KPX ncommaaccent udieresis -10 +KPX ncommaaccent ugrave -10 +KPX ncommaaccent uhungarumlaut -10 +KPX ncommaaccent umacron -10 +KPX ncommaaccent uogonek -10 +KPX ncommaaccent uring -10 +KPX ncommaaccent v -20 +KPX ncommaaccent y -15 +KPX ncommaaccent yacute -15 +KPX ncommaaccent ydieresis -15 +KPX ntilde u -10 +KPX ntilde uacute -10 +KPX ntilde ucircumflex -10 +KPX ntilde udieresis -10 +KPX ntilde ugrave -10 +KPX ntilde uhungarumlaut -10 +KPX ntilde umacron -10 +KPX ntilde uogonek -10 +KPX ntilde uring -10 +KPX ntilde v -20 +KPX ntilde y -15 +KPX ntilde yacute -15 +KPX ntilde ydieresis -15 +KPX o comma -40 +KPX o period -40 +KPX o v -15 +KPX o w -15 +KPX o x -30 +KPX o y -30 +KPX o yacute -30 +KPX o ydieresis -30 +KPX oacute comma -40 +KPX oacute period -40 +KPX oacute v -15 +KPX oacute w -15 +KPX oacute x -30 +KPX oacute y -30 +KPX oacute yacute -30 +KPX oacute ydieresis -30 +KPX ocircumflex comma -40 +KPX ocircumflex period -40 +KPX ocircumflex v -15 +KPX ocircumflex w -15 +KPX ocircumflex x -30 +KPX ocircumflex y -30 +KPX ocircumflex yacute -30 +KPX ocircumflex ydieresis -30 +KPX odieresis comma -40 +KPX odieresis period -40 +KPX odieresis v -15 +KPX odieresis w -15 +KPX odieresis x -30 +KPX odieresis y -30 +KPX odieresis yacute -30 +KPX odieresis ydieresis -30 +KPX ograve comma -40 +KPX ograve period -40 +KPX ograve v -15 +KPX ograve w -15 +KPX ograve x -30 +KPX ograve y -30 +KPX ograve yacute -30 +KPX ograve ydieresis -30 +KPX ohungarumlaut comma -40 +KPX ohungarumlaut period -40 +KPX ohungarumlaut v -15 +KPX ohungarumlaut w -15 +KPX ohungarumlaut x -30 +KPX ohungarumlaut y -30 +KPX ohungarumlaut yacute -30 +KPX ohungarumlaut ydieresis -30 +KPX omacron comma -40 +KPX omacron period -40 +KPX omacron v -15 +KPX omacron w -15 +KPX omacron x -30 +KPX omacron y -30 +KPX omacron yacute -30 +KPX omacron ydieresis -30 +KPX oslash a -55 +KPX oslash aacute -55 +KPX oslash abreve -55 +KPX oslash acircumflex -55 +KPX oslash adieresis -55 +KPX oslash agrave -55 +KPX oslash amacron -55 +KPX oslash aogonek -55 +KPX oslash aring -55 +KPX oslash atilde -55 +KPX oslash b -55 +KPX oslash c -55 +KPX oslash cacute -55 +KPX oslash ccaron -55 +KPX oslash ccedilla -55 +KPX oslash comma -95 +KPX oslash d -55 +KPX oslash dcroat -55 +KPX oslash e -55 +KPX oslash eacute -55 +KPX oslash ecaron -55 +KPX oslash ecircumflex -55 +KPX oslash edieresis -55 +KPX oslash edotaccent -55 +KPX oslash egrave -55 +KPX oslash emacron -55 +KPX oslash eogonek -55 +KPX oslash f -55 +KPX oslash g -55 +KPX oslash gbreve -55 +KPX oslash gcommaaccent -55 +KPX oslash h -55 +KPX oslash i -55 +KPX oslash iacute -55 +KPX oslash icircumflex -55 +KPX oslash idieresis -55 +KPX oslash igrave -55 +KPX oslash imacron -55 +KPX oslash iogonek -55 +KPX oslash j -55 +KPX oslash k -55 +KPX oslash kcommaaccent -55 +KPX oslash l -55 +KPX oslash lacute -55 +KPX oslash lcommaaccent -55 +KPX oslash lslash -55 +KPX oslash m -55 +KPX oslash n -55 +KPX oslash nacute -55 +KPX oslash ncaron -55 +KPX oslash ncommaaccent -55 +KPX oslash ntilde -55 +KPX oslash o -55 +KPX oslash oacute -55 +KPX oslash ocircumflex -55 +KPX oslash odieresis -55 +KPX oslash ograve -55 +KPX oslash ohungarumlaut -55 +KPX oslash omacron -55 +KPX oslash oslash -55 +KPX oslash otilde -55 +KPX oslash p -55 +KPX oslash period -95 +KPX oslash q -55 +KPX oslash r -55 +KPX oslash racute -55 +KPX oslash rcaron -55 +KPX oslash rcommaaccent -55 +KPX oslash s -55 +KPX oslash sacute -55 +KPX oslash scaron -55 +KPX oslash scedilla -55 +KPX oslash scommaaccent -55 +KPX oslash t -55 +KPX oslash tcommaaccent -55 +KPX oslash u -55 +KPX oslash uacute -55 +KPX oslash ucircumflex -55 +KPX oslash udieresis -55 +KPX oslash ugrave -55 +KPX oslash uhungarumlaut -55 +KPX oslash umacron -55 +KPX oslash uogonek -55 +KPX oslash uring -55 +KPX oslash v -70 +KPX oslash w -70 +KPX oslash x -85 +KPX oslash y -70 +KPX oslash yacute -70 +KPX oslash ydieresis -70 +KPX oslash z -55 +KPX oslash zacute -55 +KPX oslash zcaron -55 +KPX oslash zdotaccent -55 +KPX otilde comma -40 +KPX otilde period -40 +KPX otilde v -15 +KPX otilde w -15 +KPX otilde x -30 +KPX otilde y -30 +KPX otilde yacute -30 +KPX otilde ydieresis -30 +KPX p comma -35 +KPX p period -35 +KPX p y -30 +KPX p yacute -30 +KPX p ydieresis -30 +KPX period quotedblright -100 +KPX period quoteright -100 +KPX period space -60 +KPX quotedblright space -40 +KPX quoteleft quoteleft -57 +KPX quoteright d -50 +KPX quoteright dcroat -50 +KPX quoteright quoteright -57 +KPX quoteright r -50 +KPX quoteright racute -50 +KPX quoteright rcaron -50 +KPX quoteright rcommaaccent -50 +KPX quoteright s -50 +KPX quoteright sacute -50 +KPX quoteright scaron -50 +KPX quoteright scedilla -50 +KPX quoteright scommaaccent -50 +KPX quoteright space -70 +KPX r a -10 +KPX r aacute -10 +KPX r abreve -10 +KPX r acircumflex -10 +KPX r adieresis -10 +KPX r agrave -10 +KPX r amacron -10 +KPX r aogonek -10 +KPX r aring -10 +KPX r atilde -10 +KPX r colon 30 +KPX r comma -50 +KPX r i 15 +KPX r iacute 15 +KPX r icircumflex 15 +KPX r idieresis 15 +KPX r igrave 15 +KPX r imacron 15 +KPX r iogonek 15 +KPX r k 15 +KPX r kcommaaccent 15 +KPX r l 15 +KPX r lacute 15 +KPX r lcommaaccent 15 +KPX r lslash 15 +KPX r m 25 +KPX r n 25 +KPX r nacute 25 +KPX r ncaron 25 +KPX r ncommaaccent 25 +KPX r ntilde 25 +KPX r p 30 +KPX r period -50 +KPX r semicolon 30 +KPX r t 40 +KPX r tcommaaccent 40 +KPX r u 15 +KPX r uacute 15 +KPX r ucircumflex 15 +KPX r udieresis 15 +KPX r ugrave 15 +KPX r uhungarumlaut 15 +KPX r umacron 15 +KPX r uogonek 15 +KPX r uring 15 +KPX r v 30 +KPX r y 30 +KPX r yacute 30 +KPX r ydieresis 30 +KPX racute a -10 +KPX racute aacute -10 +KPX racute abreve -10 +KPX racute acircumflex -10 +KPX racute adieresis -10 +KPX racute agrave -10 +KPX racute amacron -10 +KPX racute aogonek -10 +KPX racute aring -10 +KPX racute atilde -10 +KPX racute colon 30 +KPX racute comma -50 +KPX racute i 15 +KPX racute iacute 15 +KPX racute icircumflex 15 +KPX racute idieresis 15 +KPX racute igrave 15 +KPX racute imacron 15 +KPX racute iogonek 15 +KPX racute k 15 +KPX racute kcommaaccent 15 +KPX racute l 15 +KPX racute lacute 15 +KPX racute lcommaaccent 15 +KPX racute lslash 15 +KPX racute m 25 +KPX racute n 25 +KPX racute nacute 25 +KPX racute ncaron 25 +KPX racute ncommaaccent 25 +KPX racute ntilde 25 +KPX racute p 30 +KPX racute period -50 +KPX racute semicolon 30 +KPX racute t 40 +KPX racute tcommaaccent 40 +KPX racute u 15 +KPX racute uacute 15 +KPX racute ucircumflex 15 +KPX racute udieresis 15 +KPX racute ugrave 15 +KPX racute uhungarumlaut 15 +KPX racute umacron 15 +KPX racute uogonek 15 +KPX racute uring 15 +KPX racute v 30 +KPX racute y 30 +KPX racute yacute 30 +KPX racute ydieresis 30 +KPX rcaron a -10 +KPX rcaron aacute -10 +KPX rcaron abreve -10 +KPX rcaron acircumflex -10 +KPX rcaron adieresis -10 +KPX rcaron agrave -10 +KPX rcaron amacron -10 +KPX rcaron aogonek -10 +KPX rcaron aring -10 +KPX rcaron atilde -10 +KPX rcaron colon 30 +KPX rcaron comma -50 +KPX rcaron i 15 +KPX rcaron iacute 15 +KPX rcaron icircumflex 15 +KPX rcaron idieresis 15 +KPX rcaron igrave 15 +KPX rcaron imacron 15 +KPX rcaron iogonek 15 +KPX rcaron k 15 +KPX rcaron kcommaaccent 15 +KPX rcaron l 15 +KPX rcaron lacute 15 +KPX rcaron lcommaaccent 15 +KPX rcaron lslash 15 +KPX rcaron m 25 +KPX rcaron n 25 +KPX rcaron nacute 25 +KPX rcaron ncaron 25 +KPX rcaron ncommaaccent 25 +KPX rcaron ntilde 25 +KPX rcaron p 30 +KPX rcaron period -50 +KPX rcaron semicolon 30 +KPX rcaron t 40 +KPX rcaron tcommaaccent 40 +KPX rcaron u 15 +KPX rcaron uacute 15 +KPX rcaron ucircumflex 15 +KPX rcaron udieresis 15 +KPX rcaron ugrave 15 +KPX rcaron uhungarumlaut 15 +KPX rcaron umacron 15 +KPX rcaron uogonek 15 +KPX rcaron uring 15 +KPX rcaron v 30 +KPX rcaron y 30 +KPX rcaron yacute 30 +KPX rcaron ydieresis 30 +KPX rcommaaccent a -10 +KPX rcommaaccent aacute -10 +KPX rcommaaccent abreve -10 +KPX rcommaaccent acircumflex -10 +KPX rcommaaccent adieresis -10 +KPX rcommaaccent agrave -10 +KPX rcommaaccent amacron -10 +KPX rcommaaccent aogonek -10 +KPX rcommaaccent aring -10 +KPX rcommaaccent atilde -10 +KPX rcommaaccent colon 30 +KPX rcommaaccent comma -50 +KPX rcommaaccent i 15 +KPX rcommaaccent iacute 15 +KPX rcommaaccent icircumflex 15 +KPX rcommaaccent idieresis 15 +KPX rcommaaccent igrave 15 +KPX rcommaaccent imacron 15 +KPX rcommaaccent iogonek 15 +KPX rcommaaccent k 15 +KPX rcommaaccent kcommaaccent 15 +KPX rcommaaccent l 15 +KPX rcommaaccent lacute 15 +KPX rcommaaccent lcommaaccent 15 +KPX rcommaaccent lslash 15 +KPX rcommaaccent m 25 +KPX rcommaaccent n 25 +KPX rcommaaccent nacute 25 +KPX rcommaaccent ncaron 25 +KPX rcommaaccent ncommaaccent 25 +KPX rcommaaccent ntilde 25 +KPX rcommaaccent p 30 +KPX rcommaaccent period -50 +KPX rcommaaccent semicolon 30 +KPX rcommaaccent t 40 +KPX rcommaaccent tcommaaccent 40 +KPX rcommaaccent u 15 +KPX rcommaaccent uacute 15 +KPX rcommaaccent ucircumflex 15 +KPX rcommaaccent udieresis 15 +KPX rcommaaccent ugrave 15 +KPX rcommaaccent uhungarumlaut 15 +KPX rcommaaccent umacron 15 +KPX rcommaaccent uogonek 15 +KPX rcommaaccent uring 15 +KPX rcommaaccent v 30 +KPX rcommaaccent y 30 +KPX rcommaaccent yacute 30 +KPX rcommaaccent ydieresis 30 +KPX s comma -15 +KPX s period -15 +KPX s w -30 +KPX sacute comma -15 +KPX sacute period -15 +KPX sacute w -30 +KPX scaron comma -15 +KPX scaron period -15 +KPX scaron w -30 +KPX scedilla comma -15 +KPX scedilla period -15 +KPX scedilla w -30 +KPX scommaaccent comma -15 +KPX scommaaccent period -15 +KPX scommaaccent w -30 +KPX semicolon space -50 +KPX space T -50 +KPX space Tcaron -50 +KPX space Tcommaaccent -50 +KPX space V -50 +KPX space W -40 +KPX space Y -90 +KPX space Yacute -90 +KPX space Ydieresis -90 +KPX space quotedblleft -30 +KPX space quoteleft -60 +KPX v a -25 +KPX v aacute -25 +KPX v abreve -25 +KPX v acircumflex -25 +KPX v adieresis -25 +KPX v agrave -25 +KPX v amacron -25 +KPX v aogonek -25 +KPX v aring -25 +KPX v atilde -25 +KPX v comma -80 +KPX v e -25 +KPX v eacute -25 +KPX v ecaron -25 +KPX v ecircumflex -25 +KPX v edieresis -25 +KPX v edotaccent -25 +KPX v egrave -25 +KPX v emacron -25 +KPX v eogonek -25 +KPX v o -25 +KPX v oacute -25 +KPX v ocircumflex -25 +KPX v odieresis -25 +KPX v ograve -25 +KPX v ohungarumlaut -25 +KPX v omacron -25 +KPX v oslash -25 +KPX v otilde -25 +KPX v period -80 +KPX w a -15 +KPX w aacute -15 +KPX w abreve -15 +KPX w acircumflex -15 +KPX w adieresis -15 +KPX w agrave -15 +KPX w amacron -15 +KPX w aogonek -15 +KPX w aring -15 +KPX w atilde -15 +KPX w comma -60 +KPX w e -10 +KPX w eacute -10 +KPX w ecaron -10 +KPX w ecircumflex -10 +KPX w edieresis -10 +KPX w edotaccent -10 +KPX w egrave -10 +KPX w emacron -10 +KPX w eogonek -10 +KPX w o -10 +KPX w oacute -10 +KPX w ocircumflex -10 +KPX w odieresis -10 +KPX w ograve -10 +KPX w ohungarumlaut -10 +KPX w omacron -10 +KPX w oslash -10 +KPX w otilde -10 +KPX w period -60 +KPX x e -30 +KPX x eacute -30 +KPX x ecaron -30 +KPX x ecircumflex -30 +KPX x edieresis -30 +KPX x edotaccent -30 +KPX x egrave -30 +KPX x emacron -30 +KPX x eogonek -30 +KPX y a -20 +KPX y aacute -20 +KPX y abreve -20 +KPX y acircumflex -20 +KPX y adieresis -20 +KPX y agrave -20 +KPX y amacron -20 +KPX y aogonek -20 +KPX y aring -20 +KPX y atilde -20 +KPX y comma -100 +KPX y e -20 +KPX y eacute -20 +KPX y ecaron -20 +KPX y ecircumflex -20 +KPX y edieresis -20 +KPX y edotaccent -20 +KPX y egrave -20 +KPX y emacron -20 +KPX y eogonek -20 +KPX y o -20 +KPX y oacute -20 +KPX y ocircumflex -20 +KPX y odieresis -20 +KPX y ograve -20 +KPX y ohungarumlaut -20 +KPX y omacron -20 +KPX y oslash -20 +KPX y otilde -20 +KPX y period -100 +KPX yacute a -20 +KPX yacute aacute -20 +KPX yacute abreve -20 +KPX yacute acircumflex -20 +KPX yacute adieresis -20 +KPX yacute agrave -20 +KPX yacute amacron -20 +KPX yacute aogonek -20 +KPX yacute aring -20 +KPX yacute atilde -20 +KPX yacute comma -100 +KPX yacute e -20 +KPX yacute eacute -20 +KPX yacute ecaron -20 +KPX yacute ecircumflex -20 +KPX yacute edieresis -20 +KPX yacute edotaccent -20 +KPX yacute egrave -20 +KPX yacute emacron -20 +KPX yacute eogonek -20 +KPX yacute o -20 +KPX yacute oacute -20 +KPX yacute ocircumflex -20 +KPX yacute odieresis -20 +KPX yacute ograve -20 +KPX yacute ohungarumlaut -20 +KPX yacute omacron -20 +KPX yacute oslash -20 +KPX yacute otilde -20 +KPX yacute period -100 +KPX ydieresis a -20 +KPX ydieresis aacute -20 +KPX ydieresis abreve -20 +KPX ydieresis acircumflex -20 +KPX ydieresis adieresis -20 +KPX ydieresis agrave -20 +KPX ydieresis amacron -20 +KPX ydieresis aogonek -20 +KPX ydieresis aring -20 +KPX ydieresis atilde -20 +KPX ydieresis comma -100 +KPX ydieresis e -20 +KPX ydieresis eacute -20 +KPX ydieresis ecaron -20 +KPX ydieresis ecircumflex -20 +KPX ydieresis edieresis -20 +KPX ydieresis edotaccent -20 +KPX ydieresis egrave -20 +KPX ydieresis emacron -20 +KPX ydieresis eogonek -20 +KPX ydieresis o -20 +KPX ydieresis oacute -20 +KPX ydieresis ocircumflex -20 +KPX ydieresis odieresis -20 +KPX ydieresis ograve -20 +KPX ydieresis ohungarumlaut -20 +KPX ydieresis omacron -20 +KPX ydieresis oslash -20 +KPX ydieresis otilde -20 +KPX ydieresis period -100 +KPX z e -15 +KPX z eacute -15 +KPX z ecaron -15 +KPX z ecircumflex -15 +KPX z edieresis -15 +KPX z edotaccent -15 +KPX z egrave -15 +KPX z emacron -15 +KPX z eogonek -15 +KPX z o -15 +KPX z oacute -15 +KPX z ocircumflex -15 +KPX z odieresis -15 +KPX z ograve -15 +KPX z ohungarumlaut -15 +KPX z omacron -15 +KPX z oslash -15 +KPX z otilde -15 +KPX zacute e -15 +KPX zacute eacute -15 +KPX zacute ecaron -15 +KPX zacute ecircumflex -15 +KPX zacute edieresis -15 +KPX zacute edotaccent -15 +KPX zacute egrave -15 +KPX zacute emacron -15 +KPX zacute eogonek -15 +KPX zacute o -15 +KPX zacute oacute -15 +KPX zacute ocircumflex -15 +KPX zacute odieresis -15 +KPX zacute ograve -15 +KPX zacute ohungarumlaut -15 +KPX zacute omacron -15 +KPX zacute oslash -15 +KPX zacute otilde -15 +KPX zcaron e -15 +KPX zcaron eacute -15 +KPX zcaron ecaron -15 +KPX zcaron ecircumflex -15 +KPX zcaron edieresis -15 +KPX zcaron edotaccent -15 +KPX zcaron egrave -15 +KPX zcaron emacron -15 +KPX zcaron eogonek -15 +KPX zcaron o -15 +KPX zcaron oacute -15 +KPX zcaron ocircumflex -15 +KPX zcaron odieresis -15 +KPX zcaron ograve -15 +KPX zcaron ohungarumlaut -15 +KPX zcaron omacron -15 +KPX zcaron oslash -15 +KPX zcaron otilde -15 +KPX zdotaccent e -15 +KPX zdotaccent eacute -15 +KPX zdotaccent ecaron -15 +KPX zdotaccent ecircumflex -15 +KPX zdotaccent edieresis -15 +KPX zdotaccent edotaccent -15 +KPX zdotaccent egrave -15 +KPX zdotaccent emacron -15 +KPX zdotaccent eogonek -15 +KPX zdotaccent o -15 +KPX zdotaccent oacute -15 +KPX zdotaccent ocircumflex -15 +KPX zdotaccent odieresis -15 +KPX zdotaccent ograve -15 +KPX zdotaccent ohungarumlaut -15 +KPX zdotaccent omacron -15 +KPX zdotaccent oslash -15 +KPX zdotaccent otilde -15 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica.afm new file mode 100644 index 000000000..bd32af54d --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Helvetica.afm @@ -0,0 +1,3051 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:38:23 1997 +Comment UniqueID 43054 +Comment VMusage 37069 48094 +FontName Helvetica +FullName Helvetica +FamilyName Helvetica +Weight Medium +ItalicAngle 0 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -166 -225 1000 931 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 718 +XHeight 523 +Ascender 718 +Descender -207 +StdHW 76 +StdVW 88 +StartCharMetrics 315 +C 32 ; WX 278 ; N space ; B 0 0 0 0 ; +C 33 ; WX 278 ; N exclam ; B 90 0 187 718 ; +C 34 ; WX 355 ; N quotedbl ; B 70 463 285 718 ; +C 35 ; WX 556 ; N numbersign ; B 28 0 529 688 ; +C 36 ; WX 556 ; N dollar ; B 32 -115 520 775 ; +C 37 ; WX 889 ; N percent ; B 39 -19 850 703 ; +C 38 ; WX 667 ; N ampersand ; B 44 -15 645 718 ; +C 39 ; WX 222 ; N quoteright ; B 53 463 157 718 ; +C 40 ; WX 333 ; N parenleft ; B 68 -207 299 733 ; +C 41 ; WX 333 ; N parenright ; B 34 -207 265 733 ; +C 42 ; WX 389 ; N asterisk ; B 39 431 349 718 ; +C 43 ; WX 584 ; N plus ; B 39 0 545 505 ; +C 44 ; WX 278 ; N comma ; B 87 -147 191 106 ; +C 45 ; WX 333 ; N hyphen ; B 44 232 289 322 ; +C 46 ; WX 278 ; N period ; B 87 0 191 106 ; +C 47 ; WX 278 ; N slash ; B -17 -19 295 737 ; +C 48 ; WX 556 ; N zero ; B 37 -19 519 703 ; +C 49 ; WX 556 ; N one ; B 101 0 359 703 ; +C 50 ; WX 556 ; N two ; B 26 0 507 703 ; +C 51 ; WX 556 ; N three ; B 34 -19 522 703 ; +C 52 ; WX 556 ; N four ; B 25 0 523 703 ; +C 53 ; WX 556 ; N five ; B 32 -19 514 688 ; +C 54 ; WX 556 ; N six ; B 38 -19 518 703 ; +C 55 ; WX 556 ; N seven ; B 37 0 523 688 ; +C 56 ; WX 556 ; N eight ; B 38 -19 517 703 ; +C 57 ; WX 556 ; N nine ; B 42 -19 514 703 ; +C 58 ; WX 278 ; N colon ; B 87 0 191 516 ; +C 59 ; WX 278 ; N semicolon ; B 87 -147 191 516 ; +C 60 ; WX 584 ; N less ; B 48 11 536 495 ; +C 61 ; WX 584 ; N equal ; B 39 115 545 390 ; +C 62 ; WX 584 ; N greater ; B 48 11 536 495 ; +C 63 ; WX 556 ; N question ; B 56 0 492 727 ; +C 64 ; WX 1015 ; N at ; B 147 -19 868 737 ; +C 65 ; WX 667 ; N A ; B 14 0 654 718 ; +C 66 ; WX 667 ; N B ; B 74 0 627 718 ; +C 67 ; WX 722 ; N C ; B 44 -19 681 737 ; +C 68 ; WX 722 ; N D ; B 81 0 674 718 ; +C 69 ; WX 667 ; N E ; B 86 0 616 718 ; +C 70 ; WX 611 ; N F ; B 86 0 583 718 ; +C 71 ; WX 778 ; N G ; B 48 -19 704 737 ; +C 72 ; WX 722 ; N H ; B 77 0 646 718 ; +C 73 ; WX 278 ; N I ; B 91 0 188 718 ; +C 74 ; WX 500 ; N J ; B 17 -19 428 718 ; +C 75 ; WX 667 ; N K ; B 76 0 663 718 ; +C 76 ; WX 556 ; N L ; B 76 0 537 718 ; +C 77 ; WX 833 ; N M ; B 73 0 761 718 ; +C 78 ; WX 722 ; N N ; B 76 0 646 718 ; +C 79 ; WX 778 ; N O ; B 39 -19 739 737 ; +C 80 ; WX 667 ; N P ; B 86 0 622 718 ; +C 81 ; WX 778 ; N Q ; B 39 -56 739 737 ; +C 82 ; WX 722 ; N R ; B 88 0 684 718 ; +C 83 ; WX 667 ; N S ; B 49 -19 620 737 ; +C 84 ; WX 611 ; N T ; B 14 0 597 718 ; +C 85 ; WX 722 ; N U ; B 79 -19 644 718 ; +C 86 ; WX 667 ; N V ; B 20 0 647 718 ; +C 87 ; WX 944 ; N W ; B 16 0 928 718 ; +C 88 ; WX 667 ; N X ; B 19 0 648 718 ; +C 89 ; WX 667 ; N Y ; B 14 0 653 718 ; +C 90 ; WX 611 ; N Z ; B 23 0 588 718 ; +C 91 ; WX 278 ; N bracketleft ; B 63 -196 250 722 ; +C 92 ; WX 278 ; N backslash ; B -17 -19 295 737 ; +C 93 ; WX 278 ; N bracketright ; B 28 -196 215 722 ; +C 94 ; WX 469 ; N asciicircum ; B -14 264 483 688 ; +C 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ; +C 96 ; WX 222 ; N quoteleft ; B 65 470 169 725 ; +C 97 ; WX 556 ; N a ; B 36 -15 530 538 ; +C 98 ; WX 556 ; N b ; B 58 -15 517 718 ; +C 99 ; WX 500 ; N c ; B 30 -15 477 538 ; +C 100 ; WX 556 ; N d ; B 35 -15 499 718 ; +C 101 ; WX 556 ; N e ; B 40 -15 516 538 ; +C 102 ; WX 278 ; N f ; B 14 0 262 728 ; L i fi ; L l fl ; +C 103 ; WX 556 ; N g ; B 40 -220 499 538 ; +C 104 ; WX 556 ; N h ; B 65 0 491 718 ; +C 105 ; WX 222 ; N i ; B 67 0 155 718 ; +C 106 ; WX 222 ; N j ; B -16 -210 155 718 ; +C 107 ; WX 500 ; N k ; B 67 0 501 718 ; +C 108 ; WX 222 ; N l ; B 67 0 155 718 ; +C 109 ; WX 833 ; N m ; B 65 0 769 538 ; +C 110 ; WX 556 ; N n ; B 65 0 491 538 ; +C 111 ; WX 556 ; N o ; B 35 -14 521 538 ; +C 112 ; WX 556 ; N p ; B 58 -207 517 538 ; +C 113 ; WX 556 ; N q ; B 35 -207 494 538 ; +C 114 ; WX 333 ; N r ; B 77 0 332 538 ; +C 115 ; WX 500 ; N s ; B 32 -15 464 538 ; +C 116 ; WX 278 ; N t ; B 14 -7 257 669 ; +C 117 ; WX 556 ; N u ; B 68 -15 489 523 ; +C 118 ; WX 500 ; N v ; B 8 0 492 523 ; +C 119 ; WX 722 ; N w ; B 14 0 709 523 ; +C 120 ; WX 500 ; N x ; B 11 0 490 523 ; +C 121 ; WX 500 ; N y ; B 11 -214 489 523 ; +C 122 ; WX 500 ; N z ; B 31 0 469 523 ; +C 123 ; WX 334 ; N braceleft ; B 42 -196 292 722 ; +C 124 ; WX 260 ; N bar ; B 94 -225 167 775 ; +C 125 ; WX 334 ; N braceright ; B 42 -196 292 722 ; +C 126 ; WX 584 ; N asciitilde ; B 61 180 523 326 ; +C 161 ; WX 333 ; N exclamdown ; B 118 -195 215 523 ; +C 162 ; WX 556 ; N cent ; B 51 -115 513 623 ; +C 163 ; WX 556 ; N sterling ; B 33 -16 539 718 ; +C 164 ; WX 167 ; N fraction ; B -166 -19 333 703 ; +C 165 ; WX 556 ; N yen ; B 3 0 553 688 ; +C 166 ; WX 556 ; N florin ; B -11 -207 501 737 ; +C 167 ; WX 556 ; N section ; B 43 -191 512 737 ; +C 168 ; WX 556 ; N currency ; B 28 99 528 603 ; +C 169 ; WX 191 ; N quotesingle ; B 59 463 132 718 ; +C 170 ; WX 333 ; N quotedblleft ; B 38 470 307 725 ; +C 171 ; WX 556 ; N guillemotleft ; B 97 108 459 446 ; +C 172 ; WX 333 ; N guilsinglleft ; B 88 108 245 446 ; +C 173 ; WX 333 ; N guilsinglright ; B 88 108 245 446 ; +C 174 ; WX 500 ; N fi ; B 14 0 434 728 ; +C 175 ; WX 500 ; N fl ; B 14 0 432 728 ; +C 177 ; WX 556 ; N endash ; B 0 240 556 313 ; +C 178 ; WX 556 ; N dagger ; B 43 -159 514 718 ; +C 179 ; WX 556 ; N daggerdbl ; B 43 -159 514 718 ; +C 180 ; WX 278 ; N periodcentered ; B 77 190 202 315 ; +C 182 ; WX 537 ; N paragraph ; B 18 -173 497 718 ; +C 183 ; WX 350 ; N bullet ; B 18 202 333 517 ; +C 184 ; WX 222 ; N quotesinglbase ; B 53 -149 157 106 ; +C 185 ; WX 333 ; N quotedblbase ; B 26 -149 295 106 ; +C 186 ; WX 333 ; N quotedblright ; B 26 463 295 718 ; +C 187 ; WX 556 ; N guillemotright ; B 97 108 459 446 ; +C 188 ; WX 1000 ; N ellipsis ; B 115 0 885 106 ; +C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 703 ; +C 191 ; WX 611 ; N questiondown ; B 91 -201 527 525 ; +C 193 ; WX 333 ; N grave ; B 14 593 211 734 ; +C 194 ; WX 333 ; N acute ; B 122 593 319 734 ; +C 195 ; WX 333 ; N circumflex ; B 21 593 312 734 ; +C 196 ; WX 333 ; N tilde ; B -4 606 337 722 ; +C 197 ; WX 333 ; N macron ; B 10 627 323 684 ; +C 198 ; WX 333 ; N breve ; B 13 595 321 731 ; +C 199 ; WX 333 ; N dotaccent ; B 121 604 212 706 ; +C 200 ; WX 333 ; N dieresis ; B 40 604 293 706 ; +C 202 ; WX 333 ; N ring ; B 75 572 259 756 ; +C 203 ; WX 333 ; N cedilla ; B 45 -225 259 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B 31 593 409 734 ; +C 206 ; WX 333 ; N ogonek ; B 73 -225 287 0 ; +C 207 ; WX 333 ; N caron ; B 21 593 312 734 ; +C 208 ; WX 1000 ; N emdash ; B 0 240 1000 313 ; +C 225 ; WX 1000 ; N AE ; B 8 0 951 718 ; +C 227 ; WX 370 ; N ordfeminine ; B 24 405 346 737 ; +C 232 ; WX 556 ; N Lslash ; B -20 0 537 718 ; +C 233 ; WX 778 ; N Oslash ; B 39 -19 740 737 ; +C 234 ; WX 1000 ; N OE ; B 36 -19 965 737 ; +C 235 ; WX 365 ; N ordmasculine ; B 25 405 341 737 ; +C 241 ; WX 889 ; N ae ; B 36 -15 847 538 ; +C 245 ; WX 278 ; N dotlessi ; B 95 0 183 523 ; +C 248 ; WX 222 ; N lslash ; B -20 0 242 718 ; +C 249 ; WX 611 ; N oslash ; B 28 -22 537 545 ; +C 250 ; WX 944 ; N oe ; B 35 -15 902 538 ; +C 251 ; WX 611 ; N germandbls ; B 67 -15 571 728 ; +C -1 ; WX 278 ; N Idieresis ; B 13 0 266 901 ; +C -1 ; WX 556 ; N eacute ; B 40 -15 516 734 ; +C -1 ; WX 556 ; N abreve ; B 36 -15 530 731 ; +C -1 ; WX 556 ; N uhungarumlaut ; B 68 -15 521 734 ; +C -1 ; WX 556 ; N ecaron ; B 40 -15 516 734 ; +C -1 ; WX 667 ; N Ydieresis ; B 14 0 653 901 ; +C -1 ; WX 584 ; N divide ; B 39 -19 545 524 ; +C -1 ; WX 667 ; N Yacute ; B 14 0 653 929 ; +C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ; +C -1 ; WX 556 ; N aacute ; B 36 -15 530 734 ; +C -1 ; WX 722 ; N Ucircumflex ; B 79 -19 644 929 ; +C -1 ; WX 500 ; N yacute ; B 11 -214 489 734 ; +C -1 ; WX 500 ; N scommaaccent ; B 32 -225 464 538 ; +C -1 ; WX 556 ; N ecircumflex ; B 40 -15 516 734 ; +C -1 ; WX 722 ; N Uring ; B 79 -19 644 931 ; +C -1 ; WX 722 ; N Udieresis ; B 79 -19 644 901 ; +C -1 ; WX 556 ; N aogonek ; B 36 -220 547 538 ; +C -1 ; WX 722 ; N Uacute ; B 79 -19 644 929 ; +C -1 ; WX 556 ; N uogonek ; B 68 -225 519 523 ; +C -1 ; WX 667 ; N Edieresis ; B 86 0 616 901 ; +C -1 ; WX 722 ; N Dcroat ; B 0 0 674 718 ; +C -1 ; WX 250 ; N commaaccent ; B 87 -225 181 -40 ; +C -1 ; WX 737 ; N copyright ; B -14 -19 752 737 ; +C -1 ; WX 667 ; N Emacron ; B 86 0 616 879 ; +C -1 ; WX 500 ; N ccaron ; B 30 -15 477 734 ; +C -1 ; WX 556 ; N aring ; B 36 -15 530 756 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 646 718 ; +C -1 ; WX 222 ; N lacute ; B 67 0 264 929 ; +C -1 ; WX 556 ; N agrave ; B 36 -15 530 734 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 14 -225 597 718 ; +C -1 ; WX 722 ; N Cacute ; B 44 -19 681 929 ; +C -1 ; WX 556 ; N atilde ; B 36 -15 530 722 ; +C -1 ; WX 667 ; N Edotaccent ; B 86 0 616 901 ; +C -1 ; WX 500 ; N scaron ; B 32 -15 464 734 ; +C -1 ; WX 500 ; N scedilla ; B 32 -225 464 538 ; +C -1 ; WX 278 ; N iacute ; B 95 0 292 734 ; +C -1 ; WX 471 ; N lozenge ; B 10 0 462 728 ; +C -1 ; WX 722 ; N Rcaron ; B 88 0 684 929 ; +C -1 ; WX 778 ; N Gcommaaccent ; B 48 -225 704 737 ; +C -1 ; WX 556 ; N ucircumflex ; B 68 -15 489 734 ; +C -1 ; WX 556 ; N acircumflex ; B 36 -15 530 734 ; +C -1 ; WX 667 ; N Amacron ; B 14 0 654 879 ; +C -1 ; WX 333 ; N rcaron ; B 61 0 352 734 ; +C -1 ; WX 500 ; N ccedilla ; B 30 -225 477 538 ; +C -1 ; WX 611 ; N Zdotaccent ; B 23 0 588 901 ; +C -1 ; WX 667 ; N Thorn ; B 86 0 622 718 ; +C -1 ; WX 778 ; N Omacron ; B 39 -19 739 879 ; +C -1 ; WX 722 ; N Racute ; B 88 0 684 929 ; +C -1 ; WX 667 ; N Sacute ; B 49 -19 620 929 ; +C -1 ; WX 643 ; N dcaron ; B 35 -15 655 718 ; +C -1 ; WX 722 ; N Umacron ; B 79 -19 644 879 ; +C -1 ; WX 556 ; N uring ; B 68 -15 489 756 ; +C -1 ; WX 333 ; N threesuperior ; B 5 270 325 703 ; +C -1 ; WX 778 ; N Ograve ; B 39 -19 739 929 ; +C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ; +C -1 ; WX 667 ; N Abreve ; B 14 0 654 926 ; +C -1 ; WX 584 ; N multiply ; B 39 0 545 506 ; +C -1 ; WX 556 ; N uacute ; B 68 -15 489 734 ; +C -1 ; WX 611 ; N Tcaron ; B 14 0 597 929 ; +C -1 ; WX 476 ; N partialdiff ; B 13 -38 463 714 ; +C -1 ; WX 500 ; N ydieresis ; B 11 -214 489 706 ; +C -1 ; WX 722 ; N Nacute ; B 76 0 646 929 ; +C -1 ; WX 278 ; N icircumflex ; B -6 0 285 734 ; +C -1 ; WX 667 ; N Ecircumflex ; B 86 0 616 929 ; +C -1 ; WX 556 ; N adieresis ; B 36 -15 530 706 ; +C -1 ; WX 556 ; N edieresis ; B 40 -15 516 706 ; +C -1 ; WX 500 ; N cacute ; B 30 -15 477 734 ; +C -1 ; WX 556 ; N nacute ; B 65 0 491 734 ; +C -1 ; WX 556 ; N umacron ; B 68 -15 489 684 ; +C -1 ; WX 722 ; N Ncaron ; B 76 0 646 929 ; +C -1 ; WX 278 ; N Iacute ; B 91 0 292 929 ; +C -1 ; WX 584 ; N plusminus ; B 39 0 545 506 ; +C -1 ; WX 260 ; N brokenbar ; B 94 -150 167 700 ; +C -1 ; WX 737 ; N registered ; B -14 -19 752 737 ; +C -1 ; WX 778 ; N Gbreve ; B 48 -19 704 926 ; +C -1 ; WX 278 ; N Idotaccent ; B 91 0 188 901 ; +C -1 ; WX 600 ; N summation ; B 15 -10 586 706 ; +C -1 ; WX 667 ; N Egrave ; B 86 0 616 929 ; +C -1 ; WX 333 ; N racute ; B 77 0 332 734 ; +C -1 ; WX 556 ; N omacron ; B 35 -14 521 684 ; +C -1 ; WX 611 ; N Zacute ; B 23 0 588 929 ; +C -1 ; WX 611 ; N Zcaron ; B 23 0 588 929 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 674 ; +C -1 ; WX 722 ; N Eth ; B 0 0 674 718 ; +C -1 ; WX 722 ; N Ccedilla ; B 44 -225 681 737 ; +C -1 ; WX 222 ; N lcommaaccent ; B 67 -225 167 718 ; +C -1 ; WX 317 ; N tcaron ; B 14 -7 329 808 ; +C -1 ; WX 556 ; N eogonek ; B 40 -225 516 538 ; +C -1 ; WX 722 ; N Uogonek ; B 79 -225 644 718 ; +C -1 ; WX 667 ; N Aacute ; B 14 0 654 929 ; +C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ; +C -1 ; WX 556 ; N egrave ; B 40 -15 516 734 ; +C -1 ; WX 500 ; N zacute ; B 31 0 469 734 ; +C -1 ; WX 222 ; N iogonek ; B -31 -225 183 718 ; +C -1 ; WX 778 ; N Oacute ; B 39 -19 739 929 ; +C -1 ; WX 556 ; N oacute ; B 35 -14 521 734 ; +C -1 ; WX 556 ; N amacron ; B 36 -15 530 684 ; +C -1 ; WX 500 ; N sacute ; B 32 -15 464 734 ; +C -1 ; WX 278 ; N idieresis ; B 13 0 266 706 ; +C -1 ; WX 778 ; N Ocircumflex ; B 39 -19 739 929 ; +C -1 ; WX 722 ; N Ugrave ; B 79 -19 644 929 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 556 ; N thorn ; B 58 -207 517 718 ; +C -1 ; WX 333 ; N twosuperior ; B 4 281 323 703 ; +C -1 ; WX 778 ; N Odieresis ; B 39 -19 739 901 ; +C -1 ; WX 556 ; N mu ; B 68 -207 489 523 ; +C -1 ; WX 278 ; N igrave ; B -13 0 184 734 ; +C -1 ; WX 556 ; N ohungarumlaut ; B 35 -14 521 734 ; +C -1 ; WX 667 ; N Eogonek ; B 86 -220 633 718 ; +C -1 ; WX 556 ; N dcroat ; B 35 -15 550 718 ; +C -1 ; WX 834 ; N threequarters ; B 45 -19 810 703 ; +C -1 ; WX 667 ; N Scedilla ; B 49 -225 620 737 ; +C -1 ; WX 299 ; N lcaron ; B 67 0 311 718 ; +C -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 663 718 ; +C -1 ; WX 556 ; N Lacute ; B 76 0 537 929 ; +C -1 ; WX 1000 ; N trademark ; B 46 306 903 718 ; +C -1 ; WX 556 ; N edotaccent ; B 40 -15 516 706 ; +C -1 ; WX 278 ; N Igrave ; B -13 0 188 929 ; +C -1 ; WX 278 ; N Imacron ; B -17 0 296 879 ; +C -1 ; WX 556 ; N Lcaron ; B 76 0 537 718 ; +C -1 ; WX 834 ; N onehalf ; B 43 -19 773 703 ; +C -1 ; WX 549 ; N lessequal ; B 26 0 523 674 ; +C -1 ; WX 556 ; N ocircumflex ; B 35 -14 521 734 ; +C -1 ; WX 556 ; N ntilde ; B 65 0 491 722 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 79 -19 644 929 ; +C -1 ; WX 667 ; N Eacute ; B 86 0 616 929 ; +C -1 ; WX 556 ; N emacron ; B 40 -15 516 684 ; +C -1 ; WX 556 ; N gbreve ; B 40 -220 499 731 ; +C -1 ; WX 834 ; N onequarter ; B 73 -19 756 703 ; +C -1 ; WX 667 ; N Scaron ; B 49 -19 620 929 ; +C -1 ; WX 667 ; N Scommaaccent ; B 49 -225 620 737 ; +C -1 ; WX 778 ; N Ohungarumlaut ; B 39 -19 739 929 ; +C -1 ; WX 400 ; N degree ; B 54 411 346 703 ; +C -1 ; WX 556 ; N ograve ; B 35 -14 521 734 ; +C -1 ; WX 722 ; N Ccaron ; B 44 -19 681 929 ; +C -1 ; WX 556 ; N ugrave ; B 68 -15 489 734 ; +C -1 ; WX 453 ; N radical ; B -4 -80 458 762 ; +C -1 ; WX 722 ; N Dcaron ; B 81 0 674 929 ; +C -1 ; WX 333 ; N rcommaaccent ; B 77 -225 332 538 ; +C -1 ; WX 722 ; N Ntilde ; B 76 0 646 917 ; +C -1 ; WX 556 ; N otilde ; B 35 -14 521 722 ; +C -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 684 718 ; +C -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 537 718 ; +C -1 ; WX 667 ; N Atilde ; B 14 0 654 917 ; +C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ; +C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ; +C -1 ; WX 778 ; N Otilde ; B 39 -19 739 917 ; +C -1 ; WX 500 ; N zdotaccent ; B 31 0 469 706 ; +C -1 ; WX 667 ; N Ecaron ; B 86 0 616 929 ; +C -1 ; WX 278 ; N Iogonek ; B -3 -225 211 718 ; +C -1 ; WX 500 ; N kcommaaccent ; B 67 -225 501 718 ; +C -1 ; WX 584 ; N minus ; B 39 216 545 289 ; +C -1 ; WX 278 ; N Icircumflex ; B -6 0 285 929 ; +C -1 ; WX 556 ; N ncaron ; B 65 0 491 734 ; +C -1 ; WX 278 ; N tcommaaccent ; B 14 -225 257 669 ; +C -1 ; WX 584 ; N logicalnot ; B 39 108 545 390 ; +C -1 ; WX 556 ; N odieresis ; B 35 -14 521 706 ; +C -1 ; WX 556 ; N udieresis ; B 68 -15 489 706 ; +C -1 ; WX 549 ; N notequal ; B 12 -35 537 551 ; +C -1 ; WX 556 ; N gcommaaccent ; B 40 -220 499 822 ; +C -1 ; WX 556 ; N eth ; B 35 -15 522 737 ; +C -1 ; WX 500 ; N zcaron ; B 31 0 469 734 ; +C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 491 538 ; +C -1 ; WX 333 ; N onesuperior ; B 43 281 222 703 ; +C -1 ; WX 278 ; N imacron ; B 5 0 272 684 ; +C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2705 +KPX A C -30 +KPX A Cacute -30 +KPX A Ccaron -30 +KPX A Ccedilla -30 +KPX A G -30 +KPX A Gbreve -30 +KPX A Gcommaaccent -30 +KPX A O -30 +KPX A Oacute -30 +KPX A Ocircumflex -30 +KPX A Odieresis -30 +KPX A Ograve -30 +KPX A Ohungarumlaut -30 +KPX A Omacron -30 +KPX A Oslash -30 +KPX A Otilde -30 +KPX A Q -30 +KPX A T -120 +KPX A Tcaron -120 +KPX A Tcommaaccent -120 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -70 +KPX A W -50 +KPX A Y -100 +KPX A Yacute -100 +KPX A Ydieresis -100 +KPX A u -30 +KPX A uacute -30 +KPX A ucircumflex -30 +KPX A udieresis -30 +KPX A ugrave -30 +KPX A uhungarumlaut -30 +KPX A umacron -30 +KPX A uogonek -30 +KPX A uring -30 +KPX A v -40 +KPX A w -40 +KPX A y -40 +KPX A yacute -40 +KPX A ydieresis -40 +KPX Aacute C -30 +KPX Aacute Cacute -30 +KPX Aacute Ccaron -30 +KPX Aacute Ccedilla -30 +KPX Aacute G -30 +KPX Aacute Gbreve -30 +KPX Aacute Gcommaaccent -30 +KPX Aacute O -30 +KPX Aacute Oacute -30 +KPX Aacute Ocircumflex -30 +KPX Aacute Odieresis -30 +KPX Aacute Ograve -30 +KPX Aacute Ohungarumlaut -30 +KPX Aacute Omacron -30 +KPX Aacute Oslash -30 +KPX Aacute Otilde -30 +KPX Aacute Q -30 +KPX Aacute T -120 +KPX Aacute Tcaron -120 +KPX Aacute Tcommaaccent -120 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -70 +KPX Aacute W -50 +KPX Aacute Y -100 +KPX Aacute Yacute -100 +KPX Aacute Ydieresis -100 +KPX Aacute u -30 +KPX Aacute uacute -30 +KPX Aacute ucircumflex -30 +KPX Aacute udieresis -30 +KPX Aacute ugrave -30 +KPX Aacute uhungarumlaut -30 +KPX Aacute umacron -30 +KPX Aacute uogonek -30 +KPX Aacute uring -30 +KPX Aacute v -40 +KPX Aacute w -40 +KPX Aacute y -40 +KPX Aacute yacute -40 +KPX Aacute ydieresis -40 +KPX Abreve C -30 +KPX Abreve Cacute -30 +KPX Abreve Ccaron -30 +KPX Abreve Ccedilla -30 +KPX Abreve G -30 +KPX Abreve Gbreve -30 +KPX Abreve Gcommaaccent -30 +KPX Abreve O -30 +KPX Abreve Oacute -30 +KPX Abreve Ocircumflex -30 +KPX Abreve Odieresis -30 +KPX Abreve Ograve -30 +KPX Abreve Ohungarumlaut -30 +KPX Abreve Omacron -30 +KPX Abreve Oslash -30 +KPX Abreve Otilde -30 +KPX Abreve Q -30 +KPX Abreve T -120 +KPX Abreve Tcaron -120 +KPX Abreve Tcommaaccent -120 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -70 +KPX Abreve W -50 +KPX Abreve Y -100 +KPX Abreve Yacute -100 +KPX Abreve Ydieresis -100 +KPX Abreve u -30 +KPX Abreve uacute -30 +KPX Abreve ucircumflex -30 +KPX Abreve udieresis -30 +KPX Abreve ugrave -30 +KPX Abreve uhungarumlaut -30 +KPX Abreve umacron -30 +KPX Abreve uogonek -30 +KPX Abreve uring -30 +KPX Abreve v -40 +KPX Abreve w -40 +KPX Abreve y -40 +KPX Abreve yacute -40 +KPX Abreve ydieresis -40 +KPX Acircumflex C -30 +KPX Acircumflex Cacute -30 +KPX Acircumflex Ccaron -30 +KPX Acircumflex Ccedilla -30 +KPX Acircumflex G -30 +KPX Acircumflex Gbreve -30 +KPX Acircumflex Gcommaaccent -30 +KPX Acircumflex O -30 +KPX Acircumflex Oacute -30 +KPX Acircumflex Ocircumflex -30 +KPX Acircumflex Odieresis -30 +KPX Acircumflex Ograve -30 +KPX Acircumflex Ohungarumlaut -30 +KPX Acircumflex Omacron -30 +KPX Acircumflex Oslash -30 +KPX Acircumflex Otilde -30 +KPX Acircumflex Q -30 +KPX Acircumflex T -120 +KPX Acircumflex Tcaron -120 +KPX Acircumflex Tcommaaccent -120 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -70 +KPX Acircumflex W -50 +KPX Acircumflex Y -100 +KPX Acircumflex Yacute -100 +KPX Acircumflex Ydieresis -100 +KPX Acircumflex u -30 +KPX Acircumflex uacute -30 +KPX Acircumflex ucircumflex -30 +KPX Acircumflex udieresis -30 +KPX Acircumflex ugrave -30 +KPX Acircumflex uhungarumlaut -30 +KPX Acircumflex umacron -30 +KPX Acircumflex uogonek -30 +KPX Acircumflex uring -30 +KPX Acircumflex v -40 +KPX Acircumflex w -40 +KPX Acircumflex y -40 +KPX Acircumflex yacute -40 +KPX Acircumflex ydieresis -40 +KPX Adieresis C -30 +KPX Adieresis Cacute -30 +KPX Adieresis Ccaron -30 +KPX Adieresis Ccedilla -30 +KPX Adieresis G -30 +KPX Adieresis Gbreve -30 +KPX Adieresis Gcommaaccent -30 +KPX Adieresis O -30 +KPX Adieresis Oacute -30 +KPX Adieresis Ocircumflex -30 +KPX Adieresis Odieresis -30 +KPX Adieresis Ograve -30 +KPX Adieresis Ohungarumlaut -30 +KPX Adieresis Omacron -30 +KPX Adieresis Oslash -30 +KPX Adieresis Otilde -30 +KPX Adieresis Q -30 +KPX Adieresis T -120 +KPX Adieresis Tcaron -120 +KPX Adieresis Tcommaaccent -120 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -70 +KPX Adieresis W -50 +KPX Adieresis Y -100 +KPX Adieresis Yacute -100 +KPX Adieresis Ydieresis -100 +KPX Adieresis u -30 +KPX Adieresis uacute -30 +KPX Adieresis ucircumflex -30 +KPX Adieresis udieresis -30 +KPX Adieresis ugrave -30 +KPX Adieresis uhungarumlaut -30 +KPX Adieresis umacron -30 +KPX Adieresis uogonek -30 +KPX Adieresis uring -30 +KPX Adieresis v -40 +KPX Adieresis w -40 +KPX Adieresis y -40 +KPX Adieresis yacute -40 +KPX Adieresis ydieresis -40 +KPX Agrave C -30 +KPX Agrave Cacute -30 +KPX Agrave Ccaron -30 +KPX Agrave Ccedilla -30 +KPX Agrave G -30 +KPX Agrave Gbreve -30 +KPX Agrave Gcommaaccent -30 +KPX Agrave O -30 +KPX Agrave Oacute -30 +KPX Agrave Ocircumflex -30 +KPX Agrave Odieresis -30 +KPX Agrave Ograve -30 +KPX Agrave Ohungarumlaut -30 +KPX Agrave Omacron -30 +KPX Agrave Oslash -30 +KPX Agrave Otilde -30 +KPX Agrave Q -30 +KPX Agrave T -120 +KPX Agrave Tcaron -120 +KPX Agrave Tcommaaccent -120 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -70 +KPX Agrave W -50 +KPX Agrave Y -100 +KPX Agrave Yacute -100 +KPX Agrave Ydieresis -100 +KPX Agrave u -30 +KPX Agrave uacute -30 +KPX Agrave ucircumflex -30 +KPX Agrave udieresis -30 +KPX Agrave ugrave -30 +KPX Agrave uhungarumlaut -30 +KPX Agrave umacron -30 +KPX Agrave uogonek -30 +KPX Agrave uring -30 +KPX Agrave v -40 +KPX Agrave w -40 +KPX Agrave y -40 +KPX Agrave yacute -40 +KPX Agrave ydieresis -40 +KPX Amacron C -30 +KPX Amacron Cacute -30 +KPX Amacron Ccaron -30 +KPX Amacron Ccedilla -30 +KPX Amacron G -30 +KPX Amacron Gbreve -30 +KPX Amacron Gcommaaccent -30 +KPX Amacron O -30 +KPX Amacron Oacute -30 +KPX Amacron Ocircumflex -30 +KPX Amacron Odieresis -30 +KPX Amacron Ograve -30 +KPX Amacron Ohungarumlaut -30 +KPX Amacron Omacron -30 +KPX Amacron Oslash -30 +KPX Amacron Otilde -30 +KPX Amacron Q -30 +KPX Amacron T -120 +KPX Amacron Tcaron -120 +KPX Amacron Tcommaaccent -120 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -70 +KPX Amacron W -50 +KPX Amacron Y -100 +KPX Amacron Yacute -100 +KPX Amacron Ydieresis -100 +KPX Amacron u -30 +KPX Amacron uacute -30 +KPX Amacron ucircumflex -30 +KPX Amacron udieresis -30 +KPX Amacron ugrave -30 +KPX Amacron uhungarumlaut -30 +KPX Amacron umacron -30 +KPX Amacron uogonek -30 +KPX Amacron uring -30 +KPX Amacron v -40 +KPX Amacron w -40 +KPX Amacron y -40 +KPX Amacron yacute -40 +KPX Amacron ydieresis -40 +KPX Aogonek C -30 +KPX Aogonek Cacute -30 +KPX Aogonek Ccaron -30 +KPX Aogonek Ccedilla -30 +KPX Aogonek G -30 +KPX Aogonek Gbreve -30 +KPX Aogonek Gcommaaccent -30 +KPX Aogonek O -30 +KPX Aogonek Oacute -30 +KPX Aogonek Ocircumflex -30 +KPX Aogonek Odieresis -30 +KPX Aogonek Ograve -30 +KPX Aogonek Ohungarumlaut -30 +KPX Aogonek Omacron -30 +KPX Aogonek Oslash -30 +KPX Aogonek Otilde -30 +KPX Aogonek Q -30 +KPX Aogonek T -120 +KPX Aogonek Tcaron -120 +KPX Aogonek Tcommaaccent -120 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -70 +KPX Aogonek W -50 +KPX Aogonek Y -100 +KPX Aogonek Yacute -100 +KPX Aogonek Ydieresis -100 +KPX Aogonek u -30 +KPX Aogonek uacute -30 +KPX Aogonek ucircumflex -30 +KPX Aogonek udieresis -30 +KPX Aogonek ugrave -30 +KPX Aogonek uhungarumlaut -30 +KPX Aogonek umacron -30 +KPX Aogonek uogonek -30 +KPX Aogonek uring -30 +KPX Aogonek v -40 +KPX Aogonek w -40 +KPX Aogonek y -40 +KPX Aogonek yacute -40 +KPX Aogonek ydieresis -40 +KPX Aring C -30 +KPX Aring Cacute -30 +KPX Aring Ccaron -30 +KPX Aring Ccedilla -30 +KPX Aring G -30 +KPX Aring Gbreve -30 +KPX Aring Gcommaaccent -30 +KPX Aring O -30 +KPX Aring Oacute -30 +KPX Aring Ocircumflex -30 +KPX Aring Odieresis -30 +KPX Aring Ograve -30 +KPX Aring Ohungarumlaut -30 +KPX Aring Omacron -30 +KPX Aring Oslash -30 +KPX Aring Otilde -30 +KPX Aring Q -30 +KPX Aring T -120 +KPX Aring Tcaron -120 +KPX Aring Tcommaaccent -120 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -70 +KPX Aring W -50 +KPX Aring Y -100 +KPX Aring Yacute -100 +KPX Aring Ydieresis -100 +KPX Aring u -30 +KPX Aring uacute -30 +KPX Aring ucircumflex -30 +KPX Aring udieresis -30 +KPX Aring ugrave -30 +KPX Aring uhungarumlaut -30 +KPX Aring umacron -30 +KPX Aring uogonek -30 +KPX Aring uring -30 +KPX Aring v -40 +KPX Aring w -40 +KPX Aring y -40 +KPX Aring yacute -40 +KPX Aring ydieresis -40 +KPX Atilde C -30 +KPX Atilde Cacute -30 +KPX Atilde Ccaron -30 +KPX Atilde Ccedilla -30 +KPX Atilde G -30 +KPX Atilde Gbreve -30 +KPX Atilde Gcommaaccent -30 +KPX Atilde O -30 +KPX Atilde Oacute -30 +KPX Atilde Ocircumflex -30 +KPX Atilde Odieresis -30 +KPX Atilde Ograve -30 +KPX Atilde Ohungarumlaut -30 +KPX Atilde Omacron -30 +KPX Atilde Oslash -30 +KPX Atilde Otilde -30 +KPX Atilde Q -30 +KPX Atilde T -120 +KPX Atilde Tcaron -120 +KPX Atilde Tcommaaccent -120 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -70 +KPX Atilde W -50 +KPX Atilde Y -100 +KPX Atilde Yacute -100 +KPX Atilde Ydieresis -100 +KPX Atilde u -30 +KPX Atilde uacute -30 +KPX Atilde ucircumflex -30 +KPX Atilde udieresis -30 +KPX Atilde ugrave -30 +KPX Atilde uhungarumlaut -30 +KPX Atilde umacron -30 +KPX Atilde uogonek -30 +KPX Atilde uring -30 +KPX Atilde v -40 +KPX Atilde w -40 +KPX Atilde y -40 +KPX Atilde yacute -40 +KPX Atilde ydieresis -40 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX B comma -20 +KPX B period -20 +KPX C comma -30 +KPX C period -30 +KPX Cacute comma -30 +KPX Cacute period -30 +KPX Ccaron comma -30 +KPX Ccaron period -30 +KPX Ccedilla comma -30 +KPX Ccedilla period -30 +KPX D A -40 +KPX D Aacute -40 +KPX D Abreve -40 +KPX D Acircumflex -40 +KPX D Adieresis -40 +KPX D Agrave -40 +KPX D Amacron -40 +KPX D Aogonek -40 +KPX D Aring -40 +KPX D Atilde -40 +KPX D V -70 +KPX D W -40 +KPX D Y -90 +KPX D Yacute -90 +KPX D Ydieresis -90 +KPX D comma -70 +KPX D period -70 +KPX Dcaron A -40 +KPX Dcaron Aacute -40 +KPX Dcaron Abreve -40 +KPX Dcaron Acircumflex -40 +KPX Dcaron Adieresis -40 +KPX Dcaron Agrave -40 +KPX Dcaron Amacron -40 +KPX Dcaron Aogonek -40 +KPX Dcaron Aring -40 +KPX Dcaron Atilde -40 +KPX Dcaron V -70 +KPX Dcaron W -40 +KPX Dcaron Y -90 +KPX Dcaron Yacute -90 +KPX Dcaron Ydieresis -90 +KPX Dcaron comma -70 +KPX Dcaron period -70 +KPX Dcroat A -40 +KPX Dcroat Aacute -40 +KPX Dcroat Abreve -40 +KPX Dcroat Acircumflex -40 +KPX Dcroat Adieresis -40 +KPX Dcroat Agrave -40 +KPX Dcroat Amacron -40 +KPX Dcroat Aogonek -40 +KPX Dcroat Aring -40 +KPX Dcroat Atilde -40 +KPX Dcroat V -70 +KPX Dcroat W -40 +KPX Dcroat Y -90 +KPX Dcroat Yacute -90 +KPX Dcroat Ydieresis -90 +KPX Dcroat comma -70 +KPX Dcroat period -70 +KPX F A -80 +KPX F Aacute -80 +KPX F Abreve -80 +KPX F Acircumflex -80 +KPX F Adieresis -80 +KPX F Agrave -80 +KPX F Amacron -80 +KPX F Aogonek -80 +KPX F Aring -80 +KPX F Atilde -80 +KPX F a -50 +KPX F aacute -50 +KPX F abreve -50 +KPX F acircumflex -50 +KPX F adieresis -50 +KPX F agrave -50 +KPX F amacron -50 +KPX F aogonek -50 +KPX F aring -50 +KPX F atilde -50 +KPX F comma -150 +KPX F e -30 +KPX F eacute -30 +KPX F ecaron -30 +KPX F ecircumflex -30 +KPX F edieresis -30 +KPX F edotaccent -30 +KPX F egrave -30 +KPX F emacron -30 +KPX F eogonek -30 +KPX F o -30 +KPX F oacute -30 +KPX F ocircumflex -30 +KPX F odieresis -30 +KPX F ograve -30 +KPX F ohungarumlaut -30 +KPX F omacron -30 +KPX F oslash -30 +KPX F otilde -30 +KPX F period -150 +KPX F r -45 +KPX F racute -45 +KPX F rcaron -45 +KPX F rcommaaccent -45 +KPX J A -20 +KPX J Aacute -20 +KPX J Abreve -20 +KPX J Acircumflex -20 +KPX J Adieresis -20 +KPX J Agrave -20 +KPX J Amacron -20 +KPX J Aogonek -20 +KPX J Aring -20 +KPX J Atilde -20 +KPX J a -20 +KPX J aacute -20 +KPX J abreve -20 +KPX J acircumflex -20 +KPX J adieresis -20 +KPX J agrave -20 +KPX J amacron -20 +KPX J aogonek -20 +KPX J aring -20 +KPX J atilde -20 +KPX J comma -30 +KPX J period -30 +KPX J u -20 +KPX J uacute -20 +KPX J ucircumflex -20 +KPX J udieresis -20 +KPX J ugrave -20 +KPX J uhungarumlaut -20 +KPX J umacron -20 +KPX J uogonek -20 +KPX J uring -20 +KPX K O -50 +KPX K Oacute -50 +KPX K Ocircumflex -50 +KPX K Odieresis -50 +KPX K Ograve -50 +KPX K Ohungarumlaut -50 +KPX K Omacron -50 +KPX K Oslash -50 +KPX K Otilde -50 +KPX K e -40 +KPX K eacute -40 +KPX K ecaron -40 +KPX K ecircumflex -40 +KPX K edieresis -40 +KPX K edotaccent -40 +KPX K egrave -40 +KPX K emacron -40 +KPX K eogonek -40 +KPX K o -40 +KPX K oacute -40 +KPX K ocircumflex -40 +KPX K odieresis -40 +KPX K ograve -40 +KPX K ohungarumlaut -40 +KPX K omacron -40 +KPX K oslash -40 +KPX K otilde -40 +KPX K u -30 +KPX K uacute -30 +KPX K ucircumflex -30 +KPX K udieresis -30 +KPX K ugrave -30 +KPX K uhungarumlaut -30 +KPX K umacron -30 +KPX K uogonek -30 +KPX K uring -30 +KPX K y -50 +KPX K yacute -50 +KPX K ydieresis -50 +KPX Kcommaaccent O -50 +KPX Kcommaaccent Oacute -50 +KPX Kcommaaccent Ocircumflex -50 +KPX Kcommaaccent Odieresis -50 +KPX Kcommaaccent Ograve -50 +KPX Kcommaaccent Ohungarumlaut -50 +KPX Kcommaaccent Omacron -50 +KPX Kcommaaccent Oslash -50 +KPX Kcommaaccent Otilde -50 +KPX Kcommaaccent e -40 +KPX Kcommaaccent eacute -40 +KPX Kcommaaccent ecaron -40 +KPX Kcommaaccent ecircumflex -40 +KPX Kcommaaccent edieresis -40 +KPX Kcommaaccent edotaccent -40 +KPX Kcommaaccent egrave -40 +KPX Kcommaaccent emacron -40 +KPX Kcommaaccent eogonek -40 +KPX Kcommaaccent o -40 +KPX Kcommaaccent oacute -40 +KPX Kcommaaccent ocircumflex -40 +KPX Kcommaaccent odieresis -40 +KPX Kcommaaccent ograve -40 +KPX Kcommaaccent ohungarumlaut -40 +KPX Kcommaaccent omacron -40 +KPX Kcommaaccent oslash -40 +KPX Kcommaaccent otilde -40 +KPX Kcommaaccent u -30 +KPX Kcommaaccent uacute -30 +KPX Kcommaaccent ucircumflex -30 +KPX Kcommaaccent udieresis -30 +KPX Kcommaaccent ugrave -30 +KPX Kcommaaccent uhungarumlaut -30 +KPX Kcommaaccent umacron -30 +KPX Kcommaaccent uogonek -30 +KPX Kcommaaccent uring -30 +KPX Kcommaaccent y -50 +KPX Kcommaaccent yacute -50 +KPX Kcommaaccent ydieresis -50 +KPX L T -110 +KPX L Tcaron -110 +KPX L Tcommaaccent -110 +KPX L V -110 +KPX L W -70 +KPX L Y -140 +KPX L Yacute -140 +KPX L Ydieresis -140 +KPX L quotedblright -140 +KPX L quoteright -160 +KPX L y -30 +KPX L yacute -30 +KPX L ydieresis -30 +KPX Lacute T -110 +KPX Lacute Tcaron -110 +KPX Lacute Tcommaaccent -110 +KPX Lacute V -110 +KPX Lacute W -70 +KPX Lacute Y -140 +KPX Lacute Yacute -140 +KPX Lacute Ydieresis -140 +KPX Lacute quotedblright -140 +KPX Lacute quoteright -160 +KPX Lacute y -30 +KPX Lacute yacute -30 +KPX Lacute ydieresis -30 +KPX Lcaron T -110 +KPX Lcaron Tcaron -110 +KPX Lcaron Tcommaaccent -110 +KPX Lcaron V -110 +KPX Lcaron W -70 +KPX Lcaron Y -140 +KPX Lcaron Yacute -140 +KPX Lcaron Ydieresis -140 +KPX Lcaron quotedblright -140 +KPX Lcaron quoteright -160 +KPX Lcaron y -30 +KPX Lcaron yacute -30 +KPX Lcaron ydieresis -30 +KPX Lcommaaccent T -110 +KPX Lcommaaccent Tcaron -110 +KPX Lcommaaccent Tcommaaccent -110 +KPX Lcommaaccent V -110 +KPX Lcommaaccent W -70 +KPX Lcommaaccent Y -140 +KPX Lcommaaccent Yacute -140 +KPX Lcommaaccent Ydieresis -140 +KPX Lcommaaccent quotedblright -140 +KPX Lcommaaccent quoteright -160 +KPX Lcommaaccent y -30 +KPX Lcommaaccent yacute -30 +KPX Lcommaaccent ydieresis -30 +KPX Lslash T -110 +KPX Lslash Tcaron -110 +KPX Lslash Tcommaaccent -110 +KPX Lslash V -110 +KPX Lslash W -70 +KPX Lslash Y -140 +KPX Lslash Yacute -140 +KPX Lslash Ydieresis -140 +KPX Lslash quotedblright -140 +KPX Lslash quoteright -160 +KPX Lslash y -30 +KPX Lslash yacute -30 +KPX Lslash ydieresis -30 +KPX O A -20 +KPX O Aacute -20 +KPX O Abreve -20 +KPX O Acircumflex -20 +KPX O Adieresis -20 +KPX O Agrave -20 +KPX O Amacron -20 +KPX O Aogonek -20 +KPX O Aring -20 +KPX O Atilde -20 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -30 +KPX O X -60 +KPX O Y -70 +KPX O Yacute -70 +KPX O Ydieresis -70 +KPX O comma -40 +KPX O period -40 +KPX Oacute A -20 +KPX Oacute Aacute -20 +KPX Oacute Abreve -20 +KPX Oacute Acircumflex -20 +KPX Oacute Adieresis -20 +KPX Oacute Agrave -20 +KPX Oacute Amacron -20 +KPX Oacute Aogonek -20 +KPX Oacute Aring -20 +KPX Oacute Atilde -20 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -30 +KPX Oacute X -60 +KPX Oacute Y -70 +KPX Oacute Yacute -70 +KPX Oacute Ydieresis -70 +KPX Oacute comma -40 +KPX Oacute period -40 +KPX Ocircumflex A -20 +KPX Ocircumflex Aacute -20 +KPX Ocircumflex Abreve -20 +KPX Ocircumflex Acircumflex -20 +KPX Ocircumflex Adieresis -20 +KPX Ocircumflex Agrave -20 +KPX Ocircumflex Amacron -20 +KPX Ocircumflex Aogonek -20 +KPX Ocircumflex Aring -20 +KPX Ocircumflex Atilde -20 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -30 +KPX Ocircumflex X -60 +KPX Ocircumflex Y -70 +KPX Ocircumflex Yacute -70 +KPX Ocircumflex Ydieresis -70 +KPX Ocircumflex comma -40 +KPX Ocircumflex period -40 +KPX Odieresis A -20 +KPX Odieresis Aacute -20 +KPX Odieresis Abreve -20 +KPX Odieresis Acircumflex -20 +KPX Odieresis Adieresis -20 +KPX Odieresis Agrave -20 +KPX Odieresis Amacron -20 +KPX Odieresis Aogonek -20 +KPX Odieresis Aring -20 +KPX Odieresis Atilde -20 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -30 +KPX Odieresis X -60 +KPX Odieresis Y -70 +KPX Odieresis Yacute -70 +KPX Odieresis Ydieresis -70 +KPX Odieresis comma -40 +KPX Odieresis period -40 +KPX Ograve A -20 +KPX Ograve Aacute -20 +KPX Ograve Abreve -20 +KPX Ograve Acircumflex -20 +KPX Ograve Adieresis -20 +KPX Ograve Agrave -20 +KPX Ograve Amacron -20 +KPX Ograve Aogonek -20 +KPX Ograve Aring -20 +KPX Ograve Atilde -20 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -30 +KPX Ograve X -60 +KPX Ograve Y -70 +KPX Ograve Yacute -70 +KPX Ograve Ydieresis -70 +KPX Ograve comma -40 +KPX Ograve period -40 +KPX Ohungarumlaut A -20 +KPX Ohungarumlaut Aacute -20 +KPX Ohungarumlaut Abreve -20 +KPX Ohungarumlaut Acircumflex -20 +KPX Ohungarumlaut Adieresis -20 +KPX Ohungarumlaut Agrave -20 +KPX Ohungarumlaut Amacron -20 +KPX Ohungarumlaut Aogonek -20 +KPX Ohungarumlaut Aring -20 +KPX Ohungarumlaut Atilde -20 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -30 +KPX Ohungarumlaut X -60 +KPX Ohungarumlaut Y -70 +KPX Ohungarumlaut Yacute -70 +KPX Ohungarumlaut Ydieresis -70 +KPX Ohungarumlaut comma -40 +KPX Ohungarumlaut period -40 +KPX Omacron A -20 +KPX Omacron Aacute -20 +KPX Omacron Abreve -20 +KPX Omacron Acircumflex -20 +KPX Omacron Adieresis -20 +KPX Omacron Agrave -20 +KPX Omacron Amacron -20 +KPX Omacron Aogonek -20 +KPX Omacron Aring -20 +KPX Omacron Atilde -20 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -30 +KPX Omacron X -60 +KPX Omacron Y -70 +KPX Omacron Yacute -70 +KPX Omacron Ydieresis -70 +KPX Omacron comma -40 +KPX Omacron period -40 +KPX Oslash A -20 +KPX Oslash Aacute -20 +KPX Oslash Abreve -20 +KPX Oslash Acircumflex -20 +KPX Oslash Adieresis -20 +KPX Oslash Agrave -20 +KPX Oslash Amacron -20 +KPX Oslash Aogonek -20 +KPX Oslash Aring -20 +KPX Oslash Atilde -20 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -30 +KPX Oslash X -60 +KPX Oslash Y -70 +KPX Oslash Yacute -70 +KPX Oslash Ydieresis -70 +KPX Oslash comma -40 +KPX Oslash period -40 +KPX Otilde A -20 +KPX Otilde Aacute -20 +KPX Otilde Abreve -20 +KPX Otilde Acircumflex -20 +KPX Otilde Adieresis -20 +KPX Otilde Agrave -20 +KPX Otilde Amacron -20 +KPX Otilde Aogonek -20 +KPX Otilde Aring -20 +KPX Otilde Atilde -20 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -30 +KPX Otilde X -60 +KPX Otilde Y -70 +KPX Otilde Yacute -70 +KPX Otilde Ydieresis -70 +KPX Otilde comma -40 +KPX Otilde period -40 +KPX P A -120 +KPX P Aacute -120 +KPX P Abreve -120 +KPX P Acircumflex -120 +KPX P Adieresis -120 +KPX P Agrave -120 +KPX P Amacron -120 +KPX P Aogonek -120 +KPX P Aring -120 +KPX P Atilde -120 +KPX P a -40 +KPX P aacute -40 +KPX P abreve -40 +KPX P acircumflex -40 +KPX P adieresis -40 +KPX P agrave -40 +KPX P amacron -40 +KPX P aogonek -40 +KPX P aring -40 +KPX P atilde -40 +KPX P comma -180 +KPX P e -50 +KPX P eacute -50 +KPX P ecaron -50 +KPX P ecircumflex -50 +KPX P edieresis -50 +KPX P edotaccent -50 +KPX P egrave -50 +KPX P emacron -50 +KPX P eogonek -50 +KPX P o -50 +KPX P oacute -50 +KPX P ocircumflex -50 +KPX P odieresis -50 +KPX P ograve -50 +KPX P ohungarumlaut -50 +KPX P omacron -50 +KPX P oslash -50 +KPX P otilde -50 +KPX P period -180 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX R O -20 +KPX R Oacute -20 +KPX R Ocircumflex -20 +KPX R Odieresis -20 +KPX R Ograve -20 +KPX R Ohungarumlaut -20 +KPX R Omacron -20 +KPX R Oslash -20 +KPX R Otilde -20 +KPX R T -30 +KPX R Tcaron -30 +KPX R Tcommaaccent -30 +KPX R U -40 +KPX R Uacute -40 +KPX R Ucircumflex -40 +KPX R Udieresis -40 +KPX R Ugrave -40 +KPX R Uhungarumlaut -40 +KPX R Umacron -40 +KPX R Uogonek -40 +KPX R Uring -40 +KPX R V -50 +KPX R W -30 +KPX R Y -50 +KPX R Yacute -50 +KPX R Ydieresis -50 +KPX Racute O -20 +KPX Racute Oacute -20 +KPX Racute Ocircumflex -20 +KPX Racute Odieresis -20 +KPX Racute Ograve -20 +KPX Racute Ohungarumlaut -20 +KPX Racute Omacron -20 +KPX Racute Oslash -20 +KPX Racute Otilde -20 +KPX Racute T -30 +KPX Racute Tcaron -30 +KPX Racute Tcommaaccent -30 +KPX Racute U -40 +KPX Racute Uacute -40 +KPX Racute Ucircumflex -40 +KPX Racute Udieresis -40 +KPX Racute Ugrave -40 +KPX Racute Uhungarumlaut -40 +KPX Racute Umacron -40 +KPX Racute Uogonek -40 +KPX Racute Uring -40 +KPX Racute V -50 +KPX Racute W -30 +KPX Racute Y -50 +KPX Racute Yacute -50 +KPX Racute Ydieresis -50 +KPX Rcaron O -20 +KPX Rcaron Oacute -20 +KPX Rcaron Ocircumflex -20 +KPX Rcaron Odieresis -20 +KPX Rcaron Ograve -20 +KPX Rcaron Ohungarumlaut -20 +KPX Rcaron Omacron -20 +KPX Rcaron Oslash -20 +KPX Rcaron Otilde -20 +KPX Rcaron T -30 +KPX Rcaron Tcaron -30 +KPX Rcaron Tcommaaccent -30 +KPX Rcaron U -40 +KPX Rcaron Uacute -40 +KPX Rcaron Ucircumflex -40 +KPX Rcaron Udieresis -40 +KPX Rcaron Ugrave -40 +KPX Rcaron Uhungarumlaut -40 +KPX Rcaron Umacron -40 +KPX Rcaron Uogonek -40 +KPX Rcaron Uring -40 +KPX Rcaron V -50 +KPX Rcaron W -30 +KPX Rcaron Y -50 +KPX Rcaron Yacute -50 +KPX Rcaron Ydieresis -50 +KPX Rcommaaccent O -20 +KPX Rcommaaccent Oacute -20 +KPX Rcommaaccent Ocircumflex -20 +KPX Rcommaaccent Odieresis -20 +KPX Rcommaaccent Ograve -20 +KPX Rcommaaccent Ohungarumlaut -20 +KPX Rcommaaccent Omacron -20 +KPX Rcommaaccent Oslash -20 +KPX Rcommaaccent Otilde -20 +KPX Rcommaaccent T -30 +KPX Rcommaaccent Tcaron -30 +KPX Rcommaaccent Tcommaaccent -30 +KPX Rcommaaccent U -40 +KPX Rcommaaccent Uacute -40 +KPX Rcommaaccent Ucircumflex -40 +KPX Rcommaaccent Udieresis -40 +KPX Rcommaaccent Ugrave -40 +KPX Rcommaaccent Uhungarumlaut -40 +KPX Rcommaaccent Umacron -40 +KPX Rcommaaccent Uogonek -40 +KPX Rcommaaccent Uring -40 +KPX Rcommaaccent V -50 +KPX Rcommaaccent W -30 +KPX Rcommaaccent Y -50 +KPX Rcommaaccent Yacute -50 +KPX Rcommaaccent Ydieresis -50 +KPX S comma -20 +KPX S period -20 +KPX Sacute comma -20 +KPX Sacute period -20 +KPX Scaron comma -20 +KPX Scaron period -20 +KPX Scedilla comma -20 +KPX Scedilla period -20 +KPX Scommaaccent comma -20 +KPX Scommaaccent period -20 +KPX T A -120 +KPX T Aacute -120 +KPX T Abreve -120 +KPX T Acircumflex -120 +KPX T Adieresis -120 +KPX T Agrave -120 +KPX T Amacron -120 +KPX T Aogonek -120 +KPX T Aring -120 +KPX T Atilde -120 +KPX T O -40 +KPX T Oacute -40 +KPX T Ocircumflex -40 +KPX T Odieresis -40 +KPX T Ograve -40 +KPX T Ohungarumlaut -40 +KPX T Omacron -40 +KPX T Oslash -40 +KPX T Otilde -40 +KPX T a -120 +KPX T aacute -120 +KPX T abreve -60 +KPX T acircumflex -120 +KPX T adieresis -120 +KPX T agrave -120 +KPX T amacron -60 +KPX T aogonek -120 +KPX T aring -120 +KPX T atilde -60 +KPX T colon -20 +KPX T comma -120 +KPX T e -120 +KPX T eacute -120 +KPX T ecaron -120 +KPX T ecircumflex -120 +KPX T edieresis -120 +KPX T edotaccent -120 +KPX T egrave -60 +KPX T emacron -60 +KPX T eogonek -120 +KPX T hyphen -140 +KPX T o -120 +KPX T oacute -120 +KPX T ocircumflex -120 +KPX T odieresis -120 +KPX T ograve -120 +KPX T ohungarumlaut -120 +KPX T omacron -60 +KPX T oslash -120 +KPX T otilde -60 +KPX T period -120 +KPX T r -120 +KPX T racute -120 +KPX T rcaron -120 +KPX T rcommaaccent -120 +KPX T semicolon -20 +KPX T u -120 +KPX T uacute -120 +KPX T ucircumflex -120 +KPX T udieresis -120 +KPX T ugrave -120 +KPX T uhungarumlaut -120 +KPX T umacron -60 +KPX T uogonek -120 +KPX T uring -120 +KPX T w -120 +KPX T y -120 +KPX T yacute -120 +KPX T ydieresis -60 +KPX Tcaron A -120 +KPX Tcaron Aacute -120 +KPX Tcaron Abreve -120 +KPX Tcaron Acircumflex -120 +KPX Tcaron Adieresis -120 +KPX Tcaron Agrave -120 +KPX Tcaron Amacron -120 +KPX Tcaron Aogonek -120 +KPX Tcaron Aring -120 +KPX Tcaron Atilde -120 +KPX Tcaron O -40 +KPX Tcaron Oacute -40 +KPX Tcaron Ocircumflex -40 +KPX Tcaron Odieresis -40 +KPX Tcaron Ograve -40 +KPX Tcaron Ohungarumlaut -40 +KPX Tcaron Omacron -40 +KPX Tcaron Oslash -40 +KPX Tcaron Otilde -40 +KPX Tcaron a -120 +KPX Tcaron aacute -120 +KPX Tcaron abreve -60 +KPX Tcaron acircumflex -120 +KPX Tcaron adieresis -120 +KPX Tcaron agrave -120 +KPX Tcaron amacron -60 +KPX Tcaron aogonek -120 +KPX Tcaron aring -120 +KPX Tcaron atilde -60 +KPX Tcaron colon -20 +KPX Tcaron comma -120 +KPX Tcaron e -120 +KPX Tcaron eacute -120 +KPX Tcaron ecaron -120 +KPX Tcaron ecircumflex -120 +KPX Tcaron edieresis -120 +KPX Tcaron edotaccent -120 +KPX Tcaron egrave -60 +KPX Tcaron emacron -60 +KPX Tcaron eogonek -120 +KPX Tcaron hyphen -140 +KPX Tcaron o -120 +KPX Tcaron oacute -120 +KPX Tcaron ocircumflex -120 +KPX Tcaron odieresis -120 +KPX Tcaron ograve -120 +KPX Tcaron ohungarumlaut -120 +KPX Tcaron omacron -60 +KPX Tcaron oslash -120 +KPX Tcaron otilde -60 +KPX Tcaron period -120 +KPX Tcaron r -120 +KPX Tcaron racute -120 +KPX Tcaron rcaron -120 +KPX Tcaron rcommaaccent -120 +KPX Tcaron semicolon -20 +KPX Tcaron u -120 +KPX Tcaron uacute -120 +KPX Tcaron ucircumflex -120 +KPX Tcaron udieresis -120 +KPX Tcaron ugrave -120 +KPX Tcaron uhungarumlaut -120 +KPX Tcaron umacron -60 +KPX Tcaron uogonek -120 +KPX Tcaron uring -120 +KPX Tcaron w -120 +KPX Tcaron y -120 +KPX Tcaron yacute -120 +KPX Tcaron ydieresis -60 +KPX Tcommaaccent A -120 +KPX Tcommaaccent Aacute -120 +KPX Tcommaaccent Abreve -120 +KPX Tcommaaccent Acircumflex -120 +KPX Tcommaaccent Adieresis -120 +KPX Tcommaaccent Agrave -120 +KPX Tcommaaccent Amacron -120 +KPX Tcommaaccent Aogonek -120 +KPX Tcommaaccent Aring -120 +KPX Tcommaaccent Atilde -120 +KPX Tcommaaccent O -40 +KPX Tcommaaccent Oacute -40 +KPX Tcommaaccent Ocircumflex -40 +KPX Tcommaaccent Odieresis -40 +KPX Tcommaaccent Ograve -40 +KPX Tcommaaccent Ohungarumlaut -40 +KPX Tcommaaccent Omacron -40 +KPX Tcommaaccent Oslash -40 +KPX Tcommaaccent Otilde -40 +KPX Tcommaaccent a -120 +KPX Tcommaaccent aacute -120 +KPX Tcommaaccent abreve -60 +KPX Tcommaaccent acircumflex -120 +KPX Tcommaaccent adieresis -120 +KPX Tcommaaccent agrave -120 +KPX Tcommaaccent amacron -60 +KPX Tcommaaccent aogonek -120 +KPX Tcommaaccent aring -120 +KPX Tcommaaccent atilde -60 +KPX Tcommaaccent colon -20 +KPX Tcommaaccent comma -120 +KPX Tcommaaccent e -120 +KPX Tcommaaccent eacute -120 +KPX Tcommaaccent ecaron -120 +KPX Tcommaaccent ecircumflex -120 +KPX Tcommaaccent edieresis -120 +KPX Tcommaaccent edotaccent -120 +KPX Tcommaaccent egrave -60 +KPX Tcommaaccent emacron -60 +KPX Tcommaaccent eogonek -120 +KPX Tcommaaccent hyphen -140 +KPX Tcommaaccent o -120 +KPX Tcommaaccent oacute -120 +KPX Tcommaaccent ocircumflex -120 +KPX Tcommaaccent odieresis -120 +KPX Tcommaaccent ograve -120 +KPX Tcommaaccent ohungarumlaut -120 +KPX Tcommaaccent omacron -60 +KPX Tcommaaccent oslash -120 +KPX Tcommaaccent otilde -60 +KPX Tcommaaccent period -120 +KPX Tcommaaccent r -120 +KPX Tcommaaccent racute -120 +KPX Tcommaaccent rcaron -120 +KPX Tcommaaccent rcommaaccent -120 +KPX Tcommaaccent semicolon -20 +KPX Tcommaaccent u -120 +KPX Tcommaaccent uacute -120 +KPX Tcommaaccent ucircumflex -120 +KPX Tcommaaccent udieresis -120 +KPX Tcommaaccent ugrave -120 +KPX Tcommaaccent uhungarumlaut -120 +KPX Tcommaaccent umacron -60 +KPX Tcommaaccent uogonek -120 +KPX Tcommaaccent uring -120 +KPX Tcommaaccent w -120 +KPX Tcommaaccent y -120 +KPX Tcommaaccent yacute -120 +KPX Tcommaaccent ydieresis -60 +KPX U A -40 +KPX U Aacute -40 +KPX U Abreve -40 +KPX U Acircumflex -40 +KPX U Adieresis -40 +KPX U Agrave -40 +KPX U Amacron -40 +KPX U Aogonek -40 +KPX U Aring -40 +KPX U Atilde -40 +KPX U comma -40 +KPX U period -40 +KPX Uacute A -40 +KPX Uacute Aacute -40 +KPX Uacute Abreve -40 +KPX Uacute Acircumflex -40 +KPX Uacute Adieresis -40 +KPX Uacute Agrave -40 +KPX Uacute Amacron -40 +KPX Uacute Aogonek -40 +KPX Uacute Aring -40 +KPX Uacute Atilde -40 +KPX Uacute comma -40 +KPX Uacute period -40 +KPX Ucircumflex A -40 +KPX Ucircumflex Aacute -40 +KPX Ucircumflex Abreve -40 +KPX Ucircumflex Acircumflex -40 +KPX Ucircumflex Adieresis -40 +KPX Ucircumflex Agrave -40 +KPX Ucircumflex Amacron -40 +KPX Ucircumflex Aogonek -40 +KPX Ucircumflex Aring -40 +KPX Ucircumflex Atilde -40 +KPX Ucircumflex comma -40 +KPX Ucircumflex period -40 +KPX Udieresis A -40 +KPX Udieresis Aacute -40 +KPX Udieresis Abreve -40 +KPX Udieresis Acircumflex -40 +KPX Udieresis Adieresis -40 +KPX Udieresis Agrave -40 +KPX Udieresis Amacron -40 +KPX Udieresis Aogonek -40 +KPX Udieresis Aring -40 +KPX Udieresis Atilde -40 +KPX Udieresis comma -40 +KPX Udieresis period -40 +KPX Ugrave A -40 +KPX Ugrave Aacute -40 +KPX Ugrave Abreve -40 +KPX Ugrave Acircumflex -40 +KPX Ugrave Adieresis -40 +KPX Ugrave Agrave -40 +KPX Ugrave Amacron -40 +KPX Ugrave Aogonek -40 +KPX Ugrave Aring -40 +KPX Ugrave Atilde -40 +KPX Ugrave comma -40 +KPX Ugrave period -40 +KPX Uhungarumlaut A -40 +KPX Uhungarumlaut Aacute -40 +KPX Uhungarumlaut Abreve -40 +KPX Uhungarumlaut Acircumflex -40 +KPX Uhungarumlaut Adieresis -40 +KPX Uhungarumlaut Agrave -40 +KPX Uhungarumlaut Amacron -40 +KPX Uhungarumlaut Aogonek -40 +KPX Uhungarumlaut Aring -40 +KPX Uhungarumlaut Atilde -40 +KPX Uhungarumlaut comma -40 +KPX Uhungarumlaut period -40 +KPX Umacron A -40 +KPX Umacron Aacute -40 +KPX Umacron Abreve -40 +KPX Umacron Acircumflex -40 +KPX Umacron Adieresis -40 +KPX Umacron Agrave -40 +KPX Umacron Amacron -40 +KPX Umacron Aogonek -40 +KPX Umacron Aring -40 +KPX Umacron Atilde -40 +KPX Umacron comma -40 +KPX Umacron period -40 +KPX Uogonek A -40 +KPX Uogonek Aacute -40 +KPX Uogonek Abreve -40 +KPX Uogonek Acircumflex -40 +KPX Uogonek Adieresis -40 +KPX Uogonek Agrave -40 +KPX Uogonek Amacron -40 +KPX Uogonek Aogonek -40 +KPX Uogonek Aring -40 +KPX Uogonek Atilde -40 +KPX Uogonek comma -40 +KPX Uogonek period -40 +KPX Uring A -40 +KPX Uring Aacute -40 +KPX Uring Abreve -40 +KPX Uring Acircumflex -40 +KPX Uring Adieresis -40 +KPX Uring Agrave -40 +KPX Uring Amacron -40 +KPX Uring Aogonek -40 +KPX Uring Aring -40 +KPX Uring Atilde -40 +KPX Uring comma -40 +KPX Uring period -40 +KPX V A -80 +KPX V Aacute -80 +KPX V Abreve -80 +KPX V Acircumflex -80 +KPX V Adieresis -80 +KPX V Agrave -80 +KPX V Amacron -80 +KPX V Aogonek -80 +KPX V Aring -80 +KPX V Atilde -80 +KPX V G -40 +KPX V Gbreve -40 +KPX V Gcommaaccent -40 +KPX V O -40 +KPX V Oacute -40 +KPX V Ocircumflex -40 +KPX V Odieresis -40 +KPX V Ograve -40 +KPX V Ohungarumlaut -40 +KPX V Omacron -40 +KPX V Oslash -40 +KPX V Otilde -40 +KPX V a -70 +KPX V aacute -70 +KPX V abreve -70 +KPX V acircumflex -70 +KPX V adieresis -70 +KPX V agrave -70 +KPX V amacron -70 +KPX V aogonek -70 +KPX V aring -70 +KPX V atilde -70 +KPX V colon -40 +KPX V comma -125 +KPX V e -80 +KPX V eacute -80 +KPX V ecaron -80 +KPX V ecircumflex -80 +KPX V edieresis -80 +KPX V edotaccent -80 +KPX V egrave -80 +KPX V emacron -80 +KPX V eogonek -80 +KPX V hyphen -80 +KPX V o -80 +KPX V oacute -80 +KPX V ocircumflex -80 +KPX V odieresis -80 +KPX V ograve -80 +KPX V ohungarumlaut -80 +KPX V omacron -80 +KPX V oslash -80 +KPX V otilde -80 +KPX V period -125 +KPX V semicolon -40 +KPX V u -70 +KPX V uacute -70 +KPX V ucircumflex -70 +KPX V udieresis -70 +KPX V ugrave -70 +KPX V uhungarumlaut -70 +KPX V umacron -70 +KPX V uogonek -70 +KPX V uring -70 +KPX W A -50 +KPX W Aacute -50 +KPX W Abreve -50 +KPX W Acircumflex -50 +KPX W Adieresis -50 +KPX W Agrave -50 +KPX W Amacron -50 +KPX W Aogonek -50 +KPX W Aring -50 +KPX W Atilde -50 +KPX W O -20 +KPX W Oacute -20 +KPX W Ocircumflex -20 +KPX W Odieresis -20 +KPX W Ograve -20 +KPX W Ohungarumlaut -20 +KPX W Omacron -20 +KPX W Oslash -20 +KPX W Otilde -20 +KPX W a -40 +KPX W aacute -40 +KPX W abreve -40 +KPX W acircumflex -40 +KPX W adieresis -40 +KPX W agrave -40 +KPX W amacron -40 +KPX W aogonek -40 +KPX W aring -40 +KPX W atilde -40 +KPX W comma -80 +KPX W e -30 +KPX W eacute -30 +KPX W ecaron -30 +KPX W ecircumflex -30 +KPX W edieresis -30 +KPX W edotaccent -30 +KPX W egrave -30 +KPX W emacron -30 +KPX W eogonek -30 +KPX W hyphen -40 +KPX W o -30 +KPX W oacute -30 +KPX W ocircumflex -30 +KPX W odieresis -30 +KPX W ograve -30 +KPX W ohungarumlaut -30 +KPX W omacron -30 +KPX W oslash -30 +KPX W otilde -30 +KPX W period -80 +KPX W u -30 +KPX W uacute -30 +KPX W ucircumflex -30 +KPX W udieresis -30 +KPX W ugrave -30 +KPX W uhungarumlaut -30 +KPX W umacron -30 +KPX W uogonek -30 +KPX W uring -30 +KPX W y -20 +KPX W yacute -20 +KPX W ydieresis -20 +KPX Y A -110 +KPX Y Aacute -110 +KPX Y Abreve -110 +KPX Y Acircumflex -110 +KPX Y Adieresis -110 +KPX Y Agrave -110 +KPX Y Amacron -110 +KPX Y Aogonek -110 +KPX Y Aring -110 +KPX Y Atilde -110 +KPX Y O -85 +KPX Y Oacute -85 +KPX Y Ocircumflex -85 +KPX Y Odieresis -85 +KPX Y Ograve -85 +KPX Y Ohungarumlaut -85 +KPX Y Omacron -85 +KPX Y Oslash -85 +KPX Y Otilde -85 +KPX Y a -140 +KPX Y aacute -140 +KPX Y abreve -70 +KPX Y acircumflex -140 +KPX Y adieresis -140 +KPX Y agrave -140 +KPX Y amacron -70 +KPX Y aogonek -140 +KPX Y aring -140 +KPX Y atilde -140 +KPX Y colon -60 +KPX Y comma -140 +KPX Y e -140 +KPX Y eacute -140 +KPX Y ecaron -140 +KPX Y ecircumflex -140 +KPX Y edieresis -140 +KPX Y edotaccent -140 +KPX Y egrave -140 +KPX Y emacron -70 +KPX Y eogonek -140 +KPX Y hyphen -140 +KPX Y i -20 +KPX Y iacute -20 +KPX Y iogonek -20 +KPX Y o -140 +KPX Y oacute -140 +KPX Y ocircumflex -140 +KPX Y odieresis -140 +KPX Y ograve -140 +KPX Y ohungarumlaut -140 +KPX Y omacron -140 +KPX Y oslash -140 +KPX Y otilde -140 +KPX Y period -140 +KPX Y semicolon -60 +KPX Y u -110 +KPX Y uacute -110 +KPX Y ucircumflex -110 +KPX Y udieresis -110 +KPX Y ugrave -110 +KPX Y uhungarumlaut -110 +KPX Y umacron -110 +KPX Y uogonek -110 +KPX Y uring -110 +KPX Yacute A -110 +KPX Yacute Aacute -110 +KPX Yacute Abreve -110 +KPX Yacute Acircumflex -110 +KPX Yacute Adieresis -110 +KPX Yacute Agrave -110 +KPX Yacute Amacron -110 +KPX Yacute Aogonek -110 +KPX Yacute Aring -110 +KPX Yacute Atilde -110 +KPX Yacute O -85 +KPX Yacute Oacute -85 +KPX Yacute Ocircumflex -85 +KPX Yacute Odieresis -85 +KPX Yacute Ograve -85 +KPX Yacute Ohungarumlaut -85 +KPX Yacute Omacron -85 +KPX Yacute Oslash -85 +KPX Yacute Otilde -85 +KPX Yacute a -140 +KPX Yacute aacute -140 +KPX Yacute abreve -70 +KPX Yacute acircumflex -140 +KPX Yacute adieresis -140 +KPX Yacute agrave -140 +KPX Yacute amacron -70 +KPX Yacute aogonek -140 +KPX Yacute aring -140 +KPX Yacute atilde -70 +KPX Yacute colon -60 +KPX Yacute comma -140 +KPX Yacute e -140 +KPX Yacute eacute -140 +KPX Yacute ecaron -140 +KPX Yacute ecircumflex -140 +KPX Yacute edieresis -140 +KPX Yacute edotaccent -140 +KPX Yacute egrave -140 +KPX Yacute emacron -70 +KPX Yacute eogonek -140 +KPX Yacute hyphen -140 +KPX Yacute i -20 +KPX Yacute iacute -20 +KPX Yacute iogonek -20 +KPX Yacute o -140 +KPX Yacute oacute -140 +KPX Yacute ocircumflex -140 +KPX Yacute odieresis -140 +KPX Yacute ograve -140 +KPX Yacute ohungarumlaut -140 +KPX Yacute omacron -70 +KPX Yacute oslash -140 +KPX Yacute otilde -140 +KPX Yacute period -140 +KPX Yacute semicolon -60 +KPX Yacute u -110 +KPX Yacute uacute -110 +KPX Yacute ucircumflex -110 +KPX Yacute udieresis -110 +KPX Yacute ugrave -110 +KPX Yacute uhungarumlaut -110 +KPX Yacute umacron -110 +KPX Yacute uogonek -110 +KPX Yacute uring -110 +KPX Ydieresis A -110 +KPX Ydieresis Aacute -110 +KPX Ydieresis Abreve -110 +KPX Ydieresis Acircumflex -110 +KPX Ydieresis Adieresis -110 +KPX Ydieresis Agrave -110 +KPX Ydieresis Amacron -110 +KPX Ydieresis Aogonek -110 +KPX Ydieresis Aring -110 +KPX Ydieresis Atilde -110 +KPX Ydieresis O -85 +KPX Ydieresis Oacute -85 +KPX Ydieresis Ocircumflex -85 +KPX Ydieresis Odieresis -85 +KPX Ydieresis Ograve -85 +KPX Ydieresis Ohungarumlaut -85 +KPX Ydieresis Omacron -85 +KPX Ydieresis Oslash -85 +KPX Ydieresis Otilde -85 +KPX Ydieresis a -140 +KPX Ydieresis aacute -140 +KPX Ydieresis abreve -70 +KPX Ydieresis acircumflex -140 +KPX Ydieresis adieresis -140 +KPX Ydieresis agrave -140 +KPX Ydieresis amacron -70 +KPX Ydieresis aogonek -140 +KPX Ydieresis aring -140 +KPX Ydieresis atilde -70 +KPX Ydieresis colon -60 +KPX Ydieresis comma -140 +KPX Ydieresis e -140 +KPX Ydieresis eacute -140 +KPX Ydieresis ecaron -140 +KPX Ydieresis ecircumflex -140 +KPX Ydieresis edieresis -140 +KPX Ydieresis edotaccent -140 +KPX Ydieresis egrave -140 +KPX Ydieresis emacron -70 +KPX Ydieresis eogonek -140 +KPX Ydieresis hyphen -140 +KPX Ydieresis i -20 +KPX Ydieresis iacute -20 +KPX Ydieresis iogonek -20 +KPX Ydieresis o -140 +KPX Ydieresis oacute -140 +KPX Ydieresis ocircumflex -140 +KPX Ydieresis odieresis -140 +KPX Ydieresis ograve -140 +KPX Ydieresis ohungarumlaut -140 +KPX Ydieresis omacron -140 +KPX Ydieresis oslash -140 +KPX Ydieresis otilde -140 +KPX Ydieresis period -140 +KPX Ydieresis semicolon -60 +KPX Ydieresis u -110 +KPX Ydieresis uacute -110 +KPX Ydieresis ucircumflex -110 +KPX Ydieresis udieresis -110 +KPX Ydieresis ugrave -110 +KPX Ydieresis uhungarumlaut -110 +KPX Ydieresis umacron -110 +KPX Ydieresis uogonek -110 +KPX Ydieresis uring -110 +KPX a v -20 +KPX a w -20 +KPX a y -30 +KPX a yacute -30 +KPX a ydieresis -30 +KPX aacute v -20 +KPX aacute w -20 +KPX aacute y -30 +KPX aacute yacute -30 +KPX aacute ydieresis -30 +KPX abreve v -20 +KPX abreve w -20 +KPX abreve y -30 +KPX abreve yacute -30 +KPX abreve ydieresis -30 +KPX acircumflex v -20 +KPX acircumflex w -20 +KPX acircumflex y -30 +KPX acircumflex yacute -30 +KPX acircumflex ydieresis -30 +KPX adieresis v -20 +KPX adieresis w -20 +KPX adieresis y -30 +KPX adieresis yacute -30 +KPX adieresis ydieresis -30 +KPX agrave v -20 +KPX agrave w -20 +KPX agrave y -30 +KPX agrave yacute -30 +KPX agrave ydieresis -30 +KPX amacron v -20 +KPX amacron w -20 +KPX amacron y -30 +KPX amacron yacute -30 +KPX amacron ydieresis -30 +KPX aogonek v -20 +KPX aogonek w -20 +KPX aogonek y -30 +KPX aogonek yacute -30 +KPX aogonek ydieresis -30 +KPX aring v -20 +KPX aring w -20 +KPX aring y -30 +KPX aring yacute -30 +KPX aring ydieresis -30 +KPX atilde v -20 +KPX atilde w -20 +KPX atilde y -30 +KPX atilde yacute -30 +KPX atilde ydieresis -30 +KPX b b -10 +KPX b comma -40 +KPX b l -20 +KPX b lacute -20 +KPX b lcommaaccent -20 +KPX b lslash -20 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -20 +KPX b y -20 +KPX b yacute -20 +KPX b ydieresis -20 +KPX c comma -15 +KPX c k -20 +KPX c kcommaaccent -20 +KPX cacute comma -15 +KPX cacute k -20 +KPX cacute kcommaaccent -20 +KPX ccaron comma -15 +KPX ccaron k -20 +KPX ccaron kcommaaccent -20 +KPX ccedilla comma -15 +KPX ccedilla k -20 +KPX ccedilla kcommaaccent -20 +KPX colon space -50 +KPX comma quotedblright -100 +KPX comma quoteright -100 +KPX e comma -15 +KPX e period -15 +KPX e v -30 +KPX e w -20 +KPX e x -30 +KPX e y -20 +KPX e yacute -20 +KPX e ydieresis -20 +KPX eacute comma -15 +KPX eacute period -15 +KPX eacute v -30 +KPX eacute w -20 +KPX eacute x -30 +KPX eacute y -20 +KPX eacute yacute -20 +KPX eacute ydieresis -20 +KPX ecaron comma -15 +KPX ecaron period -15 +KPX ecaron v -30 +KPX ecaron w -20 +KPX ecaron x -30 +KPX ecaron y -20 +KPX ecaron yacute -20 +KPX ecaron ydieresis -20 +KPX ecircumflex comma -15 +KPX ecircumflex period -15 +KPX ecircumflex v -30 +KPX ecircumflex w -20 +KPX ecircumflex x -30 +KPX ecircumflex y -20 +KPX ecircumflex yacute -20 +KPX ecircumflex ydieresis -20 +KPX edieresis comma -15 +KPX edieresis period -15 +KPX edieresis v -30 +KPX edieresis w -20 +KPX edieresis x -30 +KPX edieresis y -20 +KPX edieresis yacute -20 +KPX edieresis ydieresis -20 +KPX edotaccent comma -15 +KPX edotaccent period -15 +KPX edotaccent v -30 +KPX edotaccent w -20 +KPX edotaccent x -30 +KPX edotaccent y -20 +KPX edotaccent yacute -20 +KPX edotaccent ydieresis -20 +KPX egrave comma -15 +KPX egrave period -15 +KPX egrave v -30 +KPX egrave w -20 +KPX egrave x -30 +KPX egrave y -20 +KPX egrave yacute -20 +KPX egrave ydieresis -20 +KPX emacron comma -15 +KPX emacron period -15 +KPX emacron v -30 +KPX emacron w -20 +KPX emacron x -30 +KPX emacron y -20 +KPX emacron yacute -20 +KPX emacron ydieresis -20 +KPX eogonek comma -15 +KPX eogonek period -15 +KPX eogonek v -30 +KPX eogonek w -20 +KPX eogonek x -30 +KPX eogonek y -20 +KPX eogonek yacute -20 +KPX eogonek ydieresis -20 +KPX f a -30 +KPX f aacute -30 +KPX f abreve -30 +KPX f acircumflex -30 +KPX f adieresis -30 +KPX f agrave -30 +KPX f amacron -30 +KPX f aogonek -30 +KPX f aring -30 +KPX f atilde -30 +KPX f comma -30 +KPX f dotlessi -28 +KPX f e -30 +KPX f eacute -30 +KPX f ecaron -30 +KPX f ecircumflex -30 +KPX f edieresis -30 +KPX f edotaccent -30 +KPX f egrave -30 +KPX f emacron -30 +KPX f eogonek -30 +KPX f o -30 +KPX f oacute -30 +KPX f ocircumflex -30 +KPX f odieresis -30 +KPX f ograve -30 +KPX f ohungarumlaut -30 +KPX f omacron -30 +KPX f oslash -30 +KPX f otilde -30 +KPX f period -30 +KPX f quotedblright 60 +KPX f quoteright 50 +KPX g r -10 +KPX g racute -10 +KPX g rcaron -10 +KPX g rcommaaccent -10 +KPX gbreve r -10 +KPX gbreve racute -10 +KPX gbreve rcaron -10 +KPX gbreve rcommaaccent -10 +KPX gcommaaccent r -10 +KPX gcommaaccent racute -10 +KPX gcommaaccent rcaron -10 +KPX gcommaaccent rcommaaccent -10 +KPX h y -30 +KPX h yacute -30 +KPX h ydieresis -30 +KPX k e -20 +KPX k eacute -20 +KPX k ecaron -20 +KPX k ecircumflex -20 +KPX k edieresis -20 +KPX k edotaccent -20 +KPX k egrave -20 +KPX k emacron -20 +KPX k eogonek -20 +KPX k o -20 +KPX k oacute -20 +KPX k ocircumflex -20 +KPX k odieresis -20 +KPX k ograve -20 +KPX k ohungarumlaut -20 +KPX k omacron -20 +KPX k oslash -20 +KPX k otilde -20 +KPX kcommaaccent e -20 +KPX kcommaaccent eacute -20 +KPX kcommaaccent ecaron -20 +KPX kcommaaccent ecircumflex -20 +KPX kcommaaccent edieresis -20 +KPX kcommaaccent edotaccent -20 +KPX kcommaaccent egrave -20 +KPX kcommaaccent emacron -20 +KPX kcommaaccent eogonek -20 +KPX kcommaaccent o -20 +KPX kcommaaccent oacute -20 +KPX kcommaaccent ocircumflex -20 +KPX kcommaaccent odieresis -20 +KPX kcommaaccent ograve -20 +KPX kcommaaccent ohungarumlaut -20 +KPX kcommaaccent omacron -20 +KPX kcommaaccent oslash -20 +KPX kcommaaccent otilde -20 +KPX m u -10 +KPX m uacute -10 +KPX m ucircumflex -10 +KPX m udieresis -10 +KPX m ugrave -10 +KPX m uhungarumlaut -10 +KPX m umacron -10 +KPX m uogonek -10 +KPX m uring -10 +KPX m y -15 +KPX m yacute -15 +KPX m ydieresis -15 +KPX n u -10 +KPX n uacute -10 +KPX n ucircumflex -10 +KPX n udieresis -10 +KPX n ugrave -10 +KPX n uhungarumlaut -10 +KPX n umacron -10 +KPX n uogonek -10 +KPX n uring -10 +KPX n v -20 +KPX n y -15 +KPX n yacute -15 +KPX n ydieresis -15 +KPX nacute u -10 +KPX nacute uacute -10 +KPX nacute ucircumflex -10 +KPX nacute udieresis -10 +KPX nacute ugrave -10 +KPX nacute uhungarumlaut -10 +KPX nacute umacron -10 +KPX nacute uogonek -10 +KPX nacute uring -10 +KPX nacute v -20 +KPX nacute y -15 +KPX nacute yacute -15 +KPX nacute ydieresis -15 +KPX ncaron u -10 +KPX ncaron uacute -10 +KPX ncaron ucircumflex -10 +KPX ncaron udieresis -10 +KPX ncaron ugrave -10 +KPX ncaron uhungarumlaut -10 +KPX ncaron umacron -10 +KPX ncaron uogonek -10 +KPX ncaron uring -10 +KPX ncaron v -20 +KPX ncaron y -15 +KPX ncaron yacute -15 +KPX ncaron ydieresis -15 +KPX ncommaaccent u -10 +KPX ncommaaccent uacute -10 +KPX ncommaaccent ucircumflex -10 +KPX ncommaaccent udieresis -10 +KPX ncommaaccent ugrave -10 +KPX ncommaaccent uhungarumlaut -10 +KPX ncommaaccent umacron -10 +KPX ncommaaccent uogonek -10 +KPX ncommaaccent uring -10 +KPX ncommaaccent v -20 +KPX ncommaaccent y -15 +KPX ncommaaccent yacute -15 +KPX ncommaaccent ydieresis -15 +KPX ntilde u -10 +KPX ntilde uacute -10 +KPX ntilde ucircumflex -10 +KPX ntilde udieresis -10 +KPX ntilde ugrave -10 +KPX ntilde uhungarumlaut -10 +KPX ntilde umacron -10 +KPX ntilde uogonek -10 +KPX ntilde uring -10 +KPX ntilde v -20 +KPX ntilde y -15 +KPX ntilde yacute -15 +KPX ntilde ydieresis -15 +KPX o comma -40 +KPX o period -40 +KPX o v -15 +KPX o w -15 +KPX o x -30 +KPX o y -30 +KPX o yacute -30 +KPX o ydieresis -30 +KPX oacute comma -40 +KPX oacute period -40 +KPX oacute v -15 +KPX oacute w -15 +KPX oacute x -30 +KPX oacute y -30 +KPX oacute yacute -30 +KPX oacute ydieresis -30 +KPX ocircumflex comma -40 +KPX ocircumflex period -40 +KPX ocircumflex v -15 +KPX ocircumflex w -15 +KPX ocircumflex x -30 +KPX ocircumflex y -30 +KPX ocircumflex yacute -30 +KPX ocircumflex ydieresis -30 +KPX odieresis comma -40 +KPX odieresis period -40 +KPX odieresis v -15 +KPX odieresis w -15 +KPX odieresis x -30 +KPX odieresis y -30 +KPX odieresis yacute -30 +KPX odieresis ydieresis -30 +KPX ograve comma -40 +KPX ograve period -40 +KPX ograve v -15 +KPX ograve w -15 +KPX ograve x -30 +KPX ograve y -30 +KPX ograve yacute -30 +KPX ograve ydieresis -30 +KPX ohungarumlaut comma -40 +KPX ohungarumlaut period -40 +KPX ohungarumlaut v -15 +KPX ohungarumlaut w -15 +KPX ohungarumlaut x -30 +KPX ohungarumlaut y -30 +KPX ohungarumlaut yacute -30 +KPX ohungarumlaut ydieresis -30 +KPX omacron comma -40 +KPX omacron period -40 +KPX omacron v -15 +KPX omacron w -15 +KPX omacron x -30 +KPX omacron y -30 +KPX omacron yacute -30 +KPX omacron ydieresis -30 +KPX oslash a -55 +KPX oslash aacute -55 +KPX oslash abreve -55 +KPX oslash acircumflex -55 +KPX oslash adieresis -55 +KPX oslash agrave -55 +KPX oslash amacron -55 +KPX oslash aogonek -55 +KPX oslash aring -55 +KPX oslash atilde -55 +KPX oslash b -55 +KPX oslash c -55 +KPX oslash cacute -55 +KPX oslash ccaron -55 +KPX oslash ccedilla -55 +KPX oslash comma -95 +KPX oslash d -55 +KPX oslash dcroat -55 +KPX oslash e -55 +KPX oslash eacute -55 +KPX oslash ecaron -55 +KPX oslash ecircumflex -55 +KPX oslash edieresis -55 +KPX oslash edotaccent -55 +KPX oslash egrave -55 +KPX oslash emacron -55 +KPX oslash eogonek -55 +KPX oslash f -55 +KPX oslash g -55 +KPX oslash gbreve -55 +KPX oslash gcommaaccent -55 +KPX oslash h -55 +KPX oslash i -55 +KPX oslash iacute -55 +KPX oslash icircumflex -55 +KPX oslash idieresis -55 +KPX oslash igrave -55 +KPX oslash imacron -55 +KPX oslash iogonek -55 +KPX oslash j -55 +KPX oslash k -55 +KPX oslash kcommaaccent -55 +KPX oslash l -55 +KPX oslash lacute -55 +KPX oslash lcommaaccent -55 +KPX oslash lslash -55 +KPX oslash m -55 +KPX oslash n -55 +KPX oslash nacute -55 +KPX oslash ncaron -55 +KPX oslash ncommaaccent -55 +KPX oslash ntilde -55 +KPX oslash o -55 +KPX oslash oacute -55 +KPX oslash ocircumflex -55 +KPX oslash odieresis -55 +KPX oslash ograve -55 +KPX oslash ohungarumlaut -55 +KPX oslash omacron -55 +KPX oslash oslash -55 +KPX oslash otilde -55 +KPX oslash p -55 +KPX oslash period -95 +KPX oslash q -55 +KPX oslash r -55 +KPX oslash racute -55 +KPX oslash rcaron -55 +KPX oslash rcommaaccent -55 +KPX oslash s -55 +KPX oslash sacute -55 +KPX oslash scaron -55 +KPX oslash scedilla -55 +KPX oslash scommaaccent -55 +KPX oslash t -55 +KPX oslash tcommaaccent -55 +KPX oslash u -55 +KPX oslash uacute -55 +KPX oslash ucircumflex -55 +KPX oslash udieresis -55 +KPX oslash ugrave -55 +KPX oslash uhungarumlaut -55 +KPX oslash umacron -55 +KPX oslash uogonek -55 +KPX oslash uring -55 +KPX oslash v -70 +KPX oslash w -70 +KPX oslash x -85 +KPX oslash y -70 +KPX oslash yacute -70 +KPX oslash ydieresis -70 +KPX oslash z -55 +KPX oslash zacute -55 +KPX oslash zcaron -55 +KPX oslash zdotaccent -55 +KPX otilde comma -40 +KPX otilde period -40 +KPX otilde v -15 +KPX otilde w -15 +KPX otilde x -30 +KPX otilde y -30 +KPX otilde yacute -30 +KPX otilde ydieresis -30 +KPX p comma -35 +KPX p period -35 +KPX p y -30 +KPX p yacute -30 +KPX p ydieresis -30 +KPX period quotedblright -100 +KPX period quoteright -100 +KPX period space -60 +KPX quotedblright space -40 +KPX quoteleft quoteleft -57 +KPX quoteright d -50 +KPX quoteright dcroat -50 +KPX quoteright quoteright -57 +KPX quoteright r -50 +KPX quoteright racute -50 +KPX quoteright rcaron -50 +KPX quoteright rcommaaccent -50 +KPX quoteright s -50 +KPX quoteright sacute -50 +KPX quoteright scaron -50 +KPX quoteright scedilla -50 +KPX quoteright scommaaccent -50 +KPX quoteright space -70 +KPX r a -10 +KPX r aacute -10 +KPX r abreve -10 +KPX r acircumflex -10 +KPX r adieresis -10 +KPX r agrave -10 +KPX r amacron -10 +KPX r aogonek -10 +KPX r aring -10 +KPX r atilde -10 +KPX r colon 30 +KPX r comma -50 +KPX r i 15 +KPX r iacute 15 +KPX r icircumflex 15 +KPX r idieresis 15 +KPX r igrave 15 +KPX r imacron 15 +KPX r iogonek 15 +KPX r k 15 +KPX r kcommaaccent 15 +KPX r l 15 +KPX r lacute 15 +KPX r lcommaaccent 15 +KPX r lslash 15 +KPX r m 25 +KPX r n 25 +KPX r nacute 25 +KPX r ncaron 25 +KPX r ncommaaccent 25 +KPX r ntilde 25 +KPX r p 30 +KPX r period -50 +KPX r semicolon 30 +KPX r t 40 +KPX r tcommaaccent 40 +KPX r u 15 +KPX r uacute 15 +KPX r ucircumflex 15 +KPX r udieresis 15 +KPX r ugrave 15 +KPX r uhungarumlaut 15 +KPX r umacron 15 +KPX r uogonek 15 +KPX r uring 15 +KPX r v 30 +KPX r y 30 +KPX r yacute 30 +KPX r ydieresis 30 +KPX racute a -10 +KPX racute aacute -10 +KPX racute abreve -10 +KPX racute acircumflex -10 +KPX racute adieresis -10 +KPX racute agrave -10 +KPX racute amacron -10 +KPX racute aogonek -10 +KPX racute aring -10 +KPX racute atilde -10 +KPX racute colon 30 +KPX racute comma -50 +KPX racute i 15 +KPX racute iacute 15 +KPX racute icircumflex 15 +KPX racute idieresis 15 +KPX racute igrave 15 +KPX racute imacron 15 +KPX racute iogonek 15 +KPX racute k 15 +KPX racute kcommaaccent 15 +KPX racute l 15 +KPX racute lacute 15 +KPX racute lcommaaccent 15 +KPX racute lslash 15 +KPX racute m 25 +KPX racute n 25 +KPX racute nacute 25 +KPX racute ncaron 25 +KPX racute ncommaaccent 25 +KPX racute ntilde 25 +KPX racute p 30 +KPX racute period -50 +KPX racute semicolon 30 +KPX racute t 40 +KPX racute tcommaaccent 40 +KPX racute u 15 +KPX racute uacute 15 +KPX racute ucircumflex 15 +KPX racute udieresis 15 +KPX racute ugrave 15 +KPX racute uhungarumlaut 15 +KPX racute umacron 15 +KPX racute uogonek 15 +KPX racute uring 15 +KPX racute v 30 +KPX racute y 30 +KPX racute yacute 30 +KPX racute ydieresis 30 +KPX rcaron a -10 +KPX rcaron aacute -10 +KPX rcaron abreve -10 +KPX rcaron acircumflex -10 +KPX rcaron adieresis -10 +KPX rcaron agrave -10 +KPX rcaron amacron -10 +KPX rcaron aogonek -10 +KPX rcaron aring -10 +KPX rcaron atilde -10 +KPX rcaron colon 30 +KPX rcaron comma -50 +KPX rcaron i 15 +KPX rcaron iacute 15 +KPX rcaron icircumflex 15 +KPX rcaron idieresis 15 +KPX rcaron igrave 15 +KPX rcaron imacron 15 +KPX rcaron iogonek 15 +KPX rcaron k 15 +KPX rcaron kcommaaccent 15 +KPX rcaron l 15 +KPX rcaron lacute 15 +KPX rcaron lcommaaccent 15 +KPX rcaron lslash 15 +KPX rcaron m 25 +KPX rcaron n 25 +KPX rcaron nacute 25 +KPX rcaron ncaron 25 +KPX rcaron ncommaaccent 25 +KPX rcaron ntilde 25 +KPX rcaron p 30 +KPX rcaron period -50 +KPX rcaron semicolon 30 +KPX rcaron t 40 +KPX rcaron tcommaaccent 40 +KPX rcaron u 15 +KPX rcaron uacute 15 +KPX rcaron ucircumflex 15 +KPX rcaron udieresis 15 +KPX rcaron ugrave 15 +KPX rcaron uhungarumlaut 15 +KPX rcaron umacron 15 +KPX rcaron uogonek 15 +KPX rcaron uring 15 +KPX rcaron v 30 +KPX rcaron y 30 +KPX rcaron yacute 30 +KPX rcaron ydieresis 30 +KPX rcommaaccent a -10 +KPX rcommaaccent aacute -10 +KPX rcommaaccent abreve -10 +KPX rcommaaccent acircumflex -10 +KPX rcommaaccent adieresis -10 +KPX rcommaaccent agrave -10 +KPX rcommaaccent amacron -10 +KPX rcommaaccent aogonek -10 +KPX rcommaaccent aring -10 +KPX rcommaaccent atilde -10 +KPX rcommaaccent colon 30 +KPX rcommaaccent comma -50 +KPX rcommaaccent i 15 +KPX rcommaaccent iacute 15 +KPX rcommaaccent icircumflex 15 +KPX rcommaaccent idieresis 15 +KPX rcommaaccent igrave 15 +KPX rcommaaccent imacron 15 +KPX rcommaaccent iogonek 15 +KPX rcommaaccent k 15 +KPX rcommaaccent kcommaaccent 15 +KPX rcommaaccent l 15 +KPX rcommaaccent lacute 15 +KPX rcommaaccent lcommaaccent 15 +KPX rcommaaccent lslash 15 +KPX rcommaaccent m 25 +KPX rcommaaccent n 25 +KPX rcommaaccent nacute 25 +KPX rcommaaccent ncaron 25 +KPX rcommaaccent ncommaaccent 25 +KPX rcommaaccent ntilde 25 +KPX rcommaaccent p 30 +KPX rcommaaccent period -50 +KPX rcommaaccent semicolon 30 +KPX rcommaaccent t 40 +KPX rcommaaccent tcommaaccent 40 +KPX rcommaaccent u 15 +KPX rcommaaccent uacute 15 +KPX rcommaaccent ucircumflex 15 +KPX rcommaaccent udieresis 15 +KPX rcommaaccent ugrave 15 +KPX rcommaaccent uhungarumlaut 15 +KPX rcommaaccent umacron 15 +KPX rcommaaccent uogonek 15 +KPX rcommaaccent uring 15 +KPX rcommaaccent v 30 +KPX rcommaaccent y 30 +KPX rcommaaccent yacute 30 +KPX rcommaaccent ydieresis 30 +KPX s comma -15 +KPX s period -15 +KPX s w -30 +KPX sacute comma -15 +KPX sacute period -15 +KPX sacute w -30 +KPX scaron comma -15 +KPX scaron period -15 +KPX scaron w -30 +KPX scedilla comma -15 +KPX scedilla period -15 +KPX scedilla w -30 +KPX scommaaccent comma -15 +KPX scommaaccent period -15 +KPX scommaaccent w -30 +KPX semicolon space -50 +KPX space T -50 +KPX space Tcaron -50 +KPX space Tcommaaccent -50 +KPX space V -50 +KPX space W -40 +KPX space Y -90 +KPX space Yacute -90 +KPX space Ydieresis -90 +KPX space quotedblleft -30 +KPX space quoteleft -60 +KPX v a -25 +KPX v aacute -25 +KPX v abreve -25 +KPX v acircumflex -25 +KPX v adieresis -25 +KPX v agrave -25 +KPX v amacron -25 +KPX v aogonek -25 +KPX v aring -25 +KPX v atilde -25 +KPX v comma -80 +KPX v e -25 +KPX v eacute -25 +KPX v ecaron -25 +KPX v ecircumflex -25 +KPX v edieresis -25 +KPX v edotaccent -25 +KPX v egrave -25 +KPX v emacron -25 +KPX v eogonek -25 +KPX v o -25 +KPX v oacute -25 +KPX v ocircumflex -25 +KPX v odieresis -25 +KPX v ograve -25 +KPX v ohungarumlaut -25 +KPX v omacron -25 +KPX v oslash -25 +KPX v otilde -25 +KPX v period -80 +KPX w a -15 +KPX w aacute -15 +KPX w abreve -15 +KPX w acircumflex -15 +KPX w adieresis -15 +KPX w agrave -15 +KPX w amacron -15 +KPX w aogonek -15 +KPX w aring -15 +KPX w atilde -15 +KPX w comma -60 +KPX w e -10 +KPX w eacute -10 +KPX w ecaron -10 +KPX w ecircumflex -10 +KPX w edieresis -10 +KPX w edotaccent -10 +KPX w egrave -10 +KPX w emacron -10 +KPX w eogonek -10 +KPX w o -10 +KPX w oacute -10 +KPX w ocircumflex -10 +KPX w odieresis -10 +KPX w ograve -10 +KPX w ohungarumlaut -10 +KPX w omacron -10 +KPX w oslash -10 +KPX w otilde -10 +KPX w period -60 +KPX x e -30 +KPX x eacute -30 +KPX x ecaron -30 +KPX x ecircumflex -30 +KPX x edieresis -30 +KPX x edotaccent -30 +KPX x egrave -30 +KPX x emacron -30 +KPX x eogonek -30 +KPX y a -20 +KPX y aacute -20 +KPX y abreve -20 +KPX y acircumflex -20 +KPX y adieresis -20 +KPX y agrave -20 +KPX y amacron -20 +KPX y aogonek -20 +KPX y aring -20 +KPX y atilde -20 +KPX y comma -100 +KPX y e -20 +KPX y eacute -20 +KPX y ecaron -20 +KPX y ecircumflex -20 +KPX y edieresis -20 +KPX y edotaccent -20 +KPX y egrave -20 +KPX y emacron -20 +KPX y eogonek -20 +KPX y o -20 +KPX y oacute -20 +KPX y ocircumflex -20 +KPX y odieresis -20 +KPX y ograve -20 +KPX y ohungarumlaut -20 +KPX y omacron -20 +KPX y oslash -20 +KPX y otilde -20 +KPX y period -100 +KPX yacute a -20 +KPX yacute aacute -20 +KPX yacute abreve -20 +KPX yacute acircumflex -20 +KPX yacute adieresis -20 +KPX yacute agrave -20 +KPX yacute amacron -20 +KPX yacute aogonek -20 +KPX yacute aring -20 +KPX yacute atilde -20 +KPX yacute comma -100 +KPX yacute e -20 +KPX yacute eacute -20 +KPX yacute ecaron -20 +KPX yacute ecircumflex -20 +KPX yacute edieresis -20 +KPX yacute edotaccent -20 +KPX yacute egrave -20 +KPX yacute emacron -20 +KPX yacute eogonek -20 +KPX yacute o -20 +KPX yacute oacute -20 +KPX yacute ocircumflex -20 +KPX yacute odieresis -20 +KPX yacute ograve -20 +KPX yacute ohungarumlaut -20 +KPX yacute omacron -20 +KPX yacute oslash -20 +KPX yacute otilde -20 +KPX yacute period -100 +KPX ydieresis a -20 +KPX ydieresis aacute -20 +KPX ydieresis abreve -20 +KPX ydieresis acircumflex -20 +KPX ydieresis adieresis -20 +KPX ydieresis agrave -20 +KPX ydieresis amacron -20 +KPX ydieresis aogonek -20 +KPX ydieresis aring -20 +KPX ydieresis atilde -20 +KPX ydieresis comma -100 +KPX ydieresis e -20 +KPX ydieresis eacute -20 +KPX ydieresis ecaron -20 +KPX ydieresis ecircumflex -20 +KPX ydieresis edieresis -20 +KPX ydieresis edotaccent -20 +KPX ydieresis egrave -20 +KPX ydieresis emacron -20 +KPX ydieresis eogonek -20 +KPX ydieresis o -20 +KPX ydieresis oacute -20 +KPX ydieresis ocircumflex -20 +KPX ydieresis odieresis -20 +KPX ydieresis ograve -20 +KPX ydieresis ohungarumlaut -20 +KPX ydieresis omacron -20 +KPX ydieresis oslash -20 +KPX ydieresis otilde -20 +KPX ydieresis period -100 +KPX z e -15 +KPX z eacute -15 +KPX z ecaron -15 +KPX z ecircumflex -15 +KPX z edieresis -15 +KPX z edotaccent -15 +KPX z egrave -15 +KPX z emacron -15 +KPX z eogonek -15 +KPX z o -15 +KPX z oacute -15 +KPX z ocircumflex -15 +KPX z odieresis -15 +KPX z ograve -15 +KPX z ohungarumlaut -15 +KPX z omacron -15 +KPX z oslash -15 +KPX z otilde -15 +KPX zacute e -15 +KPX zacute eacute -15 +KPX zacute ecaron -15 +KPX zacute ecircumflex -15 +KPX zacute edieresis -15 +KPX zacute edotaccent -15 +KPX zacute egrave -15 +KPX zacute emacron -15 +KPX zacute eogonek -15 +KPX zacute o -15 +KPX zacute oacute -15 +KPX zacute ocircumflex -15 +KPX zacute odieresis -15 +KPX zacute ograve -15 +KPX zacute ohungarumlaut -15 +KPX zacute omacron -15 +KPX zacute oslash -15 +KPX zacute otilde -15 +KPX zcaron e -15 +KPX zcaron eacute -15 +KPX zcaron ecaron -15 +KPX zcaron ecircumflex -15 +KPX zcaron edieresis -15 +KPX zcaron edotaccent -15 +KPX zcaron egrave -15 +KPX zcaron emacron -15 +KPX zcaron eogonek -15 +KPX zcaron o -15 +KPX zcaron oacute -15 +KPX zcaron ocircumflex -15 +KPX zcaron odieresis -15 +KPX zcaron ograve -15 +KPX zcaron ohungarumlaut -15 +KPX zcaron omacron -15 +KPX zcaron oslash -15 +KPX zcaron otilde -15 +KPX zdotaccent e -15 +KPX zdotaccent eacute -15 +KPX zdotaccent ecaron -15 +KPX zdotaccent ecircumflex -15 +KPX zdotaccent edieresis -15 +KPX zdotaccent edotaccent -15 +KPX zdotaccent egrave -15 +KPX zdotaccent emacron -15 +KPX zdotaccent eogonek -15 +KPX zdotaccent o -15 +KPX zdotaccent oacute -15 +KPX zdotaccent ocircumflex -15 +KPX zdotaccent odieresis -15 +KPX zdotaccent ograve -15 +KPX zdotaccent ohungarumlaut -15 +KPX zdotaccent omacron -15 +KPX zdotaccent oslash -15 +KPX zdotaccent otilde -15 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/MustRead.html b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/MustRead.html new file mode 100644 index 000000000..6dada97b1 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/MustRead.html @@ -0,0 +1,19 @@ +<html> + + <head> + <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> + <meta name="generator" content="Adobe GoLive 4"> + <title>Core 14 AFM Files - ReadMe + + + + or + + + + + +
This file and the 14 PostScript(R) AFM files it accompanies may be used, copied, and distributed for any purpose and without charge, with or without modification, provided that all copyright notices are retained; that the AFM files are not distributed without this file; that all modifications to this file or any of the AFM files are prominently noted in the modified file(s); and that this paragraph is not modified. Adobe Systems has no responsibility or obligation to support the use of the AFM files. Col
+ + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Symbol.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Symbol.afm new file mode 100644 index 000000000..6a5386a91 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Symbol.afm @@ -0,0 +1,213 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. +Comment Creation Date: Thu May 1 15:12:25 1997 +Comment UniqueID 43064 +Comment VMusage 30820 39997 +FontName Symbol +FullName Symbol +FamilyName Symbol +Weight Medium +ItalicAngle 0 +IsFixedPitch false +CharacterSet Special +FontBBox -180 -293 1090 1010 +UnderlinePosition -100 +UnderlineThickness 50 +Version 001.008 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. +EncodingScheme FontSpecific +StdHW 92 +StdVW 85 +StartCharMetrics 190 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 128 -17 240 672 ; +C 34 ; WX 713 ; N universal ; B 31 0 681 705 ; +C 35 ; WX 500 ; N numbersign ; B 20 -16 481 673 ; +C 36 ; WX 549 ; N existential ; B 25 0 478 707 ; +C 37 ; WX 833 ; N percent ; B 63 -36 771 655 ; +C 38 ; WX 778 ; N ampersand ; B 41 -18 750 661 ; +C 39 ; WX 439 ; N suchthat ; B 48 -17 414 500 ; +C 40 ; WX 333 ; N parenleft ; B 53 -191 300 673 ; +C 41 ; WX 333 ; N parenright ; B 30 -191 277 673 ; +C 42 ; WX 500 ; N asteriskmath ; B 65 134 427 551 ; +C 43 ; WX 549 ; N plus ; B 10 0 539 533 ; +C 44 ; WX 250 ; N comma ; B 56 -152 194 104 ; +C 45 ; WX 549 ; N minus ; B 11 233 535 288 ; +C 46 ; WX 250 ; N period ; B 69 -17 181 95 ; +C 47 ; WX 278 ; N slash ; B 0 -18 254 646 ; +C 48 ; WX 500 ; N zero ; B 24 -14 476 685 ; +C 49 ; WX 500 ; N one ; B 117 0 390 673 ; +C 50 ; WX 500 ; N two ; B 25 0 475 685 ; +C 51 ; WX 500 ; N three ; B 43 -14 435 685 ; +C 52 ; WX 500 ; N four ; B 15 0 469 685 ; +C 53 ; WX 500 ; N five ; B 32 -14 445 690 ; +C 54 ; WX 500 ; N six ; B 34 -14 468 685 ; +C 55 ; WX 500 ; N seven ; B 24 -16 448 673 ; +C 56 ; WX 500 ; N eight ; B 56 -14 445 685 ; +C 57 ; WX 500 ; N nine ; B 30 -18 459 685 ; +C 58 ; WX 278 ; N colon ; B 81 -17 193 460 ; +C 59 ; WX 278 ; N semicolon ; B 83 -152 221 460 ; +C 60 ; WX 549 ; N less ; B 26 0 523 522 ; +C 61 ; WX 549 ; N equal ; B 11 141 537 390 ; +C 62 ; WX 549 ; N greater ; B 26 0 523 522 ; +C 63 ; WX 444 ; N question ; B 70 -17 412 686 ; +C 64 ; WX 549 ; N congruent ; B 11 0 537 475 ; +C 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ; +C 66 ; WX 667 ; N Beta ; B 29 0 592 673 ; +C 67 ; WX 722 ; N Chi ; B -9 0 704 673 ; +C 68 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ; +C 70 ; WX 763 ; N Phi ; B 26 0 741 673 ; +C 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ; +C 72 ; WX 722 ; N Eta ; B 39 0 729 673 ; +C 73 ; WX 333 ; N Iota ; B 32 0 316 673 ; +C 74 ; WX 631 ; N theta1 ; B 18 -18 623 689 ; +C 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ; +C 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ; +C 77 ; WX 889 ; N Mu ; B 28 0 887 673 ; +C 78 ; WX 722 ; N Nu ; B 29 -8 720 673 ; +C 79 ; WX 722 ; N Omicron ; B 41 -17 715 685 ; +C 80 ; WX 768 ; N Pi ; B 25 0 745 673 ; +C 81 ; WX 741 ; N Theta ; B 41 -17 715 685 ; +C 82 ; WX 556 ; N Rho ; B 28 0 563 673 ; +C 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ; +C 84 ; WX 611 ; N Tau ; B 33 0 607 673 ; +C 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ; +C 86 ; WX 439 ; N sigma1 ; B 40 -233 436 500 ; +C 87 ; WX 768 ; N Omega ; B 34 0 736 688 ; +C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ; +C 89 ; WX 795 ; N Psi ; B 15 0 781 684 ; +C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ; +C 91 ; WX 333 ; N bracketleft ; B 86 -155 299 674 ; +C 92 ; WX 863 ; N therefore ; B 163 0 701 487 ; +C 93 ; WX 333 ; N bracketright ; B 33 -155 246 674 ; +C 94 ; WX 658 ; N perpendicular ; B 15 0 652 674 ; +C 95 ; WX 500 ; N underscore ; B -2 -125 502 -75 ; +C 96 ; WX 500 ; N radicalex ; B 480 881 1090 917 ; +C 97 ; WX 631 ; N alpha ; B 41 -18 622 500 ; +C 98 ; WX 549 ; N beta ; B 61 -223 515 741 ; +C 99 ; WX 549 ; N chi ; B 12 -231 522 499 ; +C 100 ; WX 494 ; N delta ; B 40 -19 481 740 ; +C 101 ; WX 439 ; N epsilon ; B 22 -19 427 502 ; +C 102 ; WX 521 ; N phi ; B 28 -224 492 673 ; +C 103 ; WX 411 ; N gamma ; B 5 -225 484 499 ; +C 104 ; WX 603 ; N eta ; B 0 -202 527 514 ; +C 105 ; WX 329 ; N iota ; B 0 -17 301 503 ; +C 106 ; WX 603 ; N phi1 ; B 36 -224 587 499 ; +C 107 ; WX 549 ; N kappa ; B 33 0 558 501 ; +C 108 ; WX 549 ; N lambda ; B 24 -17 548 739 ; +C 109 ; WX 576 ; N mu ; B 33 -223 567 500 ; +C 110 ; WX 521 ; N nu ; B -9 -16 475 507 ; +C 111 ; WX 549 ; N omicron ; B 35 -19 501 499 ; +C 112 ; WX 549 ; N pi ; B 10 -19 530 487 ; +C 113 ; WX 521 ; N theta ; B 43 -17 485 690 ; +C 114 ; WX 549 ; N rho ; B 50 -230 490 499 ; +C 115 ; WX 603 ; N sigma ; B 30 -21 588 500 ; +C 116 ; WX 439 ; N tau ; B 10 -19 418 500 ; +C 117 ; WX 576 ; N upsilon ; B 7 -18 535 507 ; +C 118 ; WX 713 ; N omega1 ; B 12 -18 671 583 ; +C 119 ; WX 686 ; N omega ; B 42 -17 684 500 ; +C 120 ; WX 493 ; N xi ; B 27 -224 469 766 ; +C 121 ; WX 686 ; N psi ; B 12 -228 701 500 ; +C 122 ; WX 494 ; N zeta ; B 60 -225 467 756 ; +C 123 ; WX 480 ; N braceleft ; B 58 -183 397 673 ; +C 124 ; WX 200 ; N bar ; B 65 -293 135 707 ; +C 125 ; WX 480 ; N braceright ; B 79 -183 418 673 ; +C 126 ; WX 549 ; N similar ; B 17 203 529 307 ; +C 160 ; WX 750 ; N Euro ; B 20 -12 714 685 ; +C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 685 ; +C 162 ; WX 247 ; N minute ; B 27 459 228 735 ; +C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ; +C 164 ; WX 167 ; N fraction ; B -180 -12 340 677 ; +C 165 ; WX 713 ; N infinity ; B 26 124 688 404 ; +C 166 ; WX 500 ; N florin ; B 2 -193 494 686 ; +C 167 ; WX 753 ; N club ; B 86 -26 660 533 ; +C 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ; +C 169 ; WX 753 ; N heart ; B 117 -33 631 532 ; +C 170 ; WX 753 ; N spade ; B 113 -36 629 548 ; +C 171 ; WX 1042 ; N arrowboth ; B 24 -15 1024 511 ; +C 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ; +C 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ; +C 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ; +C 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ; +C 176 ; WX 400 ; N degree ; B 50 385 350 685 ; +C 177 ; WX 549 ; N plusminus ; B 10 0 539 645 ; +C 178 ; WX 411 ; N second ; B 20 459 413 737 ; +C 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ; +C 180 ; WX 549 ; N multiply ; B 17 8 533 524 ; +C 181 ; WX 713 ; N proportional ; B 27 123 639 404 ; +C 182 ; WX 494 ; N partialdiff ; B 26 -20 462 746 ; +C 183 ; WX 460 ; N bullet ; B 50 113 410 473 ; +C 184 ; WX 549 ; N divide ; B 10 71 536 456 ; +C 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ; +C 186 ; WX 549 ; N equivalence ; B 14 82 538 443 ; +C 187 ; WX 549 ; N approxequal ; B 14 135 527 394 ; +C 188 ; WX 1000 ; N ellipsis ; B 111 -17 889 95 ; +C 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ; +C 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ; +C 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ; +C 192 ; WX 823 ; N aleph ; B 175 -18 661 658 ; +C 193 ; WX 686 ; N Ifraktur ; B 10 -53 578 740 ; +C 194 ; WX 795 ; N Rfraktur ; B 26 -15 759 734 ; +C 195 ; WX 987 ; N weierstrass ; B 159 -211 870 573 ; +C 196 ; WX 768 ; N circlemultiply ; B 43 -17 733 673 ; +C 197 ; WX 768 ; N circleplus ; B 43 -15 733 675 ; +C 198 ; WX 823 ; N emptyset ; B 39 -24 781 719 ; +C 199 ; WX 768 ; N intersection ; B 40 0 732 509 ; +C 200 ; WX 768 ; N union ; B 40 -17 732 492 ; +C 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ; +C 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ; +C 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ; +C 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ; +C 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ; +C 206 ; WX 713 ; N element ; B 45 0 505 468 ; +C 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ; +C 208 ; WX 768 ; N angle ; B 26 0 738 673 ; +C 209 ; WX 713 ; N gradient ; B 36 -19 681 718 ; +C 210 ; WX 790 ; N registerserif ; B 50 -17 740 673 ; +C 211 ; WX 790 ; N copyrightserif ; B 51 -15 741 675 ; +C 212 ; WX 890 ; N trademarkserif ; B 18 293 855 673 ; +C 213 ; WX 823 ; N product ; B 25 -101 803 751 ; +C 214 ; WX 549 ; N radical ; B 10 -38 515 917 ; +C 215 ; WX 250 ; N dotmath ; B 69 210 169 310 ; +C 216 ; WX 713 ; N logicalnot ; B 15 0 680 288 ; +C 217 ; WX 603 ; N logicaland ; B 23 0 583 454 ; +C 218 ; WX 603 ; N logicalor ; B 30 0 578 477 ; +C 219 ; WX 1042 ; N arrowdblboth ; B 27 -20 1023 510 ; +C 220 ; WX 987 ; N arrowdblleft ; B 30 -15 939 513 ; +C 221 ; WX 603 ; N arrowdblup ; B 39 2 567 911 ; +C 222 ; WX 987 ; N arrowdblright ; B 45 -20 954 508 ; +C 223 ; WX 603 ; N arrowdbldown ; B 44 -19 572 890 ; +C 224 ; WX 494 ; N lozenge ; B 18 0 466 745 ; +C 225 ; WX 329 ; N angleleft ; B 25 -198 306 746 ; +C 226 ; WX 790 ; N registersans ; B 50 -20 740 670 ; +C 227 ; WX 790 ; N copyrightsans ; B 49 -15 739 675 ; +C 228 ; WX 786 ; N trademarksans ; B 5 293 725 673 ; +C 229 ; WX 713 ; N summation ; B 14 -108 695 752 ; +C 230 ; WX 384 ; N parenlefttp ; B 24 -293 436 926 ; +C 231 ; WX 384 ; N parenleftex ; B 24 -85 108 925 ; +C 232 ; WX 384 ; N parenleftbt ; B 24 -293 436 926 ; +C 233 ; WX 384 ; N bracketlefttp ; B 0 -80 349 926 ; +C 234 ; WX 384 ; N bracketleftex ; B 0 -79 77 925 ; +C 235 ; WX 384 ; N bracketleftbt ; B 0 -80 349 926 ; +C 236 ; WX 494 ; N bracelefttp ; B 209 -85 445 925 ; +C 237 ; WX 494 ; N braceleftmid ; B 20 -85 284 935 ; +C 238 ; WX 494 ; N braceleftbt ; B 209 -75 445 935 ; +C 239 ; WX 494 ; N braceex ; B 209 -85 284 935 ; +C 241 ; WX 329 ; N angleright ; B 21 -198 302 746 ; +C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ; +C 243 ; WX 686 ; N integraltp ; B 308 -88 675 920 ; +C 244 ; WX 686 ; N integralex ; B 308 -88 378 975 ; +C 245 ; WX 686 ; N integralbt ; B 11 -87 378 921 ; +C 246 ; WX 384 ; N parenrighttp ; B 54 -293 466 926 ; +C 247 ; WX 384 ; N parenrightex ; B 382 -85 466 925 ; +C 248 ; WX 384 ; N parenrightbt ; B 54 -293 466 926 ; +C 249 ; WX 384 ; N bracketrighttp ; B 22 -80 371 926 ; +C 250 ; WX 384 ; N bracketrightex ; B 294 -79 371 925 ; +C 251 ; WX 384 ; N bracketrightbt ; B 22 -80 371 926 ; +C 252 ; WX 494 ; N bracerighttp ; B 48 -85 284 925 ; +C 253 ; WX 494 ; N bracerightmid ; B 209 -85 473 935 ; +C 254 ; WX 494 ; N bracerightbt ; B 48 -75 284 935 ; +C -1 ; WX 790 ; N apple ; B 56 -3 733 808 ; +EndCharMetrics +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-Bold.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-Bold.afm new file mode 100644 index 000000000..559ebaeb6 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-Bold.afm @@ -0,0 +1,2588 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:52:56 1997 +Comment UniqueID 43065 +Comment VMusage 41636 52661 +FontName Times-Bold +FullName Times Bold +FamilyName Times +Weight Bold +ItalicAngle 0 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -168 -218 1000 935 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 676 +XHeight 461 +Ascender 683 +Descender -217 +StdHW 44 +StdVW 139 +StartCharMetrics 315 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 81 -13 251 691 ; +C 34 ; WX 555 ; N quotedbl ; B 83 404 472 691 ; +C 35 ; WX 500 ; N numbersign ; B 4 0 496 700 ; +C 36 ; WX 500 ; N dollar ; B 29 -99 472 750 ; +C 37 ; WX 1000 ; N percent ; B 124 -14 877 692 ; +C 38 ; WX 833 ; N ampersand ; B 62 -16 787 691 ; +C 39 ; WX 333 ; N quoteright ; B 79 356 263 691 ; +C 40 ; WX 333 ; N parenleft ; B 46 -168 306 694 ; +C 41 ; WX 333 ; N parenright ; B 27 -168 287 694 ; +C 42 ; WX 500 ; N asterisk ; B 56 255 447 691 ; +C 43 ; WX 570 ; N plus ; B 33 0 537 506 ; +C 44 ; WX 250 ; N comma ; B 39 -180 223 155 ; +C 45 ; WX 333 ; N hyphen ; B 44 171 287 287 ; +C 46 ; WX 250 ; N period ; B 41 -13 210 156 ; +C 47 ; WX 278 ; N slash ; B -24 -19 302 691 ; +C 48 ; WX 500 ; N zero ; B 24 -13 476 688 ; +C 49 ; WX 500 ; N one ; B 65 0 442 688 ; +C 50 ; WX 500 ; N two ; B 17 0 478 688 ; +C 51 ; WX 500 ; N three ; B 16 -14 468 688 ; +C 52 ; WX 500 ; N four ; B 19 0 475 688 ; +C 53 ; WX 500 ; N five ; B 22 -8 470 676 ; +C 54 ; WX 500 ; N six ; B 28 -13 475 688 ; +C 55 ; WX 500 ; N seven ; B 17 0 477 676 ; +C 56 ; WX 500 ; N eight ; B 28 -13 472 688 ; +C 57 ; WX 500 ; N nine ; B 26 -13 473 688 ; +C 58 ; WX 333 ; N colon ; B 82 -13 251 472 ; +C 59 ; WX 333 ; N semicolon ; B 82 -180 266 472 ; +C 60 ; WX 570 ; N less ; B 31 -8 539 514 ; +C 61 ; WX 570 ; N equal ; B 33 107 537 399 ; +C 62 ; WX 570 ; N greater ; B 31 -8 539 514 ; +C 63 ; WX 500 ; N question ; B 57 -13 445 689 ; +C 64 ; WX 930 ; N at ; B 108 -19 822 691 ; +C 65 ; WX 722 ; N A ; B 9 0 689 690 ; +C 66 ; WX 667 ; N B ; B 16 0 619 676 ; +C 67 ; WX 722 ; N C ; B 49 -19 687 691 ; +C 68 ; WX 722 ; N D ; B 14 0 690 676 ; +C 69 ; WX 667 ; N E ; B 16 0 641 676 ; +C 70 ; WX 611 ; N F ; B 16 0 583 676 ; +C 71 ; WX 778 ; N G ; B 37 -19 755 691 ; +C 72 ; WX 778 ; N H ; B 21 0 759 676 ; +C 73 ; WX 389 ; N I ; B 20 0 370 676 ; +C 74 ; WX 500 ; N J ; B 3 -96 479 676 ; +C 75 ; WX 778 ; N K ; B 30 0 769 676 ; +C 76 ; WX 667 ; N L ; B 19 0 638 676 ; +C 77 ; WX 944 ; N M ; B 14 0 921 676 ; +C 78 ; WX 722 ; N N ; B 16 -18 701 676 ; +C 79 ; WX 778 ; N O ; B 35 -19 743 691 ; +C 80 ; WX 611 ; N P ; B 16 0 600 676 ; +C 81 ; WX 778 ; N Q ; B 35 -176 743 691 ; +C 82 ; WX 722 ; N R ; B 26 0 715 676 ; +C 83 ; WX 556 ; N S ; B 35 -19 513 692 ; +C 84 ; WX 667 ; N T ; B 31 0 636 676 ; +C 85 ; WX 722 ; N U ; B 16 -19 701 676 ; +C 86 ; WX 722 ; N V ; B 16 -18 701 676 ; +C 87 ; WX 1000 ; N W ; B 19 -15 981 676 ; +C 88 ; WX 722 ; N X ; B 16 0 699 676 ; +C 89 ; WX 722 ; N Y ; B 15 0 699 676 ; +C 90 ; WX 667 ; N Z ; B 28 0 634 676 ; +C 91 ; WX 333 ; N bracketleft ; B 67 -149 301 678 ; +C 92 ; WX 278 ; N backslash ; B -25 -19 303 691 ; +C 93 ; WX 333 ; N bracketright ; B 32 -149 266 678 ; +C 94 ; WX 581 ; N asciicircum ; B 73 311 509 676 ; +C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; +C 96 ; WX 333 ; N quoteleft ; B 70 356 254 691 ; +C 97 ; WX 500 ; N a ; B 25 -14 488 473 ; +C 98 ; WX 556 ; N b ; B 17 -14 521 676 ; +C 99 ; WX 444 ; N c ; B 25 -14 430 473 ; +C 100 ; WX 556 ; N d ; B 25 -14 534 676 ; +C 101 ; WX 444 ; N e ; B 25 -14 426 473 ; +C 102 ; WX 333 ; N f ; B 14 0 389 691 ; L i fi ; L l fl ; +C 103 ; WX 500 ; N g ; B 28 -206 483 473 ; +C 104 ; WX 556 ; N h ; B 16 0 534 676 ; +C 105 ; WX 278 ; N i ; B 16 0 255 691 ; +C 106 ; WX 333 ; N j ; B -57 -203 263 691 ; +C 107 ; WX 556 ; N k ; B 22 0 543 676 ; +C 108 ; WX 278 ; N l ; B 16 0 255 676 ; +C 109 ; WX 833 ; N m ; B 16 0 814 473 ; +C 110 ; WX 556 ; N n ; B 21 0 539 473 ; +C 111 ; WX 500 ; N o ; B 25 -14 476 473 ; +C 112 ; WX 556 ; N p ; B 19 -205 524 473 ; +C 113 ; WX 556 ; N q ; B 34 -205 536 473 ; +C 114 ; WX 444 ; N r ; B 29 0 434 473 ; +C 115 ; WX 389 ; N s ; B 25 -14 361 473 ; +C 116 ; WX 333 ; N t ; B 20 -12 332 630 ; +C 117 ; WX 556 ; N u ; B 16 -14 537 461 ; +C 118 ; WX 500 ; N v ; B 21 -14 485 461 ; +C 119 ; WX 722 ; N w ; B 23 -14 707 461 ; +C 120 ; WX 500 ; N x ; B 12 0 484 461 ; +C 121 ; WX 500 ; N y ; B 16 -205 480 461 ; +C 122 ; WX 444 ; N z ; B 21 0 420 461 ; +C 123 ; WX 394 ; N braceleft ; B 22 -175 340 698 ; +C 124 ; WX 220 ; N bar ; B 66 -218 154 782 ; +C 125 ; WX 394 ; N braceright ; B 54 -175 372 698 ; +C 126 ; WX 520 ; N asciitilde ; B 29 173 491 333 ; +C 161 ; WX 333 ; N exclamdown ; B 82 -203 252 501 ; +C 162 ; WX 500 ; N cent ; B 53 -140 458 588 ; +C 163 ; WX 500 ; N sterling ; B 21 -14 477 684 ; +C 164 ; WX 167 ; N fraction ; B -168 -12 329 688 ; +C 165 ; WX 500 ; N yen ; B -64 0 547 676 ; +C 166 ; WX 500 ; N florin ; B 0 -155 498 706 ; +C 167 ; WX 500 ; N section ; B 57 -132 443 691 ; +C 168 ; WX 500 ; N currency ; B -26 61 526 613 ; +C 169 ; WX 278 ; N quotesingle ; B 75 404 204 691 ; +C 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ; +C 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ; +C 172 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ; +C 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ; +C 174 ; WX 556 ; N fi ; B 14 0 536 691 ; +C 175 ; WX 556 ; N fl ; B 14 0 536 691 ; +C 177 ; WX 500 ; N endash ; B 0 181 500 271 ; +C 178 ; WX 500 ; N dagger ; B 47 -134 453 691 ; +C 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ; +C 180 ; WX 250 ; N periodcentered ; B 41 248 210 417 ; +C 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ; +C 183 ; WX 350 ; N bullet ; B 35 198 315 478 ; +C 184 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ; +C 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ; +C 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ; +C 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ; +C 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ; +C 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ; +C 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ; +C 193 ; WX 333 ; N grave ; B 8 528 246 713 ; +C 194 ; WX 333 ; N acute ; B 86 528 324 713 ; +C 195 ; WX 333 ; N circumflex ; B -2 528 335 704 ; +C 196 ; WX 333 ; N tilde ; B -16 547 349 674 ; +C 197 ; WX 333 ; N macron ; B 1 565 331 637 ; +C 198 ; WX 333 ; N breve ; B 15 528 318 691 ; +C 199 ; WX 333 ; N dotaccent ; B 103 536 258 691 ; +C 200 ; WX 333 ; N dieresis ; B -2 537 335 667 ; +C 202 ; WX 333 ; N ring ; B 60 527 273 740 ; +C 203 ; WX 333 ; N cedilla ; B 68 -218 294 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ; +C 206 ; WX 333 ; N ogonek ; B 90 -193 319 24 ; +C 207 ; WX 333 ; N caron ; B -2 528 335 704 ; +C 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ; +C 225 ; WX 1000 ; N AE ; B 4 0 951 676 ; +C 227 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ; +C 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ; +C 233 ; WX 778 ; N Oslash ; B 35 -74 743 737 ; +C 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ; +C 235 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ; +C 241 ; WX 722 ; N ae ; B 33 -14 693 473 ; +C 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ; +C 248 ; WX 278 ; N lslash ; B -22 0 303 676 ; +C 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ; +C 250 ; WX 722 ; N oe ; B 22 -14 696 473 ; +C 251 ; WX 556 ; N germandbls ; B 19 -12 517 691 ; +C -1 ; WX 389 ; N Idieresis ; B 20 0 370 877 ; +C -1 ; WX 444 ; N eacute ; B 25 -14 426 713 ; +C -1 ; WX 500 ; N abreve ; B 25 -14 488 691 ; +C -1 ; WX 556 ; N uhungarumlaut ; B 16 -14 557 713 ; +C -1 ; WX 444 ; N ecaron ; B 25 -14 426 704 ; +C -1 ; WX 722 ; N Ydieresis ; B 15 0 699 877 ; +C -1 ; WX 570 ; N divide ; B 33 -31 537 537 ; +C -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ; +C -1 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ; +C -1 ; WX 500 ; N aacute ; B 25 -14 488 713 ; +C -1 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ; +C -1 ; WX 500 ; N yacute ; B 16 -205 480 713 ; +C -1 ; WX 389 ; N scommaaccent ; B 25 -218 361 473 ; +C -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ; +C -1 ; WX 722 ; N Uring ; B 16 -19 701 935 ; +C -1 ; WX 722 ; N Udieresis ; B 16 -19 701 877 ; +C -1 ; WX 500 ; N aogonek ; B 25 -193 504 473 ; +C -1 ; WX 722 ; N Uacute ; B 16 -19 701 923 ; +C -1 ; WX 556 ; N uogonek ; B 16 -193 539 461 ; +C -1 ; WX 667 ; N Edieresis ; B 16 0 641 877 ; +C -1 ; WX 722 ; N Dcroat ; B 6 0 690 676 ; +C -1 ; WX 250 ; N commaaccent ; B 47 -218 203 -50 ; +C -1 ; WX 747 ; N copyright ; B 26 -19 721 691 ; +C -1 ; WX 667 ; N Emacron ; B 16 0 641 847 ; +C -1 ; WX 444 ; N ccaron ; B 25 -14 430 704 ; +C -1 ; WX 500 ; N aring ; B 25 -14 488 740 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 16 -188 701 676 ; +C -1 ; WX 278 ; N lacute ; B 16 0 297 923 ; +C -1 ; WX 500 ; N agrave ; B 25 -14 488 713 ; +C -1 ; WX 667 ; N Tcommaaccent ; B 31 -218 636 676 ; +C -1 ; WX 722 ; N Cacute ; B 49 -19 687 923 ; +C -1 ; WX 500 ; N atilde ; B 25 -14 488 674 ; +C -1 ; WX 667 ; N Edotaccent ; B 16 0 641 901 ; +C -1 ; WX 389 ; N scaron ; B 25 -14 363 704 ; +C -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ; +C -1 ; WX 278 ; N iacute ; B 16 0 289 713 ; +C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ; +C -1 ; WX 722 ; N Rcaron ; B 26 0 715 914 ; +C -1 ; WX 778 ; N Gcommaaccent ; B 37 -218 755 691 ; +C -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ; +C -1 ; WX 500 ; N acircumflex ; B 25 -14 488 704 ; +C -1 ; WX 722 ; N Amacron ; B 9 0 689 847 ; +C -1 ; WX 444 ; N rcaron ; B 29 0 434 704 ; +C -1 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ; +C -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 901 ; +C -1 ; WX 611 ; N Thorn ; B 16 0 600 676 ; +C -1 ; WX 778 ; N Omacron ; B 35 -19 743 847 ; +C -1 ; WX 722 ; N Racute ; B 26 0 715 923 ; +C -1 ; WX 556 ; N Sacute ; B 35 -19 513 923 ; +C -1 ; WX 672 ; N dcaron ; B 25 -14 681 682 ; +C -1 ; WX 722 ; N Umacron ; B 16 -19 701 847 ; +C -1 ; WX 556 ; N uring ; B 16 -14 537 740 ; +C -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ; +C -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ; +C -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ; +C -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ; +C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; +C -1 ; WX 556 ; N uacute ; B 16 -14 537 713 ; +C -1 ; WX 667 ; N Tcaron ; B 31 0 636 914 ; +C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ; +C -1 ; WX 500 ; N ydieresis ; B 16 -205 480 667 ; +C -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ; +C -1 ; WX 278 ; N icircumflex ; B -37 0 300 704 ; +C -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ; +C -1 ; WX 500 ; N adieresis ; B 25 -14 488 667 ; +C -1 ; WX 444 ; N edieresis ; B 25 -14 426 667 ; +C -1 ; WX 444 ; N cacute ; B 25 -14 430 713 ; +C -1 ; WX 556 ; N nacute ; B 21 0 539 713 ; +C -1 ; WX 556 ; N umacron ; B 16 -14 537 637 ; +C -1 ; WX 722 ; N Ncaron ; B 16 -18 701 914 ; +C -1 ; WX 389 ; N Iacute ; B 20 0 370 923 ; +C -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ; +C -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ; +C -1 ; WX 747 ; N registered ; B 26 -19 721 691 ; +C -1 ; WX 778 ; N Gbreve ; B 37 -19 755 901 ; +C -1 ; WX 389 ; N Idotaccent ; B 20 0 370 901 ; +C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ; +C -1 ; WX 667 ; N Egrave ; B 16 0 641 923 ; +C -1 ; WX 444 ; N racute ; B 29 0 434 713 ; +C -1 ; WX 500 ; N omacron ; B 25 -14 476 637 ; +C -1 ; WX 667 ; N Zacute ; B 28 0 634 923 ; +C -1 ; WX 667 ; N Zcaron ; B 28 0 634 914 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; +C -1 ; WX 722 ; N Eth ; B 6 0 690 676 ; +C -1 ; WX 722 ; N Ccedilla ; B 49 -218 687 691 ; +C -1 ; WX 278 ; N lcommaaccent ; B 16 -218 255 676 ; +C -1 ; WX 416 ; N tcaron ; B 20 -12 425 815 ; +C -1 ; WX 444 ; N eogonek ; B 25 -193 426 473 ; +C -1 ; WX 722 ; N Uogonek ; B 16 -193 701 676 ; +C -1 ; WX 722 ; N Aacute ; B 9 0 689 923 ; +C -1 ; WX 722 ; N Adieresis ; B 9 0 689 877 ; +C -1 ; WX 444 ; N egrave ; B 25 -14 426 713 ; +C -1 ; WX 444 ; N zacute ; B 21 0 420 713 ; +C -1 ; WX 278 ; N iogonek ; B 16 -193 274 691 ; +C -1 ; WX 778 ; N Oacute ; B 35 -19 743 923 ; +C -1 ; WX 500 ; N oacute ; B 25 -14 476 713 ; +C -1 ; WX 500 ; N amacron ; B 25 -14 488 637 ; +C -1 ; WX 389 ; N sacute ; B 25 -14 361 713 ; +C -1 ; WX 278 ; N idieresis ; B -37 0 300 667 ; +C -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ; +C -1 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 556 ; N thorn ; B 19 -205 524 676 ; +C -1 ; WX 300 ; N twosuperior ; B 0 275 300 688 ; +C -1 ; WX 778 ; N Odieresis ; B 35 -19 743 877 ; +C -1 ; WX 556 ; N mu ; B 33 -206 536 461 ; +C -1 ; WX 278 ; N igrave ; B -27 0 255 713 ; +C -1 ; WX 500 ; N ohungarumlaut ; B 25 -14 529 713 ; +C -1 ; WX 667 ; N Eogonek ; B 16 -193 644 676 ; +C -1 ; WX 556 ; N dcroat ; B 25 -14 534 676 ; +C -1 ; WX 750 ; N threequarters ; B 23 -12 733 688 ; +C -1 ; WX 556 ; N Scedilla ; B 35 -218 513 692 ; +C -1 ; WX 394 ; N lcaron ; B 16 0 412 682 ; +C -1 ; WX 778 ; N Kcommaaccent ; B 30 -218 769 676 ; +C -1 ; WX 667 ; N Lacute ; B 19 0 638 923 ; +C -1 ; WX 1000 ; N trademark ; B 24 271 977 676 ; +C -1 ; WX 444 ; N edotaccent ; B 25 -14 426 691 ; +C -1 ; WX 389 ; N Igrave ; B 20 0 370 923 ; +C -1 ; WX 389 ; N Imacron ; B 20 0 370 847 ; +C -1 ; WX 667 ; N Lcaron ; B 19 0 652 682 ; +C -1 ; WX 750 ; N onehalf ; B -7 -12 775 688 ; +C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; +C -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ; +C -1 ; WX 556 ; N ntilde ; B 21 0 539 674 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ; +C -1 ; WX 667 ; N Eacute ; B 16 0 641 923 ; +C -1 ; WX 444 ; N emacron ; B 25 -14 426 637 ; +C -1 ; WX 500 ; N gbreve ; B 28 -206 483 691 ; +C -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ; +C -1 ; WX 556 ; N Scaron ; B 35 -19 513 914 ; +C -1 ; WX 556 ; N Scommaaccent ; B 35 -218 513 692 ; +C -1 ; WX 778 ; N Ohungarumlaut ; B 35 -19 743 923 ; +C -1 ; WX 400 ; N degree ; B 57 402 343 688 ; +C -1 ; WX 500 ; N ograve ; B 25 -14 476 713 ; +C -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ; +C -1 ; WX 556 ; N ugrave ; B 16 -14 537 713 ; +C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ; +C -1 ; WX 722 ; N Dcaron ; B 14 0 690 914 ; +C -1 ; WX 444 ; N rcommaaccent ; B 29 -218 434 473 ; +C -1 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ; +C -1 ; WX 500 ; N otilde ; B 25 -14 476 674 ; +C -1 ; WX 722 ; N Rcommaaccent ; B 26 -218 715 676 ; +C -1 ; WX 667 ; N Lcommaaccent ; B 19 -218 638 676 ; +C -1 ; WX 722 ; N Atilde ; B 9 0 689 884 ; +C -1 ; WX 722 ; N Aogonek ; B 9 -193 699 690 ; +C -1 ; WX 722 ; N Aring ; B 9 0 689 935 ; +C -1 ; WX 778 ; N Otilde ; B 35 -19 743 884 ; +C -1 ; WX 444 ; N zdotaccent ; B 21 0 420 691 ; +C -1 ; WX 667 ; N Ecaron ; B 16 0 641 914 ; +C -1 ; WX 389 ; N Iogonek ; B 20 -193 370 676 ; +C -1 ; WX 556 ; N kcommaaccent ; B 22 -218 543 676 ; +C -1 ; WX 570 ; N minus ; B 33 209 537 297 ; +C -1 ; WX 389 ; N Icircumflex ; B 20 0 370 914 ; +C -1 ; WX 556 ; N ncaron ; B 21 0 539 704 ; +C -1 ; WX 333 ; N tcommaaccent ; B 20 -218 332 630 ; +C -1 ; WX 570 ; N logicalnot ; B 33 108 537 399 ; +C -1 ; WX 500 ; N odieresis ; B 25 -14 476 667 ; +C -1 ; WX 556 ; N udieresis ; B 16 -14 537 667 ; +C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ; +C -1 ; WX 500 ; N gcommaaccent ; B 28 -206 483 829 ; +C -1 ; WX 500 ; N eth ; B 25 -14 476 691 ; +C -1 ; WX 444 ; N zcaron ; B 21 0 420 704 ; +C -1 ; WX 556 ; N ncommaaccent ; B 21 -218 539 473 ; +C -1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ; +C -1 ; WX 278 ; N imacron ; B -8 0 272 637 ; +C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2242 +KPX A C -55 +KPX A Cacute -55 +KPX A Ccaron -55 +KPX A Ccedilla -55 +KPX A G -55 +KPX A Gbreve -55 +KPX A Gcommaaccent -55 +KPX A O -45 +KPX A Oacute -45 +KPX A Ocircumflex -45 +KPX A Odieresis -45 +KPX A Ograve -45 +KPX A Ohungarumlaut -45 +KPX A Omacron -45 +KPX A Oslash -45 +KPX A Otilde -45 +KPX A Q -45 +KPX A T -95 +KPX A Tcaron -95 +KPX A Tcommaaccent -95 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -145 +KPX A W -130 +KPX A Y -100 +KPX A Yacute -100 +KPX A Ydieresis -100 +KPX A p -25 +KPX A quoteright -74 +KPX A u -50 +KPX A uacute -50 +KPX A ucircumflex -50 +KPX A udieresis -50 +KPX A ugrave -50 +KPX A uhungarumlaut -50 +KPX A umacron -50 +KPX A uogonek -50 +KPX A uring -50 +KPX A v -100 +KPX A w -90 +KPX A y -74 +KPX A yacute -74 +KPX A ydieresis -74 +KPX Aacute C -55 +KPX Aacute Cacute -55 +KPX Aacute Ccaron -55 +KPX Aacute Ccedilla -55 +KPX Aacute G -55 +KPX Aacute Gbreve -55 +KPX Aacute Gcommaaccent -55 +KPX Aacute O -45 +KPX Aacute Oacute -45 +KPX Aacute Ocircumflex -45 +KPX Aacute Odieresis -45 +KPX Aacute Ograve -45 +KPX Aacute Ohungarumlaut -45 +KPX Aacute Omacron -45 +KPX Aacute Oslash -45 +KPX Aacute Otilde -45 +KPX Aacute Q -45 +KPX Aacute T -95 +KPX Aacute Tcaron -95 +KPX Aacute Tcommaaccent -95 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -145 +KPX Aacute W -130 +KPX Aacute Y -100 +KPX Aacute Yacute -100 +KPX Aacute Ydieresis -100 +KPX Aacute p -25 +KPX Aacute quoteright -74 +KPX Aacute u -50 +KPX Aacute uacute -50 +KPX Aacute ucircumflex -50 +KPX Aacute udieresis -50 +KPX Aacute ugrave -50 +KPX Aacute uhungarumlaut -50 +KPX Aacute umacron -50 +KPX Aacute uogonek -50 +KPX Aacute uring -50 +KPX Aacute v -100 +KPX Aacute w -90 +KPX Aacute y -74 +KPX Aacute yacute -74 +KPX Aacute ydieresis -74 +KPX Abreve C -55 +KPX Abreve Cacute -55 +KPX Abreve Ccaron -55 +KPX Abreve Ccedilla -55 +KPX Abreve G -55 +KPX Abreve Gbreve -55 +KPX Abreve Gcommaaccent -55 +KPX Abreve O -45 +KPX Abreve Oacute -45 +KPX Abreve Ocircumflex -45 +KPX Abreve Odieresis -45 +KPX Abreve Ograve -45 +KPX Abreve Ohungarumlaut -45 +KPX Abreve Omacron -45 +KPX Abreve Oslash -45 +KPX Abreve Otilde -45 +KPX Abreve Q -45 +KPX Abreve T -95 +KPX Abreve Tcaron -95 +KPX Abreve Tcommaaccent -95 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -145 +KPX Abreve W -130 +KPX Abreve Y -100 +KPX Abreve Yacute -100 +KPX Abreve Ydieresis -100 +KPX Abreve p -25 +KPX Abreve quoteright -74 +KPX Abreve u -50 +KPX Abreve uacute -50 +KPX Abreve ucircumflex -50 +KPX Abreve udieresis -50 +KPX Abreve ugrave -50 +KPX Abreve uhungarumlaut -50 +KPX Abreve umacron -50 +KPX Abreve uogonek -50 +KPX Abreve uring -50 +KPX Abreve v -100 +KPX Abreve w -90 +KPX Abreve y -74 +KPX Abreve yacute -74 +KPX Abreve ydieresis -74 +KPX Acircumflex C -55 +KPX Acircumflex Cacute -55 +KPX Acircumflex Ccaron -55 +KPX Acircumflex Ccedilla -55 +KPX Acircumflex G -55 +KPX Acircumflex Gbreve -55 +KPX Acircumflex Gcommaaccent -55 +KPX Acircumflex O -45 +KPX Acircumflex Oacute -45 +KPX Acircumflex Ocircumflex -45 +KPX Acircumflex Odieresis -45 +KPX Acircumflex Ograve -45 +KPX Acircumflex Ohungarumlaut -45 +KPX Acircumflex Omacron -45 +KPX Acircumflex Oslash -45 +KPX Acircumflex Otilde -45 +KPX Acircumflex Q -45 +KPX Acircumflex T -95 +KPX Acircumflex Tcaron -95 +KPX Acircumflex Tcommaaccent -95 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -145 +KPX Acircumflex W -130 +KPX Acircumflex Y -100 +KPX Acircumflex Yacute -100 +KPX Acircumflex Ydieresis -100 +KPX Acircumflex p -25 +KPX Acircumflex quoteright -74 +KPX Acircumflex u -50 +KPX Acircumflex uacute -50 +KPX Acircumflex ucircumflex -50 +KPX Acircumflex udieresis -50 +KPX Acircumflex ugrave -50 +KPX Acircumflex uhungarumlaut -50 +KPX Acircumflex umacron -50 +KPX Acircumflex uogonek -50 +KPX Acircumflex uring -50 +KPX Acircumflex v -100 +KPX Acircumflex w -90 +KPX Acircumflex y -74 +KPX Acircumflex yacute -74 +KPX Acircumflex ydieresis -74 +KPX Adieresis C -55 +KPX Adieresis Cacute -55 +KPX Adieresis Ccaron -55 +KPX Adieresis Ccedilla -55 +KPX Adieresis G -55 +KPX Adieresis Gbreve -55 +KPX Adieresis Gcommaaccent -55 +KPX Adieresis O -45 +KPX Adieresis Oacute -45 +KPX Adieresis Ocircumflex -45 +KPX Adieresis Odieresis -45 +KPX Adieresis Ograve -45 +KPX Adieresis Ohungarumlaut -45 +KPX Adieresis Omacron -45 +KPX Adieresis Oslash -45 +KPX Adieresis Otilde -45 +KPX Adieresis Q -45 +KPX Adieresis T -95 +KPX Adieresis Tcaron -95 +KPX Adieresis Tcommaaccent -95 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -145 +KPX Adieresis W -130 +KPX Adieresis Y -100 +KPX Adieresis Yacute -100 +KPX Adieresis Ydieresis -100 +KPX Adieresis p -25 +KPX Adieresis quoteright -74 +KPX Adieresis u -50 +KPX Adieresis uacute -50 +KPX Adieresis ucircumflex -50 +KPX Adieresis udieresis -50 +KPX Adieresis ugrave -50 +KPX Adieresis uhungarumlaut -50 +KPX Adieresis umacron -50 +KPX Adieresis uogonek -50 +KPX Adieresis uring -50 +KPX Adieresis v -100 +KPX Adieresis w -90 +KPX Adieresis y -74 +KPX Adieresis yacute -74 +KPX Adieresis ydieresis -74 +KPX Agrave C -55 +KPX Agrave Cacute -55 +KPX Agrave Ccaron -55 +KPX Agrave Ccedilla -55 +KPX Agrave G -55 +KPX Agrave Gbreve -55 +KPX Agrave Gcommaaccent -55 +KPX Agrave O -45 +KPX Agrave Oacute -45 +KPX Agrave Ocircumflex -45 +KPX Agrave Odieresis -45 +KPX Agrave Ograve -45 +KPX Agrave Ohungarumlaut -45 +KPX Agrave Omacron -45 +KPX Agrave Oslash -45 +KPX Agrave Otilde -45 +KPX Agrave Q -45 +KPX Agrave T -95 +KPX Agrave Tcaron -95 +KPX Agrave Tcommaaccent -95 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -145 +KPX Agrave W -130 +KPX Agrave Y -100 +KPX Agrave Yacute -100 +KPX Agrave Ydieresis -100 +KPX Agrave p -25 +KPX Agrave quoteright -74 +KPX Agrave u -50 +KPX Agrave uacute -50 +KPX Agrave ucircumflex -50 +KPX Agrave udieresis -50 +KPX Agrave ugrave -50 +KPX Agrave uhungarumlaut -50 +KPX Agrave umacron -50 +KPX Agrave uogonek -50 +KPX Agrave uring -50 +KPX Agrave v -100 +KPX Agrave w -90 +KPX Agrave y -74 +KPX Agrave yacute -74 +KPX Agrave ydieresis -74 +KPX Amacron C -55 +KPX Amacron Cacute -55 +KPX Amacron Ccaron -55 +KPX Amacron Ccedilla -55 +KPX Amacron G -55 +KPX Amacron Gbreve -55 +KPX Amacron Gcommaaccent -55 +KPX Amacron O -45 +KPX Amacron Oacute -45 +KPX Amacron Ocircumflex -45 +KPX Amacron Odieresis -45 +KPX Amacron Ograve -45 +KPX Amacron Ohungarumlaut -45 +KPX Amacron Omacron -45 +KPX Amacron Oslash -45 +KPX Amacron Otilde -45 +KPX Amacron Q -45 +KPX Amacron T -95 +KPX Amacron Tcaron -95 +KPX Amacron Tcommaaccent -95 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -145 +KPX Amacron W -130 +KPX Amacron Y -100 +KPX Amacron Yacute -100 +KPX Amacron Ydieresis -100 +KPX Amacron p -25 +KPX Amacron quoteright -74 +KPX Amacron u -50 +KPX Amacron uacute -50 +KPX Amacron ucircumflex -50 +KPX Amacron udieresis -50 +KPX Amacron ugrave -50 +KPX Amacron uhungarumlaut -50 +KPX Amacron umacron -50 +KPX Amacron uogonek -50 +KPX Amacron uring -50 +KPX Amacron v -100 +KPX Amacron w -90 +KPX Amacron y -74 +KPX Amacron yacute -74 +KPX Amacron ydieresis -74 +KPX Aogonek C -55 +KPX Aogonek Cacute -55 +KPX Aogonek Ccaron -55 +KPX Aogonek Ccedilla -55 +KPX Aogonek G -55 +KPX Aogonek Gbreve -55 +KPX Aogonek Gcommaaccent -55 +KPX Aogonek O -45 +KPX Aogonek Oacute -45 +KPX Aogonek Ocircumflex -45 +KPX Aogonek Odieresis -45 +KPX Aogonek Ograve -45 +KPX Aogonek Ohungarumlaut -45 +KPX Aogonek Omacron -45 +KPX Aogonek Oslash -45 +KPX Aogonek Otilde -45 +KPX Aogonek Q -45 +KPX Aogonek T -95 +KPX Aogonek Tcaron -95 +KPX Aogonek Tcommaaccent -95 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -145 +KPX Aogonek W -130 +KPX Aogonek Y -100 +KPX Aogonek Yacute -100 +KPX Aogonek Ydieresis -100 +KPX Aogonek p -25 +KPX Aogonek quoteright -74 +KPX Aogonek u -50 +KPX Aogonek uacute -50 +KPX Aogonek ucircumflex -50 +KPX Aogonek udieresis -50 +KPX Aogonek ugrave -50 +KPX Aogonek uhungarumlaut -50 +KPX Aogonek umacron -50 +KPX Aogonek uogonek -50 +KPX Aogonek uring -50 +KPX Aogonek v -100 +KPX Aogonek w -90 +KPX Aogonek y -34 +KPX Aogonek yacute -34 +KPX Aogonek ydieresis -34 +KPX Aring C -55 +KPX Aring Cacute -55 +KPX Aring Ccaron -55 +KPX Aring Ccedilla -55 +KPX Aring G -55 +KPX Aring Gbreve -55 +KPX Aring Gcommaaccent -55 +KPX Aring O -45 +KPX Aring Oacute -45 +KPX Aring Ocircumflex -45 +KPX Aring Odieresis -45 +KPX Aring Ograve -45 +KPX Aring Ohungarumlaut -45 +KPX Aring Omacron -45 +KPX Aring Oslash -45 +KPX Aring Otilde -45 +KPX Aring Q -45 +KPX Aring T -95 +KPX Aring Tcaron -95 +KPX Aring Tcommaaccent -95 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -145 +KPX Aring W -130 +KPX Aring Y -100 +KPX Aring Yacute -100 +KPX Aring Ydieresis -100 +KPX Aring p -25 +KPX Aring quoteright -74 +KPX Aring u -50 +KPX Aring uacute -50 +KPX Aring ucircumflex -50 +KPX Aring udieresis -50 +KPX Aring ugrave -50 +KPX Aring uhungarumlaut -50 +KPX Aring umacron -50 +KPX Aring uogonek -50 +KPX Aring uring -50 +KPX Aring v -100 +KPX Aring w -90 +KPX Aring y -74 +KPX Aring yacute -74 +KPX Aring ydieresis -74 +KPX Atilde C -55 +KPX Atilde Cacute -55 +KPX Atilde Ccaron -55 +KPX Atilde Ccedilla -55 +KPX Atilde G -55 +KPX Atilde Gbreve -55 +KPX Atilde Gcommaaccent -55 +KPX Atilde O -45 +KPX Atilde Oacute -45 +KPX Atilde Ocircumflex -45 +KPX Atilde Odieresis -45 +KPX Atilde Ograve -45 +KPX Atilde Ohungarumlaut -45 +KPX Atilde Omacron -45 +KPX Atilde Oslash -45 +KPX Atilde Otilde -45 +KPX Atilde Q -45 +KPX Atilde T -95 +KPX Atilde Tcaron -95 +KPX Atilde Tcommaaccent -95 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -145 +KPX Atilde W -130 +KPX Atilde Y -100 +KPX Atilde Yacute -100 +KPX Atilde Ydieresis -100 +KPX Atilde p -25 +KPX Atilde quoteright -74 +KPX Atilde u -50 +KPX Atilde uacute -50 +KPX Atilde ucircumflex -50 +KPX Atilde udieresis -50 +KPX Atilde ugrave -50 +KPX Atilde uhungarumlaut -50 +KPX Atilde umacron -50 +KPX Atilde uogonek -50 +KPX Atilde uring -50 +KPX Atilde v -100 +KPX Atilde w -90 +KPX Atilde y -74 +KPX Atilde yacute -74 +KPX Atilde ydieresis -74 +KPX B A -30 +KPX B Aacute -30 +KPX B Abreve -30 +KPX B Acircumflex -30 +KPX B Adieresis -30 +KPX B Agrave -30 +KPX B Amacron -30 +KPX B Aogonek -30 +KPX B Aring -30 +KPX B Atilde -30 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -35 +KPX D Aacute -35 +KPX D Abreve -35 +KPX D Acircumflex -35 +KPX D Adieresis -35 +KPX D Agrave -35 +KPX D Amacron -35 +KPX D Aogonek -35 +KPX D Aring -35 +KPX D Atilde -35 +KPX D V -40 +KPX D W -40 +KPX D Y -40 +KPX D Yacute -40 +KPX D Ydieresis -40 +KPX D period -20 +KPX Dcaron A -35 +KPX Dcaron Aacute -35 +KPX Dcaron Abreve -35 +KPX Dcaron Acircumflex -35 +KPX Dcaron Adieresis -35 +KPX Dcaron Agrave -35 +KPX Dcaron Amacron -35 +KPX Dcaron Aogonek -35 +KPX Dcaron Aring -35 +KPX Dcaron Atilde -35 +KPX Dcaron V -40 +KPX Dcaron W -40 +KPX Dcaron Y -40 +KPX Dcaron Yacute -40 +KPX Dcaron Ydieresis -40 +KPX Dcaron period -20 +KPX Dcroat A -35 +KPX Dcroat Aacute -35 +KPX Dcroat Abreve -35 +KPX Dcroat Acircumflex -35 +KPX Dcroat Adieresis -35 +KPX Dcroat Agrave -35 +KPX Dcroat Amacron -35 +KPX Dcroat Aogonek -35 +KPX Dcroat Aring -35 +KPX Dcroat Atilde -35 +KPX Dcroat V -40 +KPX Dcroat W -40 +KPX Dcroat Y -40 +KPX Dcroat Yacute -40 +KPX Dcroat Ydieresis -40 +KPX Dcroat period -20 +KPX F A -90 +KPX F Aacute -90 +KPX F Abreve -90 +KPX F Acircumflex -90 +KPX F Adieresis -90 +KPX F Agrave -90 +KPX F Amacron -90 +KPX F Aogonek -90 +KPX F Aring -90 +KPX F Atilde -90 +KPX F a -25 +KPX F aacute -25 +KPX F abreve -25 +KPX F acircumflex -25 +KPX F adieresis -25 +KPX F agrave -25 +KPX F amacron -25 +KPX F aogonek -25 +KPX F aring -25 +KPX F atilde -25 +KPX F comma -92 +KPX F e -25 +KPX F eacute -25 +KPX F ecaron -25 +KPX F ecircumflex -25 +KPX F edieresis -25 +KPX F edotaccent -25 +KPX F egrave -25 +KPX F emacron -25 +KPX F eogonek -25 +KPX F o -25 +KPX F oacute -25 +KPX F ocircumflex -25 +KPX F odieresis -25 +KPX F ograve -25 +KPX F ohungarumlaut -25 +KPX F omacron -25 +KPX F oslash -25 +KPX F otilde -25 +KPX F period -110 +KPX J A -30 +KPX J Aacute -30 +KPX J Abreve -30 +KPX J Acircumflex -30 +KPX J Adieresis -30 +KPX J Agrave -30 +KPX J Amacron -30 +KPX J Aogonek -30 +KPX J Aring -30 +KPX J Atilde -30 +KPX J a -15 +KPX J aacute -15 +KPX J abreve -15 +KPX J acircumflex -15 +KPX J adieresis -15 +KPX J agrave -15 +KPX J amacron -15 +KPX J aogonek -15 +KPX J aring -15 +KPX J atilde -15 +KPX J e -15 +KPX J eacute -15 +KPX J ecaron -15 +KPX J ecircumflex -15 +KPX J edieresis -15 +KPX J edotaccent -15 +KPX J egrave -15 +KPX J emacron -15 +KPX J eogonek -15 +KPX J o -15 +KPX J oacute -15 +KPX J ocircumflex -15 +KPX J odieresis -15 +KPX J ograve -15 +KPX J ohungarumlaut -15 +KPX J omacron -15 +KPX J oslash -15 +KPX J otilde -15 +KPX J period -20 +KPX J u -15 +KPX J uacute -15 +KPX J ucircumflex -15 +KPX J udieresis -15 +KPX J ugrave -15 +KPX J uhungarumlaut -15 +KPX J umacron -15 +KPX J uogonek -15 +KPX J uring -15 +KPX K O -30 +KPX K Oacute -30 +KPX K Ocircumflex -30 +KPX K Odieresis -30 +KPX K Ograve -30 +KPX K Ohungarumlaut -30 +KPX K Omacron -30 +KPX K Oslash -30 +KPX K Otilde -30 +KPX K e -25 +KPX K eacute -25 +KPX K ecaron -25 +KPX K ecircumflex -25 +KPX K edieresis -25 +KPX K edotaccent -25 +KPX K egrave -25 +KPX K emacron -25 +KPX K eogonek -25 +KPX K o -25 +KPX K oacute -25 +KPX K ocircumflex -25 +KPX K odieresis -25 +KPX K ograve -25 +KPX K ohungarumlaut -25 +KPX K omacron -25 +KPX K oslash -25 +KPX K otilde -25 +KPX K u -15 +KPX K uacute -15 +KPX K ucircumflex -15 +KPX K udieresis -15 +KPX K ugrave -15 +KPX K uhungarumlaut -15 +KPX K umacron -15 +KPX K uogonek -15 +KPX K uring -15 +KPX K y -45 +KPX K yacute -45 +KPX K ydieresis -45 +KPX Kcommaaccent O -30 +KPX Kcommaaccent Oacute -30 +KPX Kcommaaccent Ocircumflex -30 +KPX Kcommaaccent Odieresis -30 +KPX Kcommaaccent Ograve -30 +KPX Kcommaaccent Ohungarumlaut -30 +KPX Kcommaaccent Omacron -30 +KPX Kcommaaccent Oslash -30 +KPX Kcommaaccent Otilde -30 +KPX Kcommaaccent e -25 +KPX Kcommaaccent eacute -25 +KPX Kcommaaccent ecaron -25 +KPX Kcommaaccent ecircumflex -25 +KPX Kcommaaccent edieresis -25 +KPX Kcommaaccent edotaccent -25 +KPX Kcommaaccent egrave -25 +KPX Kcommaaccent emacron -25 +KPX Kcommaaccent eogonek -25 +KPX Kcommaaccent o -25 +KPX Kcommaaccent oacute -25 +KPX Kcommaaccent ocircumflex -25 +KPX Kcommaaccent odieresis -25 +KPX Kcommaaccent ograve -25 +KPX Kcommaaccent ohungarumlaut -25 +KPX Kcommaaccent omacron -25 +KPX Kcommaaccent oslash -25 +KPX Kcommaaccent otilde -25 +KPX Kcommaaccent u -15 +KPX Kcommaaccent uacute -15 +KPX Kcommaaccent ucircumflex -15 +KPX Kcommaaccent udieresis -15 +KPX Kcommaaccent ugrave -15 +KPX Kcommaaccent uhungarumlaut -15 +KPX Kcommaaccent umacron -15 +KPX Kcommaaccent uogonek -15 +KPX Kcommaaccent uring -15 +KPX Kcommaaccent y -45 +KPX Kcommaaccent yacute -45 +KPX Kcommaaccent ydieresis -45 +KPX L T -92 +KPX L Tcaron -92 +KPX L Tcommaaccent -92 +KPX L V -92 +KPX L W -92 +KPX L Y -92 +KPX L Yacute -92 +KPX L Ydieresis -92 +KPX L quotedblright -20 +KPX L quoteright -110 +KPX L y -55 +KPX L yacute -55 +KPX L ydieresis -55 +KPX Lacute T -92 +KPX Lacute Tcaron -92 +KPX Lacute Tcommaaccent -92 +KPX Lacute V -92 +KPX Lacute W -92 +KPX Lacute Y -92 +KPX Lacute Yacute -92 +KPX Lacute Ydieresis -92 +KPX Lacute quotedblright -20 +KPX Lacute quoteright -110 +KPX Lacute y -55 +KPX Lacute yacute -55 +KPX Lacute ydieresis -55 +KPX Lcommaaccent T -92 +KPX Lcommaaccent Tcaron -92 +KPX Lcommaaccent Tcommaaccent -92 +KPX Lcommaaccent V -92 +KPX Lcommaaccent W -92 +KPX Lcommaaccent Y -92 +KPX Lcommaaccent Yacute -92 +KPX Lcommaaccent Ydieresis -92 +KPX Lcommaaccent quotedblright -20 +KPX Lcommaaccent quoteright -110 +KPX Lcommaaccent y -55 +KPX Lcommaaccent yacute -55 +KPX Lcommaaccent ydieresis -55 +KPX Lslash T -92 +KPX Lslash Tcaron -92 +KPX Lslash Tcommaaccent -92 +KPX Lslash V -92 +KPX Lslash W -92 +KPX Lslash Y -92 +KPX Lslash Yacute -92 +KPX Lslash Ydieresis -92 +KPX Lslash quotedblright -20 +KPX Lslash quoteright -110 +KPX Lslash y -55 +KPX Lslash yacute -55 +KPX Lslash ydieresis -55 +KPX N A -20 +KPX N Aacute -20 +KPX N Abreve -20 +KPX N Acircumflex -20 +KPX N Adieresis -20 +KPX N Agrave -20 +KPX N Amacron -20 +KPX N Aogonek -20 +KPX N Aring -20 +KPX N Atilde -20 +KPX Nacute A -20 +KPX Nacute Aacute -20 +KPX Nacute Abreve -20 +KPX Nacute Acircumflex -20 +KPX Nacute Adieresis -20 +KPX Nacute Agrave -20 +KPX Nacute Amacron -20 +KPX Nacute Aogonek -20 +KPX Nacute Aring -20 +KPX Nacute Atilde -20 +KPX Ncaron A -20 +KPX Ncaron Aacute -20 +KPX Ncaron Abreve -20 +KPX Ncaron Acircumflex -20 +KPX Ncaron Adieresis -20 +KPX Ncaron Agrave -20 +KPX Ncaron Amacron -20 +KPX Ncaron Aogonek -20 +KPX Ncaron Aring -20 +KPX Ncaron Atilde -20 +KPX Ncommaaccent A -20 +KPX Ncommaaccent Aacute -20 +KPX Ncommaaccent Abreve -20 +KPX Ncommaaccent Acircumflex -20 +KPX Ncommaaccent Adieresis -20 +KPX Ncommaaccent Agrave -20 +KPX Ncommaaccent Amacron -20 +KPX Ncommaaccent Aogonek -20 +KPX Ncommaaccent Aring -20 +KPX Ncommaaccent Atilde -20 +KPX Ntilde A -20 +KPX Ntilde Aacute -20 +KPX Ntilde Abreve -20 +KPX Ntilde Acircumflex -20 +KPX Ntilde Adieresis -20 +KPX Ntilde Agrave -20 +KPX Ntilde Amacron -20 +KPX Ntilde Aogonek -20 +KPX Ntilde Aring -20 +KPX Ntilde Atilde -20 +KPX O A -40 +KPX O Aacute -40 +KPX O Abreve -40 +KPX O Acircumflex -40 +KPX O Adieresis -40 +KPX O Agrave -40 +KPX O Amacron -40 +KPX O Aogonek -40 +KPX O Aring -40 +KPX O Atilde -40 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -50 +KPX O X -40 +KPX O Y -50 +KPX O Yacute -50 +KPX O Ydieresis -50 +KPX Oacute A -40 +KPX Oacute Aacute -40 +KPX Oacute Abreve -40 +KPX Oacute Acircumflex -40 +KPX Oacute Adieresis -40 +KPX Oacute Agrave -40 +KPX Oacute Amacron -40 +KPX Oacute Aogonek -40 +KPX Oacute Aring -40 +KPX Oacute Atilde -40 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -50 +KPX Oacute X -40 +KPX Oacute Y -50 +KPX Oacute Yacute -50 +KPX Oacute Ydieresis -50 +KPX Ocircumflex A -40 +KPX Ocircumflex Aacute -40 +KPX Ocircumflex Abreve -40 +KPX Ocircumflex Acircumflex -40 +KPX Ocircumflex Adieresis -40 +KPX Ocircumflex Agrave -40 +KPX Ocircumflex Amacron -40 +KPX Ocircumflex Aogonek -40 +KPX Ocircumflex Aring -40 +KPX Ocircumflex Atilde -40 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -50 +KPX Ocircumflex X -40 +KPX Ocircumflex Y -50 +KPX Ocircumflex Yacute -50 +KPX Ocircumflex Ydieresis -50 +KPX Odieresis A -40 +KPX Odieresis Aacute -40 +KPX Odieresis Abreve -40 +KPX Odieresis Acircumflex -40 +KPX Odieresis Adieresis -40 +KPX Odieresis Agrave -40 +KPX Odieresis Amacron -40 +KPX Odieresis Aogonek -40 +KPX Odieresis Aring -40 +KPX Odieresis Atilde -40 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -50 +KPX Odieresis X -40 +KPX Odieresis Y -50 +KPX Odieresis Yacute -50 +KPX Odieresis Ydieresis -50 +KPX Ograve A -40 +KPX Ograve Aacute -40 +KPX Ograve Abreve -40 +KPX Ograve Acircumflex -40 +KPX Ograve Adieresis -40 +KPX Ograve Agrave -40 +KPX Ograve Amacron -40 +KPX Ograve Aogonek -40 +KPX Ograve Aring -40 +KPX Ograve Atilde -40 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -50 +KPX Ograve X -40 +KPX Ograve Y -50 +KPX Ograve Yacute -50 +KPX Ograve Ydieresis -50 +KPX Ohungarumlaut A -40 +KPX Ohungarumlaut Aacute -40 +KPX Ohungarumlaut Abreve -40 +KPX Ohungarumlaut Acircumflex -40 +KPX Ohungarumlaut Adieresis -40 +KPX Ohungarumlaut Agrave -40 +KPX Ohungarumlaut Amacron -40 +KPX Ohungarumlaut Aogonek -40 +KPX Ohungarumlaut Aring -40 +KPX Ohungarumlaut Atilde -40 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -50 +KPX Ohungarumlaut X -40 +KPX Ohungarumlaut Y -50 +KPX Ohungarumlaut Yacute -50 +KPX Ohungarumlaut Ydieresis -50 +KPX Omacron A -40 +KPX Omacron Aacute -40 +KPX Omacron Abreve -40 +KPX Omacron Acircumflex -40 +KPX Omacron Adieresis -40 +KPX Omacron Agrave -40 +KPX Omacron Amacron -40 +KPX Omacron Aogonek -40 +KPX Omacron Aring -40 +KPX Omacron Atilde -40 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -50 +KPX Omacron X -40 +KPX Omacron Y -50 +KPX Omacron Yacute -50 +KPX Omacron Ydieresis -50 +KPX Oslash A -40 +KPX Oslash Aacute -40 +KPX Oslash Abreve -40 +KPX Oslash Acircumflex -40 +KPX Oslash Adieresis -40 +KPX Oslash Agrave -40 +KPX Oslash Amacron -40 +KPX Oslash Aogonek -40 +KPX Oslash Aring -40 +KPX Oslash Atilde -40 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -50 +KPX Oslash X -40 +KPX Oslash Y -50 +KPX Oslash Yacute -50 +KPX Oslash Ydieresis -50 +KPX Otilde A -40 +KPX Otilde Aacute -40 +KPX Otilde Abreve -40 +KPX Otilde Acircumflex -40 +KPX Otilde Adieresis -40 +KPX Otilde Agrave -40 +KPX Otilde Amacron -40 +KPX Otilde Aogonek -40 +KPX Otilde Aring -40 +KPX Otilde Atilde -40 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -50 +KPX Otilde X -40 +KPX Otilde Y -50 +KPX Otilde Yacute -50 +KPX Otilde Ydieresis -50 +KPX P A -74 +KPX P Aacute -74 +KPX P Abreve -74 +KPX P Acircumflex -74 +KPX P Adieresis -74 +KPX P Agrave -74 +KPX P Amacron -74 +KPX P Aogonek -74 +KPX P Aring -74 +KPX P Atilde -74 +KPX P a -10 +KPX P aacute -10 +KPX P abreve -10 +KPX P acircumflex -10 +KPX P adieresis -10 +KPX P agrave -10 +KPX P amacron -10 +KPX P aogonek -10 +KPX P aring -10 +KPX P atilde -10 +KPX P comma -92 +KPX P e -20 +KPX P eacute -20 +KPX P ecaron -20 +KPX P ecircumflex -20 +KPX P edieresis -20 +KPX P edotaccent -20 +KPX P egrave -20 +KPX P emacron -20 +KPX P eogonek -20 +KPX P o -20 +KPX P oacute -20 +KPX P ocircumflex -20 +KPX P odieresis -20 +KPX P ograve -20 +KPX P ohungarumlaut -20 +KPX P omacron -20 +KPX P oslash -20 +KPX P otilde -20 +KPX P period -110 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX Q period -20 +KPX R O -30 +KPX R Oacute -30 +KPX R Ocircumflex -30 +KPX R Odieresis -30 +KPX R Ograve -30 +KPX R Ohungarumlaut -30 +KPX R Omacron -30 +KPX R Oslash -30 +KPX R Otilde -30 +KPX R T -40 +KPX R Tcaron -40 +KPX R Tcommaaccent -40 +KPX R U -30 +KPX R Uacute -30 +KPX R Ucircumflex -30 +KPX R Udieresis -30 +KPX R Ugrave -30 +KPX R Uhungarumlaut -30 +KPX R Umacron -30 +KPX R Uogonek -30 +KPX R Uring -30 +KPX R V -55 +KPX R W -35 +KPX R Y -35 +KPX R Yacute -35 +KPX R Ydieresis -35 +KPX Racute O -30 +KPX Racute Oacute -30 +KPX Racute Ocircumflex -30 +KPX Racute Odieresis -30 +KPX Racute Ograve -30 +KPX Racute Ohungarumlaut -30 +KPX Racute Omacron -30 +KPX Racute Oslash -30 +KPX Racute Otilde -30 +KPX Racute T -40 +KPX Racute Tcaron -40 +KPX Racute Tcommaaccent -40 +KPX Racute U -30 +KPX Racute Uacute -30 +KPX Racute Ucircumflex -30 +KPX Racute Udieresis -30 +KPX Racute Ugrave -30 +KPX Racute Uhungarumlaut -30 +KPX Racute Umacron -30 +KPX Racute Uogonek -30 +KPX Racute Uring -30 +KPX Racute V -55 +KPX Racute W -35 +KPX Racute Y -35 +KPX Racute Yacute -35 +KPX Racute Ydieresis -35 +KPX Rcaron O -30 +KPX Rcaron Oacute -30 +KPX Rcaron Ocircumflex -30 +KPX Rcaron Odieresis -30 +KPX Rcaron Ograve -30 +KPX Rcaron Ohungarumlaut -30 +KPX Rcaron Omacron -30 +KPX Rcaron Oslash -30 +KPX Rcaron Otilde -30 +KPX Rcaron T -40 +KPX Rcaron Tcaron -40 +KPX Rcaron Tcommaaccent -40 +KPX Rcaron U -30 +KPX Rcaron Uacute -30 +KPX Rcaron Ucircumflex -30 +KPX Rcaron Udieresis -30 +KPX Rcaron Ugrave -30 +KPX Rcaron Uhungarumlaut -30 +KPX Rcaron Umacron -30 +KPX Rcaron Uogonek -30 +KPX Rcaron Uring -30 +KPX Rcaron V -55 +KPX Rcaron W -35 +KPX Rcaron Y -35 +KPX Rcaron Yacute -35 +KPX Rcaron Ydieresis -35 +KPX Rcommaaccent O -30 +KPX Rcommaaccent Oacute -30 +KPX Rcommaaccent Ocircumflex -30 +KPX Rcommaaccent Odieresis -30 +KPX Rcommaaccent Ograve -30 +KPX Rcommaaccent Ohungarumlaut -30 +KPX Rcommaaccent Omacron -30 +KPX Rcommaaccent Oslash -30 +KPX Rcommaaccent Otilde -30 +KPX Rcommaaccent T -40 +KPX Rcommaaccent Tcaron -40 +KPX Rcommaaccent Tcommaaccent -40 +KPX Rcommaaccent U -30 +KPX Rcommaaccent Uacute -30 +KPX Rcommaaccent Ucircumflex -30 +KPX Rcommaaccent Udieresis -30 +KPX Rcommaaccent Ugrave -30 +KPX Rcommaaccent Uhungarumlaut -30 +KPX Rcommaaccent Umacron -30 +KPX Rcommaaccent Uogonek -30 +KPX Rcommaaccent Uring -30 +KPX Rcommaaccent V -55 +KPX Rcommaaccent W -35 +KPX Rcommaaccent Y -35 +KPX Rcommaaccent Yacute -35 +KPX Rcommaaccent Ydieresis -35 +KPX T A -90 +KPX T Aacute -90 +KPX T Abreve -90 +KPX T Acircumflex -90 +KPX T Adieresis -90 +KPX T Agrave -90 +KPX T Amacron -90 +KPX T Aogonek -90 +KPX T Aring -90 +KPX T Atilde -90 +KPX T O -18 +KPX T Oacute -18 +KPX T Ocircumflex -18 +KPX T Odieresis -18 +KPX T Ograve -18 +KPX T Ohungarumlaut -18 +KPX T Omacron -18 +KPX T Oslash -18 +KPX T Otilde -18 +KPX T a -92 +KPX T aacute -92 +KPX T abreve -52 +KPX T acircumflex -52 +KPX T adieresis -52 +KPX T agrave -52 +KPX T amacron -52 +KPX T aogonek -92 +KPX T aring -92 +KPX T atilde -52 +KPX T colon -74 +KPX T comma -74 +KPX T e -92 +KPX T eacute -92 +KPX T ecaron -92 +KPX T ecircumflex -92 +KPX T edieresis -52 +KPX T edotaccent -92 +KPX T egrave -52 +KPX T emacron -52 +KPX T eogonek -92 +KPX T hyphen -92 +KPX T i -18 +KPX T iacute -18 +KPX T iogonek -18 +KPX T o -92 +KPX T oacute -92 +KPX T ocircumflex -92 +KPX T odieresis -92 +KPX T ograve -92 +KPX T ohungarumlaut -92 +KPX T omacron -92 +KPX T oslash -92 +KPX T otilde -92 +KPX T period -90 +KPX T r -74 +KPX T racute -74 +KPX T rcaron -74 +KPX T rcommaaccent -74 +KPX T semicolon -74 +KPX T u -92 +KPX T uacute -92 +KPX T ucircumflex -92 +KPX T udieresis -92 +KPX T ugrave -92 +KPX T uhungarumlaut -92 +KPX T umacron -92 +KPX T uogonek -92 +KPX T uring -92 +KPX T w -74 +KPX T y -34 +KPX T yacute -34 +KPX T ydieresis -34 +KPX Tcaron A -90 +KPX Tcaron Aacute -90 +KPX Tcaron Abreve -90 +KPX Tcaron Acircumflex -90 +KPX Tcaron Adieresis -90 +KPX Tcaron Agrave -90 +KPX Tcaron Amacron -90 +KPX Tcaron Aogonek -90 +KPX Tcaron Aring -90 +KPX Tcaron Atilde -90 +KPX Tcaron O -18 +KPX Tcaron Oacute -18 +KPX Tcaron Ocircumflex -18 +KPX Tcaron Odieresis -18 +KPX Tcaron Ograve -18 +KPX Tcaron Ohungarumlaut -18 +KPX Tcaron Omacron -18 +KPX Tcaron Oslash -18 +KPX Tcaron Otilde -18 +KPX Tcaron a -92 +KPX Tcaron aacute -92 +KPX Tcaron abreve -52 +KPX Tcaron acircumflex -52 +KPX Tcaron adieresis -52 +KPX Tcaron agrave -52 +KPX Tcaron amacron -52 +KPX Tcaron aogonek -92 +KPX Tcaron aring -92 +KPX Tcaron atilde -52 +KPX Tcaron colon -74 +KPX Tcaron comma -74 +KPX Tcaron e -92 +KPX Tcaron eacute -92 +KPX Tcaron ecaron -92 +KPX Tcaron ecircumflex -92 +KPX Tcaron edieresis -52 +KPX Tcaron edotaccent -92 +KPX Tcaron egrave -52 +KPX Tcaron emacron -52 +KPX Tcaron eogonek -92 +KPX Tcaron hyphen -92 +KPX Tcaron i -18 +KPX Tcaron iacute -18 +KPX Tcaron iogonek -18 +KPX Tcaron o -92 +KPX Tcaron oacute -92 +KPX Tcaron ocircumflex -92 +KPX Tcaron odieresis -92 +KPX Tcaron ograve -92 +KPX Tcaron ohungarumlaut -92 +KPX Tcaron omacron -92 +KPX Tcaron oslash -92 +KPX Tcaron otilde -92 +KPX Tcaron period -90 +KPX Tcaron r -74 +KPX Tcaron racute -74 +KPX Tcaron rcaron -74 +KPX Tcaron rcommaaccent -74 +KPX Tcaron semicolon -74 +KPX Tcaron u -92 +KPX Tcaron uacute -92 +KPX Tcaron ucircumflex -92 +KPX Tcaron udieresis -92 +KPX Tcaron ugrave -92 +KPX Tcaron uhungarumlaut -92 +KPX Tcaron umacron -92 +KPX Tcaron uogonek -92 +KPX Tcaron uring -92 +KPX Tcaron w -74 +KPX Tcaron y -34 +KPX Tcaron yacute -34 +KPX Tcaron ydieresis -34 +KPX Tcommaaccent A -90 +KPX Tcommaaccent Aacute -90 +KPX Tcommaaccent Abreve -90 +KPX Tcommaaccent Acircumflex -90 +KPX Tcommaaccent Adieresis -90 +KPX Tcommaaccent Agrave -90 +KPX Tcommaaccent Amacron -90 +KPX Tcommaaccent Aogonek -90 +KPX Tcommaaccent Aring -90 +KPX Tcommaaccent Atilde -90 +KPX Tcommaaccent O -18 +KPX Tcommaaccent Oacute -18 +KPX Tcommaaccent Ocircumflex -18 +KPX Tcommaaccent Odieresis -18 +KPX Tcommaaccent Ograve -18 +KPX Tcommaaccent Ohungarumlaut -18 +KPX Tcommaaccent Omacron -18 +KPX Tcommaaccent Oslash -18 +KPX Tcommaaccent Otilde -18 +KPX Tcommaaccent a -92 +KPX Tcommaaccent aacute -92 +KPX Tcommaaccent abreve -52 +KPX Tcommaaccent acircumflex -52 +KPX Tcommaaccent adieresis -52 +KPX Tcommaaccent agrave -52 +KPX Tcommaaccent amacron -52 +KPX Tcommaaccent aogonek -92 +KPX Tcommaaccent aring -92 +KPX Tcommaaccent atilde -52 +KPX Tcommaaccent colon -74 +KPX Tcommaaccent comma -74 +KPX Tcommaaccent e -92 +KPX Tcommaaccent eacute -92 +KPX Tcommaaccent ecaron -92 +KPX Tcommaaccent ecircumflex -92 +KPX Tcommaaccent edieresis -52 +KPX Tcommaaccent edotaccent -92 +KPX Tcommaaccent egrave -52 +KPX Tcommaaccent emacron -52 +KPX Tcommaaccent eogonek -92 +KPX Tcommaaccent hyphen -92 +KPX Tcommaaccent i -18 +KPX Tcommaaccent iacute -18 +KPX Tcommaaccent iogonek -18 +KPX Tcommaaccent o -92 +KPX Tcommaaccent oacute -92 +KPX Tcommaaccent ocircumflex -92 +KPX Tcommaaccent odieresis -92 +KPX Tcommaaccent ograve -92 +KPX Tcommaaccent ohungarumlaut -92 +KPX Tcommaaccent omacron -92 +KPX Tcommaaccent oslash -92 +KPX Tcommaaccent otilde -92 +KPX Tcommaaccent period -90 +KPX Tcommaaccent r -74 +KPX Tcommaaccent racute -74 +KPX Tcommaaccent rcaron -74 +KPX Tcommaaccent rcommaaccent -74 +KPX Tcommaaccent semicolon -74 +KPX Tcommaaccent u -92 +KPX Tcommaaccent uacute -92 +KPX Tcommaaccent ucircumflex -92 +KPX Tcommaaccent udieresis -92 +KPX Tcommaaccent ugrave -92 +KPX Tcommaaccent uhungarumlaut -92 +KPX Tcommaaccent umacron -92 +KPX Tcommaaccent uogonek -92 +KPX Tcommaaccent uring -92 +KPX Tcommaaccent w -74 +KPX Tcommaaccent y -34 +KPX Tcommaaccent yacute -34 +KPX Tcommaaccent ydieresis -34 +KPX U A -60 +KPX U Aacute -60 +KPX U Abreve -60 +KPX U Acircumflex -60 +KPX U Adieresis -60 +KPX U Agrave -60 +KPX U Amacron -60 +KPX U Aogonek -60 +KPX U Aring -60 +KPX U Atilde -60 +KPX U comma -50 +KPX U period -50 +KPX Uacute A -60 +KPX Uacute Aacute -60 +KPX Uacute Abreve -60 +KPX Uacute Acircumflex -60 +KPX Uacute Adieresis -60 +KPX Uacute Agrave -60 +KPX Uacute Amacron -60 +KPX Uacute Aogonek -60 +KPX Uacute Aring -60 +KPX Uacute Atilde -60 +KPX Uacute comma -50 +KPX Uacute period -50 +KPX Ucircumflex A -60 +KPX Ucircumflex Aacute -60 +KPX Ucircumflex Abreve -60 +KPX Ucircumflex Acircumflex -60 +KPX Ucircumflex Adieresis -60 +KPX Ucircumflex Agrave -60 +KPX Ucircumflex Amacron -60 +KPX Ucircumflex Aogonek -60 +KPX Ucircumflex Aring -60 +KPX Ucircumflex Atilde -60 +KPX Ucircumflex comma -50 +KPX Ucircumflex period -50 +KPX Udieresis A -60 +KPX Udieresis Aacute -60 +KPX Udieresis Abreve -60 +KPX Udieresis Acircumflex -60 +KPX Udieresis Adieresis -60 +KPX Udieresis Agrave -60 +KPX Udieresis Amacron -60 +KPX Udieresis Aogonek -60 +KPX Udieresis Aring -60 +KPX Udieresis Atilde -60 +KPX Udieresis comma -50 +KPX Udieresis period -50 +KPX Ugrave A -60 +KPX Ugrave Aacute -60 +KPX Ugrave Abreve -60 +KPX Ugrave Acircumflex -60 +KPX Ugrave Adieresis -60 +KPX Ugrave Agrave -60 +KPX Ugrave Amacron -60 +KPX Ugrave Aogonek -60 +KPX Ugrave Aring -60 +KPX Ugrave Atilde -60 +KPX Ugrave comma -50 +KPX Ugrave period -50 +KPX Uhungarumlaut A -60 +KPX Uhungarumlaut Aacute -60 +KPX Uhungarumlaut Abreve -60 +KPX Uhungarumlaut Acircumflex -60 +KPX Uhungarumlaut Adieresis -60 +KPX Uhungarumlaut Agrave -60 +KPX Uhungarumlaut Amacron -60 +KPX Uhungarumlaut Aogonek -60 +KPX Uhungarumlaut Aring -60 +KPX Uhungarumlaut Atilde -60 +KPX Uhungarumlaut comma -50 +KPX Uhungarumlaut period -50 +KPX Umacron A -60 +KPX Umacron Aacute -60 +KPX Umacron Abreve -60 +KPX Umacron Acircumflex -60 +KPX Umacron Adieresis -60 +KPX Umacron Agrave -60 +KPX Umacron Amacron -60 +KPX Umacron Aogonek -60 +KPX Umacron Aring -60 +KPX Umacron Atilde -60 +KPX Umacron comma -50 +KPX Umacron period -50 +KPX Uogonek A -60 +KPX Uogonek Aacute -60 +KPX Uogonek Abreve -60 +KPX Uogonek Acircumflex -60 +KPX Uogonek Adieresis -60 +KPX Uogonek Agrave -60 +KPX Uogonek Amacron -60 +KPX Uogonek Aogonek -60 +KPX Uogonek Aring -60 +KPX Uogonek Atilde -60 +KPX Uogonek comma -50 +KPX Uogonek period -50 +KPX Uring A -60 +KPX Uring Aacute -60 +KPX Uring Abreve -60 +KPX Uring Acircumflex -60 +KPX Uring Adieresis -60 +KPX Uring Agrave -60 +KPX Uring Amacron -60 +KPX Uring Aogonek -60 +KPX Uring Aring -60 +KPX Uring Atilde -60 +KPX Uring comma -50 +KPX Uring period -50 +KPX V A -135 +KPX V Aacute -135 +KPX V Abreve -135 +KPX V Acircumflex -135 +KPX V Adieresis -135 +KPX V Agrave -135 +KPX V Amacron -135 +KPX V Aogonek -135 +KPX V Aring -135 +KPX V Atilde -135 +KPX V G -30 +KPX V Gbreve -30 +KPX V Gcommaaccent -30 +KPX V O -45 +KPX V Oacute -45 +KPX V Ocircumflex -45 +KPX V Odieresis -45 +KPX V Ograve -45 +KPX V Ohungarumlaut -45 +KPX V Omacron -45 +KPX V Oslash -45 +KPX V Otilde -45 +KPX V a -92 +KPX V aacute -92 +KPX V abreve -92 +KPX V acircumflex -92 +KPX V adieresis -92 +KPX V agrave -92 +KPX V amacron -92 +KPX V aogonek -92 +KPX V aring -92 +KPX V atilde -92 +KPX V colon -92 +KPX V comma -129 +KPX V e -100 +KPX V eacute -100 +KPX V ecaron -100 +KPX V ecircumflex -100 +KPX V edieresis -100 +KPX V edotaccent -100 +KPX V egrave -100 +KPX V emacron -100 +KPX V eogonek -100 +KPX V hyphen -74 +KPX V i -37 +KPX V iacute -37 +KPX V icircumflex -37 +KPX V idieresis -37 +KPX V igrave -37 +KPX V imacron -37 +KPX V iogonek -37 +KPX V o -100 +KPX V oacute -100 +KPX V ocircumflex -100 +KPX V odieresis -100 +KPX V ograve -100 +KPX V ohungarumlaut -100 +KPX V omacron -100 +KPX V oslash -100 +KPX V otilde -100 +KPX V period -145 +KPX V semicolon -92 +KPX V u -92 +KPX V uacute -92 +KPX V ucircumflex -92 +KPX V udieresis -92 +KPX V ugrave -92 +KPX V uhungarumlaut -92 +KPX V umacron -92 +KPX V uogonek -92 +KPX V uring -92 +KPX W A -120 +KPX W Aacute -120 +KPX W Abreve -120 +KPX W Acircumflex -120 +KPX W Adieresis -120 +KPX W Agrave -120 +KPX W Amacron -120 +KPX W Aogonek -120 +KPX W Aring -120 +KPX W Atilde -120 +KPX W O -10 +KPX W Oacute -10 +KPX W Ocircumflex -10 +KPX W Odieresis -10 +KPX W Ograve -10 +KPX W Ohungarumlaut -10 +KPX W Omacron -10 +KPX W Oslash -10 +KPX W Otilde -10 +KPX W a -65 +KPX W aacute -65 +KPX W abreve -65 +KPX W acircumflex -65 +KPX W adieresis -65 +KPX W agrave -65 +KPX W amacron -65 +KPX W aogonek -65 +KPX W aring -65 +KPX W atilde -65 +KPX W colon -55 +KPX W comma -92 +KPX W e -65 +KPX W eacute -65 +KPX W ecaron -65 +KPX W ecircumflex -65 +KPX W edieresis -65 +KPX W edotaccent -65 +KPX W egrave -65 +KPX W emacron -65 +KPX W eogonek -65 +KPX W hyphen -37 +KPX W i -18 +KPX W iacute -18 +KPX W iogonek -18 +KPX W o -75 +KPX W oacute -75 +KPX W ocircumflex -75 +KPX W odieresis -75 +KPX W ograve -75 +KPX W ohungarumlaut -75 +KPX W omacron -75 +KPX W oslash -75 +KPX W otilde -75 +KPX W period -92 +KPX W semicolon -55 +KPX W u -50 +KPX W uacute -50 +KPX W ucircumflex -50 +KPX W udieresis -50 +KPX W ugrave -50 +KPX W uhungarumlaut -50 +KPX W umacron -50 +KPX W uogonek -50 +KPX W uring -50 +KPX W y -60 +KPX W yacute -60 +KPX W ydieresis -60 +KPX Y A -110 +KPX Y Aacute -110 +KPX Y Abreve -110 +KPX Y Acircumflex -110 +KPX Y Adieresis -110 +KPX Y Agrave -110 +KPX Y Amacron -110 +KPX Y Aogonek -110 +KPX Y Aring -110 +KPX Y Atilde -110 +KPX Y O -35 +KPX Y Oacute -35 +KPX Y Ocircumflex -35 +KPX Y Odieresis -35 +KPX Y Ograve -35 +KPX Y Ohungarumlaut -35 +KPX Y Omacron -35 +KPX Y Oslash -35 +KPX Y Otilde -35 +KPX Y a -85 +KPX Y aacute -85 +KPX Y abreve -85 +KPX Y acircumflex -85 +KPX Y adieresis -85 +KPX Y agrave -85 +KPX Y amacron -85 +KPX Y aogonek -85 +KPX Y aring -85 +KPX Y atilde -85 +KPX Y colon -92 +KPX Y comma -92 +KPX Y e -111 +KPX Y eacute -111 +KPX Y ecaron -111 +KPX Y ecircumflex -111 +KPX Y edieresis -71 +KPX Y edotaccent -111 +KPX Y egrave -71 +KPX Y emacron -71 +KPX Y eogonek -111 +KPX Y hyphen -92 +KPX Y i -37 +KPX Y iacute -37 +KPX Y iogonek -37 +KPX Y o -111 +KPX Y oacute -111 +KPX Y ocircumflex -111 +KPX Y odieresis -111 +KPX Y ograve -111 +KPX Y ohungarumlaut -111 +KPX Y omacron -111 +KPX Y oslash -111 +KPX Y otilde -111 +KPX Y period -92 +KPX Y semicolon -92 +KPX Y u -92 +KPX Y uacute -92 +KPX Y ucircumflex -92 +KPX Y udieresis -92 +KPX Y ugrave -92 +KPX Y uhungarumlaut -92 +KPX Y umacron -92 +KPX Y uogonek -92 +KPX Y uring -92 +KPX Yacute A -110 +KPX Yacute Aacute -110 +KPX Yacute Abreve -110 +KPX Yacute Acircumflex -110 +KPX Yacute Adieresis -110 +KPX Yacute Agrave -110 +KPX Yacute Amacron -110 +KPX Yacute Aogonek -110 +KPX Yacute Aring -110 +KPX Yacute Atilde -110 +KPX Yacute O -35 +KPX Yacute Oacute -35 +KPX Yacute Ocircumflex -35 +KPX Yacute Odieresis -35 +KPX Yacute Ograve -35 +KPX Yacute Ohungarumlaut -35 +KPX Yacute Omacron -35 +KPX Yacute Oslash -35 +KPX Yacute Otilde -35 +KPX Yacute a -85 +KPX Yacute aacute -85 +KPX Yacute abreve -85 +KPX Yacute acircumflex -85 +KPX Yacute adieresis -85 +KPX Yacute agrave -85 +KPX Yacute amacron -85 +KPX Yacute aogonek -85 +KPX Yacute aring -85 +KPX Yacute atilde -85 +KPX Yacute colon -92 +KPX Yacute comma -92 +KPX Yacute e -111 +KPX Yacute eacute -111 +KPX Yacute ecaron -111 +KPX Yacute ecircumflex -111 +KPX Yacute edieresis -71 +KPX Yacute edotaccent -111 +KPX Yacute egrave -71 +KPX Yacute emacron -71 +KPX Yacute eogonek -111 +KPX Yacute hyphen -92 +KPX Yacute i -37 +KPX Yacute iacute -37 +KPX Yacute iogonek -37 +KPX Yacute o -111 +KPX Yacute oacute -111 +KPX Yacute ocircumflex -111 +KPX Yacute odieresis -111 +KPX Yacute ograve -111 +KPX Yacute ohungarumlaut -111 +KPX Yacute omacron -111 +KPX Yacute oslash -111 +KPX Yacute otilde -111 +KPX Yacute period -92 +KPX Yacute semicolon -92 +KPX Yacute u -92 +KPX Yacute uacute -92 +KPX Yacute ucircumflex -92 +KPX Yacute udieresis -92 +KPX Yacute ugrave -92 +KPX Yacute uhungarumlaut -92 +KPX Yacute umacron -92 +KPX Yacute uogonek -92 +KPX Yacute uring -92 +KPX Ydieresis A -110 +KPX Ydieresis Aacute -110 +KPX Ydieresis Abreve -110 +KPX Ydieresis Acircumflex -110 +KPX Ydieresis Adieresis -110 +KPX Ydieresis Agrave -110 +KPX Ydieresis Amacron -110 +KPX Ydieresis Aogonek -110 +KPX Ydieresis Aring -110 +KPX Ydieresis Atilde -110 +KPX Ydieresis O -35 +KPX Ydieresis Oacute -35 +KPX Ydieresis Ocircumflex -35 +KPX Ydieresis Odieresis -35 +KPX Ydieresis Ograve -35 +KPX Ydieresis Ohungarumlaut -35 +KPX Ydieresis Omacron -35 +KPX Ydieresis Oslash -35 +KPX Ydieresis Otilde -35 +KPX Ydieresis a -85 +KPX Ydieresis aacute -85 +KPX Ydieresis abreve -85 +KPX Ydieresis acircumflex -85 +KPX Ydieresis adieresis -85 +KPX Ydieresis agrave -85 +KPX Ydieresis amacron -85 +KPX Ydieresis aogonek -85 +KPX Ydieresis aring -85 +KPX Ydieresis atilde -85 +KPX Ydieresis colon -92 +KPX Ydieresis comma -92 +KPX Ydieresis e -111 +KPX Ydieresis eacute -111 +KPX Ydieresis ecaron -111 +KPX Ydieresis ecircumflex -111 +KPX Ydieresis edieresis -71 +KPX Ydieresis edotaccent -111 +KPX Ydieresis egrave -71 +KPX Ydieresis emacron -71 +KPX Ydieresis eogonek -111 +KPX Ydieresis hyphen -92 +KPX Ydieresis i -37 +KPX Ydieresis iacute -37 +KPX Ydieresis iogonek -37 +KPX Ydieresis o -111 +KPX Ydieresis oacute -111 +KPX Ydieresis ocircumflex -111 +KPX Ydieresis odieresis -111 +KPX Ydieresis ograve -111 +KPX Ydieresis ohungarumlaut -111 +KPX Ydieresis omacron -111 +KPX Ydieresis oslash -111 +KPX Ydieresis otilde -111 +KPX Ydieresis period -92 +KPX Ydieresis semicolon -92 +KPX Ydieresis u -92 +KPX Ydieresis uacute -92 +KPX Ydieresis ucircumflex -92 +KPX Ydieresis udieresis -92 +KPX Ydieresis ugrave -92 +KPX Ydieresis uhungarumlaut -92 +KPX Ydieresis umacron -92 +KPX Ydieresis uogonek -92 +KPX Ydieresis uring -92 +KPX a v -25 +KPX aacute v -25 +KPX abreve v -25 +KPX acircumflex v -25 +KPX adieresis v -25 +KPX agrave v -25 +KPX amacron v -25 +KPX aogonek v -25 +KPX aring v -25 +KPX atilde v -25 +KPX b b -10 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -15 +KPX comma quotedblright -45 +KPX comma quoteright -55 +KPX d w -15 +KPX dcroat w -15 +KPX e v -15 +KPX eacute v -15 +KPX ecaron v -15 +KPX ecircumflex v -15 +KPX edieresis v -15 +KPX edotaccent v -15 +KPX egrave v -15 +KPX emacron v -15 +KPX eogonek v -15 +KPX f comma -15 +KPX f dotlessi -35 +KPX f i -25 +KPX f o -25 +KPX f oacute -25 +KPX f ocircumflex -25 +KPX f odieresis -25 +KPX f ograve -25 +KPX f ohungarumlaut -25 +KPX f omacron -25 +KPX f oslash -25 +KPX f otilde -25 +KPX f period -15 +KPX f quotedblright 50 +KPX f quoteright 55 +KPX g period -15 +KPX gbreve period -15 +KPX gcommaaccent period -15 +KPX h y -15 +KPX h yacute -15 +KPX h ydieresis -15 +KPX i v -10 +KPX iacute v -10 +KPX icircumflex v -10 +KPX idieresis v -10 +KPX igrave v -10 +KPX imacron v -10 +KPX iogonek v -10 +KPX k e -10 +KPX k eacute -10 +KPX k ecaron -10 +KPX k ecircumflex -10 +KPX k edieresis -10 +KPX k edotaccent -10 +KPX k egrave -10 +KPX k emacron -10 +KPX k eogonek -10 +KPX k o -15 +KPX k oacute -15 +KPX k ocircumflex -15 +KPX k odieresis -15 +KPX k ograve -15 +KPX k ohungarumlaut -15 +KPX k omacron -15 +KPX k oslash -15 +KPX k otilde -15 +KPX k y -15 +KPX k yacute -15 +KPX k ydieresis -15 +KPX kcommaaccent e -10 +KPX kcommaaccent eacute -10 +KPX kcommaaccent ecaron -10 +KPX kcommaaccent ecircumflex -10 +KPX kcommaaccent edieresis -10 +KPX kcommaaccent edotaccent -10 +KPX kcommaaccent egrave -10 +KPX kcommaaccent emacron -10 +KPX kcommaaccent eogonek -10 +KPX kcommaaccent o -15 +KPX kcommaaccent oacute -15 +KPX kcommaaccent ocircumflex -15 +KPX kcommaaccent odieresis -15 +KPX kcommaaccent ograve -15 +KPX kcommaaccent ohungarumlaut -15 +KPX kcommaaccent omacron -15 +KPX kcommaaccent oslash -15 +KPX kcommaaccent otilde -15 +KPX kcommaaccent y -15 +KPX kcommaaccent yacute -15 +KPX kcommaaccent ydieresis -15 +KPX n v -40 +KPX nacute v -40 +KPX ncaron v -40 +KPX ncommaaccent v -40 +KPX ntilde v -40 +KPX o v -10 +KPX o w -10 +KPX oacute v -10 +KPX oacute w -10 +KPX ocircumflex v -10 +KPX ocircumflex w -10 +KPX odieresis v -10 +KPX odieresis w -10 +KPX ograve v -10 +KPX ograve w -10 +KPX ohungarumlaut v -10 +KPX ohungarumlaut w -10 +KPX omacron v -10 +KPX omacron w -10 +KPX oslash v -10 +KPX oslash w -10 +KPX otilde v -10 +KPX otilde w -10 +KPX period quotedblright -55 +KPX period quoteright -55 +KPX quotedblleft A -10 +KPX quotedblleft Aacute -10 +KPX quotedblleft Abreve -10 +KPX quotedblleft Acircumflex -10 +KPX quotedblleft Adieresis -10 +KPX quotedblleft Agrave -10 +KPX quotedblleft Amacron -10 +KPX quotedblleft Aogonek -10 +KPX quotedblleft Aring -10 +KPX quotedblleft Atilde -10 +KPX quoteleft A -10 +KPX quoteleft Aacute -10 +KPX quoteleft Abreve -10 +KPX quoteleft Acircumflex -10 +KPX quoteleft Adieresis -10 +KPX quoteleft Agrave -10 +KPX quoteleft Amacron -10 +KPX quoteleft Aogonek -10 +KPX quoteleft Aring -10 +KPX quoteleft Atilde -10 +KPX quoteleft quoteleft -63 +KPX quoteright d -20 +KPX quoteright dcroat -20 +KPX quoteright quoteright -63 +KPX quoteright r -20 +KPX quoteright racute -20 +KPX quoteright rcaron -20 +KPX quoteright rcommaaccent -20 +KPX quoteright s -37 +KPX quoteright sacute -37 +KPX quoteright scaron -37 +KPX quoteright scedilla -37 +KPX quoteright scommaaccent -37 +KPX quoteright space -74 +KPX quoteright v -20 +KPX r c -18 +KPX r cacute -18 +KPX r ccaron -18 +KPX r ccedilla -18 +KPX r comma -92 +KPX r e -18 +KPX r eacute -18 +KPX r ecaron -18 +KPX r ecircumflex -18 +KPX r edieresis -18 +KPX r edotaccent -18 +KPX r egrave -18 +KPX r emacron -18 +KPX r eogonek -18 +KPX r g -10 +KPX r gbreve -10 +KPX r gcommaaccent -10 +KPX r hyphen -37 +KPX r n -15 +KPX r nacute -15 +KPX r ncaron -15 +KPX r ncommaaccent -15 +KPX r ntilde -15 +KPX r o -18 +KPX r oacute -18 +KPX r ocircumflex -18 +KPX r odieresis -18 +KPX r ograve -18 +KPX r ohungarumlaut -18 +KPX r omacron -18 +KPX r oslash -18 +KPX r otilde -18 +KPX r p -10 +KPX r period -100 +KPX r q -18 +KPX r v -10 +KPX racute c -18 +KPX racute cacute -18 +KPX racute ccaron -18 +KPX racute ccedilla -18 +KPX racute comma -92 +KPX racute e -18 +KPX racute eacute -18 +KPX racute ecaron -18 +KPX racute ecircumflex -18 +KPX racute edieresis -18 +KPX racute edotaccent -18 +KPX racute egrave -18 +KPX racute emacron -18 +KPX racute eogonek -18 +KPX racute g -10 +KPX racute gbreve -10 +KPX racute gcommaaccent -10 +KPX racute hyphen -37 +KPX racute n -15 +KPX racute nacute -15 +KPX racute ncaron -15 +KPX racute ncommaaccent -15 +KPX racute ntilde -15 +KPX racute o -18 +KPX racute oacute -18 +KPX racute ocircumflex -18 +KPX racute odieresis -18 +KPX racute ograve -18 +KPX racute ohungarumlaut -18 +KPX racute omacron -18 +KPX racute oslash -18 +KPX racute otilde -18 +KPX racute p -10 +KPX racute period -100 +KPX racute q -18 +KPX racute v -10 +KPX rcaron c -18 +KPX rcaron cacute -18 +KPX rcaron ccaron -18 +KPX rcaron ccedilla -18 +KPX rcaron comma -92 +KPX rcaron e -18 +KPX rcaron eacute -18 +KPX rcaron ecaron -18 +KPX rcaron ecircumflex -18 +KPX rcaron edieresis -18 +KPX rcaron edotaccent -18 +KPX rcaron egrave -18 +KPX rcaron emacron -18 +KPX rcaron eogonek -18 +KPX rcaron g -10 +KPX rcaron gbreve -10 +KPX rcaron gcommaaccent -10 +KPX rcaron hyphen -37 +KPX rcaron n -15 +KPX rcaron nacute -15 +KPX rcaron ncaron -15 +KPX rcaron ncommaaccent -15 +KPX rcaron ntilde -15 +KPX rcaron o -18 +KPX rcaron oacute -18 +KPX rcaron ocircumflex -18 +KPX rcaron odieresis -18 +KPX rcaron ograve -18 +KPX rcaron ohungarumlaut -18 +KPX rcaron omacron -18 +KPX rcaron oslash -18 +KPX rcaron otilde -18 +KPX rcaron p -10 +KPX rcaron period -100 +KPX rcaron q -18 +KPX rcaron v -10 +KPX rcommaaccent c -18 +KPX rcommaaccent cacute -18 +KPX rcommaaccent ccaron -18 +KPX rcommaaccent ccedilla -18 +KPX rcommaaccent comma -92 +KPX rcommaaccent e -18 +KPX rcommaaccent eacute -18 +KPX rcommaaccent ecaron -18 +KPX rcommaaccent ecircumflex -18 +KPX rcommaaccent edieresis -18 +KPX rcommaaccent edotaccent -18 +KPX rcommaaccent egrave -18 +KPX rcommaaccent emacron -18 +KPX rcommaaccent eogonek -18 +KPX rcommaaccent g -10 +KPX rcommaaccent gbreve -10 +KPX rcommaaccent gcommaaccent -10 +KPX rcommaaccent hyphen -37 +KPX rcommaaccent n -15 +KPX rcommaaccent nacute -15 +KPX rcommaaccent ncaron -15 +KPX rcommaaccent ncommaaccent -15 +KPX rcommaaccent ntilde -15 +KPX rcommaaccent o -18 +KPX rcommaaccent oacute -18 +KPX rcommaaccent ocircumflex -18 +KPX rcommaaccent odieresis -18 +KPX rcommaaccent ograve -18 +KPX rcommaaccent ohungarumlaut -18 +KPX rcommaaccent omacron -18 +KPX rcommaaccent oslash -18 +KPX rcommaaccent otilde -18 +KPX rcommaaccent p -10 +KPX rcommaaccent period -100 +KPX rcommaaccent q -18 +KPX rcommaaccent v -10 +KPX space A -55 +KPX space Aacute -55 +KPX space Abreve -55 +KPX space Acircumflex -55 +KPX space Adieresis -55 +KPX space Agrave -55 +KPX space Amacron -55 +KPX space Aogonek -55 +KPX space Aring -55 +KPX space Atilde -55 +KPX space T -30 +KPX space Tcaron -30 +KPX space Tcommaaccent -30 +KPX space V -45 +KPX space W -30 +KPX space Y -55 +KPX space Yacute -55 +KPX space Ydieresis -55 +KPX v a -10 +KPX v aacute -10 +KPX v abreve -10 +KPX v acircumflex -10 +KPX v adieresis -10 +KPX v agrave -10 +KPX v amacron -10 +KPX v aogonek -10 +KPX v aring -10 +KPX v atilde -10 +KPX v comma -55 +KPX v e -10 +KPX v eacute -10 +KPX v ecaron -10 +KPX v ecircumflex -10 +KPX v edieresis -10 +KPX v edotaccent -10 +KPX v egrave -10 +KPX v emacron -10 +KPX v eogonek -10 +KPX v o -10 +KPX v oacute -10 +KPX v ocircumflex -10 +KPX v odieresis -10 +KPX v ograve -10 +KPX v ohungarumlaut -10 +KPX v omacron -10 +KPX v oslash -10 +KPX v otilde -10 +KPX v period -70 +KPX w comma -55 +KPX w o -10 +KPX w oacute -10 +KPX w ocircumflex -10 +KPX w odieresis -10 +KPX w ograve -10 +KPX w ohungarumlaut -10 +KPX w omacron -10 +KPX w oslash -10 +KPX w otilde -10 +KPX w period -70 +KPX y comma -55 +KPX y e -10 +KPX y eacute -10 +KPX y ecaron -10 +KPX y ecircumflex -10 +KPX y edieresis -10 +KPX y edotaccent -10 +KPX y egrave -10 +KPX y emacron -10 +KPX y eogonek -10 +KPX y o -25 +KPX y oacute -25 +KPX y ocircumflex -25 +KPX y odieresis -25 +KPX y ograve -25 +KPX y ohungarumlaut -25 +KPX y omacron -25 +KPX y oslash -25 +KPX y otilde -25 +KPX y period -70 +KPX yacute comma -55 +KPX yacute e -10 +KPX yacute eacute -10 +KPX yacute ecaron -10 +KPX yacute ecircumflex -10 +KPX yacute edieresis -10 +KPX yacute edotaccent -10 +KPX yacute egrave -10 +KPX yacute emacron -10 +KPX yacute eogonek -10 +KPX yacute o -25 +KPX yacute oacute -25 +KPX yacute ocircumflex -25 +KPX yacute odieresis -25 +KPX yacute ograve -25 +KPX yacute ohungarumlaut -25 +KPX yacute omacron -25 +KPX yacute oslash -25 +KPX yacute otilde -25 +KPX yacute period -70 +KPX ydieresis comma -55 +KPX ydieresis e -10 +KPX ydieresis eacute -10 +KPX ydieresis ecaron -10 +KPX ydieresis ecircumflex -10 +KPX ydieresis edieresis -10 +KPX ydieresis edotaccent -10 +KPX ydieresis egrave -10 +KPX ydieresis emacron -10 +KPX ydieresis eogonek -10 +KPX ydieresis o -25 +KPX ydieresis oacute -25 +KPX ydieresis ocircumflex -25 +KPX ydieresis odieresis -25 +KPX ydieresis ograve -25 +KPX ydieresis ohungarumlaut -25 +KPX ydieresis omacron -25 +KPX ydieresis oslash -25 +KPX ydieresis otilde -25 +KPX ydieresis period -70 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-BoldItalic.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-BoldItalic.afm new file mode 100644 index 000000000..2301dfd23 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-BoldItalic.afm @@ -0,0 +1,2384 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 13:04:06 1997 +Comment UniqueID 43066 +Comment VMusage 45874 56899 +FontName Times-BoldItalic +FullName Times Bold Italic +FamilyName Times +Weight Bold +ItalicAngle -15 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -200 -218 996 921 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 669 +XHeight 462 +Ascender 683 +Descender -217 +StdHW 42 +StdVW 121 +StartCharMetrics 315 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 389 ; N exclam ; B 67 -13 370 684 ; +C 34 ; WX 555 ; N quotedbl ; B 136 398 536 685 ; +C 35 ; WX 500 ; N numbersign ; B -33 0 533 700 ; +C 36 ; WX 500 ; N dollar ; B -20 -100 497 733 ; +C 37 ; WX 833 ; N percent ; B 39 -10 793 692 ; +C 38 ; WX 778 ; N ampersand ; B 5 -19 699 682 ; +C 39 ; WX 333 ; N quoteright ; B 98 369 302 685 ; +C 40 ; WX 333 ; N parenleft ; B 28 -179 344 685 ; +C 41 ; WX 333 ; N parenright ; B -44 -179 271 685 ; +C 42 ; WX 500 ; N asterisk ; B 65 249 456 685 ; +C 43 ; WX 570 ; N plus ; B 33 0 537 506 ; +C 44 ; WX 250 ; N comma ; B -60 -182 144 134 ; +C 45 ; WX 333 ; N hyphen ; B 2 166 271 282 ; +C 46 ; WX 250 ; N period ; B -9 -13 139 135 ; +C 47 ; WX 278 ; N slash ; B -64 -18 342 685 ; +C 48 ; WX 500 ; N zero ; B 17 -14 477 683 ; +C 49 ; WX 500 ; N one ; B 5 0 419 683 ; +C 50 ; WX 500 ; N two ; B -27 0 446 683 ; +C 51 ; WX 500 ; N three ; B -15 -13 450 683 ; +C 52 ; WX 500 ; N four ; B -15 0 503 683 ; +C 53 ; WX 500 ; N five ; B -11 -13 487 669 ; +C 54 ; WX 500 ; N six ; B 23 -15 509 679 ; +C 55 ; WX 500 ; N seven ; B 52 0 525 669 ; +C 56 ; WX 500 ; N eight ; B 3 -13 476 683 ; +C 57 ; WX 500 ; N nine ; B -12 -10 475 683 ; +C 58 ; WX 333 ; N colon ; B 23 -13 264 459 ; +C 59 ; WX 333 ; N semicolon ; B -25 -183 264 459 ; +C 60 ; WX 570 ; N less ; B 31 -8 539 514 ; +C 61 ; WX 570 ; N equal ; B 33 107 537 399 ; +C 62 ; WX 570 ; N greater ; B 31 -8 539 514 ; +C 63 ; WX 500 ; N question ; B 79 -13 470 684 ; +C 64 ; WX 832 ; N at ; B 63 -18 770 685 ; +C 65 ; WX 667 ; N A ; B -67 0 593 683 ; +C 66 ; WX 667 ; N B ; B -24 0 624 669 ; +C 67 ; WX 667 ; N C ; B 32 -18 677 685 ; +C 68 ; WX 722 ; N D ; B -46 0 685 669 ; +C 69 ; WX 667 ; N E ; B -27 0 653 669 ; +C 70 ; WX 667 ; N F ; B -13 0 660 669 ; +C 71 ; WX 722 ; N G ; B 21 -18 706 685 ; +C 72 ; WX 778 ; N H ; B -24 0 799 669 ; +C 73 ; WX 389 ; N I ; B -32 0 406 669 ; +C 74 ; WX 500 ; N J ; B -46 -99 524 669 ; +C 75 ; WX 667 ; N K ; B -21 0 702 669 ; +C 76 ; WX 611 ; N L ; B -22 0 590 669 ; +C 77 ; WX 889 ; N M ; B -29 -12 917 669 ; +C 78 ; WX 722 ; N N ; B -27 -15 748 669 ; +C 79 ; WX 722 ; N O ; B 27 -18 691 685 ; +C 80 ; WX 611 ; N P ; B -27 0 613 669 ; +C 81 ; WX 722 ; N Q ; B 27 -208 691 685 ; +C 82 ; WX 667 ; N R ; B -29 0 623 669 ; +C 83 ; WX 556 ; N S ; B 2 -18 526 685 ; +C 84 ; WX 611 ; N T ; B 50 0 650 669 ; +C 85 ; WX 722 ; N U ; B 67 -18 744 669 ; +C 86 ; WX 667 ; N V ; B 65 -18 715 669 ; +C 87 ; WX 889 ; N W ; B 65 -18 940 669 ; +C 88 ; WX 667 ; N X ; B -24 0 694 669 ; +C 89 ; WX 611 ; N Y ; B 73 0 659 669 ; +C 90 ; WX 611 ; N Z ; B -11 0 590 669 ; +C 91 ; WX 333 ; N bracketleft ; B -37 -159 362 674 ; +C 92 ; WX 278 ; N backslash ; B -1 -18 279 685 ; +C 93 ; WX 333 ; N bracketright ; B -56 -157 343 674 ; +C 94 ; WX 570 ; N asciicircum ; B 67 304 503 669 ; +C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; +C 96 ; WX 333 ; N quoteleft ; B 128 369 332 685 ; +C 97 ; WX 500 ; N a ; B -21 -14 455 462 ; +C 98 ; WX 500 ; N b ; B -14 -13 444 699 ; +C 99 ; WX 444 ; N c ; B -5 -13 392 462 ; +C 100 ; WX 500 ; N d ; B -21 -13 517 699 ; +C 101 ; WX 444 ; N e ; B 5 -13 398 462 ; +C 102 ; WX 333 ; N f ; B -169 -205 446 698 ; L i fi ; L l fl ; +C 103 ; WX 500 ; N g ; B -52 -203 478 462 ; +C 104 ; WX 556 ; N h ; B -13 -9 498 699 ; +C 105 ; WX 278 ; N i ; B 2 -9 263 684 ; +C 106 ; WX 278 ; N j ; B -189 -207 279 684 ; +C 107 ; WX 500 ; N k ; B -23 -8 483 699 ; +C 108 ; WX 278 ; N l ; B 2 -9 290 699 ; +C 109 ; WX 778 ; N m ; B -14 -9 722 462 ; +C 110 ; WX 556 ; N n ; B -6 -9 493 462 ; +C 111 ; WX 500 ; N o ; B -3 -13 441 462 ; +C 112 ; WX 500 ; N p ; B -120 -205 446 462 ; +C 113 ; WX 500 ; N q ; B 1 -205 471 462 ; +C 114 ; WX 389 ; N r ; B -21 0 389 462 ; +C 115 ; WX 389 ; N s ; B -19 -13 333 462 ; +C 116 ; WX 278 ; N t ; B -11 -9 281 594 ; +C 117 ; WX 556 ; N u ; B 15 -9 492 462 ; +C 118 ; WX 444 ; N v ; B 16 -13 401 462 ; +C 119 ; WX 667 ; N w ; B 16 -13 614 462 ; +C 120 ; WX 500 ; N x ; B -46 -13 469 462 ; +C 121 ; WX 444 ; N y ; B -94 -205 392 462 ; +C 122 ; WX 389 ; N z ; B -43 -78 368 449 ; +C 123 ; WX 348 ; N braceleft ; B 5 -187 436 686 ; +C 124 ; WX 220 ; N bar ; B 66 -218 154 782 ; +C 125 ; WX 348 ; N braceright ; B -129 -187 302 686 ; +C 126 ; WX 570 ; N asciitilde ; B 54 173 516 333 ; +C 161 ; WX 389 ; N exclamdown ; B 19 -205 322 492 ; +C 162 ; WX 500 ; N cent ; B 42 -143 439 576 ; +C 163 ; WX 500 ; N sterling ; B -32 -12 510 683 ; +C 164 ; WX 167 ; N fraction ; B -169 -14 324 683 ; +C 165 ; WX 500 ; N yen ; B 33 0 628 669 ; +C 166 ; WX 500 ; N florin ; B -87 -156 537 707 ; +C 167 ; WX 500 ; N section ; B 36 -143 459 685 ; +C 168 ; WX 500 ; N currency ; B -26 34 526 586 ; +C 169 ; WX 278 ; N quotesingle ; B 128 398 268 685 ; +C 170 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ; +C 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ; +C 172 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ; +C 173 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ; +C 174 ; WX 556 ; N fi ; B -188 -205 514 703 ; +C 175 ; WX 556 ; N fl ; B -186 -205 553 704 ; +C 177 ; WX 500 ; N endash ; B -40 178 477 269 ; +C 178 ; WX 500 ; N dagger ; B 91 -145 494 685 ; +C 179 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ; +C 180 ; WX 250 ; N periodcentered ; B 51 257 199 405 ; +C 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ; +C 183 ; WX 350 ; N bullet ; B 0 175 350 525 ; +C 184 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ; +C 185 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ; +C 186 ; WX 500 ; N quotedblright ; B 53 369 513 685 ; +C 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ; +C 188 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ; +C 189 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ; +C 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ; +C 193 ; WX 333 ; N grave ; B 85 516 297 697 ; +C 194 ; WX 333 ; N acute ; B 139 516 379 697 ; +C 195 ; WX 333 ; N circumflex ; B 40 516 367 690 ; +C 196 ; WX 333 ; N tilde ; B 48 536 407 655 ; +C 197 ; WX 333 ; N macron ; B 51 553 393 623 ; +C 198 ; WX 333 ; N breve ; B 71 516 387 678 ; +C 199 ; WX 333 ; N dotaccent ; B 163 550 298 684 ; +C 200 ; WX 333 ; N dieresis ; B 55 550 402 684 ; +C 202 ; WX 333 ; N ring ; B 127 516 340 729 ; +C 203 ; WX 333 ; N cedilla ; B -80 -218 156 5 ; +C 205 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ; +C 206 ; WX 333 ; N ogonek ; B 15 -183 244 34 ; +C 207 ; WX 333 ; N caron ; B 79 516 411 690 ; +C 208 ; WX 1000 ; N emdash ; B -40 178 977 269 ; +C 225 ; WX 944 ; N AE ; B -64 0 918 669 ; +C 227 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ; +C 232 ; WX 611 ; N Lslash ; B -22 0 590 669 ; +C 233 ; WX 722 ; N Oslash ; B 27 -125 691 764 ; +C 234 ; WX 944 ; N OE ; B 23 -8 946 677 ; +C 235 ; WX 300 ; N ordmasculine ; B 56 400 347 685 ; +C 241 ; WX 722 ; N ae ; B -5 -13 673 462 ; +C 245 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ; +C 248 ; WX 278 ; N lslash ; B -7 -9 307 699 ; +C 249 ; WX 500 ; N oslash ; B -3 -119 441 560 ; +C 250 ; WX 722 ; N oe ; B 6 -13 674 462 ; +C 251 ; WX 500 ; N germandbls ; B -200 -200 473 705 ; +C -1 ; WX 389 ; N Idieresis ; B -32 0 450 862 ; +C -1 ; WX 444 ; N eacute ; B 5 -13 435 697 ; +C -1 ; WX 500 ; N abreve ; B -21 -14 471 678 ; +C -1 ; WX 556 ; N uhungarumlaut ; B 15 -9 610 697 ; +C -1 ; WX 444 ; N ecaron ; B 5 -13 467 690 ; +C -1 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ; +C -1 ; WX 570 ; N divide ; B 33 -29 537 535 ; +C -1 ; WX 611 ; N Yacute ; B 73 0 659 904 ; +C -1 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ; +C -1 ; WX 500 ; N aacute ; B -21 -14 463 697 ; +C -1 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ; +C -1 ; WX 444 ; N yacute ; B -94 -205 435 697 ; +C -1 ; WX 389 ; N scommaaccent ; B -19 -218 333 462 ; +C -1 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ; +C -1 ; WX 722 ; N Uring ; B 67 -18 744 921 ; +C -1 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ; +C -1 ; WX 500 ; N aogonek ; B -21 -183 455 462 ; +C -1 ; WX 722 ; N Uacute ; B 67 -18 744 904 ; +C -1 ; WX 556 ; N uogonek ; B 15 -183 492 462 ; +C -1 ; WX 667 ; N Edieresis ; B -27 0 653 862 ; +C -1 ; WX 722 ; N Dcroat ; B -31 0 700 669 ; +C -1 ; WX 250 ; N commaaccent ; B -36 -218 131 -50 ; +C -1 ; WX 747 ; N copyright ; B 30 -18 718 685 ; +C -1 ; WX 667 ; N Emacron ; B -27 0 653 830 ; +C -1 ; WX 444 ; N ccaron ; B -5 -13 467 690 ; +C -1 ; WX 500 ; N aring ; B -21 -14 455 729 ; +C -1 ; WX 722 ; N Ncommaaccent ; B -27 -218 748 669 ; +C -1 ; WX 278 ; N lacute ; B 2 -9 392 904 ; +C -1 ; WX 500 ; N agrave ; B -21 -14 455 697 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 50 -218 650 669 ; +C -1 ; WX 667 ; N Cacute ; B 32 -18 677 904 ; +C -1 ; WX 500 ; N atilde ; B -21 -14 491 655 ; +C -1 ; WX 667 ; N Edotaccent ; B -27 0 653 862 ; +C -1 ; WX 389 ; N scaron ; B -19 -13 424 690 ; +C -1 ; WX 389 ; N scedilla ; B -19 -218 333 462 ; +C -1 ; WX 278 ; N iacute ; B 2 -9 352 697 ; +C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ; +C -1 ; WX 667 ; N Rcaron ; B -29 0 623 897 ; +C -1 ; WX 722 ; N Gcommaaccent ; B 21 -218 706 685 ; +C -1 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ; +C -1 ; WX 500 ; N acircumflex ; B -21 -14 455 690 ; +C -1 ; WX 667 ; N Amacron ; B -67 0 593 830 ; +C -1 ; WX 389 ; N rcaron ; B -21 0 424 690 ; +C -1 ; WX 444 ; N ccedilla ; B -5 -218 392 462 ; +C -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 862 ; +C -1 ; WX 611 ; N Thorn ; B -27 0 573 669 ; +C -1 ; WX 722 ; N Omacron ; B 27 -18 691 830 ; +C -1 ; WX 667 ; N Racute ; B -29 0 623 904 ; +C -1 ; WX 556 ; N Sacute ; B 2 -18 531 904 ; +C -1 ; WX 608 ; N dcaron ; B -21 -13 675 708 ; +C -1 ; WX 722 ; N Umacron ; B 67 -18 744 830 ; +C -1 ; WX 556 ; N uring ; B 15 -9 492 729 ; +C -1 ; WX 300 ; N threesuperior ; B 17 265 321 683 ; +C -1 ; WX 722 ; N Ograve ; B 27 -18 691 904 ; +C -1 ; WX 667 ; N Agrave ; B -67 0 593 904 ; +C -1 ; WX 667 ; N Abreve ; B -67 0 593 885 ; +C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; +C -1 ; WX 556 ; N uacute ; B 15 -9 492 697 ; +C -1 ; WX 611 ; N Tcaron ; B 50 0 650 897 ; +C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ; +C -1 ; WX 444 ; N ydieresis ; B -94 -205 443 655 ; +C -1 ; WX 722 ; N Nacute ; B -27 -15 748 904 ; +C -1 ; WX 278 ; N icircumflex ; B -3 -9 324 690 ; +C -1 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ; +C -1 ; WX 500 ; N adieresis ; B -21 -14 476 655 ; +C -1 ; WX 444 ; N edieresis ; B 5 -13 448 655 ; +C -1 ; WX 444 ; N cacute ; B -5 -13 435 697 ; +C -1 ; WX 556 ; N nacute ; B -6 -9 493 697 ; +C -1 ; WX 556 ; N umacron ; B 15 -9 492 623 ; +C -1 ; WX 722 ; N Ncaron ; B -27 -15 748 897 ; +C -1 ; WX 389 ; N Iacute ; B -32 0 432 904 ; +C -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ; +C -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ; +C -1 ; WX 747 ; N registered ; B 30 -18 718 685 ; +C -1 ; WX 722 ; N Gbreve ; B 21 -18 706 885 ; +C -1 ; WX 389 ; N Idotaccent ; B -32 0 406 862 ; +C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ; +C -1 ; WX 667 ; N Egrave ; B -27 0 653 904 ; +C -1 ; WX 389 ; N racute ; B -21 0 407 697 ; +C -1 ; WX 500 ; N omacron ; B -3 -13 462 623 ; +C -1 ; WX 611 ; N Zacute ; B -11 0 590 904 ; +C -1 ; WX 611 ; N Zcaron ; B -11 0 590 897 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; +C -1 ; WX 722 ; N Eth ; B -31 0 700 669 ; +C -1 ; WX 667 ; N Ccedilla ; B 32 -218 677 685 ; +C -1 ; WX 278 ; N lcommaaccent ; B -42 -218 290 699 ; +C -1 ; WX 366 ; N tcaron ; B -11 -9 434 754 ; +C -1 ; WX 444 ; N eogonek ; B 5 -183 398 462 ; +C -1 ; WX 722 ; N Uogonek ; B 67 -183 744 669 ; +C -1 ; WX 667 ; N Aacute ; B -67 0 593 904 ; +C -1 ; WX 667 ; N Adieresis ; B -67 0 593 862 ; +C -1 ; WX 444 ; N egrave ; B 5 -13 398 697 ; +C -1 ; WX 389 ; N zacute ; B -43 -78 407 697 ; +C -1 ; WX 278 ; N iogonek ; B -20 -183 263 684 ; +C -1 ; WX 722 ; N Oacute ; B 27 -18 691 904 ; +C -1 ; WX 500 ; N oacute ; B -3 -13 463 697 ; +C -1 ; WX 500 ; N amacron ; B -21 -14 467 623 ; +C -1 ; WX 389 ; N sacute ; B -19 -13 407 697 ; +C -1 ; WX 278 ; N idieresis ; B 2 -9 364 655 ; +C -1 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ; +C -1 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 500 ; N thorn ; B -120 -205 446 699 ; +C -1 ; WX 300 ; N twosuperior ; B 2 274 313 683 ; +C -1 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ; +C -1 ; WX 576 ; N mu ; B -60 -207 516 449 ; +C -1 ; WX 278 ; N igrave ; B 2 -9 259 697 ; +C -1 ; WX 500 ; N ohungarumlaut ; B -3 -13 582 697 ; +C -1 ; WX 667 ; N Eogonek ; B -27 -183 653 669 ; +C -1 ; WX 500 ; N dcroat ; B -21 -13 552 699 ; +C -1 ; WX 750 ; N threequarters ; B 7 -14 726 683 ; +C -1 ; WX 556 ; N Scedilla ; B 2 -218 526 685 ; +C -1 ; WX 382 ; N lcaron ; B 2 -9 448 708 ; +C -1 ; WX 667 ; N Kcommaaccent ; B -21 -218 702 669 ; +C -1 ; WX 611 ; N Lacute ; B -22 0 590 904 ; +C -1 ; WX 1000 ; N trademark ; B 32 263 968 669 ; +C -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ; +C -1 ; WX 389 ; N Igrave ; B -32 0 406 904 ; +C -1 ; WX 389 ; N Imacron ; B -32 0 461 830 ; +C -1 ; WX 611 ; N Lcaron ; B -22 0 671 718 ; +C -1 ; WX 750 ; N onehalf ; B -9 -14 723 683 ; +C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; +C -1 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ; +C -1 ; WX 556 ; N ntilde ; B -6 -9 504 655 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 904 ; +C -1 ; WX 667 ; N Eacute ; B -27 0 653 904 ; +C -1 ; WX 444 ; N emacron ; B 5 -13 439 623 ; +C -1 ; WX 500 ; N gbreve ; B -52 -203 478 678 ; +C -1 ; WX 750 ; N onequarter ; B 7 -14 721 683 ; +C -1 ; WX 556 ; N Scaron ; B 2 -18 553 897 ; +C -1 ; WX 556 ; N Scommaaccent ; B 2 -218 526 685 ; +C -1 ; WX 722 ; N Ohungarumlaut ; B 27 -18 723 904 ; +C -1 ; WX 400 ; N degree ; B 83 397 369 683 ; +C -1 ; WX 500 ; N ograve ; B -3 -13 441 697 ; +C -1 ; WX 667 ; N Ccaron ; B 32 -18 677 897 ; +C -1 ; WX 556 ; N ugrave ; B 15 -9 492 697 ; +C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ; +C -1 ; WX 722 ; N Dcaron ; B -46 0 685 897 ; +C -1 ; WX 389 ; N rcommaaccent ; B -67 -218 389 462 ; +C -1 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ; +C -1 ; WX 500 ; N otilde ; B -3 -13 491 655 ; +C -1 ; WX 667 ; N Rcommaaccent ; B -29 -218 623 669 ; +C -1 ; WX 611 ; N Lcommaaccent ; B -22 -218 590 669 ; +C -1 ; WX 667 ; N Atilde ; B -67 0 593 862 ; +C -1 ; WX 667 ; N Aogonek ; B -67 -183 604 683 ; +C -1 ; WX 667 ; N Aring ; B -67 0 593 921 ; +C -1 ; WX 722 ; N Otilde ; B 27 -18 691 862 ; +C -1 ; WX 389 ; N zdotaccent ; B -43 -78 368 655 ; +C -1 ; WX 667 ; N Ecaron ; B -27 0 653 897 ; +C -1 ; WX 389 ; N Iogonek ; B -32 -183 406 669 ; +C -1 ; WX 500 ; N kcommaaccent ; B -23 -218 483 699 ; +C -1 ; WX 606 ; N minus ; B 51 209 555 297 ; +C -1 ; WX 389 ; N Icircumflex ; B -32 0 450 897 ; +C -1 ; WX 556 ; N ncaron ; B -6 -9 523 690 ; +C -1 ; WX 278 ; N tcommaaccent ; B -62 -218 281 594 ; +C -1 ; WX 606 ; N logicalnot ; B 51 108 555 399 ; +C -1 ; WX 500 ; N odieresis ; B -3 -13 471 655 ; +C -1 ; WX 556 ; N udieresis ; B 15 -9 499 655 ; +C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ; +C -1 ; WX 500 ; N gcommaaccent ; B -52 -203 478 767 ; +C -1 ; WX 500 ; N eth ; B -3 -13 454 699 ; +C -1 ; WX 389 ; N zcaron ; B -43 -78 424 690 ; +C -1 ; WX 556 ; N ncommaaccent ; B -6 -218 493 462 ; +C -1 ; WX 300 ; N onesuperior ; B 30 274 301 683 ; +C -1 ; WX 278 ; N imacron ; B 2 -9 294 623 ; +C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2038 +KPX A C -65 +KPX A Cacute -65 +KPX A Ccaron -65 +KPX A Ccedilla -65 +KPX A G -60 +KPX A Gbreve -60 +KPX A Gcommaaccent -60 +KPX A O -50 +KPX A Oacute -50 +KPX A Ocircumflex -50 +KPX A Odieresis -50 +KPX A Ograve -50 +KPX A Ohungarumlaut -50 +KPX A Omacron -50 +KPX A Oslash -50 +KPX A Otilde -50 +KPX A Q -55 +KPX A T -55 +KPX A Tcaron -55 +KPX A Tcommaaccent -55 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -95 +KPX A W -100 +KPX A Y -70 +KPX A Yacute -70 +KPX A Ydieresis -70 +KPX A quoteright -74 +KPX A u -30 +KPX A uacute -30 +KPX A ucircumflex -30 +KPX A udieresis -30 +KPX A ugrave -30 +KPX A uhungarumlaut -30 +KPX A umacron -30 +KPX A uogonek -30 +KPX A uring -30 +KPX A v -74 +KPX A w -74 +KPX A y -74 +KPX A yacute -74 +KPX A ydieresis -74 +KPX Aacute C -65 +KPX Aacute Cacute -65 +KPX Aacute Ccaron -65 +KPX Aacute Ccedilla -65 +KPX Aacute G -60 +KPX Aacute Gbreve -60 +KPX Aacute Gcommaaccent -60 +KPX Aacute O -50 +KPX Aacute Oacute -50 +KPX Aacute Ocircumflex -50 +KPX Aacute Odieresis -50 +KPX Aacute Ograve -50 +KPX Aacute Ohungarumlaut -50 +KPX Aacute Omacron -50 +KPX Aacute Oslash -50 +KPX Aacute Otilde -50 +KPX Aacute Q -55 +KPX Aacute T -55 +KPX Aacute Tcaron -55 +KPX Aacute Tcommaaccent -55 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -95 +KPX Aacute W -100 +KPX Aacute Y -70 +KPX Aacute Yacute -70 +KPX Aacute Ydieresis -70 +KPX Aacute quoteright -74 +KPX Aacute u -30 +KPX Aacute uacute -30 +KPX Aacute ucircumflex -30 +KPX Aacute udieresis -30 +KPX Aacute ugrave -30 +KPX Aacute uhungarumlaut -30 +KPX Aacute umacron -30 +KPX Aacute uogonek -30 +KPX Aacute uring -30 +KPX Aacute v -74 +KPX Aacute w -74 +KPX Aacute y -74 +KPX Aacute yacute -74 +KPX Aacute ydieresis -74 +KPX Abreve C -65 +KPX Abreve Cacute -65 +KPX Abreve Ccaron -65 +KPX Abreve Ccedilla -65 +KPX Abreve G -60 +KPX Abreve Gbreve -60 +KPX Abreve Gcommaaccent -60 +KPX Abreve O -50 +KPX Abreve Oacute -50 +KPX Abreve Ocircumflex -50 +KPX Abreve Odieresis -50 +KPX Abreve Ograve -50 +KPX Abreve Ohungarumlaut -50 +KPX Abreve Omacron -50 +KPX Abreve Oslash -50 +KPX Abreve Otilde -50 +KPX Abreve Q -55 +KPX Abreve T -55 +KPX Abreve Tcaron -55 +KPX Abreve Tcommaaccent -55 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -95 +KPX Abreve W -100 +KPX Abreve Y -70 +KPX Abreve Yacute -70 +KPX Abreve Ydieresis -70 +KPX Abreve quoteright -74 +KPX Abreve u -30 +KPX Abreve uacute -30 +KPX Abreve ucircumflex -30 +KPX Abreve udieresis -30 +KPX Abreve ugrave -30 +KPX Abreve uhungarumlaut -30 +KPX Abreve umacron -30 +KPX Abreve uogonek -30 +KPX Abreve uring -30 +KPX Abreve v -74 +KPX Abreve w -74 +KPX Abreve y -74 +KPX Abreve yacute -74 +KPX Abreve ydieresis -74 +KPX Acircumflex C -65 +KPX Acircumflex Cacute -65 +KPX Acircumflex Ccaron -65 +KPX Acircumflex Ccedilla -65 +KPX Acircumflex G -60 +KPX Acircumflex Gbreve -60 +KPX Acircumflex Gcommaaccent -60 +KPX Acircumflex O -50 +KPX Acircumflex Oacute -50 +KPX Acircumflex Ocircumflex -50 +KPX Acircumflex Odieresis -50 +KPX Acircumflex Ograve -50 +KPX Acircumflex Ohungarumlaut -50 +KPX Acircumflex Omacron -50 +KPX Acircumflex Oslash -50 +KPX Acircumflex Otilde -50 +KPX Acircumflex Q -55 +KPX Acircumflex T -55 +KPX Acircumflex Tcaron -55 +KPX Acircumflex Tcommaaccent -55 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -95 +KPX Acircumflex W -100 +KPX Acircumflex Y -70 +KPX Acircumflex Yacute -70 +KPX Acircumflex Ydieresis -70 +KPX Acircumflex quoteright -74 +KPX Acircumflex u -30 +KPX Acircumflex uacute -30 +KPX Acircumflex ucircumflex -30 +KPX Acircumflex udieresis -30 +KPX Acircumflex ugrave -30 +KPX Acircumflex uhungarumlaut -30 +KPX Acircumflex umacron -30 +KPX Acircumflex uogonek -30 +KPX Acircumflex uring -30 +KPX Acircumflex v -74 +KPX Acircumflex w -74 +KPX Acircumflex y -74 +KPX Acircumflex yacute -74 +KPX Acircumflex ydieresis -74 +KPX Adieresis C -65 +KPX Adieresis Cacute -65 +KPX Adieresis Ccaron -65 +KPX Adieresis Ccedilla -65 +KPX Adieresis G -60 +KPX Adieresis Gbreve -60 +KPX Adieresis Gcommaaccent -60 +KPX Adieresis O -50 +KPX Adieresis Oacute -50 +KPX Adieresis Ocircumflex -50 +KPX Adieresis Odieresis -50 +KPX Adieresis Ograve -50 +KPX Adieresis Ohungarumlaut -50 +KPX Adieresis Omacron -50 +KPX Adieresis Oslash -50 +KPX Adieresis Otilde -50 +KPX Adieresis Q -55 +KPX Adieresis T -55 +KPX Adieresis Tcaron -55 +KPX Adieresis Tcommaaccent -55 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -95 +KPX Adieresis W -100 +KPX Adieresis Y -70 +KPX Adieresis Yacute -70 +KPX Adieresis Ydieresis -70 +KPX Adieresis quoteright -74 +KPX Adieresis u -30 +KPX Adieresis uacute -30 +KPX Adieresis ucircumflex -30 +KPX Adieresis udieresis -30 +KPX Adieresis ugrave -30 +KPX Adieresis uhungarumlaut -30 +KPX Adieresis umacron -30 +KPX Adieresis uogonek -30 +KPX Adieresis uring -30 +KPX Adieresis v -74 +KPX Adieresis w -74 +KPX Adieresis y -74 +KPX Adieresis yacute -74 +KPX Adieresis ydieresis -74 +KPX Agrave C -65 +KPX Agrave Cacute -65 +KPX Agrave Ccaron -65 +KPX Agrave Ccedilla -65 +KPX Agrave G -60 +KPX Agrave Gbreve -60 +KPX Agrave Gcommaaccent -60 +KPX Agrave O -50 +KPX Agrave Oacute -50 +KPX Agrave Ocircumflex -50 +KPX Agrave Odieresis -50 +KPX Agrave Ograve -50 +KPX Agrave Ohungarumlaut -50 +KPX Agrave Omacron -50 +KPX Agrave Oslash -50 +KPX Agrave Otilde -50 +KPX Agrave Q -55 +KPX Agrave T -55 +KPX Agrave Tcaron -55 +KPX Agrave Tcommaaccent -55 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -95 +KPX Agrave W -100 +KPX Agrave Y -70 +KPX Agrave Yacute -70 +KPX Agrave Ydieresis -70 +KPX Agrave quoteright -74 +KPX Agrave u -30 +KPX Agrave uacute -30 +KPX Agrave ucircumflex -30 +KPX Agrave udieresis -30 +KPX Agrave ugrave -30 +KPX Agrave uhungarumlaut -30 +KPX Agrave umacron -30 +KPX Agrave uogonek -30 +KPX Agrave uring -30 +KPX Agrave v -74 +KPX Agrave w -74 +KPX Agrave y -74 +KPX Agrave yacute -74 +KPX Agrave ydieresis -74 +KPX Amacron C -65 +KPX Amacron Cacute -65 +KPX Amacron Ccaron -65 +KPX Amacron Ccedilla -65 +KPX Amacron G -60 +KPX Amacron Gbreve -60 +KPX Amacron Gcommaaccent -60 +KPX Amacron O -50 +KPX Amacron Oacute -50 +KPX Amacron Ocircumflex -50 +KPX Amacron Odieresis -50 +KPX Amacron Ograve -50 +KPX Amacron Ohungarumlaut -50 +KPX Amacron Omacron -50 +KPX Amacron Oslash -50 +KPX Amacron Otilde -50 +KPX Amacron Q -55 +KPX Amacron T -55 +KPX Amacron Tcaron -55 +KPX Amacron Tcommaaccent -55 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -95 +KPX Amacron W -100 +KPX Amacron Y -70 +KPX Amacron Yacute -70 +KPX Amacron Ydieresis -70 +KPX Amacron quoteright -74 +KPX Amacron u -30 +KPX Amacron uacute -30 +KPX Amacron ucircumflex -30 +KPX Amacron udieresis -30 +KPX Amacron ugrave -30 +KPX Amacron uhungarumlaut -30 +KPX Amacron umacron -30 +KPX Amacron uogonek -30 +KPX Amacron uring -30 +KPX Amacron v -74 +KPX Amacron w -74 +KPX Amacron y -74 +KPX Amacron yacute -74 +KPX Amacron ydieresis -74 +KPX Aogonek C -65 +KPX Aogonek Cacute -65 +KPX Aogonek Ccaron -65 +KPX Aogonek Ccedilla -65 +KPX Aogonek G -60 +KPX Aogonek Gbreve -60 +KPX Aogonek Gcommaaccent -60 +KPX Aogonek O -50 +KPX Aogonek Oacute -50 +KPX Aogonek Ocircumflex -50 +KPX Aogonek Odieresis -50 +KPX Aogonek Ograve -50 +KPX Aogonek Ohungarumlaut -50 +KPX Aogonek Omacron -50 +KPX Aogonek Oslash -50 +KPX Aogonek Otilde -50 +KPX Aogonek Q -55 +KPX Aogonek T -55 +KPX Aogonek Tcaron -55 +KPX Aogonek Tcommaaccent -55 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -95 +KPX Aogonek W -100 +KPX Aogonek Y -70 +KPX Aogonek Yacute -70 +KPX Aogonek Ydieresis -70 +KPX Aogonek quoteright -74 +KPX Aogonek u -30 +KPX Aogonek uacute -30 +KPX Aogonek ucircumflex -30 +KPX Aogonek udieresis -30 +KPX Aogonek ugrave -30 +KPX Aogonek uhungarumlaut -30 +KPX Aogonek umacron -30 +KPX Aogonek uogonek -30 +KPX Aogonek uring -30 +KPX Aogonek v -74 +KPX Aogonek w -74 +KPX Aogonek y -34 +KPX Aogonek yacute -34 +KPX Aogonek ydieresis -34 +KPX Aring C -65 +KPX Aring Cacute -65 +KPX Aring Ccaron -65 +KPX Aring Ccedilla -65 +KPX Aring G -60 +KPX Aring Gbreve -60 +KPX Aring Gcommaaccent -60 +KPX Aring O -50 +KPX Aring Oacute -50 +KPX Aring Ocircumflex -50 +KPX Aring Odieresis -50 +KPX Aring Ograve -50 +KPX Aring Ohungarumlaut -50 +KPX Aring Omacron -50 +KPX Aring Oslash -50 +KPX Aring Otilde -50 +KPX Aring Q -55 +KPX Aring T -55 +KPX Aring Tcaron -55 +KPX Aring Tcommaaccent -55 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -95 +KPX Aring W -100 +KPX Aring Y -70 +KPX Aring Yacute -70 +KPX Aring Ydieresis -70 +KPX Aring quoteright -74 +KPX Aring u -30 +KPX Aring uacute -30 +KPX Aring ucircumflex -30 +KPX Aring udieresis -30 +KPX Aring ugrave -30 +KPX Aring uhungarumlaut -30 +KPX Aring umacron -30 +KPX Aring uogonek -30 +KPX Aring uring -30 +KPX Aring v -74 +KPX Aring w -74 +KPX Aring y -74 +KPX Aring yacute -74 +KPX Aring ydieresis -74 +KPX Atilde C -65 +KPX Atilde Cacute -65 +KPX Atilde Ccaron -65 +KPX Atilde Ccedilla -65 +KPX Atilde G -60 +KPX Atilde Gbreve -60 +KPX Atilde Gcommaaccent -60 +KPX Atilde O -50 +KPX Atilde Oacute -50 +KPX Atilde Ocircumflex -50 +KPX Atilde Odieresis -50 +KPX Atilde Ograve -50 +KPX Atilde Ohungarumlaut -50 +KPX Atilde Omacron -50 +KPX Atilde Oslash -50 +KPX Atilde Otilde -50 +KPX Atilde Q -55 +KPX Atilde T -55 +KPX Atilde Tcaron -55 +KPX Atilde Tcommaaccent -55 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -95 +KPX Atilde W -100 +KPX Atilde Y -70 +KPX Atilde Yacute -70 +KPX Atilde Ydieresis -70 +KPX Atilde quoteright -74 +KPX Atilde u -30 +KPX Atilde uacute -30 +KPX Atilde ucircumflex -30 +KPX Atilde udieresis -30 +KPX Atilde ugrave -30 +KPX Atilde uhungarumlaut -30 +KPX Atilde umacron -30 +KPX Atilde uogonek -30 +KPX Atilde uring -30 +KPX Atilde v -74 +KPX Atilde w -74 +KPX Atilde y -74 +KPX Atilde yacute -74 +KPX Atilde ydieresis -74 +KPX B A -25 +KPX B Aacute -25 +KPX B Abreve -25 +KPX B Acircumflex -25 +KPX B Adieresis -25 +KPX B Agrave -25 +KPX B Amacron -25 +KPX B Aogonek -25 +KPX B Aring -25 +KPX B Atilde -25 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -25 +KPX D Aacute -25 +KPX D Abreve -25 +KPX D Acircumflex -25 +KPX D Adieresis -25 +KPX D Agrave -25 +KPX D Amacron -25 +KPX D Aogonek -25 +KPX D Aring -25 +KPX D Atilde -25 +KPX D V -50 +KPX D W -40 +KPX D Y -50 +KPX D Yacute -50 +KPX D Ydieresis -50 +KPX Dcaron A -25 +KPX Dcaron Aacute -25 +KPX Dcaron Abreve -25 +KPX Dcaron Acircumflex -25 +KPX Dcaron Adieresis -25 +KPX Dcaron Agrave -25 +KPX Dcaron Amacron -25 +KPX Dcaron Aogonek -25 +KPX Dcaron Aring -25 +KPX Dcaron Atilde -25 +KPX Dcaron V -50 +KPX Dcaron W -40 +KPX Dcaron Y -50 +KPX Dcaron Yacute -50 +KPX Dcaron Ydieresis -50 +KPX Dcroat A -25 +KPX Dcroat Aacute -25 +KPX Dcroat Abreve -25 +KPX Dcroat Acircumflex -25 +KPX Dcroat Adieresis -25 +KPX Dcroat Agrave -25 +KPX Dcroat Amacron -25 +KPX Dcroat Aogonek -25 +KPX Dcroat Aring -25 +KPX Dcroat Atilde -25 +KPX Dcroat V -50 +KPX Dcroat W -40 +KPX Dcroat Y -50 +KPX Dcroat Yacute -50 +KPX Dcroat Ydieresis -50 +KPX F A -100 +KPX F Aacute -100 +KPX F Abreve -100 +KPX F Acircumflex -100 +KPX F Adieresis -100 +KPX F Agrave -100 +KPX F Amacron -100 +KPX F Aogonek -100 +KPX F Aring -100 +KPX F Atilde -100 +KPX F a -95 +KPX F aacute -95 +KPX F abreve -95 +KPX F acircumflex -95 +KPX F adieresis -95 +KPX F agrave -95 +KPX F amacron -95 +KPX F aogonek -95 +KPX F aring -95 +KPX F atilde -95 +KPX F comma -129 +KPX F e -100 +KPX F eacute -100 +KPX F ecaron -100 +KPX F ecircumflex -100 +KPX F edieresis -100 +KPX F edotaccent -100 +KPX F egrave -100 +KPX F emacron -100 +KPX F eogonek -100 +KPX F i -40 +KPX F iacute -40 +KPX F icircumflex -40 +KPX F idieresis -40 +KPX F igrave -40 +KPX F imacron -40 +KPX F iogonek -40 +KPX F o -70 +KPX F oacute -70 +KPX F ocircumflex -70 +KPX F odieresis -70 +KPX F ograve -70 +KPX F ohungarumlaut -70 +KPX F omacron -70 +KPX F oslash -70 +KPX F otilde -70 +KPX F period -129 +KPX F r -50 +KPX F racute -50 +KPX F rcaron -50 +KPX F rcommaaccent -50 +KPX J A -25 +KPX J Aacute -25 +KPX J Abreve -25 +KPX J Acircumflex -25 +KPX J Adieresis -25 +KPX J Agrave -25 +KPX J Amacron -25 +KPX J Aogonek -25 +KPX J Aring -25 +KPX J Atilde -25 +KPX J a -40 +KPX J aacute -40 +KPX J abreve -40 +KPX J acircumflex -40 +KPX J adieresis -40 +KPX J agrave -40 +KPX J amacron -40 +KPX J aogonek -40 +KPX J aring -40 +KPX J atilde -40 +KPX J comma -10 +KPX J e -40 +KPX J eacute -40 +KPX J ecaron -40 +KPX J ecircumflex -40 +KPX J edieresis -40 +KPX J edotaccent -40 +KPX J egrave -40 +KPX J emacron -40 +KPX J eogonek -40 +KPX J o -40 +KPX J oacute -40 +KPX J ocircumflex -40 +KPX J odieresis -40 +KPX J ograve -40 +KPX J ohungarumlaut -40 +KPX J omacron -40 +KPX J oslash -40 +KPX J otilde -40 +KPX J period -10 +KPX J u -40 +KPX J uacute -40 +KPX J ucircumflex -40 +KPX J udieresis -40 +KPX J ugrave -40 +KPX J uhungarumlaut -40 +KPX J umacron -40 +KPX J uogonek -40 +KPX J uring -40 +KPX K O -30 +KPX K Oacute -30 +KPX K Ocircumflex -30 +KPX K Odieresis -30 +KPX K Ograve -30 +KPX K Ohungarumlaut -30 +KPX K Omacron -30 +KPX K Oslash -30 +KPX K Otilde -30 +KPX K e -25 +KPX K eacute -25 +KPX K ecaron -25 +KPX K ecircumflex -25 +KPX K edieresis -25 +KPX K edotaccent -25 +KPX K egrave -25 +KPX K emacron -25 +KPX K eogonek -25 +KPX K o -25 +KPX K oacute -25 +KPX K ocircumflex -25 +KPX K odieresis -25 +KPX K ograve -25 +KPX K ohungarumlaut -25 +KPX K omacron -25 +KPX K oslash -25 +KPX K otilde -25 +KPX K u -20 +KPX K uacute -20 +KPX K ucircumflex -20 +KPX K udieresis -20 +KPX K ugrave -20 +KPX K uhungarumlaut -20 +KPX K umacron -20 +KPX K uogonek -20 +KPX K uring -20 +KPX K y -20 +KPX K yacute -20 +KPX K ydieresis -20 +KPX Kcommaaccent O -30 +KPX Kcommaaccent Oacute -30 +KPX Kcommaaccent Ocircumflex -30 +KPX Kcommaaccent Odieresis -30 +KPX Kcommaaccent Ograve -30 +KPX Kcommaaccent Ohungarumlaut -30 +KPX Kcommaaccent Omacron -30 +KPX Kcommaaccent Oslash -30 +KPX Kcommaaccent Otilde -30 +KPX Kcommaaccent e -25 +KPX Kcommaaccent eacute -25 +KPX Kcommaaccent ecaron -25 +KPX Kcommaaccent ecircumflex -25 +KPX Kcommaaccent edieresis -25 +KPX Kcommaaccent edotaccent -25 +KPX Kcommaaccent egrave -25 +KPX Kcommaaccent emacron -25 +KPX Kcommaaccent eogonek -25 +KPX Kcommaaccent o -25 +KPX Kcommaaccent oacute -25 +KPX Kcommaaccent ocircumflex -25 +KPX Kcommaaccent odieresis -25 +KPX Kcommaaccent ograve -25 +KPX Kcommaaccent ohungarumlaut -25 +KPX Kcommaaccent omacron -25 +KPX Kcommaaccent oslash -25 +KPX Kcommaaccent otilde -25 +KPX Kcommaaccent u -20 +KPX Kcommaaccent uacute -20 +KPX Kcommaaccent ucircumflex -20 +KPX Kcommaaccent udieresis -20 +KPX Kcommaaccent ugrave -20 +KPX Kcommaaccent uhungarumlaut -20 +KPX Kcommaaccent umacron -20 +KPX Kcommaaccent uogonek -20 +KPX Kcommaaccent uring -20 +KPX Kcommaaccent y -20 +KPX Kcommaaccent yacute -20 +KPX Kcommaaccent ydieresis -20 +KPX L T -18 +KPX L Tcaron -18 +KPX L Tcommaaccent -18 +KPX L V -37 +KPX L W -37 +KPX L Y -37 +KPX L Yacute -37 +KPX L Ydieresis -37 +KPX L quoteright -55 +KPX L y -37 +KPX L yacute -37 +KPX L ydieresis -37 +KPX Lacute T -18 +KPX Lacute Tcaron -18 +KPX Lacute Tcommaaccent -18 +KPX Lacute V -37 +KPX Lacute W -37 +KPX Lacute Y -37 +KPX Lacute Yacute -37 +KPX Lacute Ydieresis -37 +KPX Lacute quoteright -55 +KPX Lacute y -37 +KPX Lacute yacute -37 +KPX Lacute ydieresis -37 +KPX Lcommaaccent T -18 +KPX Lcommaaccent Tcaron -18 +KPX Lcommaaccent Tcommaaccent -18 +KPX Lcommaaccent V -37 +KPX Lcommaaccent W -37 +KPX Lcommaaccent Y -37 +KPX Lcommaaccent Yacute -37 +KPX Lcommaaccent Ydieresis -37 +KPX Lcommaaccent quoteright -55 +KPX Lcommaaccent y -37 +KPX Lcommaaccent yacute -37 +KPX Lcommaaccent ydieresis -37 +KPX Lslash T -18 +KPX Lslash Tcaron -18 +KPX Lslash Tcommaaccent -18 +KPX Lslash V -37 +KPX Lslash W -37 +KPX Lslash Y -37 +KPX Lslash Yacute -37 +KPX Lslash Ydieresis -37 +KPX Lslash quoteright -55 +KPX Lslash y -37 +KPX Lslash yacute -37 +KPX Lslash ydieresis -37 +KPX N A -30 +KPX N Aacute -30 +KPX N Abreve -30 +KPX N Acircumflex -30 +KPX N Adieresis -30 +KPX N Agrave -30 +KPX N Amacron -30 +KPX N Aogonek -30 +KPX N Aring -30 +KPX N Atilde -30 +KPX Nacute A -30 +KPX Nacute Aacute -30 +KPX Nacute Abreve -30 +KPX Nacute Acircumflex -30 +KPX Nacute Adieresis -30 +KPX Nacute Agrave -30 +KPX Nacute Amacron -30 +KPX Nacute Aogonek -30 +KPX Nacute Aring -30 +KPX Nacute Atilde -30 +KPX Ncaron A -30 +KPX Ncaron Aacute -30 +KPX Ncaron Abreve -30 +KPX Ncaron Acircumflex -30 +KPX Ncaron Adieresis -30 +KPX Ncaron Agrave -30 +KPX Ncaron Amacron -30 +KPX Ncaron Aogonek -30 +KPX Ncaron Aring -30 +KPX Ncaron Atilde -30 +KPX Ncommaaccent A -30 +KPX Ncommaaccent Aacute -30 +KPX Ncommaaccent Abreve -30 +KPX Ncommaaccent Acircumflex -30 +KPX Ncommaaccent Adieresis -30 +KPX Ncommaaccent Agrave -30 +KPX Ncommaaccent Amacron -30 +KPX Ncommaaccent Aogonek -30 +KPX Ncommaaccent Aring -30 +KPX Ncommaaccent Atilde -30 +KPX Ntilde A -30 +KPX Ntilde Aacute -30 +KPX Ntilde Abreve -30 +KPX Ntilde Acircumflex -30 +KPX Ntilde Adieresis -30 +KPX Ntilde Agrave -30 +KPX Ntilde Amacron -30 +KPX Ntilde Aogonek -30 +KPX Ntilde Aring -30 +KPX Ntilde Atilde -30 +KPX O A -40 +KPX O Aacute -40 +KPX O Abreve -40 +KPX O Acircumflex -40 +KPX O Adieresis -40 +KPX O Agrave -40 +KPX O Amacron -40 +KPX O Aogonek -40 +KPX O Aring -40 +KPX O Atilde -40 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -50 +KPX O X -40 +KPX O Y -50 +KPX O Yacute -50 +KPX O Ydieresis -50 +KPX Oacute A -40 +KPX Oacute Aacute -40 +KPX Oacute Abreve -40 +KPX Oacute Acircumflex -40 +KPX Oacute Adieresis -40 +KPX Oacute Agrave -40 +KPX Oacute Amacron -40 +KPX Oacute Aogonek -40 +KPX Oacute Aring -40 +KPX Oacute Atilde -40 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -50 +KPX Oacute X -40 +KPX Oacute Y -50 +KPX Oacute Yacute -50 +KPX Oacute Ydieresis -50 +KPX Ocircumflex A -40 +KPX Ocircumflex Aacute -40 +KPX Ocircumflex Abreve -40 +KPX Ocircumflex Acircumflex -40 +KPX Ocircumflex Adieresis -40 +KPX Ocircumflex Agrave -40 +KPX Ocircumflex Amacron -40 +KPX Ocircumflex Aogonek -40 +KPX Ocircumflex Aring -40 +KPX Ocircumflex Atilde -40 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -50 +KPX Ocircumflex X -40 +KPX Ocircumflex Y -50 +KPX Ocircumflex Yacute -50 +KPX Ocircumflex Ydieresis -50 +KPX Odieresis A -40 +KPX Odieresis Aacute -40 +KPX Odieresis Abreve -40 +KPX Odieresis Acircumflex -40 +KPX Odieresis Adieresis -40 +KPX Odieresis Agrave -40 +KPX Odieresis Amacron -40 +KPX Odieresis Aogonek -40 +KPX Odieresis Aring -40 +KPX Odieresis Atilde -40 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -50 +KPX Odieresis X -40 +KPX Odieresis Y -50 +KPX Odieresis Yacute -50 +KPX Odieresis Ydieresis -50 +KPX Ograve A -40 +KPX Ograve Aacute -40 +KPX Ograve Abreve -40 +KPX Ograve Acircumflex -40 +KPX Ograve Adieresis -40 +KPX Ograve Agrave -40 +KPX Ograve Amacron -40 +KPX Ograve Aogonek -40 +KPX Ograve Aring -40 +KPX Ograve Atilde -40 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -50 +KPX Ograve X -40 +KPX Ograve Y -50 +KPX Ograve Yacute -50 +KPX Ograve Ydieresis -50 +KPX Ohungarumlaut A -40 +KPX Ohungarumlaut Aacute -40 +KPX Ohungarumlaut Abreve -40 +KPX Ohungarumlaut Acircumflex -40 +KPX Ohungarumlaut Adieresis -40 +KPX Ohungarumlaut Agrave -40 +KPX Ohungarumlaut Amacron -40 +KPX Ohungarumlaut Aogonek -40 +KPX Ohungarumlaut Aring -40 +KPX Ohungarumlaut Atilde -40 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -50 +KPX Ohungarumlaut X -40 +KPX Ohungarumlaut Y -50 +KPX Ohungarumlaut Yacute -50 +KPX Ohungarumlaut Ydieresis -50 +KPX Omacron A -40 +KPX Omacron Aacute -40 +KPX Omacron Abreve -40 +KPX Omacron Acircumflex -40 +KPX Omacron Adieresis -40 +KPX Omacron Agrave -40 +KPX Omacron Amacron -40 +KPX Omacron Aogonek -40 +KPX Omacron Aring -40 +KPX Omacron Atilde -40 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -50 +KPX Omacron X -40 +KPX Omacron Y -50 +KPX Omacron Yacute -50 +KPX Omacron Ydieresis -50 +KPX Oslash A -40 +KPX Oslash Aacute -40 +KPX Oslash Abreve -40 +KPX Oslash Acircumflex -40 +KPX Oslash Adieresis -40 +KPX Oslash Agrave -40 +KPX Oslash Amacron -40 +KPX Oslash Aogonek -40 +KPX Oslash Aring -40 +KPX Oslash Atilde -40 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -50 +KPX Oslash X -40 +KPX Oslash Y -50 +KPX Oslash Yacute -50 +KPX Oslash Ydieresis -50 +KPX Otilde A -40 +KPX Otilde Aacute -40 +KPX Otilde Abreve -40 +KPX Otilde Acircumflex -40 +KPX Otilde Adieresis -40 +KPX Otilde Agrave -40 +KPX Otilde Amacron -40 +KPX Otilde Aogonek -40 +KPX Otilde Aring -40 +KPX Otilde Atilde -40 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -50 +KPX Otilde X -40 +KPX Otilde Y -50 +KPX Otilde Yacute -50 +KPX Otilde Ydieresis -50 +KPX P A -85 +KPX P Aacute -85 +KPX P Abreve -85 +KPX P Acircumflex -85 +KPX P Adieresis -85 +KPX P Agrave -85 +KPX P Amacron -85 +KPX P Aogonek -85 +KPX P Aring -85 +KPX P Atilde -85 +KPX P a -40 +KPX P aacute -40 +KPX P abreve -40 +KPX P acircumflex -40 +KPX P adieresis -40 +KPX P agrave -40 +KPX P amacron -40 +KPX P aogonek -40 +KPX P aring -40 +KPX P atilde -40 +KPX P comma -129 +KPX P e -50 +KPX P eacute -50 +KPX P ecaron -50 +KPX P ecircumflex -50 +KPX P edieresis -50 +KPX P edotaccent -50 +KPX P egrave -50 +KPX P emacron -50 +KPX P eogonek -50 +KPX P o -55 +KPX P oacute -55 +KPX P ocircumflex -55 +KPX P odieresis -55 +KPX P ograve -55 +KPX P ohungarumlaut -55 +KPX P omacron -55 +KPX P oslash -55 +KPX P otilde -55 +KPX P period -129 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX R O -40 +KPX R Oacute -40 +KPX R Ocircumflex -40 +KPX R Odieresis -40 +KPX R Ograve -40 +KPX R Ohungarumlaut -40 +KPX R Omacron -40 +KPX R Oslash -40 +KPX R Otilde -40 +KPX R T -30 +KPX R Tcaron -30 +KPX R Tcommaaccent -30 +KPX R U -40 +KPX R Uacute -40 +KPX R Ucircumflex -40 +KPX R Udieresis -40 +KPX R Ugrave -40 +KPX R Uhungarumlaut -40 +KPX R Umacron -40 +KPX R Uogonek -40 +KPX R Uring -40 +KPX R V -18 +KPX R W -18 +KPX R Y -18 +KPX R Yacute -18 +KPX R Ydieresis -18 +KPX Racute O -40 +KPX Racute Oacute -40 +KPX Racute Ocircumflex -40 +KPX Racute Odieresis -40 +KPX Racute Ograve -40 +KPX Racute Ohungarumlaut -40 +KPX Racute Omacron -40 +KPX Racute Oslash -40 +KPX Racute Otilde -40 +KPX Racute T -30 +KPX Racute Tcaron -30 +KPX Racute Tcommaaccent -30 +KPX Racute U -40 +KPX Racute Uacute -40 +KPX Racute Ucircumflex -40 +KPX Racute Udieresis -40 +KPX Racute Ugrave -40 +KPX Racute Uhungarumlaut -40 +KPX Racute Umacron -40 +KPX Racute Uogonek -40 +KPX Racute Uring -40 +KPX Racute V -18 +KPX Racute W -18 +KPX Racute Y -18 +KPX Racute Yacute -18 +KPX Racute Ydieresis -18 +KPX Rcaron O -40 +KPX Rcaron Oacute -40 +KPX Rcaron Ocircumflex -40 +KPX Rcaron Odieresis -40 +KPX Rcaron Ograve -40 +KPX Rcaron Ohungarumlaut -40 +KPX Rcaron Omacron -40 +KPX Rcaron Oslash -40 +KPX Rcaron Otilde -40 +KPX Rcaron T -30 +KPX Rcaron Tcaron -30 +KPX Rcaron Tcommaaccent -30 +KPX Rcaron U -40 +KPX Rcaron Uacute -40 +KPX Rcaron Ucircumflex -40 +KPX Rcaron Udieresis -40 +KPX Rcaron Ugrave -40 +KPX Rcaron Uhungarumlaut -40 +KPX Rcaron Umacron -40 +KPX Rcaron Uogonek -40 +KPX Rcaron Uring -40 +KPX Rcaron V -18 +KPX Rcaron W -18 +KPX Rcaron Y -18 +KPX Rcaron Yacute -18 +KPX Rcaron Ydieresis -18 +KPX Rcommaaccent O -40 +KPX Rcommaaccent Oacute -40 +KPX Rcommaaccent Ocircumflex -40 +KPX Rcommaaccent Odieresis -40 +KPX Rcommaaccent Ograve -40 +KPX Rcommaaccent Ohungarumlaut -40 +KPX Rcommaaccent Omacron -40 +KPX Rcommaaccent Oslash -40 +KPX Rcommaaccent Otilde -40 +KPX Rcommaaccent T -30 +KPX Rcommaaccent Tcaron -30 +KPX Rcommaaccent Tcommaaccent -30 +KPX Rcommaaccent U -40 +KPX Rcommaaccent Uacute -40 +KPX Rcommaaccent Ucircumflex -40 +KPX Rcommaaccent Udieresis -40 +KPX Rcommaaccent Ugrave -40 +KPX Rcommaaccent Uhungarumlaut -40 +KPX Rcommaaccent Umacron -40 +KPX Rcommaaccent Uogonek -40 +KPX Rcommaaccent Uring -40 +KPX Rcommaaccent V -18 +KPX Rcommaaccent W -18 +KPX Rcommaaccent Y -18 +KPX Rcommaaccent Yacute -18 +KPX Rcommaaccent Ydieresis -18 +KPX T A -55 +KPX T Aacute -55 +KPX T Abreve -55 +KPX T Acircumflex -55 +KPX T Adieresis -55 +KPX T Agrave -55 +KPX T Amacron -55 +KPX T Aogonek -55 +KPX T Aring -55 +KPX T Atilde -55 +KPX T O -18 +KPX T Oacute -18 +KPX T Ocircumflex -18 +KPX T Odieresis -18 +KPX T Ograve -18 +KPX T Ohungarumlaut -18 +KPX T Omacron -18 +KPX T Oslash -18 +KPX T Otilde -18 +KPX T a -92 +KPX T aacute -92 +KPX T abreve -92 +KPX T acircumflex -92 +KPX T adieresis -92 +KPX T agrave -92 +KPX T amacron -92 +KPX T aogonek -92 +KPX T aring -92 +KPX T atilde -92 +KPX T colon -74 +KPX T comma -92 +KPX T e -92 +KPX T eacute -92 +KPX T ecaron -92 +KPX T ecircumflex -92 +KPX T edieresis -52 +KPX T edotaccent -92 +KPX T egrave -52 +KPX T emacron -52 +KPX T eogonek -92 +KPX T hyphen -92 +KPX T i -37 +KPX T iacute -37 +KPX T iogonek -37 +KPX T o -95 +KPX T oacute -95 +KPX T ocircumflex -95 +KPX T odieresis -95 +KPX T ograve -95 +KPX T ohungarumlaut -95 +KPX T omacron -95 +KPX T oslash -95 +KPX T otilde -95 +KPX T period -92 +KPX T r -37 +KPX T racute -37 +KPX T rcaron -37 +KPX T rcommaaccent -37 +KPX T semicolon -74 +KPX T u -37 +KPX T uacute -37 +KPX T ucircumflex -37 +KPX T udieresis -37 +KPX T ugrave -37 +KPX T uhungarumlaut -37 +KPX T umacron -37 +KPX T uogonek -37 +KPX T uring -37 +KPX T w -37 +KPX T y -37 +KPX T yacute -37 +KPX T ydieresis -37 +KPX Tcaron A -55 +KPX Tcaron Aacute -55 +KPX Tcaron Abreve -55 +KPX Tcaron Acircumflex -55 +KPX Tcaron Adieresis -55 +KPX Tcaron Agrave -55 +KPX Tcaron Amacron -55 +KPX Tcaron Aogonek -55 +KPX Tcaron Aring -55 +KPX Tcaron Atilde -55 +KPX Tcaron O -18 +KPX Tcaron Oacute -18 +KPX Tcaron Ocircumflex -18 +KPX Tcaron Odieresis -18 +KPX Tcaron Ograve -18 +KPX Tcaron Ohungarumlaut -18 +KPX Tcaron Omacron -18 +KPX Tcaron Oslash -18 +KPX Tcaron Otilde -18 +KPX Tcaron a -92 +KPX Tcaron aacute -92 +KPX Tcaron abreve -92 +KPX Tcaron acircumflex -92 +KPX Tcaron adieresis -92 +KPX Tcaron agrave -92 +KPX Tcaron amacron -92 +KPX Tcaron aogonek -92 +KPX Tcaron aring -92 +KPX Tcaron atilde -92 +KPX Tcaron colon -74 +KPX Tcaron comma -92 +KPX Tcaron e -92 +KPX Tcaron eacute -92 +KPX Tcaron ecaron -92 +KPX Tcaron ecircumflex -92 +KPX Tcaron edieresis -52 +KPX Tcaron edotaccent -92 +KPX Tcaron egrave -52 +KPX Tcaron emacron -52 +KPX Tcaron eogonek -92 +KPX Tcaron hyphen -92 +KPX Tcaron i -37 +KPX Tcaron iacute -37 +KPX Tcaron iogonek -37 +KPX Tcaron o -95 +KPX Tcaron oacute -95 +KPX Tcaron ocircumflex -95 +KPX Tcaron odieresis -95 +KPX Tcaron ograve -95 +KPX Tcaron ohungarumlaut -95 +KPX Tcaron omacron -95 +KPX Tcaron oslash -95 +KPX Tcaron otilde -95 +KPX Tcaron period -92 +KPX Tcaron r -37 +KPX Tcaron racute -37 +KPX Tcaron rcaron -37 +KPX Tcaron rcommaaccent -37 +KPX Tcaron semicolon -74 +KPX Tcaron u -37 +KPX Tcaron uacute -37 +KPX Tcaron ucircumflex -37 +KPX Tcaron udieresis -37 +KPX Tcaron ugrave -37 +KPX Tcaron uhungarumlaut -37 +KPX Tcaron umacron -37 +KPX Tcaron uogonek -37 +KPX Tcaron uring -37 +KPX Tcaron w -37 +KPX Tcaron y -37 +KPX Tcaron yacute -37 +KPX Tcaron ydieresis -37 +KPX Tcommaaccent A -55 +KPX Tcommaaccent Aacute -55 +KPX Tcommaaccent Abreve -55 +KPX Tcommaaccent Acircumflex -55 +KPX Tcommaaccent Adieresis -55 +KPX Tcommaaccent Agrave -55 +KPX Tcommaaccent Amacron -55 +KPX Tcommaaccent Aogonek -55 +KPX Tcommaaccent Aring -55 +KPX Tcommaaccent Atilde -55 +KPX Tcommaaccent O -18 +KPX Tcommaaccent Oacute -18 +KPX Tcommaaccent Ocircumflex -18 +KPX Tcommaaccent Odieresis -18 +KPX Tcommaaccent Ograve -18 +KPX Tcommaaccent Ohungarumlaut -18 +KPX Tcommaaccent Omacron -18 +KPX Tcommaaccent Oslash -18 +KPX Tcommaaccent Otilde -18 +KPX Tcommaaccent a -92 +KPX Tcommaaccent aacute -92 +KPX Tcommaaccent abreve -92 +KPX Tcommaaccent acircumflex -92 +KPX Tcommaaccent adieresis -92 +KPX Tcommaaccent agrave -92 +KPX Tcommaaccent amacron -92 +KPX Tcommaaccent aogonek -92 +KPX Tcommaaccent aring -92 +KPX Tcommaaccent atilde -92 +KPX Tcommaaccent colon -74 +KPX Tcommaaccent comma -92 +KPX Tcommaaccent e -92 +KPX Tcommaaccent eacute -92 +KPX Tcommaaccent ecaron -92 +KPX Tcommaaccent ecircumflex -92 +KPX Tcommaaccent edieresis -52 +KPX Tcommaaccent edotaccent -92 +KPX Tcommaaccent egrave -52 +KPX Tcommaaccent emacron -52 +KPX Tcommaaccent eogonek -92 +KPX Tcommaaccent hyphen -92 +KPX Tcommaaccent i -37 +KPX Tcommaaccent iacute -37 +KPX Tcommaaccent iogonek -37 +KPX Tcommaaccent o -95 +KPX Tcommaaccent oacute -95 +KPX Tcommaaccent ocircumflex -95 +KPX Tcommaaccent odieresis -95 +KPX Tcommaaccent ograve -95 +KPX Tcommaaccent ohungarumlaut -95 +KPX Tcommaaccent omacron -95 +KPX Tcommaaccent oslash -95 +KPX Tcommaaccent otilde -95 +KPX Tcommaaccent period -92 +KPX Tcommaaccent r -37 +KPX Tcommaaccent racute -37 +KPX Tcommaaccent rcaron -37 +KPX Tcommaaccent rcommaaccent -37 +KPX Tcommaaccent semicolon -74 +KPX Tcommaaccent u -37 +KPX Tcommaaccent uacute -37 +KPX Tcommaaccent ucircumflex -37 +KPX Tcommaaccent udieresis -37 +KPX Tcommaaccent ugrave -37 +KPX Tcommaaccent uhungarumlaut -37 +KPX Tcommaaccent umacron -37 +KPX Tcommaaccent uogonek -37 +KPX Tcommaaccent uring -37 +KPX Tcommaaccent w -37 +KPX Tcommaaccent y -37 +KPX Tcommaaccent yacute -37 +KPX Tcommaaccent ydieresis -37 +KPX U A -45 +KPX U Aacute -45 +KPX U Abreve -45 +KPX U Acircumflex -45 +KPX U Adieresis -45 +KPX U Agrave -45 +KPX U Amacron -45 +KPX U Aogonek -45 +KPX U Aring -45 +KPX U Atilde -45 +KPX Uacute A -45 +KPX Uacute Aacute -45 +KPX Uacute Abreve -45 +KPX Uacute Acircumflex -45 +KPX Uacute Adieresis -45 +KPX Uacute Agrave -45 +KPX Uacute Amacron -45 +KPX Uacute Aogonek -45 +KPX Uacute Aring -45 +KPX Uacute Atilde -45 +KPX Ucircumflex A -45 +KPX Ucircumflex Aacute -45 +KPX Ucircumflex Abreve -45 +KPX Ucircumflex Acircumflex -45 +KPX Ucircumflex Adieresis -45 +KPX Ucircumflex Agrave -45 +KPX Ucircumflex Amacron -45 +KPX Ucircumflex Aogonek -45 +KPX Ucircumflex Aring -45 +KPX Ucircumflex Atilde -45 +KPX Udieresis A -45 +KPX Udieresis Aacute -45 +KPX Udieresis Abreve -45 +KPX Udieresis Acircumflex -45 +KPX Udieresis Adieresis -45 +KPX Udieresis Agrave -45 +KPX Udieresis Amacron -45 +KPX Udieresis Aogonek -45 +KPX Udieresis Aring -45 +KPX Udieresis Atilde -45 +KPX Ugrave A -45 +KPX Ugrave Aacute -45 +KPX Ugrave Abreve -45 +KPX Ugrave Acircumflex -45 +KPX Ugrave Adieresis -45 +KPX Ugrave Agrave -45 +KPX Ugrave Amacron -45 +KPX Ugrave Aogonek -45 +KPX Ugrave Aring -45 +KPX Ugrave Atilde -45 +KPX Uhungarumlaut A -45 +KPX Uhungarumlaut Aacute -45 +KPX Uhungarumlaut Abreve -45 +KPX Uhungarumlaut Acircumflex -45 +KPX Uhungarumlaut Adieresis -45 +KPX Uhungarumlaut Agrave -45 +KPX Uhungarumlaut Amacron -45 +KPX Uhungarumlaut Aogonek -45 +KPX Uhungarumlaut Aring -45 +KPX Uhungarumlaut Atilde -45 +KPX Umacron A -45 +KPX Umacron Aacute -45 +KPX Umacron Abreve -45 +KPX Umacron Acircumflex -45 +KPX Umacron Adieresis -45 +KPX Umacron Agrave -45 +KPX Umacron Amacron -45 +KPX Umacron Aogonek -45 +KPX Umacron Aring -45 +KPX Umacron Atilde -45 +KPX Uogonek A -45 +KPX Uogonek Aacute -45 +KPX Uogonek Abreve -45 +KPX Uogonek Acircumflex -45 +KPX Uogonek Adieresis -45 +KPX Uogonek Agrave -45 +KPX Uogonek Amacron -45 +KPX Uogonek Aogonek -45 +KPX Uogonek Aring -45 +KPX Uogonek Atilde -45 +KPX Uring A -45 +KPX Uring Aacute -45 +KPX Uring Abreve -45 +KPX Uring Acircumflex -45 +KPX Uring Adieresis -45 +KPX Uring Agrave -45 +KPX Uring Amacron -45 +KPX Uring Aogonek -45 +KPX Uring Aring -45 +KPX Uring Atilde -45 +KPX V A -85 +KPX V Aacute -85 +KPX V Abreve -85 +KPX V Acircumflex -85 +KPX V Adieresis -85 +KPX V Agrave -85 +KPX V Amacron -85 +KPX V Aogonek -85 +KPX V Aring -85 +KPX V Atilde -85 +KPX V G -10 +KPX V Gbreve -10 +KPX V Gcommaaccent -10 +KPX V O -30 +KPX V Oacute -30 +KPX V Ocircumflex -30 +KPX V Odieresis -30 +KPX V Ograve -30 +KPX V Ohungarumlaut -30 +KPX V Omacron -30 +KPX V Oslash -30 +KPX V Otilde -30 +KPX V a -111 +KPX V aacute -111 +KPX V abreve -111 +KPX V acircumflex -111 +KPX V adieresis -111 +KPX V agrave -111 +KPX V amacron -111 +KPX V aogonek -111 +KPX V aring -111 +KPX V atilde -111 +KPX V colon -74 +KPX V comma -129 +KPX V e -111 +KPX V eacute -111 +KPX V ecaron -111 +KPX V ecircumflex -111 +KPX V edieresis -71 +KPX V edotaccent -111 +KPX V egrave -71 +KPX V emacron -71 +KPX V eogonek -111 +KPX V hyphen -70 +KPX V i -55 +KPX V iacute -55 +KPX V iogonek -55 +KPX V o -111 +KPX V oacute -111 +KPX V ocircumflex -111 +KPX V odieresis -111 +KPX V ograve -111 +KPX V ohungarumlaut -111 +KPX V omacron -111 +KPX V oslash -111 +KPX V otilde -111 +KPX V period -129 +KPX V semicolon -74 +KPX V u -55 +KPX V uacute -55 +KPX V ucircumflex -55 +KPX V udieresis -55 +KPX V ugrave -55 +KPX V uhungarumlaut -55 +KPX V umacron -55 +KPX V uogonek -55 +KPX V uring -55 +KPX W A -74 +KPX W Aacute -74 +KPX W Abreve -74 +KPX W Acircumflex -74 +KPX W Adieresis -74 +KPX W Agrave -74 +KPX W Amacron -74 +KPX W Aogonek -74 +KPX W Aring -74 +KPX W Atilde -74 +KPX W O -15 +KPX W Oacute -15 +KPX W Ocircumflex -15 +KPX W Odieresis -15 +KPX W Ograve -15 +KPX W Ohungarumlaut -15 +KPX W Omacron -15 +KPX W Oslash -15 +KPX W Otilde -15 +KPX W a -85 +KPX W aacute -85 +KPX W abreve -85 +KPX W acircumflex -85 +KPX W adieresis -85 +KPX W agrave -85 +KPX W amacron -85 +KPX W aogonek -85 +KPX W aring -85 +KPX W atilde -85 +KPX W colon -55 +KPX W comma -74 +KPX W e -90 +KPX W eacute -90 +KPX W ecaron -90 +KPX W ecircumflex -90 +KPX W edieresis -50 +KPX W edotaccent -90 +KPX W egrave -50 +KPX W emacron -50 +KPX W eogonek -90 +KPX W hyphen -50 +KPX W i -37 +KPX W iacute -37 +KPX W iogonek -37 +KPX W o -80 +KPX W oacute -80 +KPX W ocircumflex -80 +KPX W odieresis -80 +KPX W ograve -80 +KPX W ohungarumlaut -80 +KPX W omacron -80 +KPX W oslash -80 +KPX W otilde -80 +KPX W period -74 +KPX W semicolon -55 +KPX W u -55 +KPX W uacute -55 +KPX W ucircumflex -55 +KPX W udieresis -55 +KPX W ugrave -55 +KPX W uhungarumlaut -55 +KPX W umacron -55 +KPX W uogonek -55 +KPX W uring -55 +KPX W y -55 +KPX W yacute -55 +KPX W ydieresis -55 +KPX Y A -74 +KPX Y Aacute -74 +KPX Y Abreve -74 +KPX Y Acircumflex -74 +KPX Y Adieresis -74 +KPX Y Agrave -74 +KPX Y Amacron -74 +KPX Y Aogonek -74 +KPX Y Aring -74 +KPX Y Atilde -74 +KPX Y O -25 +KPX Y Oacute -25 +KPX Y Ocircumflex -25 +KPX Y Odieresis -25 +KPX Y Ograve -25 +KPX Y Ohungarumlaut -25 +KPX Y Omacron -25 +KPX Y Oslash -25 +KPX Y Otilde -25 +KPX Y a -92 +KPX Y aacute -92 +KPX Y abreve -92 +KPX Y acircumflex -92 +KPX Y adieresis -92 +KPX Y agrave -92 +KPX Y amacron -92 +KPX Y aogonek -92 +KPX Y aring -92 +KPX Y atilde -92 +KPX Y colon -92 +KPX Y comma -92 +KPX Y e -111 +KPX Y eacute -111 +KPX Y ecaron -111 +KPX Y ecircumflex -71 +KPX Y edieresis -71 +KPX Y edotaccent -111 +KPX Y egrave -71 +KPX Y emacron -71 +KPX Y eogonek -111 +KPX Y hyphen -92 +KPX Y i -55 +KPX Y iacute -55 +KPX Y iogonek -55 +KPX Y o -111 +KPX Y oacute -111 +KPX Y ocircumflex -111 +KPX Y odieresis -111 +KPX Y ograve -111 +KPX Y ohungarumlaut -111 +KPX Y omacron -111 +KPX Y oslash -111 +KPX Y otilde -111 +KPX Y period -74 +KPX Y semicolon -92 +KPX Y u -92 +KPX Y uacute -92 +KPX Y ucircumflex -92 +KPX Y udieresis -92 +KPX Y ugrave -92 +KPX Y uhungarumlaut -92 +KPX Y umacron -92 +KPX Y uogonek -92 +KPX Y uring -92 +KPX Yacute A -74 +KPX Yacute Aacute -74 +KPX Yacute Abreve -74 +KPX Yacute Acircumflex -74 +KPX Yacute Adieresis -74 +KPX Yacute Agrave -74 +KPX Yacute Amacron -74 +KPX Yacute Aogonek -74 +KPX Yacute Aring -74 +KPX Yacute Atilde -74 +KPX Yacute O -25 +KPX Yacute Oacute -25 +KPX Yacute Ocircumflex -25 +KPX Yacute Odieresis -25 +KPX Yacute Ograve -25 +KPX Yacute Ohungarumlaut -25 +KPX Yacute Omacron -25 +KPX Yacute Oslash -25 +KPX Yacute Otilde -25 +KPX Yacute a -92 +KPX Yacute aacute -92 +KPX Yacute abreve -92 +KPX Yacute acircumflex -92 +KPX Yacute adieresis -92 +KPX Yacute agrave -92 +KPX Yacute amacron -92 +KPX Yacute aogonek -92 +KPX Yacute aring -92 +KPX Yacute atilde -92 +KPX Yacute colon -92 +KPX Yacute comma -92 +KPX Yacute e -111 +KPX Yacute eacute -111 +KPX Yacute ecaron -111 +KPX Yacute ecircumflex -71 +KPX Yacute edieresis -71 +KPX Yacute edotaccent -111 +KPX Yacute egrave -71 +KPX Yacute emacron -71 +KPX Yacute eogonek -111 +KPX Yacute hyphen -92 +KPX Yacute i -55 +KPX Yacute iacute -55 +KPX Yacute iogonek -55 +KPX Yacute o -111 +KPX Yacute oacute -111 +KPX Yacute ocircumflex -111 +KPX Yacute odieresis -111 +KPX Yacute ograve -111 +KPX Yacute ohungarumlaut -111 +KPX Yacute omacron -111 +KPX Yacute oslash -111 +KPX Yacute otilde -111 +KPX Yacute period -74 +KPX Yacute semicolon -92 +KPX Yacute u -92 +KPX Yacute uacute -92 +KPX Yacute ucircumflex -92 +KPX Yacute udieresis -92 +KPX Yacute ugrave -92 +KPX Yacute uhungarumlaut -92 +KPX Yacute umacron -92 +KPX Yacute uogonek -92 +KPX Yacute uring -92 +KPX Ydieresis A -74 +KPX Ydieresis Aacute -74 +KPX Ydieresis Abreve -74 +KPX Ydieresis Acircumflex -74 +KPX Ydieresis Adieresis -74 +KPX Ydieresis Agrave -74 +KPX Ydieresis Amacron -74 +KPX Ydieresis Aogonek -74 +KPX Ydieresis Aring -74 +KPX Ydieresis Atilde -74 +KPX Ydieresis O -25 +KPX Ydieresis Oacute -25 +KPX Ydieresis Ocircumflex -25 +KPX Ydieresis Odieresis -25 +KPX Ydieresis Ograve -25 +KPX Ydieresis Ohungarumlaut -25 +KPX Ydieresis Omacron -25 +KPX Ydieresis Oslash -25 +KPX Ydieresis Otilde -25 +KPX Ydieresis a -92 +KPX Ydieresis aacute -92 +KPX Ydieresis abreve -92 +KPX Ydieresis acircumflex -92 +KPX Ydieresis adieresis -92 +KPX Ydieresis agrave -92 +KPX Ydieresis amacron -92 +KPX Ydieresis aogonek -92 +KPX Ydieresis aring -92 +KPX Ydieresis atilde -92 +KPX Ydieresis colon -92 +KPX Ydieresis comma -92 +KPX Ydieresis e -111 +KPX Ydieresis eacute -111 +KPX Ydieresis ecaron -111 +KPX Ydieresis ecircumflex -71 +KPX Ydieresis edieresis -71 +KPX Ydieresis edotaccent -111 +KPX Ydieresis egrave -71 +KPX Ydieresis emacron -71 +KPX Ydieresis eogonek -111 +KPX Ydieresis hyphen -92 +KPX Ydieresis i -55 +KPX Ydieresis iacute -55 +KPX Ydieresis iogonek -55 +KPX Ydieresis o -111 +KPX Ydieresis oacute -111 +KPX Ydieresis ocircumflex -111 +KPX Ydieresis odieresis -111 +KPX Ydieresis ograve -111 +KPX Ydieresis ohungarumlaut -111 +KPX Ydieresis omacron -111 +KPX Ydieresis oslash -111 +KPX Ydieresis otilde -111 +KPX Ydieresis period -74 +KPX Ydieresis semicolon -92 +KPX Ydieresis u -92 +KPX Ydieresis uacute -92 +KPX Ydieresis ucircumflex -92 +KPX Ydieresis udieresis -92 +KPX Ydieresis ugrave -92 +KPX Ydieresis uhungarumlaut -92 +KPX Ydieresis umacron -92 +KPX Ydieresis uogonek -92 +KPX Ydieresis uring -92 +KPX b b -10 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX c h -10 +KPX c k -10 +KPX c kcommaaccent -10 +KPX cacute h -10 +KPX cacute k -10 +KPX cacute kcommaaccent -10 +KPX ccaron h -10 +KPX ccaron k -10 +KPX ccaron kcommaaccent -10 +KPX ccedilla h -10 +KPX ccedilla k -10 +KPX ccedilla kcommaaccent -10 +KPX comma quotedblright -95 +KPX comma quoteright -95 +KPX e b -10 +KPX eacute b -10 +KPX ecaron b -10 +KPX ecircumflex b -10 +KPX edieresis b -10 +KPX edotaccent b -10 +KPX egrave b -10 +KPX emacron b -10 +KPX eogonek b -10 +KPX f comma -10 +KPX f dotlessi -30 +KPX f e -10 +KPX f eacute -10 +KPX f edotaccent -10 +KPX f eogonek -10 +KPX f f -18 +KPX f o -10 +KPX f oacute -10 +KPX f ocircumflex -10 +KPX f ograve -10 +KPX f ohungarumlaut -10 +KPX f oslash -10 +KPX f otilde -10 +KPX f period -10 +KPX f quoteright 55 +KPX k e -30 +KPX k eacute -30 +KPX k ecaron -30 +KPX k ecircumflex -30 +KPX k edieresis -30 +KPX k edotaccent -30 +KPX k egrave -30 +KPX k emacron -30 +KPX k eogonek -30 +KPX k o -10 +KPX k oacute -10 +KPX k ocircumflex -10 +KPX k odieresis -10 +KPX k ograve -10 +KPX k ohungarumlaut -10 +KPX k omacron -10 +KPX k oslash -10 +KPX k otilde -10 +KPX kcommaaccent e -30 +KPX kcommaaccent eacute -30 +KPX kcommaaccent ecaron -30 +KPX kcommaaccent ecircumflex -30 +KPX kcommaaccent edieresis -30 +KPX kcommaaccent edotaccent -30 +KPX kcommaaccent egrave -30 +KPX kcommaaccent emacron -30 +KPX kcommaaccent eogonek -30 +KPX kcommaaccent o -10 +KPX kcommaaccent oacute -10 +KPX kcommaaccent ocircumflex -10 +KPX kcommaaccent odieresis -10 +KPX kcommaaccent ograve -10 +KPX kcommaaccent ohungarumlaut -10 +KPX kcommaaccent omacron -10 +KPX kcommaaccent oslash -10 +KPX kcommaaccent otilde -10 +KPX n v -40 +KPX nacute v -40 +KPX ncaron v -40 +KPX ncommaaccent v -40 +KPX ntilde v -40 +KPX o v -15 +KPX o w -25 +KPX o x -10 +KPX o y -10 +KPX o yacute -10 +KPX o ydieresis -10 +KPX oacute v -15 +KPX oacute w -25 +KPX oacute x -10 +KPX oacute y -10 +KPX oacute yacute -10 +KPX oacute ydieresis -10 +KPX ocircumflex v -15 +KPX ocircumflex w -25 +KPX ocircumflex x -10 +KPX ocircumflex y -10 +KPX ocircumflex yacute -10 +KPX ocircumflex ydieresis -10 +KPX odieresis v -15 +KPX odieresis w -25 +KPX odieresis x -10 +KPX odieresis y -10 +KPX odieresis yacute -10 +KPX odieresis ydieresis -10 +KPX ograve v -15 +KPX ograve w -25 +KPX ograve x -10 +KPX ograve y -10 +KPX ograve yacute -10 +KPX ograve ydieresis -10 +KPX ohungarumlaut v -15 +KPX ohungarumlaut w -25 +KPX ohungarumlaut x -10 +KPX ohungarumlaut y -10 +KPX ohungarumlaut yacute -10 +KPX ohungarumlaut ydieresis -10 +KPX omacron v -15 +KPX omacron w -25 +KPX omacron x -10 +KPX omacron y -10 +KPX omacron yacute -10 +KPX omacron ydieresis -10 +KPX oslash v -15 +KPX oslash w -25 +KPX oslash x -10 +KPX oslash y -10 +KPX oslash yacute -10 +KPX oslash ydieresis -10 +KPX otilde v -15 +KPX otilde w -25 +KPX otilde x -10 +KPX otilde y -10 +KPX otilde yacute -10 +KPX otilde ydieresis -10 +KPX period quotedblright -95 +KPX period quoteright -95 +KPX quoteleft quoteleft -74 +KPX quoteright d -15 +KPX quoteright dcroat -15 +KPX quoteright quoteright -74 +KPX quoteright r -15 +KPX quoteright racute -15 +KPX quoteright rcaron -15 +KPX quoteright rcommaaccent -15 +KPX quoteright s -74 +KPX quoteright sacute -74 +KPX quoteright scaron -74 +KPX quoteright scedilla -74 +KPX quoteright scommaaccent -74 +KPX quoteright space -74 +KPX quoteright t -37 +KPX quoteright tcommaaccent -37 +KPX quoteright v -15 +KPX r comma -65 +KPX r period -65 +KPX racute comma -65 +KPX racute period -65 +KPX rcaron comma -65 +KPX rcaron period -65 +KPX rcommaaccent comma -65 +KPX rcommaaccent period -65 +KPX space A -37 +KPX space Aacute -37 +KPX space Abreve -37 +KPX space Acircumflex -37 +KPX space Adieresis -37 +KPX space Agrave -37 +KPX space Amacron -37 +KPX space Aogonek -37 +KPX space Aring -37 +KPX space Atilde -37 +KPX space V -70 +KPX space W -70 +KPX space Y -70 +KPX space Yacute -70 +KPX space Ydieresis -70 +KPX v comma -37 +KPX v e -15 +KPX v eacute -15 +KPX v ecaron -15 +KPX v ecircumflex -15 +KPX v edieresis -15 +KPX v edotaccent -15 +KPX v egrave -15 +KPX v emacron -15 +KPX v eogonek -15 +KPX v o -15 +KPX v oacute -15 +KPX v ocircumflex -15 +KPX v odieresis -15 +KPX v ograve -15 +KPX v ohungarumlaut -15 +KPX v omacron -15 +KPX v oslash -15 +KPX v otilde -15 +KPX v period -37 +KPX w a -10 +KPX w aacute -10 +KPX w abreve -10 +KPX w acircumflex -10 +KPX w adieresis -10 +KPX w agrave -10 +KPX w amacron -10 +KPX w aogonek -10 +KPX w aring -10 +KPX w atilde -10 +KPX w comma -37 +KPX w e -10 +KPX w eacute -10 +KPX w ecaron -10 +KPX w ecircumflex -10 +KPX w edieresis -10 +KPX w edotaccent -10 +KPX w egrave -10 +KPX w emacron -10 +KPX w eogonek -10 +KPX w o -15 +KPX w oacute -15 +KPX w ocircumflex -15 +KPX w odieresis -15 +KPX w ograve -15 +KPX w ohungarumlaut -15 +KPX w omacron -15 +KPX w oslash -15 +KPX w otilde -15 +KPX w period -37 +KPX x e -10 +KPX x eacute -10 +KPX x ecaron -10 +KPX x ecircumflex -10 +KPX x edieresis -10 +KPX x edotaccent -10 +KPX x egrave -10 +KPX x emacron -10 +KPX x eogonek -10 +KPX y comma -37 +KPX y period -37 +KPX yacute comma -37 +KPX yacute period -37 +KPX ydieresis comma -37 +KPX ydieresis period -37 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-Italic.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-Italic.afm new file mode 100644 index 000000000..b0eaee40f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-Italic.afm @@ -0,0 +1,2667 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:56:55 1997 +Comment UniqueID 43067 +Comment VMusage 47727 58752 +FontName Times-Italic +FullName Times Italic +FamilyName Times +Weight Medium +ItalicAngle -15.5 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -169 -217 1010 883 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 653 +XHeight 441 +Ascender 683 +Descender -217 +StdHW 32 +StdVW 76 +StartCharMetrics 315 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 39 -11 302 667 ; +C 34 ; WX 420 ; N quotedbl ; B 144 421 432 666 ; +C 35 ; WX 500 ; N numbersign ; B 2 0 540 676 ; +C 36 ; WX 500 ; N dollar ; B 31 -89 497 731 ; +C 37 ; WX 833 ; N percent ; B 79 -13 790 676 ; +C 38 ; WX 778 ; N ampersand ; B 76 -18 723 666 ; +C 39 ; WX 333 ; N quoteright ; B 151 436 290 666 ; +C 40 ; WX 333 ; N parenleft ; B 42 -181 315 669 ; +C 41 ; WX 333 ; N parenright ; B 16 -180 289 669 ; +C 42 ; WX 500 ; N asterisk ; B 128 255 492 666 ; +C 43 ; WX 675 ; N plus ; B 86 0 590 506 ; +C 44 ; WX 250 ; N comma ; B -4 -129 135 101 ; +C 45 ; WX 333 ; N hyphen ; B 49 192 282 255 ; +C 46 ; WX 250 ; N period ; B 27 -11 138 100 ; +C 47 ; WX 278 ; N slash ; B -65 -18 386 666 ; +C 48 ; WX 500 ; N zero ; B 32 -7 497 676 ; +C 49 ; WX 500 ; N one ; B 49 0 409 676 ; +C 50 ; WX 500 ; N two ; B 12 0 452 676 ; +C 51 ; WX 500 ; N three ; B 15 -7 465 676 ; +C 52 ; WX 500 ; N four ; B 1 0 479 676 ; +C 53 ; WX 500 ; N five ; B 15 -7 491 666 ; +C 54 ; WX 500 ; N six ; B 30 -7 521 686 ; +C 55 ; WX 500 ; N seven ; B 75 -8 537 666 ; +C 56 ; WX 500 ; N eight ; B 30 -7 493 676 ; +C 57 ; WX 500 ; N nine ; B 23 -17 492 676 ; +C 58 ; WX 333 ; N colon ; B 50 -11 261 441 ; +C 59 ; WX 333 ; N semicolon ; B 27 -129 261 441 ; +C 60 ; WX 675 ; N less ; B 84 -8 592 514 ; +C 61 ; WX 675 ; N equal ; B 86 120 590 386 ; +C 62 ; WX 675 ; N greater ; B 84 -8 592 514 ; +C 63 ; WX 500 ; N question ; B 132 -12 472 664 ; +C 64 ; WX 920 ; N at ; B 118 -18 806 666 ; +C 65 ; WX 611 ; N A ; B -51 0 564 668 ; +C 66 ; WX 611 ; N B ; B -8 0 588 653 ; +C 67 ; WX 667 ; N C ; B 66 -18 689 666 ; +C 68 ; WX 722 ; N D ; B -8 0 700 653 ; +C 69 ; WX 611 ; N E ; B -1 0 634 653 ; +C 70 ; WX 611 ; N F ; B 8 0 645 653 ; +C 71 ; WX 722 ; N G ; B 52 -18 722 666 ; +C 72 ; WX 722 ; N H ; B -8 0 767 653 ; +C 73 ; WX 333 ; N I ; B -8 0 384 653 ; +C 74 ; WX 444 ; N J ; B -6 -18 491 653 ; +C 75 ; WX 667 ; N K ; B 7 0 722 653 ; +C 76 ; WX 556 ; N L ; B -8 0 559 653 ; +C 77 ; WX 833 ; N M ; B -18 0 873 653 ; +C 78 ; WX 667 ; N N ; B -20 -15 727 653 ; +C 79 ; WX 722 ; N O ; B 60 -18 699 666 ; +C 80 ; WX 611 ; N P ; B 0 0 605 653 ; +C 81 ; WX 722 ; N Q ; B 59 -182 699 666 ; +C 82 ; WX 611 ; N R ; B -13 0 588 653 ; +C 83 ; WX 500 ; N S ; B 17 -18 508 667 ; +C 84 ; WX 556 ; N T ; B 59 0 633 653 ; +C 85 ; WX 722 ; N U ; B 102 -18 765 653 ; +C 86 ; WX 611 ; N V ; B 76 -18 688 653 ; +C 87 ; WX 833 ; N W ; B 71 -18 906 653 ; +C 88 ; WX 611 ; N X ; B -29 0 655 653 ; +C 89 ; WX 556 ; N Y ; B 78 0 633 653 ; +C 90 ; WX 556 ; N Z ; B -6 0 606 653 ; +C 91 ; WX 389 ; N bracketleft ; B 21 -153 391 663 ; +C 92 ; WX 278 ; N backslash ; B -41 -18 319 666 ; +C 93 ; WX 389 ; N bracketright ; B 12 -153 382 663 ; +C 94 ; WX 422 ; N asciicircum ; B 0 301 422 666 ; +C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; +C 96 ; WX 333 ; N quoteleft ; B 171 436 310 666 ; +C 97 ; WX 500 ; N a ; B 17 -11 476 441 ; +C 98 ; WX 500 ; N b ; B 23 -11 473 683 ; +C 99 ; WX 444 ; N c ; B 30 -11 425 441 ; +C 100 ; WX 500 ; N d ; B 15 -13 527 683 ; +C 101 ; WX 444 ; N e ; B 31 -11 412 441 ; +C 102 ; WX 278 ; N f ; B -147 -207 424 678 ; L i fi ; L l fl ; +C 103 ; WX 500 ; N g ; B 8 -206 472 441 ; +C 104 ; WX 500 ; N h ; B 19 -9 478 683 ; +C 105 ; WX 278 ; N i ; B 49 -11 264 654 ; +C 106 ; WX 278 ; N j ; B -124 -207 276 654 ; +C 107 ; WX 444 ; N k ; B 14 -11 461 683 ; +C 108 ; WX 278 ; N l ; B 41 -11 279 683 ; +C 109 ; WX 722 ; N m ; B 12 -9 704 441 ; +C 110 ; WX 500 ; N n ; B 14 -9 474 441 ; +C 111 ; WX 500 ; N o ; B 27 -11 468 441 ; +C 112 ; WX 500 ; N p ; B -75 -205 469 441 ; +C 113 ; WX 500 ; N q ; B 25 -209 483 441 ; +C 114 ; WX 389 ; N r ; B 45 0 412 441 ; +C 115 ; WX 389 ; N s ; B 16 -13 366 442 ; +C 116 ; WX 278 ; N t ; B 37 -11 296 546 ; +C 117 ; WX 500 ; N u ; B 42 -11 475 441 ; +C 118 ; WX 444 ; N v ; B 21 -18 426 441 ; +C 119 ; WX 667 ; N w ; B 16 -18 648 441 ; +C 120 ; WX 444 ; N x ; B -27 -11 447 441 ; +C 121 ; WX 444 ; N y ; B -24 -206 426 441 ; +C 122 ; WX 389 ; N z ; B -2 -81 380 428 ; +C 123 ; WX 400 ; N braceleft ; B 51 -177 407 687 ; +C 124 ; WX 275 ; N bar ; B 105 -217 171 783 ; +C 125 ; WX 400 ; N braceright ; B -7 -177 349 687 ; +C 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ; +C 161 ; WX 389 ; N exclamdown ; B 59 -205 322 473 ; +C 162 ; WX 500 ; N cent ; B 77 -143 472 560 ; +C 163 ; WX 500 ; N sterling ; B 10 -6 517 670 ; +C 164 ; WX 167 ; N fraction ; B -169 -10 337 676 ; +C 165 ; WX 500 ; N yen ; B 27 0 603 653 ; +C 166 ; WX 500 ; N florin ; B 25 -182 507 682 ; +C 167 ; WX 500 ; N section ; B 53 -162 461 666 ; +C 168 ; WX 500 ; N currency ; B -22 53 522 597 ; +C 169 ; WX 214 ; N quotesingle ; B 132 421 241 666 ; +C 170 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ; +C 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ; +C 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ; +C 173 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ; +C 174 ; WX 500 ; N fi ; B -141 -207 481 681 ; +C 175 ; WX 500 ; N fl ; B -141 -204 518 682 ; +C 177 ; WX 500 ; N endash ; B -6 197 505 243 ; +C 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ; +C 179 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ; +C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; +C 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ; +C 183 ; WX 350 ; N bullet ; B 40 191 310 461 ; +C 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ; +C 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ; +C 186 ; WX 556 ; N quotedblright ; B 151 436 499 666 ; +C 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ; +C 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ; +C 189 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ; +C 191 ; WX 500 ; N questiondown ; B 28 -205 368 471 ; +C 193 ; WX 333 ; N grave ; B 121 492 311 664 ; +C 194 ; WX 333 ; N acute ; B 180 494 403 664 ; +C 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ; +C 196 ; WX 333 ; N tilde ; B 100 517 427 624 ; +C 197 ; WX 333 ; N macron ; B 99 532 411 583 ; +C 198 ; WX 333 ; N breve ; B 117 492 418 650 ; +C 199 ; WX 333 ; N dotaccent ; B 207 548 305 646 ; +C 200 ; WX 333 ; N dieresis ; B 107 548 405 646 ; +C 202 ; WX 333 ; N ring ; B 155 492 355 691 ; +C 203 ; WX 333 ; N cedilla ; B -30 -217 182 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ; +C 206 ; WX 333 ; N ogonek ; B 20 -169 203 40 ; +C 207 ; WX 333 ; N caron ; B 121 492 426 661 ; +C 208 ; WX 889 ; N emdash ; B -6 197 894 243 ; +C 225 ; WX 889 ; N AE ; B -27 0 911 653 ; +C 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ; +C 232 ; WX 556 ; N Lslash ; B -8 0 559 653 ; +C 233 ; WX 722 ; N Oslash ; B 60 -105 699 722 ; +C 234 ; WX 944 ; N OE ; B 49 -8 964 666 ; +C 235 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ; +C 241 ; WX 667 ; N ae ; B 23 -11 640 441 ; +C 245 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ; +C 248 ; WX 278 ; N lslash ; B 41 -11 312 683 ; +C 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ; +C 250 ; WX 667 ; N oe ; B 20 -12 646 441 ; +C 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ; +C -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ; +C -1 ; WX 444 ; N eacute ; B 31 -11 459 664 ; +C -1 ; WX 500 ; N abreve ; B 17 -11 502 650 ; +C -1 ; WX 500 ; N uhungarumlaut ; B 42 -11 580 664 ; +C -1 ; WX 444 ; N ecaron ; B 31 -11 482 661 ; +C -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ; +C -1 ; WX 675 ; N divide ; B 86 -11 590 517 ; +C -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ; +C -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ; +C -1 ; WX 500 ; N aacute ; B 17 -11 487 664 ; +C -1 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ; +C -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ; +C -1 ; WX 389 ; N scommaaccent ; B 16 -217 366 442 ; +C -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ; +C -1 ; WX 722 ; N Uring ; B 102 -18 765 883 ; +C -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ; +C -1 ; WX 500 ; N aogonek ; B 17 -169 476 441 ; +C -1 ; WX 722 ; N Uacute ; B 102 -18 765 876 ; +C -1 ; WX 500 ; N uogonek ; B 42 -169 477 441 ; +C -1 ; WX 611 ; N Edieresis ; B -1 0 634 818 ; +C -1 ; WX 722 ; N Dcroat ; B -8 0 700 653 ; +C -1 ; WX 250 ; N commaaccent ; B 8 -217 133 -50 ; +C -1 ; WX 760 ; N copyright ; B 41 -18 719 666 ; +C -1 ; WX 611 ; N Emacron ; B -1 0 634 795 ; +C -1 ; WX 444 ; N ccaron ; B 30 -11 482 661 ; +C -1 ; WX 500 ; N aring ; B 17 -11 476 691 ; +C -1 ; WX 667 ; N Ncommaaccent ; B -20 -187 727 653 ; +C -1 ; WX 278 ; N lacute ; B 41 -11 395 876 ; +C -1 ; WX 500 ; N agrave ; B 17 -11 476 664 ; +C -1 ; WX 556 ; N Tcommaaccent ; B 59 -217 633 653 ; +C -1 ; WX 667 ; N Cacute ; B 66 -18 690 876 ; +C -1 ; WX 500 ; N atilde ; B 17 -11 511 624 ; +C -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ; +C -1 ; WX 389 ; N scaron ; B 16 -13 454 661 ; +C -1 ; WX 389 ; N scedilla ; B 16 -217 366 442 ; +C -1 ; WX 278 ; N iacute ; B 49 -11 355 664 ; +C -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ; +C -1 ; WX 611 ; N Rcaron ; B -13 0 588 873 ; +C -1 ; WX 722 ; N Gcommaaccent ; B 52 -217 722 666 ; +C -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ; +C -1 ; WX 500 ; N acircumflex ; B 17 -11 476 661 ; +C -1 ; WX 611 ; N Amacron ; B -51 0 564 795 ; +C -1 ; WX 389 ; N rcaron ; B 45 0 434 661 ; +C -1 ; WX 444 ; N ccedilla ; B 30 -217 425 441 ; +C -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ; +C -1 ; WX 611 ; N Thorn ; B 0 0 569 653 ; +C -1 ; WX 722 ; N Omacron ; B 60 -18 699 795 ; +C -1 ; WX 611 ; N Racute ; B -13 0 588 876 ; +C -1 ; WX 500 ; N Sacute ; B 17 -18 508 876 ; +C -1 ; WX 544 ; N dcaron ; B 15 -13 658 683 ; +C -1 ; WX 722 ; N Umacron ; B 102 -18 765 795 ; +C -1 ; WX 500 ; N uring ; B 42 -11 475 691 ; +C -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 ; +C -1 ; WX 722 ; N Ograve ; B 60 -18 699 876 ; +C -1 ; WX 611 ; N Agrave ; B -51 0 564 876 ; +C -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ; +C -1 ; WX 675 ; N multiply ; B 93 8 582 497 ; +C -1 ; WX 500 ; N uacute ; B 42 -11 477 664 ; +C -1 ; WX 556 ; N Tcaron ; B 59 0 633 873 ; +C -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ; +C -1 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ; +C -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ; +C -1 ; WX 278 ; N icircumflex ; B 33 -11 327 661 ; +C -1 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ; +C -1 ; WX 500 ; N adieresis ; B 17 -11 489 606 ; +C -1 ; WX 444 ; N edieresis ; B 31 -11 451 606 ; +C -1 ; WX 444 ; N cacute ; B 30 -11 459 664 ; +C -1 ; WX 500 ; N nacute ; B 14 -9 477 664 ; +C -1 ; WX 500 ; N umacron ; B 42 -11 485 583 ; +C -1 ; WX 667 ; N Ncaron ; B -20 -15 727 873 ; +C -1 ; WX 333 ; N Iacute ; B -8 0 433 876 ; +C -1 ; WX 675 ; N plusminus ; B 86 0 590 506 ; +C -1 ; WX 275 ; N brokenbar ; B 105 -142 171 708 ; +C -1 ; WX 760 ; N registered ; B 41 -18 719 666 ; +C -1 ; WX 722 ; N Gbreve ; B 52 -18 722 862 ; +C -1 ; WX 333 ; N Idotaccent ; B -8 0 384 818 ; +C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ; +C -1 ; WX 611 ; N Egrave ; B -1 0 634 876 ; +C -1 ; WX 389 ; N racute ; B 45 0 431 664 ; +C -1 ; WX 500 ; N omacron ; B 27 -11 495 583 ; +C -1 ; WX 556 ; N Zacute ; B -6 0 606 876 ; +C -1 ; WX 556 ; N Zcaron ; B -6 0 606 873 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 658 ; +C -1 ; WX 722 ; N Eth ; B -8 0 700 653 ; +C -1 ; WX 667 ; N Ccedilla ; B 66 -217 689 666 ; +C -1 ; WX 278 ; N lcommaaccent ; B 22 -217 279 683 ; +C -1 ; WX 300 ; N tcaron ; B 37 -11 407 681 ; +C -1 ; WX 444 ; N eogonek ; B 31 -169 412 441 ; +C -1 ; WX 722 ; N Uogonek ; B 102 -184 765 653 ; +C -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ; +C -1 ; WX 611 ; N Adieresis ; B -51 0 564 818 ; +C -1 ; WX 444 ; N egrave ; B 31 -11 412 664 ; +C -1 ; WX 389 ; N zacute ; B -2 -81 431 664 ; +C -1 ; WX 278 ; N iogonek ; B 49 -169 264 654 ; +C -1 ; WX 722 ; N Oacute ; B 60 -18 699 876 ; +C -1 ; WX 500 ; N oacute ; B 27 -11 487 664 ; +C -1 ; WX 500 ; N amacron ; B 17 -11 495 583 ; +C -1 ; WX 389 ; N sacute ; B 16 -13 431 664 ; +C -1 ; WX 278 ; N idieresis ; B 49 -11 352 606 ; +C -1 ; WX 722 ; N Ocircumflex ; B 60 -18 699 873 ; +C -1 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 500 ; N thorn ; B -75 -205 469 683 ; +C -1 ; WX 300 ; N twosuperior ; B 33 271 324 676 ; +C -1 ; WX 722 ; N Odieresis ; B 60 -18 699 818 ; +C -1 ; WX 500 ; N mu ; B -30 -209 497 428 ; +C -1 ; WX 278 ; N igrave ; B 49 -11 284 664 ; +C -1 ; WX 500 ; N ohungarumlaut ; B 27 -11 590 664 ; +C -1 ; WX 611 ; N Eogonek ; B -1 -169 634 653 ; +C -1 ; WX 500 ; N dcroat ; B 15 -13 572 683 ; +C -1 ; WX 750 ; N threequarters ; B 23 -10 736 676 ; +C -1 ; WX 500 ; N Scedilla ; B 17 -217 508 667 ; +C -1 ; WX 300 ; N lcaron ; B 41 -11 407 683 ; +C -1 ; WX 667 ; N Kcommaaccent ; B 7 -217 722 653 ; +C -1 ; WX 556 ; N Lacute ; B -8 0 559 876 ; +C -1 ; WX 980 ; N trademark ; B 30 247 957 653 ; +C -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ; +C -1 ; WX 333 ; N Igrave ; B -8 0 384 876 ; +C -1 ; WX 333 ; N Imacron ; B -8 0 441 795 ; +C -1 ; WX 611 ; N Lcaron ; B -8 0 586 653 ; +C -1 ; WX 750 ; N onehalf ; B 34 -10 749 676 ; +C -1 ; WX 549 ; N lessequal ; B 26 0 523 658 ; +C -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ; +C -1 ; WX 500 ; N ntilde ; B 14 -9 476 624 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ; +C -1 ; WX 611 ; N Eacute ; B -1 0 634 876 ; +C -1 ; WX 444 ; N emacron ; B 31 -11 457 583 ; +C -1 ; WX 500 ; N gbreve ; B 8 -206 487 650 ; +C -1 ; WX 750 ; N onequarter ; B 33 -10 736 676 ; +C -1 ; WX 500 ; N Scaron ; B 17 -18 520 873 ; +C -1 ; WX 500 ; N Scommaaccent ; B 17 -217 508 667 ; +C -1 ; WX 722 ; N Ohungarumlaut ; B 60 -18 699 876 ; +C -1 ; WX 400 ; N degree ; B 101 390 387 676 ; +C -1 ; WX 500 ; N ograve ; B 27 -11 468 664 ; +C -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ; +C -1 ; WX 500 ; N ugrave ; B 42 -11 475 664 ; +C -1 ; WX 453 ; N radical ; B 2 -60 452 768 ; +C -1 ; WX 722 ; N Dcaron ; B -8 0 700 873 ; +C -1 ; WX 389 ; N rcommaaccent ; B -3 -217 412 441 ; +C -1 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ; +C -1 ; WX 500 ; N otilde ; B 27 -11 496 624 ; +C -1 ; WX 611 ; N Rcommaaccent ; B -13 -187 588 653 ; +C -1 ; WX 556 ; N Lcommaaccent ; B -8 -217 559 653 ; +C -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ; +C -1 ; WX 611 ; N Aogonek ; B -51 -169 566 668 ; +C -1 ; WX 611 ; N Aring ; B -51 0 564 883 ; +C -1 ; WX 722 ; N Otilde ; B 60 -18 699 836 ; +C -1 ; WX 389 ; N zdotaccent ; B -2 -81 380 606 ; +C -1 ; WX 611 ; N Ecaron ; B -1 0 634 873 ; +C -1 ; WX 333 ; N Iogonek ; B -8 -169 384 653 ; +C -1 ; WX 444 ; N kcommaaccent ; B 14 -187 461 683 ; +C -1 ; WX 675 ; N minus ; B 86 220 590 286 ; +C -1 ; WX 333 ; N Icircumflex ; B -8 0 425 873 ; +C -1 ; WX 500 ; N ncaron ; B 14 -9 510 661 ; +C -1 ; WX 278 ; N tcommaaccent ; B 2 -217 296 546 ; +C -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ; +C -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ; +C -1 ; WX 500 ; N udieresis ; B 42 -11 479 606 ; +C -1 ; WX 549 ; N notequal ; B 12 -29 537 541 ; +C -1 ; WX 500 ; N gcommaaccent ; B 8 -206 472 706 ; +C -1 ; WX 500 ; N eth ; B 27 -11 482 683 ; +C -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ; +C -1 ; WX 500 ; N ncommaaccent ; B 14 -187 474 441 ; +C -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ; +C -1 ; WX 278 ; N imacron ; B 46 -11 311 583 ; +C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2321 +KPX A C -30 +KPX A Cacute -30 +KPX A Ccaron -30 +KPX A Ccedilla -30 +KPX A G -35 +KPX A Gbreve -35 +KPX A Gcommaaccent -35 +KPX A O -40 +KPX A Oacute -40 +KPX A Ocircumflex -40 +KPX A Odieresis -40 +KPX A Ograve -40 +KPX A Ohungarumlaut -40 +KPX A Omacron -40 +KPX A Oslash -40 +KPX A Otilde -40 +KPX A Q -40 +KPX A T -37 +KPX A Tcaron -37 +KPX A Tcommaaccent -37 +KPX A U -50 +KPX A Uacute -50 +KPX A Ucircumflex -50 +KPX A Udieresis -50 +KPX A Ugrave -50 +KPX A Uhungarumlaut -50 +KPX A Umacron -50 +KPX A Uogonek -50 +KPX A Uring -50 +KPX A V -105 +KPX A W -95 +KPX A Y -55 +KPX A Yacute -55 +KPX A Ydieresis -55 +KPX A quoteright -37 +KPX A u -20 +KPX A uacute -20 +KPX A ucircumflex -20 +KPX A udieresis -20 +KPX A ugrave -20 +KPX A uhungarumlaut -20 +KPX A umacron -20 +KPX A uogonek -20 +KPX A uring -20 +KPX A v -55 +KPX A w -55 +KPX A y -55 +KPX A yacute -55 +KPX A ydieresis -55 +KPX Aacute C -30 +KPX Aacute Cacute -30 +KPX Aacute Ccaron -30 +KPX Aacute Ccedilla -30 +KPX Aacute G -35 +KPX Aacute Gbreve -35 +KPX Aacute Gcommaaccent -35 +KPX Aacute O -40 +KPX Aacute Oacute -40 +KPX Aacute Ocircumflex -40 +KPX Aacute Odieresis -40 +KPX Aacute Ograve -40 +KPX Aacute Ohungarumlaut -40 +KPX Aacute Omacron -40 +KPX Aacute Oslash -40 +KPX Aacute Otilde -40 +KPX Aacute Q -40 +KPX Aacute T -37 +KPX Aacute Tcaron -37 +KPX Aacute Tcommaaccent -37 +KPX Aacute U -50 +KPX Aacute Uacute -50 +KPX Aacute Ucircumflex -50 +KPX Aacute Udieresis -50 +KPX Aacute Ugrave -50 +KPX Aacute Uhungarumlaut -50 +KPX Aacute Umacron -50 +KPX Aacute Uogonek -50 +KPX Aacute Uring -50 +KPX Aacute V -105 +KPX Aacute W -95 +KPX Aacute Y -55 +KPX Aacute Yacute -55 +KPX Aacute Ydieresis -55 +KPX Aacute quoteright -37 +KPX Aacute u -20 +KPX Aacute uacute -20 +KPX Aacute ucircumflex -20 +KPX Aacute udieresis -20 +KPX Aacute ugrave -20 +KPX Aacute uhungarumlaut -20 +KPX Aacute umacron -20 +KPX Aacute uogonek -20 +KPX Aacute uring -20 +KPX Aacute v -55 +KPX Aacute w -55 +KPX Aacute y -55 +KPX Aacute yacute -55 +KPX Aacute ydieresis -55 +KPX Abreve C -30 +KPX Abreve Cacute -30 +KPX Abreve Ccaron -30 +KPX Abreve Ccedilla -30 +KPX Abreve G -35 +KPX Abreve Gbreve -35 +KPX Abreve Gcommaaccent -35 +KPX Abreve O -40 +KPX Abreve Oacute -40 +KPX Abreve Ocircumflex -40 +KPX Abreve Odieresis -40 +KPX Abreve Ograve -40 +KPX Abreve Ohungarumlaut -40 +KPX Abreve Omacron -40 +KPX Abreve Oslash -40 +KPX Abreve Otilde -40 +KPX Abreve Q -40 +KPX Abreve T -37 +KPX Abreve Tcaron -37 +KPX Abreve Tcommaaccent -37 +KPX Abreve U -50 +KPX Abreve Uacute -50 +KPX Abreve Ucircumflex -50 +KPX Abreve Udieresis -50 +KPX Abreve Ugrave -50 +KPX Abreve Uhungarumlaut -50 +KPX Abreve Umacron -50 +KPX Abreve Uogonek -50 +KPX Abreve Uring -50 +KPX Abreve V -105 +KPX Abreve W -95 +KPX Abreve Y -55 +KPX Abreve Yacute -55 +KPX Abreve Ydieresis -55 +KPX Abreve quoteright -37 +KPX Abreve u -20 +KPX Abreve uacute -20 +KPX Abreve ucircumflex -20 +KPX Abreve udieresis -20 +KPX Abreve ugrave -20 +KPX Abreve uhungarumlaut -20 +KPX Abreve umacron -20 +KPX Abreve uogonek -20 +KPX Abreve uring -20 +KPX Abreve v -55 +KPX Abreve w -55 +KPX Abreve y -55 +KPX Abreve yacute -55 +KPX Abreve ydieresis -55 +KPX Acircumflex C -30 +KPX Acircumflex Cacute -30 +KPX Acircumflex Ccaron -30 +KPX Acircumflex Ccedilla -30 +KPX Acircumflex G -35 +KPX Acircumflex Gbreve -35 +KPX Acircumflex Gcommaaccent -35 +KPX Acircumflex O -40 +KPX Acircumflex Oacute -40 +KPX Acircumflex Ocircumflex -40 +KPX Acircumflex Odieresis -40 +KPX Acircumflex Ograve -40 +KPX Acircumflex Ohungarumlaut -40 +KPX Acircumflex Omacron -40 +KPX Acircumflex Oslash -40 +KPX Acircumflex Otilde -40 +KPX Acircumflex Q -40 +KPX Acircumflex T -37 +KPX Acircumflex Tcaron -37 +KPX Acircumflex Tcommaaccent -37 +KPX Acircumflex U -50 +KPX Acircumflex Uacute -50 +KPX Acircumflex Ucircumflex -50 +KPX Acircumflex Udieresis -50 +KPX Acircumflex Ugrave -50 +KPX Acircumflex Uhungarumlaut -50 +KPX Acircumflex Umacron -50 +KPX Acircumflex Uogonek -50 +KPX Acircumflex Uring -50 +KPX Acircumflex V -105 +KPX Acircumflex W -95 +KPX Acircumflex Y -55 +KPX Acircumflex Yacute -55 +KPX Acircumflex Ydieresis -55 +KPX Acircumflex quoteright -37 +KPX Acircumflex u -20 +KPX Acircumflex uacute -20 +KPX Acircumflex ucircumflex -20 +KPX Acircumflex udieresis -20 +KPX Acircumflex ugrave -20 +KPX Acircumflex uhungarumlaut -20 +KPX Acircumflex umacron -20 +KPX Acircumflex uogonek -20 +KPX Acircumflex uring -20 +KPX Acircumflex v -55 +KPX Acircumflex w -55 +KPX Acircumflex y -55 +KPX Acircumflex yacute -55 +KPX Acircumflex ydieresis -55 +KPX Adieresis C -30 +KPX Adieresis Cacute -30 +KPX Adieresis Ccaron -30 +KPX Adieresis Ccedilla -30 +KPX Adieresis G -35 +KPX Adieresis Gbreve -35 +KPX Adieresis Gcommaaccent -35 +KPX Adieresis O -40 +KPX Adieresis Oacute -40 +KPX Adieresis Ocircumflex -40 +KPX Adieresis Odieresis -40 +KPX Adieresis Ograve -40 +KPX Adieresis Ohungarumlaut -40 +KPX Adieresis Omacron -40 +KPX Adieresis Oslash -40 +KPX Adieresis Otilde -40 +KPX Adieresis Q -40 +KPX Adieresis T -37 +KPX Adieresis Tcaron -37 +KPX Adieresis Tcommaaccent -37 +KPX Adieresis U -50 +KPX Adieresis Uacute -50 +KPX Adieresis Ucircumflex -50 +KPX Adieresis Udieresis -50 +KPX Adieresis Ugrave -50 +KPX Adieresis Uhungarumlaut -50 +KPX Adieresis Umacron -50 +KPX Adieresis Uogonek -50 +KPX Adieresis Uring -50 +KPX Adieresis V -105 +KPX Adieresis W -95 +KPX Adieresis Y -55 +KPX Adieresis Yacute -55 +KPX Adieresis Ydieresis -55 +KPX Adieresis quoteright -37 +KPX Adieresis u -20 +KPX Adieresis uacute -20 +KPX Adieresis ucircumflex -20 +KPX Adieresis udieresis -20 +KPX Adieresis ugrave -20 +KPX Adieresis uhungarumlaut -20 +KPX Adieresis umacron -20 +KPX Adieresis uogonek -20 +KPX Adieresis uring -20 +KPX Adieresis v -55 +KPX Adieresis w -55 +KPX Adieresis y -55 +KPX Adieresis yacute -55 +KPX Adieresis ydieresis -55 +KPX Agrave C -30 +KPX Agrave Cacute -30 +KPX Agrave Ccaron -30 +KPX Agrave Ccedilla -30 +KPX Agrave G -35 +KPX Agrave Gbreve -35 +KPX Agrave Gcommaaccent -35 +KPX Agrave O -40 +KPX Agrave Oacute -40 +KPX Agrave Ocircumflex -40 +KPX Agrave Odieresis -40 +KPX Agrave Ograve -40 +KPX Agrave Ohungarumlaut -40 +KPX Agrave Omacron -40 +KPX Agrave Oslash -40 +KPX Agrave Otilde -40 +KPX Agrave Q -40 +KPX Agrave T -37 +KPX Agrave Tcaron -37 +KPX Agrave Tcommaaccent -37 +KPX Agrave U -50 +KPX Agrave Uacute -50 +KPX Agrave Ucircumflex -50 +KPX Agrave Udieresis -50 +KPX Agrave Ugrave -50 +KPX Agrave Uhungarumlaut -50 +KPX Agrave Umacron -50 +KPX Agrave Uogonek -50 +KPX Agrave Uring -50 +KPX Agrave V -105 +KPX Agrave W -95 +KPX Agrave Y -55 +KPX Agrave Yacute -55 +KPX Agrave Ydieresis -55 +KPX Agrave quoteright -37 +KPX Agrave u -20 +KPX Agrave uacute -20 +KPX Agrave ucircumflex -20 +KPX Agrave udieresis -20 +KPX Agrave ugrave -20 +KPX Agrave uhungarumlaut -20 +KPX Agrave umacron -20 +KPX Agrave uogonek -20 +KPX Agrave uring -20 +KPX Agrave v -55 +KPX Agrave w -55 +KPX Agrave y -55 +KPX Agrave yacute -55 +KPX Agrave ydieresis -55 +KPX Amacron C -30 +KPX Amacron Cacute -30 +KPX Amacron Ccaron -30 +KPX Amacron Ccedilla -30 +KPX Amacron G -35 +KPX Amacron Gbreve -35 +KPX Amacron Gcommaaccent -35 +KPX Amacron O -40 +KPX Amacron Oacute -40 +KPX Amacron Ocircumflex -40 +KPX Amacron Odieresis -40 +KPX Amacron Ograve -40 +KPX Amacron Ohungarumlaut -40 +KPX Amacron Omacron -40 +KPX Amacron Oslash -40 +KPX Amacron Otilde -40 +KPX Amacron Q -40 +KPX Amacron T -37 +KPX Amacron Tcaron -37 +KPX Amacron Tcommaaccent -37 +KPX Amacron U -50 +KPX Amacron Uacute -50 +KPX Amacron Ucircumflex -50 +KPX Amacron Udieresis -50 +KPX Amacron Ugrave -50 +KPX Amacron Uhungarumlaut -50 +KPX Amacron Umacron -50 +KPX Amacron Uogonek -50 +KPX Amacron Uring -50 +KPX Amacron V -105 +KPX Amacron W -95 +KPX Amacron Y -55 +KPX Amacron Yacute -55 +KPX Amacron Ydieresis -55 +KPX Amacron quoteright -37 +KPX Amacron u -20 +KPX Amacron uacute -20 +KPX Amacron ucircumflex -20 +KPX Amacron udieresis -20 +KPX Amacron ugrave -20 +KPX Amacron uhungarumlaut -20 +KPX Amacron umacron -20 +KPX Amacron uogonek -20 +KPX Amacron uring -20 +KPX Amacron v -55 +KPX Amacron w -55 +KPX Amacron y -55 +KPX Amacron yacute -55 +KPX Amacron ydieresis -55 +KPX Aogonek C -30 +KPX Aogonek Cacute -30 +KPX Aogonek Ccaron -30 +KPX Aogonek Ccedilla -30 +KPX Aogonek G -35 +KPX Aogonek Gbreve -35 +KPX Aogonek Gcommaaccent -35 +KPX Aogonek O -40 +KPX Aogonek Oacute -40 +KPX Aogonek Ocircumflex -40 +KPX Aogonek Odieresis -40 +KPX Aogonek Ograve -40 +KPX Aogonek Ohungarumlaut -40 +KPX Aogonek Omacron -40 +KPX Aogonek Oslash -40 +KPX Aogonek Otilde -40 +KPX Aogonek Q -40 +KPX Aogonek T -37 +KPX Aogonek Tcaron -37 +KPX Aogonek Tcommaaccent -37 +KPX Aogonek U -50 +KPX Aogonek Uacute -50 +KPX Aogonek Ucircumflex -50 +KPX Aogonek Udieresis -50 +KPX Aogonek Ugrave -50 +KPX Aogonek Uhungarumlaut -50 +KPX Aogonek Umacron -50 +KPX Aogonek Uogonek -50 +KPX Aogonek Uring -50 +KPX Aogonek V -105 +KPX Aogonek W -95 +KPX Aogonek Y -55 +KPX Aogonek Yacute -55 +KPX Aogonek Ydieresis -55 +KPX Aogonek quoteright -37 +KPX Aogonek u -20 +KPX Aogonek uacute -20 +KPX Aogonek ucircumflex -20 +KPX Aogonek udieresis -20 +KPX Aogonek ugrave -20 +KPX Aogonek uhungarumlaut -20 +KPX Aogonek umacron -20 +KPX Aogonek uogonek -20 +KPX Aogonek uring -20 +KPX Aogonek v -55 +KPX Aogonek w -55 +KPX Aogonek y -55 +KPX Aogonek yacute -55 +KPX Aogonek ydieresis -55 +KPX Aring C -30 +KPX Aring Cacute -30 +KPX Aring Ccaron -30 +KPX Aring Ccedilla -30 +KPX Aring G -35 +KPX Aring Gbreve -35 +KPX Aring Gcommaaccent -35 +KPX Aring O -40 +KPX Aring Oacute -40 +KPX Aring Ocircumflex -40 +KPX Aring Odieresis -40 +KPX Aring Ograve -40 +KPX Aring Ohungarumlaut -40 +KPX Aring Omacron -40 +KPX Aring Oslash -40 +KPX Aring Otilde -40 +KPX Aring Q -40 +KPX Aring T -37 +KPX Aring Tcaron -37 +KPX Aring Tcommaaccent -37 +KPX Aring U -50 +KPX Aring Uacute -50 +KPX Aring Ucircumflex -50 +KPX Aring Udieresis -50 +KPX Aring Ugrave -50 +KPX Aring Uhungarumlaut -50 +KPX Aring Umacron -50 +KPX Aring Uogonek -50 +KPX Aring Uring -50 +KPX Aring V -105 +KPX Aring W -95 +KPX Aring Y -55 +KPX Aring Yacute -55 +KPX Aring Ydieresis -55 +KPX Aring quoteright -37 +KPX Aring u -20 +KPX Aring uacute -20 +KPX Aring ucircumflex -20 +KPX Aring udieresis -20 +KPX Aring ugrave -20 +KPX Aring uhungarumlaut -20 +KPX Aring umacron -20 +KPX Aring uogonek -20 +KPX Aring uring -20 +KPX Aring v -55 +KPX Aring w -55 +KPX Aring y -55 +KPX Aring yacute -55 +KPX Aring ydieresis -55 +KPX Atilde C -30 +KPX Atilde Cacute -30 +KPX Atilde Ccaron -30 +KPX Atilde Ccedilla -30 +KPX Atilde G -35 +KPX Atilde Gbreve -35 +KPX Atilde Gcommaaccent -35 +KPX Atilde O -40 +KPX Atilde Oacute -40 +KPX Atilde Ocircumflex -40 +KPX Atilde Odieresis -40 +KPX Atilde Ograve -40 +KPX Atilde Ohungarumlaut -40 +KPX Atilde Omacron -40 +KPX Atilde Oslash -40 +KPX Atilde Otilde -40 +KPX Atilde Q -40 +KPX Atilde T -37 +KPX Atilde Tcaron -37 +KPX Atilde Tcommaaccent -37 +KPX Atilde U -50 +KPX Atilde Uacute -50 +KPX Atilde Ucircumflex -50 +KPX Atilde Udieresis -50 +KPX Atilde Ugrave -50 +KPX Atilde Uhungarumlaut -50 +KPX Atilde Umacron -50 +KPX Atilde Uogonek -50 +KPX Atilde Uring -50 +KPX Atilde V -105 +KPX Atilde W -95 +KPX Atilde Y -55 +KPX Atilde Yacute -55 +KPX Atilde Ydieresis -55 +KPX Atilde quoteright -37 +KPX Atilde u -20 +KPX Atilde uacute -20 +KPX Atilde ucircumflex -20 +KPX Atilde udieresis -20 +KPX Atilde ugrave -20 +KPX Atilde uhungarumlaut -20 +KPX Atilde umacron -20 +KPX Atilde uogonek -20 +KPX Atilde uring -20 +KPX Atilde v -55 +KPX Atilde w -55 +KPX Atilde y -55 +KPX Atilde yacute -55 +KPX Atilde ydieresis -55 +KPX B A -25 +KPX B Aacute -25 +KPX B Abreve -25 +KPX B Acircumflex -25 +KPX B Adieresis -25 +KPX B Agrave -25 +KPX B Amacron -25 +KPX B Aogonek -25 +KPX B Aring -25 +KPX B Atilde -25 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -35 +KPX D Aacute -35 +KPX D Abreve -35 +KPX D Acircumflex -35 +KPX D Adieresis -35 +KPX D Agrave -35 +KPX D Amacron -35 +KPX D Aogonek -35 +KPX D Aring -35 +KPX D Atilde -35 +KPX D V -40 +KPX D W -40 +KPX D Y -40 +KPX D Yacute -40 +KPX D Ydieresis -40 +KPX Dcaron A -35 +KPX Dcaron Aacute -35 +KPX Dcaron Abreve -35 +KPX Dcaron Acircumflex -35 +KPX Dcaron Adieresis -35 +KPX Dcaron Agrave -35 +KPX Dcaron Amacron -35 +KPX Dcaron Aogonek -35 +KPX Dcaron Aring -35 +KPX Dcaron Atilde -35 +KPX Dcaron V -40 +KPX Dcaron W -40 +KPX Dcaron Y -40 +KPX Dcaron Yacute -40 +KPX Dcaron Ydieresis -40 +KPX Dcroat A -35 +KPX Dcroat Aacute -35 +KPX Dcroat Abreve -35 +KPX Dcroat Acircumflex -35 +KPX Dcroat Adieresis -35 +KPX Dcroat Agrave -35 +KPX Dcroat Amacron -35 +KPX Dcroat Aogonek -35 +KPX Dcroat Aring -35 +KPX Dcroat Atilde -35 +KPX Dcroat V -40 +KPX Dcroat W -40 +KPX Dcroat Y -40 +KPX Dcroat Yacute -40 +KPX Dcroat Ydieresis -40 +KPX F A -115 +KPX F Aacute -115 +KPX F Abreve -115 +KPX F Acircumflex -115 +KPX F Adieresis -115 +KPX F Agrave -115 +KPX F Amacron -115 +KPX F Aogonek -115 +KPX F Aring -115 +KPX F Atilde -115 +KPX F a -75 +KPX F aacute -75 +KPX F abreve -75 +KPX F acircumflex -75 +KPX F adieresis -75 +KPX F agrave -75 +KPX F amacron -75 +KPX F aogonek -75 +KPX F aring -75 +KPX F atilde -75 +KPX F comma -135 +KPX F e -75 +KPX F eacute -75 +KPX F ecaron -75 +KPX F ecircumflex -75 +KPX F edieresis -75 +KPX F edotaccent -75 +KPX F egrave -75 +KPX F emacron -75 +KPX F eogonek -75 +KPX F i -45 +KPX F iacute -45 +KPX F icircumflex -45 +KPX F idieresis -45 +KPX F igrave -45 +KPX F imacron -45 +KPX F iogonek -45 +KPX F o -105 +KPX F oacute -105 +KPX F ocircumflex -105 +KPX F odieresis -105 +KPX F ograve -105 +KPX F ohungarumlaut -105 +KPX F omacron -105 +KPX F oslash -105 +KPX F otilde -105 +KPX F period -135 +KPX F r -55 +KPX F racute -55 +KPX F rcaron -55 +KPX F rcommaaccent -55 +KPX J A -40 +KPX J Aacute -40 +KPX J Abreve -40 +KPX J Acircumflex -40 +KPX J Adieresis -40 +KPX J Agrave -40 +KPX J Amacron -40 +KPX J Aogonek -40 +KPX J Aring -40 +KPX J Atilde -40 +KPX J a -35 +KPX J aacute -35 +KPX J abreve -35 +KPX J acircumflex -35 +KPX J adieresis -35 +KPX J agrave -35 +KPX J amacron -35 +KPX J aogonek -35 +KPX J aring -35 +KPX J atilde -35 +KPX J comma -25 +KPX J e -25 +KPX J eacute -25 +KPX J ecaron -25 +KPX J ecircumflex -25 +KPX J edieresis -25 +KPX J edotaccent -25 +KPX J egrave -25 +KPX J emacron -25 +KPX J eogonek -25 +KPX J o -25 +KPX J oacute -25 +KPX J ocircumflex -25 +KPX J odieresis -25 +KPX J ograve -25 +KPX J ohungarumlaut -25 +KPX J omacron -25 +KPX J oslash -25 +KPX J otilde -25 +KPX J period -25 +KPX J u -35 +KPX J uacute -35 +KPX J ucircumflex -35 +KPX J udieresis -35 +KPX J ugrave -35 +KPX J uhungarumlaut -35 +KPX J umacron -35 +KPX J uogonek -35 +KPX J uring -35 +KPX K O -50 +KPX K Oacute -50 +KPX K Ocircumflex -50 +KPX K Odieresis -50 +KPX K Ograve -50 +KPX K Ohungarumlaut -50 +KPX K Omacron -50 +KPX K Oslash -50 +KPX K Otilde -50 +KPX K e -35 +KPX K eacute -35 +KPX K ecaron -35 +KPX K ecircumflex -35 +KPX K edieresis -35 +KPX K edotaccent -35 +KPX K egrave -35 +KPX K emacron -35 +KPX K eogonek -35 +KPX K o -40 +KPX K oacute -40 +KPX K ocircumflex -40 +KPX K odieresis -40 +KPX K ograve -40 +KPX K ohungarumlaut -40 +KPX K omacron -40 +KPX K oslash -40 +KPX K otilde -40 +KPX K u -40 +KPX K uacute -40 +KPX K ucircumflex -40 +KPX K udieresis -40 +KPX K ugrave -40 +KPX K uhungarumlaut -40 +KPX K umacron -40 +KPX K uogonek -40 +KPX K uring -40 +KPX K y -40 +KPX K yacute -40 +KPX K ydieresis -40 +KPX Kcommaaccent O -50 +KPX Kcommaaccent Oacute -50 +KPX Kcommaaccent Ocircumflex -50 +KPX Kcommaaccent Odieresis -50 +KPX Kcommaaccent Ograve -50 +KPX Kcommaaccent Ohungarumlaut -50 +KPX Kcommaaccent Omacron -50 +KPX Kcommaaccent Oslash -50 +KPX Kcommaaccent Otilde -50 +KPX Kcommaaccent e -35 +KPX Kcommaaccent eacute -35 +KPX Kcommaaccent ecaron -35 +KPX Kcommaaccent ecircumflex -35 +KPX Kcommaaccent edieresis -35 +KPX Kcommaaccent edotaccent -35 +KPX Kcommaaccent egrave -35 +KPX Kcommaaccent emacron -35 +KPX Kcommaaccent eogonek -35 +KPX Kcommaaccent o -40 +KPX Kcommaaccent oacute -40 +KPX Kcommaaccent ocircumflex -40 +KPX Kcommaaccent odieresis -40 +KPX Kcommaaccent ograve -40 +KPX Kcommaaccent ohungarumlaut -40 +KPX Kcommaaccent omacron -40 +KPX Kcommaaccent oslash -40 +KPX Kcommaaccent otilde -40 +KPX Kcommaaccent u -40 +KPX Kcommaaccent uacute -40 +KPX Kcommaaccent ucircumflex -40 +KPX Kcommaaccent udieresis -40 +KPX Kcommaaccent ugrave -40 +KPX Kcommaaccent uhungarumlaut -40 +KPX Kcommaaccent umacron -40 +KPX Kcommaaccent uogonek -40 +KPX Kcommaaccent uring -40 +KPX Kcommaaccent y -40 +KPX Kcommaaccent yacute -40 +KPX Kcommaaccent ydieresis -40 +KPX L T -20 +KPX L Tcaron -20 +KPX L Tcommaaccent -20 +KPX L V -55 +KPX L W -55 +KPX L Y -20 +KPX L Yacute -20 +KPX L Ydieresis -20 +KPX L quoteright -37 +KPX L y -30 +KPX L yacute -30 +KPX L ydieresis -30 +KPX Lacute T -20 +KPX Lacute Tcaron -20 +KPX Lacute Tcommaaccent -20 +KPX Lacute V -55 +KPX Lacute W -55 +KPX Lacute Y -20 +KPX Lacute Yacute -20 +KPX Lacute Ydieresis -20 +KPX Lacute quoteright -37 +KPX Lacute y -30 +KPX Lacute yacute -30 +KPX Lacute ydieresis -30 +KPX Lcommaaccent T -20 +KPX Lcommaaccent Tcaron -20 +KPX Lcommaaccent Tcommaaccent -20 +KPX Lcommaaccent V -55 +KPX Lcommaaccent W -55 +KPX Lcommaaccent Y -20 +KPX Lcommaaccent Yacute -20 +KPX Lcommaaccent Ydieresis -20 +KPX Lcommaaccent quoteright -37 +KPX Lcommaaccent y -30 +KPX Lcommaaccent yacute -30 +KPX Lcommaaccent ydieresis -30 +KPX Lslash T -20 +KPX Lslash Tcaron -20 +KPX Lslash Tcommaaccent -20 +KPX Lslash V -55 +KPX Lslash W -55 +KPX Lslash Y -20 +KPX Lslash Yacute -20 +KPX Lslash Ydieresis -20 +KPX Lslash quoteright -37 +KPX Lslash y -30 +KPX Lslash yacute -30 +KPX Lslash ydieresis -30 +KPX N A -27 +KPX N Aacute -27 +KPX N Abreve -27 +KPX N Acircumflex -27 +KPX N Adieresis -27 +KPX N Agrave -27 +KPX N Amacron -27 +KPX N Aogonek -27 +KPX N Aring -27 +KPX N Atilde -27 +KPX Nacute A -27 +KPX Nacute Aacute -27 +KPX Nacute Abreve -27 +KPX Nacute Acircumflex -27 +KPX Nacute Adieresis -27 +KPX Nacute Agrave -27 +KPX Nacute Amacron -27 +KPX Nacute Aogonek -27 +KPX Nacute Aring -27 +KPX Nacute Atilde -27 +KPX Ncaron A -27 +KPX Ncaron Aacute -27 +KPX Ncaron Abreve -27 +KPX Ncaron Acircumflex -27 +KPX Ncaron Adieresis -27 +KPX Ncaron Agrave -27 +KPX Ncaron Amacron -27 +KPX Ncaron Aogonek -27 +KPX Ncaron Aring -27 +KPX Ncaron Atilde -27 +KPX Ncommaaccent A -27 +KPX Ncommaaccent Aacute -27 +KPX Ncommaaccent Abreve -27 +KPX Ncommaaccent Acircumflex -27 +KPX Ncommaaccent Adieresis -27 +KPX Ncommaaccent Agrave -27 +KPX Ncommaaccent Amacron -27 +KPX Ncommaaccent Aogonek -27 +KPX Ncommaaccent Aring -27 +KPX Ncommaaccent Atilde -27 +KPX Ntilde A -27 +KPX Ntilde Aacute -27 +KPX Ntilde Abreve -27 +KPX Ntilde Acircumflex -27 +KPX Ntilde Adieresis -27 +KPX Ntilde Agrave -27 +KPX Ntilde Amacron -27 +KPX Ntilde Aogonek -27 +KPX Ntilde Aring -27 +KPX Ntilde Atilde -27 +KPX O A -55 +KPX O Aacute -55 +KPX O Abreve -55 +KPX O Acircumflex -55 +KPX O Adieresis -55 +KPX O Agrave -55 +KPX O Amacron -55 +KPX O Aogonek -55 +KPX O Aring -55 +KPX O Atilde -55 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -50 +KPX O X -40 +KPX O Y -50 +KPX O Yacute -50 +KPX O Ydieresis -50 +KPX Oacute A -55 +KPX Oacute Aacute -55 +KPX Oacute Abreve -55 +KPX Oacute Acircumflex -55 +KPX Oacute Adieresis -55 +KPX Oacute Agrave -55 +KPX Oacute Amacron -55 +KPX Oacute Aogonek -55 +KPX Oacute Aring -55 +KPX Oacute Atilde -55 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -50 +KPX Oacute X -40 +KPX Oacute Y -50 +KPX Oacute Yacute -50 +KPX Oacute Ydieresis -50 +KPX Ocircumflex A -55 +KPX Ocircumflex Aacute -55 +KPX Ocircumflex Abreve -55 +KPX Ocircumflex Acircumflex -55 +KPX Ocircumflex Adieresis -55 +KPX Ocircumflex Agrave -55 +KPX Ocircumflex Amacron -55 +KPX Ocircumflex Aogonek -55 +KPX Ocircumflex Aring -55 +KPX Ocircumflex Atilde -55 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -50 +KPX Ocircumflex X -40 +KPX Ocircumflex Y -50 +KPX Ocircumflex Yacute -50 +KPX Ocircumflex Ydieresis -50 +KPX Odieresis A -55 +KPX Odieresis Aacute -55 +KPX Odieresis Abreve -55 +KPX Odieresis Acircumflex -55 +KPX Odieresis Adieresis -55 +KPX Odieresis Agrave -55 +KPX Odieresis Amacron -55 +KPX Odieresis Aogonek -55 +KPX Odieresis Aring -55 +KPX Odieresis Atilde -55 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -50 +KPX Odieresis X -40 +KPX Odieresis Y -50 +KPX Odieresis Yacute -50 +KPX Odieresis Ydieresis -50 +KPX Ograve A -55 +KPX Ograve Aacute -55 +KPX Ograve Abreve -55 +KPX Ograve Acircumflex -55 +KPX Ograve Adieresis -55 +KPX Ograve Agrave -55 +KPX Ograve Amacron -55 +KPX Ograve Aogonek -55 +KPX Ograve Aring -55 +KPX Ograve Atilde -55 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -50 +KPX Ograve X -40 +KPX Ograve Y -50 +KPX Ograve Yacute -50 +KPX Ograve Ydieresis -50 +KPX Ohungarumlaut A -55 +KPX Ohungarumlaut Aacute -55 +KPX Ohungarumlaut Abreve -55 +KPX Ohungarumlaut Acircumflex -55 +KPX Ohungarumlaut Adieresis -55 +KPX Ohungarumlaut Agrave -55 +KPX Ohungarumlaut Amacron -55 +KPX Ohungarumlaut Aogonek -55 +KPX Ohungarumlaut Aring -55 +KPX Ohungarumlaut Atilde -55 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -50 +KPX Ohungarumlaut X -40 +KPX Ohungarumlaut Y -50 +KPX Ohungarumlaut Yacute -50 +KPX Ohungarumlaut Ydieresis -50 +KPX Omacron A -55 +KPX Omacron Aacute -55 +KPX Omacron Abreve -55 +KPX Omacron Acircumflex -55 +KPX Omacron Adieresis -55 +KPX Omacron Agrave -55 +KPX Omacron Amacron -55 +KPX Omacron Aogonek -55 +KPX Omacron Aring -55 +KPX Omacron Atilde -55 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -50 +KPX Omacron X -40 +KPX Omacron Y -50 +KPX Omacron Yacute -50 +KPX Omacron Ydieresis -50 +KPX Oslash A -55 +KPX Oslash Aacute -55 +KPX Oslash Abreve -55 +KPX Oslash Acircumflex -55 +KPX Oslash Adieresis -55 +KPX Oslash Agrave -55 +KPX Oslash Amacron -55 +KPX Oslash Aogonek -55 +KPX Oslash Aring -55 +KPX Oslash Atilde -55 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -50 +KPX Oslash X -40 +KPX Oslash Y -50 +KPX Oslash Yacute -50 +KPX Oslash Ydieresis -50 +KPX Otilde A -55 +KPX Otilde Aacute -55 +KPX Otilde Abreve -55 +KPX Otilde Acircumflex -55 +KPX Otilde Adieresis -55 +KPX Otilde Agrave -55 +KPX Otilde Amacron -55 +KPX Otilde Aogonek -55 +KPX Otilde Aring -55 +KPX Otilde Atilde -55 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -50 +KPX Otilde X -40 +KPX Otilde Y -50 +KPX Otilde Yacute -50 +KPX Otilde Ydieresis -50 +KPX P A -90 +KPX P Aacute -90 +KPX P Abreve -90 +KPX P Acircumflex -90 +KPX P Adieresis -90 +KPX P Agrave -90 +KPX P Amacron -90 +KPX P Aogonek -90 +KPX P Aring -90 +KPX P Atilde -90 +KPX P a -80 +KPX P aacute -80 +KPX P abreve -80 +KPX P acircumflex -80 +KPX P adieresis -80 +KPX P agrave -80 +KPX P amacron -80 +KPX P aogonek -80 +KPX P aring -80 +KPX P atilde -80 +KPX P comma -135 +KPX P e -80 +KPX P eacute -80 +KPX P ecaron -80 +KPX P ecircumflex -80 +KPX P edieresis -80 +KPX P edotaccent -80 +KPX P egrave -80 +KPX P emacron -80 +KPX P eogonek -80 +KPX P o -80 +KPX P oacute -80 +KPX P ocircumflex -80 +KPX P odieresis -80 +KPX P ograve -80 +KPX P ohungarumlaut -80 +KPX P omacron -80 +KPX P oslash -80 +KPX P otilde -80 +KPX P period -135 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX R O -40 +KPX R Oacute -40 +KPX R Ocircumflex -40 +KPX R Odieresis -40 +KPX R Ograve -40 +KPX R Ohungarumlaut -40 +KPX R Omacron -40 +KPX R Oslash -40 +KPX R Otilde -40 +KPX R U -40 +KPX R Uacute -40 +KPX R Ucircumflex -40 +KPX R Udieresis -40 +KPX R Ugrave -40 +KPX R Uhungarumlaut -40 +KPX R Umacron -40 +KPX R Uogonek -40 +KPX R Uring -40 +KPX R V -18 +KPX R W -18 +KPX R Y -18 +KPX R Yacute -18 +KPX R Ydieresis -18 +KPX Racute O -40 +KPX Racute Oacute -40 +KPX Racute Ocircumflex -40 +KPX Racute Odieresis -40 +KPX Racute Ograve -40 +KPX Racute Ohungarumlaut -40 +KPX Racute Omacron -40 +KPX Racute Oslash -40 +KPX Racute Otilde -40 +KPX Racute U -40 +KPX Racute Uacute -40 +KPX Racute Ucircumflex -40 +KPX Racute Udieresis -40 +KPX Racute Ugrave -40 +KPX Racute Uhungarumlaut -40 +KPX Racute Umacron -40 +KPX Racute Uogonek -40 +KPX Racute Uring -40 +KPX Racute V -18 +KPX Racute W -18 +KPX Racute Y -18 +KPX Racute Yacute -18 +KPX Racute Ydieresis -18 +KPX Rcaron O -40 +KPX Rcaron Oacute -40 +KPX Rcaron Ocircumflex -40 +KPX Rcaron Odieresis -40 +KPX Rcaron Ograve -40 +KPX Rcaron Ohungarumlaut -40 +KPX Rcaron Omacron -40 +KPX Rcaron Oslash -40 +KPX Rcaron Otilde -40 +KPX Rcaron U -40 +KPX Rcaron Uacute -40 +KPX Rcaron Ucircumflex -40 +KPX Rcaron Udieresis -40 +KPX Rcaron Ugrave -40 +KPX Rcaron Uhungarumlaut -40 +KPX Rcaron Umacron -40 +KPX Rcaron Uogonek -40 +KPX Rcaron Uring -40 +KPX Rcaron V -18 +KPX Rcaron W -18 +KPX Rcaron Y -18 +KPX Rcaron Yacute -18 +KPX Rcaron Ydieresis -18 +KPX Rcommaaccent O -40 +KPX Rcommaaccent Oacute -40 +KPX Rcommaaccent Ocircumflex -40 +KPX Rcommaaccent Odieresis -40 +KPX Rcommaaccent Ograve -40 +KPX Rcommaaccent Ohungarumlaut -40 +KPX Rcommaaccent Omacron -40 +KPX Rcommaaccent Oslash -40 +KPX Rcommaaccent Otilde -40 +KPX Rcommaaccent U -40 +KPX Rcommaaccent Uacute -40 +KPX Rcommaaccent Ucircumflex -40 +KPX Rcommaaccent Udieresis -40 +KPX Rcommaaccent Ugrave -40 +KPX Rcommaaccent Uhungarumlaut -40 +KPX Rcommaaccent Umacron -40 +KPX Rcommaaccent Uogonek -40 +KPX Rcommaaccent Uring -40 +KPX Rcommaaccent V -18 +KPX Rcommaaccent W -18 +KPX Rcommaaccent Y -18 +KPX Rcommaaccent Yacute -18 +KPX Rcommaaccent Ydieresis -18 +KPX T A -50 +KPX T Aacute -50 +KPX T Abreve -50 +KPX T Acircumflex -50 +KPX T Adieresis -50 +KPX T Agrave -50 +KPX T Amacron -50 +KPX T Aogonek -50 +KPX T Aring -50 +KPX T Atilde -50 +KPX T O -18 +KPX T Oacute -18 +KPX T Ocircumflex -18 +KPX T Odieresis -18 +KPX T Ograve -18 +KPX T Ohungarumlaut -18 +KPX T Omacron -18 +KPX T Oslash -18 +KPX T Otilde -18 +KPX T a -92 +KPX T aacute -92 +KPX T abreve -92 +KPX T acircumflex -92 +KPX T adieresis -92 +KPX T agrave -92 +KPX T amacron -92 +KPX T aogonek -92 +KPX T aring -92 +KPX T atilde -92 +KPX T colon -55 +KPX T comma -74 +KPX T e -92 +KPX T eacute -92 +KPX T ecaron -92 +KPX T ecircumflex -52 +KPX T edieresis -52 +KPX T edotaccent -92 +KPX T egrave -52 +KPX T emacron -52 +KPX T eogonek -92 +KPX T hyphen -74 +KPX T i -55 +KPX T iacute -55 +KPX T iogonek -55 +KPX T o -92 +KPX T oacute -92 +KPX T ocircumflex -92 +KPX T odieresis -92 +KPX T ograve -92 +KPX T ohungarumlaut -92 +KPX T omacron -92 +KPX T oslash -92 +KPX T otilde -92 +KPX T period -74 +KPX T r -55 +KPX T racute -55 +KPX T rcaron -55 +KPX T rcommaaccent -55 +KPX T semicolon -65 +KPX T u -55 +KPX T uacute -55 +KPX T ucircumflex -55 +KPX T udieresis -55 +KPX T ugrave -55 +KPX T uhungarumlaut -55 +KPX T umacron -55 +KPX T uogonek -55 +KPX T uring -55 +KPX T w -74 +KPX T y -74 +KPX T yacute -74 +KPX T ydieresis -34 +KPX Tcaron A -50 +KPX Tcaron Aacute -50 +KPX Tcaron Abreve -50 +KPX Tcaron Acircumflex -50 +KPX Tcaron Adieresis -50 +KPX Tcaron Agrave -50 +KPX Tcaron Amacron -50 +KPX Tcaron Aogonek -50 +KPX Tcaron Aring -50 +KPX Tcaron Atilde -50 +KPX Tcaron O -18 +KPX Tcaron Oacute -18 +KPX Tcaron Ocircumflex -18 +KPX Tcaron Odieresis -18 +KPX Tcaron Ograve -18 +KPX Tcaron Ohungarumlaut -18 +KPX Tcaron Omacron -18 +KPX Tcaron Oslash -18 +KPX Tcaron Otilde -18 +KPX Tcaron a -92 +KPX Tcaron aacute -92 +KPX Tcaron abreve -92 +KPX Tcaron acircumflex -92 +KPX Tcaron adieresis -92 +KPX Tcaron agrave -92 +KPX Tcaron amacron -92 +KPX Tcaron aogonek -92 +KPX Tcaron aring -92 +KPX Tcaron atilde -92 +KPX Tcaron colon -55 +KPX Tcaron comma -74 +KPX Tcaron e -92 +KPX Tcaron eacute -92 +KPX Tcaron ecaron -92 +KPX Tcaron ecircumflex -52 +KPX Tcaron edieresis -52 +KPX Tcaron edotaccent -92 +KPX Tcaron egrave -52 +KPX Tcaron emacron -52 +KPX Tcaron eogonek -92 +KPX Tcaron hyphen -74 +KPX Tcaron i -55 +KPX Tcaron iacute -55 +KPX Tcaron iogonek -55 +KPX Tcaron o -92 +KPX Tcaron oacute -92 +KPX Tcaron ocircumflex -92 +KPX Tcaron odieresis -92 +KPX Tcaron ograve -92 +KPX Tcaron ohungarumlaut -92 +KPX Tcaron omacron -92 +KPX Tcaron oslash -92 +KPX Tcaron otilde -92 +KPX Tcaron period -74 +KPX Tcaron r -55 +KPX Tcaron racute -55 +KPX Tcaron rcaron -55 +KPX Tcaron rcommaaccent -55 +KPX Tcaron semicolon -65 +KPX Tcaron u -55 +KPX Tcaron uacute -55 +KPX Tcaron ucircumflex -55 +KPX Tcaron udieresis -55 +KPX Tcaron ugrave -55 +KPX Tcaron uhungarumlaut -55 +KPX Tcaron umacron -55 +KPX Tcaron uogonek -55 +KPX Tcaron uring -55 +KPX Tcaron w -74 +KPX Tcaron y -74 +KPX Tcaron yacute -74 +KPX Tcaron ydieresis -34 +KPX Tcommaaccent A -50 +KPX Tcommaaccent Aacute -50 +KPX Tcommaaccent Abreve -50 +KPX Tcommaaccent Acircumflex -50 +KPX Tcommaaccent Adieresis -50 +KPX Tcommaaccent Agrave -50 +KPX Tcommaaccent Amacron -50 +KPX Tcommaaccent Aogonek -50 +KPX Tcommaaccent Aring -50 +KPX Tcommaaccent Atilde -50 +KPX Tcommaaccent O -18 +KPX Tcommaaccent Oacute -18 +KPX Tcommaaccent Ocircumflex -18 +KPX Tcommaaccent Odieresis -18 +KPX Tcommaaccent Ograve -18 +KPX Tcommaaccent Ohungarumlaut -18 +KPX Tcommaaccent Omacron -18 +KPX Tcommaaccent Oslash -18 +KPX Tcommaaccent Otilde -18 +KPX Tcommaaccent a -92 +KPX Tcommaaccent aacute -92 +KPX Tcommaaccent abreve -92 +KPX Tcommaaccent acircumflex -92 +KPX Tcommaaccent adieresis -92 +KPX Tcommaaccent agrave -92 +KPX Tcommaaccent amacron -92 +KPX Tcommaaccent aogonek -92 +KPX Tcommaaccent aring -92 +KPX Tcommaaccent atilde -92 +KPX Tcommaaccent colon -55 +KPX Tcommaaccent comma -74 +KPX Tcommaaccent e -92 +KPX Tcommaaccent eacute -92 +KPX Tcommaaccent ecaron -92 +KPX Tcommaaccent ecircumflex -52 +KPX Tcommaaccent edieresis -52 +KPX Tcommaaccent edotaccent -92 +KPX Tcommaaccent egrave -52 +KPX Tcommaaccent emacron -52 +KPX Tcommaaccent eogonek -92 +KPX Tcommaaccent hyphen -74 +KPX Tcommaaccent i -55 +KPX Tcommaaccent iacute -55 +KPX Tcommaaccent iogonek -55 +KPX Tcommaaccent o -92 +KPX Tcommaaccent oacute -92 +KPX Tcommaaccent ocircumflex -92 +KPX Tcommaaccent odieresis -92 +KPX Tcommaaccent ograve -92 +KPX Tcommaaccent ohungarumlaut -92 +KPX Tcommaaccent omacron -92 +KPX Tcommaaccent oslash -92 +KPX Tcommaaccent otilde -92 +KPX Tcommaaccent period -74 +KPX Tcommaaccent r -55 +KPX Tcommaaccent racute -55 +KPX Tcommaaccent rcaron -55 +KPX Tcommaaccent rcommaaccent -55 +KPX Tcommaaccent semicolon -65 +KPX Tcommaaccent u -55 +KPX Tcommaaccent uacute -55 +KPX Tcommaaccent ucircumflex -55 +KPX Tcommaaccent udieresis -55 +KPX Tcommaaccent ugrave -55 +KPX Tcommaaccent uhungarumlaut -55 +KPX Tcommaaccent umacron -55 +KPX Tcommaaccent uogonek -55 +KPX Tcommaaccent uring -55 +KPX Tcommaaccent w -74 +KPX Tcommaaccent y -74 +KPX Tcommaaccent yacute -74 +KPX Tcommaaccent ydieresis -34 +KPX U A -40 +KPX U Aacute -40 +KPX U Abreve -40 +KPX U Acircumflex -40 +KPX U Adieresis -40 +KPX U Agrave -40 +KPX U Amacron -40 +KPX U Aogonek -40 +KPX U Aring -40 +KPX U Atilde -40 +KPX U comma -25 +KPX U period -25 +KPX Uacute A -40 +KPX Uacute Aacute -40 +KPX Uacute Abreve -40 +KPX Uacute Acircumflex -40 +KPX Uacute Adieresis -40 +KPX Uacute Agrave -40 +KPX Uacute Amacron -40 +KPX Uacute Aogonek -40 +KPX Uacute Aring -40 +KPX Uacute Atilde -40 +KPX Uacute comma -25 +KPX Uacute period -25 +KPX Ucircumflex A -40 +KPX Ucircumflex Aacute -40 +KPX Ucircumflex Abreve -40 +KPX Ucircumflex Acircumflex -40 +KPX Ucircumflex Adieresis -40 +KPX Ucircumflex Agrave -40 +KPX Ucircumflex Amacron -40 +KPX Ucircumflex Aogonek -40 +KPX Ucircumflex Aring -40 +KPX Ucircumflex Atilde -40 +KPX Ucircumflex comma -25 +KPX Ucircumflex period -25 +KPX Udieresis A -40 +KPX Udieresis Aacute -40 +KPX Udieresis Abreve -40 +KPX Udieresis Acircumflex -40 +KPX Udieresis Adieresis -40 +KPX Udieresis Agrave -40 +KPX Udieresis Amacron -40 +KPX Udieresis Aogonek -40 +KPX Udieresis Aring -40 +KPX Udieresis Atilde -40 +KPX Udieresis comma -25 +KPX Udieresis period -25 +KPX Ugrave A -40 +KPX Ugrave Aacute -40 +KPX Ugrave Abreve -40 +KPX Ugrave Acircumflex -40 +KPX Ugrave Adieresis -40 +KPX Ugrave Agrave -40 +KPX Ugrave Amacron -40 +KPX Ugrave Aogonek -40 +KPX Ugrave Aring -40 +KPX Ugrave Atilde -40 +KPX Ugrave comma -25 +KPX Ugrave period -25 +KPX Uhungarumlaut A -40 +KPX Uhungarumlaut Aacute -40 +KPX Uhungarumlaut Abreve -40 +KPX Uhungarumlaut Acircumflex -40 +KPX Uhungarumlaut Adieresis -40 +KPX Uhungarumlaut Agrave -40 +KPX Uhungarumlaut Amacron -40 +KPX Uhungarumlaut Aogonek -40 +KPX Uhungarumlaut Aring -40 +KPX Uhungarumlaut Atilde -40 +KPX Uhungarumlaut comma -25 +KPX Uhungarumlaut period -25 +KPX Umacron A -40 +KPX Umacron Aacute -40 +KPX Umacron Abreve -40 +KPX Umacron Acircumflex -40 +KPX Umacron Adieresis -40 +KPX Umacron Agrave -40 +KPX Umacron Amacron -40 +KPX Umacron Aogonek -40 +KPX Umacron Aring -40 +KPX Umacron Atilde -40 +KPX Umacron comma -25 +KPX Umacron period -25 +KPX Uogonek A -40 +KPX Uogonek Aacute -40 +KPX Uogonek Abreve -40 +KPX Uogonek Acircumflex -40 +KPX Uogonek Adieresis -40 +KPX Uogonek Agrave -40 +KPX Uogonek Amacron -40 +KPX Uogonek Aogonek -40 +KPX Uogonek Aring -40 +KPX Uogonek Atilde -40 +KPX Uogonek comma -25 +KPX Uogonek period -25 +KPX Uring A -40 +KPX Uring Aacute -40 +KPX Uring Abreve -40 +KPX Uring Acircumflex -40 +KPX Uring Adieresis -40 +KPX Uring Agrave -40 +KPX Uring Amacron -40 +KPX Uring Aogonek -40 +KPX Uring Aring -40 +KPX Uring Atilde -40 +KPX Uring comma -25 +KPX Uring period -25 +KPX V A -60 +KPX V Aacute -60 +KPX V Abreve -60 +KPX V Acircumflex -60 +KPX V Adieresis -60 +KPX V Agrave -60 +KPX V Amacron -60 +KPX V Aogonek -60 +KPX V Aring -60 +KPX V Atilde -60 +KPX V O -30 +KPX V Oacute -30 +KPX V Ocircumflex -30 +KPX V Odieresis -30 +KPX V Ograve -30 +KPX V Ohungarumlaut -30 +KPX V Omacron -30 +KPX V Oslash -30 +KPX V Otilde -30 +KPX V a -111 +KPX V aacute -111 +KPX V abreve -111 +KPX V acircumflex -111 +KPX V adieresis -111 +KPX V agrave -111 +KPX V amacron -111 +KPX V aogonek -111 +KPX V aring -111 +KPX V atilde -111 +KPX V colon -65 +KPX V comma -129 +KPX V e -111 +KPX V eacute -111 +KPX V ecaron -111 +KPX V ecircumflex -111 +KPX V edieresis -71 +KPX V edotaccent -111 +KPX V egrave -71 +KPX V emacron -71 +KPX V eogonek -111 +KPX V hyphen -55 +KPX V i -74 +KPX V iacute -74 +KPX V icircumflex -34 +KPX V idieresis -34 +KPX V igrave -34 +KPX V imacron -34 +KPX V iogonek -74 +KPX V o -111 +KPX V oacute -111 +KPX V ocircumflex -111 +KPX V odieresis -111 +KPX V ograve -111 +KPX V ohungarumlaut -111 +KPX V omacron -111 +KPX V oslash -111 +KPX V otilde -111 +KPX V period -129 +KPX V semicolon -74 +KPX V u -74 +KPX V uacute -74 +KPX V ucircumflex -74 +KPX V udieresis -74 +KPX V ugrave -74 +KPX V uhungarumlaut -74 +KPX V umacron -74 +KPX V uogonek -74 +KPX V uring -74 +KPX W A -60 +KPX W Aacute -60 +KPX W Abreve -60 +KPX W Acircumflex -60 +KPX W Adieresis -60 +KPX W Agrave -60 +KPX W Amacron -60 +KPX W Aogonek -60 +KPX W Aring -60 +KPX W Atilde -60 +KPX W O -25 +KPX W Oacute -25 +KPX W Ocircumflex -25 +KPX W Odieresis -25 +KPX W Ograve -25 +KPX W Ohungarumlaut -25 +KPX W Omacron -25 +KPX W Oslash -25 +KPX W Otilde -25 +KPX W a -92 +KPX W aacute -92 +KPX W abreve -92 +KPX W acircumflex -92 +KPX W adieresis -92 +KPX W agrave -92 +KPX W amacron -92 +KPX W aogonek -92 +KPX W aring -92 +KPX W atilde -92 +KPX W colon -65 +KPX W comma -92 +KPX W e -92 +KPX W eacute -92 +KPX W ecaron -92 +KPX W ecircumflex -92 +KPX W edieresis -52 +KPX W edotaccent -92 +KPX W egrave -52 +KPX W emacron -52 +KPX W eogonek -92 +KPX W hyphen -37 +KPX W i -55 +KPX W iacute -55 +KPX W iogonek -55 +KPX W o -92 +KPX W oacute -92 +KPX W ocircumflex -92 +KPX W odieresis -92 +KPX W ograve -92 +KPX W ohungarumlaut -92 +KPX W omacron -92 +KPX W oslash -92 +KPX W otilde -92 +KPX W period -92 +KPX W semicolon -65 +KPX W u -55 +KPX W uacute -55 +KPX W ucircumflex -55 +KPX W udieresis -55 +KPX W ugrave -55 +KPX W uhungarumlaut -55 +KPX W umacron -55 +KPX W uogonek -55 +KPX W uring -55 +KPX W y -70 +KPX W yacute -70 +KPX W ydieresis -70 +KPX Y A -50 +KPX Y Aacute -50 +KPX Y Abreve -50 +KPX Y Acircumflex -50 +KPX Y Adieresis -50 +KPX Y Agrave -50 +KPX Y Amacron -50 +KPX Y Aogonek -50 +KPX Y Aring -50 +KPX Y Atilde -50 +KPX Y O -15 +KPX Y Oacute -15 +KPX Y Ocircumflex -15 +KPX Y Odieresis -15 +KPX Y Ograve -15 +KPX Y Ohungarumlaut -15 +KPX Y Omacron -15 +KPX Y Oslash -15 +KPX Y Otilde -15 +KPX Y a -92 +KPX Y aacute -92 +KPX Y abreve -92 +KPX Y acircumflex -92 +KPX Y adieresis -92 +KPX Y agrave -92 +KPX Y amacron -92 +KPX Y aogonek -92 +KPX Y aring -92 +KPX Y atilde -92 +KPX Y colon -65 +KPX Y comma -92 +KPX Y e -92 +KPX Y eacute -92 +KPX Y ecaron -92 +KPX Y ecircumflex -92 +KPX Y edieresis -52 +KPX Y edotaccent -92 +KPX Y egrave -52 +KPX Y emacron -52 +KPX Y eogonek -92 +KPX Y hyphen -74 +KPX Y i -74 +KPX Y iacute -74 +KPX Y icircumflex -34 +KPX Y idieresis -34 +KPX Y igrave -34 +KPX Y imacron -34 +KPX Y iogonek -74 +KPX Y o -92 +KPX Y oacute -92 +KPX Y ocircumflex -92 +KPX Y odieresis -92 +KPX Y ograve -92 +KPX Y ohungarumlaut -92 +KPX Y omacron -92 +KPX Y oslash -92 +KPX Y otilde -92 +KPX Y period -92 +KPX Y semicolon -65 +KPX Y u -92 +KPX Y uacute -92 +KPX Y ucircumflex -92 +KPX Y udieresis -92 +KPX Y ugrave -92 +KPX Y uhungarumlaut -92 +KPX Y umacron -92 +KPX Y uogonek -92 +KPX Y uring -92 +KPX Yacute A -50 +KPX Yacute Aacute -50 +KPX Yacute Abreve -50 +KPX Yacute Acircumflex -50 +KPX Yacute Adieresis -50 +KPX Yacute Agrave -50 +KPX Yacute Amacron -50 +KPX Yacute Aogonek -50 +KPX Yacute Aring -50 +KPX Yacute Atilde -50 +KPX Yacute O -15 +KPX Yacute Oacute -15 +KPX Yacute Ocircumflex -15 +KPX Yacute Odieresis -15 +KPX Yacute Ograve -15 +KPX Yacute Ohungarumlaut -15 +KPX Yacute Omacron -15 +KPX Yacute Oslash -15 +KPX Yacute Otilde -15 +KPX Yacute a -92 +KPX Yacute aacute -92 +KPX Yacute abreve -92 +KPX Yacute acircumflex -92 +KPX Yacute adieresis -92 +KPX Yacute agrave -92 +KPX Yacute amacron -92 +KPX Yacute aogonek -92 +KPX Yacute aring -92 +KPX Yacute atilde -92 +KPX Yacute colon -65 +KPX Yacute comma -92 +KPX Yacute e -92 +KPX Yacute eacute -92 +KPX Yacute ecaron -92 +KPX Yacute ecircumflex -92 +KPX Yacute edieresis -52 +KPX Yacute edotaccent -92 +KPX Yacute egrave -52 +KPX Yacute emacron -52 +KPX Yacute eogonek -92 +KPX Yacute hyphen -74 +KPX Yacute i -74 +KPX Yacute iacute -74 +KPX Yacute icircumflex -34 +KPX Yacute idieresis -34 +KPX Yacute igrave -34 +KPX Yacute imacron -34 +KPX Yacute iogonek -74 +KPX Yacute o -92 +KPX Yacute oacute -92 +KPX Yacute ocircumflex -92 +KPX Yacute odieresis -92 +KPX Yacute ograve -92 +KPX Yacute ohungarumlaut -92 +KPX Yacute omacron -92 +KPX Yacute oslash -92 +KPX Yacute otilde -92 +KPX Yacute period -92 +KPX Yacute semicolon -65 +KPX Yacute u -92 +KPX Yacute uacute -92 +KPX Yacute ucircumflex -92 +KPX Yacute udieresis -92 +KPX Yacute ugrave -92 +KPX Yacute uhungarumlaut -92 +KPX Yacute umacron -92 +KPX Yacute uogonek -92 +KPX Yacute uring -92 +KPX Ydieresis A -50 +KPX Ydieresis Aacute -50 +KPX Ydieresis Abreve -50 +KPX Ydieresis Acircumflex -50 +KPX Ydieresis Adieresis -50 +KPX Ydieresis Agrave -50 +KPX Ydieresis Amacron -50 +KPX Ydieresis Aogonek -50 +KPX Ydieresis Aring -50 +KPX Ydieresis Atilde -50 +KPX Ydieresis O -15 +KPX Ydieresis Oacute -15 +KPX Ydieresis Ocircumflex -15 +KPX Ydieresis Odieresis -15 +KPX Ydieresis Ograve -15 +KPX Ydieresis Ohungarumlaut -15 +KPX Ydieresis Omacron -15 +KPX Ydieresis Oslash -15 +KPX Ydieresis Otilde -15 +KPX Ydieresis a -92 +KPX Ydieresis aacute -92 +KPX Ydieresis abreve -92 +KPX Ydieresis acircumflex -92 +KPX Ydieresis adieresis -92 +KPX Ydieresis agrave -92 +KPX Ydieresis amacron -92 +KPX Ydieresis aogonek -92 +KPX Ydieresis aring -92 +KPX Ydieresis atilde -92 +KPX Ydieresis colon -65 +KPX Ydieresis comma -92 +KPX Ydieresis e -92 +KPX Ydieresis eacute -92 +KPX Ydieresis ecaron -92 +KPX Ydieresis ecircumflex -92 +KPX Ydieresis edieresis -52 +KPX Ydieresis edotaccent -92 +KPX Ydieresis egrave -52 +KPX Ydieresis emacron -52 +KPX Ydieresis eogonek -92 +KPX Ydieresis hyphen -74 +KPX Ydieresis i -74 +KPX Ydieresis iacute -74 +KPX Ydieresis icircumflex -34 +KPX Ydieresis idieresis -34 +KPX Ydieresis igrave -34 +KPX Ydieresis imacron -34 +KPX Ydieresis iogonek -74 +KPX Ydieresis o -92 +KPX Ydieresis oacute -92 +KPX Ydieresis ocircumflex -92 +KPX Ydieresis odieresis -92 +KPX Ydieresis ograve -92 +KPX Ydieresis ohungarumlaut -92 +KPX Ydieresis omacron -92 +KPX Ydieresis oslash -92 +KPX Ydieresis otilde -92 +KPX Ydieresis period -92 +KPX Ydieresis semicolon -65 +KPX Ydieresis u -92 +KPX Ydieresis uacute -92 +KPX Ydieresis ucircumflex -92 +KPX Ydieresis udieresis -92 +KPX Ydieresis ugrave -92 +KPX Ydieresis uhungarumlaut -92 +KPX Ydieresis umacron -92 +KPX Ydieresis uogonek -92 +KPX Ydieresis uring -92 +KPX a g -10 +KPX a gbreve -10 +KPX a gcommaaccent -10 +KPX aacute g -10 +KPX aacute gbreve -10 +KPX aacute gcommaaccent -10 +KPX abreve g -10 +KPX abreve gbreve -10 +KPX abreve gcommaaccent -10 +KPX acircumflex g -10 +KPX acircumflex gbreve -10 +KPX acircumflex gcommaaccent -10 +KPX adieresis g -10 +KPX adieresis gbreve -10 +KPX adieresis gcommaaccent -10 +KPX agrave g -10 +KPX agrave gbreve -10 +KPX agrave gcommaaccent -10 +KPX amacron g -10 +KPX amacron gbreve -10 +KPX amacron gcommaaccent -10 +KPX aogonek g -10 +KPX aogonek gbreve -10 +KPX aogonek gcommaaccent -10 +KPX aring g -10 +KPX aring gbreve -10 +KPX aring gcommaaccent -10 +KPX atilde g -10 +KPX atilde gbreve -10 +KPX atilde gcommaaccent -10 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX c h -15 +KPX c k -20 +KPX c kcommaaccent -20 +KPX cacute h -15 +KPX cacute k -20 +KPX cacute kcommaaccent -20 +KPX ccaron h -15 +KPX ccaron k -20 +KPX ccaron kcommaaccent -20 +KPX ccedilla h -15 +KPX ccedilla k -20 +KPX ccedilla kcommaaccent -20 +KPX comma quotedblright -140 +KPX comma quoteright -140 +KPX e comma -10 +KPX e g -40 +KPX e gbreve -40 +KPX e gcommaaccent -40 +KPX e period -15 +KPX e v -15 +KPX e w -15 +KPX e x -20 +KPX e y -30 +KPX e yacute -30 +KPX e ydieresis -30 +KPX eacute comma -10 +KPX eacute g -40 +KPX eacute gbreve -40 +KPX eacute gcommaaccent -40 +KPX eacute period -15 +KPX eacute v -15 +KPX eacute w -15 +KPX eacute x -20 +KPX eacute y -30 +KPX eacute yacute -30 +KPX eacute ydieresis -30 +KPX ecaron comma -10 +KPX ecaron g -40 +KPX ecaron gbreve -40 +KPX ecaron gcommaaccent -40 +KPX ecaron period -15 +KPX ecaron v -15 +KPX ecaron w -15 +KPX ecaron x -20 +KPX ecaron y -30 +KPX ecaron yacute -30 +KPX ecaron ydieresis -30 +KPX ecircumflex comma -10 +KPX ecircumflex g -40 +KPX ecircumflex gbreve -40 +KPX ecircumflex gcommaaccent -40 +KPX ecircumflex period -15 +KPX ecircumflex v -15 +KPX ecircumflex w -15 +KPX ecircumflex x -20 +KPX ecircumflex y -30 +KPX ecircumflex yacute -30 +KPX ecircumflex ydieresis -30 +KPX edieresis comma -10 +KPX edieresis g -40 +KPX edieresis gbreve -40 +KPX edieresis gcommaaccent -40 +KPX edieresis period -15 +KPX edieresis v -15 +KPX edieresis w -15 +KPX edieresis x -20 +KPX edieresis y -30 +KPX edieresis yacute -30 +KPX edieresis ydieresis -30 +KPX edotaccent comma -10 +KPX edotaccent g -40 +KPX edotaccent gbreve -40 +KPX edotaccent gcommaaccent -40 +KPX edotaccent period -15 +KPX edotaccent v -15 +KPX edotaccent w -15 +KPX edotaccent x -20 +KPX edotaccent y -30 +KPX edotaccent yacute -30 +KPX edotaccent ydieresis -30 +KPX egrave comma -10 +KPX egrave g -40 +KPX egrave gbreve -40 +KPX egrave gcommaaccent -40 +KPX egrave period -15 +KPX egrave v -15 +KPX egrave w -15 +KPX egrave x -20 +KPX egrave y -30 +KPX egrave yacute -30 +KPX egrave ydieresis -30 +KPX emacron comma -10 +KPX emacron g -40 +KPX emacron gbreve -40 +KPX emacron gcommaaccent -40 +KPX emacron period -15 +KPX emacron v -15 +KPX emacron w -15 +KPX emacron x -20 +KPX emacron y -30 +KPX emacron yacute -30 +KPX emacron ydieresis -30 +KPX eogonek comma -10 +KPX eogonek g -40 +KPX eogonek gbreve -40 +KPX eogonek gcommaaccent -40 +KPX eogonek period -15 +KPX eogonek v -15 +KPX eogonek w -15 +KPX eogonek x -20 +KPX eogonek y -30 +KPX eogonek yacute -30 +KPX eogonek ydieresis -30 +KPX f comma -10 +KPX f dotlessi -60 +KPX f f -18 +KPX f i -20 +KPX f iogonek -20 +KPX f period -15 +KPX f quoteright 92 +KPX g comma -10 +KPX g e -10 +KPX g eacute -10 +KPX g ecaron -10 +KPX g ecircumflex -10 +KPX g edieresis -10 +KPX g edotaccent -10 +KPX g egrave -10 +KPX g emacron -10 +KPX g eogonek -10 +KPX g g -10 +KPX g gbreve -10 +KPX g gcommaaccent -10 +KPX g period -15 +KPX gbreve comma -10 +KPX gbreve e -10 +KPX gbreve eacute -10 +KPX gbreve ecaron -10 +KPX gbreve ecircumflex -10 +KPX gbreve edieresis -10 +KPX gbreve edotaccent -10 +KPX gbreve egrave -10 +KPX gbreve emacron -10 +KPX gbreve eogonek -10 +KPX gbreve g -10 +KPX gbreve gbreve -10 +KPX gbreve gcommaaccent -10 +KPX gbreve period -15 +KPX gcommaaccent comma -10 +KPX gcommaaccent e -10 +KPX gcommaaccent eacute -10 +KPX gcommaaccent ecaron -10 +KPX gcommaaccent ecircumflex -10 +KPX gcommaaccent edieresis -10 +KPX gcommaaccent edotaccent -10 +KPX gcommaaccent egrave -10 +KPX gcommaaccent emacron -10 +KPX gcommaaccent eogonek -10 +KPX gcommaaccent g -10 +KPX gcommaaccent gbreve -10 +KPX gcommaaccent gcommaaccent -10 +KPX gcommaaccent period -15 +KPX k e -10 +KPX k eacute -10 +KPX k ecaron -10 +KPX k ecircumflex -10 +KPX k edieresis -10 +KPX k edotaccent -10 +KPX k egrave -10 +KPX k emacron -10 +KPX k eogonek -10 +KPX k o -10 +KPX k oacute -10 +KPX k ocircumflex -10 +KPX k odieresis -10 +KPX k ograve -10 +KPX k ohungarumlaut -10 +KPX k omacron -10 +KPX k oslash -10 +KPX k otilde -10 +KPX k y -10 +KPX k yacute -10 +KPX k ydieresis -10 +KPX kcommaaccent e -10 +KPX kcommaaccent eacute -10 +KPX kcommaaccent ecaron -10 +KPX kcommaaccent ecircumflex -10 +KPX kcommaaccent edieresis -10 +KPX kcommaaccent edotaccent -10 +KPX kcommaaccent egrave -10 +KPX kcommaaccent emacron -10 +KPX kcommaaccent eogonek -10 +KPX kcommaaccent o -10 +KPX kcommaaccent oacute -10 +KPX kcommaaccent ocircumflex -10 +KPX kcommaaccent odieresis -10 +KPX kcommaaccent ograve -10 +KPX kcommaaccent ohungarumlaut -10 +KPX kcommaaccent omacron -10 +KPX kcommaaccent oslash -10 +KPX kcommaaccent otilde -10 +KPX kcommaaccent y -10 +KPX kcommaaccent yacute -10 +KPX kcommaaccent ydieresis -10 +KPX n v -40 +KPX nacute v -40 +KPX ncaron v -40 +KPX ncommaaccent v -40 +KPX ntilde v -40 +KPX o g -10 +KPX o gbreve -10 +KPX o gcommaaccent -10 +KPX o v -10 +KPX oacute g -10 +KPX oacute gbreve -10 +KPX oacute gcommaaccent -10 +KPX oacute v -10 +KPX ocircumflex g -10 +KPX ocircumflex gbreve -10 +KPX ocircumflex gcommaaccent -10 +KPX ocircumflex v -10 +KPX odieresis g -10 +KPX odieresis gbreve -10 +KPX odieresis gcommaaccent -10 +KPX odieresis v -10 +KPX ograve g -10 +KPX ograve gbreve -10 +KPX ograve gcommaaccent -10 +KPX ograve v -10 +KPX ohungarumlaut g -10 +KPX ohungarumlaut gbreve -10 +KPX ohungarumlaut gcommaaccent -10 +KPX ohungarumlaut v -10 +KPX omacron g -10 +KPX omacron gbreve -10 +KPX omacron gcommaaccent -10 +KPX omacron v -10 +KPX oslash g -10 +KPX oslash gbreve -10 +KPX oslash gcommaaccent -10 +KPX oslash v -10 +KPX otilde g -10 +KPX otilde gbreve -10 +KPX otilde gcommaaccent -10 +KPX otilde v -10 +KPX period quotedblright -140 +KPX period quoteright -140 +KPX quoteleft quoteleft -111 +KPX quoteright d -25 +KPX quoteright dcroat -25 +KPX quoteright quoteright -111 +KPX quoteright r -25 +KPX quoteright racute -25 +KPX quoteright rcaron -25 +KPX quoteright rcommaaccent -25 +KPX quoteright s -40 +KPX quoteright sacute -40 +KPX quoteright scaron -40 +KPX quoteright scedilla -40 +KPX quoteright scommaaccent -40 +KPX quoteright space -111 +KPX quoteright t -30 +KPX quoteright tcommaaccent -30 +KPX quoteright v -10 +KPX r a -15 +KPX r aacute -15 +KPX r abreve -15 +KPX r acircumflex -15 +KPX r adieresis -15 +KPX r agrave -15 +KPX r amacron -15 +KPX r aogonek -15 +KPX r aring -15 +KPX r atilde -15 +KPX r c -37 +KPX r cacute -37 +KPX r ccaron -37 +KPX r ccedilla -37 +KPX r comma -111 +KPX r d -37 +KPX r dcroat -37 +KPX r e -37 +KPX r eacute -37 +KPX r ecaron -37 +KPX r ecircumflex -37 +KPX r edieresis -37 +KPX r edotaccent -37 +KPX r egrave -37 +KPX r emacron -37 +KPX r eogonek -37 +KPX r g -37 +KPX r gbreve -37 +KPX r gcommaaccent -37 +KPX r hyphen -20 +KPX r o -45 +KPX r oacute -45 +KPX r ocircumflex -45 +KPX r odieresis -45 +KPX r ograve -45 +KPX r ohungarumlaut -45 +KPX r omacron -45 +KPX r oslash -45 +KPX r otilde -45 +KPX r period -111 +KPX r q -37 +KPX r s -10 +KPX r sacute -10 +KPX r scaron -10 +KPX r scedilla -10 +KPX r scommaaccent -10 +KPX racute a -15 +KPX racute aacute -15 +KPX racute abreve -15 +KPX racute acircumflex -15 +KPX racute adieresis -15 +KPX racute agrave -15 +KPX racute amacron -15 +KPX racute aogonek -15 +KPX racute aring -15 +KPX racute atilde -15 +KPX racute c -37 +KPX racute cacute -37 +KPX racute ccaron -37 +KPX racute ccedilla -37 +KPX racute comma -111 +KPX racute d -37 +KPX racute dcroat -37 +KPX racute e -37 +KPX racute eacute -37 +KPX racute ecaron -37 +KPX racute ecircumflex -37 +KPX racute edieresis -37 +KPX racute edotaccent -37 +KPX racute egrave -37 +KPX racute emacron -37 +KPX racute eogonek -37 +KPX racute g -37 +KPX racute gbreve -37 +KPX racute gcommaaccent -37 +KPX racute hyphen -20 +KPX racute o -45 +KPX racute oacute -45 +KPX racute ocircumflex -45 +KPX racute odieresis -45 +KPX racute ograve -45 +KPX racute ohungarumlaut -45 +KPX racute omacron -45 +KPX racute oslash -45 +KPX racute otilde -45 +KPX racute period -111 +KPX racute q -37 +KPX racute s -10 +KPX racute sacute -10 +KPX racute scaron -10 +KPX racute scedilla -10 +KPX racute scommaaccent -10 +KPX rcaron a -15 +KPX rcaron aacute -15 +KPX rcaron abreve -15 +KPX rcaron acircumflex -15 +KPX rcaron adieresis -15 +KPX rcaron agrave -15 +KPX rcaron amacron -15 +KPX rcaron aogonek -15 +KPX rcaron aring -15 +KPX rcaron atilde -15 +KPX rcaron c -37 +KPX rcaron cacute -37 +KPX rcaron ccaron -37 +KPX rcaron ccedilla -37 +KPX rcaron comma -111 +KPX rcaron d -37 +KPX rcaron dcroat -37 +KPX rcaron e -37 +KPX rcaron eacute -37 +KPX rcaron ecaron -37 +KPX rcaron ecircumflex -37 +KPX rcaron edieresis -37 +KPX rcaron edotaccent -37 +KPX rcaron egrave -37 +KPX rcaron emacron -37 +KPX rcaron eogonek -37 +KPX rcaron g -37 +KPX rcaron gbreve -37 +KPX rcaron gcommaaccent -37 +KPX rcaron hyphen -20 +KPX rcaron o -45 +KPX rcaron oacute -45 +KPX rcaron ocircumflex -45 +KPX rcaron odieresis -45 +KPX rcaron ograve -45 +KPX rcaron ohungarumlaut -45 +KPX rcaron omacron -45 +KPX rcaron oslash -45 +KPX rcaron otilde -45 +KPX rcaron period -111 +KPX rcaron q -37 +KPX rcaron s -10 +KPX rcaron sacute -10 +KPX rcaron scaron -10 +KPX rcaron scedilla -10 +KPX rcaron scommaaccent -10 +KPX rcommaaccent a -15 +KPX rcommaaccent aacute -15 +KPX rcommaaccent abreve -15 +KPX rcommaaccent acircumflex -15 +KPX rcommaaccent adieresis -15 +KPX rcommaaccent agrave -15 +KPX rcommaaccent amacron -15 +KPX rcommaaccent aogonek -15 +KPX rcommaaccent aring -15 +KPX rcommaaccent atilde -15 +KPX rcommaaccent c -37 +KPX rcommaaccent cacute -37 +KPX rcommaaccent ccaron -37 +KPX rcommaaccent ccedilla -37 +KPX rcommaaccent comma -111 +KPX rcommaaccent d -37 +KPX rcommaaccent dcroat -37 +KPX rcommaaccent e -37 +KPX rcommaaccent eacute -37 +KPX rcommaaccent ecaron -37 +KPX rcommaaccent ecircumflex -37 +KPX rcommaaccent edieresis -37 +KPX rcommaaccent edotaccent -37 +KPX rcommaaccent egrave -37 +KPX rcommaaccent emacron -37 +KPX rcommaaccent eogonek -37 +KPX rcommaaccent g -37 +KPX rcommaaccent gbreve -37 +KPX rcommaaccent gcommaaccent -37 +KPX rcommaaccent hyphen -20 +KPX rcommaaccent o -45 +KPX rcommaaccent oacute -45 +KPX rcommaaccent ocircumflex -45 +KPX rcommaaccent odieresis -45 +KPX rcommaaccent ograve -45 +KPX rcommaaccent ohungarumlaut -45 +KPX rcommaaccent omacron -45 +KPX rcommaaccent oslash -45 +KPX rcommaaccent otilde -45 +KPX rcommaaccent period -111 +KPX rcommaaccent q -37 +KPX rcommaaccent s -10 +KPX rcommaaccent sacute -10 +KPX rcommaaccent scaron -10 +KPX rcommaaccent scedilla -10 +KPX rcommaaccent scommaaccent -10 +KPX space A -18 +KPX space Aacute -18 +KPX space Abreve -18 +KPX space Acircumflex -18 +KPX space Adieresis -18 +KPX space Agrave -18 +KPX space Amacron -18 +KPX space Aogonek -18 +KPX space Aring -18 +KPX space Atilde -18 +KPX space T -18 +KPX space Tcaron -18 +KPX space Tcommaaccent -18 +KPX space V -35 +KPX space W -40 +KPX space Y -75 +KPX space Yacute -75 +KPX space Ydieresis -75 +KPX v comma -74 +KPX v period -74 +KPX w comma -74 +KPX w period -74 +KPX y comma -55 +KPX y period -55 +KPX yacute comma -55 +KPX yacute period -55 +KPX ydieresis comma -55 +KPX ydieresis period -55 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-Roman.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-Roman.afm new file mode 100644 index 000000000..a0953f280 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/Times-Roman.afm @@ -0,0 +1,2419 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 12:49:17 1997 +Comment UniqueID 43068 +Comment VMusage 43909 54934 +FontName Times-Roman +FullName Times Roman +FamilyName Times +Weight Roman +ItalicAngle 0 +IsFixedPitch false +CharacterSet ExtendedRoman +FontBBox -168 -218 1000 898 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +EncodingScheme AdobeStandardEncoding +CapHeight 662 +XHeight 450 +Ascender 683 +Descender -217 +StdHW 28 +StdVW 84 +StartCharMetrics 315 +C 32 ; WX 250 ; N space ; B 0 0 0 0 ; +C 33 ; WX 333 ; N exclam ; B 130 -9 238 676 ; +C 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ; +C 35 ; WX 500 ; N numbersign ; B 5 0 496 662 ; +C 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ; +C 37 ; WX 833 ; N percent ; B 61 -13 772 676 ; +C 38 ; WX 778 ; N ampersand ; B 42 -13 750 676 ; +C 39 ; WX 333 ; N quoteright ; B 79 433 218 676 ; +C 40 ; WX 333 ; N parenleft ; B 48 -177 304 676 ; +C 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ; +C 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ; +C 43 ; WX 564 ; N plus ; B 30 0 534 506 ; +C 44 ; WX 250 ; N comma ; B 56 -141 195 102 ; +C 45 ; WX 333 ; N hyphen ; B 39 194 285 257 ; +C 46 ; WX 250 ; N period ; B 70 -11 181 100 ; +C 47 ; WX 278 ; N slash ; B -9 -14 287 676 ; +C 48 ; WX 500 ; N zero ; B 24 -14 476 676 ; +C 49 ; WX 500 ; N one ; B 111 0 394 676 ; +C 50 ; WX 500 ; N two ; B 30 0 475 676 ; +C 51 ; WX 500 ; N three ; B 43 -14 431 676 ; +C 52 ; WX 500 ; N four ; B 12 0 472 676 ; +C 53 ; WX 500 ; N five ; B 32 -14 438 688 ; +C 54 ; WX 500 ; N six ; B 34 -14 468 684 ; +C 55 ; WX 500 ; N seven ; B 20 -8 449 662 ; +C 56 ; WX 500 ; N eight ; B 56 -14 445 676 ; +C 57 ; WX 500 ; N nine ; B 30 -22 459 676 ; +C 58 ; WX 278 ; N colon ; B 81 -11 192 459 ; +C 59 ; WX 278 ; N semicolon ; B 80 -141 219 459 ; +C 60 ; WX 564 ; N less ; B 28 -8 536 514 ; +C 61 ; WX 564 ; N equal ; B 30 120 534 386 ; +C 62 ; WX 564 ; N greater ; B 28 -8 536 514 ; +C 63 ; WX 444 ; N question ; B 68 -8 414 676 ; +C 64 ; WX 921 ; N at ; B 116 -14 809 676 ; +C 65 ; WX 722 ; N A ; B 15 0 706 674 ; +C 66 ; WX 667 ; N B ; B 17 0 593 662 ; +C 67 ; WX 667 ; N C ; B 28 -14 633 676 ; +C 68 ; WX 722 ; N D ; B 16 0 685 662 ; +C 69 ; WX 611 ; N E ; B 12 0 597 662 ; +C 70 ; WX 556 ; N F ; B 12 0 546 662 ; +C 71 ; WX 722 ; N G ; B 32 -14 709 676 ; +C 72 ; WX 722 ; N H ; B 19 0 702 662 ; +C 73 ; WX 333 ; N I ; B 18 0 315 662 ; +C 74 ; WX 389 ; N J ; B 10 -14 370 662 ; +C 75 ; WX 722 ; N K ; B 34 0 723 662 ; +C 76 ; WX 611 ; N L ; B 12 0 598 662 ; +C 77 ; WX 889 ; N M ; B 12 0 863 662 ; +C 78 ; WX 722 ; N N ; B 12 -11 707 662 ; +C 79 ; WX 722 ; N O ; B 34 -14 688 676 ; +C 80 ; WX 556 ; N P ; B 16 0 542 662 ; +C 81 ; WX 722 ; N Q ; B 34 -178 701 676 ; +C 82 ; WX 667 ; N R ; B 17 0 659 662 ; +C 83 ; WX 556 ; N S ; B 42 -14 491 676 ; +C 84 ; WX 611 ; N T ; B 17 0 593 662 ; +C 85 ; WX 722 ; N U ; B 14 -14 705 662 ; +C 86 ; WX 722 ; N V ; B 16 -11 697 662 ; +C 87 ; WX 944 ; N W ; B 5 -11 932 662 ; +C 88 ; WX 722 ; N X ; B 10 0 704 662 ; +C 89 ; WX 722 ; N Y ; B 22 0 703 662 ; +C 90 ; WX 611 ; N Z ; B 9 0 597 662 ; +C 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ; +C 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ; +C 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ; +C 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ; +C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; +C 96 ; WX 333 ; N quoteleft ; B 115 433 254 676 ; +C 97 ; WX 444 ; N a ; B 37 -10 442 460 ; +C 98 ; WX 500 ; N b ; B 3 -10 468 683 ; +C 99 ; WX 444 ; N c ; B 25 -10 412 460 ; +C 100 ; WX 500 ; N d ; B 27 -10 491 683 ; +C 101 ; WX 444 ; N e ; B 25 -10 424 460 ; +C 102 ; WX 333 ; N f ; B 20 0 383 683 ; L i fi ; L l fl ; +C 103 ; WX 500 ; N g ; B 28 -218 470 460 ; +C 104 ; WX 500 ; N h ; B 9 0 487 683 ; +C 105 ; WX 278 ; N i ; B 16 0 253 683 ; +C 106 ; WX 278 ; N j ; B -70 -218 194 683 ; +C 107 ; WX 500 ; N k ; B 7 0 505 683 ; +C 108 ; WX 278 ; N l ; B 19 0 257 683 ; +C 109 ; WX 778 ; N m ; B 16 0 775 460 ; +C 110 ; WX 500 ; N n ; B 16 0 485 460 ; +C 111 ; WX 500 ; N o ; B 29 -10 470 460 ; +C 112 ; WX 500 ; N p ; B 5 -217 470 460 ; +C 113 ; WX 500 ; N q ; B 24 -217 488 460 ; +C 114 ; WX 333 ; N r ; B 5 0 335 460 ; +C 115 ; WX 389 ; N s ; B 51 -10 348 460 ; +C 116 ; WX 278 ; N t ; B 13 -10 279 579 ; +C 117 ; WX 500 ; N u ; B 9 -10 479 450 ; +C 118 ; WX 500 ; N v ; B 19 -14 477 450 ; +C 119 ; WX 722 ; N w ; B 21 -14 694 450 ; +C 120 ; WX 500 ; N x ; B 17 0 479 450 ; +C 121 ; WX 500 ; N y ; B 14 -218 475 450 ; +C 122 ; WX 444 ; N z ; B 27 0 418 450 ; +C 123 ; WX 480 ; N braceleft ; B 100 -181 350 680 ; +C 124 ; WX 200 ; N bar ; B 67 -218 133 782 ; +C 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ; +C 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ; +C 161 ; WX 333 ; N exclamdown ; B 97 -218 205 467 ; +C 162 ; WX 500 ; N cent ; B 53 -138 448 579 ; +C 163 ; WX 500 ; N sterling ; B 12 -8 490 676 ; +C 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ; +C 165 ; WX 500 ; N yen ; B -53 0 512 662 ; +C 166 ; WX 500 ; N florin ; B 7 -189 490 676 ; +C 167 ; WX 500 ; N section ; B 70 -148 426 676 ; +C 168 ; WX 500 ; N currency ; B -22 58 522 602 ; +C 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ; +C 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ; +C 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ; +C 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ; +C 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ; +C 174 ; WX 556 ; N fi ; B 31 0 521 683 ; +C 175 ; WX 556 ; N fl ; B 32 0 521 683 ; +C 177 ; WX 500 ; N endash ; B 0 201 500 250 ; +C 178 ; WX 500 ; N dagger ; B 59 -149 442 676 ; +C 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ; +C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; +C 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ; +C 183 ; WX 350 ; N bullet ; B 40 196 310 466 ; +C 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ; +C 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ; +C 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ; +C 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ; +C 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ; +C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ; +C 191 ; WX 444 ; N questiondown ; B 30 -218 376 466 ; +C 193 ; WX 333 ; N grave ; B 19 507 242 678 ; +C 194 ; WX 333 ; N acute ; B 93 507 317 678 ; +C 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ; +C 196 ; WX 333 ; N tilde ; B 1 532 331 638 ; +C 197 ; WX 333 ; N macron ; B 11 547 322 601 ; +C 198 ; WX 333 ; N breve ; B 26 507 307 664 ; +C 199 ; WX 333 ; N dotaccent ; B 118 581 216 681 ; +C 200 ; WX 333 ; N dieresis ; B 18 581 315 681 ; +C 202 ; WX 333 ; N ring ; B 67 512 266 711 ; +C 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ; +C 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ; +C 206 ; WX 333 ; N ogonek ; B 62 -165 243 0 ; +C 207 ; WX 333 ; N caron ; B 11 507 322 674 ; +C 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ; +C 225 ; WX 889 ; N AE ; B 0 0 863 662 ; +C 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ; +C 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ; +C 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ; +C 234 ; WX 889 ; N OE ; B 30 -6 885 668 ; +C 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ; +C 241 ; WX 667 ; N ae ; B 38 -10 632 460 ; +C 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ; +C 248 ; WX 278 ; N lslash ; B 19 0 259 683 ; +C 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ; +C 250 ; WX 722 ; N oe ; B 30 -10 690 460 ; +C 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ; +C -1 ; WX 333 ; N Idieresis ; B 18 0 315 835 ; +C -1 ; WX 444 ; N eacute ; B 25 -10 424 678 ; +C -1 ; WX 444 ; N abreve ; B 37 -10 442 664 ; +C -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 501 678 ; +C -1 ; WX 444 ; N ecaron ; B 25 -10 424 674 ; +C -1 ; WX 722 ; N Ydieresis ; B 22 0 703 835 ; +C -1 ; WX 564 ; N divide ; B 30 -10 534 516 ; +C -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ; +C -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ; +C -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ; +C -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ; +C -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ; +C -1 ; WX 389 ; N scommaaccent ; B 51 -218 348 460 ; +C -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ; +C -1 ; WX 722 ; N Uring ; B 14 -14 705 898 ; +C -1 ; WX 722 ; N Udieresis ; B 14 -14 705 835 ; +C -1 ; WX 444 ; N aogonek ; B 37 -165 469 460 ; +C -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ; +C -1 ; WX 500 ; N uogonek ; B 9 -155 487 450 ; +C -1 ; WX 611 ; N Edieresis ; B 12 0 597 835 ; +C -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ; +C -1 ; WX 250 ; N commaaccent ; B 59 -218 184 -50 ; +C -1 ; WX 760 ; N copyright ; B 38 -14 722 676 ; +C -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ; +C -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ; +C -1 ; WX 444 ; N aring ; B 37 -10 442 711 ; +C -1 ; WX 722 ; N Ncommaaccent ; B 12 -198 707 662 ; +C -1 ; WX 278 ; N lacute ; B 19 0 290 890 ; +C -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ; +C -1 ; WX 611 ; N Tcommaaccent ; B 17 -218 593 662 ; +C -1 ; WX 667 ; N Cacute ; B 28 -14 633 890 ; +C -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ; +C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 835 ; +C -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ; +C -1 ; WX 389 ; N scedilla ; B 51 -215 348 460 ; +C -1 ; WX 278 ; N iacute ; B 16 0 290 678 ; +C -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ; +C -1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ; +C -1 ; WX 722 ; N Gcommaaccent ; B 32 -218 709 676 ; +C -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ; +C -1 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ; +C -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ; +C -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ; +C -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ; +C -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 835 ; +C -1 ; WX 556 ; N Thorn ; B 16 0 542 662 ; +C -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ; +C -1 ; WX 667 ; N Racute ; B 17 0 659 890 ; +C -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ; +C -1 ; WX 588 ; N dcaron ; B 27 -10 589 695 ; +C -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ; +C -1 ; WX 500 ; N uring ; B 9 -10 479 711 ; +C -1 ; WX 300 ; N threesuperior ; B 15 262 291 676 ; +C -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ; +C -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ; +C -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ; +C -1 ; WX 564 ; N multiply ; B 38 8 527 497 ; +C -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ; +C -1 ; WX 611 ; N Tcaron ; B 17 0 593 886 ; +C -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ; +C -1 ; WX 500 ; N ydieresis ; B 14 -218 475 623 ; +C -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ; +C -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ; +C -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ; +C -1 ; WX 444 ; N adieresis ; B 37 -10 442 623 ; +C -1 ; WX 444 ; N edieresis ; B 25 -10 424 623 ; +C -1 ; WX 444 ; N cacute ; B 25 -10 413 678 ; +C -1 ; WX 500 ; N nacute ; B 16 0 485 678 ; +C -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ; +C -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ; +C -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ; +C -1 ; WX 564 ; N plusminus ; B 30 0 534 506 ; +C -1 ; WX 200 ; N brokenbar ; B 67 -143 133 707 ; +C -1 ; WX 760 ; N registered ; B 38 -14 722 676 ; +C -1 ; WX 722 ; N Gbreve ; B 32 -14 709 876 ; +C -1 ; WX 333 ; N Idotaccent ; B 18 0 315 835 ; +C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ; +C -1 ; WX 611 ; N Egrave ; B 12 0 597 890 ; +C -1 ; WX 333 ; N racute ; B 5 0 335 678 ; +C -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ; +C -1 ; WX 611 ; N Zacute ; B 9 0 597 890 ; +C -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ; +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 666 ; +C -1 ; WX 722 ; N Eth ; B 16 0 685 662 ; +C -1 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ; +C -1 ; WX 278 ; N lcommaaccent ; B 19 -218 257 683 ; +C -1 ; WX 326 ; N tcaron ; B 13 -10 318 722 ; +C -1 ; WX 444 ; N eogonek ; B 25 -165 424 460 ; +C -1 ; WX 722 ; N Uogonek ; B 14 -165 705 662 ; +C -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ; +C -1 ; WX 722 ; N Adieresis ; B 15 0 706 835 ; +C -1 ; WX 444 ; N egrave ; B 25 -10 424 678 ; +C -1 ; WX 444 ; N zacute ; B 27 0 418 678 ; +C -1 ; WX 278 ; N iogonek ; B 16 -165 265 683 ; +C -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ; +C -1 ; WX 500 ; N oacute ; B 29 -10 470 678 ; +C -1 ; WX 444 ; N amacron ; B 37 -10 442 601 ; +C -1 ; WX 389 ; N sacute ; B 51 -10 348 678 ; +C -1 ; WX 278 ; N idieresis ; B -9 0 288 623 ; +C -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ; +C -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ; +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; +C -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ; +C -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ; +C -1 ; WX 722 ; N Odieresis ; B 34 -14 688 835 ; +C -1 ; WX 500 ; N mu ; B 36 -218 512 450 ; +C -1 ; WX 278 ; N igrave ; B -8 0 253 678 ; +C -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 491 678 ; +C -1 ; WX 611 ; N Eogonek ; B 12 -165 597 662 ; +C -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ; +C -1 ; WX 750 ; N threequarters ; B 15 -14 718 676 ; +C -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ; +C -1 ; WX 344 ; N lcaron ; B 19 0 347 695 ; +C -1 ; WX 722 ; N Kcommaaccent ; B 34 -198 723 662 ; +C -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ; +C -1 ; WX 980 ; N trademark ; B 30 256 957 662 ; +C -1 ; WX 444 ; N edotaccent ; B 25 -10 424 623 ; +C -1 ; WX 333 ; N Igrave ; B 18 0 315 890 ; +C -1 ; WX 333 ; N Imacron ; B 11 0 322 813 ; +C -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ; +C -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ; +C -1 ; WX 549 ; N lessequal ; B 26 0 523 666 ; +C -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ; +C -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ; +C -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ; +C -1 ; WX 611 ; N Eacute ; B 12 0 597 890 ; +C -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ; +C -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ; +C -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ; +C -1 ; WX 556 ; N Scaron ; B 42 -14 491 886 ; +C -1 ; WX 556 ; N Scommaaccent ; B 42 -218 491 676 ; +C -1 ; WX 722 ; N Ohungarumlaut ; B 34 -14 688 890 ; +C -1 ; WX 400 ; N degree ; B 57 390 343 676 ; +C -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ; +C -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ; +C -1 ; WX 500 ; N ugrave ; B 9 -10 479 678 ; +C -1 ; WX 453 ; N radical ; B 2 -60 452 768 ; +C -1 ; WX 722 ; N Dcaron ; B 16 0 685 886 ; +C -1 ; WX 333 ; N rcommaaccent ; B 5 -218 335 460 ; +C -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ; +C -1 ; WX 500 ; N otilde ; B 29 -10 470 638 ; +C -1 ; WX 667 ; N Rcommaaccent ; B 17 -198 659 662 ; +C -1 ; WX 611 ; N Lcommaaccent ; B 12 -218 598 662 ; +C -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ; +C -1 ; WX 722 ; N Aogonek ; B 15 -165 738 674 ; +C -1 ; WX 722 ; N Aring ; B 15 0 706 898 ; +C -1 ; WX 722 ; N Otilde ; B 34 -14 688 850 ; +C -1 ; WX 444 ; N zdotaccent ; B 27 0 418 623 ; +C -1 ; WX 611 ; N Ecaron ; B 12 0 597 886 ; +C -1 ; WX 333 ; N Iogonek ; B 18 -165 315 662 ; +C -1 ; WX 500 ; N kcommaaccent ; B 7 -218 505 683 ; +C -1 ; WX 564 ; N minus ; B 30 220 534 286 ; +C -1 ; WX 333 ; N Icircumflex ; B 11 0 322 886 ; +C -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ; +C -1 ; WX 278 ; N tcommaaccent ; B 13 -218 279 579 ; +C -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ; +C -1 ; WX 500 ; N odieresis ; B 29 -10 470 623 ; +C -1 ; WX 500 ; N udieresis ; B 9 -10 479 623 ; +C -1 ; WX 549 ; N notequal ; B 12 -31 537 547 ; +C -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 749 ; +C -1 ; WX 500 ; N eth ; B 29 -10 471 686 ; +C -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ; +C -1 ; WX 500 ; N ncommaaccent ; B 16 -218 485 460 ; +C -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ; +C -1 ; WX 278 ; N imacron ; B 6 0 271 601 ; +C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; +EndCharMetrics +StartKernData +StartKernPairs 2073 +KPX A C -40 +KPX A Cacute -40 +KPX A Ccaron -40 +KPX A Ccedilla -40 +KPX A G -40 +KPX A Gbreve -40 +KPX A Gcommaaccent -40 +KPX A O -55 +KPX A Oacute -55 +KPX A Ocircumflex -55 +KPX A Odieresis -55 +KPX A Ograve -55 +KPX A Ohungarumlaut -55 +KPX A Omacron -55 +KPX A Oslash -55 +KPX A Otilde -55 +KPX A Q -55 +KPX A T -111 +KPX A Tcaron -111 +KPX A Tcommaaccent -111 +KPX A U -55 +KPX A Uacute -55 +KPX A Ucircumflex -55 +KPX A Udieresis -55 +KPX A Ugrave -55 +KPX A Uhungarumlaut -55 +KPX A Umacron -55 +KPX A Uogonek -55 +KPX A Uring -55 +KPX A V -135 +KPX A W -90 +KPX A Y -105 +KPX A Yacute -105 +KPX A Ydieresis -105 +KPX A quoteright -111 +KPX A v -74 +KPX A w -92 +KPX A y -92 +KPX A yacute -92 +KPX A ydieresis -92 +KPX Aacute C -40 +KPX Aacute Cacute -40 +KPX Aacute Ccaron -40 +KPX Aacute Ccedilla -40 +KPX Aacute G -40 +KPX Aacute Gbreve -40 +KPX Aacute Gcommaaccent -40 +KPX Aacute O -55 +KPX Aacute Oacute -55 +KPX Aacute Ocircumflex -55 +KPX Aacute Odieresis -55 +KPX Aacute Ograve -55 +KPX Aacute Ohungarumlaut -55 +KPX Aacute Omacron -55 +KPX Aacute Oslash -55 +KPX Aacute Otilde -55 +KPX Aacute Q -55 +KPX Aacute T -111 +KPX Aacute Tcaron -111 +KPX Aacute Tcommaaccent -111 +KPX Aacute U -55 +KPX Aacute Uacute -55 +KPX Aacute Ucircumflex -55 +KPX Aacute Udieresis -55 +KPX Aacute Ugrave -55 +KPX Aacute Uhungarumlaut -55 +KPX Aacute Umacron -55 +KPX Aacute Uogonek -55 +KPX Aacute Uring -55 +KPX Aacute V -135 +KPX Aacute W -90 +KPX Aacute Y -105 +KPX Aacute Yacute -105 +KPX Aacute Ydieresis -105 +KPX Aacute quoteright -111 +KPX Aacute v -74 +KPX Aacute w -92 +KPX Aacute y -92 +KPX Aacute yacute -92 +KPX Aacute ydieresis -92 +KPX Abreve C -40 +KPX Abreve Cacute -40 +KPX Abreve Ccaron -40 +KPX Abreve Ccedilla -40 +KPX Abreve G -40 +KPX Abreve Gbreve -40 +KPX Abreve Gcommaaccent -40 +KPX Abreve O -55 +KPX Abreve Oacute -55 +KPX Abreve Ocircumflex -55 +KPX Abreve Odieresis -55 +KPX Abreve Ograve -55 +KPX Abreve Ohungarumlaut -55 +KPX Abreve Omacron -55 +KPX Abreve Oslash -55 +KPX Abreve Otilde -55 +KPX Abreve Q -55 +KPX Abreve T -111 +KPX Abreve Tcaron -111 +KPX Abreve Tcommaaccent -111 +KPX Abreve U -55 +KPX Abreve Uacute -55 +KPX Abreve Ucircumflex -55 +KPX Abreve Udieresis -55 +KPX Abreve Ugrave -55 +KPX Abreve Uhungarumlaut -55 +KPX Abreve Umacron -55 +KPX Abreve Uogonek -55 +KPX Abreve Uring -55 +KPX Abreve V -135 +KPX Abreve W -90 +KPX Abreve Y -105 +KPX Abreve Yacute -105 +KPX Abreve Ydieresis -105 +KPX Abreve quoteright -111 +KPX Abreve v -74 +KPX Abreve w -92 +KPX Abreve y -92 +KPX Abreve yacute -92 +KPX Abreve ydieresis -92 +KPX Acircumflex C -40 +KPX Acircumflex Cacute -40 +KPX Acircumflex Ccaron -40 +KPX Acircumflex Ccedilla -40 +KPX Acircumflex G -40 +KPX Acircumflex Gbreve -40 +KPX Acircumflex Gcommaaccent -40 +KPX Acircumflex O -55 +KPX Acircumflex Oacute -55 +KPX Acircumflex Ocircumflex -55 +KPX Acircumflex Odieresis -55 +KPX Acircumflex Ograve -55 +KPX Acircumflex Ohungarumlaut -55 +KPX Acircumflex Omacron -55 +KPX Acircumflex Oslash -55 +KPX Acircumflex Otilde -55 +KPX Acircumflex Q -55 +KPX Acircumflex T -111 +KPX Acircumflex Tcaron -111 +KPX Acircumflex Tcommaaccent -111 +KPX Acircumflex U -55 +KPX Acircumflex Uacute -55 +KPX Acircumflex Ucircumflex -55 +KPX Acircumflex Udieresis -55 +KPX Acircumflex Ugrave -55 +KPX Acircumflex Uhungarumlaut -55 +KPX Acircumflex Umacron -55 +KPX Acircumflex Uogonek -55 +KPX Acircumflex Uring -55 +KPX Acircumflex V -135 +KPX Acircumflex W -90 +KPX Acircumflex Y -105 +KPX Acircumflex Yacute -105 +KPX Acircumflex Ydieresis -105 +KPX Acircumflex quoteright -111 +KPX Acircumflex v -74 +KPX Acircumflex w -92 +KPX Acircumflex y -92 +KPX Acircumflex yacute -92 +KPX Acircumflex ydieresis -92 +KPX Adieresis C -40 +KPX Adieresis Cacute -40 +KPX Adieresis Ccaron -40 +KPX Adieresis Ccedilla -40 +KPX Adieresis G -40 +KPX Adieresis Gbreve -40 +KPX Adieresis Gcommaaccent -40 +KPX Adieresis O -55 +KPX Adieresis Oacute -55 +KPX Adieresis Ocircumflex -55 +KPX Adieresis Odieresis -55 +KPX Adieresis Ograve -55 +KPX Adieresis Ohungarumlaut -55 +KPX Adieresis Omacron -55 +KPX Adieresis Oslash -55 +KPX Adieresis Otilde -55 +KPX Adieresis Q -55 +KPX Adieresis T -111 +KPX Adieresis Tcaron -111 +KPX Adieresis Tcommaaccent -111 +KPX Adieresis U -55 +KPX Adieresis Uacute -55 +KPX Adieresis Ucircumflex -55 +KPX Adieresis Udieresis -55 +KPX Adieresis Ugrave -55 +KPX Adieresis Uhungarumlaut -55 +KPX Adieresis Umacron -55 +KPX Adieresis Uogonek -55 +KPX Adieresis Uring -55 +KPX Adieresis V -135 +KPX Adieresis W -90 +KPX Adieresis Y -105 +KPX Adieresis Yacute -105 +KPX Adieresis Ydieresis -105 +KPX Adieresis quoteright -111 +KPX Adieresis v -74 +KPX Adieresis w -92 +KPX Adieresis y -92 +KPX Adieresis yacute -92 +KPX Adieresis ydieresis -92 +KPX Agrave C -40 +KPX Agrave Cacute -40 +KPX Agrave Ccaron -40 +KPX Agrave Ccedilla -40 +KPX Agrave G -40 +KPX Agrave Gbreve -40 +KPX Agrave Gcommaaccent -40 +KPX Agrave O -55 +KPX Agrave Oacute -55 +KPX Agrave Ocircumflex -55 +KPX Agrave Odieresis -55 +KPX Agrave Ograve -55 +KPX Agrave Ohungarumlaut -55 +KPX Agrave Omacron -55 +KPX Agrave Oslash -55 +KPX Agrave Otilde -55 +KPX Agrave Q -55 +KPX Agrave T -111 +KPX Agrave Tcaron -111 +KPX Agrave Tcommaaccent -111 +KPX Agrave U -55 +KPX Agrave Uacute -55 +KPX Agrave Ucircumflex -55 +KPX Agrave Udieresis -55 +KPX Agrave Ugrave -55 +KPX Agrave Uhungarumlaut -55 +KPX Agrave Umacron -55 +KPX Agrave Uogonek -55 +KPX Agrave Uring -55 +KPX Agrave V -135 +KPX Agrave W -90 +KPX Agrave Y -105 +KPX Agrave Yacute -105 +KPX Agrave Ydieresis -105 +KPX Agrave quoteright -111 +KPX Agrave v -74 +KPX Agrave w -92 +KPX Agrave y -92 +KPX Agrave yacute -92 +KPX Agrave ydieresis -92 +KPX Amacron C -40 +KPX Amacron Cacute -40 +KPX Amacron Ccaron -40 +KPX Amacron Ccedilla -40 +KPX Amacron G -40 +KPX Amacron Gbreve -40 +KPX Amacron Gcommaaccent -40 +KPX Amacron O -55 +KPX Amacron Oacute -55 +KPX Amacron Ocircumflex -55 +KPX Amacron Odieresis -55 +KPX Amacron Ograve -55 +KPX Amacron Ohungarumlaut -55 +KPX Amacron Omacron -55 +KPX Amacron Oslash -55 +KPX Amacron Otilde -55 +KPX Amacron Q -55 +KPX Amacron T -111 +KPX Amacron Tcaron -111 +KPX Amacron Tcommaaccent -111 +KPX Amacron U -55 +KPX Amacron Uacute -55 +KPX Amacron Ucircumflex -55 +KPX Amacron Udieresis -55 +KPX Amacron Ugrave -55 +KPX Amacron Uhungarumlaut -55 +KPX Amacron Umacron -55 +KPX Amacron Uogonek -55 +KPX Amacron Uring -55 +KPX Amacron V -135 +KPX Amacron W -90 +KPX Amacron Y -105 +KPX Amacron Yacute -105 +KPX Amacron Ydieresis -105 +KPX Amacron quoteright -111 +KPX Amacron v -74 +KPX Amacron w -92 +KPX Amacron y -92 +KPX Amacron yacute -92 +KPX Amacron ydieresis -92 +KPX Aogonek C -40 +KPX Aogonek Cacute -40 +KPX Aogonek Ccaron -40 +KPX Aogonek Ccedilla -40 +KPX Aogonek G -40 +KPX Aogonek Gbreve -40 +KPX Aogonek Gcommaaccent -40 +KPX Aogonek O -55 +KPX Aogonek Oacute -55 +KPX Aogonek Ocircumflex -55 +KPX Aogonek Odieresis -55 +KPX Aogonek Ograve -55 +KPX Aogonek Ohungarumlaut -55 +KPX Aogonek Omacron -55 +KPX Aogonek Oslash -55 +KPX Aogonek Otilde -55 +KPX Aogonek Q -55 +KPX Aogonek T -111 +KPX Aogonek Tcaron -111 +KPX Aogonek Tcommaaccent -111 +KPX Aogonek U -55 +KPX Aogonek Uacute -55 +KPX Aogonek Ucircumflex -55 +KPX Aogonek Udieresis -55 +KPX Aogonek Ugrave -55 +KPX Aogonek Uhungarumlaut -55 +KPX Aogonek Umacron -55 +KPX Aogonek Uogonek -55 +KPX Aogonek Uring -55 +KPX Aogonek V -135 +KPX Aogonek W -90 +KPX Aogonek Y -105 +KPX Aogonek Yacute -105 +KPX Aogonek Ydieresis -105 +KPX Aogonek quoteright -111 +KPX Aogonek v -74 +KPX Aogonek w -52 +KPX Aogonek y -52 +KPX Aogonek yacute -52 +KPX Aogonek ydieresis -52 +KPX Aring C -40 +KPX Aring Cacute -40 +KPX Aring Ccaron -40 +KPX Aring Ccedilla -40 +KPX Aring G -40 +KPX Aring Gbreve -40 +KPX Aring Gcommaaccent -40 +KPX Aring O -55 +KPX Aring Oacute -55 +KPX Aring Ocircumflex -55 +KPX Aring Odieresis -55 +KPX Aring Ograve -55 +KPX Aring Ohungarumlaut -55 +KPX Aring Omacron -55 +KPX Aring Oslash -55 +KPX Aring Otilde -55 +KPX Aring Q -55 +KPX Aring T -111 +KPX Aring Tcaron -111 +KPX Aring Tcommaaccent -111 +KPX Aring U -55 +KPX Aring Uacute -55 +KPX Aring Ucircumflex -55 +KPX Aring Udieresis -55 +KPX Aring Ugrave -55 +KPX Aring Uhungarumlaut -55 +KPX Aring Umacron -55 +KPX Aring Uogonek -55 +KPX Aring Uring -55 +KPX Aring V -135 +KPX Aring W -90 +KPX Aring Y -105 +KPX Aring Yacute -105 +KPX Aring Ydieresis -105 +KPX Aring quoteright -111 +KPX Aring v -74 +KPX Aring w -92 +KPX Aring y -92 +KPX Aring yacute -92 +KPX Aring ydieresis -92 +KPX Atilde C -40 +KPX Atilde Cacute -40 +KPX Atilde Ccaron -40 +KPX Atilde Ccedilla -40 +KPX Atilde G -40 +KPX Atilde Gbreve -40 +KPX Atilde Gcommaaccent -40 +KPX Atilde O -55 +KPX Atilde Oacute -55 +KPX Atilde Ocircumflex -55 +KPX Atilde Odieresis -55 +KPX Atilde Ograve -55 +KPX Atilde Ohungarumlaut -55 +KPX Atilde Omacron -55 +KPX Atilde Oslash -55 +KPX Atilde Otilde -55 +KPX Atilde Q -55 +KPX Atilde T -111 +KPX Atilde Tcaron -111 +KPX Atilde Tcommaaccent -111 +KPX Atilde U -55 +KPX Atilde Uacute -55 +KPX Atilde Ucircumflex -55 +KPX Atilde Udieresis -55 +KPX Atilde Ugrave -55 +KPX Atilde Uhungarumlaut -55 +KPX Atilde Umacron -55 +KPX Atilde Uogonek -55 +KPX Atilde Uring -55 +KPX Atilde V -135 +KPX Atilde W -90 +KPX Atilde Y -105 +KPX Atilde Yacute -105 +KPX Atilde Ydieresis -105 +KPX Atilde quoteright -111 +KPX Atilde v -74 +KPX Atilde w -92 +KPX Atilde y -92 +KPX Atilde yacute -92 +KPX Atilde ydieresis -92 +KPX B A -35 +KPX B Aacute -35 +KPX B Abreve -35 +KPX B Acircumflex -35 +KPX B Adieresis -35 +KPX B Agrave -35 +KPX B Amacron -35 +KPX B Aogonek -35 +KPX B Aring -35 +KPX B Atilde -35 +KPX B U -10 +KPX B Uacute -10 +KPX B Ucircumflex -10 +KPX B Udieresis -10 +KPX B Ugrave -10 +KPX B Uhungarumlaut -10 +KPX B Umacron -10 +KPX B Uogonek -10 +KPX B Uring -10 +KPX D A -40 +KPX D Aacute -40 +KPX D Abreve -40 +KPX D Acircumflex -40 +KPX D Adieresis -40 +KPX D Agrave -40 +KPX D Amacron -40 +KPX D Aogonek -40 +KPX D Aring -40 +KPX D Atilde -40 +KPX D V -40 +KPX D W -30 +KPX D Y -55 +KPX D Yacute -55 +KPX D Ydieresis -55 +KPX Dcaron A -40 +KPX Dcaron Aacute -40 +KPX Dcaron Abreve -40 +KPX Dcaron Acircumflex -40 +KPX Dcaron Adieresis -40 +KPX Dcaron Agrave -40 +KPX Dcaron Amacron -40 +KPX Dcaron Aogonek -40 +KPX Dcaron Aring -40 +KPX Dcaron Atilde -40 +KPX Dcaron V -40 +KPX Dcaron W -30 +KPX Dcaron Y -55 +KPX Dcaron Yacute -55 +KPX Dcaron Ydieresis -55 +KPX Dcroat A -40 +KPX Dcroat Aacute -40 +KPX Dcroat Abreve -40 +KPX Dcroat Acircumflex -40 +KPX Dcroat Adieresis -40 +KPX Dcroat Agrave -40 +KPX Dcroat Amacron -40 +KPX Dcroat Aogonek -40 +KPX Dcroat Aring -40 +KPX Dcroat Atilde -40 +KPX Dcroat V -40 +KPX Dcroat W -30 +KPX Dcroat Y -55 +KPX Dcroat Yacute -55 +KPX Dcroat Ydieresis -55 +KPX F A -74 +KPX F Aacute -74 +KPX F Abreve -74 +KPX F Acircumflex -74 +KPX F Adieresis -74 +KPX F Agrave -74 +KPX F Amacron -74 +KPX F Aogonek -74 +KPX F Aring -74 +KPX F Atilde -74 +KPX F a -15 +KPX F aacute -15 +KPX F abreve -15 +KPX F acircumflex -15 +KPX F adieresis -15 +KPX F agrave -15 +KPX F amacron -15 +KPX F aogonek -15 +KPX F aring -15 +KPX F atilde -15 +KPX F comma -80 +KPX F o -15 +KPX F oacute -15 +KPX F ocircumflex -15 +KPX F odieresis -15 +KPX F ograve -15 +KPX F ohungarumlaut -15 +KPX F omacron -15 +KPX F oslash -15 +KPX F otilde -15 +KPX F period -80 +KPX J A -60 +KPX J Aacute -60 +KPX J Abreve -60 +KPX J Acircumflex -60 +KPX J Adieresis -60 +KPX J Agrave -60 +KPX J Amacron -60 +KPX J Aogonek -60 +KPX J Aring -60 +KPX J Atilde -60 +KPX K O -30 +KPX K Oacute -30 +KPX K Ocircumflex -30 +KPX K Odieresis -30 +KPX K Ograve -30 +KPX K Ohungarumlaut -30 +KPX K Omacron -30 +KPX K Oslash -30 +KPX K Otilde -30 +KPX K e -25 +KPX K eacute -25 +KPX K ecaron -25 +KPX K ecircumflex -25 +KPX K edieresis -25 +KPX K edotaccent -25 +KPX K egrave -25 +KPX K emacron -25 +KPX K eogonek -25 +KPX K o -35 +KPX K oacute -35 +KPX K ocircumflex -35 +KPX K odieresis -35 +KPX K ograve -35 +KPX K ohungarumlaut -35 +KPX K omacron -35 +KPX K oslash -35 +KPX K otilde -35 +KPX K u -15 +KPX K uacute -15 +KPX K ucircumflex -15 +KPX K udieresis -15 +KPX K ugrave -15 +KPX K uhungarumlaut -15 +KPX K umacron -15 +KPX K uogonek -15 +KPX K uring -15 +KPX K y -25 +KPX K yacute -25 +KPX K ydieresis -25 +KPX Kcommaaccent O -30 +KPX Kcommaaccent Oacute -30 +KPX Kcommaaccent Ocircumflex -30 +KPX Kcommaaccent Odieresis -30 +KPX Kcommaaccent Ograve -30 +KPX Kcommaaccent Ohungarumlaut -30 +KPX Kcommaaccent Omacron -30 +KPX Kcommaaccent Oslash -30 +KPX Kcommaaccent Otilde -30 +KPX Kcommaaccent e -25 +KPX Kcommaaccent eacute -25 +KPX Kcommaaccent ecaron -25 +KPX Kcommaaccent ecircumflex -25 +KPX Kcommaaccent edieresis -25 +KPX Kcommaaccent edotaccent -25 +KPX Kcommaaccent egrave -25 +KPX Kcommaaccent emacron -25 +KPX Kcommaaccent eogonek -25 +KPX Kcommaaccent o -35 +KPX Kcommaaccent oacute -35 +KPX Kcommaaccent ocircumflex -35 +KPX Kcommaaccent odieresis -35 +KPX Kcommaaccent ograve -35 +KPX Kcommaaccent ohungarumlaut -35 +KPX Kcommaaccent omacron -35 +KPX Kcommaaccent oslash -35 +KPX Kcommaaccent otilde -35 +KPX Kcommaaccent u -15 +KPX Kcommaaccent uacute -15 +KPX Kcommaaccent ucircumflex -15 +KPX Kcommaaccent udieresis -15 +KPX Kcommaaccent ugrave -15 +KPX Kcommaaccent uhungarumlaut -15 +KPX Kcommaaccent umacron -15 +KPX Kcommaaccent uogonek -15 +KPX Kcommaaccent uring -15 +KPX Kcommaaccent y -25 +KPX Kcommaaccent yacute -25 +KPX Kcommaaccent ydieresis -25 +KPX L T -92 +KPX L Tcaron -92 +KPX L Tcommaaccent -92 +KPX L V -100 +KPX L W -74 +KPX L Y -100 +KPX L Yacute -100 +KPX L Ydieresis -100 +KPX L quoteright -92 +KPX L y -55 +KPX L yacute -55 +KPX L ydieresis -55 +KPX Lacute T -92 +KPX Lacute Tcaron -92 +KPX Lacute Tcommaaccent -92 +KPX Lacute V -100 +KPX Lacute W -74 +KPX Lacute Y -100 +KPX Lacute Yacute -100 +KPX Lacute Ydieresis -100 +KPX Lacute quoteright -92 +KPX Lacute y -55 +KPX Lacute yacute -55 +KPX Lacute ydieresis -55 +KPX Lcaron quoteright -92 +KPX Lcaron y -55 +KPX Lcaron yacute -55 +KPX Lcaron ydieresis -55 +KPX Lcommaaccent T -92 +KPX Lcommaaccent Tcaron -92 +KPX Lcommaaccent Tcommaaccent -92 +KPX Lcommaaccent V -100 +KPX Lcommaaccent W -74 +KPX Lcommaaccent Y -100 +KPX Lcommaaccent Yacute -100 +KPX Lcommaaccent Ydieresis -100 +KPX Lcommaaccent quoteright -92 +KPX Lcommaaccent y -55 +KPX Lcommaaccent yacute -55 +KPX Lcommaaccent ydieresis -55 +KPX Lslash T -92 +KPX Lslash Tcaron -92 +KPX Lslash Tcommaaccent -92 +KPX Lslash V -100 +KPX Lslash W -74 +KPX Lslash Y -100 +KPX Lslash Yacute -100 +KPX Lslash Ydieresis -100 +KPX Lslash quoteright -92 +KPX Lslash y -55 +KPX Lslash yacute -55 +KPX Lslash ydieresis -55 +KPX N A -35 +KPX N Aacute -35 +KPX N Abreve -35 +KPX N Acircumflex -35 +KPX N Adieresis -35 +KPX N Agrave -35 +KPX N Amacron -35 +KPX N Aogonek -35 +KPX N Aring -35 +KPX N Atilde -35 +KPX Nacute A -35 +KPX Nacute Aacute -35 +KPX Nacute Abreve -35 +KPX Nacute Acircumflex -35 +KPX Nacute Adieresis -35 +KPX Nacute Agrave -35 +KPX Nacute Amacron -35 +KPX Nacute Aogonek -35 +KPX Nacute Aring -35 +KPX Nacute Atilde -35 +KPX Ncaron A -35 +KPX Ncaron Aacute -35 +KPX Ncaron Abreve -35 +KPX Ncaron Acircumflex -35 +KPX Ncaron Adieresis -35 +KPX Ncaron Agrave -35 +KPX Ncaron Amacron -35 +KPX Ncaron Aogonek -35 +KPX Ncaron Aring -35 +KPX Ncaron Atilde -35 +KPX Ncommaaccent A -35 +KPX Ncommaaccent Aacute -35 +KPX Ncommaaccent Abreve -35 +KPX Ncommaaccent Acircumflex -35 +KPX Ncommaaccent Adieresis -35 +KPX Ncommaaccent Agrave -35 +KPX Ncommaaccent Amacron -35 +KPX Ncommaaccent Aogonek -35 +KPX Ncommaaccent Aring -35 +KPX Ncommaaccent Atilde -35 +KPX Ntilde A -35 +KPX Ntilde Aacute -35 +KPX Ntilde Abreve -35 +KPX Ntilde Acircumflex -35 +KPX Ntilde Adieresis -35 +KPX Ntilde Agrave -35 +KPX Ntilde Amacron -35 +KPX Ntilde Aogonek -35 +KPX Ntilde Aring -35 +KPX Ntilde Atilde -35 +KPX O A -35 +KPX O Aacute -35 +KPX O Abreve -35 +KPX O Acircumflex -35 +KPX O Adieresis -35 +KPX O Agrave -35 +KPX O Amacron -35 +KPX O Aogonek -35 +KPX O Aring -35 +KPX O Atilde -35 +KPX O T -40 +KPX O Tcaron -40 +KPX O Tcommaaccent -40 +KPX O V -50 +KPX O W -35 +KPX O X -40 +KPX O Y -50 +KPX O Yacute -50 +KPX O Ydieresis -50 +KPX Oacute A -35 +KPX Oacute Aacute -35 +KPX Oacute Abreve -35 +KPX Oacute Acircumflex -35 +KPX Oacute Adieresis -35 +KPX Oacute Agrave -35 +KPX Oacute Amacron -35 +KPX Oacute Aogonek -35 +KPX Oacute Aring -35 +KPX Oacute Atilde -35 +KPX Oacute T -40 +KPX Oacute Tcaron -40 +KPX Oacute Tcommaaccent -40 +KPX Oacute V -50 +KPX Oacute W -35 +KPX Oacute X -40 +KPX Oacute Y -50 +KPX Oacute Yacute -50 +KPX Oacute Ydieresis -50 +KPX Ocircumflex A -35 +KPX Ocircumflex Aacute -35 +KPX Ocircumflex Abreve -35 +KPX Ocircumflex Acircumflex -35 +KPX Ocircumflex Adieresis -35 +KPX Ocircumflex Agrave -35 +KPX Ocircumflex Amacron -35 +KPX Ocircumflex Aogonek -35 +KPX Ocircumflex Aring -35 +KPX Ocircumflex Atilde -35 +KPX Ocircumflex T -40 +KPX Ocircumflex Tcaron -40 +KPX Ocircumflex Tcommaaccent -40 +KPX Ocircumflex V -50 +KPX Ocircumflex W -35 +KPX Ocircumflex X -40 +KPX Ocircumflex Y -50 +KPX Ocircumflex Yacute -50 +KPX Ocircumflex Ydieresis -50 +KPX Odieresis A -35 +KPX Odieresis Aacute -35 +KPX Odieresis Abreve -35 +KPX Odieresis Acircumflex -35 +KPX Odieresis Adieresis -35 +KPX Odieresis Agrave -35 +KPX Odieresis Amacron -35 +KPX Odieresis Aogonek -35 +KPX Odieresis Aring -35 +KPX Odieresis Atilde -35 +KPX Odieresis T -40 +KPX Odieresis Tcaron -40 +KPX Odieresis Tcommaaccent -40 +KPX Odieresis V -50 +KPX Odieresis W -35 +KPX Odieresis X -40 +KPX Odieresis Y -50 +KPX Odieresis Yacute -50 +KPX Odieresis Ydieresis -50 +KPX Ograve A -35 +KPX Ograve Aacute -35 +KPX Ograve Abreve -35 +KPX Ograve Acircumflex -35 +KPX Ograve Adieresis -35 +KPX Ograve Agrave -35 +KPX Ograve Amacron -35 +KPX Ograve Aogonek -35 +KPX Ograve Aring -35 +KPX Ograve Atilde -35 +KPX Ograve T -40 +KPX Ograve Tcaron -40 +KPX Ograve Tcommaaccent -40 +KPX Ograve V -50 +KPX Ograve W -35 +KPX Ograve X -40 +KPX Ograve Y -50 +KPX Ograve Yacute -50 +KPX Ograve Ydieresis -50 +KPX Ohungarumlaut A -35 +KPX Ohungarumlaut Aacute -35 +KPX Ohungarumlaut Abreve -35 +KPX Ohungarumlaut Acircumflex -35 +KPX Ohungarumlaut Adieresis -35 +KPX Ohungarumlaut Agrave -35 +KPX Ohungarumlaut Amacron -35 +KPX Ohungarumlaut Aogonek -35 +KPX Ohungarumlaut Aring -35 +KPX Ohungarumlaut Atilde -35 +KPX Ohungarumlaut T -40 +KPX Ohungarumlaut Tcaron -40 +KPX Ohungarumlaut Tcommaaccent -40 +KPX Ohungarumlaut V -50 +KPX Ohungarumlaut W -35 +KPX Ohungarumlaut X -40 +KPX Ohungarumlaut Y -50 +KPX Ohungarumlaut Yacute -50 +KPX Ohungarumlaut Ydieresis -50 +KPX Omacron A -35 +KPX Omacron Aacute -35 +KPX Omacron Abreve -35 +KPX Omacron Acircumflex -35 +KPX Omacron Adieresis -35 +KPX Omacron Agrave -35 +KPX Omacron Amacron -35 +KPX Omacron Aogonek -35 +KPX Omacron Aring -35 +KPX Omacron Atilde -35 +KPX Omacron T -40 +KPX Omacron Tcaron -40 +KPX Omacron Tcommaaccent -40 +KPX Omacron V -50 +KPX Omacron W -35 +KPX Omacron X -40 +KPX Omacron Y -50 +KPX Omacron Yacute -50 +KPX Omacron Ydieresis -50 +KPX Oslash A -35 +KPX Oslash Aacute -35 +KPX Oslash Abreve -35 +KPX Oslash Acircumflex -35 +KPX Oslash Adieresis -35 +KPX Oslash Agrave -35 +KPX Oslash Amacron -35 +KPX Oslash Aogonek -35 +KPX Oslash Aring -35 +KPX Oslash Atilde -35 +KPX Oslash T -40 +KPX Oslash Tcaron -40 +KPX Oslash Tcommaaccent -40 +KPX Oslash V -50 +KPX Oslash W -35 +KPX Oslash X -40 +KPX Oslash Y -50 +KPX Oslash Yacute -50 +KPX Oslash Ydieresis -50 +KPX Otilde A -35 +KPX Otilde Aacute -35 +KPX Otilde Abreve -35 +KPX Otilde Acircumflex -35 +KPX Otilde Adieresis -35 +KPX Otilde Agrave -35 +KPX Otilde Amacron -35 +KPX Otilde Aogonek -35 +KPX Otilde Aring -35 +KPX Otilde Atilde -35 +KPX Otilde T -40 +KPX Otilde Tcaron -40 +KPX Otilde Tcommaaccent -40 +KPX Otilde V -50 +KPX Otilde W -35 +KPX Otilde X -40 +KPX Otilde Y -50 +KPX Otilde Yacute -50 +KPX Otilde Ydieresis -50 +KPX P A -92 +KPX P Aacute -92 +KPX P Abreve -92 +KPX P Acircumflex -92 +KPX P Adieresis -92 +KPX P Agrave -92 +KPX P Amacron -92 +KPX P Aogonek -92 +KPX P Aring -92 +KPX P Atilde -92 +KPX P a -15 +KPX P aacute -15 +KPX P abreve -15 +KPX P acircumflex -15 +KPX P adieresis -15 +KPX P agrave -15 +KPX P amacron -15 +KPX P aogonek -15 +KPX P aring -15 +KPX P atilde -15 +KPX P comma -111 +KPX P period -111 +KPX Q U -10 +KPX Q Uacute -10 +KPX Q Ucircumflex -10 +KPX Q Udieresis -10 +KPX Q Ugrave -10 +KPX Q Uhungarumlaut -10 +KPX Q Umacron -10 +KPX Q Uogonek -10 +KPX Q Uring -10 +KPX R O -40 +KPX R Oacute -40 +KPX R Ocircumflex -40 +KPX R Odieresis -40 +KPX R Ograve -40 +KPX R Ohungarumlaut -40 +KPX R Omacron -40 +KPX R Oslash -40 +KPX R Otilde -40 +KPX R T -60 +KPX R Tcaron -60 +KPX R Tcommaaccent -60 +KPX R U -40 +KPX R Uacute -40 +KPX R Ucircumflex -40 +KPX R Udieresis -40 +KPX R Ugrave -40 +KPX R Uhungarumlaut -40 +KPX R Umacron -40 +KPX R Uogonek -40 +KPX R Uring -40 +KPX R V -80 +KPX R W -55 +KPX R Y -65 +KPX R Yacute -65 +KPX R Ydieresis -65 +KPX Racute O -40 +KPX Racute Oacute -40 +KPX Racute Ocircumflex -40 +KPX Racute Odieresis -40 +KPX Racute Ograve -40 +KPX Racute Ohungarumlaut -40 +KPX Racute Omacron -40 +KPX Racute Oslash -40 +KPX Racute Otilde -40 +KPX Racute T -60 +KPX Racute Tcaron -60 +KPX Racute Tcommaaccent -60 +KPX Racute U -40 +KPX Racute Uacute -40 +KPX Racute Ucircumflex -40 +KPX Racute Udieresis -40 +KPX Racute Ugrave -40 +KPX Racute Uhungarumlaut -40 +KPX Racute Umacron -40 +KPX Racute Uogonek -40 +KPX Racute Uring -40 +KPX Racute V -80 +KPX Racute W -55 +KPX Racute Y -65 +KPX Racute Yacute -65 +KPX Racute Ydieresis -65 +KPX Rcaron O -40 +KPX Rcaron Oacute -40 +KPX Rcaron Ocircumflex -40 +KPX Rcaron Odieresis -40 +KPX Rcaron Ograve -40 +KPX Rcaron Ohungarumlaut -40 +KPX Rcaron Omacron -40 +KPX Rcaron Oslash -40 +KPX Rcaron Otilde -40 +KPX Rcaron T -60 +KPX Rcaron Tcaron -60 +KPX Rcaron Tcommaaccent -60 +KPX Rcaron U -40 +KPX Rcaron Uacute -40 +KPX Rcaron Ucircumflex -40 +KPX Rcaron Udieresis -40 +KPX Rcaron Ugrave -40 +KPX Rcaron Uhungarumlaut -40 +KPX Rcaron Umacron -40 +KPX Rcaron Uogonek -40 +KPX Rcaron Uring -40 +KPX Rcaron V -80 +KPX Rcaron W -55 +KPX Rcaron Y -65 +KPX Rcaron Yacute -65 +KPX Rcaron Ydieresis -65 +KPX Rcommaaccent O -40 +KPX Rcommaaccent Oacute -40 +KPX Rcommaaccent Ocircumflex -40 +KPX Rcommaaccent Odieresis -40 +KPX Rcommaaccent Ograve -40 +KPX Rcommaaccent Ohungarumlaut -40 +KPX Rcommaaccent Omacron -40 +KPX Rcommaaccent Oslash -40 +KPX Rcommaaccent Otilde -40 +KPX Rcommaaccent T -60 +KPX Rcommaaccent Tcaron -60 +KPX Rcommaaccent Tcommaaccent -60 +KPX Rcommaaccent U -40 +KPX Rcommaaccent Uacute -40 +KPX Rcommaaccent Ucircumflex -40 +KPX Rcommaaccent Udieresis -40 +KPX Rcommaaccent Ugrave -40 +KPX Rcommaaccent Uhungarumlaut -40 +KPX Rcommaaccent Umacron -40 +KPX Rcommaaccent Uogonek -40 +KPX Rcommaaccent Uring -40 +KPX Rcommaaccent V -80 +KPX Rcommaaccent W -55 +KPX Rcommaaccent Y -65 +KPX Rcommaaccent Yacute -65 +KPX Rcommaaccent Ydieresis -65 +KPX T A -93 +KPX T Aacute -93 +KPX T Abreve -93 +KPX T Acircumflex -93 +KPX T Adieresis -93 +KPX T Agrave -93 +KPX T Amacron -93 +KPX T Aogonek -93 +KPX T Aring -93 +KPX T Atilde -93 +KPX T O -18 +KPX T Oacute -18 +KPX T Ocircumflex -18 +KPX T Odieresis -18 +KPX T Ograve -18 +KPX T Ohungarumlaut -18 +KPX T Omacron -18 +KPX T Oslash -18 +KPX T Otilde -18 +KPX T a -80 +KPX T aacute -80 +KPX T abreve -80 +KPX T acircumflex -80 +KPX T adieresis -40 +KPX T agrave -40 +KPX T amacron -40 +KPX T aogonek -80 +KPX T aring -80 +KPX T atilde -40 +KPX T colon -50 +KPX T comma -74 +KPX T e -70 +KPX T eacute -70 +KPX T ecaron -70 +KPX T ecircumflex -70 +KPX T edieresis -30 +KPX T edotaccent -70 +KPX T egrave -70 +KPX T emacron -30 +KPX T eogonek -70 +KPX T hyphen -92 +KPX T i -35 +KPX T iacute -35 +KPX T iogonek -35 +KPX T o -80 +KPX T oacute -80 +KPX T ocircumflex -80 +KPX T odieresis -80 +KPX T ograve -80 +KPX T ohungarumlaut -80 +KPX T omacron -80 +KPX T oslash -80 +KPX T otilde -80 +KPX T period -74 +KPX T r -35 +KPX T racute -35 +KPX T rcaron -35 +KPX T rcommaaccent -35 +KPX T semicolon -55 +KPX T u -45 +KPX T uacute -45 +KPX T ucircumflex -45 +KPX T udieresis -45 +KPX T ugrave -45 +KPX T uhungarumlaut -45 +KPX T umacron -45 +KPX T uogonek -45 +KPX T uring -45 +KPX T w -80 +KPX T y -80 +KPX T yacute -80 +KPX T ydieresis -80 +KPX Tcaron A -93 +KPX Tcaron Aacute -93 +KPX Tcaron Abreve -93 +KPX Tcaron Acircumflex -93 +KPX Tcaron Adieresis -93 +KPX Tcaron Agrave -93 +KPX Tcaron Amacron -93 +KPX Tcaron Aogonek -93 +KPX Tcaron Aring -93 +KPX Tcaron Atilde -93 +KPX Tcaron O -18 +KPX Tcaron Oacute -18 +KPX Tcaron Ocircumflex -18 +KPX Tcaron Odieresis -18 +KPX Tcaron Ograve -18 +KPX Tcaron Ohungarumlaut -18 +KPX Tcaron Omacron -18 +KPX Tcaron Oslash -18 +KPX Tcaron Otilde -18 +KPX Tcaron a -80 +KPX Tcaron aacute -80 +KPX Tcaron abreve -80 +KPX Tcaron acircumflex -80 +KPX Tcaron adieresis -40 +KPX Tcaron agrave -40 +KPX Tcaron amacron -40 +KPX Tcaron aogonek -80 +KPX Tcaron aring -80 +KPX Tcaron atilde -40 +KPX Tcaron colon -50 +KPX Tcaron comma -74 +KPX Tcaron e -70 +KPX Tcaron eacute -70 +KPX Tcaron ecaron -70 +KPX Tcaron ecircumflex -30 +KPX Tcaron edieresis -30 +KPX Tcaron edotaccent -70 +KPX Tcaron egrave -70 +KPX Tcaron emacron -30 +KPX Tcaron eogonek -70 +KPX Tcaron hyphen -92 +KPX Tcaron i -35 +KPX Tcaron iacute -35 +KPX Tcaron iogonek -35 +KPX Tcaron o -80 +KPX Tcaron oacute -80 +KPX Tcaron ocircumflex -80 +KPX Tcaron odieresis -80 +KPX Tcaron ograve -80 +KPX Tcaron ohungarumlaut -80 +KPX Tcaron omacron -80 +KPX Tcaron oslash -80 +KPX Tcaron otilde -80 +KPX Tcaron period -74 +KPX Tcaron r -35 +KPX Tcaron racute -35 +KPX Tcaron rcaron -35 +KPX Tcaron rcommaaccent -35 +KPX Tcaron semicolon -55 +KPX Tcaron u -45 +KPX Tcaron uacute -45 +KPX Tcaron ucircumflex -45 +KPX Tcaron udieresis -45 +KPX Tcaron ugrave -45 +KPX Tcaron uhungarumlaut -45 +KPX Tcaron umacron -45 +KPX Tcaron uogonek -45 +KPX Tcaron uring -45 +KPX Tcaron w -80 +KPX Tcaron y -80 +KPX Tcaron yacute -80 +KPX Tcaron ydieresis -80 +KPX Tcommaaccent A -93 +KPX Tcommaaccent Aacute -93 +KPX Tcommaaccent Abreve -93 +KPX Tcommaaccent Acircumflex -93 +KPX Tcommaaccent Adieresis -93 +KPX Tcommaaccent Agrave -93 +KPX Tcommaaccent Amacron -93 +KPX Tcommaaccent Aogonek -93 +KPX Tcommaaccent Aring -93 +KPX Tcommaaccent Atilde -93 +KPX Tcommaaccent O -18 +KPX Tcommaaccent Oacute -18 +KPX Tcommaaccent Ocircumflex -18 +KPX Tcommaaccent Odieresis -18 +KPX Tcommaaccent Ograve -18 +KPX Tcommaaccent Ohungarumlaut -18 +KPX Tcommaaccent Omacron -18 +KPX Tcommaaccent Oslash -18 +KPX Tcommaaccent Otilde -18 +KPX Tcommaaccent a -80 +KPX Tcommaaccent aacute -80 +KPX Tcommaaccent abreve -80 +KPX Tcommaaccent acircumflex -80 +KPX Tcommaaccent adieresis -40 +KPX Tcommaaccent agrave -40 +KPX Tcommaaccent amacron -40 +KPX Tcommaaccent aogonek -80 +KPX Tcommaaccent aring -80 +KPX Tcommaaccent atilde -40 +KPX Tcommaaccent colon -50 +KPX Tcommaaccent comma -74 +KPX Tcommaaccent e -70 +KPX Tcommaaccent eacute -70 +KPX Tcommaaccent ecaron -70 +KPX Tcommaaccent ecircumflex -30 +KPX Tcommaaccent edieresis -30 +KPX Tcommaaccent edotaccent -70 +KPX Tcommaaccent egrave -30 +KPX Tcommaaccent emacron -70 +KPX Tcommaaccent eogonek -70 +KPX Tcommaaccent hyphen -92 +KPX Tcommaaccent i -35 +KPX Tcommaaccent iacute -35 +KPX Tcommaaccent iogonek -35 +KPX Tcommaaccent o -80 +KPX Tcommaaccent oacute -80 +KPX Tcommaaccent ocircumflex -80 +KPX Tcommaaccent odieresis -80 +KPX Tcommaaccent ograve -80 +KPX Tcommaaccent ohungarumlaut -80 +KPX Tcommaaccent omacron -80 +KPX Tcommaaccent oslash -80 +KPX Tcommaaccent otilde -80 +KPX Tcommaaccent period -74 +KPX Tcommaaccent r -35 +KPX Tcommaaccent racute -35 +KPX Tcommaaccent rcaron -35 +KPX Tcommaaccent rcommaaccent -35 +KPX Tcommaaccent semicolon -55 +KPX Tcommaaccent u -45 +KPX Tcommaaccent uacute -45 +KPX Tcommaaccent ucircumflex -45 +KPX Tcommaaccent udieresis -45 +KPX Tcommaaccent ugrave -45 +KPX Tcommaaccent uhungarumlaut -45 +KPX Tcommaaccent umacron -45 +KPX Tcommaaccent uogonek -45 +KPX Tcommaaccent uring -45 +KPX Tcommaaccent w -80 +KPX Tcommaaccent y -80 +KPX Tcommaaccent yacute -80 +KPX Tcommaaccent ydieresis -80 +KPX U A -40 +KPX U Aacute -40 +KPX U Abreve -40 +KPX U Acircumflex -40 +KPX U Adieresis -40 +KPX U Agrave -40 +KPX U Amacron -40 +KPX U Aogonek -40 +KPX U Aring -40 +KPX U Atilde -40 +KPX Uacute A -40 +KPX Uacute Aacute -40 +KPX Uacute Abreve -40 +KPX Uacute Acircumflex -40 +KPX Uacute Adieresis -40 +KPX Uacute Agrave -40 +KPX Uacute Amacron -40 +KPX Uacute Aogonek -40 +KPX Uacute Aring -40 +KPX Uacute Atilde -40 +KPX Ucircumflex A -40 +KPX Ucircumflex Aacute -40 +KPX Ucircumflex Abreve -40 +KPX Ucircumflex Acircumflex -40 +KPX Ucircumflex Adieresis -40 +KPX Ucircumflex Agrave -40 +KPX Ucircumflex Amacron -40 +KPX Ucircumflex Aogonek -40 +KPX Ucircumflex Aring -40 +KPX Ucircumflex Atilde -40 +KPX Udieresis A -40 +KPX Udieresis Aacute -40 +KPX Udieresis Abreve -40 +KPX Udieresis Acircumflex -40 +KPX Udieresis Adieresis -40 +KPX Udieresis Agrave -40 +KPX Udieresis Amacron -40 +KPX Udieresis Aogonek -40 +KPX Udieresis Aring -40 +KPX Udieresis Atilde -40 +KPX Ugrave A -40 +KPX Ugrave Aacute -40 +KPX Ugrave Abreve -40 +KPX Ugrave Acircumflex -40 +KPX Ugrave Adieresis -40 +KPX Ugrave Agrave -40 +KPX Ugrave Amacron -40 +KPX Ugrave Aogonek -40 +KPX Ugrave Aring -40 +KPX Ugrave Atilde -40 +KPX Uhungarumlaut A -40 +KPX Uhungarumlaut Aacute -40 +KPX Uhungarumlaut Abreve -40 +KPX Uhungarumlaut Acircumflex -40 +KPX Uhungarumlaut Adieresis -40 +KPX Uhungarumlaut Agrave -40 +KPX Uhungarumlaut Amacron -40 +KPX Uhungarumlaut Aogonek -40 +KPX Uhungarumlaut Aring -40 +KPX Uhungarumlaut Atilde -40 +KPX Umacron A -40 +KPX Umacron Aacute -40 +KPX Umacron Abreve -40 +KPX Umacron Acircumflex -40 +KPX Umacron Adieresis -40 +KPX Umacron Agrave -40 +KPX Umacron Amacron -40 +KPX Umacron Aogonek -40 +KPX Umacron Aring -40 +KPX Umacron Atilde -40 +KPX Uogonek A -40 +KPX Uogonek Aacute -40 +KPX Uogonek Abreve -40 +KPX Uogonek Acircumflex -40 +KPX Uogonek Adieresis -40 +KPX Uogonek Agrave -40 +KPX Uogonek Amacron -40 +KPX Uogonek Aogonek -40 +KPX Uogonek Aring -40 +KPX Uogonek Atilde -40 +KPX Uring A -40 +KPX Uring Aacute -40 +KPX Uring Abreve -40 +KPX Uring Acircumflex -40 +KPX Uring Adieresis -40 +KPX Uring Agrave -40 +KPX Uring Amacron -40 +KPX Uring Aogonek -40 +KPX Uring Aring -40 +KPX Uring Atilde -40 +KPX V A -135 +KPX V Aacute -135 +KPX V Abreve -135 +KPX V Acircumflex -135 +KPX V Adieresis -135 +KPX V Agrave -135 +KPX V Amacron -135 +KPX V Aogonek -135 +KPX V Aring -135 +KPX V Atilde -135 +KPX V G -15 +KPX V Gbreve -15 +KPX V Gcommaaccent -15 +KPX V O -40 +KPX V Oacute -40 +KPX V Ocircumflex -40 +KPX V Odieresis -40 +KPX V Ograve -40 +KPX V Ohungarumlaut -40 +KPX V Omacron -40 +KPX V Oslash -40 +KPX V Otilde -40 +KPX V a -111 +KPX V aacute -111 +KPX V abreve -111 +KPX V acircumflex -71 +KPX V adieresis -71 +KPX V agrave -71 +KPX V amacron -71 +KPX V aogonek -111 +KPX V aring -111 +KPX V atilde -71 +KPX V colon -74 +KPX V comma -129 +KPX V e -111 +KPX V eacute -111 +KPX V ecaron -71 +KPX V ecircumflex -71 +KPX V edieresis -71 +KPX V edotaccent -111 +KPX V egrave -71 +KPX V emacron -71 +KPX V eogonek -111 +KPX V hyphen -100 +KPX V i -60 +KPX V iacute -60 +KPX V icircumflex -20 +KPX V idieresis -20 +KPX V igrave -20 +KPX V imacron -20 +KPX V iogonek -60 +KPX V o -129 +KPX V oacute -129 +KPX V ocircumflex -129 +KPX V odieresis -89 +KPX V ograve -89 +KPX V ohungarumlaut -129 +KPX V omacron -89 +KPX V oslash -129 +KPX V otilde -89 +KPX V period -129 +KPX V semicolon -74 +KPX V u -75 +KPX V uacute -75 +KPX V ucircumflex -75 +KPX V udieresis -75 +KPX V ugrave -75 +KPX V uhungarumlaut -75 +KPX V umacron -75 +KPX V uogonek -75 +KPX V uring -75 +KPX W A -120 +KPX W Aacute -120 +KPX W Abreve -120 +KPX W Acircumflex -120 +KPX W Adieresis -120 +KPX W Agrave -120 +KPX W Amacron -120 +KPX W Aogonek -120 +KPX W Aring -120 +KPX W Atilde -120 +KPX W O -10 +KPX W Oacute -10 +KPX W Ocircumflex -10 +KPX W Odieresis -10 +KPX W Ograve -10 +KPX W Ohungarumlaut -10 +KPX W Omacron -10 +KPX W Oslash -10 +KPX W Otilde -10 +KPX W a -80 +KPX W aacute -80 +KPX W abreve -80 +KPX W acircumflex -80 +KPX W adieresis -80 +KPX W agrave -80 +KPX W amacron -80 +KPX W aogonek -80 +KPX W aring -80 +KPX W atilde -80 +KPX W colon -37 +KPX W comma -92 +KPX W e -80 +KPX W eacute -80 +KPX W ecaron -80 +KPX W ecircumflex -80 +KPX W edieresis -40 +KPX W edotaccent -80 +KPX W egrave -40 +KPX W emacron -40 +KPX W eogonek -80 +KPX W hyphen -65 +KPX W i -40 +KPX W iacute -40 +KPX W iogonek -40 +KPX W o -80 +KPX W oacute -80 +KPX W ocircumflex -80 +KPX W odieresis -80 +KPX W ograve -80 +KPX W ohungarumlaut -80 +KPX W omacron -80 +KPX W oslash -80 +KPX W otilde -80 +KPX W period -92 +KPX W semicolon -37 +KPX W u -50 +KPX W uacute -50 +KPX W ucircumflex -50 +KPX W udieresis -50 +KPX W ugrave -50 +KPX W uhungarumlaut -50 +KPX W umacron -50 +KPX W uogonek -50 +KPX W uring -50 +KPX W y -73 +KPX W yacute -73 +KPX W ydieresis -73 +KPX Y A -120 +KPX Y Aacute -120 +KPX Y Abreve -120 +KPX Y Acircumflex -120 +KPX Y Adieresis -120 +KPX Y Agrave -120 +KPX Y Amacron -120 +KPX Y Aogonek -120 +KPX Y Aring -120 +KPX Y Atilde -120 +KPX Y O -30 +KPX Y Oacute -30 +KPX Y Ocircumflex -30 +KPX Y Odieresis -30 +KPX Y Ograve -30 +KPX Y Ohungarumlaut -30 +KPX Y Omacron -30 +KPX Y Oslash -30 +KPX Y Otilde -30 +KPX Y a -100 +KPX Y aacute -100 +KPX Y abreve -100 +KPX Y acircumflex -100 +KPX Y adieresis -60 +KPX Y agrave -60 +KPX Y amacron -60 +KPX Y aogonek -100 +KPX Y aring -100 +KPX Y atilde -60 +KPX Y colon -92 +KPX Y comma -129 +KPX Y e -100 +KPX Y eacute -100 +KPX Y ecaron -100 +KPX Y ecircumflex -100 +KPX Y edieresis -60 +KPX Y edotaccent -100 +KPX Y egrave -60 +KPX Y emacron -60 +KPX Y eogonek -100 +KPX Y hyphen -111 +KPX Y i -55 +KPX Y iacute -55 +KPX Y iogonek -55 +KPX Y o -110 +KPX Y oacute -110 +KPX Y ocircumflex -110 +KPX Y odieresis -70 +KPX Y ograve -70 +KPX Y ohungarumlaut -110 +KPX Y omacron -70 +KPX Y oslash -110 +KPX Y otilde -70 +KPX Y period -129 +KPX Y semicolon -92 +KPX Y u -111 +KPX Y uacute -111 +KPX Y ucircumflex -111 +KPX Y udieresis -71 +KPX Y ugrave -71 +KPX Y uhungarumlaut -111 +KPX Y umacron -71 +KPX Y uogonek -111 +KPX Y uring -111 +KPX Yacute A -120 +KPX Yacute Aacute -120 +KPX Yacute Abreve -120 +KPX Yacute Acircumflex -120 +KPX Yacute Adieresis -120 +KPX Yacute Agrave -120 +KPX Yacute Amacron -120 +KPX Yacute Aogonek -120 +KPX Yacute Aring -120 +KPX Yacute Atilde -120 +KPX Yacute O -30 +KPX Yacute Oacute -30 +KPX Yacute Ocircumflex -30 +KPX Yacute Odieresis -30 +KPX Yacute Ograve -30 +KPX Yacute Ohungarumlaut -30 +KPX Yacute Omacron -30 +KPX Yacute Oslash -30 +KPX Yacute Otilde -30 +KPX Yacute a -100 +KPX Yacute aacute -100 +KPX Yacute abreve -100 +KPX Yacute acircumflex -100 +KPX Yacute adieresis -60 +KPX Yacute agrave -60 +KPX Yacute amacron -60 +KPX Yacute aogonek -100 +KPX Yacute aring -100 +KPX Yacute atilde -60 +KPX Yacute colon -92 +KPX Yacute comma -129 +KPX Yacute e -100 +KPX Yacute eacute -100 +KPX Yacute ecaron -100 +KPX Yacute ecircumflex -100 +KPX Yacute edieresis -60 +KPX Yacute edotaccent -100 +KPX Yacute egrave -60 +KPX Yacute emacron -60 +KPX Yacute eogonek -100 +KPX Yacute hyphen -111 +KPX Yacute i -55 +KPX Yacute iacute -55 +KPX Yacute iogonek -55 +KPX Yacute o -110 +KPX Yacute oacute -110 +KPX Yacute ocircumflex -110 +KPX Yacute odieresis -70 +KPX Yacute ograve -70 +KPX Yacute ohungarumlaut -110 +KPX Yacute omacron -70 +KPX Yacute oslash -110 +KPX Yacute otilde -70 +KPX Yacute period -129 +KPX Yacute semicolon -92 +KPX Yacute u -111 +KPX Yacute uacute -111 +KPX Yacute ucircumflex -111 +KPX Yacute udieresis -71 +KPX Yacute ugrave -71 +KPX Yacute uhungarumlaut -111 +KPX Yacute umacron -71 +KPX Yacute uogonek -111 +KPX Yacute uring -111 +KPX Ydieresis A -120 +KPX Ydieresis Aacute -120 +KPX Ydieresis Abreve -120 +KPX Ydieresis Acircumflex -120 +KPX Ydieresis Adieresis -120 +KPX Ydieresis Agrave -120 +KPX Ydieresis Amacron -120 +KPX Ydieresis Aogonek -120 +KPX Ydieresis Aring -120 +KPX Ydieresis Atilde -120 +KPX Ydieresis O -30 +KPX Ydieresis Oacute -30 +KPX Ydieresis Ocircumflex -30 +KPX Ydieresis Odieresis -30 +KPX Ydieresis Ograve -30 +KPX Ydieresis Ohungarumlaut -30 +KPX Ydieresis Omacron -30 +KPX Ydieresis Oslash -30 +KPX Ydieresis Otilde -30 +KPX Ydieresis a -100 +KPX Ydieresis aacute -100 +KPX Ydieresis abreve -100 +KPX Ydieresis acircumflex -100 +KPX Ydieresis adieresis -60 +KPX Ydieresis agrave -60 +KPX Ydieresis amacron -60 +KPX Ydieresis aogonek -100 +KPX Ydieresis aring -100 +KPX Ydieresis atilde -100 +KPX Ydieresis colon -92 +KPX Ydieresis comma -129 +KPX Ydieresis e -100 +KPX Ydieresis eacute -100 +KPX Ydieresis ecaron -100 +KPX Ydieresis ecircumflex -100 +KPX Ydieresis edieresis -60 +KPX Ydieresis edotaccent -100 +KPX Ydieresis egrave -60 +KPX Ydieresis emacron -60 +KPX Ydieresis eogonek -100 +KPX Ydieresis hyphen -111 +KPX Ydieresis i -55 +KPX Ydieresis iacute -55 +KPX Ydieresis iogonek -55 +KPX Ydieresis o -110 +KPX Ydieresis oacute -110 +KPX Ydieresis ocircumflex -110 +KPX Ydieresis odieresis -70 +KPX Ydieresis ograve -70 +KPX Ydieresis ohungarumlaut -110 +KPX Ydieresis omacron -70 +KPX Ydieresis oslash -110 +KPX Ydieresis otilde -70 +KPX Ydieresis period -129 +KPX Ydieresis semicolon -92 +KPX Ydieresis u -111 +KPX Ydieresis uacute -111 +KPX Ydieresis ucircumflex -111 +KPX Ydieresis udieresis -71 +KPX Ydieresis ugrave -71 +KPX Ydieresis uhungarumlaut -111 +KPX Ydieresis umacron -71 +KPX Ydieresis uogonek -111 +KPX Ydieresis uring -111 +KPX a v -20 +KPX a w -15 +KPX aacute v -20 +KPX aacute w -15 +KPX abreve v -20 +KPX abreve w -15 +KPX acircumflex v -20 +KPX acircumflex w -15 +KPX adieresis v -20 +KPX adieresis w -15 +KPX agrave v -20 +KPX agrave w -15 +KPX amacron v -20 +KPX amacron w -15 +KPX aogonek v -20 +KPX aogonek w -15 +KPX aring v -20 +KPX aring w -15 +KPX atilde v -20 +KPX atilde w -15 +KPX b period -40 +KPX b u -20 +KPX b uacute -20 +KPX b ucircumflex -20 +KPX b udieresis -20 +KPX b ugrave -20 +KPX b uhungarumlaut -20 +KPX b umacron -20 +KPX b uogonek -20 +KPX b uring -20 +KPX b v -15 +KPX c y -15 +KPX c yacute -15 +KPX c ydieresis -15 +KPX cacute y -15 +KPX cacute yacute -15 +KPX cacute ydieresis -15 +KPX ccaron y -15 +KPX ccaron yacute -15 +KPX ccaron ydieresis -15 +KPX ccedilla y -15 +KPX ccedilla yacute -15 +KPX ccedilla ydieresis -15 +KPX comma quotedblright -70 +KPX comma quoteright -70 +KPX e g -15 +KPX e gbreve -15 +KPX e gcommaaccent -15 +KPX e v -25 +KPX e w -25 +KPX e x -15 +KPX e y -15 +KPX e yacute -15 +KPX e ydieresis -15 +KPX eacute g -15 +KPX eacute gbreve -15 +KPX eacute gcommaaccent -15 +KPX eacute v -25 +KPX eacute w -25 +KPX eacute x -15 +KPX eacute y -15 +KPX eacute yacute -15 +KPX eacute ydieresis -15 +KPX ecaron g -15 +KPX ecaron gbreve -15 +KPX ecaron gcommaaccent -15 +KPX ecaron v -25 +KPX ecaron w -25 +KPX ecaron x -15 +KPX ecaron y -15 +KPX ecaron yacute -15 +KPX ecaron ydieresis -15 +KPX ecircumflex g -15 +KPX ecircumflex gbreve -15 +KPX ecircumflex gcommaaccent -15 +KPX ecircumflex v -25 +KPX ecircumflex w -25 +KPX ecircumflex x -15 +KPX ecircumflex y -15 +KPX ecircumflex yacute -15 +KPX ecircumflex ydieresis -15 +KPX edieresis g -15 +KPX edieresis gbreve -15 +KPX edieresis gcommaaccent -15 +KPX edieresis v -25 +KPX edieresis w -25 +KPX edieresis x -15 +KPX edieresis y -15 +KPX edieresis yacute -15 +KPX edieresis ydieresis -15 +KPX edotaccent g -15 +KPX edotaccent gbreve -15 +KPX edotaccent gcommaaccent -15 +KPX edotaccent v -25 +KPX edotaccent w -25 +KPX edotaccent x -15 +KPX edotaccent y -15 +KPX edotaccent yacute -15 +KPX edotaccent ydieresis -15 +KPX egrave g -15 +KPX egrave gbreve -15 +KPX egrave gcommaaccent -15 +KPX egrave v -25 +KPX egrave w -25 +KPX egrave x -15 +KPX egrave y -15 +KPX egrave yacute -15 +KPX egrave ydieresis -15 +KPX emacron g -15 +KPX emacron gbreve -15 +KPX emacron gcommaaccent -15 +KPX emacron v -25 +KPX emacron w -25 +KPX emacron x -15 +KPX emacron y -15 +KPX emacron yacute -15 +KPX emacron ydieresis -15 +KPX eogonek g -15 +KPX eogonek gbreve -15 +KPX eogonek gcommaaccent -15 +KPX eogonek v -25 +KPX eogonek w -25 +KPX eogonek x -15 +KPX eogonek y -15 +KPX eogonek yacute -15 +KPX eogonek ydieresis -15 +KPX f a -10 +KPX f aacute -10 +KPX f abreve -10 +KPX f acircumflex -10 +KPX f adieresis -10 +KPX f agrave -10 +KPX f amacron -10 +KPX f aogonek -10 +KPX f aring -10 +KPX f atilde -10 +KPX f dotlessi -50 +KPX f f -25 +KPX f i -20 +KPX f iacute -20 +KPX f quoteright 55 +KPX g a -5 +KPX g aacute -5 +KPX g abreve -5 +KPX g acircumflex -5 +KPX g adieresis -5 +KPX g agrave -5 +KPX g amacron -5 +KPX g aogonek -5 +KPX g aring -5 +KPX g atilde -5 +KPX gbreve a -5 +KPX gbreve aacute -5 +KPX gbreve abreve -5 +KPX gbreve acircumflex -5 +KPX gbreve adieresis -5 +KPX gbreve agrave -5 +KPX gbreve amacron -5 +KPX gbreve aogonek -5 +KPX gbreve aring -5 +KPX gbreve atilde -5 +KPX gcommaaccent a -5 +KPX gcommaaccent aacute -5 +KPX gcommaaccent abreve -5 +KPX gcommaaccent acircumflex -5 +KPX gcommaaccent adieresis -5 +KPX gcommaaccent agrave -5 +KPX gcommaaccent amacron -5 +KPX gcommaaccent aogonek -5 +KPX gcommaaccent aring -5 +KPX gcommaaccent atilde -5 +KPX h y -5 +KPX h yacute -5 +KPX h ydieresis -5 +KPX i v -25 +KPX iacute v -25 +KPX icircumflex v -25 +KPX idieresis v -25 +KPX igrave v -25 +KPX imacron v -25 +KPX iogonek v -25 +KPX k e -10 +KPX k eacute -10 +KPX k ecaron -10 +KPX k ecircumflex -10 +KPX k edieresis -10 +KPX k edotaccent -10 +KPX k egrave -10 +KPX k emacron -10 +KPX k eogonek -10 +KPX k o -10 +KPX k oacute -10 +KPX k ocircumflex -10 +KPX k odieresis -10 +KPX k ograve -10 +KPX k ohungarumlaut -10 +KPX k omacron -10 +KPX k oslash -10 +KPX k otilde -10 +KPX k y -15 +KPX k yacute -15 +KPX k ydieresis -15 +KPX kcommaaccent e -10 +KPX kcommaaccent eacute -10 +KPX kcommaaccent ecaron -10 +KPX kcommaaccent ecircumflex -10 +KPX kcommaaccent edieresis -10 +KPX kcommaaccent edotaccent -10 +KPX kcommaaccent egrave -10 +KPX kcommaaccent emacron -10 +KPX kcommaaccent eogonek -10 +KPX kcommaaccent o -10 +KPX kcommaaccent oacute -10 +KPX kcommaaccent ocircumflex -10 +KPX kcommaaccent odieresis -10 +KPX kcommaaccent ograve -10 +KPX kcommaaccent ohungarumlaut -10 +KPX kcommaaccent omacron -10 +KPX kcommaaccent oslash -10 +KPX kcommaaccent otilde -10 +KPX kcommaaccent y -15 +KPX kcommaaccent yacute -15 +KPX kcommaaccent ydieresis -15 +KPX l w -10 +KPX lacute w -10 +KPX lcommaaccent w -10 +KPX lslash w -10 +KPX n v -40 +KPX n y -15 +KPX n yacute -15 +KPX n ydieresis -15 +KPX nacute v -40 +KPX nacute y -15 +KPX nacute yacute -15 +KPX nacute ydieresis -15 +KPX ncaron v -40 +KPX ncaron y -15 +KPX ncaron yacute -15 +KPX ncaron ydieresis -15 +KPX ncommaaccent v -40 +KPX ncommaaccent y -15 +KPX ncommaaccent yacute -15 +KPX ncommaaccent ydieresis -15 +KPX ntilde v -40 +KPX ntilde y -15 +KPX ntilde yacute -15 +KPX ntilde ydieresis -15 +KPX o v -15 +KPX o w -25 +KPX o y -10 +KPX o yacute -10 +KPX o ydieresis -10 +KPX oacute v -15 +KPX oacute w -25 +KPX oacute y -10 +KPX oacute yacute -10 +KPX oacute ydieresis -10 +KPX ocircumflex v -15 +KPX ocircumflex w -25 +KPX ocircumflex y -10 +KPX ocircumflex yacute -10 +KPX ocircumflex ydieresis -10 +KPX odieresis v -15 +KPX odieresis w -25 +KPX odieresis y -10 +KPX odieresis yacute -10 +KPX odieresis ydieresis -10 +KPX ograve v -15 +KPX ograve w -25 +KPX ograve y -10 +KPX ograve yacute -10 +KPX ograve ydieresis -10 +KPX ohungarumlaut v -15 +KPX ohungarumlaut w -25 +KPX ohungarumlaut y -10 +KPX ohungarumlaut yacute -10 +KPX ohungarumlaut ydieresis -10 +KPX omacron v -15 +KPX omacron w -25 +KPX omacron y -10 +KPX omacron yacute -10 +KPX omacron ydieresis -10 +KPX oslash v -15 +KPX oslash w -25 +KPX oslash y -10 +KPX oslash yacute -10 +KPX oslash ydieresis -10 +KPX otilde v -15 +KPX otilde w -25 +KPX otilde y -10 +KPX otilde yacute -10 +KPX otilde ydieresis -10 +KPX p y -10 +KPX p yacute -10 +KPX p ydieresis -10 +KPX period quotedblright -70 +KPX period quoteright -70 +KPX quotedblleft A -80 +KPX quotedblleft Aacute -80 +KPX quotedblleft Abreve -80 +KPX quotedblleft Acircumflex -80 +KPX quotedblleft Adieresis -80 +KPX quotedblleft Agrave -80 +KPX quotedblleft Amacron -80 +KPX quotedblleft Aogonek -80 +KPX quotedblleft Aring -80 +KPX quotedblleft Atilde -80 +KPX quoteleft A -80 +KPX quoteleft Aacute -80 +KPX quoteleft Abreve -80 +KPX quoteleft Acircumflex -80 +KPX quoteleft Adieresis -80 +KPX quoteleft Agrave -80 +KPX quoteleft Amacron -80 +KPX quoteleft Aogonek -80 +KPX quoteleft Aring -80 +KPX quoteleft Atilde -80 +KPX quoteleft quoteleft -74 +KPX quoteright d -50 +KPX quoteright dcroat -50 +KPX quoteright l -10 +KPX quoteright lacute -10 +KPX quoteright lcommaaccent -10 +KPX quoteright lslash -10 +KPX quoteright quoteright -74 +KPX quoteright r -50 +KPX quoteright racute -50 +KPX quoteright rcaron -50 +KPX quoteright rcommaaccent -50 +KPX quoteright s -55 +KPX quoteright sacute -55 +KPX quoteright scaron -55 +KPX quoteright scedilla -55 +KPX quoteright scommaaccent -55 +KPX quoteright space -74 +KPX quoteright t -18 +KPX quoteright tcommaaccent -18 +KPX quoteright v -50 +KPX r comma -40 +KPX r g -18 +KPX r gbreve -18 +KPX r gcommaaccent -18 +KPX r hyphen -20 +KPX r period -55 +KPX racute comma -40 +KPX racute g -18 +KPX racute gbreve -18 +KPX racute gcommaaccent -18 +KPX racute hyphen -20 +KPX racute period -55 +KPX rcaron comma -40 +KPX rcaron g -18 +KPX rcaron gbreve -18 +KPX rcaron gcommaaccent -18 +KPX rcaron hyphen -20 +KPX rcaron period -55 +KPX rcommaaccent comma -40 +KPX rcommaaccent g -18 +KPX rcommaaccent gbreve -18 +KPX rcommaaccent gcommaaccent -18 +KPX rcommaaccent hyphen -20 +KPX rcommaaccent period -55 +KPX space A -55 +KPX space Aacute -55 +KPX space Abreve -55 +KPX space Acircumflex -55 +KPX space Adieresis -55 +KPX space Agrave -55 +KPX space Amacron -55 +KPX space Aogonek -55 +KPX space Aring -55 +KPX space Atilde -55 +KPX space T -18 +KPX space Tcaron -18 +KPX space Tcommaaccent -18 +KPX space V -50 +KPX space W -30 +KPX space Y -90 +KPX space Yacute -90 +KPX space Ydieresis -90 +KPX v a -25 +KPX v aacute -25 +KPX v abreve -25 +KPX v acircumflex -25 +KPX v adieresis -25 +KPX v agrave -25 +KPX v amacron -25 +KPX v aogonek -25 +KPX v aring -25 +KPX v atilde -25 +KPX v comma -65 +KPX v e -15 +KPX v eacute -15 +KPX v ecaron -15 +KPX v ecircumflex -15 +KPX v edieresis -15 +KPX v edotaccent -15 +KPX v egrave -15 +KPX v emacron -15 +KPX v eogonek -15 +KPX v o -20 +KPX v oacute -20 +KPX v ocircumflex -20 +KPX v odieresis -20 +KPX v ograve -20 +KPX v ohungarumlaut -20 +KPX v omacron -20 +KPX v oslash -20 +KPX v otilde -20 +KPX v period -65 +KPX w a -10 +KPX w aacute -10 +KPX w abreve -10 +KPX w acircumflex -10 +KPX w adieresis -10 +KPX w agrave -10 +KPX w amacron -10 +KPX w aogonek -10 +KPX w aring -10 +KPX w atilde -10 +KPX w comma -65 +KPX w o -10 +KPX w oacute -10 +KPX w ocircumflex -10 +KPX w odieresis -10 +KPX w ograve -10 +KPX w ohungarumlaut -10 +KPX w omacron -10 +KPX w oslash -10 +KPX w otilde -10 +KPX w period -65 +KPX x e -15 +KPX x eacute -15 +KPX x ecaron -15 +KPX x ecircumflex -15 +KPX x edieresis -15 +KPX x edotaccent -15 +KPX x egrave -15 +KPX x emacron -15 +KPX x eogonek -15 +KPX y comma -65 +KPX y period -65 +KPX yacute comma -65 +KPX yacute period -65 +KPX ydieresis comma -65 +KPX ydieresis period -65 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/ZapfDingbats.afm b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/ZapfDingbats.afm new file mode 100644 index 000000000..b2745053e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/adobe14/ZapfDingbats.afm @@ -0,0 +1,225 @@ +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 15:14:13 1997 +Comment UniqueID 43082 +Comment VMusage 45775 55535 +FontName ZapfDingbats +FullName ITC Zapf Dingbats +FamilyName ZapfDingbats +Weight Medium +ItalicAngle 0 +IsFixedPitch false +CharacterSet Special +FontBBox -1 -143 981 820 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation. +EncodingScheme FontSpecific +StdHW 28 +StdVW 90 +StartCharMetrics 202 +C 32 ; WX 278 ; N space ; B 0 0 0 0 ; +C 33 ; WX 974 ; N a1 ; B 35 72 939 621 ; +C 34 ; WX 961 ; N a2 ; B 35 81 927 611 ; +C 35 ; WX 974 ; N a202 ; B 35 72 939 621 ; +C 36 ; WX 980 ; N a3 ; B 35 0 945 692 ; +C 37 ; WX 719 ; N a4 ; B 34 139 685 566 ; +C 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ; +C 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ; +C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ; +C 41 ; WX 690 ; N a117 ; B 34 138 655 553 ; +C 42 ; WX 960 ; N a11 ; B 35 123 925 568 ; +C 43 ; WX 939 ; N a12 ; B 35 134 904 559 ; +C 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ; +C 45 ; WX 855 ; N a14 ; B 34 59 820 632 ; +C 46 ; WX 911 ; N a15 ; B 35 50 876 642 ; +C 47 ; WX 933 ; N a16 ; B 35 139 899 550 ; +C 48 ; WX 911 ; N a105 ; B 35 50 876 642 ; +C 49 ; WX 945 ; N a17 ; B 35 139 909 553 ; +C 50 ; WX 974 ; N a18 ; B 35 104 938 587 ; +C 51 ; WX 755 ; N a19 ; B 34 -13 721 705 ; +C 52 ; WX 846 ; N a20 ; B 36 -14 811 705 ; +C 53 ; WX 762 ; N a21 ; B 35 0 727 692 ; +C 54 ; WX 761 ; N a22 ; B 35 0 727 692 ; +C 55 ; WX 571 ; N a23 ; B -1 -68 571 661 ; +C 56 ; WX 677 ; N a24 ; B 36 -13 642 705 ; +C 57 ; WX 763 ; N a25 ; B 35 0 728 692 ; +C 58 ; WX 760 ; N a26 ; B 35 0 726 692 ; +C 59 ; WX 759 ; N a27 ; B 35 0 725 692 ; +C 60 ; WX 754 ; N a28 ; B 35 0 720 692 ; +C 61 ; WX 494 ; N a6 ; B 35 0 460 692 ; +C 62 ; WX 552 ; N a7 ; B 35 0 517 692 ; +C 63 ; WX 537 ; N a8 ; B 35 0 503 692 ; +C 64 ; WX 577 ; N a9 ; B 35 96 542 596 ; +C 65 ; WX 692 ; N a10 ; B 35 -14 657 705 ; +C 66 ; WX 786 ; N a29 ; B 35 -14 751 705 ; +C 67 ; WX 788 ; N a30 ; B 35 -14 752 705 ; +C 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ; +C 69 ; WX 790 ; N a32 ; B 35 -14 756 705 ; +C 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ; +C 71 ; WX 794 ; N a34 ; B 35 -13 759 705 ; +C 72 ; WX 816 ; N a35 ; B 35 -14 782 705 ; +C 73 ; WX 823 ; N a36 ; B 35 -14 787 705 ; +C 74 ; WX 789 ; N a37 ; B 35 -14 754 705 ; +C 75 ; WX 841 ; N a38 ; B 35 -14 807 705 ; +C 76 ; WX 823 ; N a39 ; B 35 -14 789 705 ; +C 77 ; WX 833 ; N a40 ; B 35 -14 798 705 ; +C 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ; +C 79 ; WX 831 ; N a42 ; B 35 -14 796 705 ; +C 80 ; WX 923 ; N a43 ; B 35 -14 888 705 ; +C 81 ; WX 744 ; N a44 ; B 35 0 710 692 ; +C 82 ; WX 723 ; N a45 ; B 35 0 688 692 ; +C 83 ; WX 749 ; N a46 ; B 35 0 714 692 ; +C 84 ; WX 790 ; N a47 ; B 34 -14 756 705 ; +C 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ; +C 86 ; WX 695 ; N a49 ; B 35 -14 661 706 ; +C 87 ; WX 776 ; N a50 ; B 35 -6 741 699 ; +C 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ; +C 89 ; WX 792 ; N a52 ; B 35 -14 757 705 ; +C 90 ; WX 759 ; N a53 ; B 35 0 725 692 ; +C 91 ; WX 707 ; N a54 ; B 35 -13 672 704 ; +C 92 ; WX 708 ; N a55 ; B 35 -14 672 705 ; +C 93 ; WX 682 ; N a56 ; B 35 -14 647 705 ; +C 94 ; WX 701 ; N a57 ; B 35 -14 666 705 ; +C 95 ; WX 826 ; N a58 ; B 35 -14 791 705 ; +C 96 ; WX 815 ; N a59 ; B 35 -14 780 705 ; +C 97 ; WX 789 ; N a60 ; B 35 -14 754 705 ; +C 98 ; WX 789 ; N a61 ; B 35 -14 754 705 ; +C 99 ; WX 707 ; N a62 ; B 34 -14 673 705 ; +C 100 ; WX 687 ; N a63 ; B 36 0 651 692 ; +C 101 ; WX 696 ; N a64 ; B 35 0 661 691 ; +C 102 ; WX 689 ; N a65 ; B 35 0 655 692 ; +C 103 ; WX 786 ; N a66 ; B 34 -14 751 705 ; +C 104 ; WX 787 ; N a67 ; B 35 -14 752 705 ; +C 105 ; WX 713 ; N a68 ; B 35 -14 678 705 ; +C 106 ; WX 791 ; N a69 ; B 35 -14 756 705 ; +C 107 ; WX 785 ; N a70 ; B 36 -14 751 705 ; +C 108 ; WX 791 ; N a71 ; B 35 -14 757 705 ; +C 109 ; WX 873 ; N a72 ; B 35 -14 838 705 ; +C 110 ; WX 761 ; N a73 ; B 35 0 726 692 ; +C 111 ; WX 762 ; N a74 ; B 35 0 727 692 ; +C 112 ; WX 762 ; N a203 ; B 35 0 727 692 ; +C 113 ; WX 759 ; N a75 ; B 35 0 725 692 ; +C 114 ; WX 759 ; N a204 ; B 35 0 725 692 ; +C 115 ; WX 892 ; N a76 ; B 35 0 858 705 ; +C 116 ; WX 892 ; N a77 ; B 35 -14 858 692 ; +C 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ; +C 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ; +C 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ; +C 120 ; WX 138 ; N a82 ; B 35 0 104 692 ; +C 121 ; WX 277 ; N a83 ; B 35 0 242 692 ; +C 122 ; WX 415 ; N a84 ; B 35 0 380 692 ; +C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ; +C 124 ; WX 392 ; N a98 ; B 34 263 357 705 ; +C 125 ; WX 668 ; N a99 ; B 35 263 633 705 ; +C 126 ; WX 668 ; N a100 ; B 36 263 634 705 ; +C 128 ; WX 390 ; N a89 ; B 35 -14 356 705 ; +C 129 ; WX 390 ; N a90 ; B 35 -14 355 705 ; +C 130 ; WX 317 ; N a93 ; B 35 0 283 692 ; +C 131 ; WX 317 ; N a94 ; B 35 0 283 692 ; +C 132 ; WX 276 ; N a91 ; B 35 0 242 692 ; +C 133 ; WX 276 ; N a92 ; B 35 0 242 692 ; +C 134 ; WX 509 ; N a205 ; B 35 0 475 692 ; +C 135 ; WX 509 ; N a85 ; B 35 0 475 692 ; +C 136 ; WX 410 ; N a206 ; B 35 0 375 692 ; +C 137 ; WX 410 ; N a86 ; B 35 0 375 692 ; +C 138 ; WX 234 ; N a87 ; B 35 -14 199 705 ; +C 139 ; WX 234 ; N a88 ; B 35 -14 199 705 ; +C 140 ; WX 334 ; N a95 ; B 35 0 299 692 ; +C 141 ; WX 334 ; N a96 ; B 35 0 299 692 ; +C 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ; +C 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ; +C 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ; +C 164 ; WX 910 ; N a104 ; B 35 40 875 651 ; +C 165 ; WX 667 ; N a106 ; B 35 -14 633 705 ; +C 166 ; WX 760 ; N a107 ; B 35 -14 726 705 ; +C 167 ; WX 760 ; N a108 ; B 0 121 758 569 ; +C 168 ; WX 776 ; N a112 ; B 35 0 741 705 ; +C 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ; +C 170 ; WX 694 ; N a110 ; B 35 -14 659 705 ; +C 171 ; WX 626 ; N a109 ; B 34 0 591 705 ; +C 172 ; WX 788 ; N a120 ; B 35 -14 754 705 ; +C 173 ; WX 788 ; N a121 ; B 35 -14 754 705 ; +C 174 ; WX 788 ; N a122 ; B 35 -14 754 705 ; +C 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ; +C 176 ; WX 788 ; N a124 ; B 35 -14 754 705 ; +C 177 ; WX 788 ; N a125 ; B 35 -14 754 705 ; +C 178 ; WX 788 ; N a126 ; B 35 -14 754 705 ; +C 179 ; WX 788 ; N a127 ; B 35 -14 754 705 ; +C 180 ; WX 788 ; N a128 ; B 35 -14 754 705 ; +C 181 ; WX 788 ; N a129 ; B 35 -14 754 705 ; +C 182 ; WX 788 ; N a130 ; B 35 -14 754 705 ; +C 183 ; WX 788 ; N a131 ; B 35 -14 754 705 ; +C 184 ; WX 788 ; N a132 ; B 35 -14 754 705 ; +C 185 ; WX 788 ; N a133 ; B 35 -14 754 705 ; +C 186 ; WX 788 ; N a134 ; B 35 -14 754 705 ; +C 187 ; WX 788 ; N a135 ; B 35 -14 754 705 ; +C 188 ; WX 788 ; N a136 ; B 35 -14 754 705 ; +C 189 ; WX 788 ; N a137 ; B 35 -14 754 705 ; +C 190 ; WX 788 ; N a138 ; B 35 -14 754 705 ; +C 191 ; WX 788 ; N a139 ; B 35 -14 754 705 ; +C 192 ; WX 788 ; N a140 ; B 35 -14 754 705 ; +C 193 ; WX 788 ; N a141 ; B 35 -14 754 705 ; +C 194 ; WX 788 ; N a142 ; B 35 -14 754 705 ; +C 195 ; WX 788 ; N a143 ; B 35 -14 754 705 ; +C 196 ; WX 788 ; N a144 ; B 35 -14 754 705 ; +C 197 ; WX 788 ; N a145 ; B 35 -14 754 705 ; +C 198 ; WX 788 ; N a146 ; B 35 -14 754 705 ; +C 199 ; WX 788 ; N a147 ; B 35 -14 754 705 ; +C 200 ; WX 788 ; N a148 ; B 35 -14 754 705 ; +C 201 ; WX 788 ; N a149 ; B 35 -14 754 705 ; +C 202 ; WX 788 ; N a150 ; B 35 -14 754 705 ; +C 203 ; WX 788 ; N a151 ; B 35 -14 754 705 ; +C 204 ; WX 788 ; N a152 ; B 35 -14 754 705 ; +C 205 ; WX 788 ; N a153 ; B 35 -14 754 705 ; +C 206 ; WX 788 ; N a154 ; B 35 -14 754 705 ; +C 207 ; WX 788 ; N a155 ; B 35 -14 754 705 ; +C 208 ; WX 788 ; N a156 ; B 35 -14 754 705 ; +C 209 ; WX 788 ; N a157 ; B 35 -14 754 705 ; +C 210 ; WX 788 ; N a158 ; B 35 -14 754 705 ; +C 211 ; WX 788 ; N a159 ; B 35 -14 754 705 ; +C 212 ; WX 894 ; N a160 ; B 35 58 860 634 ; +C 213 ; WX 838 ; N a161 ; B 35 152 803 540 ; +C 214 ; WX 1016 ; N a163 ; B 34 152 981 540 ; +C 215 ; WX 458 ; N a164 ; B 35 -127 422 820 ; +C 216 ; WX 748 ; N a196 ; B 35 94 698 597 ; +C 217 ; WX 924 ; N a165 ; B 35 140 890 552 ; +C 218 ; WX 748 ; N a192 ; B 35 94 698 597 ; +C 219 ; WX 918 ; N a166 ; B 35 166 884 526 ; +C 220 ; WX 927 ; N a167 ; B 35 32 892 660 ; +C 221 ; WX 928 ; N a168 ; B 35 129 891 562 ; +C 222 ; WX 928 ; N a169 ; B 35 128 893 563 ; +C 223 ; WX 834 ; N a170 ; B 35 155 799 537 ; +C 224 ; WX 873 ; N a171 ; B 35 93 838 599 ; +C 225 ; WX 828 ; N a172 ; B 35 104 791 588 ; +C 226 ; WX 924 ; N a173 ; B 35 98 889 594 ; +C 227 ; WX 924 ; N a162 ; B 35 98 889 594 ; +C 228 ; WX 917 ; N a174 ; B 35 0 882 692 ; +C 229 ; WX 930 ; N a175 ; B 35 84 896 608 ; +C 230 ; WX 931 ; N a176 ; B 35 84 896 608 ; +C 231 ; WX 463 ; N a177 ; B 35 -99 429 791 ; +C 232 ; WX 883 ; N a178 ; B 35 71 848 623 ; +C 233 ; WX 836 ; N a179 ; B 35 44 802 648 ; +C 234 ; WX 836 ; N a193 ; B 35 44 802 648 ; +C 235 ; WX 867 ; N a180 ; B 35 101 832 591 ; +C 236 ; WX 867 ; N a199 ; B 35 101 832 591 ; +C 237 ; WX 696 ; N a181 ; B 35 44 661 648 ; +C 238 ; WX 696 ; N a200 ; B 35 44 661 648 ; +C 239 ; WX 874 ; N a182 ; B 35 77 840 619 ; +C 241 ; WX 874 ; N a201 ; B 35 73 840 615 ; +C 242 ; WX 760 ; N a183 ; B 35 0 725 692 ; +C 243 ; WX 946 ; N a184 ; B 35 160 911 533 ; +C 244 ; WX 771 ; N a197 ; B 34 37 736 655 ; +C 245 ; WX 865 ; N a185 ; B 35 207 830 481 ; +C 246 ; WX 771 ; N a194 ; B 34 37 736 655 ; +C 247 ; WX 888 ; N a198 ; B 34 -19 853 712 ; +C 248 ; WX 967 ; N a186 ; B 35 124 932 568 ; +C 249 ; WX 888 ; N a195 ; B 34 -19 853 712 ; +C 250 ; WX 831 ; N a187 ; B 35 113 796 579 ; +C 251 ; WX 873 ; N a188 ; B 36 118 838 578 ; +C 252 ; WX 927 ; N a189 ; B 35 150 891 542 ; +C 253 ; WX 970 ; N a190 ; B 35 76 931 616 ; +C 254 ; WX 918 ; N a191 ; B 34 99 884 593 ; +EndCharMetrics +EndFontMetrics diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/zapfdingbats.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/zapfdingbats.txt new file mode 100644 index 000000000..2fc60ba98 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/fonts/zapfdingbats.txt @@ -0,0 +1,247 @@ +# ----------------------------------------------------------- +# Copyright 2002, 2010, 2015 Adobe Systems Incorporated. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or +# without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# Neither the name of Adobe Systems Incorporated nor the names +# of its contributors may be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------- +# Name: ITC Zapf Dingbats Glyph List +# Table version: 2.0 +# Date: September 20, 2002 +# URL: https://github.com/adobe-type-tools/agl-aglfn +# +# Format: two semicolon-delimited fields: +# (1) glyph name--upper/lowercase letters and digits +# (2) Unicode scalar value--four uppercase hexadecimal digits +# +a100;275E +a101;2761 +a102;2762 +a103;2763 +a104;2764 +a105;2710 +a106;2765 +a107;2766 +a108;2767 +a109;2660 +a10;2721 +a110;2665 +a111;2666 +a112;2663 +a117;2709 +a118;2708 +a119;2707 +a11;261B +a120;2460 +a121;2461 +a122;2462 +a123;2463 +a124;2464 +a125;2465 +a126;2466 +a127;2467 +a128;2468 +a129;2469 +a12;261E +a130;2776 +a131;2777 +a132;2778 +a133;2779 +a134;277A +a135;277B +a136;277C +a137;277D +a138;277E +a139;277F +a13;270C +a140;2780 +a141;2781 +a142;2782 +a143;2783 +a144;2784 +a145;2785 +a146;2786 +a147;2787 +a148;2788 +a149;2789 +a14;270D +a150;278A +a151;278B +a152;278C +a153;278D +a154;278E +a155;278F +a156;2790 +a157;2791 +a158;2792 +a159;2793 +a15;270E +a160;2794 +a161;2192 +a162;27A3 +a163;2194 +a164;2195 +a165;2799 +a166;279B +a167;279C +a168;279D +a169;279E +a16;270F +a170;279F +a171;27A0 +a172;27A1 +a173;27A2 +a174;27A4 +a175;27A5 +a176;27A6 +a177;27A7 +a178;27A8 +a179;27A9 +a17;2711 +a180;27AB +a181;27AD +a182;27AF +a183;27B2 +a184;27B3 +a185;27B5 +a186;27B8 +a187;27BA +a188;27BB +a189;27BC +a18;2712 +a190;27BD +a191;27BE +a192;279A +a193;27AA +a194;27B6 +a195;27B9 +a196;2798 +a197;27B4 +a198;27B7 +a199;27AC +a19;2713 +a1;2701 +a200;27AE +a201;27B1 +a202;2703 +a203;2750 +a204;2752 +a205;276E +a206;2770 +a20;2714 +a21;2715 +a22;2716 +a23;2717 +a24;2718 +a25;2719 +a26;271A +a27;271B +a28;271C +a29;2722 +a2;2702 +a30;2723 +a31;2724 +a32;2725 +a33;2726 +a34;2727 +a35;2605 +a36;2729 +a37;272A +a38;272B +a39;272C +a3;2704 +a40;272D +a41;272E +a42;272F +a43;2730 +a44;2731 +a45;2732 +a46;2733 +a47;2734 +a48;2735 +a49;2736 +a4;260E +a50;2737 +a51;2738 +a52;2739 +a53;273A +a54;273B +a55;273C +a56;273D +a57;273E +a58;273F +a59;2740 +a5;2706 +a60;2741 +a61;2742 +a62;2743 +a63;2744 +a64;2745 +a65;2746 +a66;2747 +a67;2748 +a68;2749 +a69;274A +a6;271D +a70;274B +a71;25CF +a72;274D +a73;25A0 +a74;274F +a75;2751 +a76;25B2 +a77;25BC +a78;25C6 +a79;2756 +a7;271E +a81;25D7 +a82;2758 +a83;2759 +a84;275A +a85;276F +a86;2771 +a87;2772 +a88;2773 +a89;2768 +a8;271F +a90;2769 +a91;276C +a92;276D +a93;276A +a94;276B +a95;2774 +a96;2775 +a97;275B +a98;275C +a99;275D +a9;2720 +#END diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/hyphen/hyph_en_US.dic b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/hyphen/hyph_en_US.dic new file mode 100644 index 000000000..a1fd8793e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/hyphen/hyph_en_US.dic @@ -0,0 +1,11402 @@ +UTF-8 +LEFTHYPHENMIN 2 +RIGHTHYPHENMIN 3 +COMPOUNDLEFTHYPHENMIN 2 +COMPOUNDRIGHTHYPHENMIN 3 +1'. +1's./'=s,1,2 +1't./'=t,1,2 +1’. +1’s./’=s,1,2 +1’t./’=t,1,2 +NEXTLEVEL +.a2ch4 +.ad4der +.a2d +.ad1d4 +.a2f1t +.a2f +.a4l3t +.am5at +.4a1ma +.an5c +.a2n +.2ang4 +.an1i5m +.an1t4 +.an3te +.anti5s +.ant2i +.a4r5s2 +.2a2r +.ar4t2ie4 +.ar1ti +.ar4ty +.as3c +.as1p +.a2s1s +.aster5 +.a2tom5 +.a1to +.au1d +.av4i +.awn4 +.ba4g +.ba5na +.ba2n +.bas4e +.ber4 +.be5r1a +.be3s1m +.4bes4 +.b4e5s2to +.bri2 +.but4ti +.bu4t3t2 +.cam4pe +.1ca +.ca4m1p +.can5c +.ca2n +.capa5b +.ca1pa +.car5ol +.c2a2r +.ca4t +.ce4la +.2ch4 +.chill5i +.ch4il2 +.chil1l +.1ci2 +.cit5r +.2c1it +.co3e2 +.1co +.co4r +.cor5n1er +.corn2e +.de4moi2 +.d4em +.de1mo +.de3o +.de3r1a +.de3r1i +.de1s4c +.des2 +.dic1t2io5 +.3di2c1t +.do4t +.1do +.du4c +.1du +.du4m1b5 +.earth5 +.ear2t +.e2a2r +.eas3i +.2e1b4 +.eer4 +.eg2 +.e2l5d +.el3em +.enam3 +.e1na +.en3g +.e2n3s2 +.eq5ui5t +.e1q +.equ2 +.eq2ui2 +.er4ri +.er1r4 +.es3 +.4eu3 +.eye5 +.fes3 +.for5mer +.1fo +.fo2r +.for1m +.for2me +.1ga2 +.ge2 +.gen3t4 +.1gen +.ge5o2g +.1geo +.1g2i5a +.gi4b +.go4r +.1go +.hand5i +.ha2n +.h4and +.ha4n5k2 +.he2 +.hero5i2 +.h2ero +.h1es3 +.he4t3 +.hi3b +.hi3er +.h2ie4 +.hon5ey +.ho2n +.hon3o +.hov5 +.id4l +.2id +.idol3 +.i1do +.im3m +.im5p1i2n +.i4m1p +.im2pi +.in1 +.in3ci +.2ine2 +.4i4n2k2 +.2i2n3s2 +.ir5r4 +.4ir +.is4i +.ju3r +.la4cy +.la4m +.lat5er +.l4ath5 +.le2 +.leg5e +.len4 +.lep5 +.lev1 +.l2i4g +.li1g5a +.li2n +.l2i3o +.l1i4t +.ma1g5a5 +.1ma +.mal5o +.ma1n5a +.ma2n +.mar5ti +.m2a2r +.me2 +.mer3c +.me5ter +.me1te +.m2is1 +.mis4t5i +.mon3e +.1mo +.mo2n +.mo3ro +.mo2r +.mu5ta +.1mu +.mu2ta5b +.ni4c +.od2 +.od1d5 +.of5te +.o2ft +.or5a1to +.o1ra +.or3c +.or1d +.or3t +.os3 +.os4tl +.4oth3 +.out3 +.ou2 +.ped5al +.2p2ed +.p2e2d2a +.pe5te +.pe2t +.pe5tit +.p2i4e4 +.pio5n4 +.3p2i1o +.pi2t +.pre3m +.pr2 +.ra4c +.ran4t +.ra2n +.ratio5n1a +.ratio2n4 +.ra1t2io +.ree2 +.re5mit +.res2 +.re5stat +.res2t +.res1ta +.r2i4g +.ri2t5u +.ro4q +.ros5t +.row5d +.ru4d +.3s4c2i3e4 +.s1ci +.5se2l2f5 +.5se2l4ff +.5se2l2fi +.5se2l2fl2 +.sel1l5 +.se2n +.se5r2ie4 +.ser1i +.s2h2 +.si2 +.s3ing4 +.2s1in +.st4 +.sta5b2l2 +.s1ta +.s2tab +.s4y2 +.1ta4 +.te4 +.3ten5a2n +.te1na +.th2 +.ti2 +.til4 +.ti1m5o5 +.1tim +.ting4 +.2t1in +.t4i4n5k2 +.to1n4a +.1to +.to2n +.to4p +.top5i +.to2u5s +.tou2 +.trib5ut +.tr4ib +.u1n1a +.un3ce +.under5 +.un1de +.u2n1e +.u4n5k2 +.un5o +.un3u4 +.up3 +.ure3 +.us5a2 +.2us +.ven4de +.ve5r1a +.wil5i +.wi2 +.wil2 +.ye4 +4ab. +a5bal +a5ba2n +abe2 +ab5erd +ab2i5a +ab5i2t5ab +abi2t +abi1ta +ab5lat +ab2l2 +ab5o5l1iz +abol2i +4abr +ab5rog +ab3ul +a4c2a2r +a1ca +ac5ard +ac5aro +a5ceou2 +ac1er +a5che4t +a2ch +ache2 +4a2ci +a3c2ie4 +a2c1in +a3c2io +ac5rob +act5if2 +a2c1t +act5i4ff +act5i1fi +act5i3fl2 +ac3ul +ac4um +a2d +ad4d1in +ad1d4 +ad5er. +2adi +a3d4i3a +ad3i1ca +adi4er +ad2ie4 +a3d2io +a3dit +a5di1u +ad4le +ad3ow +a1do +ad5ra2n +a1dr +ad4su +a2d1s2 +4a1du +a3du2c +ad5um +ae4r +aer2i4e4 +aer1i +a2f +a4ff4 +a2fi +a2fl2 +a4f1f4 +a4gab +a1ga +aga4n +ag5el1l +a1ge4o +4ag4eu +ag1i +4ag4l2 +ag1n +a2go +3a3g4o4g +ag3o3ni +ago2n2 +a5guer +a2gue +ag5ul +a4gy +a3ha +a3he +a4h4l4 +a3ho +ai2 +a5i1a +a3ic. +ai5ly +a4i4n +ain5in +a2ini +a2i1n5o +ait5en +a2ite +a1j +ak1en +al5ab +al3a2d +a4l2a2r +4aldi4 +a2ld +2ale +al3end +a4lent2i +a1len1t +a5le5o +al1i +al4ia. +al2i1a +al2i4e4 +al5lev +al1l +al2le +4allic +all2i +4a2lm +a5log. +a4ly. +a1ly +4a2lys4 +5a5lys1t +5alyt +3alyz +4a1ma +a2m5ab +am3ag +ama5ra +am2a2r +am5asc +a4ma3tis +a4m5a1to +am5er1a +am3ic +am5if +am5i4ff +am5i1fi +am5i3fl2 +am5i1ly +am1in +am2i4no +a2mo +a5mo2n +amor5i +amo2r +amp5en +a4m1p +a2n +an3age +a1na +3ana1ly +a3n2a2r +an3ar3c +anar4i +a3nati +an2at +4and +ande4s2 +an1de +an3dis1 +an1dl +an4dow +an1do +a5nee +a3nen +an5e2st. +a1nes +a2nest +a3n4eu +2ang +ang5ie4 +an1gl2 +a4n1ic +a3nies +an2ie4 +an3i3f +an3i4ff +an3i3fi +an3i3fl2 +an4ime +an1im +a5nim1i +a5n2ine +an1in +an3i4o +a3n2ip +an3is2h +an3it +a3ni1u +an4kli +a4nk2 +an1k1l +5anniz +a4n1n2 +ano4 +an5ot +an4oth5 +an2sa2 +a2n1s2 +an4s1co +ans4c +an4s1n4 +an2sp +ans3po +an4st +an4su2r +an1su +anta2l4 +an1t +an1ta +an4t2ie4 +ant2i +4an1to +an2tr +an4tw4 +an3u1a +an3ul +a5nur +4ao +ap2a2r4 +a1pa +ap5at +ap5er3o +a3ph4er +4aphi +a4pilla +apil1l +ap5ill2a2r +ap3i2n +ap3i1ta +a3pi2tu +a2p2l2 +apo4c5 +ap5o1la +apor5i +a1p4or +apos3t +a1pos +aps5e4s +a2p1s2 +ap2se +a3pu +aque5 +aqu2 +2a2r +ar3a2c1t +a5rade +ara2d +ar5adis1 +ar2adi +ar3al +a5rame1te +aram3et +ar2an4g +ara2n +ara3p +ar4at +a5ra1t2io +ar5a1t2iv +a5rau +ar5av4 +araw4 +arbal4 +ar1b +ar4cha2n +ar1c +ar3cha +ar2ch +ar5d2ine +ard2i +ard1in4 +ar4dr +ar5eas +a3ree +ar3en1t +a5r2e2ss +ar4fi +ar1f +ar4fi +ar4f4l2 +ar4fl2 +ar1i +ar5i2al +ar2i3a +ar3i2a2n +a3ri5et +ar2ie4 +ar4im +ar5in2at +ar2i1na +ar3i1o +ar2iz +ar2mi +ar1m +ar5o5d +a5roni +aro2n +a3roo2 +ar2p +ar3q +arre4 +ar1r4 +ar4sa2 +a4rs2 +ar2s2h +4as. +a2s4ab +asa2 +as3an1t +asa2n +ashi4 +as2h +a5sia. +as2i1a +a3si1b +a3sic +5a5si4t +ask3i +ask2 +as4l2 +a4soc +a1so +as5ph +as4s2h +a2ss +as3ten +as1t4r +asu1r5a +a1su +asu2r +a2ta +at3ab2l2 +a2tab +at5ac +at3alo +ata2l +at5ap +ate5c +at5e2ch +at3e1go +ateg4 +at3en. +at3er1a +ater5n +a5ter1na +at3est +at5ev +4ath +ath5em +ath2e +a5the2n +at4ho +ath5om +4ati. +a5t2i1a +a2t5i5b +at1ic +at3if2 +at3i4ff +at3i1fi +at3i3fl2 +ation5a2r +a1t2io +atio2n +atio1n1a +at3i1tu +a4tog +a1to +a2tom +at5om2iz +a4top +a4tos2 +a1tr +at5rop +at4sk2 +a4t1s2 +at4tag +a4t3t2 +at1ta +at5te +at4th +a2tu +at5u1a +a4t5ue +at3ul +at3u1ra +a2ty +au4b +augh3 +au3gu +au4l2 +aun5d +au3r +au5si1b +a2us +a4ut5en +au1th +a2va +av3ag4 +a5va2n +av4e4no +av3er1a +av5ern +av5ery +av1i +avi4er +av2ie4 +av3ig +av5oc +a1vor +3away +aw3i2 +aw4ly +aws4 +ax4i5c +ax3i +ax4id +ay5al +aye4 +ays4 +azi4er +a2z1i +az2ie4 +az2z5i +a4z1z2 +5ba. +bad5ger +ba2d +ba4ge +bal1a +ban5dag +ba2n +b4and +ban1d2a +ban4e +ban3i +barbi5 +b2a2r +bar1b +bar2i4a +bar1i +bas4si +ba2ss +1bat +ba4z +2b1b +b2be +b3ber +bbi4na +4b1d +4be. +beak4 +bea2t3 +4be2d +b2e3d2a +be3de +b4e3di +be3gi +be5gu +1bel +be1l2i +be3lo +4be5m +be5n2ig +be5nu +4bes4 +be3sp +b2e5st4r +3bet +be1t5iz +be5tr +be3tw4 +be3w +be5y1o4 +2bf +2b4ff +2b1fi +2bfl2 +4b3h +bi2b +b2i4d +3b2ie4 +bi5en +bi4er +2b3if +2b3i4ff +2b3i1fi +2b3i3fl2 +1bil +bi3l2iz +bil1i +bin2a5r4 +bi1na +b4in4d +bi5net +b2ine +bi3o2gr +b2io +bi5ou2 +bi2t +3b2i3t2io +bi1ti +bi3tr +3bit5u1a +bi1tu +b5i4tz +b1j +bk4 +b2l2 +bl4ath5 +b4le. +blen4 +5ble1sp +bles2 +b3lis +b4lo +blun4t +4b1m +4b3n +bne5g +3bod +bod3i +bo4e +bol3ic +bol2i +bom4bi +bo4m1b +bo1n4a +bo2n +bon5at +3boo2 +5bor. +4b1o1ra +bor5d +5bore +5bori +5bos4 +b5o1ta +b4oth5 +bo4to +boun2d3 +bou2 +4bp +4brit +br4oth3 +2b5s2 +bsor4 +b1so +2bt +b2t4l +b4to +b3tr +buf4fer1 +bu4f1f +buffer1 +bu4ff +bu4ga +bu3l2i +bu1mi4 +bu4n +bunt4i +bun1t +bu3re +bus5ie4 +b2us +buss4e +bu2ss +5bust +4bu1ta +3bu1t2io +b4u1t2i +b5u1to +b1v +4b5w +5by. +bys4 +1ca +cab3in +ca1b2l2 +ca2ch4 +ca5den +ca2d +4cag4 +2c5ah +ca3lat +cal4la +cal1l +cal2l5in4 +call2i +4calo +c4an5d +ca2n +can4e +ca4n4ic +can5is +can3iz +can4ty +can1t +cany4 +ca5per +car5om +c2a2r +cast5er +cas5t2ig +cast2i +4cas4y +c4a4th +4ca1t2iv +cav5al +ca2va +c3c +ccha5 +c2ch +c3c2i4a +c1ci +ccom1pa5 +c1co +cco4m1p +cco2n4 +ccou3t +ccou2 +2ce. +4ced. +4ce1den +3cei2 +5cel. +3cel1l +1cen +3cenc +2cen4e +4ceni +3cen1t +3cep +ce5ram +cer1a +4ce1s4a2 +3ces1si +c2e2ss +ces5si5b +ces5t +cet4 +c5e4ta +cew4 +2ch +4ch. +4ch3ab +5cha4n1ic +cha2n +ch5a5nis +che2 +cheap3 +4ch4ed +ch5e5lo +3chemi +ch5ene +che2n +ch3er. +ch3e4r1s2 +4ch1in +5chi2ne. +ch2ine +ch5i5n2e2ss +chi1nes +5ch2ini +5ch2io +3chit +chi2z +3cho2 +ch4ti +1ci +3c2i1a +ci2a5b +ci2a5r +ci5c +4cier +c2ie4 +5c4i2f3ic. +ci1fi +5c4i2fic. +ci1fi +4c4i5i4 +ci4la +3cil1i +2cim +2cin +c4i1na +3cin2at +cin3em +c2ine +c1ing +c5ing. +5c2i1no +cio2n4 +c2io +4cipe4 +c2ip +ci3ph +4cip4ic +cip3i +4cis1ta +4cis1t2i +2c1it +ci1t3iz +ci1ti +5ciz +ck1 +ck3i +1c4l4 +4cl2a2r +c5la5ra1t2io +clar4at +5clare +cle4m +4clic +clim4 +c1ly4 +c5n +1co +co5ag +c4oa +coe2 +2cog +co4gr +coi4 +co3inc +col5i +5colo +col3o4r +com5er +co2me +co1n4a +co2n +c4one +con3g +con5t +co3pa +cop3ic +co4p2l2 +4cor1b +coro3n +cos4e +cov1 +cove4 +cow5a +co2z5e +co5z1i +c1q +cras5t +cr2as +5crat. +5crat1ic +cre3a2t +5c2r2ed +4c3re1ta +cre4v2 +cri2 +cri5f +cri5ff +cri5fi +cri5fl2 +c4rin +cr2is4 +5cri1ti +cro4p2l2 +crop5o +cros4e +cru4d +4c3s2 +2c1t +c2ta4b +c1ta +ct5ang +cta2n +c5tan1t +c2te +c3ter +c4t4ic1u +ctim3i +c1tim +ctu4r +c1tu +c4tw4 +cud5 +c4uf +c4u4ff +c4u1fi +c4u3fl2 +c4ui2 +cu5i1ty +5cul2i +cul4tis4 +cul1ti +cu4lt +3c4ul1tu2 +cu2ma +c3ume +cu4mi +3cun +cu3pi +cu5py +cu2r5a4b +cu1ra +cu5r2i3a +1c2us +cus1s4i +cu2ss +3c4ut +cu4t2ie4 +c4u1t2i +4c5u1t2iv +4cutr +1cy +c2ze4 +1d2a +5da. +2d3a4b +da2ch4 +4da2f +4da4ff4 +4da2fi +4da2fl2 +2dag +da2m2 +d2an3g +da2n +dard5 +d2a2r +dark5 +4dary +3dat +4da1t2iv +4da1to +5dav4 +dav5e +5day +d1b +d5c +d1d4 +2de. +dea2f5 +dea4ff4 +dea2fi +dea2fl2 +de4b5i2t +d2e1b +de4bo2n +deca2n4 +de1ca +de4cil +de1c2i +de5com +de1co +2d1ed +4dee. +de5if +dei2 +de5i4ff +de5i1fi +de5i3fl2 +del2i4e4 +del2i +de4l5i5q +de5lo +d4em +5dem. +3demic +dem5ic. +de5mil +de4mo2n3s2 +de1mo +demo2n +demo2r5 +1den +de4n2a2r +de1na +d4e3no +denti5f2 +den1t +dent2i +denti5ff +denti5fi +denti5fl2 +de3nu +de1p +de3pa +depi4 +de2pu +d3e1q +d4er1h4 +5der3m4 +d5ern5iz +de4r5s2 +des2 +d2es. +de1s2c +de2s5o +des3t2i +d2e3st4r +de4su +de1t +de2to +de1v +de2v3i4l +de1vi +4dey +4d1f +4d4ff +4d1fi +4d1fl2 +d4ga +d3ge4t +dg1i +d2gy +d1h2 +5di. +1d4i3a +dia5b +d4i4cam +di1ca +d4ice +3di2c1t +3d2id +5di3en +d2ie4 +d1if +d1i4ff +d1i1fi +d1i3fl2 +di3ge +d2ig +di4la1to +di1la +d1in +1di1na +3di2ne. +d2ine +5d2ini +di5niz +1d2io +dio5g +di4p2l2 +d2ip +d4ir2 +di1re +dir1t5i +dis1 +5disi +d4is3t +d2i1ti +1d2i1v +d1j +d5k2 +4d5la +3dle. +3dled +3dles. +dles2 +4d3l2e2ss +2d3lo +4d5lu +2d1ly +d1m +4d1n4 +1do +3do. +do5de +5doe +2d5of +2d5o4ff +2d5o2fi +2d5ofl2 +d4og +do4la +dol2i4 +do5lo4r +dom5iz +do3n2at +do2n +do1n1a +doni4 +doo3d +doo2 +do4p4p +d4or +3dos +4d5out +dou2 +do4v +3dox +d1p +1dr +drag5o2n2 +dra2go +4dr2ai2 +dre4 +dre2a5r +5dren +dr4i4b +dril4 +dro4p +4drow +5drupli +dru3p2l2 +4dry +2d1s2 +ds4p +d4sw2 +d4s4y +d2th +1du +d1u1a +du2c +d1u3ca +duc5er +4duct. +du2c1t +4duc4t1s2 +du5el +du4g +d3ul4e +dum4be +du4m1b +du4n +4dup +du4pe +d1v +d1w +d2y +5dyn +dy4s2e +dys5p +e1a4b +e3a2c1t +ea2d1 +ead5ie4 +e2adi +ea4ge +ea5ger +ea4l +eal5er +e2ale +eal3ou2 +eam3er +e5and +ea2n +ear3a +e2a2r +ear4c +ear5es +ear4ic +ear1i +ear4il +ear5k +ear2t +eart3e +ea5sp +e3a2ss +east3 +ea2t +eat5en +eath3i +e4ath +e5at3if2 +e5at3i4ff +e5at3i1fi +e5at3i3fl2 +e4a3tu +ea2v +eav3en +eav5i +eav5o +2e1b +e4bel. +e1bel +e4be2l1s2 +e4ben +e4bi2t +e3br +e4ca2d +e1ca +ecan5c +eca2n +ec1ca5 +ec3c +e1ce +ec5es1sa2 +ec2e2ss +e1c2i +e4cib +ec5ificat +eci1fi +ecifi1ca +ec5ificat +eci1fi +ecifi1ca +ec5i3f2ie4 +ec5i3fie4 +ec5i1fy +e2c3im +e2c1i4t +e5c2ite +e4clam +e1c4l4 +e4cl2us +e2col +e1co +e4com1m +e4compe +eco4m1p +e4con1c +eco2n +e2cor +ec3o1ra +eco5ro +e1cr +e4crem +ec4ta2n +e2c1t +ec1ta +ec4te +e1cu +e4cul +ec3u1la +2e2d2a +4ed3d4 +e4d1er +ede4s2 +4edi +e3d4i3a +ed3ib +ed3i1ca +ed3im +ed1it +edi5z +4e1do +e4dol +edo2n2 +e4dri +e1dr +e4dul +e1du +ed5u1l4o +ee2c +e4ed3i +ee2f +e1e4ff +ee2fi +ee2fl2 +eel3i +ee4ly +ee2m +ee4na +ee4p1 +ee2s4 +eest4 +ee4ty +e5ex +e1f +1e4ff +e1fi +e1fl2 +e4f3ere +efer1 +1e4f1f +e4fic +e1fi +e4fic +5ef2i1c4i +5efi1ci +efil4 +efil4 +e3f2i2ne +e2fin +e3fine +e2fin +ef5i5n2ite +ef2ini +efin2it +efi5n2ite +efini +efin2it +3efit +3efit +efor5es +e1fo +efo2r +e4fu4se. +e3fu +ef2us +4egal +e1ga +eger4 +eg5ib +eg4ic +eg5ing +e5git5 +eg5n +e4go. +e1go +e4gos +eg1ul +e5gur +5e1gy +e1h4 +eher4 +ei2 +e5ic +e2i5d +e2ig2 +ei5g4l2 +e3i4m1b +e3in3f +e3in4ff +e3in3fi +e3in3fl2 +e1ing +e5inst +e2i2n1s2 +eir4d +e4ir +e2it3e +e2i3th +e5i1ty +e1j +e4jud +ej5udi +eki4n +ek1i +ek4la +ek1l +e1la +e4la. +e4lac +e3l4an4d +ela2n +e4l5a1t2iv +e4law +elax1a4 +e3le2a +el5ebra +el2e1b +ele3br +5elec +e4led +el3e1ga +e5len +e4l1er +e1les2 +e2l2f +e2l4ff +e2l2fi +e2l2fl2 +el2i +e3libe4 +e4l5ic. +el3i1ca +e3lier +el2ie4 +el5i3gib +el2ig +el4igi +e5lim +e4l3ing +e3l2io +e2lis +el5is2h +e3l2iv3 +4ella +el1l +el4lab +ell4o4 +e5loc +el5og +el3op. +el2s2h +e2l1s2 +el4ta +e4lt +e5lud +el5ug +e4mac +e1ma +e4mag +e5ma2n +em5a1na +e4m5b +e1me +e2mel +e4met +em3i1ca +em2i4e4 +em5igra +em2ig4 +emi1gr +em1in2 +em5ine +em3i3ni +e4m2is +em5is2h +e5m4i2s1s +em3iz +5emniz +e4m1n +emo4g +e1mo +emo3n2i5o +emo2n +em3pi +e4m1p +e4mul +e1mu +em5u1la +emu3n2 +e3my +en5a2mo +e1na +e4nan1t +en2a2n +ench4er +en2ch +enche2 +en3dic +e5nea +e5nee +en3em +en5ero +en1er +en5e1si +e1nes +e2n5est +en3etr +e3ne4w +en5i4c3s2 +e5n2ie4 +e5nil +e3n2i4o +en3is2h +en3it +e5ni1u +5eniz +4e4n1n2 +4eno +e4no4g +e4nos +en3ov +en4sw2 +e2n1s2 +ent5age +en1t +en1ta +4enth1es +enth2e +en3u1a +en5uf +en5u4ff +en5u1fi +en5u3fl2 +e3ny. +4e4n3z +e5of +e5o4ff +e5o2fi +e5ofl2 +eo2g +e4oi4 +e3ol +eop3a2r +eo2pa +e1or +eo3re +eo5rol +eos4 +e4ot +eo4to +e5out +eou2 +e5ow +e2pa +e3p4ai2 +ep5anc +epa2n +e5pel +e3pen1t +ep5e5t2i1t2io +epe2t +epeti1ti +ephe4 +e4pli +e1p2l2 +e1po +e4prec +epr2 +ep5re1ca +e4p2r2ed +ep3re1h4 +e3pro +e4prob +ep4s4h +e2p1s2 +ep5ti5b +e2p1t +e4pu2t +ep5u1ta +e1q +equi3l +equ2 +eq2ui2 +e4q3ui3s +er1a +e2ra4b +4er4and +era2n +er3a2r +4er4ati. +2er1b +er4b2l2 +er3ch +er1c +er4che2 +2e2re. +e3re1a4l +ere5co +ere3in +erei2 +er5el. +er3e1mo +er5e1na +er5ence +4erene +er3en1t +ere4q +er5e2ss +er3es2t +eret4 +er1h4 +er1i +e1r2i3a4 +5erick1 +e3rien +er2ie4 +eri4er +er3in4e +e1r2i1o +4erit +er4i1u +er2i4v +e4ri1va +er3m4 +er4nis4 +4er3n2it +5erniz +er3no4 +2ero +er5ob +e5r2oc +ero4r +er1ou2 +e4r1s2 +er3set +er2se +ert3er +4er2tl +er3tw4 +4eru +eru4t +5erwau +er1w +e1s4a2 +e4sa2ge. +e4sages +es2c +e2s1ca +es5ca2n +e3scr +es5cu +e1s2e +e2sec +es5e1cr +e4s5enc +e4sert. +e4ser4t1s2 +e4ser1va +4es2h +e3sha +esh5e2n +e1si +e2sic +e2s2id +es5i1den +e4s5ig1n4a +es2ig +e2s5im +e2s4i4n +esis4te +e1sis +e5si4u +e5skin +esk2 +esk1i +es4mi +e2s1m +e2sol +e1so +es3olu +e2so2n +es5o1n1a4 +e1sp +e2s3per +es5pi1ra +esp4ir +es4pre +espr2 +2e2ss +es4si4b +es1si +esta2n4 +es1ta +es3t2ig +est2i +es5tim +4es2to +e3sto2n +2est4r +e5stro +estruc5 +e2su2r +e1su +es5ur1r4 +es4w2 +e2ta4b +e1ta +e3ten4d +e3teo +ethod3 +et1ic +e5tide +et2id +e2t1in4 +et2i4no +e5t4ir +e5t2i1t2io +eti1ti +et5i1t2iv +4e2t1n2 +et5o1n1a +e1to +eto2n +e3tra +e3tre +et3ric +et5rif +et5ri4ff +et5ri1fi +et5ri3fl2 +et3rog +et5ros +et3u1a +e1tu +et5ym +e1ty +e4t5z +4eu +e5un +e3up +eu3ro +e2us4 +eute4 +euti5l +e4u1t2i +eu5tr +eva2p5 +e1va +e2vas +ev5ast +e5vea +ev3el1l +eve4l3o +e5veng +even4i +ev1er +e5v2er1b +e1vi +ev3id +e2vi4l +e4v1in +e3v2i4v +e5voc +e5vu +e1wa +e4wag +e5wee +e3wh +ewil5 +ewi2 +ew3in4g +e3wit +1ex3p +5ey1c +5eye. +eys4 +1fa +4ff +ffa +fa3b2l2 +ffa3b2l2 +f4ab3r +ff4ab3r +fa4ce +ffa4ce +4fag +ffag +fa4i4n4 +fai2 +ffa4i4n4 +ffai2 +fal2l5e +fal1l +ffal2l5e +ffal1l +4f4a4ma +ff4a4ma +fam5is +ffam5is +5f2a2r +ff2a2r +far5th +ffar5th +fa3ta +ffa3ta +fa3th2e +f4ath +ffa3th2e +ff4ath +4fa1to +ffa1to +fau4lt5 +fau4l2 +ffau4lt5 +ffau4l2 +4f5b +ff5b +4fd +ffd +4fe. +ffe. +feas4 +ffeas4 +fe4ath3 +fea2t +ffe4ath3 +ffea2t +f2e4b +ff2e4b +4fe1ca +ffe1ca +5fe2c1t +ffe2c1t +2fed +ffed +fe3l2i +ffe3l2i +fe4mo +ffe4mo +fen2d +ffen2d +fen1d5e +ffen1d5e +fer1 +ffer1 +5fer1r4 +ffer1r4 +fev4 +ffev4 +4f1f +f4fes +ffes +f4f2ie4 +f1fi +ffie +f5f2in. +f2fin +ffin. +f2f5is +ffis +f4f2ly5 +ff4l2 +ffly +f2fy +ffy +4fh +ffh +1fi +1fi +f2i3a +fi1a +2f3ic. +2fic. +4f3ical +fi1ca +4fical +fi1ca +f3ica2n +fica2n +4ficate +4ficate +f3i1cen +fi1cen +fi3cer +fi3cer +f2i1c4i +fi1ci +5fi3c2i1a +5fi3c2i1a +5fic2ie4 +5fic2ie4 +4fi4c3s2 +4fi4c3s2 +fi3cu +fi3cu +fi5del +f2id +fid +fi5del +fight5 +f2ig +fig +fight5 +fil5i +fil1i +fil2l5in4 +fil1l +fill2i +fil2l5in4 +fil1l +fill2i +4fi1ly +4fi1ly +2fin +2fin +5fi1na +5fi1na +f4in2d5 +find +f2i2ne +fine +f1in3g +fin3g +f2i4n4n2 +fi4n1n2 +fis4t2i +fis1t2i +f4l2 +fl2 +f5l2e2ss +fles2 +fles2 +fl2e2ss +flin4 +flin4 +flo3re +flo3re +f2ly5 +fly +4fm +ffm +4fn +ffn +1fo +ffo +5fo2n +ffo2n +fon4de +f2ond +ffon4de +ff2ond +fon4t +ffon4t +fo2r +ffo2r +fo5rat +fo1ra +ffo5rat +ffo1ra +for5ay +ffor5ay +fore5t +ffore5t +for4i +ffor4i +for1t5a +ffor1t5a +fos5 +ffos5 +4f5p +ff5p +fra4t +ffra4t +f5rea +ff5rea +fres5c +ffres5c +fri2 +ffri2 +fril4 +ffril4 +frol5 +ffrol5 +2f3s +ff3s +2ft +fft +f4to +ff4to +f2ty +ff2ty +3fu +ffu +fu5el +ffu5el +4fug +ffug +fu4min +fu1mi +ffu4min +ffu1mi +fu5ne +ffu5ne +fu3ri +ffu3ri +fusi4 +f2us +ffusi4 +ff2us +fu2s4s +ffu2s4s +4fu1ta +ffu1ta +1fy +1ga +ga2f4 +ga4ff4 +ga2fi +ga2fl2 +5gal. +3gal1i +ga3lo +2gam +ga5met +g5a2mo +gan5is +ga2n +ga3niz +gani5za1 +4gano4 +gar5n4 +g2a2r +ga2ss4 +g4ath3 +4ga1t2iv +4gaz +g3b +gd4 +2ge. +2ged +geez4 +gel4in +gel2i +ge5lis +ge5l1iz +4ge1ly +1gen +ge4n2at +ge1na +g5e5niz +4g4eno +4geny +1geo +ge3om +g4ery +5ge1si +geth5 +4ge1to +ge4ty +ge4v +4g1g2 +g2ge +g3ger +gglu5 +ggl2 +g1go4 +gh3in +gh5out +ghou2 +gh4to +5gi. +1g2i4a +gi2a5r +g1ic +5gi3c2i1a +g2i1ci +g4i1co +gien5 +g2ie4 +5gies. +gil4 +g3i1men +3g4in. +g4in5ge +5g4i2n1s2 +5g2io +3g4ir +gir4l +g3is1l2 +gi4u +5g2iv +3giz +gl2 +gla4 +gl2ad5i +gla2d +5glas +1gle +gli4b +g3l2ig +3glo +glo3r +g1m +g4my +g1n4a +g4na. +gne4t4t2 +g1ni +g2n1in +g4n2i4o +g1no +g4no4n +1go +3go. +gob5 +5goe +3g4o4g +go3is +goi2 +go2n2 +4g3o3n1a +gon5do5 +g2ond +go3ni +5goo2 +go5riz +gor5ou2 +5gos. +gov1 +g3p +1gr +4gra1d2a +gra2d +g4r2ai2 +gra2n2 +5gra4ph. +g5ra3ph4er +5graph1ic +gr4aphi +4g3ra1phy +4gray +gre4n +4gress. +gr2e2ss +4grit +g4ro +gruf4 +gru4ff +gru1fi +gru3fl2 +gs2 +g5ste +gth3 +gu4a +3guar2d +gu2a2r +2gue +5gui5t +g2ui2 +3gun +3g2us +4gu4t +g3w +1gy +2g5y3n +gy5ra +h3ab4l2 +ha2ch4 +hae4m +hae4t +h5agu +ha3la +hala3m +ha4m +han4ci +ha2n +han4cy +5hand. +h4and +h2an4g +hang5er +han1g5o +h5a5niz +ha4n4k2 +han4te +han1t +ha2p3l2 +ha2p5t +ha3ra2n +h2a2r +ha5r2as +har2d +hard3e +har4le4 +har1l +harp5en +har2p +har5ter +ha2s5s +haun4 +5haz +haz3a1 +h1b +1hea2d1 +3he2a2r +he4ca2n +he1ca +h5ecat +h4ed +h4e5do5 +he3l4i +hel4lis +hel1l +hell2i +hel4ly +h5elo +he4m4p +he2n +he1na4 +hen5at +he1o5r +hep5 +h4er1a +hera3p +her4ba +h2er1b +here5a +h3ern +h5er1ou2 +h2ero +h3ery +h1es +he2s5p +he4t +he2t4ed +h4eu4 +h1f +h4ff +h1fi +h1fl2 +h1h +hi5a2n +h2i1a +hi4co +high5 +h2ig +h4il2 +himer4 +h4i1na +hion4e +h2io +hio2n +h2i4p +hir4l +h4ir +hi3ro +hir4p +hir4r4 +his3el +h4ise +h4i2s4s +hith5er +h2ith +hith2e +h2i2v +4hk +4h1l4 +hla2n4 +h2lo +hlo3ri +4h1m +hmet4 +2h1n +h5odiz +h5o2d1s2 +ho4g +ho1ge4 +hol5a2r +ho1la +3hol4e +ho4ma +ho2me3 +ho1n4a +ho2n +ho5ny +3hood +hoo2 +hoo2n4 +hor5at +ho1ra +ho5r2is +hort3e +ho5ru +hos4e +ho5sen +hos1p +1ho2us +hou2 +house3 +hov5el +4h5p +4hr4 +hree5 +hro5niz +hro2n +hro3po +4h1s2 +h4s2h +h4t2a2r +h1ta +ht1en +ht5es +h4ty +hu4g +hu4min +hu1mi +hun5ke +hu4nk2 +hun4t +hus3t4 +h2us +hu4t +h1w +h4war4t +hw2a2r +hy3pe +hy3ph +hy2s +2i1a +i2al +fi2al +iam4 +fiam4 +iam5e1te +fiam5e1te +i2a2n +fi2a2n +4ianc +fianc +ian3i +fian3i +4ian4t +fian4t +ia5pe +fia5pe +ia2ss4 +fia2ss4 +i4a1t2iv +fi4a1t2iv +ia4tric +ia1tr +fia4tric +fia1tr +i4a2tu +fi4a2tu +ibe4 +fibe4 +ib3er1a +fib3er1a +ib5ert +fib5ert +ib5i1a +fib5i1a +ib3in +fib3in +ib5it. +ibi2t +fib5it. +fibi2t +ib5ite +fib5ite +i1b2l2 +fi1b2l2 +ib3li +fib3li +i5bo +fi5bo +i1br +fi1br +i2b5ri +fi2b5ri +i5bu4n +fi5bu4n +4icam +i1ca +ficam +5icap +ficap +4ic2a2r +fic2a2r +i4car. +fi4car. +i4cara +fi4cara +icas5 +ficas5 +i4cay +fi4cay +iccu4 +ic3c +ficcu4 +fic3c +4iceo +ficeo +4i2ch +fi2ch +2i1ci +i5c2id +fi5c2id +ic5i1na +i2cin +fic5i1na +fi2cin +i2c2ip +fi2c2ip +ic3i1pa +fic3i1pa +i4c1ly4 +i1c4l4 +fi4c1ly4 +fi1c4l4 +i2c5oc +i1co +fi2c5oc +fi1co +4i1cr +fi1cr +5icra +ficra +i4cry +fi4cry +ic4te +i2c1t +fic4te +fi2c1t +ic1tu2 +fic1tu2 +ic4t3u1a +fic4t3u1a +ic3u1la +fic3u1la +ic4um +fic4um +ic5uo +fic5uo +i3cur +fi3cur +2id +i4dai2 +i1d2a +fi4dai2 +fi1d2a +id5anc +ida2n +fid5anc +fida2n +id5d4 +fid5d4 +ide3a4l +fide3a4l +ide4s2 +fide4s2 +i2di +fi2di +id5i2a2n +i1d4i3a +fid5i2a2n +fi1d4i3a +idi4a2r +fidi4a2r +i5d2ie4 +fi5d2ie4 +i1d3io +fi1d3io +idi5ou2 +fidi5ou2 +id1it +fid1it +id5i1u +fid5i1u +i3dle +fi3dle +i4dom +i1do +fi4dom +fi1do +id3ow +fid3ow +i4dr +fi4dr +i2du +fi2du +id5uo +fid5uo +2ie4 +fie4 +ied4e +fied4e +5ie5ga +fie5ga +ie2ld3 +fie2ld3 +ie1n5a4 +fie1n5a4 +ien4e +fien4e +i5e4n1n2 +fi5e4n1n2 +i3ent2i +ien1t +fi3ent2i +fien1t +i1er. +fi1er. +i3es2c +fi3es2c +i1est +fi1est +i3et +fi3et +4if. +fif. +if5ero +ifer1 +fif5ero +fifer1 +iff5en +i4f1f +iff5en +i4ff +fiff5en +fi4ff +if4fr +iffr +fiffr +4i2f3ic. +i1fi +4i2fic. +i1fi +fi2fic. +1fi1fi +i3f2ie4 +i3fie4 +fi3fie4 +i3f4l2 +i3fl2 +fi3fl2 +4i2ft +fi2ft +2ig +iga5b +i1ga +figa5b +fi1ga +ig3er1a +fig3er1a +ight3i +fight3i +4igi +figi +i3gib +fi3gib +ig3il4 +fig3il4 +ig3in +fig3in +ig3it +fig3it +i4g4l2 +fi4g4l2 +i2go +fi2go +ig3or +fig3or +ig5ot +fig5ot +i5gre +i1gr +fi5gre +fi1gr +ig2u5i2 +fig2u5i2 +ig1ur +fig1ur +i3h +fi3h +4i5i4 +fi5i4 +i3j +fi3j +4ik +fik +i1la +fi1la +il3a4b +fil3a4b +i4l4ade +ila2d +fi4l4ade +fila2d +i2l5am +fi2l5am +ila5ra +il2a2r +fila5ra +fil2a2r +i3leg +fi3leg +il1er +fil1er +ilev4 +filev4 +i2l5f +fi2l5f +i2l5ff +fi2l5ff +i2l5fi +1fi2l5fi +i2l5fl2 +fi2l5fl2 +il1i +il3i1a +fil3i1a +il2ib +fil2ib +il3io +fil3io +il4ist +fil4ist +2il1it +fil1it +il2iz +fil2iz +ill5ab +il1l +fill5ab +4i2l1n2 +fi2l1n2 +il3o1q +fil3o1q +il4ty +i4lt +fil4ty +fi4lt +il5ur +fil5ur +il3v +fil3v +i4mag +i1ma +fi4mag +fi1ma +im3age +fim3age +ima5ry +im2a2r +fima5ry +fim2a2r +iment2a5r +i1men +i3men1t +imen1ta +fiment2a5r +fi1men +fi3men1t +fimen1ta +4imet +fimet +im1i +fim1i +im5i1d4a +im2id +fim5i1d4a +fim2id +imi5le +fimi5le +i5m2ini +fi5m2ini +4imit +fimit +im4ni +i4m1n +fim4ni +fi4m1n +i3mo2n +i1mo +fi3mo2n +fi1mo +i2mu +fi2mu +im3u1la +fim3u1la +2in. +fin. +i4n3au +i1na +fi4n3au +4inav +finav +incel4 +fincel4 +in3cer +fin3cer +4ind +in5dling +fin5dling +2ine +i3nee +fi3nee +in4er4a2r +in1er +iner1a +fin4er4a2r +fin1er +finer1a +i5n2e2ss +i1nes +fi5n2e2ss +fi1nes +4in1ga +fin1ga +4inge +finge +in5gen +fin5gen +4ingi +fingi +in5gling +ingl2 +fin5gling +fingl2 +4in1go +fin1go +4in1gu +fin1gu +2ini +fini +i5ni. +fi5ni. +i4n4i1a +fi4n4i1a +in3i4o +fin3i4o +in1is +fin1is +i5ni4te. +in2it +in2ite +fi5ni4te. +fin2it +fin2ite +5i3n2i1t2io +ini1ti +fi3n2i1t2io +fini1ti +in3i1ty +fin3i1ty +4i4nk2 +fi4nk2 +4i4n1l +fi4n1l +2i4n1n2 +2i1no +fi1no +i4no4c +fi4no4c +ino4s +fino4s +i4not +fi4not +2i2n1s2 +fi2n1s2 +in3se +fin3se +insu1r5a +in1su +insu2r +finsu1r5a +fin1su +finsu2r +2int. +in1t +fint. +fin1t +2in4th +fin4th +in1u +fin1u +i5n2us +fi5n2us +4iny +finy +2io +fio +4io. +fio. +io1ge4 +fio1ge4 +io2gr +fio2gr +i1ol +fi1ol +io4m +fio4m +ion3at +io2n +io1n1a +fion3at +fio2n +fio1n1a +ion4ery +ion1er +fion4ery +fion1er +ion3i +fion3i +i2o5ph +fi2o5ph +ior3i +fior3i +i4os +fi4os +i4o5th +fi4o5th +i5oti +fi5oti +io4to +fio4to +i4our +iou2 +fi4our +fiou2 +2ip +fip +ipe4 +fipe4 +iphr2as4 +ip4hr4 +fiphr2as4 +fip4hr4 +ip3i +fip3i +ip4ic +fip4ic +ip4re4 +ipr2 +fip4re4 +fipr2 +ip3ul +fip3ul +i3qua +iqu2 +fi3qua +fiqu2 +iq5ue1f +fiq5ue1f +iq5u1e4ff +fiq5u1e4ff +iq5ue1fi +1fiq5ue1fi +iq5ue1fl2 +fiq5ue1fl2 +iq3u2id +iq2ui2 +fiq3u2id +fiq2ui2 +iq3ui3t +fiq3ui3t +4ir +fir +i1ra +fi1ra +i2ra4b +fi2ra4b +i4rac +fi4rac +ird5e +fird5e +ire4de +i2r2ed +fire4de +fi2r2ed +i4re1f +fi4re1f +i4r1e4ff +fi4r1e4ff +i4re3fi +1fi4re3fi +i4re1fl2 +fi4re1fl2 +i4rel4 +fi4rel4 +i4res +fi4res +ir5gi +irg2 +fir5gi +firg2 +ir1i +fir1i +iri5de +ir2id +firi5de +fir2id +ir4is +fir4is +iri3tu +firi3tu +5i5r2iz +fi5r2iz +ir4min +ir1m +fir4min +fir1m +iro4g +firo4g +5iron. +iro2n +firon. +firo2n +ir5ul +fir5ul +2is. +fis. +is5ag +isa2 +fis5ag +fisa2 +is3a2r +fis3a2r +isas5 +fisas5 +2is1c +fis1c +is3ch2 +fis3ch2 +4ise +fise +is3er +fis3er +3i4s3f +fi4s3f +3i4s4ff +fi4s4ff +3i4s3fi +1fi4s3fi +3i4s3fl2 +fi4s3fl2 +is5ha2n +is2h +fis5ha2n +fis2h +is3ho2n3 +isho4 +fis3ho2n3 +fisho4 +ish5op +fish5op +is3i1b +fis3i1b +is2i4d +fis2i4d +i5sis +fi5sis +is5i1t2iv +isi1ti +fis5i1t2iv +fisi1ti +4is4k2 +fis4k2 +isla2n4 +is1l2 +fisla2n4 +fis1l2 +4is4m1s2 +i2s1m +fis4m1s2 +fi2s1m +i2so +fi2so +iso5mer +i3som +iso2me +fiso5mer +fi3som +fiso2me +is1p +fis1p +is2pi +fis2pi +is4py +fis4py +4i2s1s +fi2s1s +is4sal +is1sa2 +fis4sal +fis1sa2 +issen4 +fissen4 +is4s1e4s +fis4s1e4s +is4ta. +is1ta +fis4ta. +fis1ta +is1te +fis1te +is1t2i +ist4ly +is2tl +fist4ly +fis2tl +4istral +ist4r +is1tra +fistral +fist4r +fis1tra +i2su +fi2su +is5us +fis5us +4i3ta. +i1ta +fi3ta. +fi1ta +ita4bi +i2tab +fita4bi +fi2tab +i4tag +fi4tag +4ita5m +fita5m +i3ta2n +fi3ta2n +i3tat +fi3tat +2ite +fite +it3er1a +fit3er1a +i5ter1i +fi5ter1i +it4es +fit4es +2ith +fith +i1ti +fi1ti +4i1t2i1a +fi1t2i1a +4i2tic +fi2tic +it3i1ca +fit3i1ca +5i5tick1 +fi5tick1 +i2t3ig +fi2t3ig +it5il1l +fit5il1l +i2tim +fi2tim +2i1t2io +fi1t2io +4itis +fitis +i4ti2s4m +fi4ti2s4m +i2t5o5m +i1to +fi2t5o5m +fi1to +4ito2n +fito2n +i4tram +i1tra +fi4tram +fi1tra +it5ry +fit5ry +4i4t3t2 +fi4t3t2 +it3u1at +i1tu +itu1a +fit3u1at +fi1tu +fitu1a +i5tud2 +fi5tud2 +it3ul +fit3ul +4itz. +i4tz +fitz. +fi4tz +i1u +fi1u +2iv +fiv +iv3el1l +fiv3el1l +iv3en. +fiv3en. +i4v3er. +fi4v3er. +i4vers. +ive4r1s2 +fi4vers. +five4r1s2 +iv5il. +i2vil +fiv5il. +fi2vil +iv5io +fiv5io +iv1it +fiv1it +i5vore +fi5vore +iv3o3ro +fiv3o3ro +i4v3ot +fi4v3ot +4i5w +fi5w +ix4o +fix4o +4iy +fiy +4iz2a2r2 +iza1 +fiz2a2r2 +fiza1 +i2z1i4 +fi2z1i4 +5izon1t +i1zo +izo2n +fizon1t +fi1zo +fizo2n +5ja +jac4q +ja4p +1je +je4r5s2 +4jes4t2ie4 +jest2i +4jes2ty +jew3 +jo4p +5judg +3ka. +k3ab +k5ag +kais4 +kai2 +kal4 +k1b +k2ed +1kee +ke4g +ke5l2i +k3en4d +k1er +kes4 +k3e2st. +ke4ty +k3f +k4ff +k3fi +k3fl2 +kh4 +k1i +5ki. +5k2ic +k4il1l +kilo5 +k4im +k4in. +kin4de +k4ind +k5i5n2e2ss +k2ine +ki1nes +kin4g +k2i4p +kis4 +k5is2h +kk4 +k1l +4k3ley +4k1ly +k1m +k5nes +1k2no +ko5r +kos2h4 +k3ou2 +kro5n +4k1s2 +k4sc +ks4l2 +k4s4y +k5t +k1w +lab3ic +flab3ic +l4abo +fl4abo +l4a2ci4 +fl4a2ci4 +l4ade +la2d +fl4ade +fla2d +la3d2y +fla3d2y +lag4n +flag4n +la2m3o +fla2m3o +3l4and +la2n +fl4and +fla2n +lan4dl +flan4dl +lan5et +flan5et +lan4te +lan1t +flan4te +flan1t +lar4g2 +l2a2r +flar4g2 +fl2a2r +lar3i +flar3i +las4e +flas4e +la5ta2n +la2ta +fla5ta2n +fla2ta +4latel2i4 +flatel2i4 +4la1t2iv +fla1t2iv +4lav +flav +la4v4a +fla4v4a +2l1b +fl1b +lbin4 +flbin4 +4l1c2 +fl1c2 +lce4 +flce4 +l3ci +fl3ci +2ld +fld +l2de +fl2de +ld4ere +fld4ere +ld4er1i +fld4er1i +ldi4 +fldi4 +ld5is1 +fld5is1 +l3dr +fl3dr +l4dri +fl4dri +le2a +fle2a +le4bi +l2e1b +fle4bi +fl2e1b +le2ft5 +le1f +fle2ft5 +fle1f +5leg. +fleg. +5le4g1g2 +fle4g1g2 +le4mat +le1ma +fle4mat +fle1ma +lem5at1ic +flem5at1ic +4len. +flen. +3lenc +flenc +5le2ne. +fle2ne. +1len1t +flen1t +le3ph +fle3ph +le4pr2 +fle4pr2 +le2ra5b +ler1a +fle2ra5b +fler1a +ler4e +fler4e +3lerg2 +flerg2 +3l4er1i +fl4er1i +l4ero +fl4ero +les2 +le5s1co +les2c +fle5s1co +fles2c +5lesq +flesq +3l2e2ss +5less. +fless. +l3e1va +fl3e1va +lev4er. +lev1er +flev4er. +flev1er +lev4er1a +flev4er1a +lev4e4r1s2 +flev4e4r1s2 +3ley +fley +4leye +fleye +2lf +flf +2l4ff +fl4ff +2l1fi +fl1fi +2lfl2 +fl2fl2 +l5fr +fl5fr +4l1g4 +fl1g4 +l5ga +fl5ga +lg2a2r3 +flg2a2r3 +l4ges +fl4ges +l1go3 +fl1go3 +2l3h +fl3h +li4ag +l2i1a +fli4ag +fl2i1a +li2am4 +fli2am4 +liar5iz +li2a2r +liar1i +fliar5iz +fli2a2r +fliar1i +li4as +fli4as +li4a1to +fli4a1to +li5bi +fli5bi +5lic2io +l2i1ci +flic2io +fl2i1ci +li4cor +li1co +fli4cor +fli1co +4li4c3s2 +fli4c3s2 +4lict. +li2c1t +flict. +fli2c1t +l4icu +fl4icu +l3i1cy +fl3i1cy +l3i1d2a +l2id +fl3i1d2a +fl2id +lid5er +flid5er +3li2di +fli2di +lif3er1 +flif3er1 +l4i4f1f +l4i4ff +fl4i4ff +li4f4l2 +li4fl2 +fl2i4fl2 +5ligate +l2ig +li1ga +fligate +fl2ig +fli1ga +3ligh +fligh +li4gra +li1gr +fli4gra +fli1gr +3l4ik +fl4ik +4l4i4l +fl4i4l +lim4b2l2 +li4m1b +flim4b2l2 +fli4m1b +lim3i +flim3i +li4mo +fli4mo +l4i4m4p +fl4i4m4p +l4i1na +fl4i1na +1l4ine +fl4ine +lin3ea +flin3ea +l2in3i +fl2in3i +link5er +l4i4nk2 +flink5er +fl4i4nk2 +li5og +l2io +fli5og +fl2io +4l4iq +fl4iq +lis4p +flis4p +l1it +fl1it +l2it. +fl2it. +5lit3i1ca +li1ti +l4i2tic +flit3i1ca +fli1ti +fl4i2tic +l5i5ti4c3s2 +fl5i5ti4c3s2 +liv3er +l2iv +fliv3er +fl2iv +l1iz +fl1iz +4lj +flj +lka3 +flka3 +l3kal4 +fl3kal4 +lka4t +flka4t +l1l +fl1l +l4law +fl4law +l2le +fl2le +l5le2a +fl5le2a +l3lec +fl3lec +l3leg +fl3leg +l3lel +fl3lel +l3le4n +fl3le4n +l3le4t +fl3le4t +ll2i +fll2i +l2lin4 +fl2lin4 +l5l4i1na +fl5l4i1na +ll4o +fll4o +lloq2ui5 +llo1q +lloqu2 +flloq2ui5 +fllo1q +flloqu2 +l2l5out +llou2 +fl2l5out +fllou2 +l5low +fl5low +2lm +flm +l5met +fl5met +lm3ing +flm3ing +l4mo2d1 +l1mo +fl4mo2d1 +fl1mo +lmo2n4 +flmo2n4 +2l1n2 +fl1n2 +3lo. +flo. +lob5al +flob5al +lo4ci +flo4ci +4lof +flof +4lo4ff +flo4ff +4lo2fi +flo2fi +4lofl2 +fl2ofl2 +3log1ic +flog1ic +l5o1go +fl5o1go +3logu +flogu +lom3er +lo2me +flom3er +flo2me +5long +lo2n +flong +flo2n +lon4i +flon4i +l3o3niz +fl3o3niz +lood5 +loo2 +flood5 +floo2 +5lo4pe. +flo4pe. +lop3i +flop3i +l3o4p1m +fl3o4p1m +lo1ra4 +flo1ra4 +lo4ra1to +flo4ra1to +lo5r2ie4 +flo5r2ie4 +lor5ou2 +flor5ou2 +5los. +flos. +los5et +flos5et +5los5o3phiz +lo2so +los4op +los2oph +flos5o3phiz +flo2so +flos4op +flos2oph +5los5o1phy +flos5o1phy +los4t +flos4t +lo4ta +flo4ta +loun5d +lou2 +floun5d +flou2 +2lout +flout +4lov +flov +2lp +flp +lpa5b +l1pa +flpa5b +fl1pa +l3pha +fl3pha +l5phi +fl5phi +lp5ing +lpi2n +flp5ing +flpi2n +l3pit +fl3pit +l4p2l2 +fl4p2l2 +l5pr2 +fl5pr2 +4l1r +fl1r +2l1s2 +fl1s2 +l4sc +fl4sc +l2se +fl2se +l4s2ie4 +fl4s2ie4 +4lt +flt +lt5ag +l1ta +flt5ag +fl1ta +ltane5 +lta2n +fltane5 +flta2n +l1te +fl1te +lten4 +flten4 +lter1a4 +flter1a4 +lth3i +flth3i +l5ties. +lt2ie4 +fl5ties. +flt2ie4 +ltis4 +fltis4 +l1tr +fl1tr +l1tu2 +fl1tu2 +ltu1r3a +fltu1r3a +lu5a +flu5a +lu3br +flu3br +lu2ch4 +flu2ch4 +lu3ci +flu3ci +lu3en +flu3en +luf4 +fluf4 +lu4ff +flu4ff +lu1fi +flu1fi +lu3fl2 +fl2u3fl2 +lu5id +l2ui2 +flu5id +fl2ui2 +lu4ma +flu4ma +5lu1mi +flu1mi +l5umn. +lu4m1n +fl5umn. +flu4m1n +5lum3n4i1a +flum3n4i1a +lu3o +flu3o +luo3r +fluo3r +4lup +flup +lu2ss4 +l2us +flu2ss4 +fl2us +lus3te +flus3te +1lut +flut +l5ven +fl5ven +l5vet4 +fl5vet4 +2l1w +fl1w +1ly +4lya +flya +4ly1b +fly1b +ly5me4 +fly5me4 +ly3no +fly3no +2lys4 +flys4 +l5y3s2e +fl5y3s2e +1ma +2mab +ma2ca +ma5ch2ine +ma2ch +ma4ch1in +ma4c4l4 +mag5in +mag1i +5mag1n +2mah +ma2id5 +mai2 +4ma2ld +ma3l2ig +mal1i +ma5lin +mal4l2i +mal1l +mal4ty +ma4lt +5ma3n4i1a +ma2n +man5is +man3iz +4map +ma5ri2ne. +m2a2r +mar1i +mar2in4e +ma5r2iz +mar4ly +mar1l +mar3v +ma5sce +mas4e +mas1t +5mate +m4ath3 +ma3tis +4mati3za1 +ma1tiz +4m1b +m1ba4t5 +m5bil +m4b3ing +mb2i4v +4m5c +4me. +2med +4med. +5me3d4i3a +m4edi +me3d2ie4 +m5e5d2y +me2g +mel5o2n +me4l4t +me2m +me1m1o3 +1men +me1n4a +men5ac +men4de +4mene +men4i +me2n1s4 +men1su5 +3men1t +men4te +me5o2n +m5er1sa2 +me4r1s2 +2mes +3mest2i +me4ta +met3a2l +me1te +me5thi +m4etr +5met3ric +me5tr2ie4 +me3try +me4v +4m1f +4m4ff +4m1fi +4m1fl2 +2mh +5mi. +m2i3a +mi1d4a +m2id +mid4g +m2ig4 +3mil3i1a +mil1i +m5i5l2ie4 +m4il1l +mi1n4a +3m4ind +m5i3nee +m2ine +m4ingl2 +min5gli +m5ing1ly +min4t +m4in1u +miot4 +m2io +m2is +mi4s4er. +m4ise +mis3er +mis5l2 +mis4t2i +m5i4stry +mist4r +4m2ith +m2iz +4mk +4m1l +m1m +mma5ry +m1ma +mm2a2r +4m1n +m1n4a +m4n1in +mn4o +1mo +4mocr +5moc5ra1tiz +mo2d1 +mo4go +mois2 +moi2 +mo4i5se +4m2ok +mo5lest +moles2 +mo3me +mon5et +mo2n +mon5ge +mo3n4i3a +mon4i2s1m +mon1is +mon4ist +mo3niz +monol4 +mo3ny. +mo2r +4mo5ra. +mo1ra +mos2 +mo5sey +mo3sp +m4oth3 +m5ouf +mou2 +m5ou4ff +m5ou1fi +m5ou3fl2 +3mo2us +mo2v +4m1p +mpara5 +m1pa +mp2a2r +mpa5rab +mp4a4r5i +m3pe2t +mphas4 +m2pi +mp2i4a +mp5ies +mp2ie4 +m4p1i2n +m5p4ir +mp5is +mpo3ri +m1p4or +mpos5ite +m1pos +m4po2us +mpou2 +mpov5 +mp4tr +m2p1t +m2py +4m3r +4m1s2 +m4s2h +m5si +4mt +1mu +mul2a5r4 +mu1la +5mu4lt +mul1ti3 +3mum +mun2 +4mup +mu4u +4mw +1na +2n1a2b +n4abu +4nac. +na4ca +n5a2c1t +nag5er. +nak4 +na4l1i +na5l2i1a +4na4lt +na5mit +n2a2n +nan1ci4 +nan4it +na4nk4 +nar3c +n2a2r +4nare +nar3i +nar4l +n5ar1m +n4as +nas4c +nas5t2i +n2at +na3ta2l +na2ta +nat5o5m2iz +na2tom +na1to +n2au +nau3se +na2us +3naut +nav4e +4n1b4 +nc2a2r5 +n1ca +n4ces. +n3cha +n2ch +n5cheo +nche2 +n5ch4il2 +n3chis +n2c1in +n1ci +n2c4it +ncou1r5a +n1co +ncou2 +n1cr +n1cu +n4dai2 +n1d2a +n5da2n +n1de +nd5e2st. +ndes2 +ndi4b +n5d2if +n5d2i4ff +n5d2i1fi +n5d2i3fl2 +n1dit +n3diz +n5du2c +n1du +ndu4r +nd2we +nd1w +2ne. +n3e2a2r +n2e2b +neb3u +ne2c +5neck1 +2ned +ne4gat +ne1ga +ne4g5a1t2iv +5nege +ne4la +nel5iz +nel2i +ne5mi +ne4mo +1nen +4nene +3neo +ne4po +ne2q +n1er +ne2ra5b +ner1a +n4er3a2r +n2ere +n4er5i +ner4r4 +1nes +2nes. +4ne1sp +2nest +4nes4w2 +3net1ic +ne4v +n5eve +ne4w +n3f +n4ff +n3fi +n3fl2 +n4gab +n1ga +n3gel +nge4n4e +n1gen +n5gere +n3ger1i +ng5ha +n3gib +ng1in +n5git +n4gla4 +ngl2 +ngov4 +n1go +ng5s2h +ngs2 +n1gu +n4gum +n2gy +4n1h4 +nha4 +nhab3 +nhe4 +3n4i1a +ni3a2n +ni4ap +ni3ba +ni4b2l2 +n2i4d +ni5di +ni4er +n2ie4 +ni2fi +ni2fi +ni5ficat +nifi1ca +ni5ficat +nifi1ca +n5i1gr +n2ig +n4ik4 +n1im +ni3m2iz +nim1i +n1in +5ni2ne. +n2ine +nin4g +n2i4o +5n2is. +nis4ta +n2it +n4ith +3n2i1t2io +ni1ti +n3itor +ni1to +ni3tr +n1j +4nk2 +n5k2ero +nk1er +n3ket +nk3in +nk1i +n1k1l +4n1l +n5m +nme4 +nmet4 +4n1n2 +nne4 +nni3al +n3n4i1a +nn2i4v +nob4l2 +no3ble +n5o1c4l4 +4n3o2d +3noe +4nog +no1ge4 +nois5i +noi2 +no5l4i +5nol1o1gis +3nomic +n5o5m2iz +no4mo +no3my +no4n +non4ag +no1n1a +non5i +n5oniz +4nop +5nop5o5l2i +no2r5ab +no1ra +no4rary +nor2a2r +4nos2c +nos4e +nos5t +no5ta +1nou2 +3noun +nov3el3 +nowl3 +n1p4 +npi4 +npre4c +npr2 +n1q +n1r +nru4 +2n1s2 +n2s5ab +nsa2 +nsati4 +ns4c +n2se +n4s3e4s +ns2id1 +ns2ig4 +n2s1l2 +n2s3m +n4soc +n1so +ns4pe +n5spi +nsta5b2l2 +ns1ta +ns2tab +n1t +n2ta4b +n1ta +nte4r3s2 +nt2i +n5ti2b +nti4er +nt2ie4 +nti2f2 +nti4ff +nti2fi +nti3fl2 +n3t2ine +n2t1in +n4t3ing +nt2i4p +ntrol5l2i +ntrol1l +n4t4s2 +ntu3me +n1tu +n3tum +nu1a +nu4d +nu5en +nuf4fe +nu4f1f +nuffe +nu4ff +n3ui4n +n2ui2 +3nu3it +n4um +nu1me +n5u1mi +3nu4n +n3uo +nu3tr +n1v2 +n1w4 +nym4 +nyp4 +4nz +n3za1 +4oa +oa2d3 +o5a5les2 +o2ale +oard3 +o2a2r +oas4e +oast5e +oat5i +ob3a3b +o5b2a2r +o1be4l +o1bi +o2bin +ob5ing +o3br +ob3ul +o1ce +o2ch4 +o3che4t +oche2 +ocif3 +o1ci +oci4ff +oci1fi +oci3fl2 +o4cil +o4clam +o1c4l4 +o4cod +o1co +oc3rac +oc5ra1tiz +ocre3 +5ocrit +ocri2 +octo2r5a +o2c1t +oc1to +oc3u1la +o5cure +od5d1ed +od1d4 +od3ic +o1d2i3o +o2do4 +od4or3 +o4d5uct. +o1du +odu2c +odu2c1t +o4d5uc4t1s2 +o4el +o5eng +o3er +oe4ta +o3ev +o2fi +o2fi +of5ite +ofite +of4i4t4t2 +ofi4t4t2 +o2g5a5r +o1ga +o4g5a1t2iv +o4ga1to +o1ge +o5gene +o1gen +o5geo +o4ger +o3g2ie4 +1o1gis +og3it +o4gl2 +o5g2ly +3ogniz +og1ni +o4g4ro +o1gr +og2u5i2 +1o1gy +2o2g5y3n +o1h2 +ohab5 +oi2 +oic3es +oi3der +o2id +oi4f1f4 +oi4ff4 +o2ig4 +oi5let +o3ing +oint5er +oin1t +o5i2s1m +oi5so2n +oi2so +oist5en +ois1te +oi3ter +o2ite +o5j +2ok +o3ken +ok5ie4 +ok1i +o1la +o4la2n +ola2ss4 +o2l2d +ol2d1e +ol3er +o3les2c +oles2 +o3let +ol4fi +o2lf +o2l4fi +ol2i +o3l2i1a +o3lice +ol5id. +ol2id +o3li4f +o3l4i4ff +o3li4fi +o3li4fl2 +o5l4i4l +ol3ing +o5l2io +o5l2is. +ol3is2h +o5l2ite +ol1it +o5l2i1t2io +oli1ti +o5l2iv +oll2i4e4 +ol1l +oll2i +ol5o3giz +olo4r +ol5p2l2 +o2lp +o4l2t +ol3ub +ol3ume +ol3un +o5l2us +ol2v +o2ly +o2m5ah +o1ma +oma5l +om5a1tiz +om2be +o4m1b +om4b2l2 +o2me +om3e1n4a +o1men +om5er2se +ome4r1s2 +o4met +om5e3try +om4etr +o3m2i3a +om3ic. +om3i1ca +o5m2id +om1in +o5m2ini +5ommend +om1m +om1men +omo4ge +o1mo +o4mo2n +om3pi +o4m1p +ompro5 +ompr2 +o2n +o1n1a +on4ac +o3n2a2n +on1c +3oncil +on1ci +2ond +on5do +o3nen +o2n5est +o1nes +on4gu +on1ic +o3n2i4o +on1is +o5ni1u +on3key +o4nk2 +on4odi +o4n3o2d +on3o3my +o2n3s2 +on5spi4 +onspi1r5a +onsp4ir +on1su4 +onten4 +on1t +on3t4i +onti2f5 +onti4ff +onti2fi +onti3fl2 +on5um +on1va5 +on1v2 +oo2 +ood5e +ood5i +o2o4k +oop3i +o3ord +oost5 +o2pa +o2p2e5d +op1er +3oper1a +4op4erag +2oph +o5pha2n +o5ph4er +op3ing +opi2n +o3pit +o5po2n +o4posi +o1pos +o1pr2 +op1u +opy5 +o1q +o1ra +o5ra. +o4r3ag +or5al1iz +oral1i +or5an4ge +ora2n +or2ang +ore5a +o5re1a4l +or3ei2 +or4e5s2h +or5e2st. +ores2t +orew4 +or4gu +org2 +4o5r2i3a +or3i1ca +o5ril +or1in +o1r2i1o +or3i1ty +o3ri1u +or2mi +or1m +orn2e +o5rof +o5ro4ff +o5ro2fi +o5rofl2 +or3oug +orou2 +or5pe +or1p +3orrh4 +or1r4 +or4se +o4rs2 +ors5en +orst4 +or3thi +or3thy +or4ty +o5rum +o1ry +os3al +osa2 +os2c +os4ce +o3scop +os1co +4oscopi +o5scr +os4i4e4 +os5i1t2iv +osi1ti +os3i1to +os3i1ty +o5si4u +os4l2 +o2so +o2s4pa +os4po +os2ta +o5stati +os5til +ost2i +os5tit +o4ta2n +o1ta +otele4g +ot3er. +ot5e4r1s2 +o4tes +4oth +oth5e1si +oth2e +oth1es +oth3i4 +ot3ic. +ot5i1ca +o3tice +o3tif2 +o3ti4ff +o3ti1fi +o3ti3fl2 +o3tis +oto5s2 +o1to +ou2 +ou3b2l2 +ouch5i +ou2ch +ou5et +ou4l +ounc5er +oun2d +ou5v2 +ov4en +over4ne +ove4r3s2 +ov4ert +o3vis +o4vi1ti4 +o5v4ol +ow3der +ow3el +ow5est3 +ow1i2 +own5i +o4wo2 +oy1a +1pa +pa4ca +pa4ce +pa2c4t +p4a2d +5paga4n +pa1ga +p3agat +p4ai2 +pa4i4n4 +p4al +pa1n4a +pa2n +pan3el +pan4ty +pan1t +pa3ny +pa1p +pa4pu +para5b2l2 +p2a2r +pa2rab +par5age +par5d2i +3pare +par5el +p4a4r1i +par4is +pa2te +pa5ter +5pathic +p4ath +pa5thy +pa4tric +pa1tr +pav4 +3pay +4p1b +pd4 +4pe. +3pe4a +pear4l +pe2a2r +pe2c +2p2ed +3pede +3p4edi +pe3d4i3a4 +ped4ic +p4ee +pee4d +pek4 +pe4la +pel2i4e4 +pel2i +pe4n2a2n +pe1na +p4enc +pen4th +pen1t +pe5o2n +p4era. +per1a +pera5b2l2 +pe2ra4b +p4erag +p4er1i +peri5st +per2is +per4mal +per3m4 +per1ma +per2me5 +p4ern +p2er3o +per3ti +p4e5ru +per1v +pe2t +pe5ten +pe5tiz +4pf +4p4ff +4p1fi +4pfl2 +4pg +4ph. +phar5i +ph2a2r +ph4e3no +phe2n +ph4er +ph4es. +ph1es +ph1ic +5ph2ie4 +ph5ing +5phis1t2i +3phiz +p4h2l4 +3phob +3phone +pho2n +5phoni +pho4r +4p4h1s2 +ph3t +5phu +1phy +p2i3a +pi2a2n4 +pi4c2ie4 +p2i1ci +pi4cy +p4id +p5i1d2a +pi3de +5pi2di +3piec +p2ie4 +pi3en +pi4grap +p2ig +pi1gr +pi3lo +pi2n +p4in. +p4ind4 +p4i1no +3p2i1o +pio2n4 +p3ith +pi5tha +pi2tu +2p3k2 +1p2l2 +3pla2n +plas5t +pl2i3a +pli5er +pl2ie4 +4pl2ig +pli4n +ploi4 +plu4m +plu4m4b +4p1m +2p3n +po4c +5pod. +po5em +po3et5 +5po4g +poin2 +poi2 +5poin1t +poly5t +po2ly +po4ni +po2n +po4p +1p4or +po4ry +1pos +po2s1s +p4ot +po4ta +5poun +pou2 +4p1p +ppa5ra +p1pa +pp2a2r +p2pe +p4p2ed +p5pel +p3pen +p3per +p3pe2t +ppo5s2ite +p1pos +pr2 +pray4e4 +5pre1c2i +pre5co +pre3e2m +pre4f5ac +pre1f +pre1fa +pre4la +pr1e3r4 +p3re1s2e +3pr2e2ss +pre5ten +pre3v2 +5pr2i4e4 +prin4t3 +pr2i4s +pri2s3o +p3ro1ca +pr2oc +prof5it +pro2fi +profit +pro2fi +pro3l +pros3e +pro1t +2p1s2 +p2se +ps4h +p4si1b +2p1t +p2t5a4b +p1ta +p2te +p2th +p1ti3m +ptu4r +p1tu +p4tw4 +pub3 +pue4 +puf4 +pu4ff +pu1fi +pu3fl2 +pu4l3c2 +pu4m +pu2n +pur4r4 +5p2us +pu2t +5pute +put3er +pu3tr +put4t1ed +pu4t3t2 +put4t1in +p3w +qu2 +qua5v4 +2que. +3quer +3quet +2rab +ra3bi +rach4e2 +ra2ch +r5a1c4l4 +raf5fi +ra2f +ra4f1f4 +raffi +ra2f4t +r2ai2 +ra4lo +ram3et +r2ami +ra3ne5o +ra2n +ran4ge +r2ang +r4ani +ra5no4 +rap3er +3ra1phy +rar5c +r2a2r +rare4 +rar5e1f +rar5e4ff +rar5e3fi +rar5e1fl2 +4raril +rar1i +r2as +ratio2n4 +ra1t2io +rau4t +ra5vai2 +ra2va +rav3el +ra5z2ie4 +ra2z1i +r1b +r4bab +r4bag +rbi2 +r2b3i4f +r2b3i4ff +r2b3i4fi +r2b3i4fl2 +r2bin +r5b2ine +rb5ing. +rb4o +r1c +r2ce +r1cen4 +r3cha +r2ch +rch4er +rche2 +r4ci4b +r1ci +r2c4it +rcum3 +r4dal +r1d2a +rd2i +r1d4i4a +rdi4er +rd2ie4 +rd1in4 +rd3ing +2re. +re1a4l +re3a2n +re5ar1r4 +re2a2r +5rea2v +re4aw +r5ebrat +r2e1b +re3br +rec5ol1l +re2col +re1co +re4c5ompe +reco4m1p +re4cre +re1cr +2r2ed +re1de +re3dis1 +r4edi +red5it +re4fac +re1f +re1fa +re2fe +re5fer. +refer1 +re3fi +re3fi +re4fy +reg3is +re5it +rei2 +re1l2i +re5lu +r4en4ta +ren1t +ren4te +re1o +re5pi2n +re4posi +re1po +re1pos +re1pu +r1er4 +r4er1i +r2ero4 +r4e5ru +r4es. +re4spi +re1sp +res4s5i4b +r2e2ss +res1si +res2t +re5s2ta2l +res1ta +r2e3st4r +re4ter +re4ti4z +re3tri +r4eu2 +re5u1t2i +rev2 +re4val +re1va +rev3el +r5ev5er. +rev1er +re5ve4r1s2 +re5vert +re5vi4l +re1vi +rev5olu +re4wh +r1f +r4ff +r1fi +r1fl2 +r3fu4 +r4fy +rg2 +rg3er +r3get +r3g1ic +rgi4n +rg3ing +r5gis +r5git +r1gl2 +rgo4n2 +r1go +r3gu +rh4 +4rh. +4rhal +r2i3a +ria4b +ri4ag +r4ib +rib3a +ric5as5 +ri1ca +r4ice +4r2i1ci +5ri5c2id +ri4c2ie4 +r4i1co +rid5er +r2id +ri3enc +r2ie4 +ri3en1t +ri1er +ri5et +rig5a2n +r2ig +ri1ga +5r4igi +ril3iz +ril1i +5rima2n +ri1ma +rim5i +3ri1mo +rim4pe +ri4m1p +r2i1na +5rina. +r4in4d +r2in4e +rin4g +r2i1o +5riph +r2ip +riph5e +ri2p2l2 +rip5lic +r4iq +r2is +r4is. +r2is4c +r3is2h +ris4p +ri3ta3b +ri1ta +r5ited. +r2ite +ri2t1ed +rit5er. +rit5e4r1s2 +r4i2t3ic +ri1ti +ri2tu +rit5ur +riv5el +r2iv +riv3et +riv3i +r3j +r3ket +rk4le +rk1l +rk4lin +r1l +rle4 +r2led +r4l2ig +r4lis +rl5is2h +r3lo4 +r1m +rma5c +r1ma +r2me +r3men +rm5e4r1s2 +rm3ing +r4ming. +r4m2io +r3mit +r4my +r4n2a2r +r1na +r3nel +r4n1er +r5net +r3ney +r5nic +r1nis4 +r3n2it +r3n2iv +rno4 +r4nou2 +r3nu +rob3l2 +r2oc +ro3cr +ro4e +ro1fe +ro5fil +ro2fi +ro5fil +ro2fi +r2ok2 +ro5k1er +5role. +rom5e1te +ro2me +ro4met +rom4i +ro4m4p +ron4al +ro2n +ro1n1a +ron4e +ro5n4is +ron4ta +ron1t +1room +roo2 +5root +ro3pel +rop3ic +ror3i +ro5ro +ro2s5per +ro2s4s +ro4th2e +r4oth +ro4ty +ro4va +rov5el +rox5 +r1p +r4pe4a +r5pen1t +rp5er. +r3pe2t +rp4h4 +rp3ing +rpi2n +r3po +r1r4 +rre4c +rre4f +rr1e4ff +rre4fi +rre4fl2 +r4re1o +rre4s2t +rr2i4o +rr2i4v +rro2n4 +rros4 +rrys4 +4rs2 +r1sa2 +rsa5ti +rs4c +r2se +r3sec +rse4cr +r4s5er. +rs3e4s +r5se5v2 +r1s2h +r5sha +r1si +r4si4b +rso2n3 +r1so +r1sp +r5sw2 +rta2ch4 +r1ta +r4tag +r3t2e1b +r3ten4d +r1te5o +r1ti +r2t5i2b +rt2i4d +r4tier +rt2ie4 +r3t2ig +rtil3i +rtil4l +r4ti1ly +r4tist +r4t2iv +r3tri +rtr2oph4 +rt4s2h4 +r4t1s2 +ru3a +ru3e4l +ru3en +ru4gl2 +ru3i4n +r2ui2 +rum3p2l2 +ru4m2p +ru2n +ru4nk5 +run4ty +run1t +r5usc2 +r2us +ru2t1i5n +r4u1t2i +rv4e +rvel4i +r3ven +rv5er. +r5vest +rv4e2s +r3vey +r3vic +r3v2i4v +r3vo +r1w +ry4c +5rynge +ryn5g +ry3t +sa2 +2s1ab +5sack1 +sac3ri2 +s3a2c1t +5sai2 +sa4l2a2r4 +s4a2l4m +sa5lo +sa4l4t +3sanc +sa2n +san4de +s4and +s1ap +sa5ta +5sa3t2io +sa2t3u +sau4 +sa5vor +5saw +4s5b +scan4t5 +s1ca +sca2n +sca4p +scav5 +s4ced +4s3cei2 +s4ces +s2ch2 +s4cho2 +3s4c2ie4 +s1ci +5sc4in4d +s2cin +scle5 +s1c4l4 +s4cli +scof4 +s1co +sco4ff +sco2fi +scofl2 +4scopy5 +scou1r5a +scou2 +s1cu +4s5d +4se. +se4a +seas4 +sea5w +se2c3o +3se2c1t +4s4ed +se4d4e +s5edl +se2g +se1g3r +5sei2 +se1le +5se2l2f +5se2l4ff +5se2l2fi +5se2l2fl2 +5selv +4se1me +se4mol +se1mo +sen5at +se1na +4senc +sen4d +s5e2ned +sen5g +s5en1in +4sen4t1d +sen1t +4sen2tl +se2p3a3 +4s1er. +s4er1l +s2er4o +4ser3vo +s1e4s +s4e5s2h +ses5t +5se5um +s4eu +5sev +sev3en +sew4i2 +5sex +4s3f +4s4ff +4s3fi +4s3fl2 +2s3g +s2h +2sh. +sh1er +5shev +sh1in +sh3io +3sh2i4p +sh2i2v5 +sho4 +sh5o2l2d +sho2n3 +shor4 +short5 +4sh1w +si1b +s5ic3c +3si2de. +s2id +5side4s2 +5si2di +si5diz +4sig1n4a +s2ig +sil4e +4si1ly +2s1in +s2i1na +5si2ne. +s2ine +s3ing +1s2io +5sio2n +sio1n5a +s4i2r +si1r5a +1sis +3s2i1t2io +si1ti +5si1u +1s2iv +5siz +sk2 +4ske +s3ket +sk5ine +sk1i +sk5in4g +s1l2 +s3lat +s2le +sl2ith5 +sl1it +2s1m +s3ma +smal1l3 +sma2n3 +smel4 +s5men +5s4m2ith +smo2l5d4 +s1mo +s1n4 +1so +so4ce +so2ft3 +so4lab +so1la +so2l3d2 +so3lic +sol2i +5sol2v +3som +3s4on. +so2n +so1n1a4 +son4g +s4op +5soph1ic +s2oph +s5o3phiz +s5o1phy +sor5c +sor5d +4sov +so5vi +2s1pa +5sp4ai2 +spa4n +spen4d +2s5peo +2sper +s2phe +3sph4er +spho5 +spil4 +sp5ing +spi2n +4s3p2i1o +s4p1ly +s1p2l2 +s4po2n +s1p4or4 +4sp4ot +squal4l +squ2 +s1r +2ss +s1sa2 +ssas3 +s2s5c +s3sel +s5sen5g +s4ses. +ss1e4s +s5set +s1si +s4s2ie4 +ssi4er +s4s5i1ly +s4s1l2 +ss4li +s4s1n4 +sspen4d4 +ss2t +ssu1r5a +s1su +ssu2r +ss5w2 +2st. +s2tag +s1ta +s2ta2l +stam4i +5st4and +sta2n +s4ta4p +5stat. +s4t1ed +stern5i +s5t2ero +ste2w +ste1w5a +s3th2e +st2i +s4ti. +s5t2i1a +s1tic +5s4tick1 +s4t2ie4 +s3tif2 +s3ti4ff +s3ti1fi +s3ti3fl2 +st3ing +s2t1in +5st4ir +s1tle +s2tl +5stock1 +s1to +sto2m3a +5stone +sto2n +s4top +3store +st4r +s4tra2d +s1tra +5stra2tu +s4tray +s4tr2id +4stry +4st3w4 +s2ty +1su +su1al +su4b3 +su2g3 +su5is +s2ui2 +suit3 +s4ul +su2m +su1m3i +su2n +su2r +4sv +sw2 +4s1wo2 +s4y +4sy1c +3syl +syn5o +sy5rin +1ta +3ta. +2tab +ta5bles2 +tab2l2 +5tab5o5l1iz +tabol2i +4t4a2ci +ta5do +ta2d +4ta2f4 +4ta4ff4 +4ta2fi +4ta2fl2 +tai5lo +tai2 +ta2l +ta5la +tal5en +t2ale +tal3i +4talk +tal4lis +tal1l +tall2i +ta5log +ta5mo +tan4de +ta2n +t4and +1tan1ta3 +tan1t +ta5per +ta5p2l2 +tar4a +t2a2r +4tar1c +4tare +ta3r2iz +tar1i +tas4e +ta5s4y +4tat1ic +ta4tur +ta2tu +taun4 +tav4 +2taw +tax4is +tax3i +2t1b +4tc +t4ch +tch5e4t +tche2 +4t1d +4te. +te2ad4i +tea2d1 +4tea2t +te1ce4 +5te2c1t +2t1ed +t4e5di +1tee +teg4 +te5ger4 +te5gi +3tel. +tel2i4 +5te2l1s2 +te2ma2 +tem3at +3ten2a2n +te1na +3tenc +3tend +4te1nes +1ten1t +ten4tag +ten1ta +1teo +te4p +te5pe +ter3c +5ter3d +1ter1i +ter5ies +ter2ie4 +ter3is +teri5za1 +5t4er3n2it +ter5v +4tes. +4t2e2ss +t3ess. +teth5e +3t4eu +3tex +4tey +2t1f +2t4ff +2t1fi +2t1fl2 +4t1g +2th. +tha2n4 +th2e +4thea +th3eas +the5a2t +the3is +thei2 +3the4t +th5ic. +th5i1ca +4th4il2 +5th4i4nk2 +4t4h1l4 +th5ode +5thod3ic +4thoo2 +thor5it +tho5riz +2t4h1s2 +1t2i1a +ti4ab +ti4a1to +2ti2b +4tick1 +t4i1co +t4ic1u +5ti2di +t2id +3tien +t2ie4 +tif2 +ti4ff +ti1fi +ti3fl2 +ti5fy +2t2ig +5tigu +til2l5in4 +til1l +till2i +1tim +4ti4m1p +tim5ul +ti2mu +2t1in +t2i1na +3ti2ne. +t2ine +3t2ini +1t2io +ti5oc +tion5ee +tio2n +5tiq +ti3sa2 +3t4ise +ti2s4m +ti5so +tis4p +5tisti1ca +tis1t2i +tis1tic +ti3tl +ti4u +1t2iv +ti1v4a +1tiz +ti3za1 +ti3ze4n +ti2ze +2tl +t5la +tla2n4 +3tle. +3tled +3tles. +tles2 +t5let. +t5lo +4t1m +tme4 +2t1n2 +1to +to3b +to5crat +4to2do4 +2tof +2to4ff +2to2fi +2tofl2 +to2gr +to5ic +toi2 +to2ma +to4m4b +to3my +ton4a4l1i +to2n +to1n1a +to3n2at +4tono +4tony +to2ra +to3r2ie4 +tor5iz +tos2 +5tour +tou2 +4tout +to3w2a2r +4t1p +1tra +t2ra3b +tra5ch +tr4a2ci4 +tra2c4it +trac4te +tra2c1t +tr2as4 +tra5ven +trav5e2s5 +tre5f +tr1e5ff +tre5fi +tre5fl2 +tre4m +trem5i +5tr2i3a +tri5ces +tr4ice +5tri3c2i1a +t4r2i1ci +4tri4c3s2 +2trim +tr2i4v +tro5m4i +tron5i +tro2n +4trony +tro5phe +tr2oph +tro3sp +tro3v +tr2u5i2 +tr2us4 +4t1s2 +t4sc +ts2h4 +t4sw2 +4t3t2 +t4tes +t5to +t1tu4 +1tu +tu1a +tu3a2r +tu4b4i +tud2 +4tue +4tuf4 +4tu4ff +4tu1fi +4tu3fl2 +5t2u3i2 +3tum +tu4nis +tu1ni +2t3up. +3ture +5turi +tur3is +tur5o +tu5ry +3t2us +4tv +tw4 +4t1wa +twis4 +twi2 +4t1wo2 +1ty +4tya +2tyl +type3 +ty5ph +4tz +t2z4e +4uab +uac4 +ua5na +ua2n +uan4i +uar5an1t +u2a2r +uara2n +uar2d +uar3i +uar3t +u1at +uav4 +ub4e +u4bel +u3ber +u4b2ero +u1b4i +u4b5ing +u3b4le. +ub2l2 +u3ca +uci4b +u1ci +u2c4it +ucle3 +u1c4l4 +u3cr +u3cu +u4cy +ud5d4 +ud3er +ud5est +udes2 +ude1v4 +u1dic +ud3ied +ud2ie4 +ud3ies +ud5is1 +u5dit +u4do2n +u1do +ud4si +u2d1s2 +u4du +u4ene +ue2n1s4 +uen4te +uen1t +uer4il +uer1i +3u1fa +u3f4l2 +u3fl2 +ugh3e2n +ug5in +2ui2 +uil5iz +uil1i +ui4n +u1ing +uir4m +u4ir +ui1ta4 +u2iv3 +ui4v4er. +u5j +4uk +u1la +ula5b +u5lati +ul2ch4 +u4l1c2 +5ulche2 +ul3der +u2ld +ul2de +ul4e +u1len +ul4gi +u4l1g4 +ul2i +u5l2i1a +ul3ing +ul5is2h +ul4l2a2r +ul1l +ul4li4b +ull2i +ul4lis +4u2l3m +u1l4o +4u2l1s2 +uls5e4s +ul2se +ul1ti +u4lt +ul1tra3 +ul1tr +4ul1tu2 +u3lu +ul5ul +ul5v +u2m5ab +u1ma +um4bi +u4m1b +um4b1ly +umb2l2 +u1mi +u4m3ing +umor5o +u1mo +umo2r +u4m2p +un2at4 +u1na +u2ne +un4er +u1ni +un4im +u2n1in +un5is2h +un2i3v +u2n3s4 +un4sw2 +un2t3a4b +un1t +un1ta +un4ter. +un4tes +unu4 +un5y +u4n5z +u4o4rs2 +u5os +u1ou2 +u1pe +upe4r5s2 +u5p2i3a +up3ing +upi2n +u3p2l2 +u4p3p +upport5 +up1p4or +up2t5i2b +u2p1t +up1tu4 +u1ra +4ura. +u4rag +u4r2as +ur4be +ur1b +ur1c4 +ur1d +ure5a2t +ur4fer1 +ur1f +ur4fr +u3rif +u3ri4ff +u3ri1fi +u3ri3fl2 +uri4fic +uri1fi +uri4fic +ur1in +u3r2i1o +u1rit +ur3iz +ur2l +url5ing. +ur4no4 +uros4 +ur4pe +ur1p +ur4pi +urs5er +u4rs2 +ur2se +ur5tes +ur3th2e +ur1ti4 +ur4t2ie4 +u3ru +2us +u5sa2d +usa2 +u5sa2n +us4ap +usc2 +us3ci +use5a +u5s2i1a +u3sic +us4lin +us1l2 +us1p +us5s1l2 +u2ss +us5tere +us1t4r +u2su +usu2r4 +u2ta4b +u1ta +u3tat +4u4te. +4utel +4uten +uten4i +4u1t2i +uti5l2iz +util1i +u3t2ine +u2t1in +ut3ing +utio1n5a +u1t2io +utio2n +u4tis +5u5tiz +u4t1l +u2t5of +u1to +u2t5o4ff +u2t5o2fi +u2t5ofl2 +uto5g +uto5mat1ic +uto2ma +u5to2n +u4tou2 +u4t1s4 +u3u +uu4m +u1v2 +ux1u3 +u2z4e +1va +5va. +2v1a4b +vac5il +v4a2ci +vac3u +vag4 +va4ge +va5l2i4e4 +val1i +val5o +val1u +va5mo +va5niz +va2n +va5pi +var5ied +v2a2r +var1i +var2ie4 +3vat +4ve. +4ved +veg3 +v3el. +vel3l2i +vel1l +ve4lo +v4e1ly +ven3om +v4eno +v5enue +v4erd +5v2e2re. +v4erel +v3eren +ver5enc +v4eres +ver3ie4 +ver1i +vermi4n +ver3m4 +3ver2se +ve4r1s2 +ver3th +v4e2s +4ves. +ves4te +ve4te +vet3er +ve4ty +vi5al1i +v2i1a +vi2al +5vi2a2n +5vi2de. +v2id +5vi2d1ed +4v3i1den +5vide4s2 +5vi2di +v3if +v3i4ff +v3i1fi +v3i3fl2 +vi5gn +v2ig +v4ik4 +2vil +5v2il1it +vil1i +v3i3l2iz +v1in +4vi4na +v2inc +v4in5d +4ving +vi1o3l +v2io +v3io4r +vi1ou2 +v2i4p +vi5ro +v4ir +vis3it +vi3so +vi3su +4vi1ti +vit3r +4vi1ty +3v2iv +5vo. +voi4 +3v2ok +vo4la +v5ole +5vo4l2t +3vol2v +vom5i +vo2r5ab +vo1ra +vori4 +vo4ry +vo4ta +4vo1tee +4vv4 +v4y +w5ab2l2 +2wac +wa5ger +wa2g5o +wait5 +wai2 +w5al. +wam4 +war4t +w2a2r +was4t +wa1te +wa5ver +w1b +wea5r2ie4 +we2a2r +wear1i +we4ath3 +wea2t +we4d4n4 +weet3 +wee5v +wel4l +w1er +west3 +w3ev +whi4 +wi2 +wil2 +wil2l5in4 +wil1l +will2i +win4de +w4ind +win4g +w4ir4 +3w4ise +w2ith3 +wiz5 +w4k +wl4es2 +wl3in +w4no +1wo2 +wom1 +wo5v4en +w5p +wra4 +wri4 +wri1ta4 +w3s2h +ws4l2 +ws4pe +w5s4t +4wt +wy4 +x1a +xac5e +x4a2go +xam3 +x4ap +xas5 +x3c2 +x1e +xe4cu1to +xe1cu +xe3c4ut +x2ed +xer4i +x2e5ro +x1h +xhi2 +xh4il5 +xhu4 +x3i +x2i5a +xi5c +xi5di +x2id +x4ime +xi5m2iz +xim1i +x3o +x4ob +x3p +xp4an4d +x1pa +xpa2n +xpec1to5 +xpe2c +xpe2c1t +x2p2e3d +x1t2 +x3ti +x1u +xu3a +xx4 +y5ac +3y2a2r4 +y5at +y1b +y1c +y2ce +yc5er +y3ch +ych4e2 +ycom4 +y1co +ycot4 +y1d +y5ee +y1er +y4er1f +y4er4ff +y4er1fi +y4er1fl2 +yes4 +ye4t +y5gi +4y3h +y1i +y3la +ylla5b2l2 +yl1l +y3lo +y5lu +ymbol5 +y4m1b +yme4 +ym1pa3 +y4m1p +yn3c4hr4 +yn2ch +yn5d +yn5g +yn5ic +5ynx +y1o4 +yo5d +y4o5g +yom4 +yo5net +yo2n +y4o2n3s2 +y4os +y4p2ed +yper5 +yp3i +y3po +y4po4c +yp2ta +y2p1t +y5pu +yra5m +yr5i3a +y3ro +yr4r4 +ys4c +y3s2e +ys3i1ca +y1s3io +3y1sis +y4so +y2ss4 +ys1t +ys3ta +ysu2r4 +y1su +y3thin +yt3ic +y1w +za1 +z5a2b +z2a2r2 +4zb +2ze +ze4n +ze4p +z1er +z2e3ro +zet4 +2z1i +z4il +z4is +5zl +4zm +1zo +zo4m +zo5ol +zoo2 +zte4 +4z1z2 +z4zy +.as9s8o9c8i8a8te. +.as1so +.asso1ci +.asso3c2i1a +.as9s8o9c8i8a8t8es. +.de8c9l8i9n8a9t8i8on. +.de1c4l4 +.decl4i1na +.declin2at +.declina1t2io +.declinatio2n +.ob8l8i8g9a9t8o8ry. +.ob2l2 +.obl2ig +.obli1ga +.obliga1to +.obligato1ry +.ph8i8l9a8n9t8h8r8o8p8ic. +.ph4il2 +.phi1la +.phila2n +.philan1t +.philant4hr4 +.philanthrop3ic +.pr8e8s8e8nt. +.p3re1s2e +.presen1t +.pr8e8s8e8n8ts. +.presen4t4s2 +.pr8o8j8e8ct. +.pro5j +.pro1je +.proje2c1t +.pr8o8j8e8c8ts. +.projec4t1s2 +.re8c9i9p8r8o8c9i9t8y. +.re1c2i +.rec2ip +.recipr2 +.recipr2oc +.re1cipro1ci +.recipro2c1it +.reciproci1ty +.re9c8o8g9n8i9z8a8n8ce. +.re1co +.re2cog +.rec3ogniz +.recog1ni +.recogniza1 +.recogniza2n +.re8f9o8r9m8a9t8i8on. +.re1f +.re1fo +.refo2r +.refor1m +.refor1ma +.reforma1t2io +.reformatio2n +.re8t9r8i9b8u9t8i8on. +.re3tri +.retr4ib +.retri3bu1t2io +.retrib4u1t2i +.retributio2n +.ta9b8le. +.2tab +.tab2l2 +.ac8a8d9e9m8y. +.a1ca +.aca2d +.acad4em +.acade3my +.ac8a8d9e9m8i8e8s. +.academ2i4e4 +.ac9c8u9s8a9t8i8v8e. +.ac3c +.ac1c2us +.accusa2 +.accusa1t2iv +.ac8r8o9n8y8m. +.acro2n +.acronym4 +.ac8r8y8l9a8m8i8d8e. +.acry3la +.acrylam2id +.ac8r8y8l9a8m8i8d8e8s. +.acrylamide4s2 +.ac8r8y8l9a8l8d8e9h8y8d8e. +.acryla2ld +.acrylal2de +.acrylalde1h4 +.acrylaldehy1d +.ad8d9a9b8l8e. +.ad1d2a +.ad2d3a4b +.addab2l2 +.ad8d9i9b8l8e. +.addi1b2l2 +.ad8r8e8n9a9l8i8n8e. +.a1dr +.adre4 +.a5dren +.adre1na +.adrena4l1i +.adrena1l4ine +.ae8r8o9s8p8a8c8e. +.ae4r +.a2ero +.aero2s4pa +.aerospa4ce +.af9t8e8r9t8h8o8u8g8h8t. +.afterthou2 +.af9t8e8r9t8h8o8u8g8h8t8s. +.afterthough4t1s2 +.ag8r8o8n9o9m8i8s8t. +.a1gr +.ag4ro +.agro2n +.agronom2is +.ag8r8o8n9o9m8i8s8t8s. +.agronomis4t1s2 +.al9g8e9b8r8a9i9c8a8l9l8y. +.a4l1g4 +.alg2e1b +.alge3br +.algebr2ai2 +.algebrai1ca +.algebraical1l +.algebraical1ly +.am9p8h8e8t9a9m8i8n8e. +.a4m1p +.amphe4t +.amphe1ta +.amphetam1in +.amphetam2ine +.am9p8h8e8t9a9m8i8n8e8s. +.amphetami1nes +.an9a9l8y8s8e. +.3ana1ly +.a1na +.an4a2lys4 +.anal5y3s2e +.an9a9l8y8s8e8d. +.analy4s4ed +.an8a8l8y9s8e8s. +.analys1e4s +.an9i8s8o9t8r8o8p9i8c. +.ani2so +.anisotrop3ic +.an9i8s8o9t8r8o8p9i9c8a8l9l8y. +.anisotropi1ca +.anisotropical1l +.anisotropical1ly +.an9i8s8o8t9r8o9p8i8s8m. +.anisotropi2s1m +.an9i8s8o8t9r8o8p8y. +.anisotropy5 +.an8o8m9a8l8y. +.ano4 +.anoma5l +.ano1ma +.anoma1ly +.an8o8m9a8l8i8e8s. +.anomal1i +.anomal2i4e4 +.an8t8i9d8e8r8i8v9a9t8i8v8e. +.ant2id +.antider1i +.antider2i4v +.antide4ri1va +.antideri3vat +.antider2iva1t2iv +.an8t8i9d8e8r8i8v9a9t8i8v8e8s. +.antiderivativ4e2s +.an8t8i9h8o8l8o9m8o8r9p8h8i8c. +.anti3h +.antiholo1mo +.antiholomo2r +.antiholomor1p +.antiholomorp4h4 +.antiholomorph1ic +.an9t8i8n9o9m8y. +.an2t1in +.ant2i1no +.antino3my +.an9t8i8n9o9m8i8e8s. +.antinom2ie4 +.an9t8i9n8u9c8l8e8a8r. +.antin1u +.antinucle3 +.antinu1c4l4 +.antinucle2a +.antinucle2a2r +.an9t8i9n8u9c8l8e9o8n. +.antinucleo2n +.an9t8i9r8e8v9o9l8u9t8i8o8n9a8r8y. +.ant4ir +.antirev2 +.antirev5olu +.antirevo1lut +.antirevol4u1t2i +.antirevolutio1n5a +.antirevolu1t2io +.antirevolutio2n +.antirevolution2a2r +.ap8o8t8h9e9o9s8e8s. +.ap4ot +.ap4oth +.apoth2e +.apotheos4 +.apotheos1e4s +.ap8o8t8h9e9o9s8i8s. +.apotheo1sis +.ap9p8e8n9d8i8x. +.a4p1p +.ap2pe +.ap3pen +.ar9c8h8i9m8e9d8e8a8n. +.ar1c +.ar2ch +.archi2med +.archimedea2n +.ar9c8h8i9p8e8l9a8g8o. +.arch2i4p +.archipe4 +.archipe4la +.archipela2go +.ar9c8h8i9p8e8l9a9g8o8s. +.ar9c8h8i8v8e. +.arch2i2v +.ar9c8h8i8v8e8s. +.archiv4e2s +.ar9c8h8i8v9i8n8g. +.archiv1in +.archi4ving +.ar9c8h8i8v9i8s8t. +.ar9c8h8i8v9i8s8t8s. +.archivis4t1s2 +.ar9c8h8e9t8y8p9a8l. +.arche2 +.arche4t +.arche1ty +.archety1pa +.archetyp4al +.ar9c8h8e9t8y8p9i9c8a8l. +.archetyp3i +.archetypi1ca +.ar8c9t8a8n9g8e8n8t. +.ar2c1t +.arct5ang +.arc1ta +.arcta2n +.arctan1gen +.arctangen1t +.ar8c9t8a8n9g8e8n8t8s. +.arctangen4t4s2 +.as9s8i8g8n9a9b8l8e. +.as1si +.as4sig1n4a +.ass2ig +.assig2n1a2b +.assignab2l2 +.as9s8i8g8n9o8r. +.assig1no +.as9s8i8g8n9o8r8s. +.assigno4rs2 +.as9s8i8s8t9a8n8t9s8h8i8p. +.as1sis +.assis1ta +.assista2n +.assistan1t +.assistan4t4s2 +.assistants2h4 +.assistant3sh2i4p +.as9s8i8s8t9a8n8t9s8h8i8p8s. +.assistantshi2p1s2 +.as8y8m8p9t8o9m8a8t8i8c. +.as4y +.asy4m1p +.asym2p1t +.asymp1to +.asympto2ma +.asymptomat1ic +.as9y8m8p9t8o8t9i8c. +.as8y8n9c8h8r8o9n8o8u8s. +.asyn3c4hr4 +.asyn2ch +.asynchro2n +.asynchro1nou2 +.asynchrono2us +.at8h9e8r9o9s8c8l8e9r8o9s8i8s. +.4ath +.ath2e +.ath2ero +.atheros2c +.atheroscle5 +.atheros1c4l4 +.ath2eroscl4ero +.atherosclero1sis +.at9m8o8s9p8h8e8r8e. +.a4t1m +.at1mo +.atmos2 +.atmo3sp +.atmos2phe +.atmo3sph4er +.at9m8o8s9p8h8e8r8e8s. +.at9t8r8i8b9u8t8e8d. +.a4t3t2 +.attr4ib +.attribu2t1ed +.at9t8r8i8b9u8t9a8b8l8e. +.attri4bu1ta +.attribu2ta4b +.attributab2l2 +.au9t8o9m8a9t8i8o8n. +.au1to +.auto2ma +.automa1t2io +.automatio2n +.au9t8o8m9a9t8o8n. +.au1toma1to +.automato2n +.au9t8o8m9a9t8a. +.automa2ta +.au9t8o9n8u8m9b8e8r9i8n8g. +.au5to2n +.auton5um +.autonu4m1b +.autonumber1i +.autonumberin4g +.au9t8o8n9o9m8o8u8s. +.au4tono +.autono4mo +.autono3mo2us +.autonomou2 +.au8t8o9r8o8u8n8d9i8n8g. +.autorou2 +.autoroun2d +.autoround1in +.av9o8i8r9d8u9p8o8i8s. +.avoi4 +.avo4ir +.avoir1du +.avoir4dup +.avoi2rdupoi2 +.ba8n8d9l8e8a8d8e8r. +.b4and +.ban1dl +.bandle2a +.bandlea2d1 +.ba8n8d9l8e8a8d8e8r8s. +.bandleade4r5s2 +.ba8n8k9r8u8p8t. +.ba4nk2 +.bankru2p1t +.ba8n8k9r8u8p8t9c8y. +.bankrup4tc +.bankrupt1cy +.ba8n8k9r8u8p8t9c8i8e8s. +.bankrupt1ci +.bankruptc2ie4 +.ba8r9o8n8i8e8s. +.b2a2r +.ba5roni +.baro2n +.baron2ie4 +.ba8s8e9l8i8n8e9s8k8i8p. +.basel2i +.base1l4ine +.baseli1nes +.baselinesk2 +.baselinesk1i +.baselinesk2i4p +.ba9t8h8y8m9e9t8r8y. +.1bat +.b4ath +.bathyme4 +.bathym4etr +.bathyme3try +.ba8t8h8y9s8c8a8p8h8e. +.bathy2s +.bathys4c +.bathysca4p +.bathys1ca +.be8a8n9i8e8s. +.bea2n +.bea3nies +.bean2ie4 +.be9h8a8v9i8o8u8r. +.be1h4 +.behav1i +.behavi1ou2 +.behav2io +.behavi4our +.be9h8a8v9i8o8u8r8s. +.behaviou4rs2 +.be8v8i8e8s. +.be1vi +.bev2ie4 +.bi8b9l8i9o8g9r8a9p8h8y9s8t8y8l8e. +.bi2b +.bi1b2l2 +.bib3li +.bibli5og +.bibl2io +.biblio2gr +.biblio4g3ra1phy +.bibliography2s +.bibliographys1t +.bibliographys2ty +.bibliographys2tyl +.bi9d8i8f9f8e8r9e8n9t8i8a8l. +.b2i4d +.bi2di +.bid1if +.bidi4f1f +.bidiffer1 +.bidiffer3en1t +.bidifferent2i +.bidifferen1t2i1a +.bidifferenti2al +.bi9d8i8ff8e8r9e8n9t8i8a8l. +.bid1i4ff +.bidiffer1 +.bidiffer3en1t +.bidifferent2i +.bidifferen1t2i1a +.bidifferenti2al +.bi8g9g8e8s8t. +.b2ig +.bi4g1g2 +.big2ge +.bi8l8l9a8b8l8e. +.1bil +.bill5ab +.bil1l +.billab2l2 +.bi8o9m8a8t8h9e9m8a8t9i8c8s. +.b2io +.bio4m +.bio1ma +.biom4ath3 +.biomath5em +.biomath2e +.bio1mathe1ma +.biomathemat1ic +.biomathemati4c3s2 +.bi8o9m8e8d9i9c8a8l. +.bio2me +.bio2med +.biom4edi +.biomed3i1ca +.bi8o9m8e8d9i9c8i8n8e. +.biomed2i1ci +.biomedi2cin +.biomedic2ine +.bi8o9r8h8y8t8h8m8s. +.biorh4 +.biorhyt4h1m +.biorhyth4m1s2 +.bi8t9m8a8p. +.bi2t +.bi4t1m +.bit1ma +.bit4map +.bi8t9m8a8p8s. +.bitma2p1s2 +.bl8a8n8d9e8r. +.b2l2 +.b3l4and +.bla2n +.blan1de +.bl8a8n8d9e8s8t. +.blande4s2 +.bl8i8n8d9e8r. +.bl4ind +.blin1de +.bl8o8n8d8e8s. +.b4lo +.blo2n +.bl2ond +.blon1de +.blondes2 +.bl8u8e9p8r8i8n8t. +.bluepr2 +.blueprin4t3 +.bl8u8e9p8r8i8n8t8s. +.blueprin4t4s2 +.bo9l8o8m9e9t8e8r. +.bolo2me +.bolo4met +.bolome1te +.bo8o8k9s8e8l8l9e8r. +.3boo2 +.bo2o4k +.boo4k1s2 +.booksel1l +.booksel2le +.bo8o8k9s8e8l8l9e8r8s. +.bookselle4r1s2 +.bo8o8l9e8a8n. +.boole2a +.boolea2n +.bo8o8l9e8a8n8s. +.boolea2n1s2 +.bo8r9n8o9l8o8g9i9c8a8l. +.borno4 +.borno3log1ic +.bornologi1ca +.bo8t9u9l8i8s8m. +.bo1tu +.botul2i +.botuli2s1m +.br8u8s8q8u8e8r. +.br2us +.brusqu2 +.brus3quer +.bu8f9f8e8r. +.buf4fer1 +.bu4f1f +.bu8ff8e8r. +.buffer1 +.bu4ff +.bu8f9f8e8r8s. +.buffe4r1s2 +.bu8ff8e8r8s. +.buffe4r1s2 +.bu8s8i8e8r. +.bus5ie4 +.b2us +.bu8s8i8e8s8t. +.busi1est +.bu8s8s8i8n8g. +.bu2ss +.bus1si +.bus2s1in +.buss3ing +.bu8t8t8e8d. +.but2t1ed +.bu8z8z9w8o8r8d. +.bu4z1z2 +.buzz1wo2 +.bu8z8z9w8o8r8d8s. +.buzzwor2d1s2 +.ca9c8o8p8h9o9n8y. +.ca1co +.cac2oph +.cacopho5ny +.cacopho2n +.ca9c8o8p8h9o9n8i8e8s. +.caco5phoni +.cacophon2ie4 +.ca8l8l9e8r. +.cal1l +.cal2le +.ca8l8l9e8r8s. +.calle4r1s2 +.ca8m9e8r8a9m8e8n. +.cam5er1a +.camera1men +.ca8r8t9w8h8e8e8l. +.cartw4 +.ca8r8t9w8h8e8e8l8s. +.cartwhee2l1s2 +.ca9t8a8r8r8h8s. +.ca2ta +.cat2a2r +.catar1r4 +.catarrh4 +.catarr4h1s2 +.ca8t9a9s8t8r8o8p8h9i8c. +.catas1t4r +.catastr2oph +.catastroph1ic +.ca8t9a9s8t8r8o8p8h9i9c8a8l8l8y. +.1catastrophi1ca +.catastrophical1l +.catastrophical1ly +.ca8t9e9n8o8i8d. +.cat4eno +.catenoi2 +.cateno2id +.ca8t9e9n8o8i8d8s. +.catenoi2d1s2 +.ca8u9l8i9f8l8o8w9e8r. +.cau4l2 +.caul2i +.cauli4f4l2 +.cauliflow1er +.ca8u9l8i9fl8o8w9e8r. +.cauli4fl2 +.cauliflow1er +.ch8a8p9a8r9r8a8l. +.chap2a2r4 +.cha1pa +.chapar1r4 +.ch8a8r9t8r8e8u8s8e. +.ch2a2r +.chartr4eu2 +.chartre2us4 +.ch8e8m8o9t8h8e8r9a8p8y. +.che2 +.che1mo +.chem4oth3 +.chemoth2e +.chemoth4er1a +.chemothera3p +.ch8e8m8o9t8h8e8r9a9p8i8e8s. +.chemotherap2ie4 +.ch8l8o8r8o9m8e8t8h9a8n8e. +.c4h1l4 +.ch2lo +.chloro2me +.chloro4met +.chlorometha2n4 +.ch8l8o8r8o9m8e8t8h9a8n8e8s. +.chlorometha1nes +.ch8o9l8e8s9t8e8r8i8c. +.3cho2 +.c3hol4e +.choles2 +.choles1ter1i +.ci8g9a9r8e8t8t8e. +.c2ig +.ci1ga +.cig2a2r +.cigare4t3t2 +.ci8g9a9r8e8t8t8e8s. +.cigaret4tes +.ci8n8q8u8e9f8o8i8l. +.2cin +.cin1q +.cinqu2 +.cinque1f +.cinque1fo +.cinquefoi2 +.co9a8s8s8o9c8i8a9t8i8v8e. +.c4oa +.coa2ss +.coas1so +.coasso1ci +.coasso3c2i1a +.coassoci4a1t2iv +.co9g8n8a8c. +.2cog +.cog1n4a +.co9g8n8a8c8s. +.cogna4c3s2 +.co9k8e8r9n8e8l. +.c2ok +.cok1er +.coker3nel +.co9k8e8r9n8e8l8s. +.cokerne2l1s2 +.co8l9l8i8n9e8a9t8i8o8n. +.col1l +.coll2i +.col2lin4 +.col1l4ine +.collin3ea +.collinea2t +.collinea1t2io +.collineatio2n +.co8l9u8m8n8s. +.colu4m1n +.colum2n1s2 +.co8m9p8a8r9a8n8d. +.co4m1p +.compara5 +.com1pa +.comp2a2r +.compara2n +.compar4and +.co8m9p8a8r9a8n8d8s. +.comparan2d1s2 +.co8m9p8e8n9d8i8u8m. +.compendi1u +.co8m9p8o9n8e8n8t9w8i8s8e. +.compo2n +.compo3nen +.componen1t +.componentw4 +.componentwis4 +.componentwi2 +.component3w4ise +.co8m8p9t8r8o8l9l8e8r. +.comp4tr +.com2p1t +.comptrol1l +.comptrol2le +.co8m8p9t8r8o8l9l8e8r8s. +.comptrolle4r1s2 +.co8n9f8o8r8m9a8b8l8e. +.co2n +.con3f +.con1fo +.confo2r +.confor1m +.confor1ma +.confor2mab +.conformab2l2 +.co8n9f8o8r8m9i8s8t. +.confor2mi +.conform2is +.co8n9f8o8r8m9i8s8t8s. +.conformis4t1s2 +.co8n9f8o8r8m9i8t8y. +.confor3mit +.conformi1ty +.co8n9g8r8e8s8s. +.con3g +.con1gr +.congr2e2ss +.co8n9g8r8e8s8s8e8s. +.congress1e4s +.co8n9t8r8i8b9u8t8e. +.con5t +.contr4ib +.co8n9t8r8i8b9u8t8e8s. +.co8n9t8r8i8b9u8t8e8d. +.contribu2t1ed +.co9r8e9l8a9t8i8o8n. +.core1la +.corela1t2io +.corelatio2n +.co9r8e9l8a9t8i8o8n8s. +.corelatio2n3s2 +.co9r8e9l8i9g8i8o8n9i8s8t. +.core1l2i +.corel2ig +.corel4igi +.coreli5g2io +.coreligion3i +.coreligio2n +.coreligion1is +.co9r8e9l8i9g8i8o8n9i8s8t8s. +.coreligionis4t1s2 +.co9r8e9o8p9s8i8s. +.core1o +.coreo2p1s2 +.coreop1sis +.co9r8e9s8p8o8n9d8e8n8t. +.core1sp +.cores4po2n +.coresp2ond +.corespon1de +.corespon1den +.coresponden1t +.co9r8e9s8p8o8n9d8e8n8t8s. +.coresponden4t4s2 +.co9s8e9c8a8n8t. +.cos4e +.cose1ca +.coseca2n +.cosecan1t +.co9t8a8n9g8e8n8t. +.co4ta2n +.co1ta +.cot2ang +.cotan1gen +.cotangen1t +.co8u8r9s8e8s. +.cou2 +.cou4rs2 +.cour2se +.cours3e4s +.co9w8o8r8k9e8r. +.co4wo2 +.cowork1er +.co9w8o8r8k9e8r8s. +.coworke4r1s2 +.cr8a8n8k9c8a8s8e. +.cra2n +.cra4nk2 +.crank1ca +.cr8a8n8k9s8h8a8f8t. +.cran4k1s2 +.cranks2h +.cranksha2f +.cranksha2ft +.cr8o8c9o9d8i8l8e. +.cr2oc +.cro4cod +.cro1co +.cr8o8c9o9d8i8l8e8s. +.crocodiles2 +.cr8o8s8s9h8a8t8c8h. +.cro2s4s +.cross2h +.crossha4tc +.crosshat4ch +.cr8o8s8s9h8a8t8c8h8e8d. +.crosshatche2 +.crosshat4ch4ed +.cr8o8s8s9o8v8e8r. +.cros1so +.cros4sov +.cr8y8p9t8o9g8r8a8m. +.cry2p1t +.cryp1to +.crypto2gr +.cr8y8p9t8o9g8r8a8m8s. +.cryptogra4m1s2 +.cu8f8f9l8i8n8k. +.c4uf +.cu4f1f +.cuff4l2 +.cufflin4 +.cuffl4i4nk2 +.cu8ffl8i8n8k. +.cuffl4i4nk2 +.cu8f8f9l8i8n8k8s. +.cufflin4k1s2 +.cu8ffl8i8n8k8s. +.cufflin4k1s2 +.cu9n8e8i9f8o8r8m. +.3cun +.cu2ne +.cunei2 +.cunei1fo +.cuneifo2r +.cuneifor1m +.cu8s9t8o8m9i8z9a9b8l8e. +.1c2us +.cus1to +.custom2iz +.customiza1 +.customiz5a2b +.customizab2l2 +.cu8s9t8o8m9i8z8e. +.customi2ze +.cu8s9t8o8m9i8z8e8s. +.cu8s9t8o8m9i8z8e8d. +.da8c8h8s9h8u8n8d. +.1d2a +.da2ch4 +.dac4h1s2 +.dach4s2h +.da8m9s8e8l9f8l8y. +.da2m2 +.da4m1s2 +.dam5se2l2f +.damself4l2 +.damself2ly5 +.da8m9s8e8l9fl8y. +.dam5se2l2fl2 +.damselfly +.da8m9s8e8l9f8l8i8e8s. +.damselfl2ie4 +.da8m9s8e8l9fl8i8e8s. +.damselfl2ie4 +.da8c8t8y8l9o9g8r8a8m. +.da2c1t +.dac1ty +.dac2tyl +.dacty3lo +.dactylo1gr +.da8c8t8y8l9o9g8r8a8p8h. +.da8t8a9b8a8s8e. +.3dat +.da2ta +.da2tab +.da8t8a9b8a8s8e8s. +.databas1e4s +.da8t8a9p8a8t8h. +.dat5ap +.datap5at +.data1pa +.datap4ath +.da8t8a9p8a8t8h8s. +.datapa2t4h1s2 +.da8t8e9s8t8a8m8p. +.dat3est +.dates1ta +.datesta4m1p +.da8t8e9s8t8a8m8p8s. +.datestam2p1s2 +.de9c8l8a8r9a8b8l8e. +.de4cl2a2r +.decla2rab +.declarab2l2 +.de9f8i8n9i9t8i8v8e. +.de1f +.de1fi +.de2fin +.def2ini +.defin2it +.defini1ti +.defini1t2iv +.de9fi8n9i9t8i8v8e. +.de1fi +.de2fin +.defini +.defin2it +.defini1ti +.defini1t2iv +.de9l8e8c9t8a9b8l8e. +.d5elec +.dele2c1t +.delec2ta4b +.delec1ta +.delectab2l2 +.de8m8i9s8e8m8i9q8u8a9v8e8r. +.de4m2is +.dem4ise +.demisemi3qua +.demisemiqu2 +.demisemiqua5v4 +.de8m8i9s8e8m8i9q8u8a9v8e8r8s. +.demisemiquave4r1s2 +.de9m8o8c9r8a9t8i8s8m. +.de4mocr +.democrati2s4m +.de8m8o8s. +.demos2 +.de9r8i8v9a9t8i8v8e. +.der2i4v +.de4ri1va +.deri3vat +.der2iva1t2iv +.de9r8i8v9a9t8i8v8e8s. +.derivativ4e2s +.di8a9l8e8c9t8i8c. +.1d4i3a +.di2al +.di2ale +.diale2c1t +.di8a9l8e8c9t8i8c8s. +.dialecti4c3s2 +.di8a9l8e8c9t8i9c8i8a8n. +.dialect2i1ci +.d2i1alecti3c2i1a +.dialectici2a2n +.di8a9l8e8c9t8i9c8i8a8n8s. +.dialecticia2n1s2 +.di9c8h8l8o8r8o9m8e8t8h9a8n8e. +.d4i2ch +.dic4h1l4 +.dich2lo +.dichloro2me +.dichloro4met +.dichlorometha2n4 +.di8f9f8r8a8c8t. +.d1if +.dif4fr +.di4f1f +.diffra2c1t +.di8ff8r8a8c8t. +.d1i4ff +.diffr +.diffra2c1t +.di8f9f8r8a8c8t8s. +.diffrac4t1s2 +.di8ff8r8a8c8t8s. +.diffrac4t1s2 +.di8f9f8r8a8c9t8i8o8n. +.diffrac1t2io +.diffractio2n +.di8ff8r8a8c9t8i8o8n. +.diffrac1t2io +.diffractio2n +.di8f9f8r8a8c9t8i8o8n8s. +.diffractio2n3s2 +.di8ff8r8a8c9t8i8o8n8s. +.diffractio2n3s2 +.di8r8e8r. +.d4ir2 +.di1re +.dir1er4 +.di8r8e9n8e8s8s. +.dire1nes +.diren2e2ss +.di8s9p8a8r9a8n8d. +.dis1 +.dis1p +.di2s1pa +.disp2a2r +.dispara2n +.dispar4and +.di8s9p8a8r9a8n8d8s. +.disparan2d1s2 +.di8s9t8r8a8u8g8h8t9l8y. +.d4is3t +.dist4r +.dis1tra +.distraugh3 +.distraugh2tl +.distraught1ly +.di8s9t8r8i8b9u8t8e. +.distr4ib +.di8s9t8r8i8b9u8t8e8s. +.di8s9t8r8i8b9u8t8e8d. +.distribu2t1ed +.do8u9b8l8e9s8p8a8c8e. +.dou2 +.dou3b2l2 +.dou5ble1sp +.doubles2 +.double2s1pa +.doublespa4ce +.do8u9b8l8e9s8p8a8c9i8n8g. +.doublesp4a2ci +.doublespa2c1in +.doublespac1ing +.do8l8l9i8s8h. +.dol1l +.doll2i +.dollis2h +.dr8i8f8t9a8g8e. +.1dr +.dr4i2ft +.drif1ta +.dr8i8v9e8r8s. +.dr2iv +.drive4r1s2 +.dr8o8m9e9d8a8r8y. +.dro2me +.dro2med +.drom2e2d2a +.drome4dary +.dromed2a2r +.dr8o8m9e9d8a8r8i8e8s. +.dromedar1i +.dromedar2ie4 +.du9o8p9o9l8i8s8t. +.duopol2i +.du9o8p9o9l8i8s8t8s. +.duopolis4t1s2 +.du9o8p9o8l8y. +.duopo2ly +.dy8s9l8e8x8i8a. +.d2y +.dys1l2 +.dys2le +.dyslex3i +.dyslex2i5a +.dy8s9l8e8c9t8i8c. +.dysle2c1t +.ea8s8t9e8n8d9e8r8s. +.east3 +.eas3ten +.eas3tend +.easten1de +.eastende4r5s2 +.ec8o9n8o8m9i8c8s. +.e1co +.eco2n +.eco3nomic +.economi4c3s2 +.ec8o8n9o9m8i8s8t. +.econom2is +.ec8o8n9o9m8i8s8t8s. +.economis4t1s2 +.ei9g8e8n9c8l8a8s8s. +.ei2 +.e2ig2 +.ei1gen +.eigen1c4l4 +.eigencla2ss +.ei9g8e8n9c8l8a8s8s8e8s. +.eigenclass1e4s +.ei9g8e8n9v8a8l9u8e. +.eigen1v2 +.eigen1va +.eigenval1u +.ei9g8e8n9v8a8l9u8e8s. +.el8e8c8t8r8o9m8e8c8h8a8n9i9c8a8l. +.5elec +.ele2c1t +.electro2me +.electrome2ch +.electrome5cha4n1ic +.electromecha2n +.electromechani1ca +.el8e8c8t8r8o9m8e8c8h8a8n8o9a8c8o8u8s8t8i8c. +.electromechano4 +.electromechan4oa +.electromechanoa1co +.electromechanoacou2 +.electromechanoaco2us +.electromechanoacoust2i +.electromechanoacous1tic +.el8i8t9i8s8t. +.el2i +.el1it +.eli1ti +.el4itis +.el8i8t9i8s8t8s. +.elitis4t1s2 +.en9t8r8e9p8r8e9n8e8u8r. +.en1t +.entrepr2 +.entrepren4eu +.en9t8r8e9p8r8e9n8e8u8r9i8a8l. +.entrepreneur2i3a +.entrepreneuri2al +.ep9i9n8e8p8h9r8i8n8e. +.epi2n +.ep2ine +.epinep4hr4 +.ep2inephr2in4e +.eq8u8i9v8a8r8i9a8n8t. +.equ2iv3 +.equi1va +.equiv2a2r +.equivar1i +.equivar3i2a2n +.equivar2i3a +.equivar4ian4t +.eq8u8i9v8a8r8i9a8n8c8e. +.equivar4ianc +.et8h9a8n8e. +.etha2n4 +.et8h9y8l9e8n8e. +.ev8e8r9s8i9b8l8e. +.ev1er +.eve4r1s2 +.ever1si +.ever4si4b +.eversi1b2l2 +.ev8e8r8t. +.ev8e8r8t8s. +.ever4t1s2 +.ev8e8r8t9e8d. +.ever2t1ed +.ev8e8r8t9i8n8g. +.ever1ti +.ever2t1in +.ex9q8u8i8s9i8t8e. +.exqu2 +.exq2ui2 +.exquis2ite +.ex9t8r8a9o8r9d8i9n8a8r8y. +.ex1t2 +.ex1tra +.extr4ao +.extraord2i +.extraord1in4 +.extraor1di1na +.extraordin2a2r +.fa8l8l9i8n8g. +.1fa +.fal1l +.fall2i +.fal2lin4 +.fe8r8m8i9o8n8s. +.fer1 +.fer3m4 +.fer4m2io +.fermio2n +.fermio2n3s2 +.fi9n8i8t8e9l8y. +.1fi +.2fin +.f2ini +.fin2it +.fin2ite +.finite1ly +.fi9n8i8t8e9l8y. +.1fi +.2fin +.fini +.fin2it +.fin2ite +.finite1ly +.fl8a9g8e8l9l8u8m. +.f4l2 +.flag5el1l +.fl8a9g8e8l9l8u8m. +.fl2 +.flag5el1l +.fl8a9g8e8l9l8a. +.flag4ella +.fl8a9g8e8l9l8a. +.flag4ella +.fl8a8m9m8a9b8l8e8s. +.flam1m +.flam1ma +.flam2mab +.flammab2l2 +.flammables2 +.fl8a8m9m8a9b8l8e8s. +.flam1m +.flam1ma +.flam2mab +.flammab2l2 +.flammables2 +.fl8e8d8g9l8i8n8g. +.fledgl2 +.fl8e8d8g9l8i8n8g. +.fledgl2 +.fl8o8w9c8h8a8r8t. +.flow2ch +.flowch2a2r +.fl8o8w9c8h8a8r8t. +.flow2ch +.flowch2a2r +.fl8o8w9c8h8a8r8t8s. +.flowchar4t1s2 +.fl8o8w9c8h8a8r8t8s. +.flowchar4t1s2 +.fl8u8o8r8o9c8a8r9b8o8n. +.flu3o +.fluo3r +.fluor2oc +.fluoro1ca +.fluoroc2a2r +.fluorocar1b +.fluorocarb4o +.fluorocarbo2n +.fl8u8o8r8o9c8a8r9b8o8n. +.flu3o +.fluo3r +.fluor2oc +.fluoro1ca +.fluoroc2a2r +.fluorocar1b +.fluorocarb4o +.fluorocarbo2n +.fo8r9m8i9d8a9b8l8e. +.for2mi +.formi1d4a +.form2id +.formi2d3a4b +.formidab2l2 +.fo8r9m8i9d8a9b8l8y. +.formidab1ly +.fo8r9s8y8t8h9i8a. +.fo4rs2 +.fors4y +.forsyth2i1a +.fo8r8t8h9r8i8g8h8t. +.fort4hr4 +.forthr2ig +.fr8e8e9l8o8a8d8e8r. +.freel4oa +.freeloa2d3 +.fr8e8e9l8o8a8d8e8r8s. +.freeloade4r5s2 +.fr8i8e8n8d9l8i8e8r. +.fri2 +.fr2ie4 +.fr2ie4ndl2ie4 +.fr8i9v8o8l9i8t8y. +.fr2iv +.frivol2i +.frivol1it +.frivoli1ty +.fr8i9v8o8l9i9t8i8e8s. +.frivoli1ti +.frivolit2ie4 +.fr8i8v9o9l8o8u8s. +.frivolou2 +.frivolo2us +.ga9l8a8c9t8i8c. +.gala2c1t +.ga8l9a8x8y. +.ga8l9a8x9i8e8s. +.galax3i +.galax2ie4 +.ga8s9o8m9e9t8e8r. +.ga1so +.ga3som +.gaso2me +.gaso4met +.gasome1te +.ge9o9d8e8s9i8c. +.geodes2 +.geode1si +.geode2sic +.ge9o9d8e8t9i8c. +.geode1t +.geodet1ic +.ge8o9m8e8t9r8i8c. +.ge3om +.geo2me +.geo4met +.geom4etr +.geo5met3ric +.ge8o9m8e8t9r8i8c8s. +.geome4tri4c3s2 +.ge9o9s8t8r8o8p8h8i8c. +.geos4 +.geost4r +.geostr2oph +.geostroph1ic +.ge8o9t8h8e8r9m8a8l. +.ge4ot +.ge4oth +.geoth2e +.geother3m4 +.geother1ma +.ge9o8t9r8o9p8i8s8m. +.geotropi2s1m +.gn8o9m8o8n. +.g1no +.gno4mo +.gno4mo2n +.gn8o9m8o8n8s. +.gnomo2n3s2 +.gr8a8n8d9u8n8c8l8e. +.1gr +.gra2n2 +.gr4and +.gran1du +.grandu4n +.grandun1c4l4 +.gr8a8n8d9u8n8c8l8e8s. +.granduncles2 +.gr8i8e8v9a8n8c8e. +.gr2ie4 +.grie1va +.grieva2n +.gr8i8e8v9a8n8c8e8s. +.gr8i8e8v9o8u8s. +.grievou2 +.grievo2us +.gr8i8e8v9o8u8s9l8y. +.grievous1l2 +.grievous1ly +.ha8i8r9s8t8y8l8e. +.hai2 +.ha4ir +.hai4rs2 +.hairs2ty +.hairs2tyl +.ha8i8r9s8t8y8l8e8s. +.hairstyles2 +.ha8i8r9s8t8y8l9i8s8t. +.ha8i8r9s8t8y8l9i8s8t8s. +.hairstylis4t1s2 +.ha8l8f9s8p8a8c8e. +.ha2lf +.hal2f3s +.half2s1pa +.halfspa4ce +.ha8l8f9s8p8a8c8e8s. +.ha8l8f9w8a8y. +.ha8r9b8i8n9g8e8r. +.h2a2r +.har1b +.harbi2 +.har2bin +.harb4inge +.ha8r9b8i8n9g8e8r8s. +.harbinge4r1s2 +.ha8r9l8e9q8u8i8n. +.har4le4 +.har1l +.harle1q +.harlequ2 +.harleq2ui2 +.harlequi4n +.ha8r9l8e9q8u8i8n8s. +.harlequ2i2n1s2 +.ha8t8c8h9e8r8i8e8s. +.ha4tc +.hat4ch +.hatche2 +.hatcher1i +.hatcher2ie4 +.he8m8i9d8e8m8i9s8e8m8i9q8u8a9v8e8r. +.hem2id +.hemid4em +.hemide4m2is +.hemidem4ise +.hemidemisemi3qua +.hemidemisemiqu2 +.hemidemisemiqua5v4 +.he8m8i9d8e8m8i9s8e8m8i9q8u8a9v8e8r8s. +.hemidemisemiquave4r1s2 +.he9m8o9g8l8o9b8i8n. +.hemo4g +.he1mo +.hemo4gl2 +.hemo3glo +.hemoglo1bi +.hemoglo2bin +.he9m8o9p8h8i8l9i8a. +.hem2oph +.hemoph4il2 +.hemophil1i +.hemophil3i1a +.he9m8o9p8h8i8l9i8a8c. +.he9m8o9p8h8i8l9i8a8c8s. +.hemophilia4c3s2 +.he8m8o9r8h8e9o8l9o8g8y. +.hemo2r +.hemorh4 +.hemorhe3ol +.hemorheol1o1gy +.he9p8a8t9i8c. +.hep5 +.he2pa +.hepat1ic +.he8r9m8a8p8h9r8o9d8i8t8e. +.her3m4 +.her1ma +.her4map +.hermap4hr4 +.hermaphrod2ite +.he8r9m8a8p8h9r8o9d8i8t9i8c. +.hermaphrod2i1ti +.hermaphrod4i2tic +.he9r8o8e8s. +.hero4e +.he8x8a9d8e8c9i9m8a8l. +.hex1a +.hexa2d +.hexade1c2i +.hexade2c3im +.hexadeci1ma +.ho9l8o9n8o9m8y. +.holo2n +.holon3o3my +.ho9m8e8o9m8o8r9p8h8i8c. +.ho2me3 +.homeo1mo +.homeomo2r +.homeomor1p +.homeomorp4h4 +.homeomorph1ic +.ho9m8e8o9m8o8r9p8h8i8s8m. +.homeomorphi2s1m +.ho9m8o9t8h8e8t8i8c. +.ho1mo +.hom4oth3 +.homoth2e +.homo3the4t +.homothet1ic +.ho8r8s8e9r8a8d9i8s8h. +.hor4se +.ho4rs2 +.horser1a +.horsera2d +.horser2adi +.horseradis1 +.horseradis2h +.ho8t9b8e8d. +.ho2t1b +.hot4be2d +.ho8t9b8e8d8s. +.hotbe2d1s2 +.hy9d8r8o9t8h8e8r9m8a8l. +.hy1d +.hy1dr +.hydro4th2e +.hydr4oth +.hydrother3m4 +.hydrother1ma +.hy9p8o9t8h8a8l9a9m8u8s. +.hy3po +.hyp4ot +.hyp4oth +.hypotha3la +.hypothala3m +.hypothala1mu +.hypothalam2us +.id8e8a8l8s. +.ide3a4l +.idea2l1s2 +.id8e8o9g8r8a8p8h8s. +.ideo2g +.ideo1gr +.ideogra4p4h1s2 +.id8i8o9s8y8n9c8r8a8s8y. +.i2di +.i1d3io +.idi4os +.idios4y +.idiosyn1cr +.idiosyncr2as +.idios4yncras4y +.id8i8o9s8y8n9c8r8a9s8i8e8s. +.idiosyncras2ie4 +.id8i8o9s8y8n9c8r8a8t8i8c. +.idiosyn5crat1ic +.id8i8o9s8y8n9c8r8a8t9i9c8a8l9l8y. +.idiosyncrati1ca +.idiosyncratical1l +.idiosyncratical1ly +.ig9n8i8t9e8r. +.2ig +.ig1ni +.ign2it +.ign2ite +.ig9n8i8t9e8r8s. +.ignite4r1s2 +.ig9n8i9t8o8r. +.ign3itor +.igni1to +.ig8n8o8r8e9s8p8a8c8e8s. +.ig1no +.ignore1sp +.ignore2s1pa +.ignorespa4ce +.im9p8e8d9a8n8c8e. +.im2p2ed +.imp2e2d2a +.impeda2n +.im9p8e8d9a8n8c8e8s. +.in9d8u9b8i9t8a9b8l8e. +.4ind +.in1du +.indu1b4i +.indubi2t +.indubi1ta +.indubi2tab +.indubitab2l2 +.in9f8i8n9i8t8e9l8y. +.in3f +.in1fi +.in2fin +.inf2ini +.infin2it +.infin2ite +.infinite1ly +.in9fi8n9i8t8e9l8y. +.in3fi +.in2fin +.infini +.infin2it +.infin2ite +.infinite1ly +.in9f8i8n9i9t8e8s9i9m8a8l. +.infinit4es +.infinite1si +.infinite2s5im +.infinitesi1ma +.in9fi8n9i9t8e8s9i9m8a8l. +.infinit4es +.infinite1si +.infinite2s5im +.infinitesi1ma +.in9f8r8a9s8t8r8u8c9t8u8r8e. +.infr2as +.infras1t4r +.infrastru2c1t +.infrastructu4r +.infrastruc1tu +.infrastruc3ture +.in9f8r8a9s8t8r8u8c9t8u8r8e8s. +.in9s8t8a8l8l9e8r. +.ins2ta2l +.ins1ta +.instal1l +.instal2le +.in9s8t8a8l8l9e8r8s. +.installe4r1s2 +.in9t8e8r9d8i8s9c8i9p8l8i9n8a8r8y. +.in1t +.in5ter3d +.interd2i +.interdis1 +.interd2is1c +.interdis1ci +.interdisc2ip +.interdisci1p2l2 +.interdiscipli4n +.interdiscipl4i1na +.interdisciplin2a2r +.in9t8e8r9g8a9l8a8c9t8i8c. +.interg2 +.inter1ga +.intergala2c1t +.in9u8t8i8l8e. +.in1u +.in4u1t2i +.in9u8t8i8l9i9t8y. +.inutil1i +.inut2il1it +.inutili1ty +.ir9r8e9d8u8c9i8b8l8e. +.ir2r2ed +.irre1du +.irredu2c +.irreduci4b +.irredu1ci +.irreduci1b2l2 +.ir9r8e9d8u8c9i8b8l8y. +.irreducib1ly +.ir9r8e8v9o9c8a9b8l8e. +.irrev2 +.irre5voc +.irrevo1ca +.irrevoca1b2l2 +.is8o8t9r8o8p8y. +.i2so +.isotropy5 +.is8o9t8r8o8p9i8c. +.isotrop3ic +.it8i8n9e8r9a8r8y. +.i1ti +.i2t1in +.it2ine +.itin4er4a2r +.itin1er +.itiner1a +.it8i8n9e8r9a8r9i8e8s. +.itinerar1i +.itinerar2ie4 +.je9r8e9m8i9a8d8s. +.1je +.jerem2i3a +.jeremia2d +.jeremia2d1s2 +.ke8y9n8o8t8e. +.ke8y9n8o8t8e8s. +.keyno4tes +.ke8y9s8t8r8o8k8e. +.keys4 +.keys1t +.keyst4r +.keystr2ok2 +.ke8y9s8t8r8o8k8e8s. +.keystrokes4 +.ki8l8n9i8n8g. +.k1i +.k4i2l1n2 +.kiln1in +.kilnin4g +.la8c9i9e8s8t. +.l4a2ci4 +.la3c2ie4 +.laci1est +.la8m9e8n9t8a9b8l8e. +.la1men +.la3men1t +.lamen2ta4b +.lamen1ta +.lamentab2l2 +.la8n8d9s8c8a8p9e8r. +.3l4and +.la2n +.lan2d1s2 +.landsca4p +.lands1ca +.landsca5per +.la8n8d9s8c8a8p9e8r8s. +.landscape4r1s2 +.la8r9c8e9n8y. +.l2a2r +.lar1c +.lar2ce +.lar1cen4 +.la8r9c8e9n9i8s8t. +.lar4ceni +.le8a8f9h8o8p9p8e8r. +.le2a +.lea2f +.lea4fh +.leafho4p1p +.leafhop2pe +.leafhop3per +.le8a8f9h8o8p9p8e8r8s. +.leafhoppe4r1s2 +.le8t9t8e8r9s8p8a8c9i8n8g. +.le4t3t2 +.lette4r1s2 +.letter1sp +.letter2s1pa +.lettersp4a2ci +.letterspa2c1in +.letterspac1ing +.li8f8e9s8p8a8n. +.life1sp +.life2s1pa +.lifespa4n +.li8f8e9s8p8a8n8s. +.lifespa2n1s2 +.li8f8e9s8t8y8l8e. +.lifes2ty +.lifes2tyl +.li8f8e9s8t8y8l8e8s. +.lifestyles2 +.li8g8h8t9w8e8i8g8h8t. +.3ligh +.lightw4 +.lightwei2 +.l2ightwe2ig2 +.li8m9o8u9s8i8n8e8s. +.li4mo +.li3mo2us +.limou2 +.limou2s1in +.limous2ine +.limousi1nes +.li8n8e9b8a8c8k8e8r. +.1l4ine +.lin2e2b +.lineback1 +.lineback1er +.li8n8e9s8p8a8c8i8n8g. +.li1nes +.li4ne1sp +.line2s1pa +.linesp4a2ci +.linespa2c1in +.linespac1ing +.li9o8n9e8s8s. +.lio2n +.lio1nes +.lion2e2ss +.li8t8h9o9g8r8a8p8h8e8d. +.l2ith +.litho4g +.litho1gr +.lithograph4ed +.li8t8h9o9g8r8a8p8h8s. +.lithogra4p4h1s2 +.lo9b8o8t9o8m8y. +.lobo4to +.loboto3my +.lo9b8o8t9o8m9i8z8e. +.lobotom2iz +.lobotomi2ze +.lo8g8e8s. +.lo1ge +.lo8n8g9e8s8t. +.5long +.lo2n +.lo9q8u8a8c9i8t8y. +.lo1q +.loqu2 +.loquac4 +.loqu4a2ci +.loqua2c1it +.loquaci1ty +.lo8v8e9s8t8r8u8c8k. +.4lov +.lov4e2s +.lov2est4r +.lovestruc5 +.lovestruck1 +.ma8c8r8o9e8c8o9n8o8m8i8c8s. +.macro4e +.macroe1co +.macroeco2n +.macroeco3nomic +.macroeconomi4c3s2 +.ma8l9a9p8r8o8p9i8s8m. +.malapr2 +.malapropi2s1m +.ma8l9a9p8r8o8p9i8s8m8s. +.malaprop4is4m1s2 +.ma8n9s8l8a8u8g8h9t8e8r. +.ma2n1s2 +.man2s1l2 +.manslaugh3 +.ma8n9u9s8c8r8i8p8t. +.man2us +.manusc2 +.manuscri2 +.manuscr2ip +.manuscri2p1t +.ma8r9g8i8n9a8l. +.marg2 +.margi4n +.margi1na +.ma8t8h9e9m8a9t8i9c8i8a8n. +.m4ath3 +.math5em +.math2e +.1mathe1ma +.mathemat1ic +.mathemat2i1ci +.mathemati3c2i1a +.mathematici2a2n +.ma8t8h9e9m8a9t8i9c8i8a8n8s. +.mathematicia2n1s2 +.ma8t8t8e8s. +.mat5te +.ma4t3t2 +.mat4tes +.me8d9i8c9a8i8d. +.2med +.m4edi +.med3i1ca +.medicai2 +.medica2id +.me8d8i9o8c8r8e. +.me1d2io +.mediocre3 +.me8d8i9o8c9r8i9t8i8e8s. +.medi5ocrit +.mediocri2 +.medio5cri1ti +.mediocrit2ie4 +.me8g8a9l8i8t8h. +.me2g +.m4egal +.me1ga +.me3gal1i +.megal1it +.megal2ith +.me8g8a9l8i8t8h8s. +.megali2t4h1s2 +.me8t8a9b8o8l9i8c. +.me4ta +.me2ta4b +.metabol3ic +.metabol2i +.me9t8a8b9o9l8i8s8m. +.metaboli2s1m +.me9t8a8b9o9l8i8s8m8s. +.metabol4is4m1s2 +.me9t8a8b9o9l8i8t8e. +.metabo5l2ite +.metabol1it +.me9t8a8b9o9l8i8t8e8s. +.metabolit4es +.me8t8a9l8a8n9g8u8a8g8e. +.met3a2l +.meta5la +.metala2n +.metal2ang +.metalan1gu +.metalangu4a +.me8t8a9l8a8n9g8u8a8g8e8s. +.me8t8a9p8h8o8r9i8c. +.metapho4r +.me8t8h9a8n8e. +.metha2n4 +.me9t8r8o8p9o9l8i8s. +.m4etr +.metropol2i +.me9t8r8o8p9o9l8i8s8e8s. +.metropol4ise +.metropolis1e4s +.me8t9r8o9p8o8l9i9t8a8n. +.metropol1it +.metropoli3ta2n +.metropoli1ta +.me8t9r8o9p8o8l9i9t8a8n8s. +.metropolita2n1s2 +.mi8c8r8o9e8c8o9n8o8m8i8c8s. +.m4i1cr +.micro4e +.microe1co +.microeco2n +.microeco3nomic +.microeconomi4c3s2 +.mi9c8r8o9f8i8c8h8e. +.micro2fi +.microf4i2ch +.microfiche2 +.mi9c8r8o9fi8c8h8e. +.micro2fi +.microfi2ch +.microfiche2 +.mi9c8r8o9f8i8c8h8e8s. +.microfich1es +.mi9c8r8o9fi8c8h8e8s. +.microfich1es +.mi8c8r8o9o8r8g8a8n9i8s8m. +.microo2 +.microorg2 +.microor1ga +.microorgan5is +.microorga2n +.microorgani2s1m +.mi8c8r8o9o8r8g8a8n9i8s8m8s. +.microorgan4is4m1s2 +.mi8l8l9a8g8e. +.m4il1l +.mi8l9l8i9l8i8t8e8r. +.mill2i +.mil4l4i4l +.millil1i +.mill2il1it +.millil2ite +.mi8m8e8o9g8r8a8p8h8e8d. +.mimeo2g +.mimeo1gr +.mimeograph4ed +.mi8m8e8o9g8r8a8p8h8s. +.mimeogra4p4h1s2 +.mi8m9i8c9r8i8e8s. +.mim1i +.mim4i1cr +.mimicri2 +.mimicr2ie4 +.mi8n9i8s. +.m2ini +.min1is +.mi8n8i9s8y8m9p8o9s8i8u8m. +.minis4y +.minisy4m1p +.minisym1pos +.minisympo5si4u +.mi8n8i9s8y8m9p8o9s8i8a. +.minisympos2i1a +.mi9n8u8t9e8r. +.m4in1u +.mi9n8u8t9e8s8t. +.mi8s9c8h8i8e9v8o8u8s9l8y. +.m2is1c +.mis3ch2 +.misch2ie4 +.mischievou2 +.mischievo2us +.mischievous1l2 +.mischievous1ly +.mi9s8e8r8s. +.m4ise +.mis3er +.mise4r1s2 +.mi9s8o8g9a9m8y. +.mi2so +.miso1ga +.miso2gam +.mo8d9e8l9l8i8n8g. +.mo2d1 +.model1l +.modell2i +.model2lin4 +.mo8l9e9c8u8l8e. +.mole1cu +.mole4cul +.molecul4e +.mo8l9e9c8u8l8e8s. +.molecules2 +.mo8n9a8r8c8h8s. +.mo1n1a +.monar3c +.mon2a2r +.monar2ch +.monarc4h1s2 +.mo8n8e8y9l8e8n9d8e8r. +.moneylen1de +.mo8n8e8y9l8e8n9d8e8r8s. +.moneylende4r5s2 +.mo8n8o9c8h8r8o8m8e. +.mono2ch4 +.monoc4hr4 +.monochro2me +.mo8n8o9e8n9e8r9g8e8t8i8c. +.mo3noe +.monoen1er +.monoenerg2 +.monoener3get +.monoenerget1ic +.mo8n9o8i8d. +.monoi2 +.mono2id +.mo8n8o9p8o8l8e. +.mo4nop +.mo8n8o9p8o8l8e8s. +.monopoles2 +.mo9n8o8p9o8l8y. +.monopo2ly +.mo8n8o9s8p8l8i8n8e. +.monos1p2l2 +.monospli4n +.monosp1l4ine +.mo8n8o9s8p8l8i8n8e8s. +.monospli1nes +.mo8n8o9s8t8r8o8f8i8c. +.monos5t +.monost4r +.monostro2fi +.mo8n8o9s8t8r8o8fi8c. +.monostro2fi +.mo9n8o8t9o9n8i8e8s. +.mono1to +.mo2noto2n +.monoton2ie4 +.mo9n8o8t9o9n8o8u8s. +.mono4tono +.monoto1nou2 +.monotono2us +.mo9r8o8n9i8s8m. +.moro5n4is +.moro2n +.moroni2s1m +.mo8s9q8u8i9t8o. +.mos2 +.mosqu2 +.mosq2ui2 +.mosqui1to +.mo8s9q8u8i9t8o8s. +.mosquitos2 +.mo8s9q8u8i9t8o8e8s. +.mu8d9r8o8o8m. +.mu1dr +.mud1room +.mudroo2 +.mu8d9r8o8o8m8s. +.mudroo4m1s2 +.mu8l9t8i9f8a8c9e8t8e8d. +.5mu4lt +.mul1ti3 +.multif2 +.multi1fa +.multifa4ce +.multifacet4 +.multiface2t1ed +.mu8l9t8i9p8l8i8c9a8b8l8e. +.mult2ip +.multi1p2l2 +.multipli1ca +.multiplica1b2l2 +.mu8l8t8i9u8s8e8r. +.multi4u +.multi2us +.ne8o9f8i8e8l8d8s. +.3neo +.ne5of +.neo2fi +.neof2ie4 +.neofie2ld3 +.neofiel2d1s2 +.ne8o9fi8e8l8d8s. +.ne5o2fi +.neofie4 +.neofie2ld3 +.neofiel2d1s2 +.ne8o9n8a8z8i. +.neo2n +.neo1n1a +.neona2z1i +.ne8o9n8a8z8i8s. +.neonaz4is +.ne8p8h9e8w8s. +.nephe4 +.ne8p8h9r8i8t8e. +.nep4hr4 +.nephr2ite +.ne8p8h9r8i8t8i8c. +.nephr4i2t3ic +.nephri1ti +.ne8w9e8s8t. +.ne4w +.newest3 +.ne8w8s9l8e8t9t8e8r. +.news4l2 +.news2le +.newsle4t3t2 +.ne8w8s9l8e8t9t8e8r8s. +.newslette4r1s2 +.ni8t8r8o9m8e8t8h9a8n8e. +.n2it +.ni3tr +.nitro2me +.nitro4met +.nitrometha2n4 +.no9n8a8m8e. +.no4n +.no1n1a +.no8n9a8r9i8t8h9m8e8t9i8c. +.nonar3i +.non2a2r +.nonar2ith +.nonarit4h1m +.nonarithmet4 +.nonarithmet1ic +.no8n9e8m8e8r9g8e8n8c8y. +.none1me +.nonemerg2 +.nonemer1gen +.nonemergen1cy +.no8n9e8q8u8i9v8a8r8i9a8n8c8e. +.none2q +.nonequ2 +.noneq2ui2 +.nonequ2iv3 +.nonequi1va +.nonequiv2a2r +.nonequivar1i +.nonequivar3i2a2n +.nonequivar2i3a +.nonequivar4ianc +.no8n8e9t8h8e9l8e8s8s. +.noneth2e +.nonethe1les2 +.nonethe3l2e2ss +.no8n9e8u8c8l8i8d9e8a8n. +.non4eu +.noneu1c4l4 +.noneucl2id +.noneuclidea2n +.no8n9i8s8o9m8o8r9p8h8i8c. +.non5i +.non1is +.noni2so +.noni3som +.noniso1mo +.nonisomo2r +.nonisomor1p +.nonisomorp4h4 +.nonisomorph1ic +.no8n9p8s8e8u8d8o9c8o8m9p8a8c8t. +.non1p4 +.non2p1s2 +.nonp2se +.nonps4eu +.nonpseu1do +.nonpseudo1co +.nonpseudoco4m1p +.nonpseudocom1pa +.nonpseudocompa2c4t +.no8n9s8m8o8o8t8h. +.no2n3s2 +.non2s3m +.nons1mo +.nonsmoo2 +.nonsmo4oth +.no8n9u8n8i9f8o8r8m. +.no3nu4n +.nonu1ni +.nonuni1fo +.nonunifo2r +.nonunifor1m +.no8n9u8n8i9f8o8r8m9l8y. +.nonunifor4m1l +.nonuniform1ly +.no8r9e8p9i9n8e8p8h9r8i8n8e. +.nore5pi2n +.norep2ine +.norepinep4hr4 +.norep2inephr2in4e +.no8t9w8i8t8h9s8t8a8n8d9i8n8g. +.notw4 +.notwi2 +.notw2ith3 +.notwi2t4h1s2 +.notwith5st4and +.notwiths1ta +.notwithsta2n +.notwithstand1in +.nu9c8l8e8o9t8i8d8e. +.nucle3 +.nu1c4l4 +.nucle4ot +.nucleot2id +.nu9c8l8e8o9t8i8d8e8s. +.nucleotide4s2 +.nu8t9c8r8a8c8k9e8r. +.nu4tc +.nutcrack1 +.nutcrack1er +.nu8t9c8r8a8c8k9e8r8s. +.nutcracke4r1s2 +.oe8r9s8t8e8d8s. +.o3er +.oe4r1s2 +.oers4t1ed +.oerste2d1s2 +.of8f9l8i8n8e. +.o4f1f +.off4l2 +.offlin4 +.off1l4ine +.offl8i8n8e. +.offl2ine +.of8f9l8o8a8d. +.offl4oa +.offloa2d3 +.offl8o8a8d. +.offl4oa +.offloa2d3 +.of8f9l8o8a8d8s. +.offloa2d1s2 +.offl8o8a8d8s. +.offloa2d1s2 +.of8f9l8o8a8d8e8d. +.offloa2d1ed +.offl8o8a8d8e8d. +.offloa2d1ed +.ol8i9g8o8p9o9l8i8s8t. +.ol2i +.ol2ig +.oli2go +.ol2igopol2i +.ol8i9g8o8p9o9l8i8s8t8s. +.oligopolis4t1s2 +.ol8i9g8o8p9o8l8y. +.oligopo2ly +.ol8i9g8o8p9o8l9i8e8s. +.oligopol2ie4 +.op9e8r9a8n8d. +.op1er +.3oper1a +.op4er4and +.opera2n +.op9e8r9a8n8d8s. +.operan2d1s2 +.or8a8n8g9u8t8a8n. +.ora2n +.or2ang +.oran1gu +.oran4gu4t +.orangu1ta +.ora2nguta2n +.or8a8n8g9u8t8a8n8s. +.oranguta2n1s2 +.or9t8h8o9d8o8n9t8i8s8t. +.ortho2do4 +.orthodo2n +.orthodon3t4i +.orthodon1t +.or9t8h8o9d8o8n9t8i8s8t8s. +.orthodontis4t1s2 +.or9t8h8o9k8e8r9a9t8o8l9o8g8y. +.orth2ok +.orthok1er +.orthoker1a +.orthokera1to +.orthokeratol1o1gy +.or8t8h8o9n8i8t8r8o9t8o8l8u8e8n8e. +.ortho2n +.orthon2it +.orthoni3tr +.orthonitro1to +.orthonitrotolu3en +.orthonitrotolu4ene +.ov8e8r9v8i8e8w. +.overv2ie4 +.ov8e8r9v8i8e8w8s. +.ox9i8d9i8c. +.ox3i +.oxi5di +.ox2id +.pa8d9d8i8n8g. +.1pa +.p4a2d +.pad4d1in +.pad1d4 +.pa8i8n9l8e8s8s9l8y. +.p4ai2 +.pa4i4n4 +.pa4i4n1l +.painles2 +.pain3l2e2ss +.painles4s1l2 +.painless1ly +.pa8l9e8t8t8e. +.p4al +.p2ale +.pale4t3t2 +.pa8l9e8t8t8e8s. +.palet4tes +.pa8r9a9b8o8l8a. +.p2a2r +.pa2rab +.parabo1la +.pa8r9a9b8o8l9i8c. +.parabol3ic +.parabol2i +.pa9r8a8b9o9l8o8i8d. +.paraboloi2 +.parabolo2id +.pa8r9a9d8i8g8m. +.para2d +.par2adi +.parad2ig +.paradig1m +.pa8r9a9d8i8g8m8s. +.paradig4m1s2 +.pa8r8a9c8h8u8t8e. +.para2ch +.parachu4t +.pa8r8a9c8h8u8t8e8s. +.pa8r8a9d8i9m8e8t8h8y8l9b8e8n8z8e8n8e. +.parad4imet +.paradimethy2l1b +.paradimethylb4e4n3z +.paradimethylben2ze +.paradimethylbenze4n +.pa8r8a9f8l8u8o8r8o9t8o8l8u8e8n8e. +.para2f +.paraf4l2 +.paraflu3o +.parafluo3r +.parafluoro1to +.parafluorotolu3en +.parafluorotolu4ene +.pa8r8a9fl8u8o8r8o9t8o8l8u8e8n8e. +.para2fl2 +.paraflu3o +.parafluo3r +.parafluoro1to +.parafluorotolu3en +.parafluorotolu4ene +.pa8r8a9g8r8a8p8h9e8r. +.para1gr +.parag5ra3ph4er +.pa8r8a9l8e9g8a8l. +.par3al +.par2ale +.paral4egal +.parale1ga +.pa8r9a8l9l8e8l9i8s8m. +.paral1l +.paral2le +.paral3lel +.parallel2i +.paralle2lis +.paralleli2s1m +.pa8r8a9m8a8g9n8e8t9i8s8m. +.par4a1ma +.param3ag +.para5mag1n +.paramagneti2s4m +.pa8r8a9m8e8d8i8c. +.para2med +.param4edi +.pa8r8a9m8e8t8h8y8l9a8n8i8s8o8l8e. +.param3et +.paramethy3la +.paramethyla2n +.paramethylani2so +.pa9r8a8m9e9t8r8i8z8e. +.param4etr +.parametri2ze +.pa8r8a9m8i8l9i9t8a8r8y. +.par2ami +.paramil1i +.param2il1it +.paramili1ta +.p2a2ramilit2a2r +.pa8r8a9m8o8u8n8t. +.para2mo +.paramou2 +.paramoun1t +.pa8t8h9o9g8e8n9i8c. +.p4ath +.pat4ho +.patho4g +.patho1ge4 +.patho1gen +.pe8e8v9i8s8h. +.p4ee +.pee1vi +.peevis2h +.pe8e8v9i8s8h9n8e8s8s. +.peevis2h1n +.peevish1nes +.peevishn2e2ss +.pe8n9t8a9g8o8n. +.pen1t +.pen1ta +.penta2go +.pentago2n2 +.pe8n9t8a9g8o8n8s. +.pentago2n3s2 +.pe9t8r8o9l8e9u8m. +.petrol4eu +.ph8e9n8o8m9e9n8o8n. +.ph4e3no +.phe2n +.pheno2me +.pheno1men +.ph4enom4eno +.phenomeno4n +.ph8e8n8y8l9a8l8a9n8i8n8e. +.pheny3la +.phenylala2n +.phenylala5n2ine +.phenylalan1in +.ph8i9l8a8t9e9l8i8s8t. +.phi4latel2i4 +.philate2lis +.ph8i9l8a8t9e9l8i8s8t8s. +.philatelis4t1s2 +.ph8o9n8e8m8e. +.3phone +.pho2n +.phone1me +.ph8o9n8e8m8e8s. +.phone2mes +.ph8o9n8e9m8i8c. +.phone5mi +.ph8o8s9p8h8o8r9i8c. +.phos1p +.phospho5 +.phospho4r +.ph8o9t8o9g8r8a8p8h8s. +.pho1to +.photo2gr +.photogra4p4h1s2 +.ph8o9t8o9o8f8f9s8e8t. +.photoo2 +.photoo4f1f +.photoof2f3s +.ph8o9t8o9o8ff9s8e8t. +.photoo4ff +.photooff3s +.pi8c9a9d8o8r. +.pi1ca +.pica2d +.pica1do +.picad4or +.pi8c9a9d8o8r8s. +.picado4rs2 +.pi8p8e9l8i8n8e. +.p2ip +.pipe4 +.pipel2i +.pipe1l4ine +.pi8p8e9l8i8n8e8s. +.pipeli1nes +.pi8p8e9l8i8n9i8n8g. +.pipel2in3i +.pipelin1in +.pipelinin4g +.pi9r8a9n8h8a8s. +.p4ir +.pi1ra +.pira2n +.pira4n1h4 +.piranha4 +.pl8a8c8a9b8l8e. +.1p2l2 +.pla1ca +.placa1b2l2 +.pl8a8n8t9h8o8p9p8e8r. +.3pla2n +.plan1t +.plantho4p1p +.planthop2pe +.planthop3per +.pl8a8n8t9h8o8p9p8e8r8s. +.planthoppe4r1s2 +.pl8e8a8s9a8n8c8e. +.ple2a +.pleasa2 +.plea3sanc +.pleasa2n +.pl8u8g9i8n. +.plug5in +.pl8u8g9i8n8s. +.plu5g4i2n1s2 +.po8l9t8e8r9g8e8i8s8t. +.po4l2t +.pol1te +.polterg2 +.poltergei2 +.po8l8y9e8n8e. +.po2ly +.po8l8y9e8t8h9y8l9e8n8e. +.polye4t +.po9l8y8g9a9m8i8s8t. +.poly1ga +.poly2gam +.polygam2is +.po9l8y8g9a9m8i8s8t8s. +.polygamis4t1s2 +.po8l8y8g9o8n9i9z8a9t8i8o8n. +.poly1go +.polygo2n2 +.polygo3ni +.polygoniza1 +.polygoniza1t2io +.polygo2nizatio2n +.po9l8y8p8h9o9n8o8u8s. +.polypho2n +.polypho1nou2 +.polyphono2us +.po8l8y9s8t8y8r8e8n8e. +.po2lys4 +.polys1t +.polys2ty +.po8m8e9g8r8a8n9a8t8e. +.po2me +.pome2g +.pome1gr +.pomegra2n2 +.pomegra1na +.pomegran2at +.po8r8o9e8l8a8s9t8i8c. +.1p4or +.poro4e +.poro4el +.poroe1la +.poroelast2i +.poroelas1tic +.po8r9o8u8s. +.porou2 +.poro2us +.po8r9t8a9b8l8e. +.por1ta +.por2tab +.portab2l2 +.po8s8t9a8m9b8l8e. +.1pos +.pos2ta +.posta4m1b +.postamb2l2 +.po8s8t9a8m9b8l8e8s. +.postambles2 +.po8s8t9h8u9m8o8u8s. +.posthu1mo +.posthu3mo2us +.posthumou2 +.po8s8t9s8c8r8i8p8t. +.pos4t1s2 +.post4sc +.postscri2 +.postscr2ip +.postscri2p1t +.po8s8t9s8c8r8i8p8t8s. +.pos4t1s2crip4t1s2 +.po8s9t8u8r9a8l. +.pos1tu +.postu1ra +.pr8e9a8m9b8l8e. +.prea4m1b +.preamb2l2 +.pr8e9a8m9b8l8e8s. +.preambles2 +.pr8e9l8o8a8d8e8d. +.prel4oa +.preloa2d3 +.preloa2d1ed +.pr8e9p8a8r9i8n8g. +.pre2pa +.prep4a4r1i +.prep2a2r +.preparin4g +.pr8e9p8r8i8n8t. +.pr2epr2 +.preprin4t3 +.pr8e9p8r8i8n8t8s. +.preprin4t4s2 +.pr8e9p8r8o8c8e8s9s8o8r. +.pre3pro +.prepr2oc +.prepro1ce +.preproc2e2ss +.preproces1so +.pr8e9p8r8o8c8e8s9s8o8r8s. +.preprocesso4rs2 +.pr8e9s8p8l8i8t9t8i8n8g. +.pre1sp +.pres1p2l2 +.prespl1it +.prespl4i4t3t2 +.presplit2t1in +.pr8e9w8r8a8p. +.prewra4 +.pr8e9w8r8a8p8p8e8d. +.prewra4p1p +.prewrap2pe +.prewrap4p2ed +.pr8i8e8s8t9e8s8s8e8s. +.5pr2i4e4 +.pri1est +.pries4t2e2ss +.priestess1e4s +.pr8e8t9t8y9p8r8i8n9t8e8r. +.pre4t3t2 +.pret1ty +.pr2ettypr2 +.prettyprin4t3 +.pr8e8t9t8y9p8r8i8n9t8i8n8g. +.prettyprint2i +.prettyprin4t3ing +.prettyprin2t1in +.pr8o9c8e9d8u8r9a8l. +.pr2oc +.pro1ce +.proce1du +.procedu1ra +.pr8o8c8e8s8s. +.proc2e2ss +.pr8o9c8u8r9a8n8c8e. +.procu1ra +.procura2n +.pr8o8g9e9n8i8e8s. +.pro1ge +.pro1gen +.proge5n2ie4 +.pr8o8g9e9n8y. +.pro4geny +.pr8o9g8r8a8m9m8a8b8l8e. +.pro1gr +.program1m +.program1ma +.program2mab +.programmab2l2 +.pr8o8m9i9n8e8n8t. +.prom4i +.prom1in +.prom2ine +.promi1nen +.prominen1t +.pr8o9m8i8s9c8u9o8u8s. +.prom2is +.prom2is1c +.promis1cu +.promiscu1ou2 +.promiscuo2us +.pr8o8m9i8s9s8o8r8y. +.prom4i2s1s +.promis1so +.promisso1ry +.pr8o8m9i8s8e. +.prom4ise +.pr8o8m9i8s8e8s. +.promis1e4s +.pr8o9p8e8l9l8e8r. +.pro3pel +.propel1l +.propel2le +.pr8o9p8e8l9l8e8r8s. +.propelle4r1s2 +.pr8o9p8e8l9l8i8n8g. +.propell2i +.propel2lin4 +.pr8o9h8i8b9i9t8i8v8e. +.pro1h2 +.prohibi2t +.prohibi1ti +.prohibi1t2iv +.pr8o9h8i8b9i9t8i8v8e9l8y. +.prohibitiv4e1ly +.pr8o9s8c8i8u8t9t8o. +.pros2c +.pros1ci +.prosci1u +.prosciu4t3t2 +.prosciut5to +.pr8o9t8e8s8t9e8r. +.pro1t +.pro4tes +.pr8o9t8e8s8t9e8r8s. +.proteste4r1s2 +.pr8o9t8e8s9t8o8r. +.prot4es2to +.pr8o9t8e8s9t8o8r8s. +.protesto4rs2 +.pr8o9t8o9l8a8n9g8u8a8g8e. +.pro1to +.proto1la +.proto4la2n +.protol2ang +.protolan1gu +.protolangu4a +.pr8o9t8o9t8y8p9a8l. +.proto1ty +.prototy1pa +.prototyp4al +.pr8o8v9i8n8c8e. +.prov1in +.prov2inc +.pr8o8v9i8n8c8e8s. +.pr8o9v8i8n9c8i8a8l. +.provin1ci +.provin3c2i1a +.provinci2al +.pr8o8w9e8s8s. +.prow2e2ss +.ps8e8u9d8o9d8i8f9f8e8r9e8n9t8i8a8l. +.2p1s2 +.p2se +.ps4eu +.pseu1do +.pseudod1if +.pseudodi4f1f +.pseudodiffer1 +.pseudodiffer3en1t +.pseudodifferent2i +.pseudodifferen1t2i1a +.pseudodifferenti2al +.ps8e8u9d8o9d8i8ff8e8r9e8n9t8i8a8l. +.pseudod1i4ff +.pseudodiffer1 +.pseudodiffer3en1t +.pseudodifferent2i +.pseudodifferen1t2i1a +.pseudodifferenti2al +.ps8e8u9d8o9f8i9n8i8t8e. +.pseu2d5of +.pseudo2fi +.pseudo2fin +.pseudof2ini +.pseudofin2it +.pseudofin2ite +.ps8e8u9d8o9fi9n8i8t8e. +.pseu2d5o2fi +.pseudo2fin +.pseudofini +.pseudofin2it +.pseudofin2ite +.ps8e8u9d8o9f8i9n8i8t8e9l8y. +.pseudofinite1ly +.ps8e8u9d8o9fi9n8i8t8e9l8y. +.pseudofinite1ly +.ps8e8u9d8o9f8o8r8c8e8s. +.pseudo1fo +.pseudofo2r +.pseudofor1c +.pseudofor2ce +.ps8e8u9d8o8g9r8a9p8h8e8r. +.pseud4og +.pseudo1gr +.pseudog5ra3ph4er +.ps8e8u9d8o9g8r8o8u8p. +.pseudo4g4ro +.pseudogrou2 +.ps8e8u9d8o9g8r8o8u8p8s. +.2p1s2eudogrou2p1s2 +.ps8e8u9d8o9n8y8m. +.pseu4do2n +.pseudonym4 +.ps8e8u9d8o9n8y8m8s. +.pseudony4m1s2 +.ps8e8u9d8o9w8o8r8d. +.pseudo4wo2 +.ps8e8u9d8o9w8o8r8d8s. +.pseudowor2d1s2 +.ps8y9c8h8e9d8e8l9i8c. +.ps4y +.p4sy1c +.psy3ch +.psych4e2 +.psy4ch4ed +.psychedel2i +.ps8y8c8h8s. +.psyc4h1s2 +.pu9b8e8s9c8e8n8c8e. +.pub3 +.pub4e +.pu4bes4 +.pubes2c +.pubes1cen +.pubes3cenc +.qu8a8d9d8i8n8g. +.qu2 +.qua2d +.quad4d1in +.quad1d4 +.qu8a9d8r8a8t9i8c. +.qua1dr +.quadrat1ic +.qu8a9d8r8a8t9i8c8s. +.quadrati4c3s2 +.qu8a8d9r8a9t8u8r8e. +.quadra2tu +.quadra3ture +.qu8a8d9r8i9p8l8e8g9i8c. +.quadri2p2l2 +.quadr2ip +.quadripleg4ic +.qu8a8i8n8t9e8r. +.quai2 +.qua4i4n +.quain1t +.qu8a8i8n8t9e8s8t. +.qu8a9s8i9e8q8u8i8v9a9l8e8n8c8e. +.quas2ie4 +.quasie1q +.qu2asiequ2 +.quasieq2ui2 +.quasiequ2iv3 +.quasiequi1va +.quasiequiv2ale +.quasiequiva3lenc +.qu8a9s8i9e8q8u8i8v9a9l8e8n8c8e8s. +.qu8a9s8i9e8q8u8i8v9a9l8e8n8t. +.quasiequiva1len1t +.qu8a9s8i9h8y9p8o9n8o8r9m8a8l. +.quasi3h +.quasihy3po +.quasihypo2n +.quasihyponor1m +.quasihyponor1ma +.qu8a9s8i9r8a8d9i9c8a8l. +.quas4i2r +.quasi1r5a +.quasira2d +.quasir2adi +.quasirad3i1ca +.qu8a9s8i9r8e8s8i8d9u8a8l. +.quasi4res +.quasire1si +.quasire2s2id +.quasiresi2du +.quasiresid1u1a +.qu8a9s8i9s8m8o8o8t8h. +.qua1sis +.quasi2s1m +.quasis1mo +.quasismoo2 +.quasismo4oth +.qu8a9s8i9s8t8a9t8i8o8n9a8r8y. +.quasis1ta +.quasistation5a2r +.quasista1t2io +.quasistatio2n +.quasistatio1n1a +.qu8a9s8i9t8o8p8o8s. +.qu5a5si4t +.quasi1to +.quasito1pos +.qu8a9s8i9t8r8i9a8n9g8u9l8a8r. +.quasi5tr2i3a +.quasitri2a2n +.quasitri2ang +.quasitrian1gu +.quasitriangu1la +.quasitriangul2a2r +.qu8a9s8i9t8r8i8v9i8a8l. +.quasitr2i4v +.quasitriv3i +.quasitriv2i1a +.quasitrivi2al +.qu8i8n9t8e8s9s8e8n8c8e. +.q2ui2 +.qui4n +.quin1t +.quin4t2e2ss +.quintes4senc +.qu8i8n9t8e8s9s8e8n8c8e8s. +.qu8i8n9t8e8s9s8e8n9t8i8a8l. +.quin1tessen1t +.quintessent2i +.quintessen1t2i1a +.quintessenti2al +.ra8b9b8i8t9r8y. +.2rab +.ra2b1b +.rabbi2t +.rabbi3tr +.rabbit5ry +.ra9d8i9o8g9r8a9p8h8y. +.ra2d +.r2adi +.ra3d2io +.radio5g +.radio2gr +.radio4g3ra1phy +.ra8f8f9i8s8h. +.raf5fi +.ra2f +.ra4f1f4 +.raf2f5is +.raffis2h +.ra8ffi8s8h. +.raffi +.raffis +.raffis2h +.ra8f8f9i8s8h9l8y. +.raffis4h1l4 +.raffish1ly +.ra8ffi8s8h9l8y. +.raffis4h1l4 +.raffish1ly +.ra8m9s8h8a8c8k8l8e. +.ra4m1s2 +.ram4s2h +.ramshack1 +.ramshack1l +.ra8v9e8n9o8u8s. +.rav4e4no +.rave1nou2 +.raveno2us +.re9a8r8r8a8n8g8e9m8e8n8t. +.re5ar1r4 +.re2a2r +.rearran4ge +.rearra2n +.rearr2ang +.rearrange1me +.rearrange1men +.rearrange3men1t +.re9a8r8r8a8n8g8e9m8e8n8t8s. +.rearrangemen4t4s2 +.re8c9i9p8r8o8c9i9t8i8e8s. +.reciproci1ti +.reciprocit2ie4 +.re8c9t8a8n9g8l8e. +.rec4ta2n +.re2c1t +.rect5ang +.rec1ta +.rectan1gl2 +.rectan1gle +.re8c9t8a8n9g8l8e8s. +.rectangles2 +.re8c9t8a8n9g8u9l8a8r. +.rectan1gu +.rectangu1la +.rectangul2a2r +.re9d8i9r8e8c8t. +.2r2ed +.r4edi +.red4ir2 +.redi1re +.redire2c1t +.re9d8i9r8e8c8t9i8o8n. +.redirec1t2io +.redirectio2n +.re9d8u8c9i8b8l8e. +.re1du +.redu2c +.reduci4b +.redu1ci +.reduci1b2l2 +.re9e8c8h8o. +.ree2c +.ree2ch +.ree3cho2 +.re9p8h8r8a8s8e. +.rep4hr4 +.rephr2as +.re9p8h8r8a8s8e8s. +.rephras1e4s +.re9p8h8r8a8s8e8d. +.rephra4s4ed +.re9p8o9s8i9t8i8o8n. +.re4posi +.re1po +.re1pos +.repo3s2i1t2io +.reposi1ti +.repositio2n +.re9p8o9s8i9t8i8o8n8s. +.repositio2n3s2 +.re9p8r8i8n8t. +.repr2 +.reprin4t3 +.re9p8r8i8n8t8s. +.reprin4t4s2 +.re9s8t8o8r9a8b8l8e. +.r4es2to +.resto2ra +.resto2rab +.restorab2l2 +.re8t8r8o9f8i8t. +.retro2fi +.re8t8r8o9fi8t. +.retro2fi +.re8t8r8o9f8i8t9t8e8d. +.retrof4i4t4t2 +.retrofit2t1ed +.re8t8r8o9fi8t9t8e8d. +.retrofi4t4t2 +.retrofit2t1ed +.re9u8s9a8b8l8e. +.r4eu2 +.re2us4 +.reusa2 +.reu2s1ab +.reusab2l2 +.re9u8s8e. +.re9w8i8r8e. +.rewi2 +.rew4ir4 +.re9w8r8a8p. +.rewra4 +.re9w8r8a8p8p8e8d. +.rewra4p1p +.rewrap2pe +.rewrap4p2ed +.re9w8r8i8t8e. +.rewri4 +.rewr2ite +.rh8i9n8o8c9e8r9o8s. +.rh4 +.rh2i1no +.rhi4no4c +.rhino1ce +.rhinoc2ero +.ri8g8h8t9e8o8u8s. +.righ1teo +.righteou2 +.righteo2us +.ri8g8h8t9e8o8u8s9n8e8s8s. +.righteous1n4 +.righteous1nes +.righteousn2e2ss +.ri8n8g9l8e8a8d8e8r. +.rin4g +.ringl2 +.rin1gle +.ringle2a +.ringlea2d1 +.ri8n8g9l8e8a8d8e8r8s. +.ringleade4r5s2 +.ro9b8o8t. +.ro9b8o8t8s. +.robo4t1s2 +.ro9b8o8t8i8c. +.ro9b8o8t9i8c8s. +.roboti4c3s2 +.ro8u8n8d9t8a8b8l8e. +.rou2 +.roun2d +.round1ta +.round2tab +.roundtab2l2 +.ro8u8n8d9t8a8b8l8e8s. +.roundta5bles2 +.sa8l8e8s9c8l8e8r8k. +.sa2 +.s2ale +.sales2 +.sales2c +.salescle5 +.sales1c4l4 +.sa8l8e8s9c8l8e8r8k8s. +.salescler4k1s2 +.sa8l8e8s9w8o8m8a8n. +.sales4w2 +.sale4s1wo2 +.saleswom1 +.saleswo1ma +.saleswoma2n +.sa8l8e8s9w8o8m8e8n. +.saleswo2me +.saleswo1men +.sa8l9m8o9n8e8l9l8a. +.s4a2l4m +.salmo2n4 +.sal1mo +.salmon4ella +.salmonel1l +.sa8l9t8a9t8i8o8n. +.sa4l4t +.sal1ta +.salta1t2io +.saltatio2n +.sa8r9s8a9p8a8r9i8l9l8a. +.s2a2r +.sa2r4sa2 +.sa4rs2 +.sars1ap +.s2a2rsap2a2r4 +.sarsa1pa +.sarsap4a4r1i +.sarsaparil1l +.sa8u8e8r9k8r8a8u8t. +.sau4 +.sauerkrau4t +.sc8a8t9o9l8o8g9i9c8a8l. +.s1ca +.sca1to +.scato3log1ic +.s1catologi1ca +.sc8h8e8d9u8l9i8n8g. +.s2ch2 +.sche2 +.s4ch4ed +.sche4dul +.sche1du +.schedul2i +.schedul3ing +.sc8h8i8z9o9p8h8r8e8n8i8c. +.schi2z +.schi1zo +.schiz2oph +.schizop4hr4 +.sc8h8n8a8u9z8e8r. +.sc2h1n +.sch1na +.schn2au +.schnau2z4e +.schnauz1er +.sc8h8o8o8l9c8h8i8l8d. +.s4cho2 +.schoo2 +.schoo4l1c2 +.s2chool2ch +.schoolch4il2 +.schoolchi2ld +.sc8h8o8o8l9c8h8i8l8d9r8e8n. +.schoolchil3dr +.schoolchildre4 +.schoolchil5dren +.sc8h8o8o8l9t8e8a8c8h8e8r. +.schoo4l2t +.school1te +.s2chooltea2ch +.schoolteache2 +.sc8h8o8o8l9t8e8a8c8h9e8r8s. +.schoolteach3e4r1s2 +.sc8r8u9t8i9n8y. +.scru2t1i5n +.scr4u1t2i +.scrut4iny +.sc8y8t8h9i8n8g. +.s1cy +.scy3thin +.se8l8l9e8r. +.sel2le +.se8l8l9e8r8s. +.selle4r1s2 +.se8c9r8e9t8a8r9i8a8t. +.se1cr +.se4c3re1ta +.secret2a2r +.secretar1i +.secretar2i3a +.se8c9r8e9t8a8r9i8a8t8s. +.secretaria4t1s2 +.se8m9a9p8h8o8r8e. +.se1ma +.se4map +.semapho4r +.se8m9a9p8h8o8r8e8s. +.se9m8e8s9t8e8r. +.4se1me +.se2mes +.se8m8i9d8e8f9i9n8i8t8e. +.sem2id +.semide1f +.semidef5i5n2ite +.semide1fi +.semide2fin +.semidef2ini +.semidefin2it +.se8m8i9d8e8fi9n8i8t8e. +.semide1fi +.semidefi5n2ite +.semide2fin +.semidefini +.semidefin2it +.se8m8i9d8i9r8e8c8t. +.semi2di +.semid4ir2 +.semidi1re +.semidire2c1t +.se8m8i9h8o9m8o9t8h8e8t9i8c. +.semi3h +.semiho1mo +.semihom4oth3 +.semihomoth2e +.semihomo3the4t +.semihomothet1ic +.se8m8i9r8i8n8g. +.sem4ir +.semir1i +.semirin4g +.se8m8i9r8i8n8g8s. +.semirings2 +.se8m8i9s8i8m9p8l8e. +.se4m2is +.semisi4m1p +.semisim1p2l2 +.se8m8i9s8k8i8l8l8e8d. +.sem4is4k2 +.semisk1i +.semisk4il1l +.semiskil2le +.se8r8o9e8p8i9d8e9m8i9o9l8o8g9i9c8a8l. +.s2er4o +.sero4e +.seroep4id +.seroepi3de +.seroepid4em +.seroepidem2io +.seroepidemi1ol +.seroepidemio3log1ic +.seroepidemiologi1ca +.se8r9v8o9m8e8c8h9a8n8i8s8m. +.4ser3vo +.servo2me +.servome2ch +.servomech5a5nis +.servomecha2n +.servomechani2s1m +.se8r9v8o9m8e8c8h9a8n8i8s8m8s. +.servomechan4is4m1s2 +.se8s9q8u8i9p8e9d8a9l8i8a8n. +.s1e4s +.sesqu2 +.sesq2ui2 +.sesqu2ip +.sesquipe4 +.sesqui2p2ed +.sesquip2e2d2a +.sesquipedal1i +.sesquipedal2i1a +.sesquipedali2a2n +.se8t9u8p. +.se1tu +.se8t9u8p8s. +.setu2p1s2 +.se9v8e8r8e9l8y. +.5sev +.sev1er +.sev4erel +.severe1ly +.sh8a8p8e9a8b8l8e. +.sha3pe4a +.shape1a4b +.shapeab2l2 +.sh8o8e9s8t8r8i8n8g. +.sho4 +.sho2est4r +.shoestrin4g +.sh8o8e9s8t8r8i8n8g8s. +.shoestrings2 +.si8d8e9s8t8e8p. +.5side4s2 +.s2id +.sideste4p +.si8d8e9s8t8e8p8s. +.sideste2p1s2 +.si8d8e9s8w8i8p8e. +.sides4w2 +.sideswi2 +.sidesw2ip +.sideswipe4 +.sk8y9s8c8r8a8p8e8r. +.sk2 +.skys4c +.skyscrap3er +.sk8y9s8c8r8a8p8e8r8s. +.skyscrape4r1s2 +.sm8o8k8e9s8t8a8c8k. +.2s1m +.s1mo +.s4m2ok +.smokes4 +.smokes1ta +.smokestack1 +.sm8o8k8e9s8t8a8c8k8s. +.smokestac4k1s2 +.sn8o8r9k8e8l9i8n8g. +.s1n4 +.snorke5l2i +.snorke4l3ing +.so9l8e9n8o8i8d. +.1so +.sol4eno +.solenoi2 +.soleno2id +.so9l8e9n8o8i8d8s. +.solenoi2d1s2 +.so8l8u8t8e. +.so1lut +.so8l8u8t8e8s. +.so8v9e8r9e8i8g8n. +.4sov +.soverei2 +.sovere2ig2 +.so8v9e8r9e8i8g8n8s. +.sovereig2n1s2 +.sp8a9c8e8s. +.2s1pa +.spa4ce +.sp8e9c8i8o8u8s. +.spe2c +.spe1c2i +.spec2io +.speciou2 +.specio2us +.sp8e8l8l9e8r. +.spel1l +.spel2le +.sp8e8l8l9e8r8s. +.spelle4r1s2 +.sp8e8l8l9i8n8g. +.spell2i +.spel2lin4 +.sp8e9l8u8n8k9e8r. +.spelu4nk2 +.spelunk1er +.sp8e8n8d9t8h8r8i8f8t. +.spen4d +.spend2th +.spendt4hr4 +.spendthr4i2ft +.sp8h8e8r9o8i8d. +.s2phe +.3sph4er +.sph2ero +.spheroi2 +.sphero2id +.sp8h8e8r9o8i8d9a8l. +.spheroi1d2a +.sp8h8i8n9g8e8s. +.sph5ing +.sph4inge +.sp8i8c9i9l8y. +.sp2i1ci +.spici1ly +.sp8i8n9o8r8s. +.spi2n +.sp4i1no +.spino4rs2 +.sp8o8k8e8s9w8o8m8a8n. +.sp2ok +.spokes4 +.spokes4w2 +.spoke4s1wo2 +.spokeswom1 +.spokeswo1ma +.spokeswoma2n +.sp8o8k8e8s9w8o8m8e8n. +.spokeswo2me +.spokeswo1men +.sp8o8r8t8s9c8a8s8t. +.s1p4or4 +.spor4t1s2 +.sport4sc +.sports1ca +.sp8o8r8t8s9c8a8s8t9e8r. +.sportscast5er +.sp8o8r9t8i8v8e9l8y. +.spor1ti +.spor4t2iv +.sportiv4e1ly +.sp8o8r8t8s9w8e8a8r. +.sport4sw2 +.sportswe2a2r +.sp8o8r8t8s9w8r8i8t8e8r. +.sportswri4 +.sportswr2ite +.sp8o8r8t8s9w8r8i8t8e8r8s. +.sportswrit5e4r1s2 +.sp8r8i8g8h8t9l8i8e8r. +.spr2 +.spr2ig +.sprigh2tl +.sprightl2ie4 +.sq8u8e8a9m8i8s8h. +.squ2 +.squeam2is +.squeamis2h +.st8a8n8d9a8l8o8n8e. +.5st4and +.sta2n +.stan1d2a +.standalo2n +.st8a8r9t8l8i8n8g. +.st2a2r +.star2tl +.st8a8r9t8l8i8n8g9l8y. +.startlingl2 +.startling1ly +.st8a9t8i8s9t8i8c8s. +.statis1t2i +.statis1tic +.statisti4c3s2 +.st8e8a8l8t8h9i8l8y. +.stea4l +.stea4lt +.stealth3i +.steal4th4il2 +.stealthi1ly +.st8e8e8p8l8e9c8h8a8s8e. +.s1tee +.stee4p1 +.stee1p2l2 +.steeple2ch +.st8e8r8e8o9g8r8a8p8h9i8c. +.stere1o +.stereo2g +.stereo1gr +.stereo5graph1ic +.stereogr4aphi +.st8o9c8h8a8s9t8i8c. +.s1to +.sto2ch4 +.stochast2i +.stochas1tic +.st8r8a8n8g8e9n8e8s8s. +.st4r +.s1tra +.stran4ge +.stra2n +.str2ang +.strange4n4e +.stran1gen +.strange1nes +.strangen2e2ss +.st8r8a8p9h8a8n8g8e8r. +.straph2an4g +.straphang5er +.strapha2n +.st8r8a8t9a9g8e8m. +.stra2ta +.st8r8a8t9a9g8e8m8s. +.stratage4m1s2 +.st8r8e8t8c8h9i9e8r. +.stre4tc +.stret4ch +.stretch2ie4 +.st8r8i8p9t8e8a8s8e. +.str2ip +.stri2p1t +.strip2te +.st8r8o8n8g9h8o8l8d. +.stro2n +.strongho2l2d +.st8r8o8n8g9e8s8t. +.st8u9p8i8d9e8r. +.s1tu +.stup4id +.stupi3de +.st8u9p8i8d9e8s8t. +.stupide4s2 +.su8b9d8i8f9f8e8r9e8n9t8i8a8l. +.1su +.su4b3 +.su4b1d +.subd1if +.subdi4f1f +.subdiffer1 +.subdiffer3en1t +.subdifferent2i +.subdifferen1t2i1a +.subdifferenti2al +.su8b9d8i8ff8e8r9e8n9t8i8a8l. +.subd1i4ff +.subdiffer1 +.subdiffer3en1t +.subdifferent2i +.subdifferen1t2i1a +.subdifferenti2al +.su8b9e8x9p8r8e8s9s8i8o8n. +.sub4e +.sub1ex3p +.subexpr2 +.subex3pr2e2ss +.subexpres1si +.subexpres1s2io +.subexpres5sio2n +.su8b9e8x9p8r8e8s9s8i8o8n8s. +.subexpressio2n3s2 +.su8m9m8a9b8l8e. +.su2m +.sum1m +.sum1ma +.sum2mab +.summab2l2 +.su8p8e8r9e8g8o. +.su1pe +.supere1go +.su8p8e8r9e8g8o8s. +.supere4gos +.su9p8r8e8m9a9c8i8s8t. +.supr2 +.supre4mac +.supre1ma +.suprem4a2ci +.su9p8r8e8m9a9c8i8s8t8s. +.supremacis4t1s2 +.su8r9v8e8i8l9l8a8n8c8e. +.su2r +.surv4e +.survei2 +.surveil1l +.surveilla2n +.sw8i8m9m8i8n8g9l8y. +.sw2 +.swi2 +.swim1m +.swimm4ingl2 +.swimm5ing1ly +.sy8m8p9t8o9m8a8t8i8c. +.sy4m1p +.sym2p1t +.symp1to +.sympto2ma +.symptomat1ic +.sy8n9c8h8r8o9m8e8s8h. +.syn3c4hr4 +.syn2ch +.synchro2me +.synchro2mes +.synchrom4es2h +.sy8n9c8h8r8o9n8o8u8s. +.synchro2n +.synchro1nou2 +.synchrono2us +.sy8n9c8h8r8o9t8r8o8n. +.synchrotro2n +.ta8f8f9r8a8i8l. +.4ta2f4 +.ta4f1f4 +.taffr2ai2 +.ta8ff9r8a8i8l. +.4ta4ff4 +.taffr2ai2 +.ta8l8k9a9t8i8v8e. +.ta2l +.4talk +.talka3 +.talka4t +.talka1t2iv +.ta9p8e8s9t8r8y. +.tap2est4r +.tape4stry +.ta9p8e8s9t8r8i8e8s. +.tapestr2ie4 +.ta8r9p8a8u9l8i8n. +.t2a2r +.tar2p +.tar1pa +.tarpau4l2 +.tarpaul2i +.ta8r9p8a8u9l8i8n8s. +.tarpaul2i2n1s2 +.te9l8e8g9r8a9p8h8e8r. +.tele1gr +.teleg5ra3ph4er +.te9l8e8g9r8a9p8h8e8r8s. +.telegraphe4r1s2 +.te8l8e9k8i9n8e8t9i8c. +.teleki4n +.telek1i +.telek2ine +.teleki3net1ic +.te8l8e9k8i9n8e8t9i8c8s. +.telekineti4c3s2 +.te8l8e9r8o9b8o8t9i8c8s. +.te4l1er +.tel4ero +.teler5ob +.teleroboti4c3s2 +.te8l8l9e8r. +.tel1l +.tel2le +.te8l8l9e8r8s. +.telle4r1s2 +.te8m9p8o9r8a8r9i8l8y. +.te4m1p +.tem1p4or +.tempo1ra +.tempo4raril +.tempor2a2r +.temporar1i +.temporari1ly +.te8n9u8r8e. +.te8s8t9b8e8d. +.tes2t1b +.test4be2d +.te8x8t9w8i8d8t8h. +.3tex +.tex1t2 +.textw4 +.textwi2 +.textw2id +.textwid2th +.th8a8l9a9m8u8s. +.tha3la +.thala3m +.thala1mu +.thalam2us +.th8e8r9m8o9e8l8a8s9t8i8c. +.th2e +.ther3m4 +.ther1mo +.thermo4el +.thermoe1la +.thermoelast2i +.thermoelas1tic +.ti8m8e9s8t8a8m8p. +.ti2mes +.times1ta +.timesta4m1p +.ti8m8e9s8t8a8m8p8s. +.timestam2p1s2 +.to8o8l9k8i8t. +.too2 +.toolk1i +.to8o8l9k8i8t8s. +.toolki4t1s2 +.to8p8o9g8r8a8p8h9i9c8a8l. +.to5po4g +.topo1gr +.topo5graph1ic +.topogr4aphi +.topographi1ca +.to8q8u8e8s. +.to1q +.toqu2 +.tr8a8i9t8o8r9o8u8s. +.1tra +.tr2ai2 +.trai1to +.traitorou2 +.traitoro2us +.tr8a8n8s9c8e8i8v8e8r. +.tra2n +.tra2n1s2 +.trans4c +.tran4s3cei2 +.transce2iv +.tr8a8n8s9c8e8i8v8e8r8s. +.transceive4r1s2 +.tr8a8n8s9g8r8e8s8s. +.tran2s3g +.trans1gr +.transgr2e2ss +.tr8a8n8s9v8e8r9s8a8l. +.tran4sv +.transve4r1s2 +.transver1sa2 +.tr8a8n8s9v8e8r9s8a8l8s. +.transversa2l1s2 +.tr8a8n8s9v8e8s9t8i8t8e. +.transv4e2s +.transvest2i +.transvest2ite +.tr8a8n8s9v8e8s9t8i8t8e8s. +.transvestit4es +.tr8a9v8e8r8s9a9b8l8e. +.trave4r1s2 +.traver1sa2 +.traver2s1ab +.traversab2l2 +.tr8a9v8e8r9s8a8l. +.tr8a9v8e8r9s8a8l8s. +.traversa2l1s2 +.tr8i9e8t8h8y8l9a8m8i8n8e. +.tri5et +.tr2ie4 +.triethy3la +.triethylam1in +.triethylam2ine +.tr8e8a8c8h9e8r8i8e8s. +.trea2ch +.treache2 +.treacher1i +.treacher2ie4 +.tr8o8u9b8a9d8o8u8r. +.trou2 +.trouba2d +.trouba1do +.trou2badou2 +.tu8r9k8e8y. +.1tu +.tu8r9k8e8y8s. +.turkeys4 +.tu8r8n9a8r8o8u8n8d. +.tur4n2a2r +.tur1na +.turnarou2 +.turnaroun2d +.tu8r8n9a8r8o8u8n8d8s. +.turnaroun2d1s2 +.ty8p9a8l. +.1ty +.ty1pa +.typ4al +.un9a8t9t8a8c8h8e8d. +.un2at4 +.una4t3t2 +.unat1ta +.unatta2ch +.unattache2 +.unatta4ch4ed +.un9e8r8r9i8n8g9l8y. +.un4er +.uner4r4 +.unerrin4g +.unerringl2 +.unerring1ly +.un9f8r8i8e8n8d9l8y. +.un3f +.unfri2 +.unfr2ie4 +.unfrien2d1ly +.un9f8r8i8e8n8d9l8i9e8r. +.unfr2ie4ndl2ie4 +.va8g8u8e8r. +.1va +.vag4 +.va5guer +.va2gue +.va8u8d8e9v8i8l8l8e. +.vaude1v4 +.vaude2v3i4l +.vaude1vi +.vaudevil1l +.vaudevil2le +.vi8c9a8r8s. +.v4ic2a2r +.vi1ca +.vica4rs2 +.vi8l9l8a8i8n9e8s8s. +.2vil +.vil1l +.villai2 +.villa4i4n +.villa2ine +.villai5n2e2ss +.villai1nes +.vi8s9u8a8l. +.vi3su +.visu1al +.vi8s9u8a8l9l8y. +.visual1l +.visual1ly +.vi9v8i8p9a9r8o8u8s. +.3v2iv +.viv2i4p +.vivi1pa +.vivip2a2r +.viviparou2 +.viviparo2us +.vo8i8c8e9p8r8i8n8t. +.voi4 +.voi3cep +.voicepr2 +.voiceprin4t3 +.vs8p8a8c8e. +.v2s1pa +.vspa4ce +.wa8d9d8i8n8g. +.wa2d +.wad4d1in +.wad1d4 +.wa8l8l9f8l8o8w8e8r. +.wal1l +.wal2lf +.wallf4l2 +.wallflow1er +.wa8l8l9fl8o8w8e8r. +.wal2lfl2 +.wallflow1er +.wa8l8l9f8l8o8w9e8r8s. +.wallflowe4r1s2 +.wa8l8l9fl8o8w9e8r8s. +.wallflowe4r1s2 +.wa8r8m9e8s8t. +.w2a2r +.war1m +.war2me +.war2mes +.wa8s8t8e9w8a8t8e8r. +.was4t +.waste2w +.waste1w5a +.wastewa1te +.wa8v8e9g8u8i8d8e. +.waveg3 +.waveg2ui2 +.wavegu2id +.wa8v8e9g8u8i8d8e8s. +.waveguide4s2 +.wa8v8e9l8e8t. +.wa8v8e9l8e8t8s. +.wavele4t1s2 +.we8b9l8i8k8e. +.w2e1b +.web2l2 +.web3l4ik +.we8e8k9n8i8g8h8t. +.weekn2ig +.we8e8k9n8i8g8h8t8s. +.weeknigh4t1s2 +.wh8e8e8l9c8h8a8i8r. +.whee4l1c2 +.wheel2ch +.wheelchai2 +.wheelcha4ir +.wh8e8e8l9c8h8a8i8r8s. +.wheelchai4rs2 +.wh8i8c8h9e8v8e8r. +.whi4 +.wh4i2ch +.whiche2 +.whichev1er +.wh8i8t8e9s8i8d8e8d. +.wh2ite +.whit4es +.white1si +.white2s2id +.whitesi2d1ed +.wh8i8t8e9s8p8a8c8e. +.white1sp +.white2s1pa +.whitespa4ce +.wh8i8t8e9s8p8a8c8e8s. +.wi8d8e9s8p8r8e8a8d. +.w2id +.wide4s2 +.wide1sp +.wides4pre +.widespr2 +.widesprea2d1 +.wi8n8g9s8p8a8n. +.win4g +.wings2 +.wing2s1pa +.wingspa4n +.wi8n8g9s8p8a8n8s. +.wingspa2n1s2 +.wi8n8g9s8p8r8e8a8d. +.wingspr2 +.wingsprea2d1 +.wi8t8c8h9c8r8a8f8t. +.wi4tc +.wit4ch +.witchcra2f4t +.witchcra2f +.wo8r8d9s8p8a8c9i8n8g. +.1wo2 +.wor2d1s2 +.words4p +.word2s1pa +.wordsp4a2ci +.wordspa2c1in +.wordspac1ing +.wo8r8k9a8r8o8u8n8d. +.work2a2r +.workarou2 +.workaroun2d +.wo8r8k9a8r8o8u8n8d8s. +.workaroun2d1s2 +.wo8r8k9h8o8r8s8e. +.workh4 +.workhor4se +.workho4rs2 +.wo8r8k9h8o8r8s8e8s. +.workhors3e4s +.wr8a8p9a8r8o8u8n8d. +.wra4 +.wrap2a2r4 +.wra1pa +.wraparou2 +.wraparoun2d +.wr8e8t8c8h9e8d. +.wre4tc +.wret4ch +.wretche2 +.wret4ch4ed +.wr8e8t8c8h9e8d9l8y. +.wretche2d1ly +.ye8s9t8e8r9y8e8a8r. +.yes4 +.yesterye2a2r +.al9g8e9b8r8a8i9s8c8h8e. +.algebra2is1c +.algebrais3ch2 +.algebraische2 +.al9l8e9g8h8e9n8y. +.al1l +.al2le +.al3leg +.alleghe2n +.ar9k8a8n9s8a8s. +.arka2n +.arkan2sa2 +.arka2n1s2 +.at8p9a8s8e. +.a4t1p +.at1pa +.at8p9a8s8e8s. +.atpas1e4s +.au8s9t8r8a8l9a8s8i8a8n. +.a2us +.aus1t4r +.aus1tra +.australas2i1a +.australasi2a2n +.au8t8o9m8a8t8i9s8i8e8r9t8e8r. +.automa3tis +.automatis2ie4 +.automatisiert3er +.be9d8i8e9n8u8n8g. +.4be2d +.b4e3di +.be5di3en +.bed2ie4 +.bedie3nu4n +.be8m8b8o. +.4be5m +.be4m5b +.bi8b9l8i9o9g8r8a9p8h8i9s8c8h8e. +.bibliogr4aphi +.bibliograph2is1c +.bibliographis3ch2 +.bibliographische2 +.bo8s9t8o8n. +.5bos4 +.bos1to +.bosto2n +.br8o8w8n9i8a8n. +.brown5i +.brow3n4i1a +.browni3a2n +.br8u8n8s9w8i8c8k. +.bru2n +.bru2n3s4 +.brun4sw2 +.brunswi2 +.brunswick1 +.bu9d8a9p8e8s8t. +.bu1d2a +.ca8r9i8b9b8e8a8n. +.car1i +.car4ib +.cari2b1b +.carib2be +.caribbea2n +.ch8a8r8l8e8s9t8o8n. +.char4le4 +.char1l +.charles2 +.charl4es2to +.charle3sto2n +.ch8a8r9l8o8t8t8e8s9v8i8l8l8e. +.char3lo4 +.charlo4t3t2 +.charlot4tes +.charlotte4sv +.charlottes2vil +.charlottesvil1l +.charlottesvil2le +.co9l8u8m9b8i8a. +.colum4bi +.colu4m1b +.columb2i1a +.cz8e8c8h8o9s8l8o9v8a9k8i8a. +.c2ze4 +.cze2ch +.cze3cho2 +.czechos4l2 +.czechos4lov +.czechoslo1va +.czechoslovak1i +.czechoslovak2i1a +.de8l9a9w8a8r8e. +.de1la +.de4law +.delaw2a2r +.di8j8k9s8t8r8a. +.di3j +.dij4k1s2 +.dijkst4r +.dijks1tra +.du8a8n8e. +.d1u1a +.dua2n +.dy9n8a9m8i9s8c8h8e. +.5dyn +.dy1na +.dynam2is +.dynam2is1c +.dynamis3ch2 +.dynamische2 +.en8g9l8i8s8h. +.engl2 +.englis2h +.eu8l8e8r9i8a8n. +.eul4e +.eu3l4er1i +.eule1r2i3a4 +.euleri2a2n +.ev8a8n9s8t8o8n. +.e1va +.eva2n +.evan4st +.eva2n1s2 +.evans1to +.evansto2n +.fe8b9r8u9a8r8y. +.f2e4b +.fe3br +.febru3a +.febru2a2r +.fe8s8t9s8c8h8r8i8f8t. +.fes4t1s2 +.fest4sc +.fests2ch2 +.festsc4hr4 +.festschr4i2ft +.fl8o8r9i9d8a. +.flor2id +.flori1d2a +.fl8o8r9i9d8a. +.flor2id +.flori1d2a +.fl8o8r9i9d9i8a8n. +.flori2di +.florid5i2a2n +.flori1d4i3a +.fl8o8r9i9d9i8a8n. +.flori2di +.florid5i2a2n +.flori1d4i3a +.fo8r9s8c8h8u8n8g8s9i8n9s8t8i9t8u8t. +.fors4c +.fors2ch2 +.forschungs2 +.forschung2s1in +.forschungs2i2n1s2 +.forschungsinst2i +.forschungsinsti1tu +.fr8e8e9b8s8d. +.fre2e1b +.free2b5s2 +.freeb4s5d +.fu8n8k9t8s8i8o8n8a8l. +.3fu +.fu4nk2 +.funk5t +.funk4t1s2 +.funkt1s2io +.funkt5sio2n +.funktsio1n5a +.ga8u8s8s9i8a8n. +.ga2us +.gau2ss +.gaus1si +.gauss2i1a +.gaussi2a2n +.gh8o8s8t9s8c8r8i8p8t. +.ghos4t1s2 +.ghost4sc +.ghostscri2 +.ghostscr2ip +.ghostscri2p1t +.gh8o8s8t9v8i8e8w. +.ghos4tv +.ghostv2ie4 +.gr8a8s8s9m8a8n8n9i8a8n. +.gr2as +.gra2ss +.gras2s1m +.grass3ma +.grassma2n3 +.grassma4n1n2 +.grassman3n4i1a +.grassma2nni3a2n +.gr8e8i8f8s9w8a8l8d. +.grei2 +.grei2f3s +.greifsw2 +.greifswa2ld +.gr8o8t8h8e8n9d8i8e8c8k. +.g4ro +.gro4th2e +.gr4oth +.grothe2n +.grothend2ie4 +.grothendieck1 +.gr8u8n8d9l8e8h9r8e8n. +.gru2n +.grundle1h4 +.grundle4hr4 +.ha9d8a9m8a8r8d. +.ha2d +.ha1d2a +.hada2m2 +.had4a1ma +.hadam2a2r +.ha8i9f8a. +.hai1fa +.ha8m8i8l9t8o8n9i8a8n. +.ha4m +.hami4lt +.hamil1to +.hamilto2n +.hamilto3n4i1a +.hamiltoni3a2n +.he8l9s8i8n8k8i. +.he2l1s2 +.hel2s1in +.hels4i4nk2 +.helsink1i +.he8r9m8i8t9i8a8n. +.her3mit +.hermi1ti +.herm4i1t2i1a +.hermiti2a2n +.hi8b8b8s. +.hi2b1b +.hib2b5s2 +.ho8k9k8a8i9d8o. +.h2ok +.hokk4 +.hokkai2 +.hokka2id +.hokkai1do +.ja8c9k8o8w9s8k8i. +.5ja +.jack1 +.jackowsk2 +.jackowsk1i +.ja8n9u9a8r8y. +.ja2n +.jan3u1a +.janu2a2r +.ja9p8a9n8e8s8e. +.ja4p +.ja1pa +.japa2n +.japa1nes +.japane1s2e +.ka8d9o8m9t8s8e8v. +.ka2d +.ka1do +.kado4mt +.kadom4t1s2 +.kadomt5sev +.ka8n9s8a8s. +.ka2n +.kan2sa2 +.ka2n1s2 +.ka8r8l8s9r8u8h8e. +.k2a2r +.kar1l +.kar2l1s2 +.karls1r +.ko8r9t8e9w8e8g. +.ko5r +.kr8i8s8h8n8a. +.kr2is +.kr3is2h +.kris2h1n +.krish1na +.kr8i8s8h9n8a9i8s8m. +.krishnai2 +.krishnai2s1m +.kr8i8s8h9n8a8n. +.krishn2a2n +.la8n9c8a8s9t8e8r. +.lan1ca +.lancast5er +.le9g8e8n8d8r8e. +.le1gen +.legen1dr +.legendre4 +.le8i8c8e8s9t8e8r. +.lei2 +.le5ic +.leices5t +.li8p9s8c8h8i8t8z. +.l2ip +.li2p1s2 +.lips2ch2 +.lips3chit +.lipschi4tz +.li8p9s8c8h8i8t8z9i8a8n. +.lipschit2z1i +.lipschitz2i1a +.lipschitzi2a2n +.lo8j9b8a8n. +.lo5j +.lojba2n +.lo8u9i9s8i9a8n8a. +.lou2 +.lo2ui2 +.louis2i1a +.louisi2a2n +.louisia1na +.ma8c9o8s. +.ma1co +.ma8n9c8h8e8s9t8e8r. +.man2ch +.manche2 +.manch1es +.ma8r9k8o8v9i8a8n. +.marko5vi2a2n +.markov2i1a +.ma8r8k8t9o8b8e8r9d8o8r8f. +.mark5t +.mark1to +.markto3b +.marktober1do +.marktoberd4or +.marktoberdor1f +.ma8s8s9a9c8h8u9s8e8t8t8s. +.ma2ss +.mas1sa2 +.massa2ch +.massach2us +.massachuse4t3t2 +.massachuset4t1s2 +.ma8x9w8e8l8l. +.maxwel4l +.mi9c8r8o9s8o8f8t. +.micro2so +.microso2ft3 +.mi8n9n8e9a8p9o9l8i8s. +.m2i4n1n2 +.minne4 +.minneapol2i +.mi8n9n8e9s8o8t8a. +.min1nes +.minne1so +.minneso1ta +.mo8s9c8o8w. +.mos2c +.mos1co +.na8c8h9r8i8c8h8t8e8n. +.1na +.na2ch +.nac4hr4 +.na2chr4i2ch +.nachricht1en +.na8s8h9v8i8l8l8e. +.n4as +.nas2h +.nash2vil +.nashvil1l +.nashvil2le +.ne8t9b8s8d. +.ne2t1b +.net2b5s2 +.netb4s5d +.ne8t9s8c8a8p8e. +.ne4t1s2 +.net4sc +.netsca4p +.nets1ca +.ni8j9m8e9g8e8n. +.ni3j +.nijme2g +.nijme1gen +.no8e9t8h8e8r9i8a8n. +.3noe +.noeth2e +.noether1i +.noethe1r2i3a4 +.noetheri2a2n +.no8o8r8d9w8i8j8k8e8r9h8o8u8t. +.noo2 +.no3ord +.noord1w +.noordwi2 +.noordwi3j +.noordwijk1er +.noordwijker1h4 +.noordwijkerhou2 +.no9v8e8m9b8e8r. +.nove4m5b +.op8e8n9b8s8d. +.ope4n1b4 +.open2b5s2 +.openb4s5d +.op8e8n9o8f8f8i8c8e. +.op4eno +.openo4f1f +.openof1fi +.op8e8n9o8ffi8c8e. +.pa8l8a9t8i8n8o. +.pala2t1in +.palat2i1no +.pa9l8e8r9m8o. +.paler3m4 +.paler1mo +.pe9t8r8o8v9s8k8i. +.petro3v +.petrovsk2 +.petrovsk1i +.pf8a8f8f9i8a8n. +.4pf +.p1fa +.pfa2f +.pfa4f1f4 +.pfaf1fi +.pfaff2i3a +.pfaffi2a2n +.pf8a8ffi8a8n. +.pfaffia2n +.ph8i8l9a9d8e8l9p8h8i8a. +.phi4l4ade +.phila2d +.philade2lp +.philadel5phi +.philadelph2i1a +.ph8i8l9o9s8o8p8h9i9s8c8h8e. +.philo2so +.philos4op +.philos2oph +.philosoph2is1c +.philosophis3ch2 +.philosophische2 +.po8i8n9c8a8r8e. +.poin2 +.poi2 +.poinc2a2r5 +.poin1ca +.po9t8e8n9t8i8a8l9g8l8e8i9c8h8u8n8g. +.p4ot +.po1ten1t +.potent2i +.poten1t2i1a +.potenti2al +.potentia4l1g4 +.potentialgl2 +.potential1gle +.potentialglei2 +.potentialgle5ic +.potentialgle4i2ch +.ra9d8h8a9k8r8i8s8h9n8a8n. +.rad1h2 +.radhakr2is +.radhakr3is2h +.radhakris2h1n +.radhakrish1na +.radhakrishn2a2n +.ra8t8h8s9k8e8l9l8e8r. +.r4ath +.ra2t4h1s2 +.rathsk2 +.rath4ske +.rathskel1l +.rathskel2le +.ri8e9m8a8n8n9i8a8n. +.r2ie4 +.rie5ma2n +.rie1ma +.riema4n1n2 +.rieman3n4i1a +.riema2nni3a2n +.ry8d9b8e8r8g. +.ry1d +.ryd1b +.rydberg2 +.sc8h8o8t9t8i8s8c8h8e. +.scho4t3t2 +.schott2is1c +.s2ch2ottis3ch2 +.schottische2 +.sc8h8r8o9d8i8n8g9e8r. +.sc4hr4 +.schrod1in +.schrod4inge +.sc8h8w8a9b8a9c8h8e8r. +.sch1w +.s2chwaba2ch +.schwabache2 +.sc8h8w8a8r8z9s8c8h8i8l8d. +.schw2a2r +.s2ch2warzs2ch2 +.schwarzsch4il2 +.schwarzschi2ld +.se8p9t8e8m9b8e8r. +.se2p1t +.sep2te +.septe4m5b +.st8o8k8e8s9s8c8h8e. +.st2ok +.stokes4 +.stok2e2ss +.stokes2s5c +.stokess2ch2 +.stokessche2 +.st8u8t8t9g8a8r8t. +.stu4t3t2 +.stut4t1g +.stutt1ga +.stuttg2a2r +.su8s9q8u8e9h8a8n9n8a. +.s2us +.susqu2 +.susque1h4 +.susqueha2n +.susqueha4n1n2 +.susquehan1na +.ta8u9b8e8r9i8a8n. +.tau4b +.taub4e +.tau3ber +.tauber1i +.taube1r2i3a4 +.tauberi2a2n +.te8c8h9n8i9s8c8h8e. +.te2ch +.tec2h1n +.techn2is1c +.te2chnis3ch2 +.technische2 +.te8n9n8e8s9s8e8e. +.t4e4n1n2 +.tenne4 +.ten1nes +.tenn2e2ss +.to9m8a9s8z8e8w9s8k8i. +.to2ma +.tomas2ze +.tomaszewsk2 +.tomaszewsk1i +.ty9p8o9g8r8a8p8h8i8q8u8e. +.ty3po +.ty5po4g +.typo1gr +.typogr4aphi +.typographiqu2 +.uk8r8a8i8n9i8a8n. +.4uk +.ukr2ai2 +.ukra4i4n +.ukra2ini +.ukrai4n4i1a +.ukraini3a2n +.ve8r9a8l8l9g8e9m8e8i8n9e8r8t8e. +.veral1l +.veral4l1g4 +.verallge1me +.verallgemei2 +.verallgeme2ine +.verallgemein1er +.ve8r9e8i8n9i9g8u8n8g. +.vere3in +.verei2 +.vere2ini +.verein2ig +.vereini3gun +.ve8r9t8e8i9l8u8n9g8e8n. +.vertei2 +.verteilun1gen +.vi8i8i8t8h. +.v4i5i4 +.v4i5i5i4 +.vii2ith +.vi8i8t8h. +.vi2ith +.wa8h8r9s8c8h8e8i8n9l8i8c8h9k8e8i8t8s9t8h8e8o9r8i8e. +.wa4hr4 +.wah4rs2 +.wahrs4c +.wahrs2ch2 +.wahrsche2 +.wahrschei2 +.wahrsche4i4n1l +.wahrs2cheinl4i2ch +.wahrscheinlic4hk +.wahrschei2nlichkei2 +.wahrscheinlichkei4t1s2 +.wahrscheinlichkeits3th2e +.wahrscheinlichkeitsthe1o5r +.wahrscheinlichkeitstheor2ie4 +.we8r9n8e8r. +.w1er +.wer4n1er +.we8r9t8h8e8r9i8a8n. +.werth2e +.werther1i +.werthe1r2i3a4 +.wertheri2a2n +.wi8n9c8h8e8s9t8e8r. +.win2ch +.winche2 +.winch1es +.wi8r8t9s8c8h8a8f8t. +.w4ir4 +.wir4t1s2 +.wirt4sc +.wirts2ch2 +.wirtscha2f +.wirtscha2ft +.wi8s9s8e8n9s8c8h8a8f8t9l8i8c8h. +.w4i2s1s +.wissen4 +.wisse2n1s2 +.wissens4c +.wissens2ch2 +.wissenscha2f +.wissenscha2ft +.wissenschaf2tl +.wissens2chaftl4i2ch +.xv8i8i8i8t8h. +.xv4i5i4 +.xv4i5i5i4 +.xvii2ith +.xv8i8i8t8h. +.xvi2ith +.xx8i8i8i8r8d. +.xx4 +.xx3i +.xx4i5i4 +.xx4i5i5i4 +.xxii4ir +.xx8i8i8n8d. +.xxi4ind +.yi8n8g9y8o8n8g. +.y1i +.yin2gy +.yingy1o4 +.yingyo2n +.sh8u9x8u8e. +.shux1u3 +.ji9s8u8a8n. +.ji2su +.jisua2n +.ze8a9l8a8n8d. +.2ze +.zea4l +.zea3l4and +.zeala2n +.ze8i8t9s8c8h8r8i8f8t. +.zei2 +.zei4t1s2 +.zeit4sc +.zeits2ch2 +.zeitsc4hr4 +.zeitschr4i2ft +8'8 +8a8'8 +8b8'8 +8c8'8 +8d8'8 +8e8'8 +8f8'8 +8g8'8 +8h8'8 +8i8'8 +8j8'8 +8k8'8 +8l8'8 +8m8'8 +8n8'8 +8o8'8 +8p8'8 +8q8'8 +8r8'8 +8s8'8 +8t8'8 +8u8'8 +8v8'8 +8w8'8 +8x8'8 +8y8'8 +8z8'8 +'a8 +'b8 +'c8 +'d8 +'e8 +'f8 +'g8 +'h8 +'i8 +'j8 +'k8 +'l8 +'m8 +'n8 +'o8 +'p8 +'q8 +'r8 +'s8 +'t8 +'u8 +'v8 +'w8 +'x8 +'y8 +'z8 +8’8 +8a8’8 +8b8’8 +8c8’8 +8d8’8 +8e8’8 +8f8’8 +8g8’8 +8h8’8 +8i8’8 +8j8’8 +8k8’8 +8l8’8 +8m8’8 +8n8’8 +8o8’8 +8p8’8 +8q8’8 +8r8’8 +8s8’8 +8t8’8 +8u8’8 +8v8’8 +8w8’8 +8x8’8 +8y8’8 +8z8’8 +’a8 +’b8 +’c8 +’d8 +’e8 +’f8 +’g8 +’h8 +’i8 +’j8 +’k8 +’l8 +’m8 +’n8 +’o8 +’p8 +’q8 +’r8 +’s8 +’t8 +’u8 +’v8 +’w8 +’x8 +’y8 +’z8 +8-8 +8a8-8 +8b8-8 +8c8-8 +8d8-8 +8e8-8 +8f8-8 +8g8-8 +8h8-8 +8i8-8 +8j8-8 +8k8-8 +8l8-8 +8m8-8 +8n8-8 +8o8-8 +8p8-8 +8q8-8 +8r8-8 +8s8-8 +8t8-8 +8u8-8 +8v8-8 +8w8-8 +8x8-8 +8y8-8 +8z8-8 +-a8 +-b8 +-c8 +-d8 +-e8 +-f8 +-g8 +-h8 +-i8 +-j8 +-k8 +-l8 +-m8 +-n8 +-o8 +-p8 +-q8 +-r8 +-s8 +-t8 +-u8 +-v8 +-w8 +-x8 +-y8 +-z8 +8–8 +8a8–8 +8b8–8 +8c8–8 +8d8–8 +8e8–8 +8f8–8 +8g8–8 +8h8–8 +8i8–8 +8j8–8 +8k8–8 +8l8–8 +8m8–8 +8n8–8 +8o8–8 +8p8–8 +8q8–8 +8r8–8 +8s8–8 +8t8–8 +8u8–8 +8v8–8 +8w8–8 +8x8–8 +8y8–8 +8z8–8 +–a8 +–b8 +–c8 +–d8 +–e8 +–f8 +–g8 +–h8 +–i8 +–j8 +–k8 +–l8 +–m8 +–n8 +–o8 +–p8 +–q8 +–r8 +–s8 +–t8 +–u8 +–v8 +–w8 +–x8 +–y8 +–z8 +8—8 +8a8—8 +8b8—8 +8c8—8 +8d8—8 +8e8—8 +8f8—8 +8g8—8 +8h8—8 +8i8—8 +8j8—8 +8k8—8 +8l8—8 +8m8—8 +8n8—8 +8o8—8 +8p8—8 +8q8—8 +8r8—8 +8s8—8 +8t8—8 +8u8—8 +8v8—8 +8w8—8 +8x8—8 +8y8—8 +8z8—8 +—a8 +—b8 +—c8 +—d8 +—e8 +—f8 +—g8 +—h8 +—i8 +—j8 +—k8 +—l8 +—m8 +—n8 +—o8 +—p8 +—q8 +—r8 +—s8 +—t8 +—u8 +—v8 +—w8 +—x8 +—y8 +—z8 +.affin9i1ty +.affin2it +.affin9ity's8 +.affinit8y8'8 +.daffi9est +.daffie +.de9fi9ance +.defi1a +.defi2a2n +.defianc +.de9fi9ance's8 +.defianc8e8'8 +.de9fi9an4t +.de9fi9ant1ly +.defian2tl +.defic8i4t1s2 +.de4fic +.d5efi1ci +.defi2c1it +.de9fil9ing +.defil4 +.defil1i +.fi9ancé +.fi1a +.fi2a2n +.fianc +.fi9ancé's8 +.fiancé8'8 +.fi9ancée +.fi9ancées +.fi9ancés +.fil9i9buster +.fil1i +.fil2ib +.fili5bust +.filib2us +.fil9i9buster's8 +.filibuste8r8'8 +.fil9i9bus9te2r2ed +.filibus5tere +.fil9i9bus9ter9in4g +.filibus1ter1i +.fil9i9buste4r1s2 +.fil9i9gree +.fil2ig +.fili5gre +.fili1gr +.fil9i9gree's8 +.filigre8e8'8 +.fil9i9greed +.fil9i9gree9ing +.filigreei2 +.fil9i9gree2s4 +.fin8der +.find +.fin1de +.fin8der's8 +.finde8r8'8 +.find9e4r5s2 +.fin8n1er +.fi4n1n2 +.finne4 +.fin8ni4er +.finn2ie4 +.fin8ni9est +.fis8ticuff3s +.fis1t2i +.fis1tic +.fist4ic1u +.fistic4u4ff +.fluffi9est +.fluffie +.fly9lea2f +.fly +.flyle2a +.fly9leaf's8 +.flylea8f8'8 +.fly9leav4e2s +.flylea2v +.fly9sheet +.flys4 +.flys2h +.fly9speck1 +.flyspe2c +.fly9speck's8 +.flyspec8k8'8 +.fly9speck2ed +.fly9speck9in4g +.flyspeck3i +.fly9spec4k1s2 +.fly9swat9ter +.flysw2 +.flyswat5te +.flyswa4t3t2 +.fly9swat9te4r1s2 +.huffi9est +.huffie +.iffi9est +.iffie +.puffi9est +.puffie +.re9fil9ing +.re3fi +.refil4 +.refil1i +.scruffi9est +.scruffie +.spiffi9est +.spiffie +.stuffi9est +.stuffie +.viewfin8der +.v2ie4 +.view1fi +.view2fin +.viewfind +.viewfin1de +.viewfin8der's8 +.viewfinde8r8'8 +.viewfind9e4r5s2 +.affin9ity’s8 +.affinit8y8’8 +.de9fi9ance’s8 +.defianc8e8’8 +.fi9ancé’s8 +.fiancé8’8 +.fil9i9buster’s8 +.filibuste8r8’8 +.fil9i9gree’s8 +.filigre8e8’8 +.fin8der’s8 +.finde8r8’8 +.fly9leaf’s8 +.flylea8f8’8 +.fly9speck’s8 +.flyspec8k8’8 +.viewfin8der’s8 +.viewfinde8r8’8 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/article_base14.rts b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/article_base14.rts new file mode 100644 index 000000000..9961b934a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/article_base14.rts @@ -0,0 +1,10 @@ +[STYLESHEET] +name=Sphinx article (PDF Core Fonts) +base=sphinx_article +description=The Sphinx article stylesheet, but using the fonts from the PDF core + set (yielding smaller PDF files) + +[VARIABLES] +mono_typeface=Courier +serif_typeface=Times +sans_typeface=Helvetica diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/base14.rts b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/base14.rts new file mode 100644 index 000000000..fffa2c5fb --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/base14.rts @@ -0,0 +1,10 @@ +[STYLESHEET] +name=Sphinx (PDF Core Fonts) +base=sphinx +description=The Sphinx stylesheet, but using the fonts from the PDF core set + (yielding smaller PDF files) + +[VARIABLES] +mono_typeface=Courier +serif_typeface=Times +sans_typeface=Helvetica diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/sphinx.rts b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/sphinx.rts new file mode 100644 index 000000000..22855a995 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/sphinx.rts @@ -0,0 +1,903 @@ +[STYLESHEET] +name=Sphinx +description=Mostly a copy of the LaTeX style included with Sphinx +pygments_style=friendly + +[VARIABLES] +mono_typeface=TeX Gyre Cursor +serif_typeface=TeX Gyre Pagella +sans_typeface=Tex Gyre Heros +fallback_typeface=DejaVu Serif +thin_black_stroke=0.5pt,#000 +blue=#20435c + +[default:Paragraph] +typeface=$(serif_typeface) +font_weight=REGULAR +font_size=10pt +line_spacing=fixed(12pt, leading(0)) +indent_first=0 +space_above=0 +space_below=0 +text_align=JUSTIFY +kerning=True +ligatures=True +hyphen_lang=en_US +hyphen_chars=4 + +[fallback] +typeface=$(fallback_typeface) + +[body] +base=default +space_above=5pt +space_below=0 +text_align=justify + +[emphasis] +font_slant=italic + +[strong] +font_weight=BOLD + +[literal emphasis] +base=emphasis +typeface=$(mono_typeface) +hyphenate=False +ligatures=False + +[literal strong] +base=strong +typeface=$(mono_typeface) +hyphenate=False +ligatures=False + +[inline math] +base=monospaced + +[quote] +font_slant=italic + +[italic] +font_slant=italic + +[bold] +font_weight=BOLD + +[file path] +base=monospaced +ligatures=False + +[keystrokes] +base=monospaced +ligatures=False + +[regular expression] +base=monospaced +ligatures=False +hyphenate=False + +[code with variable] +base=monospaced +ligatures=False +hyphenate=False + +[mail header] +base=literal emphasis + +[MIME type] +base=literal emphasis + +[newsgroup] +base=literal emphasis + +[command] +base=literal strong + +[make variable] +base=literal strong + +[program] +base=literal strong + +[man page] +base=literal emphasis + +[window title] +font_weight=BOLD + +[UI control] +font_slant=italic + +[UI control accelerator] +font_weight=bold + +[menu cascade] +font_weight=BOLD + +[draft comment] +font_color=#f00 + +[title reference] +font_slant=ITALIC + +[monospaced] +typeface=$(mono_typeface) +hyphenate=False +ligatures=False + +[error] +font_color=#f00 + +[linked reference] +font_color=#355f7c + +[external hyperlink] +font_color=#376f62 + +[broken hyperlink] +font_color=#7f7f7f + +[glossary inline definition] +before=' (' +after=')' + +[code block] +typeface=$(mono_typeface) +font_size=9pt +text_align=LEFT +indent_first=0 +ligatures=False +hyphenate=False +space_above=6pt +space_below=4pt +border=$(thin_black_stroke) +padding_left=5pt +padding_top=3pt +padding_bottom=3pt + +[code block caption] +base=caption +keep_with_next=true + +[math block] +base=code block +border=none + +[graphviz code block] +base=code block +border=none + +[block quote] +margin_left=1cm + +[attribution] +base=default +text_align=RIGHT + +[centered] +base=default +text_align=CENTER +font_weight=BOLD +space_below=4pt + +[line block] +base=body +text_align=left + +[chapter] +page_break=RIGHT + +[content chapter] +base=chapter + +[heading level 1] +typeface=$(sans_typeface) +font_weight=BOLD +font_size=16pt +font_color=$(blue) +line_spacing=SINGLE +space_above=18pt +space_below=12pt +number_format=NUMBER +label_suffix=' ' + +[unnumbered heading level 1] +base=heading level 1 +number_format=None + +[heading level 2] +base=heading level 1 +font_size=14pt +space_above=26pt +space_below=10pt + +[heading level 3] +base=heading level 2 +font_size=12pt +space_above=10pt +space_below=6pt + +[heading level 4] +base=heading level 3 +font_size=9pt +space_above=8pt +space_below=4pt +number_format=None + +[heading level 5] +base=heading level 2 +font_size=9pt +font_slant=ITALIC +font_weight=REGULAR +line_spacing=Fixed(10pt) +space_above=2pt +space_below=2pt +number_format=None + +[other heading levels] +base=heading level 5 +font_size=9pt +font_slant=ITALIC +font_weight=REGULAR +line_spacing=Fixed(10pt) +space_above=2pt +space_below=2pt +number_format=None + +[appendix heading level 1] +base=heading level 1 +number_format=uppercase character + +[title] +base=default +font_weight=BOLD +indent_first=0 +space_above=10pt +space_below=5pt + +[topic] +space_above=5pt +space_below=5pt +margin_left=0.5cm +margin_right=0.5cm +border=$(thin_black_stroke) +padding_left=10pt +padding_right=10pt +padding_top=4pt +padding_bottom=4pt +background_color=#f5f5f5 + +[topic title] +base=default +font_weight=BOLD +indent_first=0 +space_above=5pt +space_below=5pt + +[post requirement] + +[rubric] +typeface=$(sans_typeface) +font_size=9pt +font_weight=bold +font_color=$(blue) +space_above=8pt + +[sidebar] +space_above=5pt +space_below=5pt +padding_left=10pt +padding_right=10pt +padding_top=4pt +padding_bottom=4pt +background_color=#ffffe5 +border=1pt,#666 + +[sidebar title] +base=default +font_size=12pt +font_weight=BOLD +indent_first=0 +space_above=5pt +space_below=5pt + +[sidebar subtitle] +base=default +font_weight=BOLD +indent_first=0 +space_above=2pt +space_below=2pt + +[list item label] +base=default +indent_first=0 +text_align=RIGHT + +[bulleted list item label] +base=list item label + +[enumerated list item label] +base=list item label +label_suffix='.' + +[enumerated list] +margin_left=8pt +space_above=5pt +space_below=5pt +ordered=True +flowable_spacing=5pt +number_format=NUMBER +label_suffix=')' + +[nested enumerated list] +base=enumerated list +margin_left=10pt +space_below=0 + +[bulleted list] +base=enumerated list +ordered=False +label_suffix=None + +[nested bulleted list] +base=bulleted list +margin_left=10pt +space_below=0 + +[steps list] +base=enumerated list + +[steps list item label] +base=enumerated list item label + +[unordered steps list] +base=bulleted list + +[unordered steps list item label] +base=bulleted list item label + +[choices list] +base=bulleted list + +[choices list item label] +base=bulleted list item label + +[list item body] +space_above=0 +space_below=0 +margin_left=0 +margin_right=0 + +[list item paragraph] +base=default +space_above=0pt +space_below=0pt +margin_left=0pt +indent_first=0pt + +[definition list] + +[definition list item] +label_min_width=17pt +label_max_width=0 + +[definition term] +space_above=4pt +keep_with_next=true + +[definition term paragraph] +base=default +indent_first=0 +font_weight=BOLD + +[definition term classifier] +font_weight=REGULAR +font_slant=italic + +[definition] + +[definition paragraph] +base=body +space_above=1pt + + +# (Sphinx) version added/changed & deprecated + +[versionmodified] +font_slant=ITALIC + +# (Sphinx) object descriptions + +[object description] +base=definition list item +space_above=3pt +space_below=3pt +label_max_width=0 + +[object signatures] +base=definition term + +[object signature] +base=definition term paragraph +font_weight=regular + +[object name] +typeface=$(mono_typeface) +font_weight=BOLD +ligatures=False +hyphenate=False + +[additional name part] +base=monospaced + +[object type] + +[object returns] + +[object parentheses] +font_size=11pt + +[object parameter list] + +[object parameter (no emphasis)] + +[object parameter] +base=object parameter (no emphasis) +font_slant=ITALIC + +[object brackets] +font_size=11pt +font_weight=BOLD + +[object optional parameter] + +[object annotation] +font_weight=BOLD + +[object description content] +base=definition + +[object description content paragraph] +base=body +space_above=1pt + + +# (Sphinx) production list + +[production list] +space_above=5pt +space_below=5pt + +[production] + +[token name] +base=literal +font_weight=BOLD +space_above=0 +space_below=0 + +[token definition] +base=literal +space_above=0 +space_below=0 + + +# field lists + +[field list] + +[field list item] +label_max_width=80pt + +[field name] +base=default +indent_first=0 +text_align=LEFT +font_weight=BOLD + + +# option lists + +[option list] + +[option list item] +base=field list item + +[option] +base=body +indent_first=0 +text_align=LEFT + +[option string] +base=default +typeface=$(mono_typeface) +font_size=8pt +ligatures=False +hyphenate=False + +[option argument] +base=default +font_slant=ITALIC + +[admonition] +inline_title=false +space_above=9pt +space_below=5pt +padding_top=0 +padding_bottom=4pt +border_top=$(thin_black_stroke) +border_bottom=$(thin_black_stroke) + +[admonition title] +base=body +keep_with_next=true +font_weight=BOLD +space_below=2pt + +[admonition inline title] +base=admonition title +after = ' ' + +[builtin admonition:Admonition] +base=admonition +inline_title=true + +[boxed builtin admonition:Admonition] +base=builtin admonition +border=$(thin_black_stroke) +padding_left=8pt +padding_right=8pt + +[red adminition title:Paragraph] +base=admonition title +font_color=#f00 + +[attention admonition] +base=boxed builtin admonition + +[caution admonition] +base=boxed builtin admonition + +[danger admonition] +base=boxed builtin admonition + +[warning admonition] +base=boxed builtin admonition + +[error admonition] +base=boxed builtin admonition + +[hint admonition] +base=builtin admonition + +[important admonition] +base=builtin admonition + +[note admonition] +base=builtin admonition + +[tip admonition] +base=builtin admonition + +[seealso admonition] +base=admonition +border_top=none +border_bottom=none + +[header_footer:Paragraph] +base=default +typeface=$(sans_typeface) +font_size=10pt +font_weight=BOLD +indent_first=0pt +tab_stops=50% CENTER, 100% RIGHT + +[header] +base=header_footer +padding_bottom=2pt +border_bottom=$(thin_black_stroke) +space_below=24pt + +[footer] +base=header_footer +padding_top=4pt +border_top=$(thin_black_stroke) +space_above=18pt + +[footnote] +location=footer + +[footnote marker] +base=linked reference +position=SUPERSCRIPT +number_format=number + +[footnote paragraph] +base=default +font_size=8pt +indent_first=0 +line_spacing=Fixed(10pt) + +[footnote label] +base=footnote paragraph +text_align=RIGHT + +[citation] +location=footer + +[citation marker] +label_prefix='[' +label_suffix=']' +custom_label=True + +[citation paragraph] +base=footnote paragraph + +[citation label] +base=citation paragraph +text_align=RIGHT + +[image] +space_above=10pt +horizontal_align=CENTER + +; sideways figures and tables +[sideways float : Float(has_class='sideways')] +base = NEXT_MATCH +float = sideways + +[figure] +space_above=10pt +space_below=12pt + +[figure image] +base=image +keep_with_next=true + +[caption : Caption] +base=default +font_size=9pt +line_spacing=Fixed(10pt) +indent_first=0pt +space_above=4pt +space_below=0pt +text_align=CENTER +label_suffix='. ' + +[figure caption] +base=caption + +[figure legend] +margin_left=30pt + +[figure legend paragraph] +base=caption +space_above=5pt +text_align=LEFT + +[table of contents section] +show_in_toc=False + +[table of contents] +base=default +indent_first=0 +depth=2 + +[toc level 1] +base=table of contents +font_weight=BOLD +space_above=14pt +tab_stops=0.6cm, 100% RIGHT + +[toc level 2] +base=table of contents +margin_left=0.6cm +tab_stops=1.0cm, 100% RIGHT '. ' + +[toc level 3] +base=table of contents +margin_left=1.6cm +tab_stops=1.4cm, 100% RIGHT '. ' + +[L3 toc level 3] +base=table of contents +margin_left=0 +tab_stops=0.6cm, 100% RIGHT '. ' + +[toc entry number reference field] +base = linked reference +quiet = True + +[list of figures section] +base=table of contents section + +[list of figures] +base=table of contents + +[list of figures entry] +base=list of figures +tab_stops=100% RIGHT '. ' + +[list of tables section] +base=list of figures section + +[list of tables] +base=list of figures + +[list of tables entry] +base=list of figures entry + +[table] +space_above=5pt +space_below=5pt +horizontal_align=CENTER + +[table caption] +base=caption +keep_with_next=true + +[table cell] +space_above=2pt +space_below=2pt +margin_left=2pt +margin_right=2pt +vertical_align=MIDDLE + +[table body cell paragraph] +base=default +indent_first=0 +margin_left=3pt +margin_right=3pt + +[table body cell list item number] +base=table body cell paragraph +indent_first=0 +text_align=RIGHT + +[table head cell paragraph] +base=table body cell paragraph +font_weight=BOLD +text_align=CENTER + +[table first column paragraph] +base=table body cell paragraph +text_align=LEFT + +[table top border] +stroke=$(thin_black_stroke) + +[table bottom border] +base=table top border + +[table head bottom border] +base=table top border + +[table body top border] +base=table head bottom border + +[table cell border:TableCellBorder] +stroke=$(thin_black_stroke) + +[table cell left border] +base=table cell border + +[table cell top border] +base=table cell border + +[table cell right border] +base=table cell border + +[table cell bottom border] +base=table cell border + +[horizontal rule] +space_above=10pt +space_below=15pt +margin_left=40pt +margin_right=40pt + + +# title page + +[title page rule] +stroke=1pt,#000 + +[title page logo] +horizontal_align=right +padding_top=14pt +space_above=10pt + +[title page title] +typeface=$(sans_typeface) +font_weight=bold +font_size=25pt +text_align=right +space_above=12pt + +[title page subtitle] +base=title page title +font_slant=italic +font_size=17pt +space_above=6pt + +[title page author] +typeface=$(sans_typeface) +font_weight=bold +font_size=17pt +text_align=right +space_above=110pt + +[title page date] +typeface=$(serif_typeface) +font_size=12pt +text_align=right +space_above=220pt + +[index] + +[index section label] +typeface=$(sans_typeface) +font_size=14pt +space_above=10pt +space_below=2pt +keep_with_next=true + +[level 1 index entry] +base=default +text_align=left +margin_left=40pt +indent_first=-40pt + +[level 2 index entry] +base=level 1 index entry +margin_left=60pt +indent_first=-40pt + +[level 3 index entry] +base=level 1 index entry +margin_left=80pt +indent_first=-40pt + +[level 4 index entry] +base=level 1 index entry +margin_left=100pt +indent_first=-40pt + +[domain index entry name] +typeface=$(mono_typeface) +ligatures=False +hyphenate=False + + +# chapter titles + +[front matter section title] +typeface=$(serif_typeface) +font_size=10pt +text_align=right +space_above=1in +border_top=$(thin_black_stroke) +border_bottom=$(thin_black_stroke) +padding_top=8pt +padding_bottom=9pt + +[body matter chapter label] +typeface=$(sans_typeface) +font_size=10pt +font_weight=bold +text_align=right + +[body matter chapter number] +font_size=14pt + +[body matter chapter title] +typeface=$(sans_typeface) +font_size=14pt +font_weight=bold +text_align=right +space_above=0.83in +border_top=$(thin_black_stroke) +border_bottom=$(thin_black_stroke) +padding_top=18pt +padding_bottom=18pt diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/sphinx_article.rts b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/sphinx_article.rts new file mode 100644 index 000000000..7e4075a93 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/stylesheets/sphinx_article.rts @@ -0,0 +1,21 @@ +[STYLESHEET] +name=Sphinx (article) +base=sphinx +description=The Sphinx stylesheet adjusted for the article template + +[chapter] +page_break=none + +[title page title] +font_size=20pt +text_align=center +space_above=0 + +[title page author] +font_size=12pt +text_align=center +space_above=6pt + +[abstract paragraph] +base=default +font_weight=bold \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/catalog b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/catalog new file mode 100644 index 000000000..6d7870c02 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/catalog @@ -0,0 +1,25 @@ + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/docutils/docutils.dtd b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/docutils/docutils.dtd new file mode 100644 index 000000000..229a6d903 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/docutils/docutils.dtd @@ -0,0 +1,607 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%calstblx; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/docutils/soextblx.dtd b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/docutils/soextblx.dtd new file mode 100644 index 000000000..56ba311ba --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/docutils/soextblx.dtd @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/html5-uppercase.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/html5-uppercase.ent new file mode 100644 index 000000000..77d1d639c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/html5-uppercase.ent @@ -0,0 +1,54 @@ + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/htmlmathml-f.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/htmlmathml-f.ent new file mode 100644 index 000000000..299a6bb6c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/htmlmathml-f.ent @@ -0,0 +1,2164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/htmlmathml.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/htmlmathml.ent new file mode 100644 index 000000000..78382e026 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/htmlmathml.ent @@ -0,0 +1,92 @@ + + + + + +%xhtml1-lat1; + +%xhtml1-special; + +%xhtml1-symbol; + +%html5-uppercase; + +%predefined; + +%isobox; + +%isocyr1; + +%isocyr2; + +%isodia; + +%isolat1; + +%isolat2; + +%isonum; + +%isopub; + +%isoamsa; + +%isoamsb; + +%isoamsc; + +%isoamsn; + +%isoamso; + +%isoamsr; + +%isogrk3; + +%isomfrk; + +%isomopf; + +%isomscr; + +%isotech; + +%mmlextra; + +%mmlalias; \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsa.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsa.ent new file mode 100644 index 000000000..73c434092 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsa.ent @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsb.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsb.ent new file mode 100644 index 000000000..0ed2f1d45 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsb.ent @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsc.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsc.ent new file mode 100644 index 000000000..2f22ffb98 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsc.ent @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsn.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsn.ent new file mode 100644 index 000000000..7bb905929 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsn.ent @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamso.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamso.ent new file mode 100644 index 000000000..6c7765f1a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamso.ent @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsr.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsr.ent new file mode 100644 index 000000000..80a3ea546 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isoamsr.ent @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isobox.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isobox.ent new file mode 100644 index 000000000..4dd69436c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isobox.ent @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isocyr1.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isocyr1.ent new file mode 100644 index 000000000..6c631e3a9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isocyr1.ent @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isocyr2.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isocyr2.ent new file mode 100644 index 000000000..c4632cb90 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isocyr2.ent @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isodia.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isodia.ent new file mode 100644 index 000000000..f977c204a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isodia.ent @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk1.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk1.ent new file mode 100644 index 000000000..7c5208046 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk1.ent @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk2.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk2.ent new file mode 100644 index 000000000..f3fd893a5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk2.ent @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk3.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk3.ent new file mode 100644 index 000000000..cdd734b34 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk3.ent @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk4.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk4.ent new file mode 100644 index 000000000..0563a53f2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isogrk4.ent @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isolat1.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isolat1.ent new file mode 100644 index 000000000..7ccf90094 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isolat1.ent @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isolat2.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isolat2.ent new file mode 100644 index 000000000..786bdc497 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isolat2.ent @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isomfrk.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isomfrk.ent new file mode 100644 index 000000000..97257a916 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isomfrk.ent @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isomopf.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isomopf.ent new file mode 100644 index 000000000..2682710fd --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isomopf.ent @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isomscr.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isomscr.ent new file mode 100644 index 000000000..dac95895e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isomscr.ent @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isonum.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isonum.ent new file mode 100644 index 000000000..d0c8043e5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isonum.ent @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isopub.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isopub.ent new file mode 100644 index 000000000..cca1520e3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isopub.ent @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isotech.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isotech.ent new file mode 100644 index 000000000..ac642f8fa --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/isotech.ent @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/mmlalias.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/mmlalias.ent new file mode 100644 index 000000000..5b920471d --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/mmlalias.ent @@ -0,0 +1,598 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/mmlextra.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/mmlextra.ent new file mode 100644 index 000000000..b0a9af1a7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/mmlextra.ent @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/predefined.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/predefined.ent new file mode 100644 index 000000000..6a3ef323f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/predefined.ent @@ -0,0 +1,52 @@ + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/w3centities-f.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/w3centities-f.ent new file mode 100644 index 000000000..5f2839f33 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/w3centities-f.ent @@ -0,0 +1,2276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/w3centities.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/w3centities.ent new file mode 100644 index 000000000..cec225f61 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/w3centities.ent @@ -0,0 +1,98 @@ + + + + + +%isobox; + +%isocyr1; + +%isocyr2; + +%isodia; + +%isolat1; + +%isolat2; + +%isonum; + +%isopub; + +%isoamsa; + +%isoamsb; + +%isoamsc; + +%isoamsn; + +%isoamso; + +%isoamsr; + +%isogrk1; + +%isogrk2; + +%isogrk3; + +%isogrk4; + +%isomfrk; + +%isomopf; + +%isomscr; + +%isotech; + +%mmlextra; + +%mmlalias; + +%xhtml1-lat1; + +%xhtml1-special; + +%xhtml1-symbol; + +%html5-uppercase; + +%predefined; \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/xhtml1-lat1.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/xhtml1-lat1.ent new file mode 100644 index 000000000..57a941950 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/xhtml1-lat1.ent @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/xhtml1-special.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/xhtml1-special.ent new file mode 100644 index 000000000..aa8fc188a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/xhtml1-special.ent @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/xhtml1-symbol.ent b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/xhtml1-symbol.ent new file mode 100644 index 000000000..154022dfb --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/data/xml/w3c-entities/xhtml1-symbol.ent @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/dimension.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/dimension.py new file mode 100644 index 000000000..10c4aa56c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/dimension.py @@ -0,0 +1,357 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +""" +Classes for expressing dimensions: lengths, widths, line thickness, etc. + +Each dimension is expressed in terms of a unit. Several common units are are +defined here as constants. To create a new dimension, multiply number with +a unit:: + + height = 100*PT + width = 50*PERCENT + +Fractional dimensions are evaluated within the context they are defined in. For +example, the width of a :class:`Flowable` is evaluated with respect to the +total width available to it. + +""" + +import inspect +import re +import sys + +from .attribute import AcceptNoneAttributeType, ParseError +from collections import OrderedDict +from token import PLUS, MINUS, NUMBER, NAME, OP + + +__all__ = ['Dimension', 'PT', 'PICA', 'INCH', 'MM', 'CM', + 'PERCENT', 'QUARTERS'] + + +class DimensionType(type): + """Maps comparison operators to their equivalents in :class:`float`""" + + def __new__(mcs, name, bases, cls_dict): + """Return a new class with predefined comparison operators""" + for method_name in ('__lt__', '__le__', '__gt__', '__ge__'): + if method_name not in cls_dict: + cls_dict[method_name] = mcs._make_operator(method_name) + return type.__new__(mcs, name, bases, cls_dict) + + @staticmethod + def _make_operator(method_name): + """Return an operator method that takes parameters of type + :class:`Dimension`, evaluates them, and delegates to the :class:`float` + operator with name `method_name`""" + def operator(self, other): + """Operator delegating to the :class:`float` method `method_name`""" + float_operator = getattr(float, method_name) + return float_operator(float(self), float(other)) + return operator + + +class DimensionBase(AcceptNoneAttributeType, metaclass=DimensionType): + """Late-evaluated dimension + + The result of mathematical operations on dimension objects is not a + statically evaluated version, but rather stores references to the operator + arguments. The result is only evaluated to a number on conversion to a + :class:`float`. + + The internal representation is in terms of PostScript points. A PostScript + point is equal to one 72nd of an inch. + + """ + + def __neg__(self): + return DimensionMultiplication(self, -1) + + def __add__(self, other): + """Return the sum of this dimension and `other`.""" + return DimensionAddition(self, other) + + __radd__ = __add__ + + def __sub__(self, other): + """Return the difference of this dimension and `other`.""" + return DimensionSubtraction(self, other) + + def __rsub__(self, other): + """Return the difference of `other` and this dimension.""" + return DimensionSubtraction(other, self) + + def __mul__(self, factor): + """Return the product of this dimension and `factor`.""" + return DimensionMultiplication(self, factor) + + __rmul__ = __mul__ + + def __truediv__(self, divisor): + """Return the quotient of this dimension and `divisor`.""" + return DimensionMultiplication(self, 1.0 / divisor) + + def __abs__(self): + """Return the absolute value of this dimension (in points).""" + return abs(float(self)) + + def __float__(self): + """Evaluate the value of this dimension in points.""" + raise NotImplementedError + + def __eq__(self, other): + try: + return float(self) == float(other) + except (ValueError, TypeError): + return False + + @classmethod + def check_type(cls, value): + return (super().check_type(value) or isinstance(value, Fraction) + or value == 0) + + REGEX = re.compile(r"""(?P + [+-]? # optional sign + \d*\.?\d+ # integer or float value + ) + \s* # optional space between value & unit + (?P + [a-z%/0-9]* # unit (can be an empty string) + ) + """, re.IGNORECASE | re.VERBOSE) + + @classmethod + def from_tokens(cls, tokens, source): + sign = 1 + if tokens.next.exact_type in (PLUS, MINUS): + sign = -1 if next(tokens).exact_type == MINUS else 1 + token = next(tokens) + if token.type != NUMBER: + raise ParseError('Expecting a number') + try: + value = int(token.string) + except ValueError: + value = float(token.string) + if tokens.next and tokens.next.type in (NAME, OP): + unit_string = next(tokens).string + elif value == 0: + return Dimension(0) + else: + raise ParseError('Expecting a dimension unit') + if unit_string == '/': + unit_string += next(tokens).string + try: + unit = DimensionUnitBase.all[unit_string.lower()] + except KeyError: + raise ParseError("'{}' is not a valid dimension unit" + .format(unit_string)) + return sign * value * unit + + @classmethod + def doc_format(cls): + return ('a numeric value followed by a unit ({})' + .format(', '.join('``{}``'.format(unit) + for unit in DimensionUnitBase.all))) + + def to_points(self, total_dimension): + """Convert this dimension to PostScript points + + If this dimension is context-sensitive, it will be evaluated relative + to ``total_dimension``. This can be the total width available to a + flowable, for example. + + Args: + total_dimension (int, float or Dimension): the dimension providing + context to a context-sensitive dimension. If int or float, it + is assumed to have a unit of PostScript points. + + Returns: + float: this dimension in PostScript points + + """ + return float(self) + + +class Dimension(DimensionBase): + """A simple dimension + + Args: + value (int or float): the magnitude of the dimension + unit (DimensionUnit): the unit this dimension is expressed in. + Default: :data:`PT`. + + """ + + # TODO: em, ex? (depends on context) + def __init__(self, value=0, unit=None): + self._value = value + self._unit = unit or PT + + def __str__(self): + number = '{:.2f}'.format(self._value).rstrip('0').rstrip('.') + return '{}{}'.format(number, self._unit.label) + + def __repr__(self): + for name, obj in inspect.getmembers(sys.modules[__name__]): + if obj is self._unit: + return '{}*{}'.format(self._value, name) + else: + raise ValueError + + def __float__(self): + return float(self._value) * self._unit.points_per_unit + + def grow(self, value): + """Grow this dimension (in-place) + + The ``value`` is interpreted as a magnitude expressed in the same unit + as this dimension. + + Args: + value (int or float): the amount to add to the magnitude of this + dimension + + Returns: + :class:`Dimension`: this (growed) dimension itself + + """ + self._value += float(value) + return self + + +class DimensionAddition(DimensionBase): + """The sum of a set of dimensions + + Args: + addends (`Dimension`\\ s): + + """ + + def __init__(self, *addends): + self.addends = list(addends) + + def __float__(self): + return sum(map(float, self.addends or (0.0, ))) + + +class DimensionSubtraction(DimensionBase): + def __init__(self, minuend, subtrahend): + self.minuend = minuend + self.subtrahend = subtrahend + + def __float__(self): + return float(self.minuend) - float(self.subtrahend) + + +class DimensionMultiplication(DimensionBase): + def __init__(self, multiplicand, multiplier): + self.multiplicand = multiplicand + self.multiplier = multiplier + + def __float__(self): + return float(self.multiplicand) * self.multiplier + + +class DimensionMaximum(DimensionBase): + def __init__(self, *dimensions): + self.dimensions = dimensions + + def __float__(self): + return max(*(float(dimension) for dimension in self.dimensions)) + + +class DimensionUnitBase(object): + all = OrderedDict() + + def __init__(self, label): + self.label = label + self.all[label] = self + + +class DimensionUnit(DimensionUnitBase): + """A unit to express absolute dimensions in + + Args: + points_per_unit (int or float): the number of PostScript points that + fit in one unit + label (str): label for the unit + + """ + + def __init__(self, points_per_unit, label): + super().__init__(label) + self.points_per_unit = float(points_per_unit) + + def __repr__(self): + return '{}({}, {})'.format(type(self).__name__, self.points_per_unit, + repr(self.label)) + + def __rmul__(self, value): + return Dimension(value, self) + + +# Units + +PT = DimensionUnit(1, 'pt') #: PostScript points +INCH = DimensionUnit(72*PT, 'in') #: imperial/US inch +PICA = DimensionUnit(1 / 6 * INCH, 'pc') #: computer pica +MM = DimensionUnit(1 / 25.4 * INCH, 'mm') #: millimeter +CM = DimensionUnit(10*MM, 'cm') #: centimeter + + +class Fraction(DimensionBase): + """A context-sensitive dimension + + This fraction is multiplied by the reference dimension when evaluating it + using :meth:`to_points`. + + Args: + numerator (int or float): the numerator of the fraction + unit (FractionUnit): the fraction unit + + """ + + def __init__(self, numerator, unit): + self._numerator = numerator + self._unit = unit + + def __str__(self): + number = '{:.2f}'.format(self._numerator).rstrip('0').rstrip('.') + return '{}{}'.format(number, self._unit.label) + + __eq__ = AcceptNoneAttributeType.__eq__ + + def to_points(self, total_dimension): + fraction = self._numerator / self._unit.denominator + return fraction * float(total_dimension) + + +class FractionUnit(DimensionUnitBase): + """A unit to express relative dimensions in + + Args: + denominator (int or float): the number of parts to divide the whole in + label (str): label for the unit + + """ + + def __init__(self, denominator, label): + super().__init__(label) + self.denominator = denominator + + def __repr__(self): + return '{}({}, {})'.format(type(self).__name__, self.denominator, + repr(self.label)) + + def __rmul__(self, nominator): + return Fraction(nominator, self) + + +PERCENT = FractionUnit(100, '%') #: fraction of 100 +HALVES = FractionUnit(2, '/2') #: fraction of 2 +QUARTERS = FractionUnit(4, '/4') #: fraction of 4 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/document.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/document.py new file mode 100644 index 000000000..79f5deb16 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/document.py @@ -0,0 +1,562 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +""" +Classes representing a document: + +* :class:`Page`: A single page in a document. +* :class:`Document`: Takes an input file and renders its content onto pages. +* :class:`DocumentElement`: Base class for any element that is eventually + rendered in the document. + +:class:`Page` require a page orientation to be specified: + +* :const:`PORTRAIT`: The page's height is larger than its width. +* :const:`LANDSCAPE`: The page's width is larger than its height. + +""" + +from pathlib import Path + +import datetime +import pickle +import re +import sys +import time + +from collections import OrderedDict, deque +from contextlib import suppress +from copy import copy +from itertools import count +from operator import attrgetter +from os import getenv + +from . import __version__, __release_date__ +from .attribute import OptionSet, Source +from .backend import pdf +from .flowable import StaticGroupedFlowables +from .language import EN +from .layout import (Container, ReflowRequired, + BACKGROUND, CONTENT, HEADER_FOOTER) +from .number import NumberFormatBase, format_number +from .reference import ReferenceType +from .strings import Strings +from .style import Match, StyleLog, ZERO_SPECIFICITY +from .text import StyledText +from .util import DEFAULT, WeakMutableKeyDictionary +from .warnings import warn + + +__all__ = ['Page', 'PageOrientation', 'PageType', 'Document', 'DocumentTree'] + + +class DocumentTree(StaticGroupedFlowables): + """Holds the document's contents as a tree of flowables + + Args: + flowables (list[Flowable]): the list of top-level flowables + options (Reader): frontend-specific options + + """ + + def __init__(self, flowables, options=None, style=None, source=None): + super().__init__(flowables, style=style, source=source) + self.options = options + + +class PageOrientation(OptionSet): + values = 'portrait', 'landscape' + + +class PageType(OptionSet): + values = 'left', 'right', 'any' + + +class PageNumberFormat(NumberFormatBase): + """How (or if) page numbers are displayed""" + + values = NumberFormatBase.values + ('continue', ) + + +class Page(Container): + """A single page in a document. + + A :class:`Page` is a :class:`Container`, so other containers can be added + as children. + + Args: + document_part (DocumentPart): the document part this page is part of + number (int): the 1-based index of this page in the document part + paper (Paper): determines the dimensions of this page + orientation (PageOrientation): the orientation of this page + display_sideways (Sideways): display the page rotated + + """ + + register_with_parent = False + + def __init__(self, document_part, number, paper, orientation='portrait', + display_sideways=None): + self._document_part = document_part + self.number = number + self.paper = paper + self.orientation = orientation + self.display_sideways = display_sideways + if orientation == PageOrientation.PORTRAIT: + width, height = paper.width, paper.height + elif orientation == PageOrientation.LANDSCAPE: + width, height = paper.height, paper.width + document = self.document_part.document + backend_document = document.backend_document + self.backend_page = document.backend.Page(backend_document, + width, height, self) + self._empty = True + super().__init__('PAGE', None, 0, 0, width, height) + + def __repr__(self): + return "{}('{}', {})".format(self.__class__.__name__, self.name, + self.number) + + @property + def document_part(self): + return self._document_part + + def empty_canvas(self): + self.canvas = self.backend_page.canvas + + @property + def page(self): + """Returns the page itself.""" + return self + + def get_current_section(self, level): + current_section = None + for section in (section for section in self.document._sections + if section.level == level): + if section.is_hidden(self): + continue + section_id = section.get_id(self.document) + try: + first_page = self.document.page_elements[section_id] + except KeyError: + break + if first_page.document_part is not self.document_part: + continue + elif first_page is self: + return section + elif first_page.number > self.number: + break + elif first_page.number <= self.number: + current_section = section + return current_section + + @property + def number_format(self): + return self.document_part.page_number_format + + @property + def page_number_prefix(self): + prefix = self.document_part.get_config_value('page_number_prefix', + self.document) + return prefix.to_string(self) if prefix else None + + @property + def formatted_number(self): + page_number = format_number(self.number, self.number_format) + prefix = self.page_number_prefix + return prefix + page_number if prefix else page_number + + def render(self): + super().render(BACKGROUND) + try: + for index in count(): + try: + super().render(CONTENT, rerender=index > 0) + break + except ReflowRequired: + print('Overflow on page {}, reflowing ({})...' + .format(self.number, index + 1)) + finally: + super().render(HEADER_FOOTER) + + def place(self): + self.before_placing() + self.place_children() + self.canvas.place_annotations() + + +class PartPageCount(object): + def __init__(self): + self.count = 0 + + def __repr__(self): + return repr(self.count) + + def __eq__(self, other): + return self.count == other.count + + def __iadd__(self, other): + self.count += other + return self + + +class Metadata(dict, Source): + def __init__(self, document, **items): + super().__init__(**items) + self._document = document + + def __setitem__(self, key, value): + try: + value.source = self + except AttributeError: + pass + super().__setitem__(key, value) + + def __getitem__(self, key): + return copy(super().__getitem__(key)) + + @property + def location(self): + return 'document metadata' + + +class Document(object): + """Renders a document tree to pages + + Args: + document_tree (DocumentTree): a tree of the document's contents + stylesheet (StyleSheet): style sheet used to style document elements + language (Language): the language to use for standard strings + strings (Strings): user-defined string variables and can override + localized strings provided by `language` + backend: the backend used for rendering the document + + """ + + CREATOR = 'rinohtype v{} ({})'.format(__version__, __release_date__) + + CACHE_EXTENSION = '.rtc' + + def __init__(self, document_tree, stylesheet, language, strings=None, + backend=None): + """`backend` specifies the backend to use for rendering the document.""" + super().__init__() + self._print_version_and_license() + self._no_cache = getenv('RINOH_NO_CACHE', '0') != '0' + self._single_pass = getenv('RINOH_SINGLE_PASS', '0') != '0' + self.front_matter = [] + self.supporting_matter = {} + self.document_tree = document_tree + self.stylesheet = stylesheet + self.language = language + self._strings = strings or Strings() + self.backend = backend or pdf + self._flowables = list(id(element) + for element in document_tree.elements) + + self.metadata = Metadata(self, date=datetime.date.today()) + self.counters = {} # counters for Headings, Figures, Tables + self.elements = OrderedDict() # mapping id's to flowables + self.ids_by_element = WeakMutableKeyDictionary() # mapping elements to id's + self.references = {} # mapping id's to reference data + self.page_elements = {} # mapping id's to pages + self.page_references = {} # mapping id's to page numbers + self._styled_matches = WeakMutableKeyDictionary() # cache matching styles + self._sections = [] + self.index_entries = {} + self._glossary = {} + self._glossary_first = {} + self._unique_id = 0 + self.title_targets = set() + self.error = False + + def _print_version_and_license(self): + print('rinohtype {} ({}) Copyright (c) Brecht Machiels and' + ' contributors'.format(__version__, __release_date__)) + print('''\ +This program comes with ABSOLUTELY NO WARRANTY. Its use is subject +to the terms of the GNU Affero General Public License version 3.''') + + def _get_unique_id(self): + """Yields a different integer value on each access, used to uniquely + identify :class:`Flowable`s for which no identifier was + specified.""" + self._unique_id += 1 + return self._unique_id + + def get_metadata(self, key): + return self.metadata.get(key) + + def register_element(self, element): + primary_id = (element.get_id(self, create=False) + or self._get_unique_id()) + self.ids_by_element[element] = primary_id + self.elements[primary_id] = element + for id in element.secondary_ids: + self.elements[id] = element + return primary_id + + def register_page_reference(self, page, element): + for id in element.get_ids(self): + self.page_elements[id] = page + self.page_references[id] = page.formatted_number + + def set_reference(self, id, reference_type, value): + id_references = self.references.setdefault(id, {}) + id_references[reference_type] = value + + def get_reference(self, id, reference_type, default=DEFAULT): + if reference_type == ReferenceType.PAGE: + return self.page_references.get(id, 'XX') + try: + return self.references[id][reference_type] + except KeyError: + if default is DEFAULT: + raise + return default + + def get_matches(self, styled): + styled_matches = self._styled_matches + try: + return styled_matches[styled] + except KeyError: + stylesheet = self.stylesheet + matches = sorted(stylesheet.find_matches(styled, self), + key=attrgetter('specificity'), reverse=True) + last_match = Match(None, ZERO_SPECIFICITY) + for match in matches: + if (match.specificity == last_match.specificity + and match.style_name != last_match.style_name): + styled.warn("Multiple selectors match with the same " + f"specificity: {last_match.style_name}, " + f"{match.style_name}. See the style log for " + "details.") + match.stylesheet = stylesheet.find_source(match.style_name) + last_match = match + styled_matches[styled] = matches + return matches + + def set_glossary(self, term, definition): + try: + existing_definition = self._glossary[term] + return definition == existing_definition + except KeyError: + self._glossary[term] = definition + return True + + def get_glossary(self, term, id): + try: + first_id = self._glossary_first[term] + except KeyError: + self._glossary_first[term] = id + return self._glossary[term], id + return self._glossary[term], first_id + + def cache_path(self, filename): + return filename.parent / (filename.name + self.CACHE_EXTENSION) + + def _load_cache(self, filename): + """Load the cached page references from `.ptc`.""" + if self._no_cache: + print('Loading/saving of the references cache is disabled') + return {}, {} + cache_path = self.cache_path(filename) + try: + with cache_path.open('rb') as file: + part_page_counts, page_references = pickle.load(file) + print('References cache read from {}'.format(cache_path)) + except (IOError, TypeError): + part_page_counts, page_references = {}, {} + return part_page_counts, page_references + + def _save_cache(self, filename): + """Save the current state of the page references to `.rtc`""" + if self._no_cache: + return + with self.cache_path(filename).open('wb') as file: + cache = (self.part_page_counts, self.page_references) + pickle.dump(cache, file) + + def set_string(self, key, value, user=False): + if user: + self._strings.set_user_string(key, value) + else: + self._strings.set_builtin_string(key, value) + + def get_string(self, key, user=False): + if user: + result = self._strings.user.get(key, None) + if result is None: + warn('The "{}" user string is not defined.') + return result or '' + if key in self._strings.builtin: + return self._strings.builtin[key] + try: + return self.language.strings[key] + except KeyError: + warn('The "{}" string is not defined for {} ({}). Using the English' + ' string instead.' + .format(key, self.language.name, self.language.code)) + return EN.strings[key] + + def add_sideways_float(self, float): + self.sideways_floats.append(float) + self.registered_sideways_floats.add(float.get_id(self)) + + def next_sideways_float(self): + return self.sideways_floats.popleft() if self.sideways_floats else None + + def render(self, filename_root=None, file=None): + """Render the document repeatedly until the output no longer changes due + to cross-references that need some iterations to converge.""" + self.error = False + filename_root = Path(filename_root) if filename_root else None + if filename_root and file is None: + ext = self.backend.Document.extension + filename = filename_root.parent / (filename_root.name + ext) + file = filename.open('wb') + elif file and filename_root is None: + filename = getattr(file, 'name', None) + else: + raise ValueError("You need to specify either 'filename_root' or " + "'file'.") + + fake_container = FakeContainer(self) + prev_page_counts, prev_page_refs = self._load_cache(filename_root) + try: + self.document_tree.build_document(fake_container) + self.prepare(fake_container) + for out_of_line_flowables in self.supporting_matter.values(): + for flowable in out_of_line_flowables: + flowable.prepare(fake_container) + backend_metadata = self._get_backend_metadata() + self.page_elements.clear() + self.part_page_counts = prev_page_counts + self.page_references = prev_page_refs.copy() + while True: + self.backend_document = \ + self.backend.Document(self.CREATOR, **backend_metadata) + self.part_page_counts = self._render_pages() + if (self.part_page_counts == prev_page_counts + and self.page_references == prev_page_refs): + break + if self._single_pass: + print('Stopping after first rendering pass.') + break + print('Not yet converged, rendering again...') + prev_page_counts = self.part_page_counts + prev_page_refs = self.page_references.copy() + del self.backend_document + self._create_outlines(self.backend_document) + if filename: + self._save_cache(filename_root) + self.style_log.write_log(self.document_tree.source_root, + filename_root) + print('Writing output: {}'.format(filename)) + self.backend_document.write(file) + finally: + if filename_root: + file.close() + return not self.error + + def _render_pages(self): + """Render the complete document once and return the number of pages + rendered.""" + self.style_log = StyleLog(self.stylesheet) + self.floats = set() + self.sideways_floats = deque() + self.registered_sideways_floats = set() + self.placed_footnotes = set() + self._start_time = time.time() + + part_page_counts = {} + part_page_count = PartPageCount() + last_number_format = None + for part_template in self.part_templates: + part = part_template.document_part(self, last_number_format) + if part is None: + continue + if part.get_config_value('page_number_format', self) != 'continue': + part_page_count = PartPageCount() + part_page_count += part.render(part_page_count.count + 1) + part_page_counts[part_template.name] = part_page_count + last_number_format = part.page_number_format + sys.stdout.write('\n') # for the progress indicator + return part_page_counts + + def _create_outlines(self, backend_document): + """Create an outline in the output file that allows for easy navigation + of the document. The outline is a hierarchical tree of all the sections + in the document.""" + sections = parent = [] + current_level = 1 + stack = [] + fake_container = FakeContainer(self) + for section in self._sections: + if not section.show_in_toc(fake_container): + continue + section_id = section.get_id(self, create=False) + section_number = self.get_reference(section_id, 'number', None) + section_title = self.get_reference(section_id, 'title') + if section.level > current_level: + if section.level != current_level + 1: + warn("Your document section hierarchy is missing levels. " + "Please report this at https://github.com/brechtm" + "/rinohtype/pull/67") + break + stack.append(parent) + parent = current + elif section.level < current_level: + for i in range(current_level - section.level): + parent = stack.pop() + current = [] + with suppress(AttributeError): + section_title = section_title.to_string(fake_container) + with suppress(AttributeError): + section_number = section_number.to_string(fake_container) + item = (str(section_id), section_number, section_title, current) + parent.append(item) + current_level = section.level + backend_document.create_outlines(sections) + + def _get_backend_metadata(self): + """Transforms document metadata to sanitized plain text strings""" + result = {} + for key in (k for k in ('title', 'author') if k in self.metadata): + value = self.get_metadata(key) + if isinstance(value, StyledText): + value = value.to_string(None) + result[key] = re.sub(r"\s+", ' ', value.replace('\b', '')) + return result + + PROGRESS_TEMPLATE = \ + '\r{:3d}% [{}{}] ETA {:02d}:{:02d} ({:02d}:{:02d}) page {}' + PROGRESS_BAR_WIDTH = 40 + + def progress(self, flowable, container): + try: + index = self._flowables.index(id(flowable)) + except ValueError: + pass + else: + percent = 100 * (index + 1) / len(self._flowables) + time_passed = time.time() - self._start_time + passed = int(time_passed) + eta = int(time_passed / percent * (100 - percent)) + filled = int(self.PROGRESS_BAR_WIDTH * percent / 100) + sys.stdout.write(self.PROGRESS_TEMPLATE + .format(int(percent), filled * '=', + (self.PROGRESS_BAR_WIDTH - filled) * ' ', + eta // 60, eta % 60, + passed // 60, passed % 60, + container.page.formatted_number)) + sys.stdout.flush() + + +class FakeContainer(object): # TODO: clean up + def __init__(self, document): + self.document = document diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/draw.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/draw.py new file mode 100644 index 000000000..469198dc3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/draw.py @@ -0,0 +1,140 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .attribute import Attribute, AcceptNoneAttributeType, ParseError +from .color import Color, BLACK, GRAY90 +from .style import Style, Styled +from .dimension import Dimension, PT + + +__all__ = ['Stroke', 'LineStyle', 'Line', 'ShapeStyle', 'Shape', + 'Polygon', 'Rectangle'] + + +class Stroke(AcceptNoneAttributeType): + """The display properties of a line + + Args: + width (Dimension): the width of the line + color (Color): the color of the line + + """ + + def __init__(self, width, color): + self.width = width + self.color = color + + def __str__(self): + return '{}, {}'.format(self.width, self.color) + + def __repr__(self): + return '{}({}, {})'.format(type(self).__name__, repr(self.width), + repr(self.color)) + + @classmethod + def check_type(cls, value): + if value and not (Dimension.check_type(value.width) + and Color.check_type(value.color)): + return False + return super().check_type(value) + + @classmethod + def parse_string(cls, string, source): + try: + width_str, color_str = (part.strip() for part in string.split(',')) + except ValueError: + raise ParseError('Expecting stroke width and color separated by a ' + 'comma') + width = Dimension.from_string(width_str) + color = Color.from_string(color_str) + return cls(width, color) + + @classmethod + def doc_format(cls): + return ('the width (:class:`.Dimension`) and color (:class:`.Color`) ' + 'of the stroke, separated by a comma (``,``)') + + +class LineStyle(Style): + stroke = Attribute(Stroke, Stroke(1*PT, BLACK), 'Width and color used to ' + 'draw the line') + + +class Line(Styled): + """Draws a line + + Args: + start (2-tuple): coordinates for the start point of the line + end (2-tuple): coordinates for the end point of the line + + """ + + style_class = LineStyle + + def __init__(self, start, end, style=None, parent=None): + super().__init__(style=style, parent=parent) + self.start = start + self.end = end + + def render(self, container, offset=0): + canvas, document = container.canvas, container.document + stroke = self.get_style('stroke', container) + if not stroke: + return + with canvas.save_state(): + points = self.start, self.end + canvas.line_path(points) + canvas.stroke(stroke.width, stroke.color) + + +class ShapeStyle(LineStyle): + fill_color = Attribute(Color, GRAY90, 'Color to fill the shape') + + +class Shape(Styled): + """Base class for closed shapes""" + + style_class = ShapeStyle + + def __init__(self, style=None, parent=None): + super().__init__(style=style, parent=parent) + + def render(self, canvas, offset=0): + raise NotImplementedError + + +class Polygon(Shape): + def __init__(self, points, style=None, parent=None): + super().__init__(style=style, parent=parent) + self.points = points + + def render(self, container, offset=0): + canvas = container.canvas + stroke = self.get_style('stroke', container) + fill_color = self.get_style('fill_color', container) + if not (stroke or fill_color): + return + with canvas.save_state(): + canvas.line_path(self.points) + canvas.close_path() + if stroke and fill_color: + canvas.stroke_and_fill(stroke.width, stroke.color, + fill_color) + elif stroke: + canvas.stroke(stroke.width, stroke.color) + elif fill_color: + canvas.fill(fill_color) + + +class Rectangle(Polygon): + def __init__(self, bottom_left, width, height, style=None, parent=None): + bottom_right = (bottom_left[0] + width, bottom_left[1]) + top_right = (bottom_left[0] + width, bottom_left[1] + height) + top_left = (bottom_left[0], bottom_left[1] + height) + points = bottom_left, bottom_right, top_right, top_left + super().__init__(points, style=style, parent=parent) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/element.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/element.py new file mode 100644 index 000000000..09f8598ff --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/element.py @@ -0,0 +1,94 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .annotation import NamedDestination +from .warnings import warn + + +__all__ = ['DocumentElement'] + + +class DocumentElement(object): + """A element part of the document to be rendered + + Args: + id (str): unique identifier for referencing this element + parent (DocumentElement): element of which this element is a child + source (Source): object identifying where this document element is + defined; used for resolving relative paths, logging or error + reporting + + """ + + def __init__(self, id=None, parent=None, source=None): + self.id = id + self.secondary_ids = [] + self.parent = parent + self.source = source + + @property + def source_root(self): + element = self + while element: + if element.source: + return element.source.root + element = element.parent + + def get_id(self, document, create=True): + try: + return self.id or document.ids_by_element[self] + except KeyError: + if create: + return document.register_element(self) + + def get_ids(self, document): + primary_id = self.get_id(document) + yield primary_id + for id in self.secondary_ids: + yield id + + @property + def elements(self): + yield self + + def build_document(self, flowable_target): + """Set document metadata and populate front and back matter""" + pass + + def prepare(self, flowable_target): + """Determine number labels and register references with the document""" + if self.get_id(flowable_target.document, create=False): + flowable_target.document.register_element(self) + + def create_destination(self, container, at_top_of_container=False): + """Create a destination anchor in the `container` to direct links to + this :class:`DocumentElement` to.""" + create_destination(self, container, at_top_of_container) + + def warn(self, message, container=None): + """Present the warning `message` to the user, adding information on the + location of the related element in the input file.""" + if self.source is not None: + message = '[{}:{} <{}>] '.format(*self.source.location) + message + if container is not None: + try: + message += ' (page {})'.format(container.page.formatted_number) + except AttributeError: + pass + warn(message) + + +def create_destination(flowable, container, at_top_of_container=False): + """Create a destination anchor in the `container` to direct links to + `flowable` to.""" + vertical_position = 0 if at_top_of_container else container.cursor + ids = flowable.get_ids(container.document) + destination = NamedDestination(*(str(id) for id in ids)) + container.canvas.annotate(destination, 0, vertical_position, + container.width, None) + container.document.register_page_reference(container.page, flowable) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/flowable.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/flowable.py new file mode 100644 index 000000000..9f5dfaeff --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/flowable.py @@ -0,0 +1,902 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +""" +Base classes for flowable and floating document elements. These are elements +that make up the content of a document and are rendered onto its pages. + +* :class:`Flowable`: Element that is rendered onto a :class:`Container`. +* :class:`FlowableStyle`: Style class specifying the vertical space surrounding + a :class:`Flowable`. +* :class:`Floating`: Decorator to transform a :class:`Flowable` into a floating + element. +""" + + +from copy import copy +from itertools import chain +from token import NAME + +from .attribute import Attribute, OptionSet, Bool, OverrideDefault +from .color import Color +from .dimension import Dimension, PT, DimensionBase +from .draw import ShapeStyle, Rectangle, Line, LineStyle, Stroke +from .layout import (InlineDownExpandingContainer, VirtualContainer, + MaybeContainer, ContainerOverflow, EndOfContainer, + PageBreakException, ReflowRequired) +from .style import Styled, Style +from .text import StyledText +from .util import clamp, ReadAliasAttribute + + +__all__ = ['Flowable', 'FlowableStyle', + 'FlowableWidth', 'HorizontalAlignment', 'Break', + 'DummyFlowable', 'AnchorFlowable', 'WarnFlowable', + 'SetMetadataFlowable', 'SetUserStringFlowable', + 'SetOutOfLineFlowables', + 'GroupedFlowables', 'StaticGroupedFlowables', + 'LabeledFlowable', 'GroupedLabeledFlowables', + 'Float', 'PageBreak'] + + +class FlowableWidth(OptionSet): + """Controls the width of a flowable""" + + values = ('auto', 'fill') + + @classmethod + def check_type(cls, value): + return Dimension.check_type(value) or super().check_type(value) + + @classmethod + def from_tokens(cls, tokens, source): + if tokens.next.type == NAME: + return super().from_tokens(tokens, source) + else: + return Dimension.from_tokens(tokens, source) + + @classmethod + def doc_format(cls): + return super(cls, cls).doc_format() + ' or ' + Dimension.doc_format() + + +class HorizontalAlignment(OptionSet): + """Controls horizontal placement""" + + values = 'left', 'right', 'center' + + +class Break(OptionSet): + values = (None, 'any', 'left', 'right', + 'any restart', 'left restart', 'right restart') + + +class FlowableStyle(Style): + width = Attribute(FlowableWidth, 'auto', 'Width to render the flowable at') + horizontal_align = Attribute(HorizontalAlignment, 'left', + 'Horizontal alignment of the flowable') + space_above = Attribute(Dimension, 0, 'Vertical space preceding the ' + 'flowable') + space_below = Attribute(Dimension, 0, 'Vertical space following the ' + 'flowable') + margin_left = Attribute(Dimension, 0, 'Left margin') + margin_right = Attribute(Dimension, 0, 'Right margin') + padding = Attribute(Dimension, 0, 'Padding') + padding_left = Attribute(Dimension, 0, 'Left padding') + padding_right = Attribute(Dimension, 0, 'Right padding') + padding_top = Attribute(Dimension, 0, 'Top padding') + padding_bottom = Attribute(Dimension, 0, 'Bottom padding') + keep_with_next = Attribute(Bool, False, 'Keep this flowable and the next ' + 'on the same page') + border = Attribute(Stroke, None, 'Border surrounding the flowable') + border_left = Attribute(Stroke, None, 'Border left of the flowable') + border_right = Attribute(Stroke, None, 'Border right of the flowable') + border_top = Attribute(Stroke, None, 'Border above the flowable') + border_bottom = Attribute(Stroke, None, 'Border below the flowable') + background_color = Attribute(Color, None, "Color of the area within the " + "flowable's borders") + page_break = Attribute(Break, None, 'Type of page break to insert ' + 'before rendering this flowable') + + +class FlowableState(object): + """Stores a flowable's rendering state, which can be copied. + + This enables saving the rendering state at certain points in the rendering + process, so rendering can later be resumed at those points, if needed. + + """ + + def __init__(self, flowable, _initial=True): + self.flowable = flowable + self.initial = _initial + + def __copy__(self): + return self.__class__(self.flowable, _initial=self.initial) + + completed = False + + +class CompletedFlowableState(FlowableState): + + def __init__(self): + super().__init__(None, _initial=False) + + def __copy__(self): + return self.__class__() + + completed = True + + +class Flowable(Styled): + """A document element that can be "flowed" into a container on the page. + + A flowable can adapt to the width of the container, or it can horizontally + align itself in the container. + + Args: + align (HorizontalAlignment): horizontal alignment of the flowable + width (FlowableWidth or DimensionBase): the width of the flowable. + + """ + + style_class = FlowableStyle + break_exception = PageBreakException + + def __init__(self, align=None, width=None, + id=None, style=None, parent=None, source=None): + """Initialize this flowable and associate it with the given `style` and + `parent` (see :class:`Styled`).""" + super().__init__(id=id, style=style, parent=parent, source=source) + self.align = align + self.width = width + + @property + def level(self): + try: + return self.parent.level + except AttributeError: + return 0 + + @property + def section(self): + try: + return self.parent.section + except AttributeError: + return None + + def is_hidden(self, container): + return self.get_style('hide', container) + + def initial_state(self, container): + return FlowableState(self) + + def mark_page_nonempty(self, container): + if not self.get_style('keep_with_next', container): + container.mark_page_nonempty() + + def _width(self, container): + return self.width or self.get_style('width', container) + + def _align(self, container, bordered_width): + align = self.align or self.get_style('horizontal_align', container) + if align == HorizontalAlignment.LEFT: + return + if self._width(container) == FlowableWidth.FILL: + self.warn("horizontal_align has no effect on flowables for which " + "width is set to 'fill'", container) + return + if align == HorizontalAlignment.CENTER: + offset = float(container.width - bordered_width) / 2 + elif align == HorizontalAlignment.RIGHT: + offset = float(container.width - bordered_width) + container.left += offset + + def page_break(self, container, state): + page_break = self.get_style('page_break', container) + break_type = page_break.split()[0] if page_break else None + if page_break: + page_number = container.page.number + next_page_type = 'right' if page_number % 2 == 0 else 'left' + if not container.page._empty or break_type == next_page_type: + if break_type == Break.ANY: + page_break = page_break.replace('any', next_page_type) + chain = container.top_level_container.chain + raise self.break_exception(page_break, chain, state) + + def flow(self, container, last_descender, state=None, space_below=0, + **kwargs): + """Flow this flowable into `container` and return the vertical space + consumed. + + The flowable's contents are preceded by a vertical space with a height + as specified in its style's `space_above` attribute. Similarly, the + flowed content is followed by a vertical space with a height given + by the `space_below` style attribute.""" + top_to_baseline = 0 + state = state or self.initial_state(container) + if state.initial: + self.page_break(container, state) + space_above = self.get_style('space_above', container) + if not container.advance2(float(space_above)): + raise EndOfContainer(state) + top_to_baseline += float(space_above) + self_space_below = float(self.get_style('space_below', container)) + margin_left = self.get_style('margin_left', container) + margin_right = self.get_style('margin_right', container) + reference_id = self.get_id(container.document, create=False) + right = container.width - margin_right + container.register_styled(self, continued=not state.initial) + margin_container = InlineDownExpandingContainer('MARGIN', container, + left=margin_left, + right=right) + initial_before = state.initial + state, width, inner_top_to_baseline, descender = \ + self.flow_inner(margin_container, last_descender, state=state, + space_below=space_below + self_space_below, + **kwargs) + self._align(margin_container, width) + initial_after = state is not None and state.initial + top_to_baseline += inner_top_to_baseline + + annotation = self.get_annotation(container) + if annotation: + height = float(margin_container.height) + margin_container.canvas.annotate(annotation, 0, 0, width, height) + self.mark_page_nonempty(container) + if initial_before and not initial_after: + if reference_id: + self.create_destination(margin_container, True) + + if state is not None: + raise EndOfContainer(state) + + container.advance2(self_space_below, ignore_overflow=True) + container.document.progress(self, container) + return margin_left + width + margin_right, top_to_baseline, descender + + def flow_inner(self, container, last_descender, state=None, space_below=0, + **kwargs): + def border_width(attribute): + border = self.get_style(attribute, container) + return border.width if border else 0 + + draw_top = state.initial + width = self._width(container) + padding = self.get_style('padding', container) + padding_top = self.get_style('padding_top', container) or padding + padding_left = self.get_style('padding_left', container) or padding + padding_right = self.get_style('padding_right', container) or padding + padding_bottom = self.get_style('padding_bottom', container) or padding + padding_h = padding_left + padding_right + border = border_width('border') + border_left = border_width('border_left') or border + border_right = border_width('border_right') or border + border_top = border_width('border_top') or border + border_bottom = border_width('border_bottom') or border + border_h = border_left + border_right + left = padding_left + border_left + right = container.width - padding_right - border_right + padding_border_bottom = float(padding_bottom + border_bottom) + total_space_below = space_below + padding_border_bottom + last_descender = None if border_top else last_descender + if draw_top: + if not container.advance2(border_top + padding_top): + return state, 0, 0, last_descender + pad_cntnr = InlineDownExpandingContainer('PADDING', container, + left=left, right=right) + try: + content_width, first_line_ascender, descender = \ + self.render(pad_cntnr, last_descender, state=state, + space_below=total_space_below, **kwargs) + state = None + assert container.advance2(padding_border_bottom) + except EndOfContainer as eoc: + state = eoc.flowable_state + first_line_ascender = 0 + descender = last_descender + try: + content_width = state.width + except AttributeError: + content_width = pad_cntnr.width + padded_width = content_width + padding_h + bordered_width = padded_width + border_h + if isinstance(width, DimensionBase) or width == FlowableWidth.AUTO: + frame_width = bordered_width + else: + assert width == FlowableWidth.FILL + frame_width = container.width + if state is None or not state.initial: + self.render_frame(container, frame_width, container.height, + top=draw_top, bottom=state is None) + top_to_baseline = border_top + padding_top + first_line_ascender + descender = None if border_bottom else descender + return state, bordered_width, top_to_baseline, descender + + def render_frame(self, container, width, height, top=True, bottom=True): + width, height = float(width), - float(height) + border = self.get_style('border', container) + border_left = self.get_style('border_left', container) or border + border_right = self.get_style('border_right', container) or border + border_top = self.get_style('border_top', container) or border + border_bottom = self.get_style('border_bottom', container) or border + background_color = self.get_style('background_color', container) + fill_style = ShapeStyle(stroke=None, fill_color=background_color) + rect = Rectangle((0, 0), width, height, style=fill_style, parent=self) + rect.render(container) + + def offset_border(coord, stroke, corr_x, corr_y): + return (coord + corr * float(stroke.width) / 2 + for (coord, corr) in zip(coord, (corr_x, corr_y))) + + def render_border(start, end, stroke, corr_x, corr_y): + if stroke is None: + return + Line(offset_border(start, stroke, corr_x, corr_y), + offset_border(end, stroke, corr_x, corr_y), + style=LineStyle(stroke=stroke)).render(container) + + if top: + render_border((0, 0), (width, 0), border_top, 0, -1) + render_border((0, 0), (0, height), border_left, 1, 0) + render_border((width, 0), (width, height), border_right, -1, 0) + if bottom: + render_border((0, height), (width, height), border_bottom, 0, 1) + + def render(self, container, descender, state, space_below=0, **kwargs): + """Renders the flowable's content to `container`, with the flowable's + top edge lining up with the container's cursor. `descender` is the + descender height of the preceding line or `None`.""" + raise NotImplementedError + + +# flowables that do not render anything (but with optional side-effects) + +class DummyFlowable(Flowable): + """A flowable that does not directly place anything on the page. + + Subclasses can produce side-effects to affect the output in another way. + + """ + + style_class = None + + def __init__(self, id=None, parent=None): + super().__init__(id=id, parent=parent) + + def get_style(self, attribute, flowable_target): + return dict(keep_with_next=True, + hide=False)[attribute] + + def flow(self, container, last_descender, state=None, **kwargs): + return 0, 0, last_descender + + +class AnchorFlowable(DummyFlowable): + """A dummy flowable that registers a destination anchor. + + Places a destination for the flowable's ID at the current cursor position. + + """ + + def flow(self, container, last_descender, state=None, **kwargs): + self.create_destination(container, True) + return super().flow(container, last_descender, state=state, **kwargs) + + +class WarnFlowable(DummyFlowable): + """A dummy flowable that emits a warning during the rendering stage. + + Args: + message (str): the warning message to emit + + """ + + def __init__(self, message, parent=None): + super().__init__(parent=parent) + self.message = message + + def flow(self, container, last_descender, state=None, **kwargs): + self.warn(self.message, container) + return super().flow(container, last_descender, state) + + +class SetMetadataFlowable(DummyFlowable): + """A dummy flowable that stores metadata in the document. + + The metadata is passed as keyword arguments. It will be available to other + flowables during the rendering stage. + + """ + + def __init__(self, parent=None, **metadata): + super().__init__(parent=parent) + self.metadata = metadata + + def build_document(self, flowable_target): + flowable_target.document.metadata.update(self.metadata) + + +class SetUserStringFlowable(DummyFlowable): + """Add an entry to the document's :class:`UserStrings`""" + def __init__(self, label, content, parent=None): + super().__init__(parent=parent) + self.label = label + self.content = content + + def build_document(self, flowable_target): + doc = flowable_target.document + doc.set_string(self.label, self.content, user=True) + + +class SetOutOfLineFlowables(DummyFlowable): + def __init__(self, names, flowables, parent=None): + super().__init__(parent=parent) + self.names = names + self.flowables = flowables + + def build_document(self, flowable_target): + for name in self.names: + flowable_target.document.supporting_matter[name] = self.flowables + + +# grouping flowables + +class GroupedFlowablesState(FlowableState): + def __init__(self, groupedflowables, flowables, first_flowable_state=None, + _initial=True, _index=0): + super().__init__(groupedflowables, _initial) + self.flowables = list(flowables) + self.first_flowable_state = first_flowable_state + self._index = _index + + groupedflowables = ReadAliasAttribute('flowable') + + @property + def at_end(self): + return self._index >= len(self.flowables) + + def __copy__(self): + copy_flowables = copy(self.flowables) + copy_first_flowable_state = copy(self.first_flowable_state) + return self.__class__(self.groupedflowables, copy_flowables, + copy_first_flowable_state, _initial=self.initial, + _index=self._index) + + def next_flowable(self): + try: + result = self.flowables[self._index], self.first_flowable_state + except IndexError: + raise StopIteration + self._index += 1 + self.first_flowable_state = None + return result + + def prepend(self, first_flowable_state): + self._index -= 1 + if first_flowable_state: + self.first_flowable_state = first_flowable_state + self.initial = self.initial and first_flowable_state.initial + + +class GroupedFlowablesStyle(FlowableStyle): + width = OverrideDefault('fill') + + title = Attribute(StyledText, None, 'Title to precede the flowables') + flowable_spacing = Attribute(Dimension, 0, 'Spacing between flowables') + same_page = Attribute(Bool, False, "Keep all flowables on a single page," + " if possible.") + + +class GroupedFlowables(Flowable): + """Groups a list of flowables and renders them one below the other. + + Makes sure that a flowable for which `keep_with_next` is enabled is not + seperated from the flowable that follows it. + + Subclasses should implement :meth:`flowables`. + + """ + + style_class = GroupedFlowablesStyle + + def flowables(self, container): + """Generator yielding the :class:`Flowable`\\ s to group""" + raise NotImplementedError + + def initial_state(self, container): + flowables_iter = self.flowables(container) + title_text = self.get_style('title', container) + if title_text: + title = Paragraph(title_text.copy(), style='title') + flowables_iter = chain((title, ), flowables_iter) + return GroupedFlowablesState(self, flowables_iter) + + def mark_page_nonempty(self, container): + pass # only the children place content on the page + + def render(self, container, descender, state, first_line_only=False, + **kwargs): + max_flowable_width = 0 + first_top_to_baseline = None + item_spacing = self.get_style('flowable_spacing', container) + same_page = self.get_style('same_page', container) + empty_page = container.page._empty + initial_state = copy(state) + saved_state = copy(state) + try: + while True: + width, top_to_baseline, descender = \ + self._flow_with_next(state, container, descender, + first_line_only=first_line_only, + **kwargs) + if first_top_to_baseline is None: + first_top_to_baseline = top_to_baseline + max_flowable_width = max(max_flowable_width, width) + if first_line_only: + break + saved_state = copy(state) + container.advance2(item_spacing, ignore_overflow=True) + except LastFlowableException as exc: + descender = exc.last_descender + if container.top_level_container.cursor: # if something was rendered + super().mark_page_nonempty(container) + except KeepWithNextException: + raise EndOfContainer(saved_state) + except (EndOfContainer, PageBreakException) as exc: + if same_page and not empty_page: + raise EndOfContainer(initial_state) + state.prepend(exc.flowable_state) + exc.flowable_state = state + raise exc + return max_flowable_width, first_top_to_baseline or 0, descender + + def _flow_with_next(self, state, container, descender, space_below=0, + **kwargs): + try: + flowable, flowable_state = state.next_flowable() + while flowable.is_hidden(container): + flowable, flowable_state = state.next_flowable() + if flowable_state and flowable_state.completed: + flowable, flowable_state = state.next_flowable() + except StopIteration: + raise LastFlowableException(descender) + flowable.parent = self + with MaybeContainer(container) as maybe_container: + max_flowable_width, top_to_baseline, descender = \ + flowable.flow(maybe_container, descender, state=flowable_state, + space_below=space_below if state.at_end else 0, + **kwargs) + state.initial = False + state.first_flowable_state = None + if flowable.get_style('keep_with_next', container): + item_spacing = self.get_style('flowable_spacing', container) + maybe_container.advance(item_spacing) + try: + width, _, descender = self._flow_with_next(state, container, + descender, + space_below=space_below, + **kwargs) + except EndOfContainer as eoc: + if eoc.flowable_state.initial: + maybe_container.do_place(False) + raise KeepWithNextException + else: + raise eoc + max_flowable_width = max(max_flowable_width, width) + return max_flowable_width, top_to_baseline, descender + + +class KeepWithNextException(Exception): + pass + + +class LastFlowableException(Exception): + def __init__(self, last_descender): + self.last_descender = last_descender + + +class StaticGroupedFlowables(GroupedFlowables): + """Groups a static list of flowables. + + Args: + flowables (iterable[Flowable]): the flowables to group + + """ + + def __init__(self, flowables, align=None, width=None, + id=None, style=None, parent=None, source=None): + super().__init__(align=align, width=width, + id=id, style=style, parent=parent, source=source) + self.children = [] + for flowable in flowables: + self.append(flowable) + + @property + def elements(self): + for child in self.children: + for element in child.elements: + yield element + + def append(self, flowable): + flowable.parent = self + self.children.append(flowable) + + def flowables(self, container): + return iter(self.children) + + def build_document(self, flowable_target): + super().build_document(flowable_target) + for flowable in self.flowables(flowable_target): + flowable.build_document(flowable_target) + + def prepare(self, flowable_target): + super().prepare(flowable_target) + for flowable in self.flowables(flowable_target): + flowable.parent = self + flowable.prepare(flowable_target) + + @property + def empty(self): + return not self.children + + +class LabeledFlowableStyle(FlowableStyle): + label_min_width = Attribute(Dimension, 12*PT, 'Minimum label width') + label_max_width = Attribute(Dimension, 80*PT, 'Maximum label width') + label_spacing = Attribute(Dimension, 3*PT, 'Spacing between a label and ' + 'the labeled flowable') + align_baselines = Attribute(Bool, True, 'Line up the baselines of the ' + 'label and the labeled flowable') + wrap_label = Attribute(Bool, False, 'Wrap the label at `label_max_width`') + + +class LabeledFlowableState(FlowableState): + def __init__(self, flowable, content_flowable_state, _initial=True): + super().__init__(flowable, _initial=_initial) + self.content_flowable_state = content_flowable_state + + def update(self, content_flowable_state=None): + if content_flowable_state: + self.content_flowable_state = content_flowable_state + self.initial = self.initial and self.content_flowable_state.initial + + def __copy__(self): + return self.__class__(self.flowable, copy(self.content_flowable_state), + _initial=self.initial) + + +class LabeledFlowable(Flowable): + """A flowable with a label. + + The flowable and the label are rendered side-by-side. If the label exceeds + the `label_max_width` style attribute value, the flowable is rendered below + the label. + + Args: + label (Flowable): the label for the flowable + flowable (Flowable): the flowable to label + + """ + + style_class = LabeledFlowableStyle + + def __init__(self, label, flowable, id=None, style=None, parent=None): + super().__init__(id=id, style=style, parent=parent) + self.label = label + self.flowable = flowable + label.parent = flowable.parent = self + + def prepare(self, flowable_target): + super().prepare(flowable_target) + self.label.prepare(flowable_target) + self.flowable.prepare(flowable_target) + + def label_width(self, container): + label_min_width = self.get_style('label_min_width', container) + label_max_width = self.get_style('label_max_width', container) + virtual_container = VirtualContainer(container) + label_width, _, _ = self.label.flow(virtual_container, 0) + spillover = (label_width > label_max_width.to_points(container.width) + if label_max_width else True) + return max(label_width, label_min_width), spillover + + def initial_state(self, container): + initial_content_state = self.flowable.initial_state(container) + return LabeledFlowableState(self, initial_content_state) + + def render(self, container, last_descender, state, label_column_width=None, + space_below=0, **kwargs): + def style(name): + return self.get_style(name, container) + + label_min_width = style('label_min_width').to_points(container.width) + label_max_width_ = style('label_max_width') + label_max_width = (label_max_width_.to_points(container.width) + if label_max_width_ else float('+inf')) + align_baselines = style('align_baselines') + + free_label_width, _ = self.label_width(container) + label_spillover = False + label_width = label_column_width or clamp(label_min_width, + free_label_width, + label_max_width) + if label_max_width is None: + label_spillover = True + elif free_label_width > label_width: + if style('wrap_label'): + vcontainer = VirtualContainer(container, width=label_max_width) + wrapped_width, _, _ = self.label.flow(vcontainer, 0) + if wrapped_width < label_max_width: + label_width = wrapped_width + else: + label_width = label_min_width + label_spillover = True + else: + label_spillover = True + + left = label_width + style('label_spacing') + max_label_width = None if label_spillover else label_width + + if align_baselines and (state.initial and not label_spillover): + label_baseline = find_baseline(self.label, container, + last_descender, + width=max_label_width) + content_state_copy = copy(state.content_flowable_state) + content_baseline = find_baseline(self.flowable, container, + last_descender, left=left, + state=content_state_copy) + else: + label_baseline = content_baseline = 0 + top_to_baseline = max(label_baseline, content_baseline) + offset_label = top_to_baseline - label_baseline + offset_content = top_to_baseline - content_baseline + rendering_content = False + try: + with MaybeContainer(container) as maybe_container: + if state.initial: + label_height, label_descender = \ + self._flow_label(maybe_container, last_descender, + max_label_width, offset_label, + space_below) + if label_spillover: + maybe_container.advance(label_height) + last_descender = label_descender + else: # label was placed on previous page + label_height = label_descender = 0 + maybe_container.advance(offset_content) + rendering_content = True + content_height, content_descender, width = \ + self._flow_content(maybe_container, last_descender, state, + left, space_below) + except (ContainerOverflow, EndOfContainer) as eoc: + content_state = eoc.flowable_state if rendering_content else None + state.update(content_state) + raise EndOfContainer(state) + if label_spillover or content_height > label_height: + container.advance(content_height) + descender = content_descender + else: + container.advance(label_height - offset_content) + descender = label_descender + return left + width, label_baseline, descender + + def _flow_label(self, container, last_descender, max_width, y_offset, + space_below): + label_container = \ + InlineDownExpandingContainer('LABEL', container, width=max_width, + advance_parent=False) + label_container.advance(y_offset) + _, _, label_descender = \ + self.label.flow(label_container, last_descender, None, space_below) + return label_container.height, label_descender + + def _flow_content(self, container, last_descender, state, left, + space_below): + content_container = \ + InlineDownExpandingContainer('CONTENT', container, left=left, + advance_parent=False) + width, _, content_descender \ + = self.flowable.flow(content_container, last_descender, + state=state.content_flowable_state, + space_below=space_below) + return content_container.cursor, content_descender, width + + +def find_baseline(flowable, container, last_descender, state=None, **kwargs): + virtual_container = VirtualContainer(container) + inline_ctnr = InlineDownExpandingContainer('DUMMY', virtual_container, + advance_parent=False) + _, baseline, _ = flowable.flow(inline_ctnr, last_descender, + state=state, first_line_only=True) + return baseline + + +class GroupedLabeledFlowables(GroupedFlowables): + """Groups a list of labeled flowables, lining them up. + + + + """ + + def _calculate_label_width(self, container): + max_width = 0 + for flowable in self.flowables(container): + width, splillover = flowable.label_width(container) + if not splillover: + max_width = max(max_width, width) + return max_width + + def render(self, container, descender, state, **kwargs): + if state.initial: + max_label_width = self._calculate_label_width(container) + else: + max_label_width = state.max_label_width + try: + return super().render(container, descender, state=state, + label_column_width=max_label_width, **kwargs) + except EndOfContainer as eoc: + eoc.flowable_state.max_label_width = max_label_width + raise + + +class FloatLocation(OptionSet): + + values = (None, 'here', 'sideways') + + +class FloatStyle(FlowableStyle): + float = Attribute(FloatLocation, None, 'Float the flowable to the top or ' + 'bottom of the current page, to a ' + 'dedicated page, or sideways to a ' + 'dedicated page') + + +class Float(Flowable): + """A flowable that can optionally be placed elsewhere on the page. + + If this flowable's `float` style attribute is set to ``True``, it is not + flowed in line with the surrounding flowables, but it is instead flowed + into another container pointed to by the former's + :attr:`Container.float_space` attribute. + + This is typically used to place figures and tables at the top or bottom of + a page, instead of in between paragraphs. + + """ + + style_class = FloatStyle + + def flow(self, container, last_descender, state=None, **kwargs): + document = container.document + id = self.get_id(document) + float = self.get_style('float', container) + if float == FloatLocation.SIDEWAYS: + if id not in document.registered_sideways_floats: + document.add_sideways_float(self) + state = CompletedFlowableState() + self.page_break(container, state) + return 0, 0, last_descender + elif (float == FloatLocation.HERE and id not in document.floats): + super().flow(container.float_space, None) + document.floats.add(id) + if not container.page.check_overflow(): + raise ReflowRequired + return 0, 0, last_descender + return super().flow(container, last_descender, state=state, **kwargs) + + +class PageBreak(Flowable): + def __init__(self, page_break=Break.ANY): + style = FlowableStyle(page_break=page_break) + super().__init__(style=style) + + def render(self, container, last_descender, state=None, **kwargs): + return 0, 0, last_descender + + +from .paragraph import Paragraph diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__init__.py new file mode 100644 index 000000000..53d048937 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__init__.py @@ -0,0 +1,298 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +""" +Classes for fonts and typefaces. + +""" + +from warnings import warn + +from .style import FontWeight, FontSlant, FontWidth +from ..resource import Resource, ResourceNotFound +from ..util import NotImplementedAttribute +from ..warnings import warn + + +__all__ = ['Font', 'Typeface'] + + +# TODO: provide predefined Font objects for known font filenames? + +class GlyphMetrics(object): + """The metrics for an individual font glyph + + Args: + name (str): + width (float): + bounding_box (4-tuple of floats): + code (int): + + """ + + __slots__ = ['name', 'width', 'bounding_box', 'code'] + + def __init__(self, name, width, bounding_box, code): + self.name = name + self.width = width + self.bounding_box = bounding_box + self.code = code + + +class Font(object): + """A collection of glyphs in a particular style + + This is a base class for classes that parse different font formats. See + :mod:`rinoh.font.type1` and :mod:`rinoh.font.opentype`. + + Args: + filename (str): filename of the font file to load + weight (FontWeight): weight of the font + slant (FontSlant): slant of the font + width (FontWidth): width of the font + + """ + + units_per_em = NotImplementedAttribute() + + encoding = NotImplementedAttribute() + """If no encoding is set for the :class:`Font`, glyphs are addressed by + glyph ID (and thus support more than 256 glyphs).""" + + name = NotImplementedAttribute() + bounding_box = NotImplementedAttribute() + + # font type + fixed_pitch = NotImplementedAttribute() + + @property + def italic(self): + return self.slant != FontSlant.UPRIGHT + + # font metrics in font coordinates + italic_angle = NotImplementedAttribute() + ascender = NotImplementedAttribute() + descender = NotImplementedAttribute() + line_gap = NotImplementedAttribute() + cap_height = NotImplementedAttribute() + x_height = NotImplementedAttribute() + stem_v = NotImplementedAttribute() + + def __init__(self, filename, weight, slant, width): + self.filename = filename + self.weight = FontWeight.validate(weight) + self.slant = FontSlant.validate(slant) + self.width = FontWidth.validate(width) + # font metrics in Postscript points + self.ascender_in_pt = self.ascender / self.units_per_em + self.descender_in_pt = self.descender / self.units_per_em + self.line_gap_in_pt = self.line_gap / self.units_per_em + + def __repr__(self): + return "{}('{}')".format(type(self).__name__, self.name) + + def __hash__(self): + return hash((self.name, self.filename)) + + def get_glyph_metrics(self, char, variant): + """Return the glyph metrics for a particular character + + If the glyph of requested font variant is not present in the font, the + `normal` variant is returned instead. If that is not present either, an + exception is raised. + + Args: + char (str of length 1): the character for which to find the glyph + variant (FontVariant): the variant of the glyph to return + + Returns: + GlyphMetrics: the requested glyph metrics + + Raises: + MissingGlyphException: when the requested glyph is not present in + the font + + """ + raise NotImplementedError + + def get_ligature(self, glyph, successor_glyph): + """Return the ligature to replace the given glyphs + + If no ligature is defined in the font for the given glyphs, return + ``None``. + + Args: + glyph (GlyphMetrics): the first of the glyphs to combine + successor_glyph (GlyphMetrics): the second of the glyphs to combine + + Returns: + GlyphMetrics or None: the ligature to replace the given glyphs + + """ + raise NotImplementedError + + def get_kerning(self, a, b): + """Look up the kerning for two glyphs + + Args: + a (GlyphMetrics): the first of the glyphs + b (GlyphMetrics): the second of the glyphs + + Returns: + float: the kerning value in font units + + """ + raise NotImplementedError + + +class Typeface(Resource, dict): + """A set of fonts that share common design features + + The fonts collected in a typeface differ in weight, width and/or slant. + + Args: + fonts (:class:`Font`): the fonts that make up this typeface + + """ + + resource_type = 'typeface' + + def __new__(cls, name, *fonts): + if not fonts: + return cls.from_string(name) + else: + return super().__new__(cls, name, *fonts) + + def __init__(self, name, *fonts): + self.name = name + for font in fonts: + slants = self.setdefault(font.width, {}) + weights = slants.setdefault(font.slant, {}) + weights[font.weight] = font + + def __str__(self): + return self.name + + @classmethod + def parse_string(cls, name, source): + try: + typeface = super().parse_string(name, source) + except ResourceNotFound as rni: + try: + typeface = google_typeface(name) + except GoogleFontNotFound: + raise rni + return typeface + + @classmethod + def check_type(cls, value): + return isinstance(value, cls) + + @classmethod + def doc_repr(cls, value): + return '``{}``'.format(value.name) + + @classmethod + def doc_format(cls): + return ('the name of a typeface. See :option:`rinoh --list-fonts` ' + 'for a list of the available typefaces.') + + def fonts(self): + """Generator yielding all fonts of this typeface + + Yields: + Font: the next font in this typeface + + """ + for width in sorted(self): + for slant in self[width]: + for weight in sorted(self[width][slant]): + yield self[width][slant][weight] + + def get_font(self, weight=FontWeight.REGULAR, slant=FontSlant.UPRIGHT, + width=FontWidth.NORMAL): + """Return the font matching or closest to the given style + + If a font with the given weight, slant and width is available, return + it. Otherwise, return the font that is closest in style. + + Args: + weight (FontWeight): weight of the font + slant (FontSlant): slant of the font + width (FontWidth): width of the font + + Returns: + Font: the requested font + + """ + def find_closest(attribute, value, available): + nearest = attribute.nearest(value, available) + return nearest, available[nearest] + + available_width, slants = find_closest(FontWidth, width, self) + available_slant, weights = find_closest(FontSlant, slant, slants) + available_weight, font = find_closest(FontWeight, weight, weights) + if ((available_width, available_slant, available_weight) + != (width, slant, weight)): + gv_width = FontWidth.to_name(width) + gv_weigth = FontWeight.to_name(weight) + av_width = FontWidth.to_name(available_width) + av_weight = FontWeight.to_name(available_weight) + warn('{} does not include a {} {} {} font. Falling back to {} {} ' + '{}'.format(self.name, gv_width, gv_weigth, slant, av_width, + av_weight, available_slant)) + return font + + # TODO: return bolder font than given font + #def get_bolder(self, ) + +class TypeFamily(object): + default = None + + def __init__(self, serif=None, sans=None, mono=None, cursive=None, + symbol=None, dingbats=None): + self.serif = serif + self.sans = sans + self.mono = mono + self.cursive = cursive + self.symbol = symbol + self.dingbats = dingbats + + +class LeafGetter(object): + """Descriptor that looks up the value from a given path in the instance + + It is assumed the instance subclasses :class:`dict` which holds parsed data + in a tree structure. + + Args: + *path (str): the components of the path + default: the default value to return if the given path is not present + + """ + def __init__(self, *path, default=None): + self.path = path + self.default = default + + def __get__(self, instance, owner): + try: + leaf = instance + for item in self.path: + leaf = leaf[item] + return leaf + except KeyError: + if self.default: + return self.default + else: + raise + + +class MissingGlyphException(Exception): + """The font does not contain a glyph for the given unicode character""" + + +from .google import google_typeface, GoogleFontNotFound diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..8824913e9 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/google.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/google.cpython-312.pyc new file mode 100644 index 000000000..4782660c8 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/google.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/mapping.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/mapping.cpython-312.pyc new file mode 100644 index 000000000..9864e32de Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/mapping.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/style.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/style.cpython-312.pyc new file mode 100644 index 000000000..eac2b3ddd Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/style.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/type1.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/type1.cpython-312.pyc new file mode 100644 index 000000000..342fc34a5 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/__pycache__/type1.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/google.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/google.py new file mode 100644 index 000000000..8a2061cfe --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/google.py @@ -0,0 +1,116 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +import json +import sys + +from pathlib import Path +from shutil import unpack_archive +from tempfile import TemporaryDirectory +from urllib.error import HTTPError +from urllib.parse import quote +from urllib.request import urlopen + +from appdirs import AppDirs + +from rinoh.font import Typeface +from rinoh.font.opentype import OpenTypeFont + + +__all__ = ['google_fonts'] + + +LIST_URL = 'https://fonts.google.com/download/list?family={}' + +APPDIRS = AppDirs("rinohtype", "opqode") +STORAGE_PATH = Path(APPDIRS.user_data_dir) / 'google_fonts' +STORAGE_PATH.mkdir(parents=True, exist_ok=True) + + +GOOGLE_TYPEFACES = {} + + +def google_typeface(name): + try: + typeface = GOOGLE_TYPEFACES[name] + except KeyError: + fonts = google_fonts(name) + GOOGLE_TYPEFACES[name] = typeface = Typeface(name, *fonts) + return typeface + + +def google_fonts(name): + for item in STORAGE_PATH.iterdir(): + if item.is_dir() and item.name == name: + fonts_path = item + break + else: + fonts_path = STORAGE_PATH / name + sys.stdout.write("\r"); sys.stdout.flush() # clear progress indicator + print("Typeface '{}' is not installed; searching Google Fonts." + .format(name)) + if not try_install_family(name, fonts_path): + raise GoogleFontNotFound(name) + return [OpenTypeFont(font_path) + for font_path in find_static_font_files(fonts_path)] + + +class GoogleFontNotFound(Exception): + def __init__(self, typeface_name): + self.typeface_name = typeface_name + + +def installed_google_fonts_typefaces(): + for item in STORAGE_PATH.iterdir(): + if item.is_dir(): + yield google_typeface(item.name) + + +def find_static_font_files(path): + static = path / 'static' + path = static if static.is_dir() else path + yield from path.glob('**/*.ttf') + yield from path.glob('**/*.otf') + + +def try_install_family(name, family_path): + list_url = LIST_URL.format(quote(name)) + try: + family = json.loads(bytearray(urlopen(list_url).read())[5:]) + except HTTPError as e: + if e.code == 400: + print("-> not found: please check the typeface name (case-sensitive!)") + return False + raise NotImplementedError + family_path.mkdir(parents=True, exist_ok=True) + for entry in family['manifest']['files']: + destination_path = family_path / entry['filename'] + destination_path.write_text(entry['contents']) + for entry in family['manifest']['fileRefs']: + file_path = entry['filename'] + download_path = family_path / file_path + download_path.parent.mkdir(parents=True, exist_ok=True) + print(f"-> downloading {file_path}") + download_file(file_path, entry['url'], family_path) + return True + + +def download_file(filename, url, destination): + try: + with urlopen(url) as response: + download_path = Path(destination) / filename + with download_path.open('wb') as f: + while True: + buffer = response.read(8192) + if not buffer: + break + f.write(buffer) + except HTTPError as e: + if e.code in (404, 403): + return None # not found + raise + return download_path diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/mapping.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/mapping.py new file mode 100644 index 000000000..425fc67ee --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/mapping.py @@ -0,0 +1,3971 @@ + +import csv + +from os import path + +from .. import DATA_PATH + + +# from the Adobe Glyph List 2.0 (September 20, 2002) +UNICODE_TO_GLYPH_NAME = { + 0x0001: ('controlSTX', ), + 0x0002: ('controlSOT', ), + 0x0003: ('controlETX', ), + 0x0004: ('controlEOT', ), + 0x0005: ('controlENQ', ), + 0x0006: ('controlACK', ), + 0x0007: ('controlBEL', ), + 0x0008: ('controlBS', ), + 0x0009: ('controlHT', ), + 0x000A: ('controlLF', ), + 0x000B: ('controlVT', ), + 0x000C: ('controlFF', ), + 0x000D: ('controlCR', ), + 0x000E: ('controlSO', ), + 0x000F: ('controlSI', ), + 0x0010: ('controlDLE', ), + 0x0011: ('controlDC1', ), + 0x0012: ('controlDC2', ), + 0x0013: ('controlDC3', ), + 0x0014: ('controlDC4', ), + 0x0015: ('controlNAK', ), + 0x0016: ('controlSYN', ), + 0x0017: ('controlETB', ), + 0x0018: ('controlCAN', ), + 0x0019: ('controlEM', ), + 0x001A: ('controlSUB', ), + 0x001B: ('controlESC', ), + 0x001C: ('controlFS', ), + 0x001D: ('controlGS', ), + 0x001E: ('controlRS', ), + 0x001F: ('controlUS', ), + 0x0020: ('space', 'spacehackarabic'), + 0x0021: ('exclam', ), + 0x0022: ('quotedbl', ), + 0x0023: ('numbersign', ), + 0x0024: ('dollar', ), + 0x0025: ('percent', ), + 0x0026: ('ampersand', ), + 0x0027: ('quotesingle', ), + 0x0028: ('parenleft', ), + 0x0029: ('parenright', ), + 0x002A: ('asterisk', ), + 0x002B: ('plus', ), + 0x002C: ('comma', ), + 0x002D: ('hyphen', ), + 0x002E: ('period', ), + 0x002F: ('slash', ), + 0x0030: ('zero', ), + 0x0031: ('one', ), + 0x0032: ('two', ), + 0x0033: ('three', ), + 0x0034: ('four', ), + 0x0035: ('five', ), + 0x0036: ('six', ), + 0x0037: ('seven', ), + 0x0038: ('eight', ), + 0x0039: ('nine', ), + 0x003A: ('colon', ), + 0x003B: ('semicolon', ), + 0x003C: ('less', ), + 0x003D: ('equal', ), + 0x003E: ('greater', ), + 0x003F: ('question', ), + 0x0040: ('at', ), + 0x0041: ('A', ), + 0x0042: ('B', ), + 0x0043: ('C', ), + 0x0044: ('D', ), + 0x0045: ('E', ), + 0x0046: ('F', ), + 0x0047: ('G', ), + 0x0048: ('H', ), + 0x0049: ('I', ), + 0x004A: ('J', ), + 0x004B: ('K', ), + 0x004C: ('L', ), + 0x004D: ('M', ), + 0x004E: ('N', ), + 0x004F: ('O', ), + 0x0050: ('P', ), + 0x0051: ('Q', ), + 0x0052: ('R', ), + 0x0053: ('S', ), + 0x0054: ('T', ), + 0x0055: ('U', ), + 0x0056: ('V', ), + 0x0057: ('W', ), + 0x0058: ('X', ), + 0x0059: ('Y', ), + 0x005A: ('Z', ), + 0x005B: ('bracketleft', ), + 0x005C: ('backslash', ), + 0x005D: ('bracketright', ), + 0x005E: ('asciicircum', ), + 0x005F: ('underscore', ), + 0x0060: ('grave', ), + 0x0061: ('a', ), + 0x0062: ('b', ), + 0x0063: ('c', ), + 0x0064: ('d', ), + 0x0065: ('e', ), + 0x0066: ('f', ), + 0x0067: ('g', ), + 0x0068: ('h', ), + 0x0069: ('i', ), + 0x006A: ('j', ), + 0x006B: ('k', ), + 0x006C: ('l', ), + 0x006D: ('m', ), + 0x006E: ('n', ), + 0x006F: ('o', ), + 0x0070: ('p', ), + 0x0071: ('q', ), + 0x0072: ('r', ), + 0x0073: ('s', ), + 0x0074: ('t', ), + 0x0075: ('u', ), + 0x0076: ('v', ), + 0x0077: ('w', ), + 0x0078: ('x', ), + 0x0079: ('y', ), + 0x007A: ('z', ), + 0x007B: ('braceleft', ), + 0x007C: ('bar', 'verticalbar'), + 0x007D: ('braceright', ), + 0x007E: ('asciitilde', ), + 0x007F: ('controlDEL', ), + 0x00A0: ('nbspace', 'nonbreakingspace'), + 0x00A1: ('exclamdown', ), + 0x00A2: ('cent', ), + 0x00A3: ('sterling', ), + 0x00A4: ('currency', ), + 0x00A5: ('yen', ), + 0x00A6: ('brokenbar', ), + 0x00A7: ('section', ), + 0x00A8: ('dieresis', ), + 0x00A9: ('copyright', ), + 0x00AA: ('ordfeminine', ), + 0x00AB: ('guillemotleft', ), + 0x00AC: ('logicalnot', ), + 0x00AD: ('sfthyphen', 'softhyphen'), + 0x00AE: ('registered', ), + 0x00AF: ('macron', 'overscore'), + 0x00B0: ('degree', ), + 0x00B1: ('plusminus', ), + 0x00B2: ('twosuperior', ), + 0x00B3: ('threesuperior', ), + 0x00B4: ('acute', ), + 0x00B5: ('mu', 'mu1'), + 0x00B6: ('paragraph', ), + 0x00B7: ('middot', 'periodcentered'), + 0x00B8: ('cedilla', ), + 0x00B9: ('onesuperior', ), + 0x00BA: ('ordmasculine', ), + 0x00BB: ('guillemotright', ), + 0x00BC: ('onequarter', ), + 0x00BD: ('onehalf', ), + 0x00BE: ('threequarters', ), + 0x00BF: ('questiondown', ), + 0x00C0: ('Agrave', ), + 0x00C1: ('Aacute', ), + 0x00C2: ('Acircumflex', ), + 0x00C3: ('Atilde', ), + 0x00C4: ('Adieresis', ), + 0x00C5: ('Aring', ), + 0x00C6: ('AE', ), + 0x00C7: ('Ccedilla', ), + 0x00C8: ('Egrave', ), + 0x00C9: ('Eacute', ), + 0x00CA: ('Ecircumflex', ), + 0x00CB: ('Edieresis', ), + 0x00CC: ('Igrave', ), + 0x00CD: ('Iacute', ), + 0x00CE: ('Icircumflex', ), + 0x00CF: ('Idieresis', ), + 0x00D0: ('Eth', ), + 0x00D1: ('Ntilde', ), + 0x00D2: ('Ograve', ), + 0x00D3: ('Oacute', ), + 0x00D4: ('Ocircumflex', ), + 0x00D5: ('Otilde', ), + 0x00D6: ('Odieresis', ), + 0x00D7: ('multiply', ), + 0x00D8: ('Oslash', ), + 0x00D9: ('Ugrave', ), + 0x00DA: ('Uacute', ), + 0x00DB: ('Ucircumflex', ), + 0x00DC: ('Udieresis', ), + 0x00DD: ('Yacute', ), + 0x00DE: ('Thorn', ), + 0x00DF: ('germandbls', ), + 0x00E0: ('agrave', ), + 0x00E1: ('aacute', ), + 0x00E2: ('acircumflex', ), + 0x00E3: ('atilde', ), + 0x00E4: ('adieresis', ), + 0x00E5: ('aring', ), + 0x00E6: ('ae', ), + 0x00E7: ('ccedilla', ), + 0x00E8: ('egrave', ), + 0x00E9: ('eacute', ), + 0x00EA: ('ecircumflex', ), + 0x00EB: ('edieresis', ), + 0x00EC: ('igrave', ), + 0x00ED: ('iacute', ), + 0x00EE: ('icircumflex', ), + 0x00EF: ('idieresis', ), + 0x00F0: ('eth', ), + 0x00F1: ('ntilde', ), + 0x00F2: ('ograve', ), + 0x00F3: ('oacute', ), + 0x00F4: ('ocircumflex', ), + 0x00F5: ('otilde', ), + 0x00F6: ('odieresis', ), + 0x00F7: ('divide', ), + 0x00F8: ('oslash', ), + 0x00F9: ('ugrave', ), + 0x00FA: ('uacute', ), + 0x00FB: ('ucircumflex', ), + 0x00FC: ('udieresis', ), + 0x00FD: ('yacute', ), + 0x00FE: ('thorn', ), + 0x00FF: ('ydieresis', ), + 0x0100: ('Amacron', ), + 0x0101: ('amacron', ), + 0x0102: ('Abreve', ), + 0x0103: ('abreve', ), + 0x0104: ('Aogonek', ), + 0x0105: ('aogonek', ), + 0x0106: ('Cacute', ), + 0x0107: ('cacute', ), + 0x0108: ('Ccircumflex', ), + 0x0109: ('ccircumflex', ), + 0x010A: ('Cdot', 'Cdotaccent'), + 0x010B: ('cdot', 'cdotaccent'), + 0x010C: ('Ccaron', ), + 0x010D: ('ccaron', ), + 0x010E: ('Dcaron', ), + 0x010F: ('dcaron', ), + 0x0110: ('Dcroat', 'Dslash'), + 0x0111: ('dcroat', 'dmacron'), + 0x0112: ('Emacron', ), + 0x0113: ('emacron', ), + 0x0114: ('Ebreve', ), + 0x0115: ('ebreve', ), + 0x0116: ('Edot', 'Edotaccent'), + 0x0117: ('edot', 'edotaccent'), + 0x0118: ('Eogonek', ), + 0x0119: ('eogonek', ), + 0x011A: ('Ecaron', ), + 0x011B: ('ecaron', ), + 0x011C: ('Gcircumflex', ), + 0x011D: ('gcircumflex', ), + 0x011E: ('Gbreve', ), + 0x011F: ('gbreve', ), + 0x0120: ('Gdot', 'Gdotaccent'), + 0x0121: ('gdot', 'gdotaccent'), + 0x0122: ('Gcedilla', 'Gcommaaccent'), + 0x0123: ('gcedilla', 'gcommaaccent'), + 0x0124: ('Hcircumflex', ), + 0x0125: ('hcircumflex', ), + 0x0126: ('Hbar', ), + 0x0127: ('hbar', ), + 0x0128: ('Itilde', ), + 0x0129: ('itilde', ), + 0x012A: ('Imacron', ), + 0x012B: ('imacron', ), + 0x012C: ('Ibreve', ), + 0x012D: ('ibreve', ), + 0x012E: ('Iogonek', ), + 0x012F: ('iogonek', ), + 0x0130: ('Idot', 'Idotaccent'), + 0x0131: ('dotlessi', ), + 0x0132: ('IJ', ), + 0x0133: ('ij', ), + 0x0134: ('Jcircumflex', ), + 0x0135: ('jcircumflex', ), + 0x0136: ('Kcedilla', 'Kcommaaccent'), + 0x0137: ('kcedilla', 'kcommaaccent'), + 0x0138: ('kgreenlandic', ), + 0x0139: ('Lacute', ), + 0x013A: ('lacute', ), + 0x013B: ('Lcedilla', 'Lcommaaccent'), + 0x013C: ('lcedilla', 'lcommaaccent'), + 0x013D: ('Lcaron', ), + 0x013E: ('lcaron', ), + 0x013F: ('Ldot', 'Ldotaccent'), + 0x0140: ('ldot', 'ldotaccent'), + 0x0141: ('Lslash', ), + 0x0142: ('lslash', ), + 0x0143: ('Nacute', ), + 0x0144: ('nacute', ), + 0x0145: ('Ncedilla', 'Ncommaaccent'), + 0x0146: ('ncedilla', 'ncommaaccent'), + 0x0147: ('Ncaron', ), + 0x0148: ('ncaron', ), + 0x0149: ('napostrophe', 'quoterightn'), + 0x014A: ('Eng', ), + 0x014B: ('eng', ), + 0x014C: ('Omacron', ), + 0x014D: ('omacron', ), + 0x014E: ('Obreve', ), + 0x014F: ('obreve', ), + 0x0150: ('Odblacute', 'Ohungarumlaut'), + 0x0151: ('odblacute', 'ohungarumlaut'), + 0x0152: ('OE', ), + 0x0153: ('oe', ), + 0x0154: ('Racute', ), + 0x0155: ('racute', ), + 0x0156: ('Rcedilla', 'Rcommaaccent'), + 0x0157: ('rcedilla', 'rcommaaccent'), + 0x0158: ('Rcaron', ), + 0x0159: ('rcaron', ), + 0x015A: ('Sacute', ), + 0x015B: ('sacute', ), + 0x015C: ('Scircumflex', ), + 0x015D: ('scircumflex', ), + 0x015E: ('Scedilla', ), + 0x015F: ('scedilla', ), + 0x0160: ('Scaron', ), + 0x0161: ('scaron', ), + 0x0162: ('Tcedilla', 'Tcommaaccent'), + 0x0163: ('tcedilla', 'tcommaaccent'), + 0x0164: ('Tcaron', ), + 0x0165: ('tcaron', ), + 0x0166: ('Tbar', ), + 0x0167: ('tbar', ), + 0x0168: ('Utilde', ), + 0x0169: ('utilde', ), + 0x016A: ('Umacron', ), + 0x016B: ('umacron', ), + 0x016C: ('Ubreve', ), + 0x016D: ('ubreve', ), + 0x016E: ('Uring', ), + 0x016F: ('uring', ), + 0x0170: ('Udblacute', 'Uhungarumlaut'), + 0x0171: ('udblacute', 'uhungarumlaut'), + 0x0172: ('Uogonek', ), + 0x0173: ('uogonek', ), + 0x0174: ('Wcircumflex', ), + 0x0175: ('wcircumflex', ), + 0x0176: ('Ycircumflex', ), + 0x0177: ('ycircumflex', ), + 0x0178: ('Ydieresis', ), + 0x0179: ('Zacute', ), + 0x017A: ('zacute', ), + 0x017B: ('Zdot', 'Zdotaccent'), + 0x017C: ('zdot', 'zdotaccent'), + 0x017D: ('Zcaron', ), + 0x017E: ('zcaron', ), + 0x017F: ('longs', 'slong'), + 0x0180: ('bstroke', ), + 0x0181: ('Bhook', ), + 0x0182: ('Btopbar', ), + 0x0183: ('btopbar', ), + 0x0184: ('Tonesix', ), + 0x0185: ('tonesix', ), + 0x0186: ('Oopen', ), + 0x0187: ('Chook', ), + 0x0188: ('chook', ), + 0x0189: ('Dafrican', ), + 0x018A: ('Dhook', ), + 0x018B: ('Dtopbar', ), + 0x018C: ('dtopbar', ), + 0x018D: ('deltaturned', ), + 0x018E: ('Ereversed', ), + 0x018F: ('Schwa', ), + 0x0190: ('Eopen', ), + 0x0191: ('Fhook', ), + 0x0192: ('florin', ), + 0x0193: ('Ghook', ), + 0x0194: ('Gammaafrican', ), + 0x0195: ('hv', ), + 0x0196: ('Iotaafrican', ), + 0x0197: ('Istroke', ), + 0x0198: ('Khook', ), + 0x0199: ('khook', ), + 0x019A: ('lbar', ), + 0x019B: ('lambdastroke', ), + 0x019C: ('Mturned', ), + 0x019D: ('Nhookleft', ), + 0x019E: ('nlegrightlong', ), + 0x019F: ('Ocenteredtilde', ), + 0x01A0: ('Ohorn', ), + 0x01A1: ('ohorn', ), + 0x01A2: ('Oi', ), + 0x01A3: ('oi', ), + 0x01A4: ('Phook', ), + 0x01A5: ('phook', ), + 0x01A6: ('yr', ), + 0x01A7: ('Tonetwo', ), + 0x01A8: ('tonetwo', ), + 0x01A9: ('Esh', ), + 0x01AA: ('eshreversedloop', ), + 0x01AB: ('tpalatalhook', ), + 0x01AC: ('Thook', ), + 0x01AD: ('thook', ), + 0x01AE: ('Tretroflexhook', ), + 0x01AF: ('Uhorn', ), + 0x01B0: ('uhorn', ), + 0x01B1: ('Upsilonafrican', ), + 0x01B2: ('Vhook', ), + 0x01B3: ('Yhook', ), + 0x01B4: ('yhook', ), + 0x01B5: ('Zstroke', ), + 0x01B6: ('zstroke', ), + 0x01B7: ('Ezh', ), + 0x01B8: ('Ezhreversed', ), + 0x01B9: ('ezhreversed', ), + 0x01BA: ('ezhtail', ), + 0x01BB: ('twostroke', ), + 0x01BC: ('Tonefive', ), + 0x01BD: ('tonefive', ), + 0x01BE: ('glottalinvertedstroke', ), + 0x01BF: ('wynn', ), + 0x01C0: ('clickdental', ), + 0x01C1: ('clicklateral', ), + 0x01C2: ('clickalveolar', ), + 0x01C3: ('clickretroflex', ), + 0x01C4: ('DZcaron', ), + 0x01C5: ('Dzcaron', ), + 0x01C6: ('dzcaron', ), + 0x01C7: ('LJ', ), + 0x01C8: ('Lj', ), + 0x01C9: ('lj', ), + 0x01CA: ('NJ', ), + 0x01CB: ('Nj', ), + 0x01CC: ('nj', ), + 0x01CD: ('Acaron', ), + 0x01CE: ('acaron', ), + 0x01CF: ('Icaron', ), + 0x01D0: ('icaron', ), + 0x01D1: ('Ocaron', ), + 0x01D2: ('ocaron', ), + 0x01D3: ('Ucaron', ), + 0x01D4: ('ucaron', ), + 0x01D5: ('Udieresismacron', ), + 0x01D6: ('udieresismacron', ), + 0x01D7: ('Udieresisacute', ), + 0x01D8: ('udieresisacute', ), + 0x01D9: ('Udieresiscaron', ), + 0x01DA: ('udieresiscaron', ), + 0x01DB: ('Udieresisgrave', ), + 0x01DC: ('udieresisgrave', ), + 0x01DD: ('eturned', ), + 0x01DE: ('Adieresismacron', ), + 0x01DF: ('adieresismacron', ), + 0x01E0: ('Adotmacron', ), + 0x01E1: ('adotmacron', ), + 0x01E2: ('AEmacron', ), + 0x01E3: ('aemacron', ), + 0x01E4: ('Gstroke', ), + 0x01E5: ('gstroke', ), + 0x01E6: ('Gcaron', ), + 0x01E7: ('gcaron', ), + 0x01E8: ('Kcaron', ), + 0x01E9: ('kcaron', ), + 0x01EA: ('Oogonek', ), + 0x01EB: ('oogonek', ), + 0x01EC: ('Oogonekmacron', ), + 0x01ED: ('oogonekmacron', ), + 0x01EE: ('Ezhcaron', ), + 0x01EF: ('ezhcaron', ), + 0x01F0: ('jcaron', ), + 0x01F1: ('DZ', ), + 0x01F2: ('Dz', ), + 0x01F3: ('dz', ), + 0x01F4: ('Gacute', ), + 0x01F5: ('gacute', ), + 0x01FA: ('Aringacute', ), + 0x01FB: ('aringacute', ), + 0x01FC: ('AEacute', ), + 0x01FD: ('aeacute', ), + 0x01FE: ('Oslashacute', 'Ostrokeacute'), + 0x01FF: ('oslashacute', 'ostrokeacute'), + 0x0200: ('Adblgrave', ), + 0x0201: ('adblgrave', ), + 0x0202: ('Ainvertedbreve', ), + 0x0203: ('ainvertedbreve', ), + 0x0204: ('Edblgrave', ), + 0x0205: ('edblgrave', ), + 0x0206: ('Einvertedbreve', ), + 0x0207: ('einvertedbreve', ), + 0x0208: ('Idblgrave', ), + 0x0209: ('idblgrave', ), + 0x020A: ('Iinvertedbreve', ), + 0x020B: ('iinvertedbreve', ), + 0x020C: ('Odblgrave', ), + 0x020D: ('odblgrave', ), + 0x020E: ('Oinvertedbreve', ), + 0x020F: ('oinvertedbreve', ), + 0x0210: ('Rdblgrave', ), + 0x0211: ('rdblgrave', ), + 0x0212: ('Rinvertedbreve', ), + 0x0213: ('rinvertedbreve', ), + 0x0214: ('Udblgrave', ), + 0x0215: ('udblgrave', ), + 0x0216: ('Uinvertedbreve', ), + 0x0217: ('uinvertedbreve', ), + 0x0218: ('Scommaaccent', ), + 0x0219: ('scommaaccent', ), + 0x0250: ('aturned', ), + 0x0251: ('ascript', ), + 0x0252: ('ascriptturned', ), + 0x0253: ('bhook', ), + 0x0254: ('oopen', ), + 0x0255: ('ccurl', ), + 0x0256: ('dtail', ), + 0x0257: ('dhook', ), + 0x0258: ('ereversed', ), + 0x0259: ('schwa', ), + 0x025A: ('schwahook', ), + 0x025B: ('eopen', ), + 0x025C: ('eopenreversed', ), + 0x025D: ('eopenreversedhook', ), + 0x025E: ('eopenreversedclosed', ), + 0x025F: ('jdotlessstroke', ), + 0x0260: ('ghook', ), + 0x0261: ('gscript', ), + 0x0263: ('gammalatinsmall', ), + 0x0264: ('ramshorn', ), + 0x0265: ('hturned', ), + 0x0266: ('hhook', ), + 0x0267: ('henghook', ), + 0x0268: ('istroke', ), + 0x0269: ('iotalatin', ), + 0x026B: ('lmiddletilde', ), + 0x026C: ('lbelt', ), + 0x026D: ('lhookretroflex', ), + 0x026E: ('lezh', ), + 0x026F: ('mturned', ), + 0x0270: ('mlonglegturned', ), + 0x0271: ('mhook', ), + 0x0272: ('nhookleft', ), + 0x0273: ('nhookretroflex', ), + 0x0275: ('obarred', ), + 0x0277: ('omegalatinclosed', ), + 0x0278: ('philatin', ), + 0x0279: ('rturned', ), + 0x027A: ('rlonglegturned', ), + 0x027B: ('rhookturned', ), + 0x027C: ('rlongleg', ), + 0x027D: ('rhook', ), + 0x027E: ('rfishhook', ), + 0x027F: ('rfishhookreversed', ), + 0x0281: ('Rsmallinverted', ), + 0x0282: ('shook', ), + 0x0283: ('esh', ), + 0x0284: ('dotlessjstrokehook', ), + 0x0285: ('eshsquatreversed', ), + 0x0286: ('eshcurl', ), + 0x0287: ('tturned', ), + 0x0288: ('tretroflexhook', ), + 0x0289: ('ubar', ), + 0x028A: ('upsilonlatin', ), + 0x028B: ('vhook', ), + 0x028C: ('vturned', ), + 0x028D: ('wturned', ), + 0x028E: ('yturned', ), + 0x0290: ('zretroflexhook', ), + 0x0291: ('zcurl', ), + 0x0292: ('ezh', ), + 0x0293: ('ezhcurl', ), + 0x0294: ('glottalstop', ), + 0x0295: ('glottalstopreversed', ), + 0x0296: ('glottalstopinverted', ), + 0x0297: ('cstretched', ), + 0x0298: ('bilabialclick', ), + 0x029A: ('eopenclosed', ), + 0x029B: ('Gsmallhook', ), + 0x029D: ('jcrossedtail', ), + 0x029E: ('kturned', ), + 0x02A0: ('qhook', ), + 0x02A1: ('glottalstopstroke', ), + 0x02A2: ('glottalstopstrokereversed', ), + 0x02A3: ('dzaltone', ), + 0x02A4: ('dezh', ), + 0x02A5: ('dzcurl', ), + 0x02A6: ('ts', ), + 0x02A7: ('tesh', ), + 0x02A8: ('tccurl', ), + 0x02B0: ('hsuperior', ), + 0x02B1: ('hhooksuperior', ), + 0x02B2: ('jsuperior', ), + 0x02B4: ('rturnedsuperior', ), + 0x02B5: ('rhookturnedsuperior', ), + 0x02B6: ('Rsmallinvertedsuperior', ), + 0x02B7: ('wsuperior', ), + 0x02B8: ('ysuperior', ), + 0x02B9: ('primemod', ), + 0x02BA: ('dblprimemod', ), + 0x02BB: ('commaturnedmod', ), + 0x02BC: ('afii57929', 'apostrophemod'), + 0x02BD: ('afii64937', 'commareversedmod'), + 0x02BE: ('ringhalfright', ), + 0x02BF: ('ringhalfleft', ), + 0x02C0: ('glottalstopmod', ), + 0x02C1: ('glottalstopreversedmod', ), + 0x02C2: ('arrowheadleftmod', ), + 0x02C3: ('arrowheadrightmod', ), + 0x02C4: ('arrowheadupmod', ), + 0x02C5: ('arrowheaddownmod', ), + 0x02C6: ('circumflex', ), + 0x02C7: ('caron', ), + 0x02C8: ('verticallinemod', ), + 0x02C9: ('firsttonechinese', ), + 0x02CA: ('secondtonechinese', ), + 0x02CB: ('fourthtonechinese', ), + 0x02CC: ('verticallinelowmod', ), + 0x02CD: ('macronlowmod', ), + 0x02CE: ('gravelowmod', ), + 0x02CF: ('acutelowmod', ), + 0x02D0: ('colontriangularmod', ), + 0x02D1: ('colontriangularhalfmod', ), + 0x02D2: ('ringhalfrightcentered', ), + 0x02D3: ('ringhalfleftcentered', ), + 0x02D4: ('uptackmod', ), + 0x02D5: ('downtackmod', ), + 0x02D6: ('plusmod', ), + 0x02D7: ('minusmod', ), + 0x02D8: ('breve', ), + 0x02D9: ('dotaccent', ), + 0x02DA: ('ring', ), + 0x02DB: ('ogonek', ), + 0x02DC: ('ilde', 'tilde'), + 0x02DD: ('hungarumlaut', ), + 0x02DE: ('rhotichookmod', ), + 0x02E0: ('gammasuperior', ), + 0x02E3: ('xsuperior', ), + 0x02E4: ('glottalstopreversedsuperior', ), + 0x02E5: ('tonebarextrahighmod', ), + 0x02E6: ('tonebarhighmod', ), + 0x02E7: ('tonebarmidmod', ), + 0x02E8: ('tonebarlowmod', ), + 0x02E9: ('tonebarextralowmod', ), + 0x0300: ('gravecmb', 'gravecomb'), + 0x0301: ('acutecmb', 'acutecomb'), + 0x0302: ('circumflexcmb', ), + 0x0303: ('tildecmb', 'tildecomb'), + 0x0304: ('macroncmb', ), + 0x0305: ('overlinecmb', ), + 0x0306: ('brevecmb', ), + 0x0307: ('dotaccentcmb', ), + 0x0308: ('dieresiscmb', ), + 0x0309: ('hookabovecomb', 'hookcmb'), + 0x030A: ('ringcmb', ), + 0x030B: ('hungarumlautcmb', ), + 0x030C: ('caroncmb', ), + 0x030D: ('verticallineabovecmb', ), + 0x030E: ('dblverticallineabovecmb', ), + 0x030F: ('dblgravecmb', ), + 0x0310: ('candrabinducmb', ), + 0x0311: ('breveinvertedcmb', ), + 0x0312: ('commaturnedabovecmb', ), + 0x0313: ('commaabovecmb', ), + 0x0314: ('commareversedabovecmb', ), + 0x0315: ('commaaboverightcmb', ), + 0x0316: ('gravebelowcmb', ), + 0x0317: ('acutebelowcmb', ), + 0x0318: ('lefttackbelowcmb', ), + 0x0319: ('righttackbelowcmb', ), + 0x031A: ('leftangleabovecmb', ), + 0x031B: ('horncmb', ), + 0x031C: ('ringhalfleftbelowcmb', ), + 0x031D: ('uptackbelowcmb', ), + 0x031E: ('downtackbelowcmb', ), + 0x031F: ('plusbelowcmb', ), + 0x0320: ('minusbelowcmb', ), + 0x0321: ('hookpalatalizedbelowcmb', ), + 0x0322: ('hookretroflexbelowcmb', ), + 0x0323: ('dotbelowcmb', 'dotbelowcomb'), + 0x0324: ('dieresisbelowcmb', ), + 0x0325: ('ringbelowcmb', ), + 0x0327: ('cedillacmb', ), + 0x0328: ('ogonekcmb', ), + 0x0329: ('verticallinebelowcmb', ), + 0x032A: ('bridgebelowcmb', ), + 0x032B: ('dblarchinvertedbelowcmb', ), + 0x032C: ('caronbelowcmb', ), + 0x032D: ('circumflexbelowcmb', ), + 0x032E: ('brevebelowcmb', ), + 0x032F: ('breveinvertedbelowcmb', ), + 0x0330: ('tildebelowcmb', ), + 0x0331: ('macronbelowcmb', ), + 0x0332: ('lowlinecmb', ), + 0x0333: ('dbllowlinecmb', ), + 0x0334: ('tildeoverlaycmb', ), + 0x0335: ('strokeshortoverlaycmb', ), + 0x0336: ('strokelongoverlaycmb', ), + 0x0337: ('solidusshortoverlaycmb', ), + 0x0338: ('soliduslongoverlaycmb', ), + 0x0339: ('ringhalfrightbelowcmb', ), + 0x033A: ('bridgeinvertedbelowcmb', ), + 0x033B: ('squarebelowcmb', ), + 0x033C: ('seagullbelowcmb', ), + 0x033D: ('xabovecmb', ), + 0x033E: ('tildeverticalcmb', ), + 0x033F: ('dbloverlinecmb', ), + 0x0340: ('gravetonecmb', ), + 0x0341: ('acutetonecmb', ), + 0x0342: ('perispomenigreekcmb', ), + 0x0343: ('koroniscmb', ), + 0x0344: ('dialytikatonoscmb', ), + 0x0345: ('ypogegrammenigreekcmb', ), + 0x0360: ('tildedoublecmb', ), + 0x0361: ('breveinverteddoublecmb', ), + 0x0374: ('numeralsigngreek', ), + 0x0375: ('numeralsignlowergreek', ), + 0x037A: ('ypogegrammeni', ), + 0x037E: ('questiongreek', ), + 0x0384: ('tonos', ), + 0x0385: ('dialytikatonos', 'dieresistonos'), + 0x0386: ('Alphatonos', ), + 0x0387: ('anoteleia', ), + 0x0388: ('Epsilontonos', ), + 0x0389: ('Etatonos', ), + 0x038A: ('Iotatonos', ), + 0x038C: ('Omicrontonos', ), + 0x038E: ('Upsilontonos', ), + 0x038F: ('Omegatonos', ), + 0x0390: ('iotadieresistonos', ), + 0x0391: ('Alpha', ), + 0x0392: ('Beta', ), + 0x0393: ('Gamma', ), + 0x0394: ('Deltagreek', ), + 0x0395: ('Epsilon', ), + 0x0396: ('Zeta', ), + 0x0397: ('Eta', ), + 0x0398: ('Theta', ), + 0x0399: ('Iota', ), + 0x039A: ('Kappa', ), + 0x039B: ('Lambda', ), + 0x039C: ('Mu', ), + 0x039D: ('Nu', ), + 0x039E: ('Xi', ), + 0x039F: ('Omicron', ), + 0x03A0: ('Pi', ), + 0x03A1: ('Rho', ), + 0x03A3: ('Sigma', ), + 0x03A4: ('Tau', ), + 0x03A5: ('Upsilon', ), + 0x03A6: ('Phi', ), + 0x03A7: ('Chi', ), + 0x03A8: ('Psi', ), + 0x03A9: ('Omegagreek', ), + 0x03AA: ('Iotadieresis', ), + 0x03AB: ('Upsilondieresis', ), + 0x03AC: ('alphatonos', ), + 0x03AD: ('epsilontonos', ), + 0x03AE: ('etatonos', ), + 0x03AF: ('iotatonos', ), + 0x03B0: ('upsilondieresistonos', ), + 0x03B1: ('alpha', ), + 0x03B2: ('beta', ), + 0x03B3: ('gamma', ), + 0x03B4: ('delta', ), + 0x03B5: ('epsilon', ), + 0x03B6: ('zeta', ), + 0x03B7: ('eta', ), + 0x03B8: ('theta', ), + 0x03B9: ('iota', ), + 0x03BA: ('kappa', ), + 0x03BB: ('lambda', ), + 0x03BC: ('mugreek', ), + 0x03BD: ('nu', ), + 0x03BE: ('xi', ), + 0x03BF: ('omicron', ), + 0x03C0: ('pi', ), + 0x03C1: ('rho', ), + 0x03C2: ('sigma1', 'sigmafinal'), + 0x03C3: ('sigma', ), + 0x03C4: ('tau', ), + 0x03C5: ('upsilon', ), + 0x03C6: ('phi', ), + 0x03C7: ('chi', ), + 0x03C8: ('psi', ), + 0x03C9: ('omega', ), + 0x03CA: ('iotadieresis', ), + 0x03CB: ('upsilondieresis', ), + 0x03CC: ('omicrontonos', ), + 0x03CD: ('upsilontonos', ), + 0x03CE: ('omegatonos', ), + 0x03D0: ('betasymbolgreek', ), + 0x03D1: ('theta1', 'thetasymbolgreek'), + 0x03D2: ('Upsilon1', 'Upsilonhooksymbol'), + 0x03D3: ('Upsilonacutehooksymbolgreek', ), + 0x03D4: ('Upsilondieresishooksymbolgreek', ), + 0x03D5: ('phi1', 'phisymbolgreek'), + 0x03D6: ('omega1', 'pisymbolgreek'), + 0x03DA: ('Stigmagreek', ), + 0x03DC: ('Digammagreek', ), + 0x03DE: ('Koppagreek', ), + 0x03E0: ('Sampigreek', ), + 0x03E2: ('Sheicoptic', ), + 0x03E3: ('sheicoptic', ), + 0x03E4: ('Feicoptic', ), + 0x03E5: ('feicoptic', ), + 0x03E6: ('Kheicoptic', ), + 0x03E7: ('kheicoptic', ), + 0x03E8: ('Horicoptic', ), + 0x03E9: ('horicoptic', ), + 0x03EA: ('Gangiacoptic', ), + 0x03EB: ('gangiacoptic', ), + 0x03EC: ('Shimacoptic', ), + 0x03ED: ('shimacoptic', ), + 0x03EE: ('Deicoptic', ), + 0x03EF: ('deicoptic', ), + 0x03F0: ('kappasymbolgreek', ), + 0x03F1: ('rhosymbolgreek', ), + 0x03F2: ('sigmalunatesymbolgreek', ), + 0x03F3: ('yotgreek', ), + 0x0401: ('afii10023', 'Iocyrillic'), + 0x0402: ('afii10051', 'Djecyrillic'), + 0x0403: ('afii10052', 'Gjecyrillic'), + 0x0404: ('afii10053', 'Ecyrillic'), + 0x0405: ('afii10054', 'Dzecyrillic'), + 0x0406: ('afii10055', 'Icyrillic'), + 0x0407: ('afii10056', 'Yicyrillic'), + 0x0408: ('afii10057', 'Jecyrillic'), + 0x0409: ('afii10058', 'Ljecyrillic'), + 0x040A: ('afii10059', 'Njecyrillic'), + 0x040B: ('afii10060', 'Tshecyrillic'), + 0x040C: ('afii10061', 'Kjecyrillic'), + 0x040E: ('afii10062', 'Ushortcyrillic'), + 0x040F: ('afii10145', 'Dzhecyrillic'), + 0x0410: ('Acyrillic', 'afii10017'), + 0x0411: ('afii10018', 'Becyrillic'), + 0x0412: ('afii10019', 'Vecyrillic'), + 0x0413: ('afii10020', 'Gecyrillic'), + 0x0414: ('afii10021', 'Decyrillic'), + 0x0415: ('afii10022', 'Iecyrillic'), + 0x0416: ('afii10024', 'Zhecyrillic'), + 0x0417: ('afii10025', 'Zecyrillic'), + 0x0418: ('afii10026', 'Iicyrillic'), + 0x0419: ('afii10027', 'Iishortcyrillic'), + 0x041A: ('afii10028', 'Kacyrillic'), + 0x041B: ('afii10029', 'Elcyrillic'), + 0x041C: ('afii10030', 'Emcyrillic'), + 0x041D: ('afii10031', 'Encyrillic'), + 0x041E: ('afii10032', 'Ocyrillic'), + 0x041F: ('afii10033', 'Pecyrillic'), + 0x0420: ('afii10034', 'Ercyrillic'), + 0x0421: ('afii10035', 'Escyrillic'), + 0x0422: ('afii10036', 'Tecyrillic'), + 0x0423: ('afii10037', 'Ucyrillic'), + 0x0424: ('afii10038', 'Efcyrillic'), + 0x0425: ('afii10039', 'Khacyrillic'), + 0x0426: ('afii10040', 'Tsecyrillic'), + 0x0427: ('afii10041', 'Checyrillic'), + 0x0428: ('afii10042', 'Shacyrillic'), + 0x0429: ('afii10043', 'Shchacyrillic'), + 0x042A: ('afii10044', 'Hardsigncyrillic'), + 0x042B: ('afii10045', 'Yericyrillic'), + 0x042C: ('afii10046', 'Softsigncyrillic'), + 0x042D: ('afii10047', 'Ereversedcyrillic'), + 0x042E: ('afii10048', 'IUcyrillic'), + 0x042F: ('afii10049', 'IAcyrillic'), + 0x0430: ('acyrillic', 'afii10065'), + 0x0431: ('afii10066', 'becyrillic'), + 0x0432: ('afii10067', 'vecyrillic'), + 0x0433: ('afii10068', 'gecyrillic'), + 0x0434: ('afii10069', 'decyrillic'), + 0x0435: ('afii10070', 'iecyrillic'), + 0x0436: ('afii10072', 'zhecyrillic'), + 0x0437: ('afii10073', 'zecyrillic'), + 0x0438: ('afii10074', 'iicyrillic'), + 0x0439: ('afii10075', 'iishortcyrillic'), + 0x043A: ('afii10076', 'kacyrillic'), + 0x043B: ('afii10077', 'elcyrillic'), + 0x043C: ('afii10078', 'emcyrillic'), + 0x043D: ('afii10079', 'encyrillic'), + 0x043E: ('afii10080', 'ocyrillic'), + 0x043F: ('afii10081', 'pecyrillic'), + 0x0440: ('afii10082', 'ercyrillic'), + 0x0441: ('afii10083', 'escyrillic'), + 0x0442: ('afii10084', 'tecyrillic'), + 0x0443: ('afii10085', 'ucyrillic'), + 0x0444: ('afii10086', 'efcyrillic'), + 0x0445: ('afii10087', 'khacyrillic'), + 0x0446: ('afii10088', 'tsecyrillic'), + 0x0447: ('afii10089', 'checyrillic'), + 0x0448: ('afii10090', 'shacyrillic'), + 0x0449: ('afii10091', 'shchacyrillic'), + 0x044A: ('afii10092', 'hardsigncyrillic'), + 0x044B: ('afii10093', 'yericyrillic'), + 0x044C: ('afii10094', 'softsigncyrillic'), + 0x044D: ('afii10095', 'ereversedcyrillic'), + 0x044E: ('afii10096', 'iucyrillic'), + 0x044F: ('afii10097', 'iacyrillic'), + 0x0451: ('afii10071', 'iocyrillic'), + 0x0452: ('afii10099', 'djecyrillic'), + 0x0453: ('afii10100', 'gjecyrillic'), + 0x0454: ('afii10101', 'ecyrillic'), + 0x0455: ('afii10102', 'dzecyrillic'), + 0x0456: ('afii10103', 'icyrillic'), + 0x0457: ('afii10104', 'yicyrillic'), + 0x0458: ('afii10105', 'jecyrillic'), + 0x0459: ('afii10106', 'ljecyrillic'), + 0x045A: ('afii10107', 'njecyrillic'), + 0x045B: ('afii10108', 'tshecyrillic'), + 0x045C: ('afii10109', 'kjecyrillic'), + 0x045E: ('afii10110', 'ushortcyrillic'), + 0x045F: ('afii10193', 'dzhecyrillic'), + 0x0460: ('Omegacyrillic', ), + 0x0461: ('omegacyrillic', ), + 0x0462: ('afii10146', 'Yatcyrillic'), + 0x0463: ('afii10194', 'yatcyrillic'), + 0x0464: ('Eiotifiedcyrillic', ), + 0x0465: ('eiotifiedcyrillic', ), + 0x0466: ('Yuslittlecyrillic', ), + 0x0467: ('yuslittlecyrillic', ), + 0x0468: ('Yuslittleiotifiedcyrillic', ), + 0x0469: ('yuslittleiotifiedcyrillic', ), + 0x046A: ('Yusbigcyrillic', ), + 0x046B: ('yusbigcyrillic', ), + 0x046C: ('Yusbigiotifiedcyrillic', ), + 0x046D: ('yusbigiotifiedcyrillic', ), + 0x046E: ('Ksicyrillic', ), + 0x046F: ('ksicyrillic', ), + 0x0470: ('Psicyrillic', ), + 0x0471: ('psicyrillic', ), + 0x0472: ('afii10147', 'Fitacyrillic'), + 0x0473: ('afii10195', 'fitacyrillic'), + 0x0474: ('afii10148', 'Izhitsacyrillic'), + 0x0475: ('afii10196', 'izhitsacyrillic'), + 0x0476: ('Izhitsadblgravecyrillic', ), + 0x0477: ('izhitsadblgravecyrillic', ), + 0x0478: ('Ukcyrillic', ), + 0x0479: ('ukcyrillic', ), + 0x047A: ('Omegaroundcyrillic', ), + 0x047B: ('omegaroundcyrillic', ), + 0x047C: ('Omegatitlocyrillic', ), + 0x047D: ('omegatitlocyrillic', ), + 0x047E: ('Otcyrillic', ), + 0x047F: ('otcyrillic', ), + 0x0480: ('Koppacyrillic', ), + 0x0481: ('koppacyrillic', ), + 0x0482: ('thousandcyrillic', ), + 0x0483: ('titlocyrilliccmb', ), + 0x0484: ('palatalizationcyrilliccmb', ), + 0x0485: ('dasiapneumatacyrilliccmb', ), + 0x0486: ('psilipneumatacyrilliccmb', ), + 0x0490: ('afii10050', 'Gheupturncyrillic'), + 0x0491: ('afii10098', 'gheupturncyrillic'), + 0x0492: ('Ghestrokecyrillic', ), + 0x0493: ('ghestrokecyrillic', ), + 0x0494: ('Ghemiddlehookcyrillic', ), + 0x0495: ('ghemiddlehookcyrillic', ), + 0x0496: ('Zhedescendercyrillic', ), + 0x0497: ('zhedescendercyrillic', ), + 0x0498: ('Zedescendercyrillic', ), + 0x0499: ('zedescendercyrillic', ), + 0x049A: ('Kadescendercyrillic', ), + 0x049B: ('kadescendercyrillic', ), + 0x049C: ('Kaverticalstrokecyrillic', ), + 0x049D: ('kaverticalstrokecyrillic', ), + 0x049E: ('Kastrokecyrillic', ), + 0x049F: ('kastrokecyrillic', ), + 0x04A0: ('Kabashkircyrillic', ), + 0x04A1: ('kabashkircyrillic', ), + 0x04A2: ('Endescendercyrillic', ), + 0x04A3: ('endescendercyrillic', ), + 0x04A4: ('Enghecyrillic', ), + 0x04A5: ('enghecyrillic', ), + 0x04A6: ('Pemiddlehookcyrillic', ), + 0x04A7: ('pemiddlehookcyrillic', ), + 0x04A8: ('Haabkhasiancyrillic', ), + 0x04A9: ('haabkhasiancyrillic', ), + 0x04AA: ('Esdescendercyrillic', ), + 0x04AB: ('esdescendercyrillic', ), + 0x04AC: ('Tedescendercyrillic', ), + 0x04AD: ('tedescendercyrillic', ), + 0x04AE: ('Ustraightcyrillic', ), + 0x04AF: ('ustraightcyrillic', ), + 0x04B0: ('Ustraightstrokecyrillic', ), + 0x04B1: ('ustraightstrokecyrillic', ), + 0x04B2: ('Hadescendercyrillic', ), + 0x04B3: ('hadescendercyrillic', ), + 0x04B4: ('Tetsecyrillic', ), + 0x04B5: ('tetsecyrillic', ), + 0x04B6: ('Chedescendercyrillic', ), + 0x04B7: ('chedescendercyrillic', ), + 0x04B8: ('Cheverticalstrokecyrillic', ), + 0x04B9: ('cheverticalstrokecyrillic', ), + 0x04BA: ('Shhacyrillic', ), + 0x04BB: ('shhacyrillic', ), + 0x04BC: ('Cheabkhasiancyrillic', ), + 0x04BD: ('cheabkhasiancyrillic', ), + 0x04BE: ('Chedescenderabkhasiancyrillic', ), + 0x04BF: ('chedescenderabkhasiancyrillic', ), + 0x04C0: ('palochkacyrillic', ), + 0x04C1: ('Zhebrevecyrillic', ), + 0x04C2: ('zhebrevecyrillic', ), + 0x04C3: ('Kahookcyrillic', ), + 0x04C4: ('kahookcyrillic', ), + 0x04C7: ('Enhookcyrillic', ), + 0x04C8: ('enhookcyrillic', ), + 0x04CB: ('Chekhakassiancyrillic', ), + 0x04CC: ('chekhakassiancyrillic', ), + 0x04D0: ('Abrevecyrillic', ), + 0x04D1: ('abrevecyrillic', ), + 0x04D2: ('Adieresiscyrillic', ), + 0x04D3: ('adieresiscyrillic', ), + 0x04D4: ('Aiecyrillic', ), + 0x04D5: ('aiecyrillic', ), + 0x04D6: ('Iebrevecyrillic', ), + 0x04D7: ('iebrevecyrillic', ), + 0x04D8: ('Schwacyrillic', ), + 0x04D9: ('afii10846', 'schwacyrillic'), + 0x04DA: ('Schwadieresiscyrillic', ), + 0x04DB: ('schwadieresiscyrillic', ), + 0x04DC: ('Zhedieresiscyrillic', ), + 0x04DD: ('zhedieresiscyrillic', ), + 0x04DE: ('Zedieresiscyrillic', ), + 0x04DF: ('zedieresiscyrillic', ), + 0x04E0: ('Dzeabkhasiancyrillic', ), + 0x04E1: ('dzeabkhasiancyrillic', ), + 0x04E2: ('Imacroncyrillic', ), + 0x04E3: ('imacroncyrillic', ), + 0x04E4: ('Idieresiscyrillic', ), + 0x04E5: ('idieresiscyrillic', ), + 0x04E6: ('Odieresiscyrillic', ), + 0x04E7: ('odieresiscyrillic', ), + 0x04E8: ('Obarredcyrillic', ), + 0x04E9: ('obarredcyrillic', ), + 0x04EA: ('Obarreddieresiscyrillic', ), + 0x04EB: ('obarreddieresiscyrillic', ), + 0x04EE: ('Umacroncyrillic', ), + 0x04EF: ('umacroncyrillic', ), + 0x04F0: ('Udieresiscyrillic', ), + 0x04F1: ('udieresiscyrillic', ), + 0x04F2: ('Uhungarumlautcyrillic', ), + 0x04F3: ('uhungarumlautcyrillic', ), + 0x04F4: ('Chedieresiscyrillic', ), + 0x04F5: ('chedieresiscyrillic', ), + 0x04F8: ('Yerudieresiscyrillic', ), + 0x04F9: ('yerudieresiscyrillic', ), + 0x0531: ('Aybarmenian', ), + 0x0532: ('Benarmenian', ), + 0x0533: ('Gimarmenian', ), + 0x0534: ('Daarmenian', ), + 0x0535: ('Echarmenian', ), + 0x0536: ('Zaarmenian', ), + 0x0537: ('Eharmenian', ), + 0x0538: ('Etarmenian', ), + 0x0539: ('Toarmenian', ), + 0x053A: ('Zhearmenian', ), + 0x053B: ('Iniarmenian', ), + 0x053C: ('Liwnarmenian', ), + 0x053D: ('Xeharmenian', ), + 0x053E: ('Caarmenian', ), + 0x053F: ('Kenarmenian', ), + 0x0540: ('Hoarmenian', ), + 0x0541: ('Jaarmenian', ), + 0x0542: ('Ghadarmenian', ), + 0x0543: ('Cheharmenian', ), + 0x0544: ('Menarmenian', ), + 0x0545: ('Yiarmenian', ), + 0x0546: ('Nowarmenian', ), + 0x0547: ('Shaarmenian', ), + 0x0548: ('Voarmenian', ), + 0x0549: ('Chaarmenian', ), + 0x054A: ('Peharmenian', ), + 0x054B: ('Jheharmenian', ), + 0x054C: ('Raarmenian', ), + 0x054D: ('Seharmenian', ), + 0x054E: ('Vewarmenian', ), + 0x054F: ('Tiwnarmenian', ), + 0x0550: ('Reharmenian', ), + 0x0551: ('Coarmenian', ), + 0x0552: ('Yiwnarmenian', ), + 0x0553: ('Piwrarmenian', ), + 0x0554: ('Keharmenian', ), + 0x0555: ('Oharmenian', ), + 0x0556: ('Feharmenian', ), + 0x0559: ('ringhalfleftarmenian', ), + 0x055A: ('apostrophearmenian', ), + 0x055B: ('emphasismarkarmenian', ), + 0x055C: ('exclamarmenian', ), + 0x055D: ('commaarmenian', ), + 0x055E: ('questionarmenian', ), + 0x055F: ('abbreviationmarkarmenian', ), + 0x0561: ('aybarmenian', ), + 0x0562: ('benarmenian', ), + 0x0563: ('gimarmenian', ), + 0x0564: ('daarmenian', ), + 0x0565: ('echarmenian', ), + 0x0566: ('zaarmenian', ), + 0x0567: ('eharmenian', ), + 0x0568: ('etarmenian', ), + 0x0569: ('toarmenian', ), + 0x056A: ('zhearmenian', ), + 0x056B: ('iniarmenian', ), + 0x056C: ('liwnarmenian', ), + 0x056D: ('xeharmenian', ), + 0x056E: ('caarmenian', ), + 0x056F: ('kenarmenian', ), + 0x0570: ('hoarmenian', ), + 0x0571: ('jaarmenian', ), + 0x0572: ('ghadarmenian', ), + 0x0573: ('cheharmenian', ), + 0x0574: ('menarmenian', ), + 0x0575: ('yiarmenian', ), + 0x0576: ('nowarmenian', ), + 0x0577: ('shaarmenian', ), + 0x0578: ('voarmenian', ), + 0x0579: ('chaarmenian', ), + 0x057A: ('peharmenian', ), + 0x057B: ('jheharmenian', ), + 0x057C: ('raarmenian', ), + 0x057D: ('seharmenian', ), + 0x057E: ('vewarmenian', ), + 0x057F: ('tiwnarmenian', ), + 0x0580: ('reharmenian', ), + 0x0581: ('coarmenian', ), + 0x0582: ('yiwnarmenian', ), + 0x0583: ('piwrarmenian', ), + 0x0584: ('keharmenian', ), + 0x0585: ('oharmenian', ), + 0x0586: ('feharmenian', ), + 0x0587: ('echyiwnarmenian', ), + 0x0589: ('periodarmenian', ), + 0x0591: ('etnahtafoukhhebrew', 'etnahtafoukhlefthebrew', 'etnahtahebrew', + 'etnahtalefthebrew'), + 0x0592: ('segoltahebrew', ), + 0x0593: ('shalshelethebrew', ), + 0x0594: ('zaqefqatanhebrew', ), + 0x0595: ('zaqefgadolhebrew', ), + 0x0596: ('tipehahebrew', 'tipehalefthebrew'), + 0x0597: ('reviahebrew', 'reviamugrashhebrew'), + 0x0598: ('zarqahebrew', ), + 0x0599: ('pashtahebrew', ), + 0x059A: ('yetivhebrew', ), + 0x059B: ('tevirhebrew', 'tevirlefthebrew'), + 0x059C: ('gereshaccenthebrew', ), + 0x059D: ('gereshmuqdamhebrew', ), + 0x059E: ('gershayimaccenthebrew', ), + 0x059F: ('qarneyparahebrew', ), + 0x05A0: ('telishagedolahebrew', ), + 0x05A1: ('pazerhebrew', ), + 0x05A3: ('munahhebrew', 'munahlefthebrew'), + 0x05A4: ('mahapakhhebrew', 'mahapakhlefthebrew'), + 0x05A5: ('merkhahebrew', 'merkhalefthebrew'), + 0x05A6: ('merkhakefulahebrew', 'merkhakefulalefthebrew'), + 0x05A7: ('dargahebrew', 'dargalefthebrew'), + 0x05A8: ('qadmahebrew', ), + 0x05A9: ('telishaqetanahebrew', ), + 0x05AA: ('yerahbenyomohebrew', 'yerahbenyomolefthebrew'), + 0x05AB: ('olehebrew', ), + 0x05AC: ('iluyhebrew', ), + 0x05AD: ('dehihebrew', ), + 0x05AE: ('zinorhebrew', ), + 0x05AF: ('masoracirclehebrew', ), + 0x05B0: ('afii57799', 'sheva', 'sheva115', 'sheva15', 'sheva22', 'sheva2e', + 'shevahebrew', 'shevanarrowhebrew', 'shevaquarterhebrew', + 'shevawidehebrew'), + 0x05B1: ('afii57801', 'hatafsegol', 'hatafsegol17', 'hatafsegol24', + 'hatafsegol30', 'hatafsegolhebrew', 'hatafsegolnarrowhebrew', + 'hatafsegolquarterhebrew', 'hatafsegolwidehebrew'), + 0x05B2: ('afii57800', 'hatafpatah', 'hatafpatah16', 'hatafpatah23', + 'hatafpatah2f', 'hatafpatahhebrew', 'hatafpatahnarrowhebrew', + 'hatafpatahquarterhebrew', 'hatafpatahwidehebrew'), + 0x05B3: ('afii57802', 'hatafqamats', 'hatafqamats1b', 'hatafqamats28', + 'hatafqamats34', 'hatafqamatshebrew', 'hatafqamatsnarrowhebrew', + 'hatafqamatsquarterhebrew', 'hatafqamatswidehebrew'), + 0x05B4: ('afii57793', 'hiriq', 'hiriq14', 'hiriq21', 'hiriq2d', + 'hiriqhebrew', 'hiriqnarrowhebrew', 'hiriqquarterhebrew', + 'hiriqwidehebrew'), + 0x05B5: ('afii57794', 'tsere', 'tsere12', 'tsere1e', 'tsere2b', + 'tserehebrew', 'tserenarrowhebrew', 'tserequarterhebrew', + 'tserewidehebrew'), + 0x05B6: ('afii57795', 'segol', 'segol13', 'segol1f', 'segol2c', + 'segolhebrew', 'segolnarrowhebrew', 'segolquarterhebrew', + 'segolwidehebrew'), + 0x05B7: ('afii57798', 'patah', 'patah11', 'patah1d', 'patah2a', + 'patahhebrew', 'patahnarrowhebrew', 'patahquarterhebrew', + 'patahwidehebrew'), + 0x05B8: ('afii57797', 'qamats', 'qamats10', 'qamats1a', 'qamats1c', + 'qamats27', 'qamats29', 'qamats33', 'qamatsde', 'qamatshebrew', + 'qamatsnarrowhebrew', 'qamatsqatanhebrew', + 'qamatsqatannarrowhebrew', 'qamatsqatanquarterhebrew', + 'qamatsqatanwidehebrew', 'qamatsquarterhebrew', + 'qamatswidehebrew'), + 0x05B9: ('afii57806', 'holam', 'holam19', 'holam26', 'holam32', + 'holamhebrew', 'holamnarrowhebrew', 'holamquarterhebrew', + 'holamwidehebrew'), + 0x05BB: ('afii57796', 'qubuts', 'qubuts18', 'qubuts25', 'qubuts31', + 'qubutshebrew', 'qubutsnarrowhebrew', 'qubutsquarterhebrew', + 'qubutswidehebrew'), + 0x05BC: ('afii57807', 'dagesh', 'dageshhebrew'), + 0x05BD: ('afii57839', 'siluqhebrew', 'siluqlefthebrew'), + 0x05BE: ('afii57645', 'maqafhebrew'), + 0x05BF: ('afii57841', 'rafe', 'rafehebrew'), + 0x05C0: ('afii57842', 'paseqhebrew'), + 0x05C1: ('afii57804', 'shindothebrew'), + 0x05C2: ('afii57803', 'sindothebrew'), + 0x05C3: ('afii57658', 'sofpasuqhebrew'), + 0x05C4: ('upperdothebrew', ), + 0x05D0: ('afii57664', 'alef', 'alefhebrew'), + 0x05D1: ('afii57665', 'bet', 'bethebrew'), + 0x05D2: ('afii57666', 'gimel', 'gimelhebrew'), + 0x05D3: ('afii57667', 'dalet', 'dalethebrew'), +# 0x05D3 05B0: 'daletsheva', +# 0x05D3 05B0: 'daletshevahebrew', +# 0x05D3 05B1: 'dalethatafsegol', +# 0x05D3 05B1: 'dalethatafsegolhebrew', +# 0x05D3 05B2: 'dalethatafpatah', +# 0x05D3 05B2: 'dalethatafpatahhebrew', +# 0x05D3 05B4: 'dalethiriq', +# 0x05D3 05B4: 'dalethiriqhebrew', +# 0x05D3 05B5: 'dalettsere', +# 0x05D3 05B5: 'dalettserehebrew', +# 0x05D3 05B6: 'daletsegol', +# 0x05D3 05B6: 'daletsegolhebrew', +# 0x05D3 05B7: 'daletpatah', +# 0x05D3 05B7: 'daletpatahhebrew', +# 0x05D3 05B8: 'daletqamats', +# 0x05D3 05B8: 'daletqamatshebrew', +# 0x05D3 05B9: 'daletholam', +# 0x05D3 05B9: 'daletholamhebrew', +# 0x05D3 05BB: 'daletqubuts', +# 0x05D3 05BB: 'daletqubutshebrew', + 0x05D4: ('afii57668', 'he', 'hehebrew'), + 0x05D5: ('afii57669', 'vav', 'vavhebrew'), + 0x05D6: ('afii57670', 'zayin', 'zayinhebrew'), + 0x05D7: ('afii57671', 'het', 'hethebrew'), + 0x05D8: ('afii57672', 'tet', 'tethebrew'), + 0x05D9: ('afii57673', 'yod', 'yodhebrew'), + 0x05DA: ('afii57674', 'finalkaf', 'finalkafhebrew'), +# 0x05DA 05B0: 'finalkafsheva', +# 0x05DA 05B0: 'finalkafshevahebrew', +# 0x05DA 05B8: 'finalkafqamats', +# 0x05DA 05B8: 'finalkafqamatshebrew', + 0x05DB: ('afii57675', 'kaf', 'kafhebrew'), + 0x05DC: ('afii57676', 'lamed', 'lamedhebrew'), +# 0x05DC 05B9 05BC: 'lamedholamdagesh', +# 0x05DC 05B9 05BC: 'lamedholamdageshhebrew', +# 0x05DC 05B9: 'lamedholam', +# 0x05DC 05B9: 'lamedholamhebrew', + 0x05DD: ('afii57677', 'finalmem', 'finalmemhebrew'), + 0x05DE: ('afii57678', 'mem', 'memhebrew'), + 0x05DF: ('afii57679', 'finalnun', 'finalnunhebrew'), + 0x05E0: ('afii57680', 'nun', 'nunhebrew'), + 0x05E1: ('afii57681', 'samekh', 'samekhhebrew'), + 0x05E2: ('afii57682', 'ayin', 'ayinhebrew'), + 0x05E3: ('afii57683', 'finalpe', 'finalpehebrew'), + 0x05E4: ('afii57684', 'pe', 'pehebrew'), + 0x05E5: ('afii57685', 'finaltsadi', 'finaltsadihebrew'), + 0x05E6: ('afii57686', 'tsadi', 'tsadihebrew'), + 0x05E7: ('afii57687', 'qof', 'qofhebrew'), +# 0x05E7 05B0: 'qofsheva', +# 0x05E7 05B0: 'qofshevahebrew', +# 0x05E7 05B1: 'qofhatafsegol', +# 0x05E7 05B1: 'qofhatafsegolhebrew', +# 0x05E7 05B2: 'qofhatafpatah', +# 0x05E7 05B2: 'qofhatafpatahhebrew', +# 0x05E7 05B4: 'qofhiriq', +# 0x05E7 05B4: 'qofhiriqhebrew', +# 0x05E7 05B5: 'qoftsere', +# 0x05E7 05B5: 'qoftserehebrew', +# 0x05E7 05B6: 'qofsegol', +# 0x05E7 05B6: 'qofsegolhebrew', +# 0x05E7 05B7: 'qofpatah', +# 0x05E7 05B7: 'qofpatahhebrew', +# 0x05E7 05B8: 'qofqamats', +# 0x05E7 05B8: 'qofqamatshebrew', +# 0x05E7 05B9: 'qofholam', +# 0x05E7 05B9: 'qofholamhebrew', +# 0x05E7 05BB: 'qofqubuts', +# 0x05E7 05BB: 'qofqubutshebrew', + 0x05E8: ('afii57688', 'resh', 'reshhebrew'), +# 0x05E8 05B0: 'reshsheva', +# 0x05E8 05B0: 'reshshevahebrew', +# 0x05E8 05B1: 'reshhatafsegol', +# 0x05E8 05B1: 'reshhatafsegolhebrew', +# 0x05E8 05B2: 'reshhatafpatah', +# 0x05E8 05B2: 'reshhatafpatahhebrew', +# 0x05E8 05B4: 'reshhiriq', +# 0x05E8 05B4: 'reshhiriqhebrew', +# 0x05E8 05B5: 'reshtsere', +# 0x05E8 05B5: 'reshtserehebrew', +# 0x05E8 05B6: 'reshsegol', +# 0x05E8 05B6: 'reshsegolhebrew', +# 0x05E8 05B7: 'reshpatah', +# 0x05E8 05B7: 'reshpatahhebrew', +# 0x05E8 05B8: 'reshqamats', +# 0x05E8 05B8: 'reshqamatshebrew', +# 0x05E8 05B9: 'reshholam', +# 0x05E8 05B9: 'reshholamhebrew', +# 0x05E8 05BB: 'reshqubuts', +# 0x05E8 05BB: 'reshqubutshebrew', + 0x05E9: ('afii57689', 'shin', 'shinhebrew'), + 0x05EA: ('afii57690', 'tav', 'tavhebrew'), + 0x05F0: ('afii57716', 'vavvavhebrew'), + 0x05F1: ('afii57717', 'vavyodhebrew'), + 0x05F2: ('afii57718', 'yodyodhebrew'), + 0x05F3: ('gereshhebrew', ), + 0x05F4: ('gershayimhebrew', ), + 0x060C: ('afii57388', 'commaarabic'), + 0x061B: ('afii57403', 'semicolonarabic'), + 0x061F: ('afii57407', 'questionarabic'), + 0x0621: ('afii57409', 'hamzaarabic', 'hamzalowarabic'), +# 0x0621 064B: 'hamzafathatanarabic', +# 0x0621 064C: 'hamzadammatanarabic', +# 0x0621 064D: 'hamzalowkasratanarabic', +# 0x0621 064E: 'hamzafathaarabic', +# 0x0621 064F: 'hamzadammaarabic', +# 0x0621 0650: 'hamzalowkasraarabic', +# 0x0621 0652: 'hamzasukunarabic', + 0x0622: ('afii57410', 'alefmaddaabovearabic'), + 0x0623: ('afii57411', 'alefhamzaabovearabic'), + 0x0624: ('afii57412', 'wawhamzaabovearabic'), + 0x0625: ('afii57413', 'alefhamzabelowarabic'), + 0x0626: ('afii57414', 'yehhamzaabovearabic'), + 0x0627: ('afii57415', 'alefarabic'), + 0x0628: ('afii57416', 'beharabic'), + 0x0629: ('afii57417', 'tehmarbutaarabic'), + 0x062A: ('afii57418', 'teharabic'), + 0x062B: ('afii57419', 'theharabic'), + 0x062C: ('afii57420', 'jeemarabic'), + 0x062D: ('afii57421', 'haharabic'), + 0x062E: ('afii57422', 'khaharabic'), + 0x062F: ('afii57423', 'dalarabic'), + 0x0630: ('afii57424', 'thalarabic'), + 0x0631: ('afii57425', 'reharabic'), +# 0x0631 FEF3 FE8E 0644: 'rehyehaleflamarabic', + 0x0632: ('afii57426', 'zainarabic'), + 0x0633: ('afii57427', 'seenarabic'), + 0x0634: ('afii57428', 'sheenarabic'), + 0x0635: ('afii57429', 'sadarabic'), + 0x0636: ('afii57430', 'dadarabic'), + 0x0637: ('afii57431', 'taharabic'), + 0x0638: ('afii57432', 'zaharabic'), + 0x0639: ('afii57433', 'ainarabic'), + 0x063A: ('afii57434', 'ghainarabic'), + 0x0640: ('afii57440', 'kashidaautoarabic', 'kashidaautonosidebearingarabic', + 'tatweelarabic'), + 0x0641: ('afii57441', 'feharabic'), + 0x0642: ('afii57442', 'qafarabic'), + 0x0643: ('afii57443', 'kafarabic'), + 0x0644: ('afii57444', 'lamarabic'), + 0x0645: ('afii57445', 'meemarabic'), + 0x0646: ('afii57446', 'noonarabic'), + 0x0647: ('afii57470', 'heharabic'), + 0x0648: ('afii57448', 'wawarabic'), + 0x0649: ('afii57449', 'alefmaksuraarabic'), + 0x064A: ('afii57450', 'yeharabic'), + 0x064B: ('afii57451', 'fathatanarabic'), + 0x064C: ('afii57452', 'dammatanaltonearabic', 'dammatanarabic'), + 0x064D: ('afii57453', 'kasratanarabic'), + 0x064E: ('afii57454', 'fathaarabic', 'fathalowarabic'), + 0x064F: ('afii57455', 'dammaarabic', 'dammalowarabic'), + 0x0650: ('afii57456', 'kasraarabic'), + 0x0651: ('afii57457', 'shaddaarabic'), +# 0x0651 064B: 'shaddafathatanarabic', + 0x0652: ('afii57458', 'sukunarabic'), + 0x0660: ('afii57392', 'zeroarabic', 'zerohackarabic'), + 0x0661: ('afii57393', 'onearabic', 'onehackarabic'), + 0x0662: ('afii57394', 'twoarabic', 'twohackarabic'), + 0x0663: ('afii57395', 'threearabic', 'threehackarabic'), + 0x0664: ('afii57396', 'fourarabic', 'fourhackarabic'), + 0x0665: ('afii57397', 'fivearabic', 'fivehackarabic'), + 0x0666: ('afii57398', 'sixarabic', 'sixhackarabic'), + 0x0667: ('afii57399', 'sevenarabic', 'sevenhackarabic'), + 0x0668: ('afii57400', 'eightarabic', 'eighthackarabic'), + 0x0669: ('afii57401', 'ninearabic', 'ninehackarabic'), + 0x066A: ('afii57381', 'percentarabic'), + 0x066B: ('decimalseparatorarabic', 'decimalseparatorpersian'), + 0x066C: ('thousandsseparatorarabic', 'thousandsseparatorpersian'), + 0x066D: ('afii63167', 'asteriskaltonearabic', 'asteriskarabic'), + 0x0679: ('afii57511', 'tteharabic'), + 0x067E: ('afii57506', 'peharabic'), + 0x0686: ('afii57507', 'tcheharabic'), + 0x0688: ('afii57512', 'ddalarabic'), + 0x0691: ('afii57513', 'rreharabic'), + 0x0698: ('afii57508', 'jeharabic'), + 0x06A4: ('afii57505', 'veharabic'), + 0x06AF: ('afii57509', 'gafarabic'), + 0x06BA: ('afii57514', 'noonghunnaarabic'), + 0x06C1: ('haaltonearabic', 'hehaltonearabic'), + 0x06D1: ('yehthreedotsbelowarabic', ), + 0x06D2: ('afii57519', 'yehbarreearabic'), + 0x06D5: ('afii57534', ), + 0x06F0: ('zeropersian', ), + 0x06F1: ('onepersian', ), + 0x06F2: ('twopersian', ), + 0x06F3: ('threepersian', ), + 0x06F4: ('fourpersian', ), + 0x06F5: ('fivepersian', ), + 0x06F6: ('sixpersian', ), + 0x06F7: ('sevenpersian', ), + 0x06F8: ('eightpersian', ), + 0x06F9: ('ninepersian', ), + 0x0901: ('candrabindudeva', ), + 0x0902: ('anusvaradeva', ), + 0x0903: ('visargadeva', ), + 0x0905: ('adeva', ), + 0x0906: ('aadeva', ), + 0x0907: ('ideva', ), + 0x0908: ('iideva', ), + 0x0909: ('udeva', ), + 0x090A: ('uudeva', ), + 0x090B: ('rvocalicdeva', ), + 0x090C: ('lvocalicdeva', ), + 0x090D: ('ecandradeva', ), + 0x090E: ('eshortdeva', ), + 0x090F: ('edeva', ), + 0x0910: ('aideva', ), + 0x0911: ('ocandradeva', ), + 0x0912: ('oshortdeva', ), + 0x0913: ('odeva', ), + 0x0914: ('audeva', ), + 0x0915: ('kadeva', ), + 0x0916: ('khadeva', ), + 0x0917: ('gadeva', ), + 0x0918: ('ghadeva', ), + 0x0919: ('ngadeva', ), + 0x091A: ('cadeva', ), + 0x091B: ('chadeva', ), + 0x091C: ('jadeva', ), + 0x091D: ('jhadeva', ), + 0x091E: ('nyadeva', ), + 0x091F: ('ttadeva', ), + 0x0920: ('tthadeva', ), + 0x0921: ('ddadeva', ), + 0x0922: ('ddhadeva', ), + 0x0923: ('nnadeva', ), + 0x0924: ('tadeva', ), + 0x0925: ('thadeva', ), + 0x0926: ('dadeva', ), + 0x0927: ('dhadeva', ), + 0x0928: ('nadeva', ), + 0x0929: ('nnnadeva', ), + 0x092A: ('padeva', ), + 0x092B: ('phadeva', ), + 0x092C: ('badeva', ), + 0x092D: ('bhadeva', ), + 0x092E: ('madeva', ), + 0x092F: ('yadeva', ), + 0x0930: ('radeva', ), + 0x0931: ('rradeva', ), + 0x0932: ('ladeva', ), + 0x0933: ('lladeva', ), + 0x0934: ('llladeva', ), + 0x0935: ('vadeva', ), + 0x0936: ('shadeva', ), + 0x0937: ('ssadeva', ), + 0x0938: ('sadeva', ), + 0x0939: ('hadeva', ), + 0x093C: ('nuktadeva', ), + 0x093D: ('avagrahadeva', ), + 0x093E: ('aavowelsigndeva', ), + 0x093F: ('ivowelsigndeva', ), + 0x0940: ('iivowelsigndeva', ), + 0x0941: ('uvowelsigndeva', ), + 0x0942: ('uuvowelsigndeva', ), + 0x0943: ('rvocalicvowelsigndeva', ), + 0x0944: ('rrvocalicvowelsigndeva', ), + 0x0945: ('ecandravowelsigndeva', ), + 0x0946: ('eshortvowelsigndeva', ), + 0x0947: ('evowelsigndeva', ), + 0x0948: ('aivowelsigndeva', ), + 0x0949: ('ocandravowelsigndeva', ), + 0x094A: ('oshortvowelsigndeva', ), + 0x094B: ('ovowelsigndeva', ), + 0x094C: ('auvowelsigndeva', ), + 0x094D: ('viramadeva', ), + 0x0950: ('omdeva', ), + 0x0951: ('udattadeva', ), + 0x0952: ('anudattadeva', ), + 0x0953: ('gravedeva', ), + 0x0954: ('acutedeva', ), + 0x0958: ('qadeva', ), + 0x0959: ('khhadeva', ), + 0x095A: ('ghhadeva', ), + 0x095B: ('zadeva', ), + 0x095C: ('dddhadeva', ), + 0x095D: ('rhadeva', ), + 0x095E: ('fadeva', ), + 0x095F: ('yyadeva', ), + 0x0960: ('rrvocalicdeva', ), + 0x0961: ('llvocalicdeva', ), + 0x0962: ('lvocalicvowelsigndeva', ), + 0x0963: ('llvocalicvowelsigndeva', ), + 0x0964: ('danda', ), + 0x0965: ('dbldanda', ), + 0x0966: ('zerodeva', ), + 0x0967: ('onedeva', ), + 0x0968: ('twodeva', ), + 0x0969: ('threedeva', ), + 0x096A: ('fourdeva', ), + 0x096B: ('fivedeva', ), + 0x096C: ('sixdeva', ), + 0x096D: ('sevendeva', ), + 0x096E: ('eightdeva', ), + 0x096F: ('ninedeva', ), + 0x0970: ('abbreviationsigndeva', ), + 0x0981: ('candrabindubengali', ), + 0x0982: ('anusvarabengali', ), + 0x0983: ('visargabengali', ), + 0x0985: ('abengali', ), + 0x0986: ('aabengali', ), + 0x0987: ('ibengali', ), + 0x0988: ('iibengali', ), + 0x0989: ('ubengali', ), + 0x098A: ('uubengali', ), + 0x098B: ('rvocalicbengali', ), + 0x098C: ('lvocalicbengali', ), + 0x098F: ('ebengali', ), + 0x0990: ('aibengali', ), + 0x0993: ('obengali', ), + 0x0994: ('aubengali', ), + 0x0995: ('kabengali', ), + 0x0996: ('khabengali', ), + 0x0997: ('gabengali', ), + 0x0998: ('ghabengali', ), + 0x0999: ('ngabengali', ), + 0x099A: ('cabengali', ), + 0x099B: ('chabengali', ), + 0x099C: ('jabengali', ), + 0x099D: ('jhabengali', ), + 0x099E: ('nyabengali', ), + 0x099F: ('ttabengali', ), + 0x09A0: ('tthabengali', ), + 0x09A1: ('ddabengali', ), + 0x09A2: ('ddhabengali', ), + 0x09A3: ('nnabengali', ), + 0x09A4: ('tabengali', ), + 0x09A5: ('thabengali', ), + 0x09A6: ('dabengali', ), + 0x09A7: ('dhabengali', ), + 0x09A8: ('nabengali', ), + 0x09AA: ('pabengali', ), + 0x09AB: ('phabengali', ), + 0x09AC: ('babengali', ), + 0x09AD: ('bhabengali', ), + 0x09AE: ('mabengali', ), + 0x09AF: ('yabengali', ), + 0x09B0: ('rabengali', ), + 0x09B2: ('labengali', ), + 0x09B6: ('shabengali', ), + 0x09B7: ('ssabengali', ), + 0x09B8: ('sabengali', ), + 0x09B9: ('habengali', ), + 0x09BC: ('nuktabengali', ), + 0x09BE: ('aavowelsignbengali', ), + 0x09BF: ('ivowelsignbengali', ), + 0x09C0: ('iivowelsignbengali', ), + 0x09C1: ('uvowelsignbengali', ), + 0x09C2: ('uuvowelsignbengali', ), + 0x09C3: ('rvocalicvowelsignbengali', ), + 0x09C4: ('rrvocalicvowelsignbengali', ), + 0x09C7: ('evowelsignbengali', ), + 0x09C8: ('aivowelsignbengali', ), + 0x09CB: ('ovowelsignbengali', ), + 0x09CC: ('auvowelsignbengali', ), + 0x09CD: ('viramabengali', ), + 0x09D7: ('aulengthmarkbengali', ), + 0x09DC: ('rrabengali', ), + 0x09DD: ('rhabengali', ), + 0x09DF: ('yyabengali', ), + 0x09E0: ('rrvocalicbengali', ), + 0x09E1: ('llvocalicbengali', ), + 0x09E2: ('lvocalicvowelsignbengali', ), + 0x09E3: ('llvocalicvowelsignbengali', ), + 0x09E6: ('zerobengali', ), + 0x09E7: ('onebengali', ), + 0x09E8: ('twobengali', ), + 0x09E9: ('threebengali', ), + 0x09EA: ('fourbengali', ), + 0x09EB: ('fivebengali', ), + 0x09EC: ('sixbengali', ), + 0x09ED: ('sevenbengali', ), + 0x09EE: ('eightbengali', ), + 0x09EF: ('ninebengali', ), + 0x09F0: ('ramiddlediagonalbengali', ), + 0x09F1: ('ralowerdiagonalbengali', ), + 0x09F2: ('rupeemarkbengali', ), + 0x09F3: ('rupeesignbengali', ), + 0x09F4: ('onenumeratorbengali', ), + 0x09F5: ('twonumeratorbengali', ), + 0x09F6: ('threenumeratorbengali', ), + 0x09F7: ('fournumeratorbengali', ), + 0x09F8: ('denominatorminusonenumeratorbengali', ), + 0x09F9: ('sixteencurrencydenominatorbengali', ), + 0x09FA: ('issharbengali', ), + 0x0A02: ('bindigurmukhi', ), + 0x0A05: ('agurmukhi', ), + 0x0A06: ('aagurmukhi', ), + 0x0A07: ('igurmukhi', ), + 0x0A08: ('iigurmukhi', ), + 0x0A09: ('ugurmukhi', ), + 0x0A0A: ('uugurmukhi', ), + 0x0A0F: ('eegurmukhi', ), + 0x0A10: ('aigurmukhi', ), + 0x0A13: ('oogurmukhi', ), + 0x0A14: ('augurmukhi', ), + 0x0A15: ('kagurmukhi', ), + 0x0A16: ('khagurmukhi', ), + 0x0A17: ('gagurmukhi', ), + 0x0A18: ('ghagurmukhi', ), + 0x0A19: ('ngagurmukhi', ), + 0x0A1A: ('cagurmukhi', ), + 0x0A1B: ('chagurmukhi', ), + 0x0A1C: ('jagurmukhi', ), + 0x0A1D: ('jhagurmukhi', ), + 0x0A1E: ('nyagurmukhi', ), + 0x0A1F: ('ttagurmukhi', ), + 0x0A20: ('tthagurmukhi', ), + 0x0A21: ('ddagurmukhi', ), + 0x0A22: ('ddhagurmukhi', ), + 0x0A23: ('nnagurmukhi', ), + 0x0A24: ('tagurmukhi', ), + 0x0A25: ('thagurmukhi', ), + 0x0A26: ('dagurmukhi', ), + 0x0A27: ('dhagurmukhi', ), + 0x0A28: ('nagurmukhi', ), + 0x0A2A: ('pagurmukhi', ), + 0x0A2B: ('phagurmukhi', ), + 0x0A2C: ('bagurmukhi', ), + 0x0A2D: ('bhagurmukhi', ), + 0x0A2E: ('magurmukhi', ), + 0x0A2F: ('yagurmukhi', ), + 0x0A30: ('ragurmukhi', ), + 0x0A32: ('lagurmukhi', ), + 0x0A35: ('vagurmukhi', ), + 0x0A36: ('shagurmukhi', ), + 0x0A38: ('sagurmukhi', ), + 0x0A39: ('hagurmukhi', ), + 0x0A3C: ('nuktagurmukhi', ), + 0x0A3E: ('aamatragurmukhi', ), + 0x0A3F: ('imatragurmukhi', ), + 0x0A40: ('iimatragurmukhi', ), + 0x0A41: ('umatragurmukhi', ), + 0x0A42: ('uumatragurmukhi', ), + 0x0A47: ('eematragurmukhi', ), + 0x0A48: ('aimatragurmukhi', ), + 0x0A4B: ('oomatragurmukhi', ), + 0x0A4C: ('aumatragurmukhi', ), + 0x0A4D: ('halantgurmukhi', ), + 0x0A59: ('khhagurmukhi', ), + 0x0A5A: ('ghhagurmukhi', ), + 0x0A5B: ('zagurmukhi', ), + 0x0A5C: ('rragurmukhi', ), + 0x0A5E: ('fagurmukhi', ), + 0x0A66: ('zerogurmukhi', ), + 0x0A67: ('onegurmukhi', ), + 0x0A68: ('twogurmukhi', ), + 0x0A69: ('threegurmukhi', ), + 0x0A6A: ('fourgurmukhi', ), + 0x0A6B: ('fivegurmukhi', ), + 0x0A6C: ('sixgurmukhi', ), + 0x0A6D: ('sevengurmukhi', ), + 0x0A6E: ('eightgurmukhi', ), + 0x0A6F: ('ninegurmukhi', ), + 0x0A70: ('tippigurmukhi', ), + 0x0A71: ('addakgurmukhi', ), + 0x0A72: ('irigurmukhi', ), + 0x0A73: ('uragurmukhi', ), + 0x0A74: ('ekonkargurmukhi', ), + 0x0A81: ('candrabindugujarati', ), + 0x0A82: ('anusvaragujarati', ), + 0x0A83: ('visargagujarati', ), + 0x0A85: ('agujarati', ), + 0x0A86: ('aagujarati', ), + 0x0A87: ('igujarati', ), + 0x0A88: ('iigujarati', ), + 0x0A89: ('ugujarati', ), + 0x0A8A: ('uugujarati', ), + 0x0A8B: ('rvocalicgujarati', ), + 0x0A8D: ('ecandragujarati', ), + 0x0A8F: ('egujarati', ), + 0x0A90: ('aigujarati', ), + 0x0A91: ('ocandragujarati', ), + 0x0A93: ('ogujarati', ), + 0x0A94: ('augujarati', ), + 0x0A95: ('kagujarati', ), + 0x0A96: ('khagujarati', ), + 0x0A97: ('gagujarati', ), + 0x0A98: ('ghagujarati', ), + 0x0A99: ('ngagujarati', ), + 0x0A9A: ('cagujarati', ), + 0x0A9B: ('chagujarati', ), + 0x0A9C: ('jagujarati', ), + 0x0A9D: ('jhagujarati', ), + 0x0A9E: ('nyagujarati', ), + 0x0A9F: ('ttagujarati', ), + 0x0AA0: ('tthagujarati', ), + 0x0AA1: ('ddagujarati', ), + 0x0AA2: ('ddhagujarati', ), + 0x0AA3: ('nnagujarati', ), + 0x0AA4: ('tagujarati', ), + 0x0AA5: ('thagujarati', ), + 0x0AA6: ('dagujarati', ), + 0x0AA7: ('dhagujarati', ), + 0x0AA8: ('nagujarati', ), + 0x0AAA: ('pagujarati', ), + 0x0AAB: ('phagujarati', ), + 0x0AAC: ('bagujarati', ), + 0x0AAD: ('bhagujarati', ), + 0x0AAE: ('magujarati', ), + 0x0AAF: ('yagujarati', ), + 0x0AB0: ('ragujarati', ), + 0x0AB2: ('lagujarati', ), + 0x0AB3: ('llagujarati', ), + 0x0AB5: ('vagujarati', ), + 0x0AB6: ('shagujarati', ), + 0x0AB7: ('ssagujarati', ), + 0x0AB8: ('sagujarati', ), + 0x0AB9: ('hagujarati', ), + 0x0ABC: ('nuktagujarati', ), + 0x0ABE: ('aavowelsigngujarati', ), + 0x0ABF: ('ivowelsigngujarati', ), + 0x0AC0: ('iivowelsigngujarati', ), + 0x0AC1: ('uvowelsigngujarati', ), + 0x0AC2: ('uuvowelsigngujarati', ), + 0x0AC3: ('rvocalicvowelsigngujarati', ), + 0x0AC4: ('rrvocalicvowelsigngujarati', ), + 0x0AC5: ('ecandravowelsigngujarati', ), + 0x0AC7: ('evowelsigngujarati', ), + 0x0AC8: ('aivowelsigngujarati', ), + 0x0AC9: ('ocandravowelsigngujarati', ), + 0x0ACB: ('ovowelsigngujarati', ), + 0x0ACC: ('auvowelsigngujarati', ), + 0x0ACD: ('viramagujarati', ), + 0x0AD0: ('omgujarati', ), + 0x0AE0: ('rrvocalicgujarati', ), + 0x0AE6: ('zerogujarati', ), + 0x0AE7: ('onegujarati', ), + 0x0AE8: ('twogujarati', ), + 0x0AE9: ('threegujarati', ), + 0x0AEA: ('fourgujarati', ), + 0x0AEB: ('fivegujarati', ), + 0x0AEC: ('sixgujarati', ), + 0x0AED: ('sevengujarati', ), + 0x0AEE: ('eightgujarati', ), + 0x0AEF: ('ninegujarati', ), + 0x0E01: ('kokaithai', ), + 0x0E02: ('khokhaithai', ), + 0x0E03: ('khokhuatthai', ), + 0x0E04: ('khokhwaithai', ), + 0x0E05: ('khokhonthai', ), + 0x0E06: ('khorakhangthai', ), + 0x0E07: ('ngonguthai', ), + 0x0E08: ('chochanthai', ), + 0x0E09: ('chochingthai', ), + 0x0E0A: ('chochangthai', ), + 0x0E0B: ('sosothai', ), + 0x0E0C: ('chochoethai', ), + 0x0E0D: ('yoyingthai', ), + 0x0E0E: ('dochadathai', ), + 0x0E0F: ('topatakthai', ), + 0x0E10: ('thothanthai', ), + 0x0E11: ('thonangmonthothai', ), + 0x0E12: ('thophuthaothai', ), + 0x0E13: ('nonenthai', ), + 0x0E14: ('dodekthai', ), + 0x0E15: ('totaothai', ), + 0x0E16: ('thothungthai', ), + 0x0E17: ('thothahanthai', ), + 0x0E18: ('thothongthai', ), + 0x0E19: ('nonuthai', ), + 0x0E1A: ('bobaimaithai', ), + 0x0E1B: ('poplathai', ), + 0x0E1C: ('phophungthai', ), + 0x0E1D: ('fofathai', ), + 0x0E1E: ('phophanthai', ), + 0x0E1F: ('fofanthai', ), + 0x0E20: ('phosamphaothai', ), + 0x0E21: ('momathai', ), + 0x0E22: ('yoyakthai', ), + 0x0E23: ('roruathai', ), + 0x0E24: ('ruthai', ), + 0x0E25: ('lolingthai', ), + 0x0E26: ('luthai', ), + 0x0E27: ('wowaenthai', ), + 0x0E28: ('sosalathai', ), + 0x0E29: ('sorusithai', ), + 0x0E2A: ('sosuathai', ), + 0x0E2B: ('hohipthai', ), + 0x0E2C: ('lochulathai', ), + 0x0E2D: ('oangthai', ), + 0x0E2E: ('honokhukthai', ), + 0x0E2F: ('paiyannoithai', ), + 0x0E30: ('saraathai', ), + 0x0E31: ('maihanakatthai', ), + 0x0E32: ('saraaathai', ), + 0x0E33: ('saraamthai', ), + 0x0E34: ('saraithai', ), + 0x0E35: ('saraiithai', ), + 0x0E36: ('sarauethai', ), + 0x0E37: ('saraueethai', ), + 0x0E38: ('sarauthai', ), + 0x0E39: ('sarauuthai', ), + 0x0E3A: ('phinthuthai', ), + 0x0E3F: ('bahtthai', ), + 0x0E40: ('saraethai', ), + 0x0E41: ('saraaethai', ), + 0x0E42: ('saraothai', ), + 0x0E43: ('saraaimaimuanthai', ), + 0x0E44: ('saraaimaimalaithai', ), + 0x0E45: ('lakkhangyaothai', ), + 0x0E46: ('maiyamokthai', ), + 0x0E47: ('maitaikhuthai', ), + 0x0E48: ('maiekthai', ), + 0x0E49: ('maithothai', ), + 0x0E4A: ('maitrithai', ), + 0x0E4B: ('maichattawathai', ), + 0x0E4C: ('thanthakhatthai', ), + 0x0E4D: ('nikhahitthai', ), + 0x0E4E: ('yamakkanthai', ), + 0x0E4F: ('fongmanthai', ), + 0x0E50: ('zerothai', ), + 0x0E51: ('onethai', ), + 0x0E52: ('twothai', ), + 0x0E53: ('threethai', ), + 0x0E54: ('fourthai', ), + 0x0E55: ('fivethai', ), + 0x0E56: ('sixthai', ), + 0x0E57: ('seventhai', ), + 0x0E58: ('eightthai', ), + 0x0E59: ('ninethai', ), + 0x0E5A: ('angkhankhuthai', ), + 0x0E5B: ('khomutthai', ), + 0x1E00: ('Aringbelow', ), + 0x1E01: ('aringbelow', ), + 0x1E02: ('Bdotaccent', ), + 0x1E03: ('bdotaccent', ), + 0x1E04: ('Bdotbelow', ), + 0x1E05: ('bdotbelow', ), + 0x1E06: ('Blinebelow', ), + 0x1E07: ('blinebelow', ), + 0x1E08: ('Ccedillaacute', ), + 0x1E09: ('ccedillaacute', ), + 0x1E0A: ('Ddotaccent', ), + 0x1E0B: ('ddotaccent', ), + 0x1E0C: ('Ddotbelow', ), + 0x1E0D: ('ddotbelow', ), + 0x1E0E: ('Dlinebelow', ), + 0x1E0F: ('dlinebelow', ), + 0x1E10: ('Dcedilla', ), + 0x1E11: ('dcedilla', ), + 0x1E12: ('Dcircumflexbelow', ), + 0x1E13: ('dcircumflexbelow', ), + 0x1E14: ('Emacrongrave', ), + 0x1E15: ('emacrongrave', ), + 0x1E16: ('Emacronacute', ), + 0x1E17: ('emacronacute', ), + 0x1E18: ('Ecircumflexbelow', ), + 0x1E19: ('ecircumflexbelow', ), + 0x1E1A: ('Etildebelow', ), + 0x1E1B: ('etildebelow', ), + 0x1E1C: ('Ecedillabreve', ), + 0x1E1D: ('ecedillabreve', ), + 0x1E1E: ('Fdotaccent', ), + 0x1E1F: ('fdotaccent', ), + 0x1E20: ('Gmacron', ), + 0x1E21: ('gmacron', ), + 0x1E22: ('Hdotaccent', ), + 0x1E23: ('hdotaccent', ), + 0x1E24: ('Hdotbelow', ), + 0x1E25: ('hdotbelow', ), + 0x1E26: ('Hdieresis', ), + 0x1E27: ('hdieresis', ), + 0x1E28: ('Hcedilla', ), + 0x1E29: ('hcedilla', ), + 0x1E2A: ('Hbrevebelow', ), + 0x1E2B: ('hbrevebelow', ), + 0x1E2C: ('Itildebelow', ), + 0x1E2D: ('itildebelow', ), + 0x1E2E: ('Idieresisacute', ), + 0x1E2F: ('idieresisacute', ), + 0x1E30: ('Kacute', ), + 0x1E31: ('kacute', ), + 0x1E32: ('Kdotbelow', ), + 0x1E33: ('kdotbelow', ), + 0x1E34: ('Klinebelow', ), + 0x1E35: ('klinebelow', ), + 0x1E36: ('Ldotbelow', ), + 0x1E37: ('ldotbelow', ), + 0x1E38: ('Ldotbelowmacron', ), + 0x1E39: ('ldotbelowmacron', ), + 0x1E3A: ('Llinebelow', ), + 0x1E3B: ('llinebelow', ), + 0x1E3C: ('Lcircumflexbelow', ), + 0x1E3D: ('lcircumflexbelow', ), + 0x1E3E: ('Macute', ), + 0x1E3F: ('macute', ), + 0x1E40: ('Mdotaccent', ), + 0x1E41: ('mdotaccent', ), + 0x1E42: ('Mdotbelow', ), + 0x1E43: ('mdotbelow', ), + 0x1E44: ('Ndotaccent', ), + 0x1E45: ('ndotaccent', ), + 0x1E46: ('Ndotbelow', ), + 0x1E47: ('ndotbelow', ), + 0x1E48: ('Nlinebelow', ), + 0x1E49: ('nlinebelow', ), + 0x1E4A: ('Ncircumflexbelow', ), + 0x1E4B: ('ncircumflexbelow', ), + 0x1E4C: ('Otildeacute', ), + 0x1E4D: ('otildeacute', ), + 0x1E4E: ('Otildedieresis', ), + 0x1E4F: ('otildedieresis', ), + 0x1E50: ('Omacrongrave', ), + 0x1E51: ('omacrongrave', ), + 0x1E52: ('Omacronacute', ), + 0x1E53: ('omacronacute', ), + 0x1E54: ('Pacute', ), + 0x1E55: ('pacute', ), + 0x1E56: ('Pdotaccent', ), + 0x1E57: ('pdotaccent', ), + 0x1E58: ('Rdotaccent', ), + 0x1E59: ('rdotaccent', ), + 0x1E5A: ('Rdotbelow', ), + 0x1E5B: ('rdotbelow', ), + 0x1E5C: ('Rdotbelowmacron', ), + 0x1E5D: ('rdotbelowmacron', ), + 0x1E5E: ('Rlinebelow', ), + 0x1E5F: ('rlinebelow', ), + 0x1E60: ('Sdotaccent', ), + 0x1E61: ('sdotaccent', ), + 0x1E62: ('Sdotbelow', ), + 0x1E63: ('sdotbelow', ), + 0x1E64: ('Sacutedotaccent', ), + 0x1E65: ('sacutedotaccent', ), + 0x1E66: ('Scarondotaccent', ), + 0x1E67: ('scarondotaccent', ), + 0x1E68: ('Sdotbelowdotaccent', ), + 0x1E69: ('sdotbelowdotaccent', ), + 0x1E6A: ('Tdotaccent', ), + 0x1E6B: ('tdotaccent', ), + 0x1E6C: ('Tdotbelow', ), + 0x1E6D: ('tdotbelow', ), + 0x1E6E: ('Tlinebelow', ), + 0x1E6F: ('tlinebelow', ), + 0x1E70: ('Tcircumflexbelow', ), + 0x1E71: ('tcircumflexbelow', ), + 0x1E72: ('Udieresisbelow', ), + 0x1E73: ('udieresisbelow', ), + 0x1E74: ('Utildebelow', ), + 0x1E75: ('utildebelow', ), + 0x1E76: ('Ucircumflexbelow', ), + 0x1E77: ('ucircumflexbelow', ), + 0x1E78: ('Utildeacute', ), + 0x1E79: ('utildeacute', ), + 0x1E7A: ('Umacrondieresis', ), + 0x1E7B: ('umacrondieresis', ), + 0x1E7C: ('Vtilde', ), + 0x1E7D: ('vtilde', ), + 0x1E7E: ('Vdotbelow', ), + 0x1E7F: ('vdotbelow', ), + 0x1E80: ('Wgrave', ), + 0x1E81: ('wgrave', ), + 0x1E82: ('Wacute', ), + 0x1E83: ('wacute', ), + 0x1E84: ('Wdieresis', ), + 0x1E85: ('wdieresis', ), + 0x1E86: ('Wdotaccent', ), + 0x1E87: ('wdotaccent', ), + 0x1E88: ('Wdotbelow', ), + 0x1E89: ('wdotbelow', ), + 0x1E8A: ('Xdotaccent', ), + 0x1E8B: ('xdotaccent', ), + 0x1E8C: ('Xdieresis', ), + 0x1E8D: ('xdieresis', ), + 0x1E8E: ('Ydotaccent', ), + 0x1E8F: ('ydotaccent', ), + 0x1E90: ('Zcircumflex', ), + 0x1E91: ('zcircumflex', ), + 0x1E92: ('Zdotbelow', ), + 0x1E93: ('zdotbelow', ), + 0x1E94: ('Zlinebelow', ), + 0x1E95: ('zlinebelow', ), + 0x1E96: ('hlinebelow', ), + 0x1E97: ('tdieresis', ), + 0x1E98: ('wring', ), + 0x1E99: ('yring', ), + 0x1E9A: ('arighthalfring', ), + 0x1E9B: ('slongdotaccent', ), + 0x1EA0: ('Adotbelow', ), + 0x1EA1: ('adotbelow', ), + 0x1EA2: ('Ahookabove', ), + 0x1EA3: ('ahookabove', ), + 0x1EA4: ('Acircumflexacute', ), + 0x1EA5: ('acircumflexacute', ), + 0x1EA6: ('Acircumflexgrave', ), + 0x1EA7: ('acircumflexgrave', ), + 0x1EA8: ('Acircumflexhookabove', ), + 0x1EA9: ('acircumflexhookabove', ), + 0x1EAA: ('Acircumflextilde', ), + 0x1EAB: ('acircumflextilde', ), + 0x1EAC: ('Acircumflexdotbelow', ), + 0x1EAD: ('acircumflexdotbelow', ), + 0x1EAE: ('Abreveacute', ), + 0x1EAF: ('abreveacute', ), + 0x1EB0: ('Abrevegrave', ), + 0x1EB1: ('abrevegrave', ), + 0x1EB2: ('Abrevehookabove', ), + 0x1EB3: ('abrevehookabove', ), + 0x1EB4: ('Abrevetilde', ), + 0x1EB5: ('abrevetilde', ), + 0x1EB6: ('Abrevedotbelow', ), + 0x1EB7: ('abrevedotbelow', ), + 0x1EB8: ('Edotbelow', ), + 0x1EB9: ('edotbelow', ), + 0x1EBA: ('Ehookabove', ), + 0x1EBB: ('ehookabove', ), + 0x1EBC: ('Etilde', ), + 0x1EBD: ('etilde', ), + 0x1EBE: ('Ecircumflexacute', ), + 0x1EBF: ('ecircumflexacute', ), + 0x1EC0: ('Ecircumflexgrave', ), + 0x1EC1: ('ecircumflexgrave', ), + 0x1EC2: ('Ecircumflexhookabove', ), + 0x1EC3: ('ecircumflexhookabove', ), + 0x1EC4: ('Ecircumflextilde', ), + 0x1EC5: ('ecircumflextilde', ), + 0x1EC6: ('Ecircumflexdotbelow', ), + 0x1EC7: ('ecircumflexdotbelow', ), + 0x1EC8: ('Ihookabove', ), + 0x1EC9: ('ihookabove', ), + 0x1ECA: ('Idotbelow', ), + 0x1ECB: ('idotbelow', ), + 0x1ECC: ('Odotbelow', ), + 0x1ECD: ('odotbelow', ), + 0x1ECE: ('Ohookabove', ), + 0x1ECF: ('ohookabove', ), + 0x1ED0: ('Ocircumflexacute', ), + 0x1ED1: ('ocircumflexacute', ), + 0x1ED2: ('Ocircumflexgrave', ), + 0x1ED3: ('ocircumflexgrave', ), + 0x1ED4: ('Ocircumflexhookabove', ), + 0x1ED5: ('ocircumflexhookabove', ), + 0x1ED6: ('Ocircumflextilde', ), + 0x1ED7: ('ocircumflextilde', ), + 0x1ED8: ('Ocircumflexdotbelow', ), + 0x1ED9: ('ocircumflexdotbelow', ), + 0x1EDA: ('Ohornacute', ), + 0x1EDB: ('ohornacute', ), + 0x1EDC: ('Ohorngrave', ), + 0x1EDD: ('ohorngrave', ), + 0x1EDE: ('Ohornhookabove', ), + 0x1EDF: ('ohornhookabove', ), + 0x1EE0: ('Ohorntilde', ), + 0x1EE1: ('ohorntilde', ), + 0x1EE2: ('Ohorndotbelow', ), + 0x1EE3: ('ohorndotbelow', ), + 0x1EE4: ('Udotbelow', ), + 0x1EE5: ('udotbelow', ), + 0x1EE6: ('Uhookabove', ), + 0x1EE7: ('uhookabove', ), + 0x1EE8: ('Uhornacute', ), + 0x1EE9: ('uhornacute', ), + 0x1EEA: ('Uhorngrave', ), + 0x1EEB: ('uhorngrave', ), + 0x1EEC: ('Uhornhookabove', ), + 0x1EED: ('uhornhookabove', ), + 0x1EEE: ('Uhorntilde', ), + 0x1EEF: ('uhorntilde', ), + 0x1EF0: ('Uhorndotbelow', ), + 0x1EF1: ('uhorndotbelow', ), + 0x1EF2: ('Ygrave', ), + 0x1EF3: ('ygrave', ), + 0x1EF4: ('Ydotbelow', ), + 0x1EF5: ('ydotbelow', ), + 0x1EF6: ('Yhookabove', ), + 0x1EF7: ('yhookabove', ), + 0x1EF8: ('Ytilde', ), + 0x1EF9: ('ytilde', ), + 0x2002: ('enspace', ), + 0x200B: ('zerowidthspace', ), + 0x200C: ('afii61664', 'zerowidthnonjoiner'), + 0x200D: ('afii301', ), + 0x200E: ('afii299', ), + 0x200F: ('afii300', ), + 0x2010: ('hyphentwo', ), + 0x2012: ('figuredash', ), + 0x2013: ('endash', ), + 0x2014: ('emdash', ), + 0x2015: ('afii00208', 'horizontalbar'), + 0x2016: ('dblverticalbar', ), + 0x2017: ('dbllowline', 'underscoredbl'), + 0x2018: ('quoteleft', ), + 0x2019: ('quoteright', ), + 0x201A: ('quotesinglbase', ), + 0x201B: ('quoteleftreversed', 'quotereversed'), + 0x201C: ('quotedblleft', ), + 0x201D: ('quotedblright', ), + 0x201E: ('quotedblbase', ), + 0x2020: ('dagger', ), + 0x2021: ('daggerdbl', ), + 0x2022: ('bullet', ), + 0x2024: ('onedotenleader', ), + 0x2025: ('twodotenleader', 'twodotleader'), + 0x2026: ('ellipsis', ), + 0x202C: ('afii61573', ), + 0x202D: ('afii61574', ), + 0x202E: ('afii61575', ), + 0x2030: ('perthousand', ), + 0x2032: ('minute', ), + 0x2033: ('second', ), + 0x2035: ('primereversed', ), + 0x2039: ('guilsinglleft', ), + 0x203A: ('guilsinglright', ), + 0x203B: ('referencemark', ), + 0x203C: ('exclamdbl', ), + 0x203E: ('overline', ), + 0x2042: ('asterism', ), + 0x2044: ('fraction', ), + 0x2070: ('zerosuperior', ), + 0x2074: ('foursuperior', ), + 0x2075: ('fivesuperior', ), + 0x2076: ('sixsuperior', ), + 0x2077: ('sevensuperior', ), + 0x2078: ('eightsuperior', ), + 0x2079: ('ninesuperior', ), + 0x207A: ('plussuperior', ), + 0x207C: ('equalsuperior', ), + 0x207D: ('parenleftsuperior', ), + 0x207E: ('parenrightsuperior', ), + 0x207F: ('nsuperior', ), + 0x2080: ('zeroinferior', ), + 0x2081: ('oneinferior', ), + 0x2082: ('twoinferior', ), + 0x2083: ('threeinferior', ), + 0x2084: ('fourinferior', ), + 0x2085: ('fiveinferior', ), + 0x2086: ('sixinferior', ), + 0x2087: ('seveninferior', ), + 0x2088: ('eightinferior', ), + 0x2089: ('nineinferior', ), + 0x208D: ('parenleftinferior', ), + 0x208E: ('parenrightinferior', ), + 0x20A1: ('colonmonetary', 'colonsign'), + 0x20A2: ('cruzeiro', ), + 0x20A3: ('franc', ), + 0x20A4: ('afii08941', 'lira'), + 0x20A7: ('peseta', ), + 0x20A9: ('won', ), + 0x20AA: ('afii57636', 'newsheqelsign', 'sheqel', 'sheqelhebrew'), + 0x20AB: ('dong', ), + 0x20AC: ('euro', 'Euro'), + 0x2103: ('centigrade', ), + 0x2105: ('afii61248', 'careof'), + 0x2109: ('fahrenheit', ), + 0x2111: ('Ifraktur', ), + 0x2113: ('afii61289', 'lsquare'), + 0x2116: ('afii61352', 'numero'), + 0x2118: ('weierstrass', ), + 0x211C: ('Rfraktur', ), + 0x211E: ('prescription', ), + 0x2121: ('telephone', ), + 0x2122: ('trademark', ), + 0x2126: ('Ohm', 'Omega'), + 0x212B: ('angstrom', ), + 0x212E: ('estimated', ), + 0x2135: ('aleph', ), + 0x2153: ('onethird', ), + 0x2154: ('twothirds', ), + 0x215B: ('oneeighth', ), + 0x215C: ('threeeighths', ), + 0x215D: ('fiveeighths', ), + 0x215E: ('seveneighths', ), + 0x2160: ('Oneroman', ), + 0x2161: ('Tworoman', ), + 0x2162: ('Threeroman', ), + 0x2163: ('Fourroman', ), + 0x2164: ('Fiveroman', ), + 0x2165: ('Sixroman', ), + 0x2166: ('Sevenroman', ), + 0x2167: ('Eightroman', ), + 0x2168: ('Nineroman', ), + 0x2169: ('Tenroman', ), + 0x216A: ('Elevenroman', ), + 0x216B: ('Twelveroman', ), + 0x2170: ('oneroman', ), + 0x2171: ('tworoman', ), + 0x2172: ('threeroman', ), + 0x2173: ('fourroman', ), + 0x2174: ('fiveroman', ), + 0x2175: ('sixroman', ), + 0x2176: ('sevenroman', ), + 0x2177: ('eightroman', ), + 0x2178: ('nineroman', ), + 0x2179: ('tenroman', ), + 0x217A: ('elevenroman', ), + 0x217B: ('twelveroman', ), + 0x2190: ('arrowleft', ), + 0x2191: ('arrowup', ), + 0x2192: ('arrowright', ), + 0x2193: ('arrowdown', ), + 0x2194: ('arrowboth', ), + 0x2195: ('arrowupdn', ), + 0x2196: ('arrowupleft', ), + 0x2197: ('arrowupright', ), + 0x2198: ('arrowdownright', ), + 0x2199: ('arrowdownleft', ), + 0x21A8: ('arrowupdnbse', 'arrowupdownbase'), + 0x21B5: ('carriagereturn', ), + 0x21BC: ('harpoonleftbarbup', ), + 0x21C0: ('harpoonrightbarbup', ), + 0x21C4: ('arrowrightoverleft', ), + 0x21C5: ('arrowupleftofdown', ), + 0x21C6: ('arrowleftoverright', ), + 0x21CD: ('arrowleftdblstroke', ), + 0x21CF: ('arrowrightdblstroke', ), + 0x21D0: ('arrowdblleft', 'arrowleftdbl'), + 0x21D1: ('arrowdblup', ), + 0x21D2: ('arrowdblright', 'dblarrowright'), + 0x21D3: ('arrowdbldown', ), + 0x21D4: ('arrowdblboth', 'dblarrowleft'), + 0x21DE: ('pageup', ), + 0x21DF: ('pagedown', ), + 0x21E0: ('arrowdashleft', ), + 0x21E1: ('arrowdashup', ), + 0x21E2: ('arrowdashright', ), + 0x21E3: ('arrowdashdown', ), + 0x21E4: ('arrowtableft', ), + 0x21E5: ('arrowtabright', ), + 0x21E6: ('arrowleftwhite', ), + 0x21E7: ('arrowupwhite', ), + 0x21E8: ('arrowrightwhite', ), + 0x21E9: ('arrowdownwhite', ), + 0x21EA: ('capslock', ), + 0x2200: ('forall', 'universal'), + 0x2202: ('partialdiff', ), + 0x2203: ('existential', 'thereexists'), + 0x2205: ('emptyset', ), + 0x2206: ('Delta', 'increment'), + 0x2207: ('gradient', 'nabla'), + 0x2208: ('element', ), + 0x2209: ('notelement', 'notelementof'), + 0x220B: ('suchthat', ), + 0x220C: ('notcontains', ), + 0x220F: ('product', ), + 0x2211: ('summation', ), + 0x2212: ('minus', ), + 0x2213: ('minusplus', ), + 0x2215: ('divisionslash', ), + 0x2217: ('asteriskmath', ), + 0x2219: ('bulletoperator', ), + 0x221A: ('radical', ), + 0x221D: ('proportional', ), + 0x221E: ('infinity', ), + 0x221F: ('orthogonal', 'rightangle'), + 0x2220: ('angle', ), + 0x2223: ('divides', ), + 0x2225: ('parallel', ), + 0x2226: ('notparallel', ), + 0x2227: ('logicaland', ), + 0x2228: ('logicalor', ), + 0x2229: ('intersection', ), + 0x222A: ('union', ), + 0x222B: ('integral', ), + 0x222C: ('dblintegral', ), + 0x222E: ('contourintegral', ), + 0x2234: ('therefore', ), + 0x2235: ('because', ), + 0x2236: ('ratio', ), + 0x2237: ('proportion', ), + 0x223C: ('similar', 'tildeoperator'), + 0x223D: ('reversedtilde', ), + 0x2243: ('asymptoticallyequal', ), + 0x2245: ('approximatelyequal', 'congruent'), + 0x2248: ('approxequal', ), + 0x224C: ('allequal', ), + 0x2250: ('approaches', ), + 0x2251: ('geometricallyequal', ), + 0x2252: ('approxequalorimage', ), + 0x2253: ('imageorapproximatelyequal', ), + 0x2260: ('notequal', ), + 0x2261: ('equivalence', ), + 0x2262: ('notidentical', ), + 0x2264: ('lessequal', ), + 0x2265: ('greaterequal', ), + 0x2266: ('lessoverequal', ), + 0x2267: ('greateroverequal', ), + 0x226A: ('muchless', ), + 0x226B: ('muchgreater', ), + 0x226E: ('notless', ), + 0x226F: ('notgreater', ), + 0x2270: ('notlessnorequal', ), + 0x2271: ('notgreaternorequal', ), + 0x2272: ('lessorequivalent', ), + 0x2273: ('greaterorequivalent', ), + 0x2276: ('lessorgreater', ), + 0x2277: ('greaterorless', ), + 0x2279: ('notgreaternorless', ), + 0x227A: ('precedes', ), + 0x227B: ('succeeds', ), + 0x2280: ('notprecedes', ), + 0x2281: ('notsucceeds', ), + 0x2282: ('propersubset', 'subset'), + 0x2283: ('propersuperset', 'superset'), + 0x2284: ('notsubset', ), + 0x2285: ('notsuperset', ), + 0x2286: ('reflexsubset', 'subsetorequal'), + 0x2287: ('reflexsuperset', 'supersetorequal'), + 0x228A: ('subsetnotequal', ), + 0x228B: ('supersetnotequal', ), + 0x2295: ('circleplus', 'pluscircle'), + 0x2296: ('minuscircle', ), + 0x2297: ('circlemultiply', 'timescircle'), + 0x2299: ('circleot', ), + 0x22A3: ('tackleft', ), + 0x22A4: ('tackdown', ), + 0x22A5: ('perpendicular', ), + 0x22BF: ('righttriangle', ), + 0x22C5: ('dotmath', ), + 0x22CE: ('curlyor', ), + 0x22CF: ('curlyand', ), + 0x22DA: ('lessequalorgreater', ), + 0x22DB: ('greaterequalorless', ), + 0x22EE: ('ellipsisvertical', ), + 0x2302: ('house', ), + 0x2303: ('control', ), + 0x2305: ('projective', ), + 0x2310: ('logicalnotreversed', 'revlogicalnot'), + 0x2312: ('arc', ), + 0x2318: ('propellor', ), + 0x2320: ('integraltop', 'integraltp'), + 0x2321: ('integralbottom', 'integralbt'), + 0x2325: ('option', ), + 0x2326: ('deleteright', ), + 0x2327: ('clear', ), + 0x2329: ('angleleft', ), + 0x232A: ('angleright', ), + 0x232B: ('deleteleft', ), + 0x2423: ('blank', ), + 0x2460: ('onecircle', ), + 0x2461: ('twocircle', ), + 0x2462: ('threecircle', ), + 0x2463: ('fourcircle', ), + 0x2464: ('fivecircle', ), + 0x2465: ('sixcircle', ), + 0x2466: ('sevencircle', ), + 0x2467: ('eightcircle', ), + 0x2468: ('ninecircle', ), + 0x2469: ('tencircle', ), + 0x246A: ('elevencircle', ), + 0x246B: ('twelvecircle', ), + 0x246C: ('thirteencircle', ), + 0x246D: ('fourteencircle', ), + 0x246E: ('fifteencircle', ), + 0x246F: ('sixteencircle', ), + 0x2470: ('seventeencircle', ), + 0x2471: ('eighteencircle', ), + 0x2472: ('nineteencircle', ), + 0x2473: ('twentycircle', ), + 0x2474: ('oneparen', ), + 0x2475: ('twoparen', ), + 0x2476: ('threeparen', ), + 0x2477: ('fourparen', ), + 0x2478: ('fiveparen', ), + 0x2479: ('sixparen', ), + 0x247A: ('sevenparen', ), + 0x247B: ('eightparen', ), + 0x247C: ('nineparen', ), + 0x247D: ('tenparen', ), + 0x247E: ('elevenparen', ), + 0x247F: ('twelveparen', ), + 0x2480: ('thirteenparen', ), + 0x2481: ('fourteenparen', ), + 0x2482: ('fifteenparen', ), + 0x2483: ('sixteenparen', ), + 0x2484: ('seventeenparen', ), + 0x2485: ('eighteenparen', ), + 0x2486: ('nineteenparen', ), + 0x2487: ('twentyparen', ), + 0x2488: ('oneperiod', ), + 0x2489: ('twoperiod', ), + 0x248A: ('threeperiod', ), + 0x248B: ('fourperiod', ), + 0x248C: ('fiveperiod', ), + 0x248D: ('sixperiod', ), + 0x248E: ('sevenperiod', ), + 0x248F: ('eightperiod', ), + 0x2490: ('nineperiod', ), + 0x2491: ('tenperiod', ), + 0x2492: ('elevenperiod', ), + 0x2493: ('twelveperiod', ), + 0x2494: ('thirteenperiod', ), + 0x2495: ('fourteenperiod', ), + 0x2496: ('fifteenperiod', ), + 0x2497: ('sixteenperiod', ), + 0x2498: ('seventeenperiod', ), + 0x2499: ('eighteenperiod', ), + 0x249A: ('nineteenperiod', ), + 0x249B: ('twentyperiod', ), + 0x249C: ('aparen', ), + 0x249D: ('bparen', ), + 0x249E: ('cparen', ), + 0x249F: ('dparen', ), + 0x24A0: ('eparen', ), + 0x24A1: ('fparen', ), + 0x24A2: ('gparen', ), + 0x24A3: ('hparen', ), + 0x24A4: ('iparen', ), + 0x24A5: ('jparen', ), + 0x24A6: ('kparen', ), + 0x24A7: ('lparen', ), + 0x24A8: ('mparen', ), + 0x24A9: ('nparen', ), + 0x24AA: ('oparen', ), + 0x24AB: ('pparen', ), + 0x24AC: ('qparen', ), + 0x24AD: ('rparen', ), + 0x24AE: ('sparen', ), + 0x24AF: ('tparen', ), + 0x24B0: ('uparen', ), + 0x24B1: ('vparen', ), + 0x24B2: ('wparen', ), + 0x24B3: ('xparen', ), + 0x24B4: ('yparen', ), + 0x24B5: ('zparen', ), + 0x24B6: ('Acircle', ), + 0x24B7: ('Bcircle', ), + 0x24B8: ('Ccircle', ), + 0x24B9: ('Dcircle', ), + 0x24BA: ('Ecircle', ), + 0x24BB: ('Fcircle', ), + 0x24BC: ('Gcircle', ), + 0x24BD: ('Hcircle', ), + 0x24BE: ('Icircle', ), + 0x24BF: ('Jcircle', ), + 0x24C0: ('Kcircle', ), + 0x24C1: ('Lcircle', ), + 0x24C2: ('Mcircle', ), + 0x24C3: ('Ncircle', ), + 0x24C4: ('Ocircle', ), + 0x24C5: ('Pcircle', ), + 0x24C6: ('Qcircle', ), + 0x24C7: ('Rcircle', ), + 0x24C8: ('Scircle', ), + 0x24C9: ('Tcircle', ), + 0x24CA: ('Ucircle', ), + 0x24CB: ('Vcircle', ), + 0x24CC: ('Wcircle', ), + 0x24CD: ('Xcircle', ), + 0x24CE: ('Ycircle', ), + 0x24CF: ('Zcircle', ), + 0x24D0: ('acircle', ), + 0x24D1: ('bcircle', ), + 0x24D2: ('ccircle', ), + 0x24D3: ('dcircle', ), + 0x24D4: ('ecircle', ), + 0x24D5: ('fcircle', ), + 0x24D6: ('gcircle', ), + 0x24D7: ('hcircle', ), + 0x24D8: ('icircle', ), + 0x24D9: ('jcircle', ), + 0x24DA: ('kcircle', ), + 0x24DB: ('lcircle', ), + 0x24DC: ('mcircle', ), + 0x24DD: ('ncircle', ), + 0x24DE: ('ocircle', ), + 0x24DF: ('pcircle', ), + 0x24E0: ('qcircle', ), + 0x24E1: ('rcircle', ), + 0x24E2: ('scircle', ), + 0x24E3: ('tcircle', ), + 0x24E4: ('ucircle', ), + 0x24E5: ('vcircle', ), + 0x24E6: ('wcircle', ), + 0x24E7: ('xcircle', ), + 0x24E8: ('ycircle', ), + 0x24E9: ('zcircle', ), + 0x2500: ('SF100000', ), + 0x2502: ('SF110000', ), + 0x250C: ('SF010000', ), + 0x2510: ('SF030000', ), + 0x2514: ('SF020000', ), + 0x2518: ('SF040000', ), + 0x251C: ('SF080000', ), + 0x2524: ('SF090000', ), + 0x252C: ('SF060000', ), + 0x2534: ('SF070000', ), + 0x253C: ('SF050000', ), + 0x2550: ('SF430000', ), + 0x2551: ('SF240000', ), + 0x2552: ('SF510000', ), + 0x2553: ('SF520000', ), + 0x2554: ('SF390000', ), + 0x2555: ('SF220000', ), + 0x2556: ('SF210000', ), + 0x2557: ('SF250000', ), + 0x2558: ('SF500000', ), + 0x2559: ('SF490000', ), + 0x255A: ('SF380000', ), + 0x255B: ('SF280000', ), + 0x255C: ('SF270000', ), + 0x255D: ('SF260000', ), + 0x255E: ('SF360000', ), + 0x255F: ('SF370000', ), + 0x2560: ('SF420000', ), + 0x2561: ('SF190000', ), + 0x2562: ('SF200000', ), + 0x2563: ('SF230000', ), + 0x2564: ('SF470000', ), + 0x2565: ('SF480000', ), + 0x2566: ('SF410000', ), + 0x2567: ('SF450000', ), + 0x2568: ('SF460000', ), + 0x2569: ('SF400000', ), + 0x256A: ('SF540000', ), + 0x256B: ('SF530000', ), + 0x256C: ('SF440000', ), + 0x2580: ('upblock', ), + 0x2584: ('dnblock', ), + 0x2588: ('block', ), + 0x258C: ('lfblock', ), + 0x2590: ('rtblock', ), + 0x2591: ('ltshade', 'shadelight'), + 0x2592: ('shade', 'shademedium'), + 0x2593: ('dkshade', 'shadedark'), + 0x25A0: ('blacksquare', 'filledbox'), + 0x25A1: ('H22073', 'whitesquare'), + 0x25A3: ('squarewhitewithsmallblack', ), + 0x25A4: ('squarehorizontalfill', ), + 0x25A5: ('squareverticalfill', ), + 0x25A6: ('squareorthogonalcrosshatchfill', ), + 0x25A7: ('squareupperlefttolowerrightfill', ), + 0x25A8: ('squareupperrighttolowerleftfill', ), + 0x25A9: ('squarediagonalcrosshatchfill', ), + 0x25AA: ('blacksmallsquare', 'H18543'), + 0x25AB: ('H18551', 'whitesmallsquare'), + 0x25AC: ('blackrectangle', 'filledrect'), + 0x25B2: ('blackuppointingtriangle', 'triagup'), + 0x25B3: ('whiteuppointingtriangle', ), + 0x25B4: ('blackuppointingsmalltriangle', ), + 0x25B5: ('whiteuppointingsmalltriangle', ), + 0x25B6: ('blackrightpointingtriangle', ), + 0x25B7: ('whiterightpointingtriangle', ), + 0x25B9: ('whiterightpointingsmalltriangle', ), + 0x25BA: ('blackrightpointingpointer', 'triagrt'), + 0x25BC: ('blackdownpointingtriangle', 'triagdn'), + 0x25BD: ('whitedownpointingtriangle', ), + 0x25BF: ('whitedownpointingsmalltriangle', ), + 0x25C0: ('blackleftpointingtriangle', ), + 0x25C1: ('whiteleftpointingtriangle', ), + 0x25C3: ('whiteleftpointingsmalltriangle', ), + 0x25C4: ('blackleftpointingpointer', 'triaglf'), + 0x25C6: ('blackdiamond', ), + 0x25C7: ('whitediamond', ), + 0x25C8: ('whitediamondcontainingblacksmalldiamond', ), + 0x25C9: ('fisheye', ), + 0x25CA: ('lozenge', ), + 0x25CB: ('circle', 'whitecircle'), + 0x25CC: ('dottedcircle', ), + 0x25CE: ('bullseye', ), + 0x25CF: ('blackcircle', 'H18533'), + 0x25D0: ('circlewithlefthalfblack', ), + 0x25D1: ('circlewithrighthalfblack', ), + 0x25D8: ('bulletinverse', 'invbullet'), + 0x25D9: ('invcircle', 'whitecircleinverse'), + 0x25E2: ('blacklowerrighttriangle', ), + 0x25E3: ('blacklowerlefttriangle', ), + 0x25E4: ('blackupperlefttriangle', ), + 0x25E5: ('blackupperrighttriangle', ), + 0x25E6: ('openbullet', 'whitebullet'), + 0x25EF: ('largecircle', ), + 0x2605: ('blackstar', ), + 0x2606: ('whitestar', ), + 0x260E: ('telephoneblack', ), + 0x260F: ('whitetelephone', ), + 0x261C: ('pointingindexleftwhite', ), + 0x261D: ('pointingindexupwhite', ), + 0x261E: ('pointingindexrightwhite', ), + 0x261F: ('pointingindexdownwhite', ), + 0x262F: ('yinyang', ), + 0x263A: ('smileface', 'whitesmilingface'), + 0x263B: ('blacksmilingface', 'invsmileface'), + 0x263C: ('compass', 'sun'), + 0x2640: ('female', 'venus'), + 0x2641: ('earth', ), + 0x2642: ('male', 'mars'), + 0x2660: ('spade', 'spadesuitblack'), + 0x2661: ('heartsuitwhite', ), + 0x2662: ('diamondsuitwhite', ), + 0x2663: ('club', 'clubsuitblack'), + 0x2664: ('spadesuitwhite', ), + 0x2665: ('heart', 'heartsuitblack'), + 0x2666: ('diamond', ), + 0x2667: ('clubsuitwhite', ), + 0x2668: ('hotsprings', ), + 0x2669: ('quarternote', ), + 0x266A: ('musicalnote', ), + 0x266B: ('eighthnotebeamed', 'musicalnotedbl'), + 0x266C: ('beamedsixteenthnotes', ), + 0x266D: ('musicflatsign', ), + 0x266F: ('musicsharpsign', ), + 0x2713: ('checkmark', ), + 0x278A: ('onecircleinversesansserif', ), + 0x278B: ('twocircleinversesansserif', ), + 0x278C: ('threecircleinversesansserif', ), + 0x278D: ('fourcircleinversesansserif', ), + 0x278E: ('fivecircleinversesansserif', ), + 0x278F: ('sixcircleinversesansserif', ), + 0x2790: ('sevencircleinversesansserif', ), + 0x2791: ('eightcircleinversesansserif', ), + 0x2792: ('ninecircleinversesansserif', ), + 0x279E: ('arrowrightheavy', ), + 0x3000: ('ideographicspace', ), + 0x3001: ('ideographiccomma', ), + 0x3002: ('ideographicperiod', ), + 0x3003: ('dittomark', ), + 0x3004: ('jis', ), + 0x3005: ('ideographiciterationmark', ), + 0x3006: ('ideographicclose', ), + 0x3007: ('ideographiczero', ), + 0x3008: ('anglebracketleft', ), + 0x3009: ('anglebracketright', ), + 0x300A: ('dblanglebracketleft', ), + 0x300B: ('dblanglebracketright', ), + 0x300C: ('cornerbracketleft', ), + 0x300D: ('cornerbracketright', ), + 0x300E: ('whitecornerbracketleft', ), + 0x300F: ('whitecornerbracketright', ), + 0x3010: ('blacklenticularbracketleft', ), + 0x3011: ('blacklenticularbracketright', ), + 0x3012: ('postalmark', ), + 0x3013: ('getamark', ), + 0x3014: ('tortoiseshellbracketleft', ), + 0x3015: ('tortoiseshellbracketright', ), + 0x3016: ('whitelenticularbracketleft', ), + 0x3017: ('whitelenticularbracketright', ), + 0x3018: ('whitetortoiseshellbracketleft', ), + 0x3019: ('whitetortoiseshellbracketright', ), + 0x301C: ('wavedash', ), + 0x301D: ('quotedblprimereversed', ), + 0x301E: ('quotedblprime', ), + 0x3020: ('postalmarkface', ), + 0x3021: ('onehangzhou', ), + 0x3022: ('twohangzhou', ), + 0x3023: ('threehangzhou', ), + 0x3024: ('fourhangzhou', ), + 0x3025: ('fivehangzhou', ), + 0x3026: ('sixhangzhou', ), + 0x3027: ('sevenhangzhou', ), + 0x3028: ('eighthangzhou', ), + 0x3029: ('ninehangzhou', ), + 0x3036: ('circlepostalmark', ), + 0x3041: ('asmallhiragana', ), + 0x3042: ('ahiragana', ), + 0x3043: ('ismallhiragana', ), + 0x3044: ('ihiragana', ), + 0x3045: ('usmallhiragana', ), + 0x3046: ('uhiragana', ), + 0x3047: ('esmallhiragana', ), + 0x3048: ('ehiragana', ), + 0x3049: ('osmallhiragana', ), + 0x304A: ('ohiragana', ), + 0x304B: ('kahiragana', ), + 0x304C: ('gahiragana', ), + 0x304D: ('kihiragana', ), + 0x304E: ('gihiragana', ), + 0x304F: ('kuhiragana', ), + 0x3050: ('guhiragana', ), + 0x3051: ('kehiragana', ), + 0x3052: ('gehiragana', ), + 0x3053: ('kohiragana', ), + 0x3054: ('gohiragana', ), + 0x3055: ('sahiragana', ), + 0x3056: ('zahiragana', ), + 0x3057: ('sihiragana', ), + 0x3058: ('zihiragana', ), + 0x3059: ('suhiragana', ), + 0x305A: ('zuhiragana', ), + 0x305B: ('sehiragana', ), + 0x305C: ('zehiragana', ), + 0x305D: ('sohiragana', ), + 0x305E: ('zohiragana', ), + 0x305F: ('tahiragana', ), + 0x3060: ('dahiragana', ), + 0x3061: ('tihiragana', ), + 0x3062: ('dihiragana', ), + 0x3063: ('tusmallhiragana', ), + 0x3064: ('tuhiragana', ), + 0x3065: ('duhiragana', ), + 0x3066: ('tehiragana', ), + 0x3067: ('dehiragana', ), + 0x3068: ('tohiragana', ), + 0x3069: ('dohiragana', ), + 0x306A: ('nahiragana', ), + 0x306B: ('nihiragana', ), + 0x306C: ('nuhiragana', ), + 0x306D: ('nehiragana', ), + 0x306E: ('nohiragana', ), + 0x306F: ('hahiragana', ), + 0x3070: ('bahiragana', ), + 0x3071: ('pahiragana', ), + 0x3072: ('hihiragana', ), + 0x3073: ('bihiragana', ), + 0x3074: ('pihiragana', ), + 0x3075: ('huhiragana', ), + 0x3076: ('buhiragana', ), + 0x3077: ('puhiragana', ), + 0x3078: ('hehiragana', ), + 0x3079: ('behiragana', ), + 0x307A: ('pehiragana', ), + 0x307B: ('hohiragana', ), + 0x307C: ('bohiragana', ), + 0x307D: ('pohiragana', ), + 0x307E: ('mahiragana', ), + 0x307F: ('mihiragana', ), + 0x3080: ('muhiragana', ), + 0x3081: ('mehiragana', ), + 0x3082: ('mohiragana', ), + 0x3083: ('yasmallhiragana', ), + 0x3084: ('yahiragana', ), + 0x3085: ('yusmallhiragana', ), + 0x3086: ('yuhiragana', ), + 0x3087: ('yosmallhiragana', ), + 0x3088: ('yohiragana', ), + 0x3089: ('rahiragana', ), + 0x308A: ('rihiragana', ), + 0x308B: ('ruhiragana', ), + 0x308C: ('rehiragana', ), + 0x308D: ('rohiragana', ), + 0x308E: ('wasmallhiragana', ), + 0x308F: ('wahiragana', ), + 0x3090: ('wihiragana', ), + 0x3091: ('wehiragana', ), + 0x3092: ('wohiragana', ), + 0x3093: ('nhiragana', ), + 0x3094: ('vuhiragana', ), + 0x309B: ('voicedmarkkana', ), + 0x309C: ('semivoicedmarkkana', ), + 0x309D: ('iterationhiragana', ), + 0x309E: ('voicediterationhiragana', ), + 0x30A1: ('asmallkatakana', ), + 0x30A2: ('akatakana', ), + 0x30A3: ('ismallkatakana', ), + 0x30A4: ('ikatakana', ), + 0x30A5: ('usmallkatakana', ), + 0x30A6: ('ukatakana', ), + 0x30A7: ('esmallkatakana', ), + 0x30A8: ('ekatakana', ), + 0x30A9: ('osmallkatakana', ), + 0x30AA: ('okatakana', ), + 0x30AB: ('kakatakana', ), + 0x30AC: ('gakatakana', ), + 0x30AD: ('kikatakana', ), + 0x30AE: ('gikatakana', ), + 0x30AF: ('kukatakana', ), + 0x30B0: ('gukatakana', ), + 0x30B1: ('kekatakana', ), + 0x30B2: ('gekatakana', ), + 0x30B3: ('kokatakana', ), + 0x30B4: ('gokatakana', ), + 0x30B5: ('sakatakana', ), + 0x30B6: ('zakatakana', ), + 0x30B7: ('sikatakana', ), + 0x30B8: ('zikatakana', ), + 0x30B9: ('sukatakana', ), + 0x30BA: ('zukatakana', ), + 0x30BB: ('sekatakana', ), + 0x30BC: ('zekatakana', ), + 0x30BD: ('sokatakana', ), + 0x30BE: ('zokatakana', ), + 0x30BF: ('takatakana', ), + 0x30C0: ('dakatakana', ), + 0x30C1: ('tikatakana', ), + 0x30C2: ('dikatakana', ), + 0x30C3: ('tusmallkatakana', ), + 0x30C4: ('tukatakana', ), + 0x30C5: ('dukatakana', ), + 0x30C6: ('tekatakana', ), + 0x30C7: ('dekatakana', ), + 0x30C8: ('tokatakana', ), + 0x30C9: ('dokatakana', ), + 0x30CA: ('nakatakana', ), + 0x30CB: ('nikatakana', ), + 0x30CC: ('nukatakana', ), + 0x30CD: ('nekatakana', ), + 0x30CE: ('nokatakana', ), + 0x30CF: ('hakatakana', ), + 0x30D0: ('bakatakana', ), + 0x30D1: ('pakatakana', ), + 0x30D2: ('hikatakana', ), + 0x30D3: ('bikatakana', ), + 0x30D4: ('pikatakana', ), + 0x30D5: ('hukatakana', ), + 0x30D6: ('bukatakana', ), + 0x30D7: ('pukatakana', ), + 0x30D8: ('hekatakana', ), + 0x30D9: ('bekatakana', ), + 0x30DA: ('pekatakana', ), + 0x30DB: ('hokatakana', ), + 0x30DC: ('bokatakana', ), + 0x30DD: ('pokatakana', ), + 0x30DE: ('makatakana', ), + 0x30DF: ('mikatakana', ), + 0x30E0: ('mukatakana', ), + 0x30E1: ('mekatakana', ), + 0x30E2: ('mokatakana', ), + 0x30E3: ('yasmallkatakana', ), + 0x30E4: ('yakatakana', ), + 0x30E5: ('yusmallkatakana', ), + 0x30E6: ('yukatakana', ), + 0x30E7: ('yosmallkatakana', ), + 0x30E8: ('yokatakana', ), + 0x30E9: ('rakatakana', ), + 0x30EA: ('rikatakana', ), + 0x30EB: ('rukatakana', ), + 0x30EC: ('rekatakana', ), + 0x30ED: ('rokatakana', ), + 0x30EE: ('wasmallkatakana', ), + 0x30EF: ('wakatakana', ), + 0x30F0: ('wikatakana', ), + 0x30F1: ('wekatakana', ), + 0x30F2: ('wokatakana', ), + 0x30F3: ('nkatakana', ), + 0x30F4: ('vukatakana', ), + 0x30F5: ('kasmallkatakana', ), + 0x30F6: ('kesmallkatakana', ), + 0x30F7: ('vakatakana', ), + 0x30F8: ('vikatakana', ), + 0x30F9: ('vekatakana', ), + 0x30FA: ('vokatakana', ), + 0x30FB: ('dotkatakana', ), + 0x30FC: ('prolongedkana', ), + 0x30FD: ('iterationkatakana', ), + 0x30FE: ('voicediterationkatakana', ), + 0x3105: ('bbopomofo', ), + 0x3106: ('pbopomofo', ), + 0x3107: ('mbopomofo', ), + 0x3108: ('fbopomofo', ), + 0x3109: ('dbopomofo', ), + 0x310A: ('tbopomofo', ), + 0x310B: ('nbopomofo', ), + 0x310C: ('lbopomofo', ), + 0x310D: ('gbopomofo', ), + 0x310E: ('kbopomofo', ), + 0x310F: ('hbopomofo', ), + 0x3110: ('jbopomofo', ), + 0x3111: ('qbopomofo', ), + 0x3112: ('xbopomofo', ), + 0x3113: ('zhbopomofo', ), + 0x3114: ('chbopomofo', ), + 0x3115: ('shbopomofo', ), + 0x3116: ('rbopomofo', ), + 0x3117: ('zbopomofo', ), + 0x3118: ('cbopomofo', ), + 0x3119: ('sbopomofo', ), + 0x311A: ('abopomofo', ), + 0x311B: ('obopomofo', ), + 0x311C: ('ebopomofo', ), + 0x311D: ('ehbopomofo', ), + 0x311E: ('aibopomofo', ), + 0x311F: ('eibopomofo', ), + 0x3120: ('aubopomofo', ), + 0x3121: ('oubopomofo', ), + 0x3122: ('anbopomofo', ), + 0x3123: ('enbopomofo', ), + 0x3124: ('angbopomofo', ), + 0x3125: ('engbopomofo', ), + 0x3126: ('erbopomofo', ), + 0x3127: ('ibopomofo', ), + 0x3128: ('ubopomofo', ), + 0x3129: ('iubopomofo', ), + 0x3131: ('kiyeokkorean', ), + 0x3132: ('ssangkiyeokkorean', ), + 0x3133: ('kiyeoksioskorean', ), + 0x3134: ('nieunkorean', ), + 0x3135: ('nieuncieuckorean', ), + 0x3136: ('nieunhieuhkorean', ), + 0x3137: ('tikeutkorean', ), + 0x3138: ('ssangtikeutkorean', ), + 0x3139: ('rieulkorean', ), + 0x313A: ('rieulkiyeokkorean', ), + 0x313B: ('rieulmieumkorean', ), + 0x313C: ('rieulpieupkorean', ), + 0x313D: ('rieulsioskorean', ), + 0x313E: ('rieulthieuthkorean', ), + 0x313F: ('rieulphieuphkorean', ), + 0x3140: ('rieulhieuhkorean', ), + 0x3141: ('mieumkorean', ), + 0x3142: ('pieupkorean', ), + 0x3143: ('ssangpieupkorean', ), + 0x3144: ('pieupsioskorean', ), + 0x3145: ('sioskorean', ), + 0x3146: ('ssangsioskorean', ), + 0x3147: ('ieungkorean', ), + 0x3148: ('cieuckorean', ), + 0x3149: ('ssangcieuckorean', ), + 0x314A: ('chieuchkorean', ), + 0x314B: ('khieukhkorean', ), + 0x314C: ('thieuthkorean', ), + 0x314D: ('phieuphkorean', ), + 0x314E: ('hieuhkorean', ), + 0x314F: ('akorean', ), + 0x3150: ('aekorean', ), + 0x3151: ('yakorean', ), + 0x3152: ('yaekorean', ), + 0x3153: ('eokorean', ), + 0x3154: ('ekorean', ), + 0x3155: ('yeokorean', ), + 0x3156: ('yekorean', ), + 0x3157: ('okorean', ), + 0x3158: ('wakorean', ), + 0x3159: ('waekorean', ), + 0x315A: ('oekorean', ), + 0x315B: ('yokorean', ), + 0x315C: ('ukorean', ), + 0x315D: ('weokorean', ), + 0x315E: ('wekorean', ), + 0x315F: ('wikorean', ), + 0x3160: ('yukorean', ), + 0x3161: ('eukorean', ), + 0x3162: ('yikorean', ), + 0x3163: ('ikorean', ), + 0x3164: ('hangulfiller', ), + 0x3165: ('ssangnieunkorean', ), + 0x3166: ('nieuntikeutkorean', ), + 0x3167: ('nieunsioskorean', ), + 0x3168: ('nieunpansioskorean', ), + 0x3169: ('rieulkiyeoksioskorean', ), + 0x316A: ('rieultikeutkorean', ), + 0x316B: ('rieulpieupsioskorean', ), + 0x316C: ('rieulpansioskorean', ), + 0x316D: ('rieulyeorinhieuhkorean', ), + 0x316E: ('mieumpieupkorean', ), + 0x316F: ('mieumsioskorean', ), + 0x3170: ('mieumpansioskorean', ), + 0x3171: ('kapyeounmieumkorean', ), + 0x3172: ('pieupkiyeokkorean', ), + 0x3173: ('pieuptikeutkorean', ), + 0x3174: ('pieupsioskiyeokkorean', ), + 0x3175: ('pieupsiostikeutkorean', ), + 0x3176: ('pieupcieuckorean', ), + 0x3177: ('pieupthieuthkorean', ), + 0x3178: ('kapyeounpieupkorean', ), + 0x3179: ('kapyeounssangpieupkorean', ), + 0x317A: ('sioskiyeokkorean', ), + 0x317B: ('siosnieunkorean', ), + 0x317C: ('siostikeutkorean', ), + 0x317D: ('siospieupkorean', ), + 0x317E: ('sioscieuckorean', ), + 0x317F: ('pansioskorean', ), + 0x3180: ('ssangieungkorean', ), + 0x3181: ('yesieungkorean', ), + 0x3182: ('yesieungsioskorean', ), + 0x3183: ('yesieungpansioskorean', ), + 0x3184: ('kapyeounphieuphkorean', ), + 0x3185: ('ssanghieuhkorean', ), + 0x3186: ('yeorinhieuhkorean', ), + 0x3187: ('yoyakorean', ), + 0x3188: ('yoyaekorean', ), + 0x3189: ('yoikorean', ), + 0x318A: ('yuyeokorean', ), + 0x318B: ('yuyekorean', ), + 0x318C: ('yuikorean', ), + 0x318D: ('araeakorean', ), + 0x318E: ('araeaekorean', ), + 0x3200: ('kiyeokparenkorean', ), + 0x3201: ('nieunparenkorean', ), + 0x3202: ('tikeutparenkorean', ), + 0x3203: ('rieulparenkorean', ), + 0x3204: ('mieumparenkorean', ), + 0x3205: ('pieupparenkorean', ), + 0x3206: ('siosparenkorean', ), + 0x3207: ('ieungparenkorean', ), + 0x3208: ('cieucparenkorean', ), + 0x3209: ('chieuchparenkorean', ), + 0x320A: ('khieukhparenkorean', ), + 0x320B: ('thieuthparenkorean', ), + 0x320C: ('phieuphparenkorean', ), + 0x320D: ('hieuhparenkorean', ), + 0x320E: ('kiyeokaparenkorean', ), + 0x320F: ('nieunaparenkorean', ), + 0x3210: ('tikeutaparenkorean', ), + 0x3211: ('rieulaparenkorean', ), + 0x3212: ('mieumaparenkorean', ), + 0x3213: ('pieupaparenkorean', ), + 0x3214: ('siosaparenkorean', ), + 0x3215: ('ieungaparenkorean', ), + 0x3216: ('cieucaparenkorean', ), + 0x3217: ('chieuchaparenkorean', ), + 0x3218: ('khieukhaparenkorean', ), + 0x3219: ('thieuthaparenkorean', ), + 0x321A: ('phieuphaparenkorean', ), + 0x321B: ('hieuhaparenkorean', ), + 0x321C: ('cieucuparenkorean', ), + 0x3220: ('oneideographicparen', ), + 0x3221: ('twoideographicparen', ), + 0x3222: ('threeideographicparen', ), + 0x3223: ('fourideographicparen', ), + 0x3224: ('fiveideographicparen', ), + 0x3225: ('sixideographicparen', ), + 0x3226: ('sevenideographicparen', ), + 0x3227: ('eightideographicparen', ), + 0x3228: ('nineideographicparen', ), + 0x3229: ('tenideographicparen', ), + 0x322A: ('ideographicmoonparen', ), + 0x322B: ('ideographicfireparen', ), + 0x322C: ('ideographicwaterparen', ), + 0x322D: ('ideographicwoodparen', ), + 0x322E: ('ideographicmetalparen', ), + 0x322F: ('ideographicearthparen', ), + 0x3230: ('ideographicsunparen', ), + 0x3231: ('ideographicstockparen', ), + 0x3232: ('ideographichaveparen', ), + 0x3233: ('ideographicsocietyparen', ), + 0x3234: ('ideographicnameparen', ), + 0x3235: ('ideographicspecialparen', ), + 0x3236: ('ideographicfinancialparen', ), + 0x3237: ('ideographiccongratulationparen', ), + 0x3238: ('ideographiclaborparen', ), + 0x3239: ('ideographicrepresentparen', ), + 0x323A: ('ideographiccallparen', ), + 0x323B: ('ideographicstudyparen', ), + 0x323C: ('ideographicsuperviseparen', ), + 0x323D: ('ideographicenterpriseparen', ), + 0x323E: ('ideographicresourceparen', ), + 0x323F: ('ideographicallianceparen', ), + 0x3240: ('ideographicfestivalparen', ), + 0x3242: ('ideographicselfparen', ), + 0x3243: ('ideographicreachparen', ), + 0x3260: ('kiyeokcirclekorean', ), + 0x3261: ('nieuncirclekorean', ), + 0x3262: ('tikeutcirclekorean', ), + 0x3263: ('rieulcirclekorean', ), + 0x3264: ('mieumcirclekorean', ), + 0x3265: ('pieupcirclekorean', ), + 0x3266: ('sioscirclekorean', ), + 0x3267: ('ieungcirclekorean', ), + 0x3268: ('cieuccirclekorean', ), + 0x3269: ('chieuchcirclekorean', ), + 0x326A: ('khieukhcirclekorean', ), + 0x326B: ('thieuthcirclekorean', ), + 0x326C: ('phieuphcirclekorean', ), + 0x326D: ('hieuhcirclekorean', ), + 0x326E: ('kiyeokacirclekorean', ), + 0x326F: ('nieunacirclekorean', ), + 0x3270: ('tikeutacirclekorean', ), + 0x3271: ('rieulacirclekorean', ), + 0x3272: ('mieumacirclekorean', ), + 0x3273: ('pieupacirclekorean', ), + 0x3274: ('siosacirclekorean', ), + 0x3275: ('ieungacirclekorean', ), + 0x3276: ('cieucacirclekorean', ), + 0x3277: ('chieuchacirclekorean', ), + 0x3278: ('khieukhacirclekorean', ), + 0x3279: ('thieuthacirclekorean', ), + 0x327A: ('phieuphacirclekorean', ), + 0x327B: ('hieuhacirclekorean', ), + 0x327F: ('koreanstandardsymbol', ), + 0x328A: ('ideographmooncircle', ), + 0x328B: ('ideographfirecircle', ), + 0x328C: ('ideographwatercircle', ), + 0x328D: ('ideographwoodcircle', ), + 0x328E: ('ideographmetalcircle', ), + 0x328F: ('ideographearthcircle', ), + 0x3290: ('ideographsuncircle', ), + 0x3294: ('ideographnamecircle', ), + 0x3296: ('ideographicfinancialcircle', ), + 0x3298: ('ideographiclaborcircle', ), + 0x3299: ('ideographicsecretcircle', ), + 0x329D: ('ideographicexcellentcircle', ), + 0x329E: ('ideographicprintcircle', ), + 0x32A3: ('ideographiccorrectcircle', ), + 0x32A4: ('ideographichighcircle', ), + 0x32A5: ('ideographiccentrecircle', ), + 0x32A6: ('ideographiclowcircle', ), + 0x32A7: ('ideographicleftcircle', ), + 0x32A8: ('ideographicrightcircle', ), + 0x32A9: ('ideographicmedicinecircle', ), + 0x3300: ('apaatosquare', ), + 0x3303: ('aarusquare', ), + 0x3305: ('intisquare', ), + 0x330D: ('karoriisquare', ), + 0x3314: ('kirosquare', ), + 0x3315: ('kiroguramusquare', ), + 0x3316: ('kiromeetorusquare', ), + 0x3318: ('guramusquare', ), + 0x331E: ('kooposquare', ), + 0x3322: ('sentisquare', ), + 0x3323: ('sentosquare', ), + 0x3326: ('dorusquare', ), + 0x3327: ('tonsquare', ), + 0x332A: ('haitusquare', ), + 0x332B: ('paasentosquare', ), + 0x3331: ('birusquare', ), + 0x3333: ('huiitosquare', ), + 0x3336: ('hekutaarusquare', ), + 0x3339: ('herutusquare', ), + 0x333B: ('peezisquare', ), + 0x3342: ('hoonsquare', ), + 0x3347: ('mansyonsquare', ), + 0x3349: ('mirisquare', ), + 0x334A: ('miribaarusquare', ), + 0x334D: ('meetorusquare', ), + 0x334E: ('yaadosquare', ), + 0x3351: ('rittorusquare', ), + 0x3357: ('wattosquare', ), + 0x337B: ('heiseierasquare', ), + 0x337C: ('syouwaerasquare', ), + 0x337D: ('taisyouerasquare', ), + 0x337E: ('meizierasquare', ), + 0x337F: ('corporationsquare', ), + 0x3380: ('paampssquare', ), + 0x3381: ('nasquare', ), + 0x3382: ('muasquare', ), + 0x3383: ('masquare', ), + 0x3384: ('kasquare', ), + 0x3385: ('KBsquare', ), + 0x3386: ('MBsquare', ), + 0x3387: ('GBsquare', ), + 0x3388: ('calsquare', ), + 0x3389: ('kcalsquare', ), + 0x338A: ('pfsquare', ), + 0x338B: ('nfsquare', ), + 0x338C: ('mufsquare', ), + 0x338D: ('mugsquare', ), + 0x338E: ('squaremg', ), + 0x338F: ('squarekg', ), + 0x3390: ('Hzsquare', ), + 0x3391: ('khzsquare', ), + 0x3392: ('mhzsquare', ), + 0x3393: ('ghzsquare', ), + 0x3394: ('thzsquare', ), + 0x3395: ('mulsquare', ), + 0x3396: ('mlsquare', ), + 0x3397: ('dlsquare', ), + 0x3398: ('klsquare', ), + 0x3399: ('fmsquare', ), + 0x339A: ('nmsquare', ), + 0x339B: ('mumsquare', ), + 0x339C: ('squaremm', ), + 0x339D: ('squarecm', ), + 0x339E: ('squarekm', ), + 0x339F: ('mmsquaredsquare', ), + 0x33A0: ('cmsquaredsquare', ), + 0x33A1: ('squaremsquared', ), + 0x33A2: ('kmsquaredsquare', ), + 0x33A3: ('mmcubedsquare', ), + 0x33A4: ('cmcubedsquare', ), + 0x33A5: ('mcubedsquare', ), + 0x33A6: ('kmcubedsquare', ), + 0x33A7: ('moverssquare', ), + 0x33A8: ('moverssquaredsquare', ), + 0x33A9: ('pasquare', ), + 0x33AA: ('kpasquare', ), + 0x33AB: ('mpasquare', ), + 0x33AC: ('gpasquare', ), + 0x33AD: ('radsquare', ), + 0x33AE: ('radoverssquare', ), + 0x33AF: ('radoverssquaredsquare', ), + 0x33B0: ('pssquare', ), + 0x33B1: ('nssquare', ), + 0x33B2: ('mussquare', ), + 0x33B3: ('mssquare', ), + 0x33B4: ('pvsquare', ), + 0x33B5: ('nvsquare', ), + 0x33B6: ('muvsquare', ), + 0x33B7: ('mvsquare', ), + 0x33B8: ('kvsquare', ), + 0x33B9: ('mvmegasquare', ), + 0x33BA: ('pwsquare', ), + 0x33BB: ('nwsquare', ), + 0x33BC: ('muwsquare', ), + 0x33BD: ('mwsquare', ), + 0x33BE: ('kwsquare', ), + 0x33BF: ('mwmegasquare', ), + 0x33C0: ('kohmsquare', ), + 0x33C1: ('mohmsquare', ), + 0x33C2: ('amsquare', ), + 0x33C3: ('bqsquare', ), + 0x33C4: ('squarecc', ), + 0x33C5: ('cdsquare', ), + 0x33C6: ('coverkgsquare', ), + 0x33C7: ('cosquare', ), + 0x33C8: ('dbsquare', ), + 0x33C9: ('gysquare', ), + 0x33CA: ('hasquare', ), + 0x33CB: ('HPsquare', ), + 0x33CD: ('KKsquare', ), + 0x33CE: ('squarekmcapital', ), + 0x33CF: ('ktsquare', ), + 0x33D0: ('lmsquare', ), + 0x33D1: ('squareln', ), + 0x33D2: ('squarelog', ), + 0x33D3: ('lxsquare', ), + 0x33D4: ('mbsquare', ), + 0x33D5: ('squaremil', ), + 0x33D6: ('molsquare', ), + 0x33D8: ('pmsquare', ), + 0x33DB: ('srsquare', ), + 0x33DC: ('svsquare', ), + 0x33DD: ('wbsquare', ), + 0x5344: ('twentyhangzhou', ), + 0xF6BE: ('dotlessj', ), + 0xF6BF: ('LL', ), + 0xF6C0: ('ll', ), + 0xF6C3: ('commaaccent', ), + 0xF6C4: ('afii10063', ), + 0xF6C5: ('afii10064', ), + 0xF6C6: ('afii10192', ), + 0xF6C7: ('afii10831', ), + 0xF6C8: ('afii10832', ), + 0xF6C9: ('Acute', ), + 0xF6CA: ('Caron', ), + 0xF6CB: ('Dieresis', ), + 0xF6CC: ('DieresisAcute', ), + 0xF6CD: ('DieresisGrave', ), + 0xF6CE: ('Grave', ), + 0xF6CF: ('Hungarumlaut', ), + 0xF6D0: ('Macron', ), + 0xF6D1: ('cyrBreve', ), + 0xF6D2: ('cyrFlex', ), + 0xF6D3: ('dblGrave', ), + 0xF6D4: ('cyrbreve', ), + 0xF6D5: ('cyrflex', ), + 0xF6D6: ('dblgrave', ), + 0xF6D7: ('dieresisacute', ), + 0xF6D8: ('dieresisgrave', ), + 0xF6D9: ('copyrightserif', ), + 0xF6DA: ('registerserif', ), + 0xF6DB: ('trademarkserif', ), + 0xF6DC: ('onefitted', ), + 0xF6DD: ('rupiah', ), + 0xF6DE: ('threequartersemdash', ), + 0xF6DF: ('centinferior', ), + 0xF6E0: ('centsuperior', ), + 0xF6E1: ('commainferior', ), + 0xF6E2: ('commasuperior', ), + 0xF6E3: ('dollarinferior', ), + 0xF6E4: ('dollarsuperior', ), + 0xF6E5: ('hypheninferior', ), + 0xF6E6: ('hyphensuperior', ), + 0xF6E7: ('periodinferior', ), + 0xF6E8: ('periodsuperior', ), + 0xF6E9: ('asuperior', ), + 0xF6EA: ('bsuperior', ), + 0xF6EB: ('dsuperior', ), + 0xF6EC: ('esuperior', ), + 0xF6ED: ('isuperior', ), + 0xF6EE: ('lsuperior', ), + 0xF6EF: ('msuperior', ), + 0xF6F0: ('osuperior', ), + 0xF6F1: ('rsuperior', ), + 0xF6F2: ('ssuperior', ), + 0xF6F3: ('tsuperior', ), + 0xF6F4: ('Brevesmall', ), + 0xF6F5: ('Caronsmall', ), + 0xF6F6: ('Circumflexsmall', ), + 0xF6F7: ('Dotaccentsmall', ), + 0xF6F8: ('Hungarumlautsmall', ), + 0xF6F9: ('Lslashsmall', ), + 0xF6FA: ('OEsmall', ), + 0xF6FB: ('Ogoneksmall', ), + 0xF6FC: ('Ringsmall', ), + 0xF6FD: ('Scaronsmall', ), + 0xF6FE: ('Tildesmall', ), + 0xF6FF: ('Zcaronsmall', ), + 0xF721: ('exclamsmall', ), + 0xF724: ('dollaroldstyle', ), + 0xF726: ('ampersandsmall', ), + 0xF730: ('zerooldstyle', ), + 0xF731: ('oneoldstyle', ), + 0xF732: ('twooldstyle', ), + 0xF733: ('threeoldstyle', ), + 0xF734: ('fouroldstyle', ), + 0xF735: ('fiveoldstyle', ), + 0xF736: ('sixoldstyle', ), + 0xF737: ('sevenoldstyle', ), + 0xF738: ('eightoldstyle', ), + 0xF739: ('nineoldstyle', ), + 0xF73F: ('questionsmall', ), + 0xF760: ('Gravesmall', ), + 0xF761: ('Asmall', ), + 0xF762: ('Bsmall', ), + 0xF763: ('Csmall', ), + 0xF764: ('Dsmall', ), + 0xF765: ('Esmall', ), + 0xF766: ('Fsmall', ), + 0xF767: ('Gsmall', ), + 0xF768: ('Hsmall', ), + 0xF769: ('Ismall', ), + 0xF76A: ('Jsmall', ), + 0xF76B: ('Ksmall', ), + 0xF76C: ('Lsmall', ), + 0xF76D: ('Msmall', ), + 0xF76E: ('Nsmall', ), + 0xF76F: ('Osmall', ), + 0xF770: ('Psmall', ), + 0xF771: ('Qsmall', ), + 0xF772: ('Rsmall', ), + 0xF773: ('Ssmall', ), + 0xF774: ('Tsmall', ), + 0xF775: ('Usmall', ), + 0xF776: ('Vsmall', ), + 0xF777: ('Wsmall', ), + 0xF778: ('Xsmall', ), + 0xF779: ('Ysmall', ), + 0xF77A: ('Zsmall', ), + 0xF7A1: ('exclamdownsmall', ), + 0xF7A2: ('centoldstyle', ), + 0xF7A8: ('Dieresissmall', ), + 0xF7AF: ('Macronsmall', ), + 0xF7B4: ('Acutesmall', ), + 0xF7B8: ('Cedillasmall', ), + 0xF7BF: ('questiondownsmall', ), + 0xF7E0: ('Agravesmall', ), + 0xF7E1: ('Aacutesmall', ), + 0xF7E2: ('Acircumflexsmall', ), + 0xF7E3: ('Atildesmall', ), + 0xF7E4: ('Adieresissmall', ), + 0xF7E5: ('Aringsmall', ), + 0xF7E6: ('AEsmall', ), + 0xF7E7: ('Ccedillasmall', ), + 0xF7E8: ('Egravesmall', ), + 0xF7E9: ('Eacutesmall', ), + 0xF7EA: ('Ecircumflexsmall', ), + 0xF7EB: ('Edieresissmall', ), + 0xF7EC: ('Igravesmall', ), + 0xF7ED: ('Iacutesmall', ), + 0xF7EE: ('Icircumflexsmall', ), + 0xF7EF: ('Idieresissmall', ), + 0xF7F0: ('Ethsmall', ), + 0xF7F1: ('Ntildesmall', ), + 0xF7F2: ('Ogravesmall', ), + 0xF7F3: ('Oacutesmall', ), + 0xF7F4: ('Ocircumflexsmall', ), + 0xF7F5: ('Otildesmall', ), + 0xF7F6: ('Odieresissmall', ), + 0xF7F8: ('Oslashsmall', ), + 0xF7F9: ('Ugravesmall', ), + 0xF7FA: ('Uacutesmall', ), + 0xF7FB: ('Ucircumflexsmall', ), + 0xF7FC: ('Udieresissmall', ), + 0xF7FD: ('Yacutesmall', ), + 0xF7FE: ('Thornsmall', ), + 0xF7FF: ('Ydieresissmall', ), + 0xF884: ('maihanakatleftthai', ), + 0xF885: ('saraileftthai', ), + 0xF886: ('saraiileftthai', ), + 0xF887: ('saraueleftthai', ), + 0xF888: ('saraueeleftthai', ), + 0xF889: ('maitaikhuleftthai', ), + 0xF88A: ('maiekupperleftthai', ), + 0xF88B: ('maieklowrightthai', ), + 0xF88C: ('maieklowleftthai', ), + 0xF88D: ('maithoupperleftthai', ), + 0xF88E: ('maitholowrightthai', ), + 0xF88F: ('maitholowleftthai', ), + 0xF890: ('maitriupperleftthai', ), + 0xF891: ('maitrilowrightthai', ), + 0xF892: ('maitrilowleftthai', ), + 0xF893: ('maichattawaupperleftthai', ), + 0xF894: ('maichattawalowrightthai', ), + 0xF895: ('maichattawalowleftthai', ), + 0xF896: ('thanthakhatupperleftthai', ), + 0xF897: ('thanthakhatlowrightthai', ), + 0xF898: ('thanthakhatlowleftthai', ), + 0xF899: ('nikhahitleftthai', ), + 0xF8E5: ('radicalex', ), + 0xF8E6: ('arrowvertex', ), + 0xF8E7: ('arrowhorizex', ), + 0xF8E8: ('registersans', ), + 0xF8E9: ('copyrightsans', ), + 0xF8EA: ('trademarksans', ), + 0xF8EB: ('parenlefttp', ), + 0xF8EC: ('parenleftex', ), + 0xF8ED: ('parenleftbt', ), + 0xF8EE: ('bracketlefttp', ), + 0xF8EF: ('bracketleftex', ), + 0xF8F0: ('bracketleftbt', ), + 0xF8F1: ('bracelefttp', ), + 0xF8F2: ('braceleftmid', ), + 0xF8F3: ('braceleftbt', ), + 0xF8F4: ('braceex', ), + 0xF8F5: ('integralex', ), + 0xF8F6: ('parenrighttp', ), + 0xF8F7: ('parenrightex', ), + 0xF8F8: ('parenrightbt', ), + 0xF8F9: ('bracketrighttp', ), + 0xF8FA: ('bracketrightex', ), + 0xF8FB: ('bracketrightbt', ), + 0xF8FC: ('bracerighttp', ), + 0xF8FD: ('bracerightmid', ), + 0xF8FE: ('bracerightbt', ), + 0xF8FF: ('apple', ), + 0xFB00: ('ff', ), + 0xFB01: ('fi', ), + 0xFB02: ('fl', ), + 0xFB03: ('ffi', ), + 0xFB04: ('ffl', ), + 0xFB1F: ('afii57705', 'doubleyodpatah', 'doubleyodpatahhebrew', + 'yodyodpatahhebrew'), + 0xFB20: ('ayinaltonehebrew', ), + 0xFB2A: ('afii57694', 'shinshindot', 'shinshindothebrew'), + 0xFB2B: ('afii57695', 'shinsindot', 'shinsindothebrew'), + 0xFB2C: ('shindageshshindot', 'shindageshshindothebrew'), + 0xFB2D: ('shindageshsindot', 'shindageshsindothebrew'), + 0xFB2E: ('alefpatahhebrew', ), + 0xFB2F: ('alefqamatshebrew', ), + 0xFB30: ('alefdageshhebrew', ), + 0xFB31: ('betdagesh', 'betdageshhebrew'), + 0xFB32: ('gimeldagesh', 'gimeldageshhebrew'), + 0xFB33: ('daletdagesh', 'daletdageshhebrew'), + 0xFB34: ('hedagesh', 'hedageshhebrew'), + 0xFB35: ('afii57723', 'vavdagesh', 'vavdagesh65', 'vavdageshhebrew'), + 0xFB36: ('zayindagesh', 'zayindageshhebrew'), + 0xFB38: ('tetdagesh', 'tetdageshhebrew'), + 0xFB39: ('yoddagesh', 'yoddageshhebrew'), + 0xFB3A: ('finalkafdagesh', 'finalkafdageshhebrew'), + 0xFB3B: ('kafdagesh', 'kafdageshhebrew'), + 0xFB3C: ('lameddagesh', 'lameddageshhebrew'), + 0xFB3E: ('memdagesh', 'memdageshhebrew'), + 0xFB40: ('nundagesh', 'nundageshhebrew'), + 0xFB41: ('samekhdagesh', 'samekhdageshhebrew'), + 0xFB43: ('pefinaldageshhebrew', ), + 0xFB44: ('pedagesh', 'pedageshhebrew'), + 0xFB46: ('tsadidagesh', 'tsadidageshhebrew'), + 0xFB47: ('qofdagesh', 'qofdageshhebrew'), + 0xFB48: ('reshdageshhebrew', ), + 0xFB49: ('shindagesh', 'shindageshhebrew'), + 0xFB4A: ('tavdages', 'tavdagesh', 'tavdageshhebrew'), + 0xFB4B: ('afii57700', 'vavholam', 'vavholamhebrew'), + 0xFB4C: ('betrafehebrew', ), + 0xFB4D: ('kafrafehebrew', ), + 0xFB4E: ('perafehebrew', ), + 0xFB4F: ('aleflamedhebrew', ), + 0xFB57: ('pehfinalarabic', ), + 0xFB58: ('pehinitialarabic', ), + 0xFB59: ('pehmedialarabic', ), + 0xFB67: ('ttehfinalarabic', ), + 0xFB68: ('ttehinitialarabic', ), + 0xFB69: ('ttehmedialarabic', ), + 0xFB6B: ('vehfinalarabic', ), + 0xFB6C: ('vehinitialarabic', ), + 0xFB6D: ('vehmedialarabic', ), + 0xFB7B: ('tchehfinalarabic', ), + 0xFB7C: ('tchehinitialarabic', ), +# 0xFB7C FEE4: 'tchehmeeminitialarabic', + 0xFB7D: ('tchehmedialarabic', ), + 0xFB89: ('ddalfinalarabic', ), + 0xFB8B: ('jehfinalarabic', ), + 0xFB8D: ('rrehfinalarabic', ), + 0xFB93: ('gaffinalarabic', ), + 0xFB94: ('gafinitialarabic', ), + 0xFB95: ('gafmedialarabic', ), + 0xFB9F: ('noonghunnafinalarabic', ), + 0xFBA4: ('hehhamzaaboveisolatedarabic', ), + 0xFBA5: ('hehhamzaabovefinalarabic', ), + 0xFBA7: ('hehfinalaltonearabic', ), + 0xFBA8: ('hehinitialaltonearabic', ), + 0xFBA9: ('hehmedialaltonearabic', ), + 0xFBAF: ('yehbarreefinalarabic', ), + 0xFC08: ('behmeemisolatedarabic', ), + 0xFC0B: ('tehjeemisolatedarabic', ), + 0xFC0C: ('tehhahisolatedarabic', ), + 0xFC0E: ('tehmeemisolatedarabic', ), + 0xFC48: ('meemmeemisolatedarabic', ), + 0xFC4B: ('noonjeemisolatedarabic', ), + 0xFC4E: ('noonmeemisolatedarabic', ), + 0xFC58: ('yehmeemisolatedarabic', ), + 0xFC5E: ('shaddadammatanarabic', ), + 0xFC5F: ('shaddakasratanarabic', ), + 0xFC60: ('shaddafathaarabic', ), + 0xFC61: ('shaddadammaarabic', ), + 0xFC62: ('shaddakasraarabic', ), + 0xFC6D: ('behnoonfinalarabic', ), + 0xFC73: ('tehnoonfinalarabic', ), + 0xFC8D: ('noonnoonfinalarabic', ), + 0xFC94: ('yehnoonfinalarabic', ), + 0xFC9F: ('behmeeminitialarabic', ), + 0xFCA1: ('tehjeeminitialarabic', ), + 0xFCA2: ('tehhahinitialarabic', ), + 0xFCA4: ('tehmeeminitialarabic', ), + 0xFCC9: ('lamjeeminitialarabic', ), + 0xFCCA: ('lamhahinitialarabic', ), + 0xFCCB: ('lamkhahinitialarabic', ), + 0xFCCC: ('lammeeminitialarabic', ), + 0xFCD1: ('meemmeeminitialarabic', ), + 0xFCD2: ('noonjeeminitialarabic', ), + 0xFCD5: ('noonmeeminitialarabic', ), + 0xFCDD: ('yehmeeminitialarabic', ), + 0xFD3E: ('parenleftaltonearabic', ), + 0xFD3F: ('parenrightaltonearabic', ), + 0xFD88: ('lammeemhahinitialarabic', ), + 0xFDF2: ('lamlamhehisolatedarabic', ), + 0xFDFA: ('sallallahoualayhewasallamarabic', ), + 0xFE30: ('twodotleadervertical', ), + 0xFE31: ('emdashvertical', ), + 0xFE32: ('endashvertical', ), + 0xFE33: ('underscorevertical', ), + 0xFE34: ('wavyunderscorevertical', ), + 0xFE35: ('parenleftvertical', ), + 0xFE36: ('parenrightvertical', ), + 0xFE37: ('braceleftvertical', ), + 0xFE38: ('bracerightvertical', ), + 0xFE39: ('tortoiseshellbracketleftvertical', ), + 0xFE3A: ('tortoiseshellbracketrightvertical', ), + 0xFE3B: ('blacklenticularbracketleftvertical', ), + 0xFE3C: ('blacklenticularbracketrightvertical', ), + 0xFE3D: ('dblanglebracketleftvertical', ), + 0xFE3E: ('dblanglebracketrightvertical', ), + 0xFE3F: ('anglebracketleftvertical', ), + 0xFE40: ('anglebracketrightvertical', ), + 0xFE41: ('cornerbracketleftvertical', ), + 0xFE42: ('cornerbracketrightvertical', ), + 0xFE43: ('whitecornerbracketleftvertical', ), + 0xFE44: ('whitecornerbracketrightvertical', ), + 0xFE49: ('overlinedashed', ), + 0xFE4A: ('overlinecenterline', ), + 0xFE4B: ('overlinewavy', ), + 0xFE4C: ('overlinedblwavy', ), + 0xFE4D: ('lowlinedashed', ), + 0xFE4E: ('lowlinecenterline', ), + 0xFE4F: ('underscorewavy', ), + 0xFE50: ('commasmall', ), + 0xFE52: ('periodsmall', ), + 0xFE54: ('semicolonsmall', ), + 0xFE55: ('colonsmall', ), + 0xFE59: ('parenleftsmall', ), + 0xFE5A: ('parenrightsmall', ), + 0xFE5B: ('braceleftsmall', ), + 0xFE5C: ('bracerightsmall', ), + 0xFE5D: ('tortoiseshellbracketleftsmall', ), + 0xFE5E: ('tortoiseshellbracketrightsmall', ), + 0xFE5F: ('numbersignsmall', ), + 0xFE61: ('asterisksmall', ), + 0xFE62: ('plussmall', ), + 0xFE63: ('hyphensmall', ), + 0xFE64: ('lesssmall', ), + 0xFE65: ('greatersmall', ), + 0xFE66: ('equalsmall', ), + 0xFE69: ('dollarsmall', ), + 0xFE6A: ('percentsmall', ), + 0xFE6B: ('atsmall', ), + 0xFE82: ('alefmaddaabovefinalarabic', ), + 0xFE84: ('alefhamzaabovefinalarabic', ), + 0xFE86: ('wawhamzaabovefinalarabic', ), + 0xFE88: ('alefhamzabelowfinalarabic', ), + 0xFE8A: ('yehhamzaabovefinalarabic', ), + 0xFE8B: ('yehhamzaaboveinitialarabic', ), + 0xFE8C: ('yehhamzaabovemedialarabic', ), + 0xFE8E: ('aleffinalarabic', ), + 0xFE90: ('behfinalarabic', ), + 0xFE91: ('behinitialarabic', ), + 0xFE92: ('behmedialarabic', ), + 0xFE94: ('tehmarbutafinalarabic', ), + 0xFE96: ('tehfinalarabic', ), + 0xFE97: ('tehinitialarabic', ), + 0xFE98: ('tehmedialarabic', ), + 0xFE9A: ('thehfinalarabic', ), + 0xFE9B: ('thehinitialarabic', ), + 0xFE9C: ('thehmedialarabic', ), + 0xFE9E: ('jeemfinalarabic', ), + 0xFE9F: ('jeeminitialarabic', ), + 0xFEA0: ('jeemmedialarabic', ), + 0xFEA2: ('hahfinalarabic', ), + 0xFEA3: ('hahinitialarabic', ), + 0xFEA4: ('hahmedialarabic', ), + 0xFEA6: ('khahfinalarabic', ), + 0xFEA7: ('khahinitialarabic', ), + 0xFEA8: ('khahmedialarabic', ), + 0xFEAA: ('dalfinalarabic', ), + 0xFEAC: ('thalfinalarabic', ), + 0xFEAE: ('rehfinalarabic', ), + 0xFEB0: ('zainfinalarabic', ), + 0xFEB2: ('seenfinalarabic', ), + 0xFEB3: ('seeninitialarabic', ), + 0xFEB4: ('seenmedialarabic', ), + 0xFEB6: ('sheenfinalarabic', ), + 0xFEB7: ('sheeninitialarabic', ), + 0xFEB8: ('sheenmedialarabic', ), + 0xFEBA: ('sadfinalarabic', ), + 0xFEBB: ('sadinitialarabic', ), + 0xFEBC: ('sadmedialarabic', ), + 0xFEBE: ('dadfinalarabic', ), + 0xFEBF: ('dadinitialarabic', ), + 0xFEC0: ('dadmedialarabic', ), + 0xFEC2: ('tahfinalarabic', ), + 0xFEC3: ('tahinitialarabic', ), + 0xFEC4: ('tahmedialarabic', ), + 0xFEC6: ('zahfinalarabic', ), + 0xFEC7: ('zahinitialarabic', ), + 0xFEC8: ('zahmedialarabic', ), + 0xFECA: ('ainfinalarabic', ), + 0xFECB: ('aininitialarabic', ), + 0xFECC: ('ainmedialarabic', ), + 0xFECE: ('ghainfinalarabic', ), + 0xFECF: ('ghaininitialarabic', ), + 0xFED0: ('ghainmedialarabic', ), + 0xFED2: ('fehfinalarabic', ), + 0xFED3: ('fehinitialarabic', ), + 0xFED4: ('fehmedialarabic', ), + 0xFED6: ('qaffinalarabic', ), + 0xFED7: ('qafinitialarabic', ), + 0xFED8: ('qafmedialarabic', ), + 0xFEDA: ('kaffinalarabic', ), + 0xFEDB: ('kafinitialarabic', ), + 0xFEDC: ('kafmedialarabic', ), + 0xFEDE: ('lamfinalarabic', ), + 0xFEDF: ('laminitialarabic', ), +# 0xFEDF FEE4 FEA0: 'lammeemjeeminitialarabic', +# 0xFEDF FEE4 FEA8: 'lammeemkhahinitialarabic', + 0xFEE0: ('lammedialarabic', ), + 0xFEE2: ('meemfinalarabic', ), + 0xFEE3: ('meeminitialarabic', ), + 0xFEE4: ('meemmedialarabic', ), + 0xFEE6: ('noonfinalarabic', ), + 0xFEE7: ('nooninitialarabic', ), +# 0xFEE7 FEEC: 'noonhehinitialarabic', + 0xFEE8: ('noonmedialarabic', ), + 0xFEEA: ('hehfinalalttwoarabic', 'hehfinalarabic'), + 0xFEEB: ('hehinitialarabic', ), + 0xFEEC: ('hehmedialarabic', ), + 0xFEEE: ('wawfinalarabic', ), + 0xFEF0: ('alefmaksurafinalarabic', ), + 0xFEF2: ('yehfinalarabic', ), + 0xFEF3: ('alefmaksurainitialarabic', 'yehinitialarabic'), + 0xFEF4: ('alefmaksuramedialarabic', 'yehmedialarabic'), + 0xFEF5: ('lamalefmaddaaboveisolatedarabic', ), + 0xFEF6: ('lamalefmaddaabovefinalarabic', ), + 0xFEF7: ('lamalefhamzaaboveisolatedarabic', ), + 0xFEF8: ('lamalefhamzaabovefinalarabic', ), + 0xFEF9: ('lamalefhamzabelowisolatedarabic', ), + 0xFEFA: ('lamalefhamzabelowfinalarabic', ), + 0xFEFB: ('lamalefisolatedarabic', ), + 0xFEFC: ('lamaleffinalarabic', ), + 0xFEFF: ('zerowidthjoiner', ), + 0xFF01: ('exclammonospace', ), + 0xFF02: ('quotedblmonospace', ), + 0xFF03: ('numbersignmonospace', ), + 0xFF04: ('dollarmonospace', ), + 0xFF05: ('percentmonospace', ), + 0xFF06: ('ampersandmonospace', ), + 0xFF07: ('quotesinglemonospace', ), + 0xFF08: ('parenleftmonospace', ), + 0xFF09: ('parenrightmonospace', ), + 0xFF0A: ('asteriskmonospace', ), + 0xFF0B: ('plusmonospace', ), + 0xFF0C: ('commamonospace', ), + 0xFF0D: ('hyphenmonospace', ), + 0xFF0E: ('periodmonospace', ), + 0xFF0F: ('slashmonospace', ), + 0xFF10: ('zeromonospace', ), + 0xFF11: ('onemonospace', ), + 0xFF12: ('twomonospace', ), + 0xFF13: ('threemonospace', ), + 0xFF14: ('fourmonospace', ), + 0xFF15: ('fivemonospace', ), + 0xFF16: ('sixmonospace', ), + 0xFF17: ('sevenmonospace', ), + 0xFF18: ('eightmonospace', ), + 0xFF19: ('ninemonospace', ), + 0xFF1A: ('colonmonospace', ), + 0xFF1B: ('semicolonmonospace', ), + 0xFF1C: ('lessmonospace', ), + 0xFF1D: ('equalmonospace', ), + 0xFF1E: ('greatermonospace', ), + 0xFF1F: ('questionmonospace', ), + 0xFF20: ('atmonospace', ), + 0xFF21: ('Amonospace', ), + 0xFF22: ('Bmonospace', ), + 0xFF23: ('Cmonospace', ), + 0xFF24: ('Dmonospace', ), + 0xFF25: ('Emonospace', ), + 0xFF26: ('Fmonospace', ), + 0xFF27: ('Gmonospace', ), + 0xFF28: ('Hmonospace', ), + 0xFF29: ('Imonospace', ), + 0xFF2A: ('Jmonospace', ), + 0xFF2B: ('Kmonospace', ), + 0xFF2C: ('Lmonospace', ), + 0xFF2D: ('Mmonospace', ), + 0xFF2E: ('Nmonospace', ), + 0xFF2F: ('Omonospace', ), + 0xFF30: ('Pmonospace', ), + 0xFF31: ('Qmonospace', ), + 0xFF32: ('Rmonospace', ), + 0xFF33: ('Smonospace', ), + 0xFF34: ('Tmonospace', ), + 0xFF35: ('Umonospace', ), + 0xFF36: ('Vmonospace', ), + 0xFF37: ('Wmonospace', ), + 0xFF38: ('Xmonospace', ), + 0xFF39: ('Ymonospace', ), + 0xFF3A: ('Zmonospace', ), + 0xFF3B: ('bracketleftmonospace', ), + 0xFF3C: ('backslashmonospace', ), + 0xFF3D: ('bracketrightmonospace', ), + 0xFF3E: ('asciicircummonospace', ), + 0xFF3F: ('underscoremonospace', ), + 0xFF40: ('gravemonospace', ), + 0xFF41: ('amonospace', ), + 0xFF42: ('bmonospace', ), + 0xFF43: ('cmonospace', ), + 0xFF44: ('dmonospace', ), + 0xFF45: ('emonospace', ), + 0xFF46: ('fmonospace', ), + 0xFF47: ('gmonospace', ), + 0xFF48: ('hmonospace', ), + 0xFF49: ('imonospace', ), + 0xFF4A: ('jmonospace', ), + 0xFF4B: ('kmonospace', ), + 0xFF4C: ('lmonospace', ), + 0xFF4D: ('mmonospace', ), + 0xFF4E: ('nmonospace', ), + 0xFF4F: ('omonospace', ), + 0xFF50: ('pmonospace', ), + 0xFF51: ('qmonospace', ), + 0xFF52: ('rmonospace', ), + 0xFF53: ('smonospace', ), + 0xFF54: ('tmonospace', ), + 0xFF55: ('umonospace', ), + 0xFF56: ('vmonospace', ), + 0xFF57: ('wmonospace', ), + 0xFF58: ('xmonospace', ), + 0xFF59: ('ymonospace', ), + 0xFF5A: ('zmonospace', ), + 0xFF5B: ('braceleftmonospace', ), + 0xFF5C: ('barmonospace', ), + 0xFF5D: ('bracerightmonospace', ), + 0xFF5E: ('asciitildemonospace', ), + 0xFF61: ('periodhalfwidth', ), + 0xFF62: ('cornerbracketlefthalfwidth', ), + 0xFF63: ('cornerbracketrighthalfwidth', ), + 0xFF64: ('ideographiccommaleft', ), + 0xFF65: ('middledotkatakanahalfwidth', ), + 0xFF66: ('wokatakanahalfwidth', ), + 0xFF67: ('asmallkatakanahalfwidth', ), + 0xFF68: ('ismallkatakanahalfwidth', ), + 0xFF69: ('usmallkatakanahalfwidth', ), + 0xFF6A: ('esmallkatakanahalfwidth', ), + 0xFF6B: ('osmallkatakanahalfwidth', ), + 0xFF6C: ('yasmallkatakanahalfwidth', ), + 0xFF6D: ('yusmallkatakanahalfwidth', ), + 0xFF6E: ('yosmallkatakanahalfwidth', ), + 0xFF6F: ('tusmallkatakanahalfwidth', ), + 0xFF70: ('katahiraprolongmarkhalfwidth', ), + 0xFF71: ('akatakanahalfwidth', ), + 0xFF72: ('ikatakanahalfwidth', ), + 0xFF73: ('ukatakanahalfwidth', ), + 0xFF74: ('ekatakanahalfwidth', ), + 0xFF75: ('okatakanahalfwidth', ), + 0xFF76: ('kakatakanahalfwidth', ), + 0xFF77: ('kikatakanahalfwidth', ), + 0xFF78: ('kukatakanahalfwidth', ), + 0xFF79: ('kekatakanahalfwidth', ), + 0xFF7A: ('kokatakanahalfwidth', ), + 0xFF7B: ('sakatakanahalfwidth', ), + 0xFF7C: ('sikatakanahalfwidth', ), + 0xFF7D: ('sukatakanahalfwidth', ), + 0xFF7E: ('sekatakanahalfwidth', ), + 0xFF7F: ('sokatakanahalfwidth', ), + 0xFF80: ('takatakanahalfwidth', ), + 0xFF81: ('tikatakanahalfwidth', ), + 0xFF82: ('tukatakanahalfwidth', ), + 0xFF83: ('tekatakanahalfwidth', ), + 0xFF84: ('tokatakanahalfwidth', ), + 0xFF85: ('nakatakanahalfwidth', ), + 0xFF86: ('nikatakanahalfwidth', ), + 0xFF87: ('nukatakanahalfwidth', ), + 0xFF88: ('nekatakanahalfwidth', ), + 0xFF89: ('nokatakanahalfwidth', ), + 0xFF8A: ('hakatakanahalfwidth', ), + 0xFF8B: ('hikatakanahalfwidth', ), + 0xFF8C: ('hukatakanahalfwidth', ), + 0xFF8D: ('hekatakanahalfwidth', ), + 0xFF8E: ('hokatakanahalfwidth', ), + 0xFF8F: ('makatakanahalfwidth', ), + 0xFF90: ('mikatakanahalfwidth', ), + 0xFF91: ('mukatakanahalfwidth', ), + 0xFF92: ('mekatakanahalfwidth', ), + 0xFF93: ('mokatakanahalfwidth', ), + 0xFF94: ('yakatakanahalfwidth', ), + 0xFF95: ('yukatakanahalfwidth', ), + 0xFF96: ('yokatakanahalfwidth', ), + 0xFF97: ('rakatakanahalfwidth', ), + 0xFF98: ('rikatakanahalfwidth', ), + 0xFF99: ('rukatakanahalfwidth', ), + 0xFF9A: ('rekatakanahalfwidth', ), + 0xFF9B: ('rokatakanahalfwidth', ), + 0xFF9C: ('wakatakanahalfwidth', ), + 0xFF9D: ('nkatakanahalfwidth', ), + 0xFF9E: ('voicedmarkkanahalfwidth', ), + 0xFF9F: ('semivoicedmarkkanahalfwidth', ), + 0xFFE0: ('centmonospace', ), + 0xFFE1: ('sterlingmonospace', ), + 0xFFE3: ('macronmonospace', ), + 0xFFE5: ('yenmonospace', )} + + +def parse_glyph_list(filename): + unicode_to_glyph_name = {} + with open(filename) as csvfile: + d = csv.reader((row for row in csvfile if not row.startswith('#')), + delimiter=';') + for glyph_name, unicode_hex in d: + assert int(unicode_hex, 16) not in unicode_to_glyph_name + unicode_to_glyph_name[int(unicode_hex, 16)] = (glyph_name, ) + return unicode_to_glyph_name + + +UNICODE_TO_DINGBATS_NAME = parse_glyph_list(path.join(DATA_PATH, 'fonts', + 'zapfdingbats.txt')) + + +# Adobe Standard Encoding (glyph name to glyph code) +# from the Adobe Standard Encoding to Unicode table 1.0 (2011 July 12) +# by the Unicode Consortium +ADOBE_STANDARD_ENCODING = { + 'space': 0x20, + 'exclam': 0x21, + 'quotedbl': 0x22, + 'numbersign': 0x23, + 'dollar': 0x24, + 'percent': 0x25, + 'ampersand': 0x26, + 'quoteright': 0x27, + 'parenleft': 0x28, + 'parenright': 0x29, + 'asterisk': 0x2A, + 'plus': 0x2B, + 'comma': 0x2C, + 'hyphen': 0x2D, + 'period': 0x2E, + 'slash': 0x2F, + 'zero': 0x30, + 'one': 0x31, + 'two': 0x32, + 'three': 0x33, + 'four': 0x34, + 'five': 0x35, + 'six': 0x36, + 'seven': 0x37, + 'eight': 0x38, + 'nine': 0x39, + 'colon': 0x3A, + 'semicolon': 0x3B, + 'less': 0x3C, + 'equal': 0x3D, + 'greater': 0x3E, + 'question': 0x3F, + 'at': 0x40, + 'A': 0x41, + 'B': 0x42, + 'C': 0x43, + 'D': 0x44, + 'E': 0x45, + 'F': 0x46, + 'G': 0x47, + 'H': 0x48, + 'I': 0x49, + 'J': 0x4A, + 'K': 0x4B, + 'L': 0x4C, + 'M': 0x4D, + 'N': 0x4E, + 'O': 0x4F, + 'P': 0x50, + 'Q': 0x51, + 'R': 0x52, + 'S': 0x53, + 'T': 0x54, + 'U': 0x55, + 'V': 0x56, + 'W': 0x57, + 'X': 0x58, + 'Y': 0x59, + 'Z': 0x5A, + 'bracketleft': 0x5B, + 'backslash': 0x5C, + 'bracketright': 0x5D, + 'asciicircum': 0x5E, + 'underscore': 0x5F, + 'quoteleft': 0x60, + 'a': 0x61, + 'b': 0x62, + 'c': 0x63, + 'd': 0x64, + 'e': 0x65, + 'f': 0x66, + 'g': 0x67, + 'h': 0x68, + 'i': 0x69, + 'j': 0x6A, + 'k': 0x6B, + 'l': 0x6C, + 'm': 0x6D, + 'n': 0x6E, + 'o': 0x6F, + 'p': 0x70, + 'q': 0x71, + 'r': 0x72, + 's': 0x73, + 't': 0x74, + 'u': 0x75, + 'v': 0x76, + 'w': 0x77, + 'x': 0x78, + 'y': 0x79, + 'z': 0x7A, + 'braceleft': 0x7B, + 'bar': 0x7C, + 'braceright': 0x7D, + 'asciitilde': 0x7E, + 'exclamdown': 0xA1, + 'cent': 0xA2, + 'sterling': 0xA3, + 'fraction': 0xA4, + 'yen': 0xA5, + 'florin': 0xA6, + 'section': 0xA7, + 'currency': 0xA8, + 'quotesingle': 0xA9, + 'quotedblleft': 0xAA, + 'guillemotleft': 0xAB, + 'guilsinglleft': 0xAC, + 'guilsinglright': 0xAD, + 'fi': 0xAE, + 'fl': 0xAF, + 'endash': 0xB1, + 'dagger': 0xB2, + 'daggerdbl': 0xB3, + 'periodcentered': 0xB4, + 'paragraph': 0xB6, + 'bullet': 0xB7, + 'quotesinglbase': 0xB8, + 'quotedblbase': 0xB9, + 'quotedblright': 0xBA, + 'guillemotright': 0xBB, + 'ellipsis': 0xBC, + 'perthousand': 0xBD, + 'questiondown': 0xBF, + 'grave': 0xC1, + 'acute': 0xC2, + 'circumflex': 0xC3, + 'tilde': 0xC4, + 'macron': 0xC5, + 'breve': 0xC6, + 'dotaccent': 0xC7, + 'dieresis': 0xC8, + 'ring': 0xCA, + 'cedilla': 0xCB, + 'hungarumlaut': 0xCD, + 'ogonek': 0xCE, + 'caron': 0xCF, + 'emdash': 0xD0, + 'AE': 0xE1, + 'ordfeminine': 0xE3, + 'Lslash': 0xE8, + 'Oslash': 0xE9, + 'OE': 0xEA, + 'ordmasculine': 0xEB, + 'ae': 0xF1, + 'dotlessi': 0xF5, + 'lslash': 0xF8, + 'oslash': 0xF9, + 'oe': 0xFA, + 'germandbls': 0xFB} # LATIN SMALL LETTER SHARP S + + +ENCODINGS = {'AdobeStandardEncoding': ADOBE_STANDARD_ENCODING} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__init__.py new file mode 100644 index 000000000..953a6eb54 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__init__.py @@ -0,0 +1,202 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from logging import warning +from warnings import warn + +from ...font.style import FontVariant, FontWeight, FontSlant, FontWidth +from ...util import cached +from ...warnings import RinohWarning +from .. import Font, GlyphMetrics, LeafGetter, MissingGlyphException + +from .parse import OpenTypeParser +from .ids import NAME_PS_NAME, PLATFORM_WINDOWS, LANGUAGE_WINDOWS_EN_US + + +class OpenTypeFont(Font, OpenTypeParser): + units_per_em = LeafGetter('head', 'unitsPerEm') + encoding = None + + @property + def name(self): + names = self['name'].strings + return names[NAME_PS_NAME][PLATFORM_WINDOWS][LANGUAGE_WINDOWS_EN_US] + + @property + def bounding_box(self): + return self['head'].bounding_box + + fixed_pitch = LeafGetter('post', 'isFixedPitch') + italic_angle = LeafGetter('post', 'italicAngle') + ascender = LeafGetter('OS/2', 'sTypoAscender') + descender = LeafGetter('OS/2', 'sTypoDescender') + line_gap = LeafGetter('OS/2', 'sTypoLineGap') + cap_height = LeafGetter('OS/2', 'sCapHeight') + x_height = LeafGetter('OS/2', 'sxHeight') + stem_v = 50 + + def __init__(self, filename, weight=None, slant=None, width=None): + OpenTypeParser.__init__(self, filename) + slant_ = (self['OS/2'].oblique and FontSlant.OBLIQUE + or self['OS/2'].italic and FontSlant.ITALIC + or FontSlant.UPRIGHT) + weight = self._check('weight', weight, self['OS/2']['usWeightClass'], + FontWeight.to_name) + slant = self._check('slant', slant, slant_) + width = self._check('width', width, self['OS/2']['usWidthClass'], + FontWidth.to_name) + super().__init__(filename, weight, slant, width) + self._glyphs_by_code = self._create_glyph_metrics() + self._encoding, self._glyphs = \ + self._create_glyphs_by_char(self._glyphs_by_code) + self._suffixes = {} + self._ligatures = {} + self._kerning_pairs = {} + + def _check(self, attr, specified, determined, convert=lambda value: value): + if specified and specified != determined: + warning("{name}: specified font {attr} '{spec}' does not " + "match the {attr} reported by the font file ({rep})" + .format(name=self.name, attr=attr, spec=convert(specified), + rep=convert(determined))) + return specified + return determined + + def _create_glyph_metrics(self): + glyphs_by_code = {} + # TODO: extract bboxes from CFF: www.tug.org/TUGboat/tb24-3/bella.pdf + advance_width_table = self['hmtx']['advanceWidth'] + glyf_table = self['glyf'] if 'glyf' in self else None + for glyph_index, width in enumerate(advance_width_table): + bbox = (glyf_table[glyph_index].bounding_box + if glyf_table and glyph_index in glyf_table + else None) + glyph_metrics = GlyphMetrics(None, width, bbox, glyph_index) + glyphs_by_code[glyph_index] = glyph_metrics + return glyphs_by_code + + def _create_glyphs_by_char(self, glyphs_by_code): + # TODO: properly handle encodings + glyphs_by_char = {} + cmap_tables = self['cmap'] + for encoding in [UNICODE_20_FULL, WINDOWS_UNICODE_FULL, + UNICODE_20_BMP, WINDOWS_UNICODE_BMP, UNICODE_ISO, + UNICODE_11, UNICODE_10, WINDOWS_SYMBOL]: + try: + for ordinal, index in cmap_tables[encoding].mapping.items(): + glyphs_by_char[chr(ordinal)] = glyphs_by_code[index] + break + except KeyError: + continue + if encoding == WINDOWS_SYMBOL and ' ' not in glyphs_by_char: + first_char_index = self['OS/2']['usFirstCharIndex'] + index = cmap_tables[encoding].mapping[first_char_index] + glyphs_by_char[' '] = glyphs_by_code[index] + if not glyphs_by_char: + raise Exception + return encoding, glyphs_by_char + + _VARIANTS = {FontVariant.SMALL_CAPITAL: 'smcp', + FontVariant.OLDSTYLE_FIGURES: 'onum'} + + def get_glyph_metrics(self, char, variant): + try: + glyph = self._glyphs[char] + except KeyError: + warn('{} does not contain glyph for unicode index 0x{:04x} ({})' + .format(self.name, ord(char), char), RinohWarning) + raise MissingGlyphException(char) + + if variant in self._VARIANTS and 'GSUB' in self: + feature = self._VARIANTS[variant] + lookup_tables = self._get_lookup_tables('GSUB', feature, 'latn') + for lookup_table in lookup_tables: + try: + code = lookup_table.lookup(glyph.code) + return self._glyphs_by_code[code] + except KeyError: + pass + return glyph + + def _get_lookup_tables(self, table, feature, script='DFLT', language=None): + lookup_tables = self[table]['LookupList']['Lookup'] + try: + script_table = self[table]['ScriptList'].by_tag[script][0] + except KeyError: + if script != 'DFLT': + warn('{} does not support the script "{}". Trying default ' + 'script.'.format(self.name, script, RinohWarning)) + try: + return self._get_lookup_tables(table, feature) + except KeyError: + return [] + else: + warn('{} has no default script defined.' + .format(self.name, RinohWarning)) + raise + if language: + try: + lang_sys_table = script_table.by_tag[language][0] + except KeyError: + warn('{} does not support the language "{}". Falling back to ' + 'defaults.'.format(self.name, language, RinohWarning)) + lang_sys_table = script_table['DefaultLangSys'] + else: + lang_sys_table = script_table['DefaultLangSys'] + feature_indices = lang_sys_table['FeatureIndex'] + for index in feature_indices: + record = self[table]['FeatureList']['Record'][index] + if record['Tag'] == feature: + lookup_list_indices = record['Value']['LookupListIndex'] + return [lookup_tables[lookup_list_index] + for lookup_list_index in lookup_list_indices] + return [] + + @cached + def get_ligature(self, glyph, successor_glyph): + if 'GSUB' in self: + lookup_tables = self._get_lookup_tables('GSUB', 'liga', 'latn') + for lookup_table in lookup_tables: + try: + code = lookup_table.lookup(glyph.code, successor_glyph.code) + return self._glyphs_by_code[code] + except KeyError: + pass + return None + + @cached + def get_kerning(self, a, b): + if 'GPOS' in self: + lookup_tables = self._get_lookup_tables('GPOS', 'kern', 'latn') + # TODO: 'kern' lookup list indices can point to pair adjustment (2) + # or Chained Context positioning (8) lookup subtables + for lookup_table in lookup_tables: + try: + return lookup_table.lookup(a.code, b.code) + except KeyError: + pass + if 'kern' in self: + try: + return self['kern'][0].pairs[a.code][b.code] + except KeyError: + pass + return 0.0 + + +# Platform/Encoding IDs + +UNICODE_10 = (0, 0) +UNICODE_11 = (0, 1) +UNICODE_ISO = (0, 2) +UNICODE_20_BMP = (0, 3) +UNICODE_20_FULL = (0, 4) +UNICODE_UVS = (0, 5) +UNICODE_FULL = (0, 6) +WINDOWS_UNICODE_BMP = (3, 1) +WINDOWS_SYMBOL = (3, 0) +WINDOWS_UNICODE_FULL = (3, 10) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..d5c5e55b6 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/cff.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/cff.cpython-312.pyc new file mode 100644 index 000000000..15f410c56 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/cff.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/gpos.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/gpos.cpython-312.pyc new file mode 100644 index 000000000..33f6eab6c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/gpos.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/gsub.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/gsub.cpython-312.pyc new file mode 100644 index 000000000..32e8abc48 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/gsub.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/ids.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/ids.cpython-312.pyc new file mode 100644 index 000000000..fb17c29e2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/ids.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/layout.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/layout.cpython-312.pyc new file mode 100644 index 000000000..0661ea72d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/layout.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/macglyphs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/macglyphs.cpython-312.pyc new file mode 100644 index 000000000..61ece8f24 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/macglyphs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/other.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/other.cpython-312.pyc new file mode 100644 index 000000000..a2c3cdc29 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/other.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/parse.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/parse.cpython-312.pyc new file mode 100644 index 000000000..d7544f773 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/parse.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/required.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/required.cpython-312.pyc new file mode 100644 index 000000000..837759806 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/required.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/truetype.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/truetype.cpython-312.pyc new file mode 100644 index 000000000..463c45bea Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/__pycache__/truetype.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/cff.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/cff.py new file mode 100644 index 000000000..f184b0fc9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/cff.py @@ -0,0 +1,201 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import struct + +from binascii import hexlify +from io import BytesIO + + +def grab(file, data_format): + data = file.read(struct.calcsize(data_format)) + return struct.unpack('>' + data_format, data) + + +card8 = lambda file: grab(file, 'B')[0] +card16 = lambda file: grab(file, 'h')[0] +offsize = card8 + +def offset(offset_size): + return lambda file: grab(file, ('B', 'H', 'I', 'L')[offset_size - 1])[0] + + +class Section(dict): + def __init__(self, file, offset=None): + if offset: + file.seek(offset) + for name, reader in self.entries: + self[name] = reader(file) + + +class Header(Section): + entries = [('major', card8), + ('minor', card8), + ('hdrSize', card8), + ('offSize', card8)] + + +class OperatorExeption(Exception): + def __init__(self, code): + self.code = code + + +class Operator(object): + def __init__(self, name, type, default=None): + self.name = name + self.type = type + self.default = default + + def __repr__(self): + return "".format(self.name) + + +number = lambda array: array[0] +sid = number +boolean = lambda array: number(array) == 1 +array = lambda array: array + +def delta(array): + delta = [] + last_value = 0 + for item in array: + delta.append(last_value + item) + last_value = item + + +class Dict(dict): + # values (operands) - key (operator) pairs + def __init__(self, file, length, offset=None): + if offset is not None: + file.seek(offset) + else: + offset = file.tell() + operands = [] + while file.tell() < offset + length: + try: + operands.append(self._next_token(file)) + except OperatorExeption as e: + operator = self.operators[e.code] + self[operator.name] = operator.type(operands) + operands = [] + + def _next_token(self, file): + b0 = card8(file) + if b0 == 12: + raise OperatorExeption((12, card8(file))) + elif b0 <= 22: + raise OperatorExeption(b0) + elif b0 == 28: + return grab(file, 'h')[0] + elif b0 == 29: + return grab(file, 'i')[0] + elif b0 == 30: # real + real_string = '' + while True: + real_string += hexlify(file.read(1)).decode('ascii') + if 'f' in real_string: + real_string = (real_string.replace('a', '.') + .replace('b', 'E') + .replace('c', 'E-') + .replace('e', '-') + .rstrip('f')) + return float(real_string) + elif b0 < 32: + raise NotImplementedError() + elif b0 < 247: + return b0 - 139 + elif b0 < 251: + b1 = card8(file) + return (b0 - 247) * 256 + b1 + 108 + elif b0 < 255: + b1 = card8(file) + return - (b0 - 251) * 256 - b1 - 108 + else: + raise NotImplementedError() + + +class TopDict(Dict): + operators = {0: Operator('version', sid), + 1: Operator('Notice', sid), + (12, 0): Operator('Copyright', sid), + 2: Operator('FullName', sid), + 3: Operator('FamilyName', sid), + 4: Operator('Weight', sid), + (12, 1): Operator('isFixedPitch', boolean, False), + (12, 2): Operator('ItalicAngle', number, 0), + (12, 3): Operator('UnderlinePosition', number, -100), + (12, 4): Operator('UnderlineThickness', number, 50), + (12, 5): Operator('PaintType', number, 0), + (12, 6): Operator('CharstringType', number, 2), + (12, 7): Operator('FontMatrix', array, [0.001, 0, 0, 0.001, 0, 0]), + 13: Operator('UniqueID', number), + 5: Operator('FontBBox', array, [0, 0, 0, 0]), + (12, 8): Operator('StrokeWidth', number, 0), + 14: Operator('XUID', array), + 15: Operator('charset', number, 0), # charset offset (0) + 16: Operator('Encoding', number, 0), # encoding offset (0) + 17: Operator('CharStrings', number), # CharStrings offset (0) + 18: Operator('Private', array), # Private DICT size + # and offset (0) + (12, 20): Operator('SyntheticBase', number), # synthetic base font index + (12, 21): Operator('PostScript', sid), # embedded PostScript language code + (12, 22): Operator('BaseFontName', sid), # (added as needed by Adobe-based technology) + (12, 23): Operator('BaseFontBlend', delta)} # (added as needed by Adobe-based technology) + + +class Index(list): + """Array of variable-sized objects""" + def __init__(self, file, offset_=None): + if offset_ is not None: + file.seek(offset_) + count = card16(file) + offset_size = card8(file) + self.offsets = [] + self.sizes = [] + for i in range(count + 1): + self.offsets.append(offset(offset_size)(file)) + self.offset_reference = file.tell() - 1 + for i in range(count): + self.sizes.append(self.offsets[i + 1] - self.offsets[i]) + + +class NameIndex(Index): + def __init__(self, file, offset=None): + super().__init__(file, offset) + for name_offset, size in zip(self.offsets, self.sizes): + file.seek(self.offset_reference + name_offset) + name = file.read(size).decode('ascii') + self.append(name) + + +class TopDictIndex(Index): + def __init__(self, file, offset=None): + super().__init__(file, offset) + for dict_offset, size in zip(self.offsets, self.sizes): + self.append(TopDict(file, size, self.offset_reference + dict_offset)) + + +class CompactFontFormat(object): + def __init__(self, file, offset): + if offset is not None: + file.seek(offset) + self.header = Header(file) + assert self.header['major'] == 1 + self.name = NameIndex(file, offset + self.header['hdrSize']) + self.top_dicts = TopDictIndex(file) + #String INDEX + #Global Subr INDEX + # ------------------- + #Encodings + #Charsets + #FDSelect (CIDFonts only) + #CharStrings INDEX (per-font) <========================================= + #Font DICT INDEX (per-font, CIDFonts only) + #Private DICT (per-font) + #Local Subr INDEX (per-font or per-Private DICT for CIDFonts) + #Copyright and Trademark Notices diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/gpos.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/gpos.py new file mode 100644 index 000000000..4281ffd5e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/gpos.py @@ -0,0 +1,279 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import struct + +from .parse import OpenTypeTable, MultiFormatTable, Record +from .parse import int16, uint16, ushort, ulong, Packed +from .parse import array, context, context_array, indirect, indirect_array +from .layout import LayoutTable, Coverage, ClassDefinition, Device +from ...util import cached_property + + +class ValueFormat(Packed): + reader = uint16 + fields = [('XPlacement', 0x0001, bool), + ('YPlacement', 0x0002, bool), + ('XAdvance', 0x0004, bool), + ('YAdvance', 0x0008, bool), + ('XPlaDevice', 0x0010, bool), + ('YPlaDevice', 0x0020, bool), + ('XAdvDevice', 0x0040, bool), + ('YAdvDevice', 0x0080, bool)] + formats = {'XPlacement': 'h', + 'YPlacement': 'h', + 'XAdvance': 'h', + 'YAdvance': 'h', + 'XPlaDevice': 'H', + 'YPlaDevice': 'H', + 'XAdvDevice': 'H', + 'YAdvDevice': 'H'} + + @cached_property + def data_format(self): + data_format = '' + for name, present in self.items(): + if present: + data_format += self.formats[name] + return data_format + + @cached_property + def present_keys(self): + keys = [] + for name, present in self.items(): + if present: + keys.append(name) + return keys + + +class ValueRecord(OpenTypeTable): + formats = {'XPlacement': int16, + 'YPlacement': int16, + 'XAdvance': int16, + 'YAdvance': int16, + 'XPlaDevice': indirect(Device), + 'YPlaDevice': indirect(Device), + 'XAdvDevice': indirect(Device), + 'YAdvDevice': indirect(Device)} + + def __init__(self, file, value_format): + super().__init__(file) + for name, present in value_format.items(): + if present: + self[name] = self.formats[name](file) + + +class Anchor(MultiFormatTable): + entries = [('AnchorFormat', uint16), + ('XCoordinate', int16), + ('YCoordinate', int16)] + formats = {2: [('AnchorPoint', uint16)], + 3: [('XDeviceTable', indirect(Device)), + ('YDeviceTable', indirect(Device))]} + + +class MarkRecord(Record): + entries = [('Class', uint16), + ('MarkAnchor', indirect(Anchor))] + + +class MarkArray(OpenTypeTable): + entries = [('MarkCount', uint16), + ('MarkRecord', context_array(MarkRecord, 'MarkCount'))] + + +class SingleAdjustmentSubtable(MultiFormatTable): + entries = [('PosFormat', uint16), + ('Coverage', indirect(Coverage)), + ('ValueFormat', ValueFormat)] + formats = {1: [('ValueRecord', context(ValueRecord, 'ValueFormat'))], + 2: [('ValueCount', uint16), + ('ValueRecord', context_array(context(ValueRecord, + 'ValueFormat'), + 'ValueCount'))]} + + +class PairSetTable(OpenTypeTable): + entries = [('PairValueCount', uint16)] + + def __init__(self, file, file_offset, format_1, format_2): + super().__init__(file, file_offset) + record_format = format_1.data_format + format_2.data_format + value_1_length = len(format_1) + format_1_keys = format_1.present_keys + format_2_keys = format_2.present_keys + pvr_struct = struct.Struct('>H' + record_format) + pvr_size = pvr_struct.size + pvr_list = [] + self.by_second_glyph_id = {} + for i in range(self['PairValueCount']): + record_data = pvr_struct.unpack(file.read(pvr_size)) + second_glyph = record_data[0] + value_1 = {} + value_2 = {} + for i, key in enumerate(format_1_keys): + value_1[key] = record_data[1 + i] + for i, key in enumerate(format_2_keys): + value_2[key] = record_data[1 + value_1_length + i] + pvr = {'Value1': value_1, + 'Value2': value_2} + pvr_list.append(pvr) + self.by_second_glyph_id[second_glyph] = pvr + self['PairValueRecord'] = pvr_list + + +class PairAdjustmentSubtable(MultiFormatTable): + entries = [('PosFormat', uint16), + ('Coverage', indirect(Coverage)), + ('ValueFormat1', ValueFormat), + ('ValueFormat2', ValueFormat)] + formats = {1: [('PairSetCount', uint16), + ('PairSet', indirect_array(PairSetTable, 'PairSetCount', + 'ValueFormat1', 'ValueFormat2'))], + 2: [('ClassDef1', indirect(ClassDefinition)), + ('ClassDef2', indirect(ClassDefinition)), + ('Class1Count', uint16), + ('Class2Count', uint16)]} + + def __init__(self, file, file_offset=None): + super().__init__(file, file_offset) + format_1, format_2 = self['ValueFormat1'], self['ValueFormat2'] + if self['PosFormat'] == 2: + record_format = format_1.data_format + format_2.data_format + c2r_struct = struct.Struct('>' + record_format) + c2r_size = c2r_struct.size + value_1_length = len(format_1) + format_1_keys = format_1.present_keys + format_2_keys = format_2.present_keys + class_1_record = [] + for i in range(self['Class1Count']): + class_2_record = [] + for j in range(self['Class2Count']): + record_data = c2r_struct.unpack(file.read(c2r_size)) + value_1 = {} + value_2 = {} + for i, key in enumerate(format_1_keys): + value_1[key] = record_data[i] + for i, key in enumerate(format_2_keys): + value_2[key] = record_data[value_1_length + i] + class_2_record.append({'Value1': value_1, + 'Value2': value_2}) + class_1_record.append(class_2_record) + self['Class1Record'] = class_1_record + + def lookup(self, a_id, b_id): + if self['PosFormat'] == 1: + try: + index = self['Coverage'].index(a_id) + except ValueError: + raise KeyError + pair_value_record = self['PairSet'][index].by_second_glyph_id[b_id] + return pair_value_record['Value1']['XAdvance'] + elif self['PosFormat'] == 2: + a_class = self['ClassDef1'].class_number(a_id) + b_class = self['ClassDef2'].class_number(b_id) + class_2_record = self['Class1Record'][a_class][b_class] + return class_2_record['Value1']['XAdvance'] + + +class EntryExitRecord(OpenTypeTable): + entries = [('EntryAnchor', indirect(Anchor)), + ('ExitAnchor', indirect(Anchor))] + + +class CursiveAttachmentSubtable(OpenTypeTable): + entries = [('PosFormat', uint16), + ('Coverage', indirect(Coverage)), + ('EntryExitCount', uint16), + ('EntryExitRecord', context_array(EntryExitRecord, + 'EntryExitCount'))] + + def lookup(self, a_id, b_id): + assert self['PosFormat'] == 1 + try: + a_index = self['Coverage'].index(a_id) + b_index = self['Coverage'].index(b_id) + except ValueError: + raise KeyError + a_entry_exit = self['EntryExitRecord'][a_index] + b_entry_exit = self['EntryExitRecord'][b_index] + raise NotImplementedError + + +class MarkCoverage(OpenTypeTable): + pass + + +class BaseCoverage(OpenTypeTable): + pass + + +class Mark2Array(OpenTypeTable): + pass + + +class BaseRecord(OpenTypeTable): +## entries = [('BaseAnchor', indirect_array(Anchor, 'ClassCount'))] + + def __init__(self, file, file_offset, class_count): + super().__init__(self, file, file_offset) +## self['BaseAnchor'] = indirect_array(Anchor, 'ClassCount'])(file) + + +class BaseArray(OpenTypeTable): + entries = [('BaseCount', uint16)] +## ('BaseRecord', context_array(BaseRecord, 'BaseCount'))] + + def __init__(self, file, file_offset, class_count): + super().__init__(self, file, file_offset) + self['BaseRecord'] = array(BaseRecord, self['BaseCount'], + class_count=class_count)(file) + + +class MarkToBaseAttachmentSubtable(OpenTypeTable): + entries = [('PosFormat', uint16), + ('MarkCoverage', indirect(MarkCoverage)), + ('BaseCoverage', indirect(BaseCoverage)), + ('ClassCount', uint16), + ('MarkArray', indirect(MarkArray)), + ('BaseArray', indirect(BaseArray, 'ClassCount'))] + + +class MarkToMarkAttachmentSubtable(OpenTypeTable): + entries = [('PosFormat', uint16), + ('Mark1Coverage', indirect(MarkCoverage)), + ('Mark1Coverage', indirect(MarkCoverage)), + ('ClassCount', uint16), + ('Mark1Array', indirect(MarkArray)), + ('Mark1Array', indirect(Mark2Array))] + + +class ExtensionPositioning(OpenTypeTable): + entries = [('PosFormat', ushort), + ('ExtensionLookupType', ushort), + ('ExtensionOffset', ulong)] + + def __init__(self, file, file_offset=None): + super().__init__(file, file_offset=file_offset) + subtable_class = GposTable.lookup_types[self['ExtensionLookupType']] + table_offset = file_offset + self['ExtensionOffset'] + self.subtable = subtable_class(file, table_offset) + + def lookup(self, *args, **kwargs): + return self.subtable.lookup(*args, **kwargs) + + +class GposTable(LayoutTable): + """Glyph positioning table""" + tag = 'GPOS' + lookup_types = {1: SingleAdjustmentSubtable, + 2: PairAdjustmentSubtable, + 3: CursiveAttachmentSubtable, + 4: MarkToBaseAttachmentSubtable, + 6: MarkToMarkAttachmentSubtable, + 9: ExtensionPositioning} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/gsub.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/gsub.py new file mode 100644 index 000000000..1c3294df2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/gsub.py @@ -0,0 +1,144 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .parse import OpenTypeTable, MultiFormatTable +from .parse import uint16, ushort, ulong, glyph_id, array, indirect +from .parse import context_array, indirect_array +from .layout import LayoutTable +from .layout import Coverage + + +# Single substitution (subtable format 1) +class SingleSubTable(MultiFormatTable): + entries = [('SubstFormat', uint16), + ('Coverage', indirect(Coverage))] + formats = {1: [('DeltaGlyphID', glyph_id)], + 2: [('GlyphCount', uint16), + ('Substitute', context_array(glyph_id, 'GlyphCount'))]} + + def lookup(self, glyph_id): + try: + index = self['Coverage'].index(glyph_id) + except ValueError: + raise KeyError + if self['SubstFormat'] == 1: + return index + self['DeltaGlyphID'] + else: + return self['Substitute'][index] + + +# Multiple subtitution (subtable format 2) +class Sequence(OpenTypeTable): + entries = [('GlyphCount', uint16), + ('Substitute', context_array(glyph_id, 'GlyphCount'))] + + +class MultipleSubTable(OpenTypeTable): + entries = [('SubstFormat', uint16), + ('Coverage', indirect(Coverage)), + ('SequenceCount', uint16), + ('Sequence', context_array(Sequence, 'SequenceCount'))] + + def lookup(self, glyph_id): + try: + index = self['Coverage'].index(glyph_id) + except ValueError: + raise KeyError + raise NotImplementedError + + +# Alternate subtitution (subtable format 3) +class AlternateSubTable(OpenTypeTable): + pass + + +# Ligature substitution (subtable format 4) +class Ligature(OpenTypeTable): + entries = [('LigGlyph', glyph_id), + ('CompCount', uint16)] + + def __init__(self, file, file_offset): + super().__init__(file, file_offset) + self['Component'] = array(glyph_id, self['CompCount'] - 1)(file) + + +class LigatureSet(OpenTypeTable): + entries = [('LigatureCount', uint16), + ('Ligature', indirect_array(Ligature, 'LigatureCount'))] + + +class LigatureSubTable(OpenTypeTable): + entries = [('SubstFormat', uint16), + ('Coverage', indirect(Coverage)), + ('LigSetCount', uint16), + ('LigatureSet', indirect_array(LigatureSet, 'LigSetCount'))] + + def lookup(self, a_id, b_id): + try: + index = self['Coverage'].index(a_id) + except ValueError: + raise KeyError + ligature_set = self['LigatureSet'][index] + for ligature in ligature_set['Ligature']: + if ligature['Component'] == [b_id]: + return ligature['LigGlyph'] + raise KeyError + + +# Chaining contextual substitution (subtable format 6) +class ChainSubRule(OpenTypeTable): + pass +## entries = [('BacktrackGlyphCount', uint16), +## ('Backtrack', context_array(glyph_id, 'BacktrackGlyphCount')), +## ('InputGlyphCount', uint16), +## ('Input', context_array(glyph_id, 'InputGlyphCount', +## lambda count: count - 1)), +## ('LookaheadGlyphCount', uint16), +## ('LookAhead', context_array(glyph_id, 'LookaheadGlyphCount')), +## ('SubstCount', uint16), +## ('SubstLookupRecord', context_array(glyph_id, 'SubstCount'))] + + +class ChainSubRuleSet(OpenTypeTable): + entries = [('ChainSubRuleCount', uint16), + ('ChainSubRule', indirect(ChainSubRule))] + + +class ChainingContextSubtable(MultiFormatTable): + entries = [('SubstFormat', uint16)] + formats = {1: [('Coverage', indirect(Coverage)), + ('ChainSubRuleSetCount', uint16), + ('ChainSubRuleSet', indirect_array(ChainSubRuleSet, + 'ChainSubRuleSetCount'))]} + + +# Extension substitution (subtable format 7) +class ExtensionSubstitution(OpenTypeTable): + entries = [('SubstFormat', ushort), + ('ExtensionLookupType', ushort), + ('ExtensionOffset', ulong)] + + def __init__(self, file, file_offset=None): + super().__init__(file, file_offset=file_offset) + subtable_class = GsubTable.lookup_types[self['ExtensionLookupType']] + table_offset = file_offset + self['ExtensionOffset'] + self.subtable = subtable_class(file, table_offset) + + def lookup(self, *args, **kwargs): + return self.subtable.lookup(*args, **kwargs) + + +class GsubTable(LayoutTable): + """Glyph substitution table""" + tag = 'GSUB' + lookup_types = {1: SingleSubTable, + 2: MultipleSubTable, + 3: AlternateSubTable, + 4: LigatureSubTable, + #6: ChainingContextSubtable} + 7: ExtensionSubstitution} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/ids.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/ids.py new file mode 100644 index 000000000..7261ccca5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/ids.py @@ -0,0 +1,49 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +PLATFORM_UNICODE = 0 +PLATFORM_MACINTOSH = 1 +PLATFORM_ISO = 2 +PLATFORM_WINDOWS = 3 +PLATFORM_CUSTOM = 4 + +LANGUAGE_WINDOWS_EN_US = 0x0409 + +NAME_COPYRIGHT = 0 +NAME_FAMILY = 1 +NAME_SUBFAMILY = 2 +NAME_UID = 3 +NAME_FULL = 4 +NAME_VERSION = 5 +NAME_PS_NAME = 6 +NAME_TRADEMARK = 7 +NAME_MANUFACTURER = 8 +NAME_DESIGNER = 9 +NAME_DESCRIPTION = 10 +NAME_VENDOR_URL = 11 +NAME_DESIGNER_URL = 12 +NAME_LICENSE = 13 +NAME_LICENSE_URL = 14 +NAME_TYPOGRAPHIC_FAMILY = 16 +NAME_TYPOGRAPHIC_SUBFAMILY = 17 +# ... +NAME_WWS_FAMILY = 21 +NAME_WWS_SUBFAMILY = 22 +# ... + +UNICODE_1_0 = 0 +UNICODE_1_1 = 1 +UNICODE_ISO_IEC_10646 = 2 +UNICODE_2_0_BMP = 3 +UNICODE_2_0_FULL = 4 +UNICODE_VAR_SEQ = 5 +UNICODE_FULL = 6 + +ISO_ASCII = 0 +ISO_10646 = 1 +ISO_8859_1 = 2 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/layout.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/layout.py new file mode 100644 index 000000000..c20c4eedb --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/layout.py @@ -0,0 +1,205 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .parse import OpenTypeTable, MultiFormatTable, Record, context_array +from .parse import fixed, array, uint16, tag, glyph_id, offset, indirect, Packed + + +class ListRecord(Record): + entries = [('Tag', tag), + ('Offset', offset)] + + def parse_value(self, file, file_offset, entry_type): + self['Value'] = entry_type(file, file_offset + self['Offset']) + + +class ListTable(OpenTypeTable): + entry_type = None + entries = [('Count', uint16), + ('Record', context_array(ListRecord, 'Count'))] + + def __init__(self, file, file_offset, **kwargs): + super().__init__(file, file_offset) + self.by_tag = {} + for record in self['Record']: + record.parse_value(file, file_offset, self.entry_type) + tag_list = self.by_tag.setdefault(record['Tag'], []) + tag_list.append(record['Value']) + + +class LangSysTable(OpenTypeTable): + entries = [('LookupOrder', offset), + ('ReqFeatureIndex', uint16), + ('FeatureCount', uint16), + ('FeatureIndex', context_array(uint16, 'FeatureCount'))] + + +class ScriptTable(ListTable): + entry_type = LangSysTable + entries = [('DefaultLangSys', indirect(LangSysTable))] + ListTable.entries + + +class ScriptListTable(ListTable): + entry_type = ScriptTable + + +class FeatureTable(OpenTypeTable): + entries = [('FeatureParams', offset), + ('LookupCount', uint16), + ('LookupListIndex', context_array(uint16, 'LookupCount'))] + + def __init__(self, file, offset): + super().__init__(file, offset) + if self['FeatureParams']: + # TODO: parse Feature Parameters + pass + else: + del self['FeatureParams'] + + +class FeatureListTable(ListTable): + entry_type = FeatureTable + + +class LookupFlag(Packed): + reader = uint16 + fields = [('RightToLeft', 0x0001, bool), + ('IgnoreBaseGlyphs', 0x0002, bool), + ('IgnoreLigatures', 0x0004, bool), + ('IgnoreMarks', 0x0008, bool), + ('UseMarkFilteringSet', 0x010, bool), + ('MarkAttachmentType', 0xFF00, int)] + + +class RangeRecord(OpenTypeTable): + entries = [('Start', glyph_id), + ('End', glyph_id), + ('StartCoverageIndex', uint16)] + + +class Coverage(MultiFormatTable): + entries = [('CoverageFormat', uint16)] + formats = {1: [('GlyphCount', uint16), + ('GlyphArray', context_array(glyph_id, 'GlyphCount'))], + 2: [('RangeCount', uint16), + ('RangeRecord', context_array(RangeRecord, 'RangeCount'))]} + + def index(self, glyph_id): + if self['CoverageFormat'] == 1: + return self['GlyphArray'].index(glyph_id) + else: + for record in self['RangeRecord']: + if record['Start'] <= glyph_id <= record['End']: + return (record['StartCoverageIndex'] + + glyph_id - record['Start']) + raise ValueError + + +class ClassRangeRecord(OpenTypeTable): + entries = [('Start', glyph_id), + ('End', glyph_id), + ('Class', uint16)] + + +class ClassDefinition(MultiFormatTable): + entries = [('ClassFormat', uint16)] + formats = {1: [('StartGlyph', glyph_id), + ('GlyphCount', uint16), + ('ClassValueArray', context_array(uint16, 'GlyphCount'))], + 2: [('ClassRangeCount', uint16), + ('ClassRangeRecord', context_array(ClassRangeRecord, + 'ClassRangeCount'))]} + + def class_number(self, glyph_id): + if self['ClassFormat'] == 1: + index = glyph_id - self['StartGlyph'] + if 0 <= index < self['GlyphCount']: + return self['ClassValueArray'][index] + else: + for record in self['ClassRangeRecord']: + if record['Start'] <= glyph_id <= record['End']: + return record['Class'] + return 0 + + +def subtables(subtable_type, file, file_offset, offsets): + """Skip lookup types/subtables that are not yet implemented""" + for subtable_offset in offsets: + try: + yield subtable_type(file, file_offset + subtable_offset) + except KeyError: + continue + + +class LookupTable(OpenTypeTable): + entries = [('LookupType', uint16), + ('LookupFlag', LookupFlag), + ('SubTableCount', uint16)] + + def __init__(self, file, file_offset, subtable_types): + super().__init__(file, file_offset) + offsets = array(uint16, self['SubTableCount'])(file) + if self['LookupFlag']['UseMarkFilteringSet']: + self['MarkFilteringSet'] = uint16(file) + subtable_type = subtable_types[self['LookupType']] + self['SubTable'] = list(subtables(subtable_type, file, file_offset, + offsets)) + + def lookup(self, *args, **kwargs): + for subtable in self['SubTable']: + try: + return subtable.lookup(*args, **kwargs) + except KeyError: + pass + raise KeyError + + +class DelayedList(list): + def __init__(self, reader, file, file_offset, item_offsets): + super().__init__([None] * len(item_offsets)) + self._reader = reader + self._file = file + self._offsets = [file_offset + item_offset + for item_offset in item_offsets] + + def __getitem__(self, index): + if super().__getitem__(index) is None: + self[index] = self._reader(self._file, self._offsets[index]) + return super().__getitem__(index) + + +class LookupListTable(OpenTypeTable): + entries = [('LookupCount', uint16)] + + def __init__(self, file, file_offset, types): + super().__init__(file, file_offset) + lookup_offsets = array(offset, self['LookupCount'])(file) + lookup_reader = lambda file, file_offset: LookupTable(file, file_offset, + types) + self['Lookup'] = DelayedList(lookup_reader, file, file_offset, + lookup_offsets) + + +class LayoutTable(OpenTypeTable): + entries = [('Version', fixed), + ('ScriptList', indirect(ScriptListTable)), + ('FeatureList', indirect(FeatureListTable))] + + def __init__(self, file, file_offset): + super().__init__(file, file_offset) + lookup_list_offset = offset(file) + self['LookupList'] = LookupListTable(file, + file_offset + lookup_list_offset, + self.lookup_types) + + +class Device(OpenTypeTable): + entries = [('StartSize', uint16), + ('EndSize', uint16), + ('DeltaFormat', uint16), + ('DeltaValue', uint16)] diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/macglyphs.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/macglyphs.py new file mode 100644 index 000000000..288e4eed9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/macglyphs.py @@ -0,0 +1,267 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +# from Apple's TrueType Reference Manual (December 18, 2003) +MAC_GLYPHS = ('.notdef', + '.null', + 'nonmarkingreturn', + 'space', + 'exclam', + 'quotedbl', + 'numbersign', + 'dollar', + 'percent', + 'ampersand', + 'quotesingle', + 'parenleft', + 'parenright', + 'asterisk', + 'plus', + 'comma', + 'hyphen', + 'period', + 'slash', + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'colon', + 'semicolon', + 'less', + 'equal', + 'greater', + 'question', + 'at', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + 'bracketleft', + 'backslash', + 'bracketright', + 'asciicircum', + 'underscore', + 'grave', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + 'braceleft', + 'bar', + 'braceright', + 'asciitilde', + 'Adieresis', + 'Aring', + 'Ccedilla', + 'Eacute', + 'Ntilde', + 'Odieresis', + 'Udieresis', + 'aacute', + 'agrave', + 'acircumflex', + 'adieresis', + 'atilde', + 'aring', + 'ccedilla', + 'eacute', + 'egrave', + 'ecircumflex', + 'edieresis', + 'iacute', + 'igrave', + 'icircumflex', + 'idieresis', + 'ntilde', + 'oacute', + 'ograve', + 'ocircumflex', + 'odieresis', + 'otilde', + 'uacute', + 'ugrave', + 'ucircumflex', + 'udieresis', + 'dagger', + 'degree', + 'cent', + 'sterling', + 'section', + 'bullet', + 'paragraph', + 'germandbls', + 'registered', + 'copyright', + 'trademark', + 'acute', + 'dieresis', + 'notequal', + 'AE', + 'Oslash', + 'infinity', + 'plusminus', + 'lessequal', + 'greaterequal', + 'yen', + 'mu', + 'partialdiff', + 'summation', + 'product', + 'pi', + 'integral', + 'ordfeminine', + 'ordmasculine', + 'Omega', + 'ae', + 'oslash', + 'questiondown', + 'exclamdown', + 'logicalnot', + 'radical', + 'florin', + 'approxequal', + 'Delta', + 'guillemotleft', + 'guillemotright', + 'ellipsis', + 'nonbreakingspace', + 'Agrave', + 'Atilde', + 'Otilde', + 'OE', + 'oe', + 'endash', + 'emdash', + 'quotedblleft', + 'quotedblright', + 'quoteleft', + 'quoteright', + 'divide', + 'lozenge', + 'ydieresis', + 'Ydieresis', + 'fraction', + 'currency', + 'guilsinglleft', + 'guilsinglright', + 'fi', + 'fl', + 'daggerdbl', + 'periodcentered', + 'quotesinglbase', + 'quotedblbase', + 'perthousand', + 'Acircumflex', + 'Ecircumflex', + 'Aacute', + 'Edieresis', + 'Egrave', + 'Iacute', + 'Icircumflex', + 'Idieresis', + 'Igrave', + 'Oacute', + 'Ocircumflex', + 'apple', + 'Ograve', + 'Uacute', + 'Ucircumflex', + 'Ugrave', + 'dotlessi', + 'circumflex', + 'tilde', + 'macron', + 'breve', + 'dotaccent', + 'ring', + 'cedilla', + 'hungarumlaut', + 'ogonek', + 'caron', + 'Lslash', + 'lslash', + 'Scaron', + 'scaron', + 'Zcaron', + 'zcaron', + 'brokenbar', + 'Eth', + 'eth', + 'Yacute', + 'yacute', + 'Thorn', + 'thorn', + 'minus', + 'multiply', + 'onesuperior', + 'twosuperior', + 'threesuperior', + 'onehalf', + 'onequarter', + 'threequarters', + 'franc', + 'Gbreve', + 'gbreve', + 'Idotaccent', + 'Scedilla', + 'scedilla', + 'Cacute', + 'cacute', + 'Ccaron', + 'ccaron', + 'dcroat') diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/other.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/other.py new file mode 100644 index 000000000..6e91f3edd --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/other.py @@ -0,0 +1,51 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .parse import OpenTypeTable, ushort, fword, array, Packed + + +class KerningCoverage(Packed): + reader = ushort + fields = [('horizontal', 0x01, bool), + ('minimum', 0x02, bool), + ('cross-stream', 0x04, bool), + ('override', 0x08, bool), + ('format', 0xF0, int),] + + +class KernSubTable(OpenTypeTable): + """Kerning subtable""" + entries = [('version', ushort), + ('length', ushort), + ('coverage', KerningCoverage)] + + def __init__(self, file, offset): + super().__init__(file, offset) + if self['coverage']['format'] == 0: + self.pairs = {} + (n_pairs, search_range, + entry_selector, range_shift) = array(ushort, 4)(file) + for i in range(n_pairs): + left, right, value = ushort(file), ushort(file), fword(file) + left_dict = self.pairs.setdefault(left, {}) + left_dict[right] = value + else: + raise NotImplementedError + + +class KernTable(OpenTypeTable): + """Kerning table (only for TrueType outlines)""" + tag = 'kern' + entries = [('version', ushort), + ('nTables', ushort)] + + def __init__(self, file, offset): + super().__init__(file, offset) + for i in range(self['nTables']): + subtable = KernSubTable(file, file.tell()) + self[subtable['coverage']['format']] = subtable diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/parse.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/parse.py new file mode 100644 index 000000000..b8d2ee0a4 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/parse.py @@ -0,0 +1,213 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import hashlib, math, io, struct +from datetime import datetime, timedelta +from collections import OrderedDict + +from ...util import all_subclasses + + +def create_reader(data_format, process_struct=lambda data: data[0]): + data_struct = struct.Struct('>' + data_format) + def reader(file, **kwargs): + data = data_struct.unpack(file.read(data_struct.size)) + return process_struct(data) + return reader + + +# using the names and datatypes from the OpenType specification +# http://www.microsoft.com/typography/otspec/ +byte = create_reader('B') +char = create_reader('b') +ushort = create_reader('H') +short = create_reader('h') +ulong = create_reader('L') +long = create_reader('l') +fixed = create_reader('L', lambda data: data[0] / 2**16) +int16 = fword = short +uint16 = ufword = ushort +uint24 = create_reader('3B', lambda data: sum([byte << (2 - i) + for i, byte in enumerate(data)])) +string = create_reader('4s', lambda data: data[0].decode('ascii').strip()) +tag = string +glyph_id = uint16 +offset = uint16 + +longdatetime = create_reader('q', lambda data: datetime(1904, 1, 1) + + timedelta(seconds=data[0])) + + +class Packed(OrderedDict): + reader = None + fields = [] + + def __init__(self, file, **kwargs): + super().__init__(self) + self.value = self.__class__.reader(file) + for name, mask, processor in self.fields: + self[name] = processor(self.value & mask) + + +def array(reader, length): + def array_reader(file, **kwargs): + return [reader(file, **kwargs) for _ in range(length)] + return array_reader + + +def context(reader, *indirect_args): + def context_reader(file, base, table): + args = [table[key] for key in indirect_args] + return reader(file, *args) + return context_reader + + +def context_array(reader, count_key, *indirect_args, multiplier=1): + def context_array_reader(file, table, **kwargs): + length = int(table[count_key] * multiplier) + args = [table[key] for key in indirect_args] + return array(reader, length)(file, *args, table=table, **kwargs) + return context_array_reader + + +def indirect(reader, *indirect_args, offset_reader=offset): + def indirect_reader(file, base, table, **kwargs): + indirect_offset = offset_reader(file) + restore_position = file.tell() + args = [table[key] for key in indirect_args] + result = reader(file, base + indirect_offset, *args, **kwargs) + file.seek(restore_position) + return result + return indirect_reader + + +def indirect_array(reader, count_key, *indirect_args): + def indirect_array_reader(file, base, table): + offsets = array(offset, table[count_key])(file) + args = [table[key] for key in indirect_args] + return [reader(file, base + entry_offset, *args) + for entry_offset in offsets] + return indirect_array_reader + + +class OpenTypeTableBase(OrderedDict): + entries = [] + + def __init__(self, file, file_offset=None, **kwargs): + super().__init__() + if file_offset is None: + file_offset = kwargs.pop('base', None) + self.parse(file, file_offset, self.entries, **kwargs) + + def parse(self, file, base, entries, **kwargs): + kwargs.pop('table', None) + for key, reader in entries: + value = reader(file, base=base, table=self, **kwargs) + if key is not None: + self[key] = value + + +class OpenTypeTable(OpenTypeTableBase): + tag = None + + def __init__(self, file, file_offset=None, **kwargs): + if file_offset is not None: + file.seek(file_offset) + super().__init__(file, file_offset, **kwargs) + + + +class MultiFormatTable(OpenTypeTable): + formats = {} + + def __init__(self, file, file_offset=None, **kwargs): + super().__init__(file, file_offset, **kwargs) + table_format = self[self.entries[0][0]] + if table_format in self.formats: + self.parse(file, file_offset, self.formats[table_format]) + + +class Record(OpenTypeTableBase): + """The base offset for indirect entries in a `Record` is the parent table's + base, not the `Record`'s base.""" + def __init__(self, file, table=None, base=None): + super().__init__(file, base) + self._parent_table = table + + +class OffsetTable(OpenTypeTable): + entries = [('sfnt version', fixed), + ('numTables', ushort), + ('searchRange', ushort), + ('entrySelector', ushort), + ('rangeShift', ushort)] + + +class TableRecord(OpenTypeTable): + entries = [('tag', tag), + ('checkSum', ulong), + ('offset', ulong), + ('length', ulong)] + + def check_sum(self, file): + total = 0 + table_offset = self['offset'] + file.seek(table_offset) + end_of_data = table_offset + 4 * math.ceil(self['length'] / 4) + while file.tell() < end_of_data: + value = ulong(file) + if not (self['tag'] == 'head' and file.tell() == table_offset + 12): + total += value + checksum = total % 2**32 + assert checksum == self['checkSum'] + + +from .required import HmtxTable +from .cff import CompactFontFormat +from . import truetype, gpos, gsub, other + + +class OpenTypeParser(dict): + def __init__(self, filename): + disk_file = open(filename, 'rb') + file = io.BytesIO(disk_file.read()) + disk_file.close() + offset_table = OffsetTable(file) + table_records = OrderedDict() + for i in range(offset_table['numTables']): + record = TableRecord(file) + table_records[record['tag']] = record + for tag, record in table_records.items(): + record.check_sum(file) + + for tag in ('head', 'hhea', 'cmap', 'maxp', 'name', 'post', 'OS/2'): + self[tag] = self._parse_table(file, table_records[tag]) + + self['hmtx'] = HmtxTable(file, table_records['hmtx']['offset'], + self['hhea']['numberOfHMetrics'], + self['maxp']['numGlyphs']) + try: + self['CFF'] = CompactFontFormat(file, + table_records['CFF']['offset']) + except KeyError: + self['loca'] = truetype.LocaTable(file, + table_records['loca']['offset'], + self['head']['indexToLocFormat'], + self['maxp']['numGlyphs']) + self['glyf'] = truetype.GlyfTable(file, + table_records['glyf']['offset'], + self['loca']) + for tag in ('kern', 'GPOS', 'GSUB'): + if tag in table_records: + self[tag] = self._parse_table(file, table_records[tag]) + + @staticmethod + def _parse_table(file, table_record): + for cls in all_subclasses(OpenTypeTable): + if cls.tag == table_record['tag']: + return cls(file, table_record['offset']) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/required.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/required.py new file mode 100644 index 000000000..60ade02d0 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/required.py @@ -0,0 +1,443 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import struct + +from .parse import OpenTypeTable, MultiFormatTable, Record +from .parse import byte, ushort, short, ulong, fixed, fword, ufword, uint24 +from .parse import longdatetime, string, array, indirect, context_array, Packed +from .macglyphs import MAC_GLYPHS +from . import ids + + +class HeadTable(OpenTypeTable): + """Font header""" + tag = 'head' + entries = [('version', fixed), + ('fontRevision', fixed), + ('checkSumAdjustment', ulong), + ('magicNumber', ulong), + ('flags', ushort), + ('unitsPerEm', ushort), + ('created', longdatetime), + ('modified', longdatetime), + ('xMin', short), + ('yMin', short), + ('xMax', short), + ('yMax', short), + ('macStyle', ushort), + ('lowestRecPPEM', ushort), + ('fontDirectionHint', short), + ('indexToLocFormat', short), + ('glyphDataFormat', short)] + + @property + def bounding_box(self): + return (self['xMin'], self['yMin'], self['xMax'], self['yMax']) + + @property + def bold(self): + return bool(self['macStyle'] & MACSTYLE_BOLD) + + @property + def italic(self): + return bool(self['macStyle'] & MACSTYLE_ITALIC) + + @property + def condensed(self): + return bool(self['macStyle'] & MACSTYLE_CONDENSED) + + @property + def extended(self): + return bool(self['macStyle'] & MACSTYLE_EXTENDED) + + +MACSTYLE_BOLD = 0x1 +MACSTYLE_ITALIC = 0x2 +MACSTYLE_UNDERLINE = 0x4 +MACSTYLE_OUTLINE = 0x8 +MACSTYLE_SHADOW = 0x10 +MACSTYLE_CONDENSED = 0x20 +MACSTYLE_EXTENDED = 0x40 + + +class HheaTable(OpenTypeTable): + """Horizontal header""" + tag = 'hhea' + entries = [('version', fixed), + ('Ascender', fword), + ('Descender', fword), + ('LineGap', fword), + ('advanceWidthMax', ufword), + ('minLeftSideBearing', fword), + ('minRightSideBearing', fword), + ('xMaxExtent', fword), + ('caretSlopeRise', short), + ('caretSlopeRun', short), + ('caretOffset', short), + (None, short), + (None, short), + (None, short), + (None, short), + ('metricDataFormat', short), + ('numberOfHMetrics', ushort)] + + +class HmtxTable(OpenTypeTable): + """Horizontal metrics""" + tag = 'htmx' + + def __init__(self, file, file_offset, number_of_h_metrics, num_glyphs): + super().__init__(file, file_offset) + # TODO: rewrite using context_array ? + file.seek(file_offset) + advance_widths = [] + left_side_bearings = [] + for i in range(number_of_h_metrics): + advance_width, lsb = ushort(file), short(file) + advance_widths.append(advance_width) + left_side_bearings.append(lsb) + for i in range(num_glyphs - number_of_h_metrics): + lsb = short(file) + advance_widths.append(advance_width) + left_side_bearings.append(lsb) + self['advanceWidth'] = advance_widths + self['leftSideBearing'] = left_side_bearings + + +class MaxpTable(MultiFormatTable): + """Maximum profile""" + tag = 'maxp' + entries = [('version', fixed), + ('numGlyphs', ushort), + ('maxPoints', ushort)] + format_entries = {1.0: [('maxContours', ushort), + ('maxCompositePoints', ushort), + ('maxCompositeContours', ushort), + ('maxZones', ushort), + ('maxTwilightPoints', ushort), + ('maxStorage', ushort), + ('maxFunctionDefs', ushort), + ('maxInstructionDefs', ushort), + ('maxStackElements', ushort), + ('maxSizeOfInstructions', ushort), + ('maxComponentElements', ushort), + ('maxComponentDepth', ushort)]} + + +class OS2Table(OpenTypeTable): + """OS/2 and Windows specific metrics""" + tag = 'OS/2' + entries = [('version', ushort), + ('xAvgCharWidth', short), + ('usWeightClass', ushort), + ('usWidthClass', ushort), + ('fsType', ushort), + ('ySubscriptXSize', short), + ('ySubscriptYSize', short), + ('ySubscriptXOffset', short), + ('ySubscriptYOffset', short), + ('ySuperscriptXSize', short), + ('ySuperscriptYSize', short), + ('ySuperscriptXOffset', short), + ('ySuperscriptYOffset', short), + ('yStrikeoutSize', short), + ('yStrikeoutPosition', short), + ('sFamilyClass', short), + ('panose', array(byte, 10)), + ('ulUnicodeRange1', ulong), + ('ulUnicodeRange2', ulong), + ('ulUnicodeRange3', ulong), + ('ulUnicodeRange4', ulong), + ('achVendID', string), + ('fsSelection', ushort), + ('usFirstCharIndex', ushort), + ('usLastCharIndex', ushort), + ('sTypoAscender', short), + ('sTypoDescender', short), + ('sTypoLineGap', short), + ('usWinAscent', ushort), + ('usWinDescent', ushort), + ('ulCodePageRange1', ulong), + ('ulCodePageRange2', ulong), + ('sxHeight', short), + ('sCapHeight', short), + ('usDefaultChar', ushort), + ('usBreakChar', ushort), + ('usMaxContext', ushort)] + + @property + def italic(self): + return bool(self['fsSelection'] & FSSELECTION_ITALIC) + + @property + def bold(self): + return bool(self['fsSelection'] & FSSELECTION_BOLD) + + @property + def regular(self): + return bool(self['fsSelection'] & FSSELECTION_REGULAR) + + @property + def oblique(self): + return bool(self['fsSelection'] & FSSELECTION_OBLIQUE) + + +FSSELECTION_ITALIC = 0x1 +FSSELECTION_UNDERSCORE = 0x2 +FSSELECTION_NEGATIVE = 0x4 +FSSELECTION_OUTLINED = 0x8 +FSSELECTION_STRIKEOUT = 0x10 +FSSELECTION_BOLD = 0x20 +FSSELECTION_REGULAR = 0x40 +FSSELECTION_USE_TYPO_METRICS = 0x80 +FSSELECTION_WWS = 0x100 +FSSELECTION_OBLIQUE = 0x200 + + +class PostTable(MultiFormatTable): + """PostScript information""" + tag = 'post' + entries = [('version', fixed), + ('italicAngle', fixed), + ('underlinePosition', fword), + ('underlineThickness', fword), + ('isFixedPitch', ulong), + ('minMemType42', ulong), + ('maxMemType42', ulong), + ('minMemType1', ulong), + ('maxMemType1', ulong)] + formats = {2.0: [('numberOfGlyphs', ushort), + ('glyphNameIndex', context_array(ushort, + 'numberOfGlyphs'))]} + + def __init__(self, file, file_offset): + super().__init__(file, file_offset) + self.names = [] + if self['version'] == 2.0: + num_new_glyphs = max(self['glyphNameIndex']) - 257 + names = [] + for i in range(num_new_glyphs): + names.append(self._read_pascal_string(file)) + for index in self['glyphNameIndex']: + if index < 258: + name = MAC_GLYPHS[index] + else: + name = names[index - 258] + self.names.append(name) + elif self['version'] != 3.0: + raise NotImplementedError + + def _read_pascal_string(self, file): + length = byte(file) + return struct.unpack('>{}s'.format(length), + file.read(length))[0].decode('ascii') + + +class NameRecord(Record): + entries = [('platformID', ushort), + ('encodingID', ushort), + ('languageID', ushort), + ('nameID', ushort), + ('length', ushort), + ('offset', ushort)] + + +class LangTagRecord(Record): + entries = [('length', ushort), + ('offset', ushort)] + + +class NameTable(MultiFormatTable): + """Naming table""" + tag = 'name' + entries = [('format', ushort), + ('count', ushort), + ('stringOffset', ushort), + ('nameRecord', context_array(NameRecord, 'count'))] + formats = {1: [('langTagCount', ushort), + ('langTagRecord', context_array(LangTagRecord, + 'langTagCount'))]} + + def __init__(self, file, file_offset): + super().__init__(file, file_offset) + if self['format'] == 1: + raise NotImplementedError + string_offset = file_offset + self['stringOffset'] + self.strings = {} + for record in self['nameRecord']: + file.seek(string_offset + record['offset']) + data = file.read(record['length']) + if record['platformID'] in (ids.PLATFORM_UNICODE, + ids.PLATFORM_WINDOWS): + string = data.decode('utf_16_be') + elif record['platformID'] == ids.PLATFORM_MACINTOSH: + # TODO: properly decode according to the specified encoding + string = data.decode('mac_roman') + else: + raise NotImplementedError + name = self.strings.setdefault(record['nameID'], {}) + platform = name.setdefault(record['platformID'], {}) + platform[record['languageID']] = string + + +class SubHeader(OpenTypeTable): + entries = [('firstCode', ushort), + ('entryCount', ushort), + ('idDelta', short), + ('idRangeOffset', ushort)] + + +class CmapGroup(OpenTypeTable): + entries = [('startCharCode', ulong), + ('endCharCode', ulong), + ('startGlyphID', ulong)] + + +class VariationSelectorRecord(OpenTypeTable): + entries = [('varSelector', uint24), + ('defaultUVSOffset', ulong), + ('nonDefaultUVSOffset', ulong)] + + +class CmapSubtable(MultiFormatTable): + entries = [('format', ushort)] + formats = {0: # Byte encoding table + [('length', ushort), + ('language', ushort), + ('glyphIdArray', array(byte, 256))], + 2: # High-byte mapping through table + [('length', ushort), + ('language', ushort), + ('subHeaderKeys', array(ushort, 256))], + 4: # Segment mapping to delta values + [('length', ushort), + ('language', ushort), + ('segCountX2', ushort), + ('searchRange', ushort), + ('entrySelector', ushort), + ('rangeShift', ushort), + ('endCount', context_array(ushort, 'segCountX2', + multiplier=0.5)), + (None, ushort), + ('startCount', context_array(ushort, 'segCountX2', + multiplier=0.5)), + ('idDelta', context_array(short, 'segCountX2', + multiplier=0.5)), + ('idRangeOffset', context_array(ushort, 'segCountX2', + multiplier=0.5))], + 6: # Trimmed table mapping + [('length', ushort), + ('language', ushort), + ('firstCode', ushort), + ('entryCount', ushort), + ('glyphIdArray', context_array(ushort, 'entryCount'))], + 8: # Mixed 16-bit and 32-bit coverage + [(None, ushort), + ('length', ulong), + ('language', ulong), + ('is32', array(byte, 8192)), + ('nGroups', ulong), + ('group', context_array(CmapGroup, 'nGroups'))], + 10: # Trimmed array + [(None, ushort), + ('length', ulong), + ('language', ulong), + ('startCharCode', ulong), + ('numchars', ulong), + ('glyphs', context_array(ushort, 'numChars'))], + 12: # Segmented coverage + [(None, ushort), + ('length', ulong), + ('language', ulong), + ('nGroups', ulong), + ('groups', context_array(CmapGroup, 'nGroups'))], + 13: # Many-to-one range mappings + [(None, ushort), + ('length', ulong), + ('language', ulong), + ('nGroups', ulong), + ('groups', context_array(CmapGroup, 'nGroups'))], + 14: # Unicode Variation Sequences + [('length', ulong), + ('numVarSelectorRecords', ulong), + ('varSelectorRecord', context_array(VariationSelectorRecord, + 'numVarSelectorRecords'))]} + + # TODO +## formats[99] = [('bla', ushort)] +## def _format_99_init(self): +## pass + + def __init__(self, file, file_offset=None, **kwargs): + # TODO: detect already-parsed table (?) + super().__init__(file, file_offset) + # TODO: create format-dependent lookup function instead of storing + # everything in a dict (not efficient for format 13 subtables fe) + if self['format'] == 0: + indices = array(byte, 256)(file) + out = {i: index for i, index in enumerate(self['glyphIdArray'])} + elif self['format'] == 2: + raise NotImplementedError + elif self['format'] == 4: + seg_count = self['segCountX2'] >> 1 + self['glyphIdArray'] = array(ushort, self['length'])(file) + segments = zip(self['startCount'], self['endCount'], + self['idDelta'], self['idRangeOffset']) + out = {} + for i, (start, end, delta, range_offset) in enumerate(segments): + if i == seg_count - 1: + assert end == 0xFFFF + break + if range_offset > 0: + for j, code in enumerate(range(start, end + 1)): + index = (range_offset >> 1) - seg_count + i + j + out[code] = self['glyphIdArray'][index] + else: + for code in range(start, end + 1): + out[code] = (code + delta) % 2**16 + elif self['format'] == 6: + out = {code: index for code, index in + zip(range(self['firstCode'], + self['firstCode'] + self['entryCount']), + self['glyphIdArray'])} + elif self['format'] == 12: + out = {} + for group in self['groups']: + codes = range(group['startCharCode'], group['endCharCode'] + 1) + segment = {code: group['startGlyphID'] + index + for index, code in enumerate(codes)} + out.update(segment) + elif self['format'] == 13: + out = {} + for group in self['groups']: + codes = range(group['startCharCode'], group['endCharCode'] + 1) + segment = {code: group['startGlyphID'] for code in codes} + out.update(segment) + else: + raise NotImplementedError + self.mapping = out + + +class CmapRecord(Record): + entries = [('platformID', ushort), + ('encodingID', ushort), + ('subtable', indirect(CmapSubtable, offset_reader=ulong))] + + +class CmapTable(OpenTypeTable): + tag = 'cmap' + entries = [('version', ushort), + ('numTables', ushort), + ('encodingRecord', context_array(CmapRecord, 'numTables'))] + + def __init__(self, file, file_offset): + super().__init__(file, file_offset) + for record in self['encodingRecord']: + key = (record['platformID'], record['encodingID']) + self[key] = record['subtable'] diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/truetype.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/truetype.py new file mode 100644 index 000000000..593123bbf --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/opentype/truetype.py @@ -0,0 +1,58 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import struct + +from .parse import OpenTypeTable, MultiFormatTable, short + + +class GlyfTable(OpenTypeTable): + """Glyph outline table""" + tag = 'glyf' + + def __init__(self, file, file_offset, loca_table): + super().__init__(file, file_offset) + self._file_offset = file_offset + for index, glyph_offset in enumerate(loca_table.offsets()): + if glyph_offset is not None: + self[index] = GlyphHeader(file, file_offset + glyph_offset) + # the glyph header is followed by the glyph description + + +class GlyphHeader(OpenTypeTable): + entries = [('numberOfContours', short), + ('xMin', short), + ('yMin', short), + ('xMax', short), + ('yMax', short)] + + @property + def bounding_box(self): + return (self['xMin'], self['yMin'], self['xMax'], self['yMax']) + + +class LocaTable(OpenTypeTable): + """Glyph location table""" + tag = 'loca' + + def __init__(self, file, file_offset, version, num_glyphs): + super().__init__(file, file_offset) + self._num_glyphs = num_glyphs + data_format = 'L' if version == 1 else 'H' + data_struct = struct.Struct('>{}{}'.format(num_glyphs + 1, data_format)) + self._offsets = data_struct.unpack(file.read(data_struct.size)) + if version == 0: + self._offsets = [offset * 2 for offset in self._offsets] + + def offsets(self): + for index in range(self._num_glyphs): + offset = self._offsets[index] + if offset != self._offsets[index + 1]: + yield offset + else: + yield None diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/style.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/style.py new file mode 100644 index 000000000..4a2b3bc74 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/style.py @@ -0,0 +1,168 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. +from token import NUMBER + +from ..attribute import OptionSet, OptionSetMeta + + +__all__ = ['FontWeight', 'FontSlant', 'FontWidth', 'FontVariant', + 'TextPosition'] + +from ..util import class_property + + +def hyphen_variants(value): + yield value + if '-' in value: + yield value.replace('-', ' ') + yield value.replace('-', '') + + +class ClassSetMeta(OptionSetMeta): + def __new__(metacls, classname, bases, cls_dict): + cls_dict['_lookup'] = {variant: klass + for klass, values in cls_dict['classes'].items() + for value in values + for variant in hyphen_variants(value)} + return super().__new__(metacls, classname, bases, cls_dict) + + def __getattr__(cls, item): + string = item.lower().replace('_', ' ') + if item.isupper() and string in cls._lookup: + return cls._lookup[string] + raise AttributeError(item) + + +class ClassSet(OptionSet, metaclass=ClassSetMeta): + classes = {} + center = None + offset = None + range = None + + @classmethod + def check_type(cls, value): + if cls.range: + min, max = cls.range + return isinstance(value, int) and (min <= value <= max) + else: + return value in cls.classes.keys() + + @class_property + def values(cls): + return list(cls.classes.keys()) + + @class_property + def value_strings(cls): + return [name for names in cls.classes.values() for name in names] + + @classmethod + def from_tokens(cls, tokens, source): + try: + if tokens.next.type == NUMBER: + option_string = next(tokens).string + value = int(option_string) + if not cls.check_type(value): + raise KeyError + else: + option_string = cls._value_from_tokens(tokens) + value = cls._lookup[option_string.lower()] + except KeyError: + numeric_values = ('a value in the range [{}, {}]' + .format(*cls.range) if cls.range + else ', '.join(map(str, cls.classes))) + raise ValueError("'{}' is not a valid {}. Must be one of: '{}'" + " or {}" + .format(option_string.strip(), cls.__name__, + "', '".join(cls.value_strings), + numeric_values)) + return value + + @classmethod + def to_name(cls, klass): + try: + return cls.classes[klass][0] + except KeyError: + return str(klass) + + @classmethod + def to_class(cls, value): + return cls._lookup[value] + + @classmethod + def nearest(cls, value, values): + offset = (1 if value > cls.center else -1) * cls.offset + _, val = sorted((abs((v + offset) - value), v) for v in values)[0] + return val + + +class FontWeight(ClassSet): + classes = { + 100: ['hairline', 'thin'], + 200: ['ultra-light', 'extra-light'], + 300: ['light'], + 400: ['regular', 'normal', 'book', 'roman'], + 500: ['medium'], + 600: ['semi-bold', 'demi-bold'], + 700: ['bold'], + 800: ['extra-bold', 'ultra-bold'], + 900: ['black', 'heavy'], + 950: ['extra-black', 'ultra-black'], + } + range = (0, 1000) + center = 450 + offset = 1 + + +class FontSlant(OptionSet): + values = 'upright', 'oblique', 'italic' + alternatives = dict(upright=('oblique', 'italic'), + oblique=('italic', 'upright'), + italic=('oblique', 'upright')) + + @classmethod + def nearest(cls, value, values): + if value not in values: + value = next(v for v in cls.alternatives[value] if v in values) + return value + + +class FontWidth(ClassSet): + classes = { + 1: ['ultra-condensed'], + 2: ['extra-condensed'], + 3: ['condensed'], + 4: ['semi-condensed'], + 5: ['normal', 'medium'], + 6: ['semi-expanded'], + 7: ['expanded'], + 8: ['extra-expanded'], + 9: ['ultra-expanded'], + } + center = 5 + offset = -0.1 + + +class FontVariant(OptionSet): + values = 'normal', 'small capital', 'oldstyle figures' + + +class TextPosition(OptionSet): + values = 'normal', 'superscript', 'subscript' + + +# for backward compatibility +REGULAR = FontWeight.REGULAR +MEDIUM = FontWeight.MEDIUM +BOLD = FontWeight.BOLD + +UPRIGHT = FontSlant.UPRIGHT +OBLIQUE = FontSlant.OBLIQUE +ITALIC = FontSlant.ITALIC + +CONDENSED = FontWidth.CONDENSED +NORMAL = FontWidth.NORMAL +EXPANDED = FontWidth.EXPANDED diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/type1.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/type1.py new file mode 100644 index 000000000..c0ef78e75 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/font/type1.py @@ -0,0 +1,347 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import os +import re +import struct + +from binascii import unhexlify +from io import BytesIO +from warnings import warn + + +from . import Font, GlyphMetrics, LeafGetter, MissingGlyphException +from .mapping import UNICODE_TO_GLYPH_NAME, ENCODINGS +from ..font.style import FontVariant, FontWeight, FontSlant, FontWidth +from ..util import cached +from ..warnings import warn + + +def string(string): + return string.strip() + + +def number(string): + try: + number = int(string) + except ValueError: + number = float(string) + return number + + +def boolean(string): + return string.strip() == 'true' + + +class AdobeFontMetricsParser(dict): + SECTIONS = {'FontMetrics': string, + 'CharMetrics': int} + + KEYWORDS = {'FontName': string, + 'FullName': string, + 'FamilyName': string, + 'Weight': string, + 'FontBBox': (number, number, number, number), + 'Version': string, + 'Notice': string, + 'EncodingScheme': string, + 'MappingScheme': int, + 'EscChar': int, + 'CharacterSet': string, + 'Characters': int, + 'IsBaseFont': boolean, + 'VVector': (number, number), + 'IsFixedV': boolean, + 'CapHeight': number, + 'XHeight': number, + 'Ascender': number, + 'Descender': number, + 'StdHW': number, + 'StdVW': number, + + 'UnderlinePosition': number, + 'UnderlineThickness': number, + 'ItalicAngle': number, + 'CharWidth': (number, number), + 'IsFixedPitch': boolean} + + HEX_NUMBER = re.compile(r'<([\da-f]+)>', re.I) + + def __init__(self, file): + self._glyphs = {} + self._ligatures = {} + self._kerning_pairs = {} + sections, section = [self], self + section_names = [None] + for line in file.readlines(): + try: + key, values = line.split(None, 1) + except ValueError: + key, values = line.strip(), [] + if not key: + continue + if key == 'Comment': + pass + elif key.startswith('Start'): + section_name = key[5:] + section_names.append(section_name) + section[section_name] = {} + section = section[section_name] + sections.append(section) + elif key.startswith('End'): + assert key[3:] == section_names.pop() + sections.pop() + section = sections[-1] + elif section_names[-1] == 'CharMetrics': + glyph_metrics = self._parse_character_metrics(line) + self._glyphs[glyph_metrics.name] = glyph_metrics + elif section_names[-1] == 'KernPairs': + tokens = line.split() + if tokens[0] == 'KPX': + pair, kerning = (tokens[1], tokens[2]), tokens[-1] + self._kerning_pairs[pair] = number(kerning) + else: + raise NotImplementedError + elif section_names[-1] == 'Composites': + warn('Composites in Type1 fonts are currently not supported.' + '({})'.format(self.filename) if self.filename else '') + elif key == chr(26): # EOF marker + assert not file.read() + else: + funcs = self.KEYWORDS[key] + try: + values = [func(val) + for func, val in zip(funcs, values.split())] + except TypeError: + values = funcs(values) + section[key] = values + + def _parse_character_metrics(self, line): + ligatures = {} + for item in line.strip().split(';'): + if not item: + continue + tokens = item.split() + key = tokens[0] + if key == 'C': + code = int(tokens[1]) + elif key == 'CH': + code = int(self.HEX_NUMBER.match(tokens[1]).group(1), base=16) + elif key in ('WX', 'W0X'): + width = number(tokens[1]) + elif key in ('WY', 'W0Y'): + height = number(tokens[1]) + elif key in ('W', 'W0'): + width, height = number(tokens[1]), number(tokens[2]) + elif key == 'N': + name = tokens[1] + elif key == 'B': + bbox = tuple(number(num) for num in tokens[1:]) + elif key == 'L': + ligatures[tokens[1]] = tokens[2] + else: + raise NotImplementedError + if ligatures: + self._ligatures[name] = ligatures + return GlyphMetrics(name, width, bbox, code) + + +class AdobeFontMetrics(Font, AdobeFontMetricsParser): + units_per_em = 1000 + # encoding is set in __init__ + + name = LeafGetter('FontMetrics', 'FontName') + bounding_box = LeafGetter('FontMetrics', 'FontBBox') + fixed_pitch = LeafGetter('FontMetrics', 'IsFixedPitch') + italic_angle = LeafGetter('FontMetrics', 'ItalicAngle') + ascender = LeafGetter('FontMetrics', 'Ascender', default=750) + descender = LeafGetter('FontMetrics', 'Descender', default=-250) + line_gap = 200 + cap_height = LeafGetter('FontMetrics', 'CapHeight', default=700) + x_height = LeafGetter('FontMetrics', 'XHeight', default=500) + stem_v = LeafGetter('FontMetrics', 'StdVW', default=50) + + def __init__(self, file_or_filename, weight, slant, width, + unicode_mapping=None): + try: + filename = file_or_filename + file = open(file_or_filename, 'rt', encoding='ascii') + close_file = True + except TypeError: + filename = None + file = file_or_filename + close_file = False + self._suffixes = {FontVariant.NORMAL: ''} + self._unicode_mapping = unicode_mapping + AdobeFontMetricsParser.__init__(self, file) + if close_file: + file.close() + if self.encoding_scheme == 'FontSpecific': + self.encoding = {glyph.name: glyph.code + for glyph in self._glyphs.values() + if glyph.code > -1} + else: + self.encoding = ENCODINGS[self.encoding_scheme] + super().__init__(filename, weight, slant, width) + + encoding_scheme = LeafGetter('FontMetrics', 'EncodingScheme') + + _SUFFIXES = {FontVariant.SMALL_CAPITAL: ('.smcp', '.sc', 'small'), + FontVariant.OLDSTYLE_FIGURES: ('.oldstyle', )} + + def _find_suffix(self, char, variant, upper=False): + try: + return self._suffixes[variant] + except KeyError: + for suffix in self._SUFFIXES[variant]: + for name in self._char_to_glyph_names(char, + FontVariant.NORMAL): + if name + suffix in self._glyphs: + self._suffixes[variant] = suffix + return suffix + else: + return '' +## if not upper: +## return self._find_suffix(self.char_to_name(char.upper()), +## possible_suffixes, True) + + def _unicode_to_glyph_names(self, unicode): + if self._unicode_mapping: + for name in self._unicode_mapping.get(unicode, []): + yield name + try: + for name in UNICODE_TO_GLYPH_NAME[unicode]: + yield name + # TODO: map to uniXXXX or uXXXX names + except KeyError: + warn("Don't know how to map unicode index 0x{:04x} ({}) to a " + "PostScript glyph name.".format(unicode, chr(unicode))) + + def _char_to_glyph_names(self, char, variant): + suffix = self._find_suffix(char, variant) if char != ' ' else '' + for name in self._unicode_to_glyph_names(ord(char)): + yield name + suffix + + @cached + def get_glyph_metrics(self, char, variant): + for name in self._char_to_glyph_names(char, variant): + if name in self._glyphs: + return self._glyphs[name] + if variant != FontVariant.NORMAL: + warn('No {} variant found for unicode index 0x{:04x} ({}), falling ' + 'back to the standard glyph.'.format(variant, ord(char), char)) + return self.get_glyph_metrics(char, FontVariant.NORMAL) + else: + warn('{} does not contain glyph for unicode index 0x{:04x} ({}).' + .format(self.name, ord(char), char)) + raise MissingGlyphException + + def get_ligature(self, glyph, successor_glyph): + try: + ligature_name = self._ligatures[glyph.name][successor_glyph.name] + return self._glyphs[ligature_name] + except KeyError: + return None + + def get_kerning(self, a, b): + return self._kerning_pairs.get((a.name, b.name), 0.0) + + +class PrinterFont(object): + def __init__(self, header, body, trailer): + self.header = header + self.body = body + self.trailer = trailer + + +class PrinterFontASCII(PrinterFont): + START_OF_BODY = re.compile(br'\s*currentfile\s+eexec\s*') + + def __init__(self, filename): + with open(filename, 'rb') as file: + header = self._parse_header(file) + body, trailer = self._parse_body_and_trailer(file) + super().__init__(header, body, trailer) + + @classmethod + def _parse_header(cls, file): + header = BytesIO() + for line in file: + # Adobe Reader can't handle carriage returns, so we remove them + header.write(line.translate(None, b'\r')) + if cls.START_OF_BODY.match(line.translate(None, b'\r\n')): + break + return header.getvalue() + + @staticmethod + def _parse_body_and_trailer(file): + body = BytesIO() + trailer_lines = [] + number_of_zeros = 0 + lines = file.readlines() + for line in reversed(lines): + number_of_zeros += line.count(b'0') + trailer_lines.append(lines.pop()) + if number_of_zeros == 512: + break + elif number_of_zeros > 512: + raise Type1ParseError + for line in lines: + cleaned = line.translate(None, b' \t\r\n') + body.write(unhexlify(cleaned)) + trailer = BytesIO() + for line in reversed(trailer_lines): + trailer.write(line.translate(None, b'\r')) + return body.getvalue(), trailer.getvalue() + + +class PrinterFontBinary(PrinterFont): + SECTION_HEADER_FMT = ' 1 and classes[0] == 'code': # .. code:: + return classes[1] # (MyST doesn't add the + return None # literal block (double colon) language as class) + + def build_flowable(self): + return rt.CodeBlock(self.text, language=self.language, + lexer_getter=self.lexer_getter) + + +class Block_Quote(DocutilsGroupingNode): + style = 'block quote' + + +class Attribution(Paragraph): + style = 'attribution' + + def process_content(self, style=None): + return '\N{EM DASH}' + super().process_content(style) + + +class Line_Block(Paragraph): + style = 'line block' + + def _process_block(self, line_block): + for child in line_block.getchildren(): + try: + yield child.styled_text() + except AttributeError: + for line in self._process_block(child): + yield rt.Tab() + line + + def process_content(self, style=None): + lines = self._process_block(self) + return rt.MixedStyledText(intersperse(lines, rt.Newline())) + + +class Line(DocutilsInlineNode): + pass + + +class Doctest_Block(DocutilsBodyNode): + def build_flowable(self): + return rt.CodeBlock(self.text) + + +class Reference(DocutilsBodyNode, DocutilsInlineNode): + def build_styled_text(self): + content = self.process_content() + if self.get('refid'): + return rt.Reference(self.get('refid'), custom_title=content) + elif self.get('refuri'): + content.annotation = rt.HyperLink(self.get('refuri')) + content.style = 'external link' + else: + content.style = 'broken link' + return content + + def build_flowable(self): + children = self.getchildren() + assert len(children) == 1 + image = self.image.flowable() + if self.get('refid'): + image.annotation = rt.NamedDestinationLink(self.get('refid')) + elif self.get('refuri'): + image.annotation = rt.HyperLink(self.get('refuri')) + return image + + +class Footnote(DocutilsBodyNode): + style = 'footnote' + + def build_flowable(self): + return rt.Note(rt.StaticGroupedFlowables(self.children_flowables(1)), + style=self.style) + + +class Label(DocutilsBodyNode): + def build_flowable(self): + return rt.DummyFlowable() + + +class Footnote_Reference(DocutilsInlineNode): + style = 'footnote' + + def build_styled_text(self): + return rt.NoteMarkerByID(self['refid'], + custom_label=self.process_content(), + style=self.style) + + +class Citation(Footnote): + style = 'citation' + + +class Citation_Reference(Footnote_Reference): + style = 'citation' + + +class Substitution_Definition(DocutilsBodyNode): + def build_flowable(self): + label, = self.node.attributes['names'] + content = self.process_content() + return rt.SetUserStringFlowable(label, content) + + +class Target(DocutilsBodyNode, DocutilsInlineNode): + def build_styled_text(self): + # TODO: what about refid? + content = self.process_content() + try: + content.annotation = rt.NamedDestination(*self._ids) + except IndexError: + pass + return content + + def build_flowable(self): + return rt.AnchorFlowable() + + +class Enumerated_List(DocutilsGroupingNode): + style = 'enumerated' + grouped_flowables_class = rt.List + + def build_flowable(self): + # TODO: handle different numbering styles + start = self.attributes.get('start', 1) + return super().build_flowable(start_index=start) + +class Bullet_List(DocutilsGroupingNode): + style = 'bulleted' + grouped_flowables_class = rt.List + + def build_flowable(self): + try: + return super().build_flowable() + except AttributeError: # empty list + return rt.DummyFlowable() + + +class List_Item(DocutilsGroupingNode): + def build_flowable(self): + return rt.ListItem(super().build_flowable()) + + +class Definition_List(DocutilsGroupingNode): + grouped_flowables_class = rt.DefinitionList + + +class Definition_List_Item(DocutilsBodyNode): + def build_flowable(self): + term_text = self.term.styled_text() + try: + for classifier in self.classifier: + term_text += ' : ' + classifier.styled_text() + except AttributeError: + pass + term = rt.StaticGroupedFlowables([rt.Paragraph(term_text)], + style='definition term') + return rt.LabeledFlowable(term, self.definition.flowable()) + + +class Term(DocutilsInlineNode): + def build_styled_text(self): + content = self.process_content() + if self._ids: + content.annotation = rt.NamedDestination(*self._ids) + return content + + +class Classifier(DocutilsInlineNode): + def build_styled_text(self): + return self.process_content('classifier') + + +class Definition(DocutilsGroupingNode): + style = 'definition' + + +class Field_List(DocutilsGroupingNode): + grouped_flowables_class = rt.DefinitionList + style = 'field list' + + +class Field(DocutilsBodyNode): + @property + def name(self): + return self.field_name.text + + @property + def value(self): + return self.field_body.flowable() + + def build_flowable(self): + label = rt.Paragraph(self.field_name.styled_text(), style='field name') + return rt.LabeledFlowable(label, self.field_body.flowable()) + + +class Field_Name(DocutilsInlineNode): + pass + + +class Field_Body(DocutilsGroupingNode): + pass + + +class Option_List(DocutilsGroupingNode): + grouped_flowables_class = rt.DefinitionList + style = 'option list' + + +class Option_List_Item(DocutilsBodyNode): + def build_flowable(self): + return rt.LabeledFlowable(self.option_group.flowable(), + self.description.flowable(), style='option') + + +class Option_Group(DocutilsBodyNode): + def build_flowable(self): + options = (option.styled_text() for option in self.option) + return rt.Paragraph(intersperse(options, ', '), style='option_group') + + +class Option(DocutilsInlineNode): + def build_styled_text(self): + text = self.option_string.styled_text() + try: + delimiter = rt.MixedStyledText(self.option_argument['delimiter'], + style='option_string') + text += delimiter + self.option_argument.styled_text() + except AttributeError: + pass + return rt.MixedStyledText(text) + + +class Option_String(DocutilsInlineNode): + def build_styled_text(self): + return rt.MixedStyledText(self.process_content(), style='option_string') + + +class Option_Argument(DocutilsInlineNode): + def build_styled_text(self): + return rt.MixedStyledText(self.process_content(), style='option_arg') + + +class Description(DocutilsGroupingNode): + pass + + +class Image(DocutilsBodyNode, DocutilsInlineNode): + @property + def image_path(self): + return self.get('uri') + + @property + def options(self): + width = convert_quantity(self.get('width')) + height = convert_quantity(self.get('height')) + align = self.get('align') + scale = self.get('scale', 100) / 100 + if scale != 1 and (width or height): + width = width * scale if width else None + height = height * scale if height else None + scale = 1 + alt = self.get('alt') + return dict(align=align, width=width, height=height, scale=scale, + alt=alt) + + def build_flowable(self): + return rt.Image(self.image_path, **self.options) + + ALIGN_TO_BASELINE = {'bottom': 0, + 'middle': 50*PERCENT, + 'top': 100*PERCENT} + + def build_styled_text(self): + options = self.options + baseline = self.ALIGN_TO_BASELINE.get(options.pop('align')) + return rt.InlineImage(self.image_path, baseline=baseline, **options) + + +class Figure(DocutilsGroupingNode): + grouped_flowables_class = rt.Figure + + def flowables(self): + figure, = super().flowables() + if figure.id is None: # docutils + image = figure.children[0] + figure.id = image.id + figure.secondary_ids = image.secondary_ids + figure.classes.extend(image.classes) + yield figure + + +class Caption(DocutilsBodyNode): + def build_flowable(self): + return rt.Caption(super().process_content()) + + +class Legend(DocutilsGroupingNode): + style = 'legend' + + +class Transition(DocutilsBodyNode): + def build_flowable(self): + return rt.HorizontalRule() + + +RE_LENGTH_PERCENT_UNITLESS = re.compile(r'^(?P\d+\.?\d*)(?P[a-z%]*)$') + +# TODO: warn on px or when no unit is supplied +DOCUTILS_UNIT_TO_DIMENSION = {'': PT, # assume points for unitless quantities + 'in': INCH, + 'cm': CM, + 'mm': MM, + 'pt': PT, + 'pc': PICA, + 'px': DimensionUnit(1 / 96 * INCH, 'px'), + '%': PERCENT, + 'em': None, + 'ex': None} + + +def convert_quantity(quantity_string): + if quantity_string is None: + return None + value, unit = RE_LENGTH_PERCENT_UNITLESS.match(quantity_string).groups() + return float(value) * DOCUTILS_UNIT_TO_DIMENSION[unit] + + +class Table(DocutilsBodyNode): + def build_flowable(self): + tgroup = self.tgroup + if 'colwidths-given' in self.get('classes'): + column_widths = [int(colspec.get('colwidth')) + for colspec in tgroup.colspec] + else: + column_widths = None + try: + head = tgroup.thead.get_table_section() + except AttributeError: + head = None + try: + body = tgroup.tbody.get_table_section() + except AttributeError: + body = None + align = self.get('align') + width_string = self.get('width') + table = rt.Table(body, head=head, + align=None if align == 'default' else align, + width=convert_quantity(width_string), + column_widths=column_widths) + try: + caption = rt.Caption(self.title.process_content()) + except AttributeError: + return table + table_with_caption = rt.TableWithCaption([caption, table]) + table_with_caption.classes.extend(self.get('classes')) + return table_with_caption + + def flowables(self): + classes = self.get('classes') + flowable, = super(DocutilsBodyNode, self).flowables() + try: + caption, table = flowable.children + except AttributeError: + table = flowable + table.classes.extend(classes) + yield flowable + + +class TGroup(DocutilsNode): + pass + + +class ColSpec(DocutilsNode): + pass + + +class TableRowGroup(DocutilsNode): + section_cls = None + + def get_table_section(self): + return self.section_cls([row.get_row() for row in self.row]) + + +class THead(TableRowGroup): + section_cls = rt.TableHead + + +class TBody(TableRowGroup): + section_cls = rt.TableBody + + +class Row(DocutilsNode): + def get_row(self): + try: + entries = iter(self.entry) + except AttributeError: # fully-wrapped row + entries = [] + return rt.TableRow([entry.flowable() for entry in entries]) + + +class Entry(DocutilsGroupingNode): + grouped_flowables_class = rt.TableCell + + def build_flowable(self): + rowspan = int(self.get('morerows', 0)) + 1 + colspan = int(self.get('morecols', 0)) + 1 + return super().build_flowable(rowspan=rowspan, colspan=colspan) + + +class Raw(DocutilsBodyNode, DocutilsInlineNode): + def build_styled_text(self): + if self['format'] == 'rinoh': + return rt.StyledText.from_string(self.text) + + def build_flowable(self): + if self['format'] == 'rinoh': + # TODO: Flowable.from_text(self.text) + if self.text.startswith('ListOfFiguresSection'): + return rt.ListOfFiguresSection() + elif self.text == 'ListOfTablesSection': + return rt.ListOfTablesSection() + elif self.text == 'ListOfFigures(local=True)': + return rt.ListOfFigures(local=True) + elif self.text == 'ListOfTables(local=True)': + return rt.ListOfTables(local=True) + return rt.WarnFlowable("Unsupported raw pdf option: '{}'" + .format(self.text)) + elif self['format'] == 'pdf': # rst2pdf + if self.text == 'PageBreak': + return rt.PageBreak() + return rt.WarnFlowable("Unsupported raw pdf option: '{}'" + .format(self.text)) + return rt.DummyFlowable() + + +class Container(DocutilsGroupingNode): + @property + def set_id(self): + return 'out-of-line' not in self['classes'] + + def build_flowable(self, style=None, **kwargs): + classes = self.get('classes') + if 'literal-block-wrapper' in classes: + return rt.CodeBlockWithCaption(self.children_flowables(), + style=style or self.style, **kwargs) + if 'out-of-line' in classes: + names = self['names'] + if not names: + raise MissingName('out-of-line container is missing a :name:' + ' to reference it by') + return rt.SetOutOfLineFlowables(names, self.children_flowables(), + **kwargs) + return super().build_flowable(style, **kwargs) + + +class MissingName(Exception): + pass diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__init__.py new file mode 100644 index 000000000..010201402 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__init__.py @@ -0,0 +1,401 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import os +import re + +from copy import copy +from os import path +from pathlib import Path + +import docutils + +from docutils.nodes import GenericNodeVisitor, SkipNode + +from sphinx import addnodes +from sphinx.builders import Builder +from sphinx.errors import SphinxError, NoUri +from sphinx.locale import _ +from sphinx.util.console import darkgreen +from sphinx.util.nodes import inline_all_toctrees +from sphinx.util.osutil import ensuredir, os_path, SEP +from sphinx.util import logging +from sphinx.util.i18n import format_date + +from rinoh.attribute import Source +from rinoh.flowable import StaticGroupedFlowables +from rinoh.index import IndexSection, IndexLabel, IndexEntry +from rinoh.language import Language +from rinoh.template import (DocumentTemplate, TemplateConfiguration, + TemplateConfigurationFile) +from rinoh.text import SingleStyledText +from rinoh import __version__ as rinoh_version + +from rinoh.frontend.rst import from_doctree +from rinoh.util import cached + +from . import nodes +from . import transforms +from .util import fully_qualified_id + +logger = logging.getLogger(__name__) + + +class RinohTreePreprocessor(GenericNodeVisitor): + """Preprocess the docutils document tree to prepare it for mapping to the + rinohtype document tree""" + + def __init__(self, document, builder): + super().__init__(document) + self.default_highlight_language = builder.config.highlight_language + self.highlight_stack = [self.default_highlight_language] + self.current_docname = None + + def default_visit(self, node): + try: + attrs = node.attributes + except AttributeError: # Text node + return + try: + if 'refid' in attrs: + node['refid'] = fully_qualified_id(self.current_docname, + node['refid']) + elif 'refuri' in attrs and attrs.get('internal', False): + node['refid'] = node.attributes.pop('refuri') + ids, module_ids = [], [] + for id in attrs['ids']: + if id.startswith('module-'): + module_ids.append(id) + else: + docname = node.get('docname', self.current_docname) + ids.append(fully_qualified_id(docname, id)) + node['ids'] = ids + module_ids + except (TypeError, KeyError): + pass + + def default_departure(self, node): + pass + + def visit_start_of_file(self, node): + self.current_docname = node['docname'] + self.highlight_stack.append(self.default_highlight_language) + + def depart_start_of_file(self, node): + self.highlight_stack.pop() + + def visit_highlightlang(self, node): + self.highlight_stack[-1] = node.get('lang') + raise SkipNode + + def visit_rubric(self, node): + if node.children[0].astext() in ('Footnotes', _('Footnotes')): + node.tagname = 'footnotes-rubric' # mapped to a DummyFlowable + raise SkipNode + + def visit_literal_block(self, node): + self.default_visit(node) + if 'language' not in node.attributes: + node.attributes['language'] = self.highlight_stack[-1] + + +class RinohBuilder(Builder, Source): + """Renders to a PDF using rinohtype.""" + + name = 'rinoh' + format = 'pdf' + supported_image_types = ['application/pdf', 'image/png', 'image/jpeg'] + supported_remote_images = False + + @property + def root(self): + return Path(self.confdir) + + @property + def titles(self): + def entry_mapping(entry): + doc = re.sub(SEP + 'index$', SEP, entry['doc']) + title = entry['title'] + return doc, title + document_data = self.document_data(logger) + return [entry_mapping(entry) for entry in document_data] + + @cached # cached to avoid logging duplicate warnings + def document_data(self, logger): + def known_document_reference(docname): + if docname not in self.env.all_docs: + logger.warning("'rinoh_documents' config value references" + " unknown document '{}'".format(docname)) + return False + return True + + config = self.config + if config.rinoh_documents: + document_data = [rinoh_document_to_document_data(entry, logger) + for entry in config.rinoh_documents] + elif config.latex_documents: + document_data = [latex_document_to_document_data(entry, logger) + for entry in config.latex_documents] + else: + logger.warning("No 'rinoh_documents' config value found; no" + " documents will be written") + document_data = [] + document_data = [entry for entry in document_data + if known_document_reference(entry['doc'])] + targets = config.rinoh_targets + if targets: + known_targets = [entry['target'] for entry in document_data] + if isinstance(targets, str): + targets = [target.strip() for target in targets.split(',')] + for target in (tgt for tgt in targets if tgt not in known_targets): + logger.warning("'rinoh_targets' config value entry '{}' is" + " not a target listed in 'rinoh_documents'" + .format(target)) + document_data = [entry for entry in document_data + if entry['target'] in targets] + return document_data + + def get_outdated_docs(self): + return 'all documents' + + def get_target_uri(self, docname, typ=None): + if docname not in self._docnames: + # TODO: check whether docname is included in another target + # document and somehow link to it + raise NoUri(docname, typ) + else: + return '%' + docname + + def get_relative_uri(self, from_, to, typ=None): + # ignore source + return self.get_target_uri(to, typ) + + def preprocess_tree(self, tree): + """Transform internal refuri targets in reference nodes to refids and + transform footnote rubrics so that they do not end up in the output""" + visitor = RinohTreePreprocessor(tree, self) + tree.walkabout(visitor) + + def prepare_writing(self, docnames): + # toc = self.env.get_toctree_for(self.config.master_doc, self, False) + pass + + def assemble_doctree(self, indexfile, toctree_only): + self._docnames = set([indexfile]) + logger.info(darkgreen(indexfile) + " ", nonl=1) + tree = self.env.get_doctree(indexfile) + tree['docname'] = indexfile + new_tree = docutils.utils.new_document(tree['source']) + if toctree_only: + # extract toctree nodes from the tree and put them in a + # fresh document + for node in tree.traverse(addnodes.toctree): + new_tree += node + else: + for node in tree.children: + if node.tagname == 'section': + for child in node.children: + if child.tagname != 'title': + new_tree += child + else: + new_tree += node + largetree = inline_all_toctrees(self, self._docnames, indexfile, + new_tree, darkgreen, [indexfile]) + largetree['docname'] = indexfile + logger.info("resolving references...") + self.env.resolve_references(largetree, indexfile, self) + # resolve :ref:s to other PDF files -- we can't add a cross-reference, + # but append the document name + for pendingnode in largetree.traverse(addnodes.pending_xref): + docname = pendingnode['refdocname'] + sectname = pendingnode['refsectname'] + newnodes = [nodes.emphasis(sectname, sectname)] + for subdir, title in self.titles: + if docname.startswith(subdir): + newnodes.append(nodes.Text(_(' (in '), _(' (in '))) + newnodes.append(nodes.emphasis(title, title)) + newnodes.append(nodes.Text(')', ')')) + break + else: + pass + pendingnode.replace_self(newnodes) + return largetree, self._docnames + + def generate_indices(self, docnames, indices_config): + def index_flowables(content): + for section, entries in content: + yield IndexLabel(str(section)) + for (name, subtype, docname, anchor, _, _, _) in entries: + target_ids = ([anchor] if anchor else None) + entry_name = SingleStyledText(name, style='domain') + yield IndexEntry(entry_name, + level=2 if subtype == 2 else 1, + target_ids=target_ids) + + if indices_config: + for domain in self.env.domains.values(): + for indexcls in domain.indices: + indexname = '%s-%s' % (domain.name, indexcls.name) + if isinstance(indices_config, list): + if indexname not in indices_config: + continue + content, collapsed = indexcls(domain).generate(docnames) + if not content: + continue + index_section_label = str(indexcls.localname) + yield IndexSection(SingleStyledText(index_section_label), + index_flowables(content)) + + def write(self, *ignored): + variable_removed_warnings(self.config, logger) + document_data = self.document_data(logger) + for entry in document_data: + self.write_document(entry) + + def write_document(self, document_data): + data = copy(document_data) + target = data.pop('target') + logger.info("processing %s... ", target, nonl=1) + rinoh_document = self.construct_rinohtype_document(data) + outfilename = path.join(self.outdir, os_path(target)) + ensuredir(path.dirname(outfilename)) + logger.info("rendering... ") + rinoh_document.render(outfilename) + logger.info("done") + + def construct_rinohtype_document(self, document_data): + doc = document_data.pop('doc') + toctree_only = document_data.pop('toctree_only', False) + template = document_data.pop('template', 'book') + domain_indices = document_data.pop('domain_indices', True) + + doctree, docnames = self.assemble_doctree(doc, toctree_only) + self.preprocess_tree(doctree) + self.post_process_images(doctree) + rinoh_tree = from_doctree(doctree, sphinx_builder=self) + rinoh_template = self.template_configuration(template, logger) + rinoh_document = rinoh_template.document(rinoh_tree) + extra_indices = StaticGroupedFlowables( + self.generate_indices(docnames, domain_indices)) + # TODO: use out-of-line flowables? + rinoh_document.insert('back_matter', extra_indices, 0) + self.set_document_metadata(rinoh_document, document_data) + return rinoh_document + + def template_configuration(self, template, logger): + config = self.config + contructor_args = {} + if isinstance(template, str): + tmpl_path = path.join(self.confdir, template) + if path.isfile(tmpl_path): + base = TemplateConfigurationFile(template, source=self) + contructor_args['base'] = base + template_cls = contructor_args['base'].template + else: + template_cls = DocumentTemplate.from_string(template) + elif isinstance(template, TemplateConfiguration): + contructor_args['base'] = template + template_cls = template.template + else: + template_cls = template + + language = config.language + if language: + try: + contructor_args['language'] = Language.from_string(language) + except KeyError: + logger.warning("The language '{}' is not supported by" + " rinohtype.".format(language)) + + sphinx_config = template_cls.Configuration('Sphinx conf.py options', + **contructor_args) + return sphinx_config + + def set_document_metadata(self, rinoh_document, metadata): + rinoh_document.metadata.pop('date') # Sphinx provides a default + rinoh_document.metadata.update(metadata) + if 'logo' in rinoh_document.metadata: + logo_path = Path(rinoh_document.metadata['logo']) + if not logo_path.is_absolute(): + rinoh_document.metadata['logo'] = self.confdir / logo_path + for key, default in METADATA_DEFAULTS.items(): + if key not in rinoh_document.metadata: + rinoh_document.metadata[key] = default(self.config) + + +METADATA_DEFAULTS = dict( + title=lambda cfg: '{} documentation'.format(cfg.project), + subtitle=lambda cfg: '{} {}'.format(_('Release'), cfg.release), + author=lambda cfg: cfg.author, + date=lambda cfg: (cfg.today or format_date(cfg.today_fmt or _('%b %d, %Y'), + language=cfg.language)) +) + + +def rinoh_document_to_document_data(entry, logger): + if type(entry) in (list, tuple): + entry = list_to_document_data(entry, logger) + for key in ('doc', 'target'): + if key not in entry: + raise SphinxError("'{}' key is missing from rinoh_documents" + " entry".format(key)) + return entry + + +def list_to_document_data(entry, logger): + logger.warning("'rinoh_documents' entry converted from list. In future" + " versions this shall be deprecated.") + keys = ('doc', 'target', 'title', 'author', 'toctree_only') + document_data = dict(zip(keys, entry)) + document_data['template'] = 'book' + return document_data + + +def latex_document_to_document_data(entry, logger): + logger.warning("'rinoh_documents' config variable not set, automatically" + " converting from 'latex_documents'") + startdocname, targetname, title, author, documentclass = entry[:5] + toctree_only = entry[5] if len(entry) > 5 else False + targetname_root, _ = os.path.splitext(targetname) + return list_to_document_data([startdocname, targetname_root, title, author, + toctree_only], logger) + + +def variable_removed_warnings(config, logger): + def warn(variable, thing, where): + message = ("Support for '{}' has been removed. Instead, please" + " specify the {} to use in your {}.") + logger.warning(message.format(variable, thing, where)) + if config.rinoh_stylesheet is not None: + warn('rinoh_stylesheet', 'style sheet', 'template configuration') + if config.rinoh_paper_size is not None: + warn('rinoh_paper_size', 'paper size', 'template configuration') + if config.rinoh_template is not None: + warn('rinoh_template', 'template', "'rinoh_documents' entries") + if config.rinoh_logo is not None: + warn('rinoh_logo', 'logo', "'rinoh_documents' entries") + if config.rinoh_domain_indices is not None: + warn('rinoh_domain_indices', 'domain indices', + "'rinoh_documents' entries") + if config.rinoh_metadata is not None: + warn('rinoh_metadata', 'metadata values', "'rinoh_documents' entries") + + +def setup(app): + app.add_builder(RinohBuilder) + app.add_post_transform(transforms.RinohCitationReferenceTransform) + app.add_config_value('rinoh_documents', None, 'env', (dict, list)) + app.add_config_value('rinoh_targets', None, 'env', (list, str)) + # the following are no longer supported and have no effect + app.add_config_value('rinoh_logo', None, 'html') + app.add_config_value('rinoh_domain_indices', None, 'html') + app.add_config_value('rinoh_template', None, 'html') + app.add_config_value('rinoh_metadata', None, 'html') + app.add_config_value('rinoh_stylesheet', None, 'html') + app.add_config_value('rinoh_paper_size', None, 'html') + return dict(version=rinoh_version, + parallel_read_safe=True) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..bfa4a8c3a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/nodes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/nodes.cpython-312.pyc new file mode 100644 index 000000000..176a6baa6 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/nodes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/transforms.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/transforms.cpython-312.pyc new file mode 100644 index 000000000..2c83c4a25 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/transforms.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/util.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/util.cpython-312.pyc new file mode 100644 index 000000000..2f69ae263 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/__pycache__/util.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/nodes.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/nodes.py new file mode 100644 index 000000000..bec24dfc4 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/nodes.py @@ -0,0 +1,425 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +import unicodedata + +from itertools import chain + +from pygments.lexers import get_lexer_by_name, guess_lexer +from pygments.lexers.c_cpp import CLexer +from pygments.lexers.markup import RstLexer +from pygments.lexers.python import (PythonLexer, Python3Lexer, + PythonConsoleLexer) +from pygments.lexers.special import TextLexer +from pygments.util import ClassNotFound + +from sphinx.ext.graphviz import render_dot + +from ...annotation import HyperLink +from ...flowable import LabeledFlowable, StaticGroupedFlowables +from ...glossary import GlossaryTerm +from ...image import Image, Figure +from ...index import IndexTerm, IndexTarget, InlineIndexTarget +from ...paragraph import Paragraph +from ...reference import Reference +from ...structure import DefinitionList, List +from ...text import SingleStyledText, MixedStyledText +from ...util import intersperse +from ...warnings import warn + +from ..rst import (DocutilsNode, DocutilsInlineNode, DocutilsBodyNode, + DocutilsGroupingNode, DocutilsDummyNode) +from ..rst import nodes as rst + + +__all__ = ['Compact_Paragraph', 'Centered', 'HList', 'Index', 'Pending_XRef', + 'Literal_Emphasis', 'Abbreviation', 'Download_Reference', 'SeeAlso', + 'Glossary', 'Start_of_File', 'Todo_Node', 'HighlightLang', + 'Literal_Strong', 'ProductionList', 'Production', 'TermSep', 'Desc', + 'Desc_Signature', 'Desc_Signature_Line', 'Desc_Sig_Name', + 'Desc_Sig_Operator', 'Desc_Sig_Punctuation', 'Desc_Name', + 'Desc_AddName', 'Desc_Type', 'Desc_ParameterList', 'Desc_Parameter', + 'Desc_Optional', 'Desc_Annotation', 'Desc_Content', 'Desc_Returns', + 'VersionModified', 'Tabular_Col_Spec', 'AutoSummary_Table', + 'Autosummary_ToC', 'Number_Reference'] + + +# other paragraph-level nodes + +class Compact_Paragraph(DocutilsGroupingNode): + pass + + +class Centered(DocutilsBodyNode): + def build_flowable(self): + return Paragraph(super().process_content(), style='centered') + + +class HList(DocutilsBodyNode): + def build_flowable(self): + list = List([list_item.flowable() + for hlistcol in self.hlistcol + for bullet_list in hlistcol.getchildren() + for list_item in bullet_list.getchildren()], + style='bulleted') + list.compact = True + list.columns = sum(1 for _ in self.hlistcol) + return list + + +class HListCol(DocutilsNode): + pass + + +# inline nodes + +class Index(DocutilsBodyNode, DocutilsInlineNode): + @property + def _index_terms(self): + for type, entry_name, target, ignored, key in self.get('entries'): + if type == 'single': + yield IndexTerm(*(n.strip() for n in entry_name.split(';'))) + elif type == 'pair': + name, other_name = (n.strip() for n in entry_name.split(';')) + yield IndexTerm(name, other_name) + yield IndexTerm(other_name, name) + elif type == 'triple': + one, two, three = (n.strip() for n in entry_name.split(';')) + yield IndexTerm(one, two + ' ' + three) + yield IndexTerm(two, three + ', ' + one) + yield IndexTerm(three, one + ' ' + two) + else: + raise NotImplementedError + + def build_flowable(self): + return IndexTarget(list(self._index_terms)) + + def build_styled_text(self): + return InlineIndexTarget(list(self._index_terms)) + + +class Pending_XRef(DocutilsInlineNode): + def build_styled_text(self): + raise NotImplementedError + + +class Inline(rst.Inline): + class_styles = dict(accelerator='accelerator', + guilabel='UI control', + menuselection='menu cascade') + + +class Emphasis(rst.Emphasis): + class_styles = dict(dfn='definition') + + +class Literal(rst.Literal): + class_styles = dict(file='file path', + kbd='keystrokes', + regexp='regular expression', + samp='code with variable') + + +class Literal_Emphasis(rst.Literal): + style = 'literal emphasis' + class_styles = dict(mailheader='mail header', + mimetype='MIME type', + newsgroup='newsgroup') + + +class Literal_Strong(rst.Literal): + style = 'literal strong' + class_styles = dict(command='command', + makevar='make variable', + program='program') + + +class ManPage(rst.Inline): + style = 'man page' + + +lexers = dict( + none = TextLexer(stripnl=False), + python = PythonLexer(stripnl=False), + python3 = Python3Lexer(stripnl=False), + pycon = PythonConsoleLexer(stripnl=False), + pycon3 = PythonConsoleLexer(python3=True, stripnl=False), + rest = RstLexer(stripnl=False), + c = CLexer(stripnl=False), +) # type: Dict[unicode, Lexer] +for _lexer in lexers.values(): + _lexer.add_filter('raiseonerror') + + +class Literal_Block(rst.Literal_Block): + @staticmethod + def lexer_getter(text, language): + # This is a partial copy of Sphinx's PygmentsBridge.highlight_block() + if language in ('py', 'python'): + if text.startswith('>>>'): + # interactive session + lexer = lexers['pycon'] + else: + lexer = lexers['python'] + elif language in ('py3', 'python3', 'default'): + if text.startswith('>>>'): + lexer = lexers['pycon3'] + else: + lexer = lexers['python3'] + elif language == 'guess': + try: + lexer = guess_lexer(text) + except Exception: + lexer = lexers['none'] + else: + if language in lexers: + lexer = lexers[language] + else: + try: + lexer = lexers[language] = get_lexer_by_name(language) + except ClassNotFound: + if warn: + warn('Pygments lexer name %r is not known' + % language) + lexer = lexers['none'] + else: + raise + else: + lexer.add_filter('raiseonerror') + return lexer + + @property + def language(self): + if 'language' in self.attributes: # (Sphinx) .. code-block:: + return self.get('language') + else: # (docutils) + return super().language + + +class Abbreviation(DocutilsInlineNode): + def build_styled_text(self): + term = self.process_content() + kwargs = (dict(definition=self.get('explanation')) + if 'explanation' in self.attributes else {}) + return GlossaryTerm(term, style='abbreviation', **kwargs) + + +class Download_Reference(DocutilsInlineNode): + def build_styled_text(self): + content = self.process_content(style='download link') + try: + # TODO: (optionally) embed the file in the PDF + content.annotation = HyperLink(self.get('reftarget')) + except KeyError: + pass + return content + + +# admonitions + +class SeeAlso(rst.Admonition): + pass + + +class VersionModified(DocutilsGroupingNode): + pass + + +# special nodes + +class Glossary(DocutilsGroupingNode): + style = 'glossary' + + +class Start_of_File(DocutilsGroupingNode): + def build_flowable(self, **kwargs): + return super().build_flowable(id='%' + self.get('docname'), **kwargs) + + +class Todo_Node(rst.Admonition): + pass + + +class HighlightLang(DocutilsDummyNode): # these are handled by RinohBuilder + pass + + +# toctree nodes are processed by the Sphinx builder + +NO_BREAK_SPACE = unicodedata.lookup('NO-BREAK SPACE') + +class ProductionList(DocutilsBodyNode): + def build_flowable(self): + items = [] + productions = iter(self.production) + production = next(productions) + while production is not None: + token_label = production.flowable() + definition_text = ['::=' + production.text] + for production in productions: + token_name = production.get('tokenname') + if token_name: + break + else: + definition_text.append(' ' + production.text) + else: + production = None + token_definition = Paragraph('\n'.join(definition_text) + .replace(' ', NO_BREAK_SPACE), + style='definition') + item = LabeledFlowable(token_label, token_definition, + style='production') + items.append(item) + return DefinitionList(items, style='production list') + + +class Production(DocutilsBodyNode): + def build_flowable(self): + return Paragraph(self.get('tokenname'), style='token') + + +class TermSep(DocutilsInlineNode): + def build_styled_text(self): + return SingleStyledText(', ', style='term separator') + + +# domain-specific object descriptions + +class Desc(DocutilsBodyNode): + def build_flowable(self): + term = StaticGroupedFlowables((sig.flowable() + for sig in self.desc_signature), + style='signatures') + description = self.desc_content.flowable() + return LabeledFlowable(term, description, style='object description') + + +class Desc_Signature(DocutilsBodyNode): + def build_flowable(self): + if self.get('is_multiline', False): + lines = (line.styled_text() for line in self.desc_signature_line) + content = intersperse(lines, '\n') + else: + content = self.process_content() + return Paragraph(content) + + +class Desc_Signature_Line(DocutilsInlineNode): + pass + + +class Desc_Sig_Space(DocutilsInlineNode): + pass + + +class Desc_Sig_Name(DocutilsInlineNode): + pass + + +class Desc_Sig_Operator(DocutilsInlineNode): + pass + + +class Desc_Sig_Punctuation(DocutilsInlineNode): + pass + + +class Desc_Name(DocutilsInlineNode): + style = 'main object name' + + +class Desc_AddName(DocutilsInlineNode): + style = 'additional name part' + + +class Desc_Type(DocutilsInlineNode): + style = 'type' + + +class Desc_ParameterList(DocutilsInlineNode): + def build_styled_text(self): + try: + params = intersperse((param.styled_text() + for param in self.desc_parameter), ', ') + except AttributeError: + params = () + try: + params = chain(params, (self.desc_optional.styled_text(), )) + except AttributeError: + pass + return (SingleStyledText(' ( ', style='parentheses') + + MixedStyledText(params, style='parameter list') + + SingleStyledText(' ) ', style='parentheses')) + + +class Desc_Parameter(DocutilsInlineNode): + def build_styled_text(self): + style = 'parameter' + if self.get('noemph'): + style = 'noemph ' + style + return self.process_content(style=style) + + +class Desc_Optional(DocutilsInlineNode): + def build_styled_text(self): + return (SingleStyledText(' [, ', style='brackets') + + self.process_content(style='optional') + + SingleStyledText(' ] ', style='brackets')) + + +class Desc_Annotation(DocutilsInlineNode): + style = 'annotation' + + +class Desc_Content(DocutilsGroupingNode): + style = 'content' + + +class Desc_Returns(DocutilsInlineNode): + style = 'returns' + + def build_styled_text(self): + arrow = SingleStyledText(unicodedata.lookup('RIGHTWARDS ARROW'), + style='returns arrow') + return arrow + ' ' + super().build_styled_text() + + + +# not listed in "Doctree node classes added by Sphinx" + +class Tabular_Col_Spec(DocutilsDummyNode): + pass + + +class AutoSummary_Table(DocutilsGroupingNode): + pass + + +class Autosummary_ToC(DocutilsGroupingNode): + style = 'autosummary' + + +class Number_Reference(DocutilsInlineNode): + def build_styled_text(self): + return Reference(self.get('refid'), 'reference') + + +class Footnotes_Rubric(DocutilsDummyNode): + """A custom rinohtype-specific node that allows easily excluding footnote + rubrics from the output""" + + +class Graphviz(DocutilsBodyNode): + def build_flowable(self): + sphinx_app = self.context['sphinx_builder'].app + code = self.get('code') + fname, outfn = render_dot(sphinx_app, code, self.get('options'), 'pdf') + if fname is None: + return Paragraph(code, style='graphviz') + image = Image(outfn, align=self.get('align')) + image.classes.extend(['graphviz']) + return image diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/transforms.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/transforms.py new file mode 100644 index 000000000..9fcf3baa4 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/transforms.py @@ -0,0 +1,31 @@ +from typing import cast + +from docutils import nodes +from docutils.nodes import Text +from sphinx import addnodes +from sphinx.domains.citation import CitationDomain +from sphinx.transforms.post_transforms import SphinxPostTransform +from sphinx.util.nodes import NodeMatcher + +from .util import fully_qualified_id + + +class RinohCitationReferenceTransform(SphinxPostTransform): + default_priority = 5 # before ReferencesResolver + formats = ('pdf',) + builders = ('rinoh',) + + def run(self, **kwargs) -> None: + domain = cast(CitationDomain, self.env.get_domain('citation')) + pending_xref = NodeMatcher(addnodes.pending_xref, refdomain='citation', + reftype='ref') + for node in self.document.traverse(pending_xref): + docname, reftarget, _ = domain.citations.get(node['reftarget'], + ('', '', 0)) + refid = fully_qualified_id(docname, reftarget) + if docname: + child = Text(node['reftarget']) + citation_ref = nodes.citation_reference('', '', child, + docname=docname, + refid=refid) + node.replace_self(citation_ref) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/util.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/util.py new file mode 100644 index 000000000..87d1a2e88 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/sphinx/util.py @@ -0,0 +1,13 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +__all__ = ['fully_qualified_id'] + + +def fully_qualified_id(docname, id): + return id if id.startswith('%') else '%' + docname + '#' + id diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__init__.py new file mode 100644 index 000000000..8a042d7d3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__init__.py @@ -0,0 +1,210 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import os +import re + +from urllib.parse import urljoin +from urllib.request import pathname2url + +from ...styleds import Paragraph +from ...text import MixedStyledText +from ...util import NotImplementedAttribute + +from ... import DATA_PATH + +from .. import (TreeNode, InlineNode, BodyNode, BodySubNode, GroupingNode, + DummyNode, TreeNodeMeta) + + +__all__ = ['filter', 'strip_and_filter', + 'ElementTreeNode', 'ElementTreeInlineNode', 'ElementTreeBodyNode', + 'ElementTreeBodySubNode', 'ElementTreeGroupingNode', + 'ElementTreeMixedContentNode', 'ElementTreeDummyNode', + 'ElementTreeNodeMeta'] + + +CATALOG_PATH = os.path.join(DATA_PATH, 'xml', 'catalog') +CATALOG_URL = urljoin('file:', pathname2url(CATALOG_PATH)) +CATALOG_NS = "urn:oasis:names:tc:entity:xmlns:xml:catalog" + + +RE_WHITESPACE = re.compile('[\t\r\n ]+') + + +def ends_with_space(node): + while node.getchildren(): + node = node.getchildren()[-1] + if node.tail: + text = node.tail + break + else: + text = node.text or '' + return text.endswith(' ') + + +def filter_styled_text_node(node, strip_leading_ws): + styled_text = node.styled_text(strip_leading_ws) + if styled_text: + yield styled_text, ends_with_space(node) + + +def strip_and_filter(text, strip_leading_whitespace): + if not text: + return + if strip_leading_whitespace: + text = text.lstrip() + if text: + yield text, text.endswith(' ') + + +def filter_whitespace(text, children, strip_leading_ws): + for item, strip_leading_ws in strip_and_filter(text, strip_leading_ws): + yield item + for child in children: + for result in filter_styled_text_node(child, strip_leading_ws): + styled_text, strip_leading_ws = result + yield styled_text + for item, strip_leading_ws in strip_and_filter(child.tail, + strip_leading_ws): + yield item + + +def process_content(text, children, strip_leading_whitespace=True, style=None): + text_items = filter_whitespace(text, children, strip_leading_whitespace) + return MixedStyledText([item for item in text_items], style=style) + + +class ElementTreeNode(TreeNode): + NAMESPACE = NotImplementedAttribute() + + @classmethod + def strip_namespace(cls, tag): + if '{' in tag: + assert tag.startswith('{{{}}}'.format(cls.NAMESPACE)) + return tag[tag.find('}') + 1:] + else: + return tag + + @classmethod + def node_tag_name(cls, node): + return cls.strip_namespace(node.tag) + + @staticmethod + def node_parent(node): + return node._parent + + @staticmethod + def node_children(node): + return node.getchildren() + + @property + def location(self): + return self.node._root._filename, self.node.sourceline, self.tag_name + + @property + def _id(self): + return self.get('id') + + @property + def _location(self): + return self.node_location(self.node) + + @property + def filename(self): + return self.node._root._filename + + @property + def text(self): + if self.node.text: + if self.get('xml:space') == 'preserve': + return self.node.text + else: + return RE_WHITESPACE.sub(' ', self.node.text) + else: + return '' + + @property + def tail(self): + if self.node.tail: + return RE_WHITESPACE.sub(' ', self.node.tail) + else: + return None + + @property + def attributes(self): + return self.node.attrib + + def get(self, key, default=None): + return self.node.get(key, default) + + def __getitem__(self, name): + return self.node[name] + + def process_content(self, strip_leading_whitespace=True, style=None): + return process_content(self.text, self.getchildren(), + strip_leading_whitespace, style=style) + + +class ElementTreeInlineNode(ElementTreeNode, InlineNode): + def styled_text(self, strip_leading_whitespace=False): + return self.build_styled_text(strip_leading_whitespace) + + def build_styled_text(self, strip_leading_whitespace=False): + return self.process_content(strip_leading_whitespace, style=self.style) + + +class ElementTreeBodyNode(ElementTreeNode, BodyNode): + def flowables(self): + classes = self.get('classes') + for flowable in super().flowables(): + flowable.classes = classes + yield flowable + + +class ElementTreeBodySubNode(ElementTreeNode, BodySubNode): + pass + + +class ElementTreeGroupingNode(ElementTreeBodyNode, GroupingNode): + pass + + +class ElementTreeMixedContentNode(ElementTreeGroupingNode): + def children_flowables(self): + strip_leading_ws = True + paragraph = [] + for item, strip_leading_ws in strip_and_filter(self.text, + strip_leading_ws): + paragraph.append(item) + for child in self.getchildren(): + try: + for result in filter_styled_text_node(child, strip_leading_ws): + styled_text, strip_leading_ws = result + paragraph.append(styled_text) + except AttributeError: + if paragraph and paragraph[0]: + yield Paragraph(paragraph) + paragraph = [] + for flowable in child.flowables(): + yield flowable + for item, strip_leading_ws \ + in strip_and_filter(child.tail, strip_leading_ws): + paragraph.append(item) + if paragraph and paragraph[0]: + yield Paragraph(paragraph) + + +class ElementTreeDummyNode(ElementTreeNode, DummyNode): + pass + + +class ElementTreeNodeMeta(TreeNodeMeta): + root = ElementTreeNode + bases = (ElementTreeInlineNode, ElementTreeBodyNode, ElementTreeBodySubNode, + ElementTreeGroupingNode, ElementTreeDummyNode) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..033c9f7f6 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__pycache__/elementtree.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__pycache__/elementtree.cpython-312.pyc new file mode 100644 index 000000000..c5836167c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__pycache__/elementtree.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__pycache__/lxml.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__pycache__/lxml.cpython-312.pyc new file mode 100644 index 000000000..74f5bea9d Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/__pycache__/lxml.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/elementtree.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/elementtree.py new file mode 100644 index 000000000..2b94b5285 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/elementtree.py @@ -0,0 +1,125 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import sys + +from os import path +from urllib.parse import urlparse, urljoin +from urllib.request import urlopen +from warnings import warn + +# this module depends on internals of the Python ElementTree implementation, so +# we can't use the C accelerated versions (which are the default in Python 3.3+) +_cached_etree_modules = {} +for name in list(sys.modules.keys()): + if name.startswith('xml.etree') or name == '_elementtree': + _cached_etree_modules[name] = sys.modules.pop(name) +sys.modules['_elementtree'] = None + +from xml.etree import ElementTree +from xml.etree.ElementTree import Element, SubElement + +for name in list(sys.modules.keys()): + if name.startswith('xml.etree'): + del sys.modules[name] +sys.modules.update(_cached_etree_modules) + +from . import CATALOG_PATH, CATALOG_URL, CATALOG_NS + + +__all__ = ['Parser', 'ElementTree', 'Element', 'SubElement'] + + +class TreeBuilder(ElementTree.TreeBuilder): + def __init__(self, namespace, line_callback, element_factory=None): + super().__init__(element_factory) + self._namespace = namespace + self._line_callback = line_callback + + def start(self, tag, attrs): + elem = super().start(tag, attrs) + elem.sourceline = self._line_callback() + return elem + + def end(self, tag): + last = super().end(tag) + try: + last._parent = self._elem[-1] + last._root = self._elem[0] + except IndexError: + last._parent = None + last._root = last + last._namespace = self._namespace + return last + + +class Parser(ElementTree.XMLParser): + def __init__(self, namespace=None, schema=None): + if schema: + warn('The ElementTree based XML parser does not support ' + 'validation. Please use the lxml frontend if you require ' + 'validation.') + self.namespace = '{{{}}}'.format(namespace) if namespace else '' + tree_builder = TreeBuilder(self.namespace, self.get_current_line_number) + super().__init__(target=tree_builder) + # uri_rewrite_map = self.create_uri_rewrite_map() + # self.parser.SetParamEntityParsing(expat.XML_PARAM_ENTITY_PARSING_ALWAYS) + # self.parser.ExternalEntityRefHandler \ + # = ExternalEntityRefHandler(self.parser, uri_rewrite_map) + + def get_current_line_number(self): + return self.parser.CurrentLineNumber + + def create_uri_rewrite_map(self): + rewrite_map = {} + catalog = ElementTree.parse(CATALOG_PATH).getroot() + for elem in catalog.findall('{{{}}}{}'.format(CATALOG_NS, + 'rewriteSystem')): + start_string = elem.get('systemIdStartString') + prefix = elem.get('rewritePrefix') + rewrite_map[start_string] = prefix + return rewrite_map + + def parse(self, file_or_filename, root_directory=None): + filename = (file_or_filename if isinstance(file_or_filename, str) + else getattr(file_or_filename, 'name', None)) + element_tree = ElementTree.ElementTree() + element_tree.parse(file_or_filename, self) + root_node = element_tree.getroot() + if filename: + relative_filename = (filename if root_directory is None + else path.relpath(filename, root_directory)) + root_node._filename = relative_filename + root_node._abs_filename = path.abspath(filename) + else: + root_node._filename = root_node._abs_filename = None + return root_node + + +class ExternalEntityRefHandler(object): + def __init__(self, parser, uri_rewrite_map): + self.parser = parser + self.uri_rewrite_map = uri_rewrite_map + + def __call__(self, context, base, system_id, public_id): + if base and not urlparse(system_id).netloc: + system_id = urljoin(base, system_id) + # look for local copies of common entity files + external_parser = self.parser.ExternalEntityParserCreate(context) + external_parser.ExternalEntityRefHandler \ + = ExternalEntityRefHandler(self.parser, self.uri_rewrite_map) + for start_string, prefix in self.uri_rewrite_map.items(): + if system_id.startswith(start_string): + remaining = system_id.split(start_string)[1] + base = urljoin(CATALOG_URL, prefix) + system_id = urljoin(base, remaining) + break + external_parser.SetBase(system_id) + with urlopen(system_id) as file: + external_parser.ParseFile(file) + return 1 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/lxml.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/lxml.py new file mode 100644 index 000000000..f90bdac7a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/frontend/xml/lxml.py @@ -0,0 +1,48 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import os + +from lxml import etree, objectify + +from ...util import all_subclasses +from . import CATALOG_URL + + +try: + os.environ['XML_CATALOG_FILES'] += ' ' + CATALOG_URL +except KeyError: + os.environ['XML_CATALOG_FILES'] = CATALOG_URL + + +class Parser(object): + def __init__(self, element_class, namespace=None, schema=None): + self.element_class = element_class + lookup = etree.ElementNamespaceClassLookup() + namespace = lookup.get_namespace(namespace) + namespace[None] = self.element_class + namespace.update({cls.__name__.lower(): cls + for cls in all_subclasses(self.element_class)}) + self.parser = objectify.makeparser(remove_comments=True, + no_network=True) + self.parser.set_element_class_lookup(lookup) + self.schema = etree.RelaxNG(etree.parse(schema)) + + def parse(self, xmlfile): + xml = objectify.parse(xmlfile, self.parser)#, base_url=".") + xml.xinclude() + if not self.schema.validate(xml): + err = self.schema.error_log + raise Exception("XML file didn't pass schema validation:\n%s" % err) + return xml + + +class BaseElement(objectify.ObjectifiedElement): + @property + def filename(self): + return self.getroottree().docinfo.URL diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/glossary.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/glossary.py new file mode 100644 index 000000000..dffcc318b --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/glossary.py @@ -0,0 +1,67 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .attribute import OptionSet, Attribute, OverrideDefault +from .flowable import GroupedFlowables +from .text import MixedStyledText, MixedStyledTextBase, TextStyle + + +__all__ = ['ShowDefinition', 'GlossaryTermStyle', 'GlossaryTerm', 'Glossary'] + + +class ShowDefinition(OptionSet): + """When to show the definition together with a glossary term in the text""" + + values = 'never', 'first', 'always' # TODO: 'section' + + +class GlossaryTermStyle(TextStyle): + show_definition = Attribute(ShowDefinition, ShowDefinition.FIRST, + 'When to show the definition together with the' + ' glossary term in the text') + + +# TODO: inherit from Reference(Base) to hyperlink to the glossary entry +class GlossaryTerm(MixedStyledTextBase): + style_class = GlossaryTermStyle + + def __init__(self, term, definition=None, id=None, style=None, parent=None): + super().__init__(id=id, style=style, parent=parent) + term.parent = self + self.term = term + self.definition = definition + + def children(self, container): + doc = container.document + id = self.get_id(container.document) + term_str = self.term.to_string(container) + if self.definition and not doc.set_glossary(term_str, self.definition): + self.warn("The definition for '{}' doesn't match the first" + " definition".format(term_str), container) + yield self.term + show_definition = self.get_style('show_definition', container) + if show_definition == ShowDefinition.NEVER: + return + try: + definition, first_id = doc.get_glossary(term_str, id) + except KeyError: + self.warn("No definition given for '{}' glossary term" + .format(term_str), container) + return + definition_text = MixedStyledText(definition, parent=self, + style='glossary inline definition') + if show_definition == ShowDefinition.FIRST: + if first_id == id: + yield definition_text + elif show_definition == ShowDefinition.ALWAYS: + yield definition_text + + +class Glossary(GroupedFlowables): + pass + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/highlight.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/highlight.py new file mode 100644 index 000000000..3807e70f7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/highlight.py @@ -0,0 +1,144 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +from packaging.version import Version + +from .color import HexColor +from .flowable import (StaticGroupedFlowables, GroupedFlowablesStyle, + Float, FloatStyle) +from .font.style import FontWeight, FontSlant +from .paragraph import Paragraph +from .style import StyledMatcher, StyleSheet +from .text import SingleStyledText, MixedStyledText, TextStyle +from .util import VersionError +from .warnings import warn + +MIN_PYGMENTS_VERSION = '2.5.1' + +try: + from pygments import __version__ as _pygments_version + if Version(_pygments_version) < Version(MIN_PYGMENTS_VERSION): + raise VersionError('rinohtype requires pygments >= {}' + .format(MIN_PYGMENTS_VERSION)) + from pygments import lex + from pygments.filters import ErrorToken + from pygments.lexers import get_lexer_by_name + from pygments.style import StyleMeta + from pygments.styles import get_style_by_name + PYGMENTS_AVAILABLE = True +except ImportError: + PYGMENTS_AVAILABLE = False + + +__all__ = ['CodeBlock', 'CodeBlockWithCaption', 'Token', + 'pygments_style_to_stylesheet'] + + +class CodeBlock(Paragraph): + """Paragraph with syntax highlighting""" + + significant_whitespace = True + + def __init__(self, text, language=None, id=None, style=None, parent=None, + lexer_getter=None): + if PYGMENTS_AVAILABLE: + text = highlight_block(language or 'text', text, lexer_getter) + else: + warn("The 'pygments' package is not available; cannot perform " + "syntax highlighting of {}s.".format(type(self).__name__)) + super().__init__(text, id=id, style=style, parent=parent) + + +class CodeBlockWithCaptionStyle(FloatStyle, GroupedFlowablesStyle): + pass + + +class CodeBlockWithCaption(Float, StaticGroupedFlowables): + style_class = CodeBlockWithCaptionStyle + category = 'listing' + + +def highlight_block(language, text, lexer_getter): + get_lexer = lexer_getter or (lambda text, lang: get_lexer_by_name(lang)) + lexer = get_lexer(text, language) + lexer.add_filter('tokenmerge') + try: + text = [Token(value, token_type) + for token_type, value in lex(text, lexer)] + except ErrorToken as exc: + # this is most probably not the selected language, + # so let it pass unhighlighted + if language == 'default': + pass # automatic highlighting failed. + elif warn: + warn('Could not lex literal_block as "%s". ' + 'Highlighting skipped.' % language) + else: + raise exc + return MixedStyledText(text) + + +class Token(SingleStyledText): + def __init__(self, text, type, style=None, parent=None): + super().__init__(text, style=style, parent=parent) + self.type = type + + def __repr__(self): + """Return a representation of this token; the text string + along with a representation of its :class:`TextStyle`.""" + style = ', style={}'.format(self.style) if self.style else '' + return "{}('{}', type={}{})".format(self.__class__.__name__, + self.text(None), self.type, style) + + def _short_repr_kwargs(self, flowable_target): + yield 'type={}'.format(self.type) + for kwarg in super()._short_repr_kwargs(flowable_target): + yield kwarg + + +def get_pygments_style(style): + """Retrieve a Pygments style by name, by import path or, if `style` is + already Pygments style, simply return it.""" + if isinstance(style, StyleMeta): + return style + if '.' in style: # by python package/module + module, name = style.rsplit('.', 1) + return getattr(__import__(module, None, None, ['__name__']), name) + else: # by name + if style == 'sphinx': + from sphinx.pygments_styles import SphinxStyle + return SphinxStyle + elif style == 'pyramid': + from sphinx.pygments_styles import PyramidStyle + return PyramidStyle + elif style == 'none': + from sphinx.pygments_styles import NoneStyle + return NoneStyle + else: + return get_style_by_name(style) + + +def pygments_style_to_stylesheet(style, base=None): + if not PYGMENTS_AVAILABLE: + return None + pygments_style = get_pygments_style(style) + matcher = StyledMatcher() + style_sheet_name = '{} (pygments)'.format(pygments_style.__name__) + style_sheet = StyleSheet(style_sheet_name, matcher=matcher, base=base) + for token_type, style in pygments_style: + style_name = '(pygments){}'.format(token_type) + matcher[style_name] = Token.like(type=token_type) + style_attributes = {} + if style['italic']: + style_attributes['font_slant'] = FontSlant.ITALIC + if style['bold']: + style_attributes['font_weight'] = FontWeight.BOLD + if style['color']: + style_attributes['font_color'] = HexColor(style['color']) + # TODO: underline, bgcolor, border, roman, sans, mono + style_sheet[style_name] = TextStyle(**style_attributes) + return style_sheet diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/hyphenator.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/hyphenator.py new file mode 100644 index 000000000..99fed57dc --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/hyphenator.py @@ -0,0 +1,238 @@ +""" + +This is a Pure Python module to hyphenate text. + +It is inspired by Ruby's Text::Hyphen, but currently reads standard *.dic files, +that must be installed separately. + +In the future it's maybe nice if dictionaries could be distributed together with +this module, in a slightly prepared form, like in Ruby's Text::Hyphen. + +Wilbert Berendsen, March 2008 +info@wilbertberendsen.nl + +Ported to Python 3 by Brecht Machiels +brecht@mos6581.org + +License: LGPL. More info: http://python-hyphenator.googlecode.com/ + +""" + +import sys +import re + +__all__ = ("Hyphenator") + +# cache of per-file Hyph_dict objects +hdcache = {} + +# precompile some stuff +parse_hex = re.compile(r'\^{2}([0-9a-f]{2})').sub +parse = re.compile(r'(\d?)(\D?)').findall + +def hexrepl(matchObj): + return chr(int(matchObj.group(1), 16)) + + +class parse_alt(object): + """ + Parse nonstandard hyphen pattern alternative. + The instance returns a special int with data about the current position + in the pattern when called with an odd value. + """ + def __init__(self, pat, alt): + alt = alt.split(',') + self.change = alt[0] + if len(alt) > 2: + self.index = int(alt[1]) + self.cut = int(alt[2]) + 1 + else: + self.index = 1 + self.cut = len(re.sub(r'[\d\.]', '', pat)) + 1 + if pat.startswith('.'): + self.index += 1 + + def __call__(self, val): + self.index -= 1 + val = int(val) + if val & 1: + return dint(val, (self.change, self.index, self.cut)) + else: + return val + + +class dint(int): + """ + Just an int some other data can be stuck to in a data attribute. + Call with ref=other to use the data from the other dint. + """ + def __new__(cls, value, data=None, ref=None): + obj = int.__new__(cls, value) + if ref and type(ref) is dint: + obj.data = ref.data + else: + obj.data = data + return obj + + +class Hyph_dict(object): + """ + Reads a hyph_*.dic file and stores the hyphenation patterns. + Parameters: + -filename : filename of hyph_*.dic to read + """ + def __init__(self, filename): + self.patterns = {} + f = open(filename, 'rb') + charset = f.readline().strip().decode('ASCII') + if charset.startswith('charset '): + charset = charset[8:].strip() + + for pat in f: + pat = pat.decode(charset).strip() + if not pat or pat[0] == '%': continue + # replace ^^hh with the real character + pat = parse_hex(hexrepl, pat) + # read nonstandard hyphen alternatives + if '/' in pat: + pat, alt = pat.split('/', 1) + factory = parse_alt(pat, alt) + else: + factory = int + tag, value = zip(*[(s, factory(i or "0")) for i, s in parse(pat)]) + # if only zeros, skip this pattern + if max(value) == 0: continue + # chop zeros from beginning and end, and store start offset. + start, end = 0, len(value) + while not value[start]: start += 1 + while not value[end-1]: end -= 1 + self.patterns[''.join(tag)] = start, value[start:end] + f.close() + self.cache = {} + self.maxlen = max(map(len, self.patterns.keys())) + + def positions(self, word): + """ + Returns a list of positions where the word can be hyphenated. + E.g. for the dutch word 'lettergrepen' this method returns + the list [3, 6, 9]. + + Each position is a 'data int' (dint) with a data attribute. + If the data attribute is not None, it contains a tuple with + information about nonstandard hyphenation at that point: + (change, index, cut) + + change: is a string like 'ff=f', that describes how hyphenation + should take place. + index: where to substitute the change, counting from the current + point + cut: how many characters to remove while substituting the nonstandard + hyphenation + """ + word = word.lower() + points = self.cache.get(word) + if points is None: + prepWord = '.%s.' % word + res = [0] * (len(prepWord) + 1) + for i in range(len(prepWord) - 1): + for j in range(i + 1, min(i + self.maxlen, len(prepWord)) + 1): + p = self.patterns.get(prepWord[i:j]) + if p: + offset, value = p + s = slice(i + offset, i + offset + len(value)) + res[s] = map(max, value, res[s]) + + points = [dint(i - 1, ref=r) for i, r in enumerate(res) if r % 2] + self.cache[word] = points + return points + + +class Hyphenator(object): + """ + Reads a hyph_*.dic file and stores the hyphenation patterns. + Provides methods to hyphenate strings in various ways. + Parameters: + -filename : filename of hyph_*.dic to read + -left: make the first syllabe not shorter than this + -right: make the last syllabe not shorter than this + -cache: if true (default), use a cached copy of the dic file, if possible + + left and right may also later be changed: + h = Hyphenator(file) + h.left = 1 + """ + def __init__(self, filename, left=2, right=2, cache=True): + self.left = left + self.right = right + if not cache or filename not in hdcache: + hdcache[filename] = Hyph_dict(filename) + self.hd = hdcache[filename] + + def positions(self, word): + """ + Returns a list of positions where the word can be hyphenated. + See also Hyph_dict.positions. The points that are too far to + the left or right are removed. + """ + right = len(word) - self.right + return [i for i in self.hd.positions(word) if self.left <= i <= right] + + def iterate(self, word): + """ + Iterate over all hyphenation possibilities, the longest first. + """ + for i, p in reversed(list(enumerate(self.positions(word)))): + if p.data: + # get the nonstandard hyphenation data + change, index, cut = p.data + if word.isupper(): + change = change.upper() + c1, c2 = change.split('=') + yield word[:p+index] + c1, c2 + word[p+index+cut:], i == 0 + else: + yield word[:p], word[p:], i == 0 + + def wrap(self, word, width, hyphen='-'): + """ + Return the longest possible first part and the last part of the + hyphenated word. The first part has the hyphen already attached. + Returns None, if there is no hyphenation point before width, or + if the word could not be hyphenated. + """ + width -= len(hyphen) + for w1, w2 in self.iterate(word): + if len(w1) <= width: + return w1 + hyphen, w2 + + def inserted(self, word, hyphen='-'): + """ + Returns the word as a string with all the possible hyphens inserted. + E.g. for the dutch word 'lettergrepen' this method returns + the string 'let-ter-gre-pen'. The hyphen string to use can be + given as the second parameter, that defaults to '-'. + """ + l = list(word) + for p in reversed(self.positions(word)): + if p.data: + # get the nonstandard hyphenation data + change, index, cut = p.data + if word.isupper(): + change = change.upper() + l[p + index : p + index + cut] = change.replace('=', hyphen) + else: + l.insert(p, hyphen) + return ''.join(l) + + __call__ = iterate + + +if __name__ == "__main__": + + dict_file = sys.argv[1] + word = sys.argv[2] + + h = Hyphenator(dict_file, left=1, right=1) + + for i in h(word): + print(i) + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/image.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/image.py new file mode 100644 index 000000000..bdc9be48c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/image.py @@ -0,0 +1,422 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import os + +from ast import literal_eval +from pathlib import Path +from token import LPAR, RPAR, NAME, EQUAL, NUMBER, ENDMARKER, STRING, COMMA + +from .attribute import (Attribute, AttributesDictionary, OverrideDefault, + AcceptNoneAttributeType, OptionSet, Integer, + ParseError) +from .dimension import Dimension, PERCENT +from .flowable import (Flowable, FlowableState, HorizontalAlignment, + FlowableWidth, StaticGroupedFlowables, + GroupedFlowablesStyle, Float, FloatStyle) +from .inline import InlineFlowable +from .layout import ContainerOverflow, EndOfContainer +from .number import NumberFormat +from .paragraph import StaticParagraph, Paragraph, ParagraphStyle +from .strings import StringField +from .structure import ListOf, ListOfSection +from .text import MixedStyledText, SingleStyledText, TextStyle, ErrorText +from .util import posix_path, ReadAliasAttribute, PeekIterator + + +__all__ = ['Image', 'InlineImage', 'BackgroundImage', 'ImageArgs', + 'Scale', 'Caption', 'CaptionStyle', 'Figure', 'FigureStyle', + 'ListOfFiguresSection', 'ListOfFigures'] + + +class Scale(OptionSet): + """Scaling factor for images + + Can be a numerical value where a value of 1 keeps the image's original size + or one of :attr:`values`. + + """ + + values = 'fit', 'fill' + + @classmethod + def check_type(cls, value): + return super().check_type(value) or value > 0 + + @classmethod + def from_tokens(cls, tokens, source): + if tokens.next.type == NAME: + value = super().from_tokens(tokens, source) + elif tokens.next.type == NUMBER: + value = float(next(tokens).string) + if not cls.check_type(value): + raise ParseError('Scale factor should be larger than 0') + else: + raise ParseError('Expecting scale option name or number') + return value + + @classmethod + def doc_format(cls): + return ('{} or a float larger than 0' + .format(', '.join('``{}``'.format(s) + for s in cls.value_strings))) + + +class ImageState(FlowableState): + image = ReadAliasAttribute('flowable') + + +class Filename(str): + """str subclass that provides system-independent path comparison""" + + def __eq__(self, other): + return posix_path(str(self)) == posix_path(str(other)) + + def __ne__(self, other): + return not (self == other) + + +class RequiredArg(Attribute): + def __init__(self, accepted_type, description): + super().__init__(accepted_type, None, description) + + +class OptionalArg(Attribute): + pass + + +class ImagePath(AcceptNoneAttributeType): + @classmethod + def from_tokens(cls, tokens, source): + token = next(tokens) + if token.type != STRING: + raise ParseError('Expecting a string') + return literal_eval(token.string) + + @classmethod + def doc_format(cls): + return ('path to an image file enclosed in quotes') + + +class ImageArgsBase(AttributesDictionary): + file_or_filename = RequiredArg(ImagePath, 'Path to the image file') + + scale = OptionalArg(Scale, 'fit', 'Scaling factor for the image') + width = OptionalArg(Dimension, None, 'The width to scale the image to') + height = OptionalArg(Dimension, None, 'The height to scale the image to') + dpi = OptionalArg(Integer, 0, 'Overrides the DPI value set in the image') + rotate = OptionalArg(Integer, 0, 'Angle in degrees to rotate the image') + + @staticmethod + def _parse_argument(argument_definition, tokens, source): + arg_tokens = [] + depth = 0 + for token in tokens: + if token.exact_type == LPAR: + depth += 1 + elif token.exact_type == RPAR: + depth -= 1 + arg_tokens.append(token) + if depth == 0 and tokens.next.exact_type in (COMMA, RPAR, + ENDMARKER): + break + argument_type = argument_definition.accepted_type + arg_tokens_iter = PeekIterator(arg_tokens) + argument = argument_type.from_tokens(arg_tokens_iter, source) + if not arg_tokens_iter.at_end: + raise ParseError('Syntax error') + return argument, tokens.next.exact_type in (RPAR, ENDMARKER) + + @classmethod + def parse_arguments(cls, tokens, source): + argument_defs = (cls.attribute_definition(name) + for name in cls._all_attributes) + args, kwargs = [], {} + + is_last_arg = False + # required arguments + for argument_def in (argdef for argdef in argument_defs + if isinstance(argdef, RequiredArg)): + argument, is_last_arg = cls._parse_argument(argument_def, tokens, + source) + args.append(argument) + # optional arguments + while not is_last_arg: + assert next(tokens).exact_type == COMMA + keyword_token = next(tokens) + if keyword_token.exact_type != NAME: + raise ParseError('Expecting a keyword!') + keyword = keyword_token.string + equals_token = next(tokens) + if equals_token.exact_type != EQUAL: + raise ParseError('Expecting the keyword to be followed by an ' + 'equals sign.') + + try: + argument_def = cls.attribute_definition(keyword) + except KeyError: + raise ParseError('Unsupported argument keyword: {}' + .format(keyword)) + argument, is_last_arg = cls._parse_argument(argument_def, tokens, + source) + kwargs[keyword] = argument + return args, kwargs + + +class ImageBase(Flowable): + """Base class for flowables displaying an image + + If DPI information is embedded in the image, it is used to determine the + size at which the image is displayed in the document (depending on the + sizing options specified). Otherwise, a value of 72 DPI is used. + + Args: + filename_or_file (str, file): the image to display. This can be a path + to an image file on the file system or a file-like object + containing the image. + scale (float): scales the image to `scale` times its original size + width (Dimension): specifies the absolute width or the width relative + to the container width + height (Dimension): specifies the absolute height or the width relative + to the container **width**. + dpi (float): overrides the DPI value embedded in the image (or the + default of 72) + rotate (float): the angle in degrees to rotate the image over + limit_width (Dimension): limit the image to this width when none of + scale, width and height are given and the image would be wider than + the container + + If only one of `width` or `height` is given, the image is scaled preserving + the original aspect ratio. + + If `width` or `height` is given, `scale` or `dpi` may not be specified. + + """ + arguments = ImageArgsBase + + def __init__(self, filename_or_file, scale=1.0, width=None, height=None, + dpi=None, rotate=0, limit_width=None, alt=None, + id=None, style=None, parent=None, source=None, **kwargs): + super().__init__(id=id, style=style, parent=parent, source=source, + **kwargs) + self.filename_or_file = filename_or_file + if (width, height) != (None, None): + if scale != 1.0: + raise TypeError('Scale may not be specified when either ' + 'width or height are given.') + if dpi is not None: + raise TypeError('DPI may not be specified when either ' + 'width or height are given.') + self.scale = scale + self.width = width + self.height = height + self.dpi = dpi + self.rotate = rotate + self.limit_width = limit_width + self.alt = alt + + def copy(self, parent=None): + return type(self)(self.filename_or_file, scale=self.scale, + width=self.width, height=self.height, dpi=self.dpi, + rotate=self.rotate, limit_width=self.limit_width, + id=self.id, style=self.style, parent=parent, + source=self.source) + + @property + def filename(self): + if isinstance(self.filename_or_file, str): + return Filename(self.filename_or_file) + + def _short_repr_args(self, flowable_target): + yield "'{}'".format(self.filename) + + def initial_state(self, container): + return ImageState(self) + + def _absolute_path_or_file(self): + try: + file_path = Path(self.filename_or_file) + except AttributeError: # self.filename_or_file is a file + return self.filename_or_file + if file_path.is_absolute(): + return file_path + if self.source_root is None: + raise ValueError('Image file path should be absolute:' + ' {}'.format(file_path)) + return self.source_root / file_path + + def render(self, container, last_descender, state, **kwargs): + try: + filename_or_file = self._absolute_path_or_file() + image = container.document.backend.Image(filename_or_file) + except OSError as err: + container.document.error = True + message = "Error opening image file: {}".format(err) + self.warn(message) + if self.alt is None: + error = ErrorText(message) + return Paragraph(error).flow(container, last_descender) + alt_text = MixedStyledText(self.alt) + return Paragraph(alt_text, style='image alt').flow(container, last_descender) + left, top = 0, float(container.cursor) + width = self._width(container) + try: + scale_width = width.to_points(container.width) / image.width + except AttributeError: # width is a FlowableWidth + scale_width = None + if self.height is not None: + scale_height = self.height.to_points(container.width) / image.height + if scale_width is None: + scale_width = scale_height + else: + scale_height = scale_width + if scale_width is None: # no width or height given + if self.scale in Scale.values: + w_scale = float(container.width) / image.width + h_scale = float(container.remaining_height) / image.height + min_or_max = min if self.scale == Scale.FIT else max + scale_width = scale_height = min_or_max(w_scale, h_scale) + else: + scale_width = scale_height = self.scale + dpi_x, dpi_y = image.dpi + dpi_scale_x = (dpi_x / self.dpi) if self.dpi and dpi_x else 1 + dpi_scale_y = (dpi_y / self.dpi) if self.dpi and dpi_y else 1 + if (scale_width == scale_height == 1.0 # limit width if necessary + and self.limit_width is not None + and image.width * dpi_scale_x > container.width): + limit_width = self.limit_width.to_points(container.width) + scale_width = scale_height = limit_width / image.width + w, h = container.canvas.place_image(image, left, top, + container.document, + scale_width * dpi_scale_x, + scale_height * dpi_scale_y, + self.rotate) + ignore_overflow = (self.scale == Scale.FIT) or container.page._empty + try: + container.advance(h, ignore_overflow) + except ContainerOverflow: + raise EndOfContainer(state) + return w, h, 0 + + +class InlineImageArgs(ImageArgsBase): + baseline = OptionalArg(Dimension, 0, "Location of this inline image's " + "baseline") + + +class InlineImage(ImageBase, InlineFlowable): + directive = 'image' + arguments = InlineImageArgs + + def __init__(self, filename_or_file, scale=1.0, width=None, height=None, + dpi=None, rotate=0, alt=None, baseline=None, + id=None, style=None, parent=None, source=None): + super().__init__(filename_or_file=filename_or_file, scale=scale, + height=height, dpi=dpi, rotate=rotate, alt=alt, + baseline=baseline, id=id, style=style, parent=parent, + source=source) + self.width = width + + def _width(self, container): + return FlowableWidth.AUTO if self.width is None else self.width + + def copy(self, parent=None): + return type(self)(self.filename_or_file, scale=self.scale, + width=self.width, height=self.height, dpi=self.dpi, + rotate=self.rotate, baseline=self.baseline, + id=self.id, style=self.style, parent=parent, + source=self.source) + + +class _Image(ImageBase): + def __init__(self, filename_or_file, scale=1.0, width=None, height=None, + dpi=None, rotate=0, limit_width=100*PERCENT, align=None, + alt=None, + id=None, style=None, parent=None, source=None): + super().__init__(filename_or_file=filename_or_file, scale=scale, + width=width, height=height, dpi=dpi, rotate=rotate, + limit_width=limit_width, align=align, alt=alt, + id=id, style=style, parent=parent, source=source) + + +class Image(_Image): + pass + + +class BackgroundImageMeta(type(_Image), type(AttributesDictionary)): + pass + + +class ImageArgs(ImageArgsBase): + limit_width = Attribute(Dimension, 100*PERCENT, 'Limit the image width ' + 'when none of :attr:`scale`, :attr:`width` and ' + ':attr:`height` are given and the image would ' + 'be wider than the container') + align = Attribute(HorizontalAlignment, 'left', 'How to align the image ' + 'within the page') + + +class BackgroundImage(_Image, AcceptNoneAttributeType): + """Image to place in the background of a page + + Takes the same arguments as :class:`Image`. + + """ + arguments = ImageArgs + + @classmethod + def from_tokens(cls, tokens, source): + args, kwargs = cls.arguments.parse_arguments(tokens, source) + return cls(*args, source=source, **kwargs) + + @classmethod + def doc_format(cls): + return ('filename of an image file enclosed in quotes, optionally ' + 'followed by space-delimited keyword arguments ' + '(``=``) that determine how the image is ' + 'displayed') + + +class CaptionStyle(ParagraphStyle): + number_format = OverrideDefault(NumberFormat.NUMBER) + numbering_level = OverrideDefault(1) + + +class Caption(StaticParagraph): + style_class = CaptionStyle + has_title = True + + @property + def referenceable(self): + return self.parent + + def text(self, container): + try: + number = self.number(container) + category_label = StringField(self.referenceable.category) + label = [category_label, ' ', number] + except KeyError: + label = [] + return MixedStyledText(label + [self.content], parent=self) + + +class FigureStyle(FloatStyle, GroupedFlowablesStyle): + pass + + +class Figure(Float, StaticGroupedFlowables): + style_class = FigureStyle + category = 'figure' + + +class ListOfFigures(ListOf): + category = 'figure' + + +class ListOfFiguresSection(ListOfSection): + list_class = ListOfFigures diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/index.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/index.py new file mode 100644 index 000000000..fdffac9a2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/index.py @@ -0,0 +1,137 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .attribute import Attribute, Bool +from .flowable import GroupedFlowables, GroupedFlowablesStyle, DummyFlowable +from .paragraph import Paragraph +from .reference import Reference +from .strings import StringField +from .structure import Section, Heading +from .style import Styled +from .text import MixedStyledText, StyledText +from .util import intersperse + + +__all__ = ['IndexSection', 'Index', 'IndexStyle', 'IndexLabel', 'IndexTerm', + 'InlineIndexTarget', 'IndexTarget'] + + +class IndexSection(Section): + def __init__(self, title=None, flowables=None, style=None): + section_title = title or StringField('index') + contents = [Heading(section_title, style='unnumbered')] + if flowables: + contents += list(flowables) + else: + contents.append(Index()) + super().__init__(contents, style=style) + + +class IndexStyle(GroupedFlowablesStyle): + initials = Attribute(Bool, True, 'Group index entries based on their ' + 'first letter') + + +class Index(GroupedFlowables): + style_class = IndexStyle + location = 'index' + + def __init__(self, id=None, style=None, parent=None): + super().__init__(id=id, style=style, parent=parent) + self.source = self + + def flowables(self, container): + initials = self.get_style('initials', container) + def hande_level(index_entries, level=1): + top_level = level == 1 + entries = sorted((name for name in index_entries if name), + key=lambda s: (s.lower(), s)) + last_section = None + for entry in entries: + first = entry[0] + section = first.upper() if first.isalpha() else 'Symbols' + term, subentries = index_entries[entry] + if initials and top_level and section != last_section: + yield IndexLabel(section) + last_section = section + target_ids = [target.get_id(document) + for term, target in subentries.get(None, ())] + yield IndexEntry(term, level, target_ids) + for paragraph in hande_level(subentries, level=level + 1): + yield paragraph + + document = container.document + index_entries = container.document.index_entries + for paragraph in hande_level(index_entries): + yield paragraph + + +class IndexLabel(Paragraph): + pass + + +class IndexEntry(Paragraph): + def __init__(self, content, level, target_ids=None, + id=None, style=None, parent=None): + if target_ids: + refs = intersperse((Reference(id, 'page') + for id in target_ids), ', ') + entry_text = content + ', ' + MixedStyledText(refs) + else: + entry_text = content + super().__init__(entry_text, id=id, style=style, parent=parent) + self.index_level = level + + +class IndexTerm(tuple): + def __new__(cls, *levels): + return super().__new__(cls, levels) + + def __repr__(self): + return type(self).__name__ + super().__repr__() + + +class IndexTargetBase(Styled): + def __init__(self, index_terms, *args, **kwargs): + super().__init__(*args, **kwargs) + self.index_terms = index_terms + + def prepare(self, flowable_target): + super().prepare(flowable_target) + index_entries = flowable_target.document.index_entries + for index_term in self.index_terms: + level_entries = index_entries + for term in index_term: + term_str = (term.to_string(flowable_target) + if isinstance(term, StyledText) else term) + _, level_entries = level_entries.setdefault(term_str, + (term, {})) + level_entries.setdefault(None, []).append((index_term, self)) + + +class InlineIndexTarget(IndexTargetBase, StyledText): + def to_string(self, flowable_target): + return '' + + def copy(self, parent=None): + return MixedStyledText([]) + + def spans(self, container): + self.create_destination(container) + return iter([]) + + +class IndexTarget(IndexTargetBase, DummyFlowable): + category = 'index' + + def __init__(self, index_terms, parent=None): + super().__init__(index_terms, parent=parent) + + def flow(self, container, last_descender, state=None, **kwargs): + self.create_destination(container) + return super().flow(container, last_descender, state=state) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/inline.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/inline.py new file mode 100644 index 000000000..42025e8be --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/inline.py @@ -0,0 +1,133 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from token import LPAR, RPAR + +from .attribute import Attribute, ParseError +from .dimension import Dimension, PT +from .element import DocumentElement +from .flowable import Flowable, FlowableStyle +from .layout import VirtualContainer +from .style import StyledMeta +from .text import InlineStyle, InlineStyled +from .util import NotImplementedAttribute + + +__all__ = ['InlineFlowableException', 'InlineFlowable', 'InlineFlowableStyle'] + + +class InlineFlowableException(Exception): + pass + + +class InlineFlowableStyle(FlowableStyle, InlineStyle): + baseline = Attribute(Dimension, 0*PT, "The location of the flowable's " + "baseline relative to the bottom " + "edge") + + +class InlineFlowableMeta(StyledMeta): + def __new__(mcls, classname, bases, cls_dict): + cls = super().__new__(mcls, classname, bases, cls_dict) + if classname == 'InlineFlowable': + cls.directives = {} + else: + InlineFlowable.directives[cls.directive] = cls + return cls + + +class InlineFlowable(Flowable, InlineStyled, metaclass=InlineFlowableMeta): + directive = None + style_class = InlineFlowableStyle + arguments = NotImplementedAttribute() + + def __init__(self, baseline=None, id=None, style=None, parent=None, + source=None): + super().__init__(id=id, style=style, parent=parent, source=source) + self.baseline = baseline + + def to_string(self, flowable_target): + return type(self).__name__ + + def font(self, document): + raise InlineFlowableException + + def y_offset(self, document): + return 0 + + @property + def items(self): + return [self] + + @classmethod + def from_tokens(cls, tokens, source): + directive = next(tokens).string.lower() + try: + inline_flowable_class = InlineFlowable.directives[directive] + except KeyError: + raise ParseError(f"Unknown inline flowable type '{directive}'") + if next(tokens).exact_type != LPAR: + raise ParseError('Expecting an opening parenthesis.') + args, kwargs = inline_flowable_class.arguments.parse_arguments(tokens, + source) + if next(tokens).exact_type != RPAR: + raise ParseError('Expecting a closing parenthesis.') + return inline_flowable_class(*args, source=source, **kwargs) + + def spans(self, document): + yield self + + def flow_inline(self, container, last_descender, state=None): + baseline = self.baseline or self.get_style('baseline', container) + virtual_container = VirtualContainer(container) + width, _, _ = self.flow(virtual_container, last_descender, state=state) + return InlineFlowableSpan(width, baseline, virtual_container) + + +class InlineFlowableSpan(DocumentElement): + number_of_spaces = 0 + ends_with_space = False + + def __init__(self, width, baseline, virtual_container): + super().__init__() + self.width = width + self.baseline = baseline + self.virtual_container = virtual_container + + def font(self, document): + raise InlineFlowableException + + @property + def span(self): + return self + + def height(self, document): + return self.ascender(document) - self.descender(document) + + def ascender(self, document): + baseline = self.baseline.to_points(self.virtual_container.height) + if baseline > self.virtual_container.height: + return 0 + else: + return self.virtual_container.height - baseline + + def descender(self, document): + return min(0, - self.baseline.to_points(self.virtual_container.height)) + + def line_gap(self, document): + return 0 + + def before_placing(self, container, preallocate=False): + pass + + # TODO: get_style and word_to_glyphs may need proper implementations + def get_style(self, attribute, document=None): + pass + + def chars_to_glyphs(self, chars): + return chars diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__init__.py new file mode 100644 index 000000000..c00c08f35 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__init__.py @@ -0,0 +1,32 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .cls import Language + +from .en import EN +from .fr import FR +from .it import IT +from .nl import NL +from .de import DE +from .pl import PL +from .cs import CS +from .es import ES +from .hu import HU + + +__all__ = ['Language', 'EN', 'FR', 'IT', 'NL', 'DE', 'PL', 'CS', 'ES', 'HU'] + + +# generate docstrings for the Language instances + +for code, language_ref in Language.languages.items(): + language = language_ref() + lines = ['Localized strings for {}'.format(language.name)] + for name, localized_string in language.strings.items(): + lines.append(":{}: {}".format(name, localized_string)) + language.__doc__ = '\n'.join(lines) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..94fac581b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/cls.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/cls.cpython-312.pyc new file mode 100644 index 000000000..89de217b4 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/cls.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/cs.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/cs.cpython-312.pyc new file mode 100644 index 000000000..719a9ec1f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/cs.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/de.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/de.cpython-312.pyc new file mode 100644 index 000000000..f91f954f3 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/de.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/en.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/en.cpython-312.pyc new file mode 100644 index 000000000..3ecd14721 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/en.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/es.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/es.cpython-312.pyc new file mode 100644 index 000000000..6cca1dcdc Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/es.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/fr.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/fr.cpython-312.pyc new file mode 100644 index 000000000..75eb1a8d0 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/fr.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/hu.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/hu.cpython-312.pyc new file mode 100644 index 000000000..b8c754dcb Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/hu.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/it.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/it.cpython-312.pyc new file mode 100644 index 000000000..5021adc0f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/it.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/nl.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/nl.cpython-312.pyc new file mode 100644 index 000000000..4667316f0 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/nl.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/pl.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/pl.cpython-312.pyc new file mode 100644 index 000000000..ffb7c9cdd Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/__pycache__/pl.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/cls.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/cls.py new file mode 100644 index 000000000..77dc4b752 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/cls.py @@ -0,0 +1,73 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import weakref + +from ..attribute import AttributeType + + +__all__ = ['Language'] + + +class Language(AttributeType): + """Collects localized strings for a particular language + + Args: + code (str): short code identifying the language + name (str): native name of the language + + paragraph: label for referencing paragraphs + section: label for referencing sections + chapter: label for top-level sections + figure: caption label for figures + table: caption label for tables + listing: caption label for (source code) listings + contents: title for the table of contents section + list_of_figures: title for the list of figures section + list_of_tables: title for the list of tables section + index: title for the index section + + attention: title for attention admonitions + caution: title for caution admonitions + danger: title for danger admonitions + error: title for error admonitions + hint: title for hint admonitions + important: title for important admonitions + note: title for note admonitions + tip: title for tip admonitions + warning: title for warning admonitions + seealso: title for see-also admonitions + + """ + + languages = {} #: Dictionary mapping codes to :class:`Language`\ s + + def __init__(self, code, name, **localized_strings): + self.languages[code] = weakref.ref(self) + self.code = code + self.name = name + self.strings = localized_strings + self.no_break_after = [] + + def __repr__(self): + return "{}('{}', '{}')".format(type(self).__name__, + self.code, self.name) + + @classmethod + def parse_string(cls, string, source): + return cls.languages[string.lower()]() + + @classmethod + def doc_repr(cls, value): + return ':data:`~.rinoh.language.{}` ({})'.format(value.code.upper(), + value.name) + + @classmethod + def doc_format(cls): + return ('the code of one of the ' + ':ref:`supported languages `') diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/cs.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/cs.py new file mode 100644 index 000000000..5cc97a6b1 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/cs.py @@ -0,0 +1,36 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .cls import Language + + +CS = Language('cs', 'Česky', + figure='Obrázek', + table='Tabulka', + contents='Obsah', + list_of_figures='Seznam obrázků', + list_of_tables='Seznam tabulek', + chapter='Kapitola', + index='Rejstřík', + + # admonitions + attention='Pozor!', + caution='Pozor!', + danger='!NEBEZPEČÍ!', + error='Chyba', + hint='Poznámka', + important='Důležité', + note='Poznámka', + tip='Tip', + warning='Varování', + seealso='Viz také', +) + + +CS.no_break_after = ("do od u z ze za k ke o na v ve nad pod za po s se " + "a i že až či").split() diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/de.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/de.py new file mode 100644 index 000000000..8fae41de9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/de.py @@ -0,0 +1,32 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .cls import Language + + +DE = Language('de', 'Deutsch', + figure='Abbildung', + table='Tabelle', + contents='Inhalt', + list_of_figures='Abbildungsverzeichnis', + list_of_tables='Tabellenverzeichnis', + chapter='Kapitel', + index='Index', + + # admonitions + attention='Aufgepasst!', + caution='Vorsicht!', + danger='!GEFAHR!', + error='Fehler', + hint='Hinweis', + important='Wichtig', + note='Notiz', + tip='Tipp', + warning='Warnung', + seealso='Siehe auch', +) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/en.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/en.py new file mode 100644 index 000000000..bc8793f7a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/en.py @@ -0,0 +1,37 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .cls import Language + + +EN = Language('en', 'English', + paragraph='Paragraph', + section='Section', + chapter='Chapter', + figure='Figure', + table='Table', + listing='Listing', + contents='Table of Contents', + list_of_figures='List of Figures', + list_of_tables='List of Tables', + index='Index', + + # admonitions + attention='Attention!', + caution='Caution!', + danger='!DANGER!', + error='Error', + hint='Hint', + important='Important', + note='Note', + tip='Tip', + warning='Warning', + seealso='See also', +) + +EN.no_break_after = "a an the".split() diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/es.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/es.py new file mode 100644 index 000000000..6f76497b9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/es.py @@ -0,0 +1,32 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .cls import Language + + +ES = Language('es', 'Spanish', + figure='Figura', + table='Tabla', + contents='Contenidos', + list_of_figures='Índice de figuras', + list_of_tables='Índice de tablas', + chapter='Capítulo', + index='Índice', + + # admonitions + attention='¡Atención!', + caution='¡Cuidado!', + danger='¡PELIGRO!', + error='Error', + hint='Pista', + important='Importante', + note='Nota', + tip='Consejo', + warning='Precaución', + seealso='Vea también', +) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/fr.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/fr.py new file mode 100644 index 000000000..4ebad5c93 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/fr.py @@ -0,0 +1,32 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .cls import Language + + +FR = Language('fr', 'Français', + figure='Figure', + table='Tableau', + contents='Table des Matières', + list_of_figures='Liste des Figures', + list_of_tables='Liste des Tableaux', + chapter='Chapitre', + index='Index', + + # admonitions + attention='Attention!', + caution='Prudence!', + danger='!DANGER!', + error='Erreur', + hint='Conseil', + important='Important', + note='Note', + tip='Astuce', + warning='Avertissement', + seealso='Voir aussi', +) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/hu.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/hu.py new file mode 100644 index 000000000..ce273dc1b --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/hu.py @@ -0,0 +1,30 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .cls import Language + + +HU = Language('hu', 'Hungarian', + contents='Tartalomjegyzék', + list_of_figures='Ábrák Listája', + list_of_tables='Asztalok Listája', + chapter='Fejezet', + index='Index', + + # admonitions + attention='Figyelem!', + caution='Vigyázat!!', + danger='!VESZÉLY!', + error='Hiba', + hint='Tanács', + important='Fontos', + note='Megjegyzés', + tip='Tipp', + warning='Figyelmeztetés', + seealso='Lásd még', +) \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/it.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/it.py new file mode 100644 index 000000000..1a803efd5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/it.py @@ -0,0 +1,32 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .cls import Language + + +IT = Language('it', 'Italiano', + figure='Figura', + table='Tabelle', + contents='Contenuti', + list_of_figures='Elenco delle Figure', + list_of_tables='Elenco delle Tabelle', + chapter='Capitolo', + index='Indice', + + # admonitions + attention='Attenzione!', + caution='Prudenza!', + danger='!PERICOLO!', + error='Errore', + hint='Consiglio', + important='Importante', + note='Nota', + tip='Suggerimento', + warning='Avvertimento', + seealso='Vedi anche', +) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/nl.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/nl.py new file mode 100644 index 000000000..dfaf82ffa --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/nl.py @@ -0,0 +1,35 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .cls import Language + + +NL = Language('nl', 'Nederlands', + paragraph='Paragraaf', + section='Sectie', + chapter='Hoofdstuk', + figure='Figuur', + table='Tabel', + listing='Lijst', + contents='Inhoudsopgave', + list_of_figures='Lijst van Figuren', + list_of_tables='Lijst van Tabellen', + index='Index', + + # admonitions + attention='Opgelet!', + caution='Pas op!', + danger='!GEVAAR!', + error='Fout', + hint='Hint', + important='Belangrijk', + note='Noot', + tip='Tip', + warning='Waarschuwing', + seealso='Zie ook', +) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/pl.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/pl.py new file mode 100644 index 000000000..528ba5b0f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/language/pl.py @@ -0,0 +1,32 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .cls import Language + + +PL = Language('pl', 'Polski', + figure='Ilustracja', + table='Tabela', + contents='Spis Treści', + list_of_figures='Spis Ilustracji', + list_of_tables='Spis Tabel', + chapter='Rozdział', + index='Skorowidz', + + # admonitions + attention='Uwaga!', + caution='Ostrożnie!', + danger='!NIEBEZPIECZEŃSTWO!', + error='Błąd', + hint='Wskazówka', + important='Ważne', + note='Notatka', + tip='Porada', + warning='Ostrzeżenie', + seealso='Zobacz również', +) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/layout.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/layout.py new file mode 100644 index 000000000..2a3a53501 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/layout.py @@ -0,0 +1,654 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +""" +The layout engine. The container classes allow defining rectangular areas on a +page to which :class:`Flowable`\\ s can be rendered. + +* :class:`Container`: A rectangular area on a page to which flowables are + rendered. +* :class:`DownExpandingContainer`: A container that dynamically grows downwards + as flowables are rendered to it. +* :class:`UpExpandingContainer`: Similar to a :class:`DownExpandingContainer`:, + but upwards expanding. +* :class:`VirtualContainer`: A container who's rendered content is not + automatically placed on the page. Afterwards, it + can be manually placed, however. +* :exc:`EndOfContainer`: Exception raised when a container "overflows" during + the rendering of flowables. +* :class:`Chain`: A chain of containers. When a container overflows, the + rendering of the chain's flowables is continued in the next + container in the chain. +* :class:`FootnoteContainer`: TODO + +""" + +from collections import deque +from contextlib import contextmanager +from copy import copy + +from .dimension import Dimension, PT, DimensionAddition +from .util import ContextManager + + +__all__ = ['Container', 'FlowablesContainer', 'ChainedContainer', + 'DownExpandingContainer', 'InlineDownExpandingContainer', + 'UpExpandingContainer', 'UpDownExpandingContainer', + 'VirtualContainer', 'Chain', 'FootnoteContainer', 'MaybeContainer', + 'ContainerOverflow', 'EndOfContainer', 'PageBreakException'] + + +class ContainerOverflow(Exception): + """The end of the :class:`FlowableContainer` has been reached.""" + + +class EndOfContainer(Exception): + """TODO""" + + def __init__(self, flowable_state, page_break=False): + """`flowable_state` represents the rendering state of the + :class:`Flowable` at the time the :class:`FlowableContainer`" overflows. + """ + self.flowable_state = flowable_state + self.page_break = page_break + + +class PageBreakException(ContainerOverflow): + def __init__(self, break_type, chain, flowable_state): + super().__init__() + self.break_type = break_type + self.chain = chain + self.flowable_state = flowable_state + + +class ReflowRequired(Exception): + """Reflow of the current page is required due to insertion of a float.""" + + +class FlowableTarget(object): + """Something that takes :class:`Flowable`\\ s to be rendered.""" + + def __init__(self, document_part, *args, **kwargs): + """Initialize this flowable target. + + `document_part` is the :class:`Document` this flowable target is part + of.""" + from .flowable import StaticGroupedFlowables + + self.flowables = StaticGroupedFlowables([]) + super().__init__(*args, **kwargs) + + @property + def document(self): + return self.document_part.document + + def append_flowable(self, flowable): + """Append a `flowable` to the list of flowables to be rendered.""" + self.flowables.append(flowable) + + def __lshift__(self, flowable): + """Shorthand for :meth:`append_flowable`. Returns `self` so that it can + be chained.""" + self.append_flowable(flowable) + return self + + def prepare(self, document): + self.flowables.prepare(self) + + + +class Container(object): + """Rectangular area that contains elements to be rendered to a + :class:`Page`. A :class:`Container` has an origin (the top-left corner), a + width and a height. It's contents are rendered relative to the container's + position in its parent :class:`Container`.""" + + register_with_parent = True + + _never_placed = False + + def __init__(self, name, parent, left=None, top=None, width=None, + height=None, right=None, bottom=None, sideways=None): + """Initialize a this container as a child of the `parent` container. + + The horizontal position and width of the container are determined from + `left`, `width` and `right`. If only `left` or `right` is specified, + the container's opposite edge will be placed at the corresponding edge + of the parent container. + + Similarly, the vertical position and height of the container are + determined from `top`, `height` and `bottom`. If only one of `top` or + `bottom` is specified, the container's opposite edge is placed at the + corresponding edge of the parent container.""" + if left is None: + left = 0*PT if (right and width) is None else (right - width) + if width is None: + width = (parent.width - left) if right is None else (right - left) + if right is None: + right = left + width + + if top is None: + top = 0*PT if (bottom and height) is None else (bottom - height) + if height is None: + height = (parent.height - top) if bottom is None else (bottom - top) + if bottom is None: + bottom = top + height + + if sideways: + width, height = height, width + + self.left = left + self.width = width + self.right = right + self.top = top + self.height = height + self.bottom = bottom + + self.name = name + self.parent = parent + self.sideways = sideways + if self.register_with_parent: + self.parent.children.append(self) + self.children = [] + self.clear() + + @property + def document_part(self): + return self.parent.document_part + + @property + def document(self): + return self.document_part.document + + @property + def never_placed(self): + return self._never_placed or (self.parent.never_placed if self.parent + else False) + + @property + def page(self): + """The :class:`Page` this container is located on.""" + return self.parent.page + + def clear(self): + self.empty_canvas() + + def __repr__(self): + return "{}('{}')".format(self.__class__.__name__, self.name) + + def __getattr__(self, name): + if name in ('_footnote_space', 'float_space'): + return getattr(self.parent, name) + raise AttributeError('{}.{}'.format(self.__class__.__name__, name)) + + def empty_canvas(self): + self.canvas = self.document.backend.Canvas() + + def render(self, type, rerender=False): + """Render the contents of this container to its canvas. + + Note that the rendered contents need to be :meth:`place`\\ d on the + parent container's canvas before they become visible.""" + for child in self.children: + child.render(type, rerender) + + def check_overflow(self): + return all(child.check_overflow() for child in self.children) + + def place_children(self): + for child in self.children: + child.place() + + def place(self): + """Place this container's canvas onto the parent container's canvas.""" + if self.sideways == 'left': + self.canvas.translate(float(self.height), 0) + self.canvas.rotate(-90) + elif self.sideways == 'right': + self.canvas.translate(0, float(self.width)) + self.canvas.rotate(90) + self.place_children() + self.canvas.append(self.parent.canvas, + float(self.left), float(self.top)) + + def before_placing(self, preallocate=False): + for child in self.children: + child.before_placing(preallocate) + + +BACKGROUND = 'background' +CONTENT = 'content' +HEADER_FOOTER = 'header_footer' +CHAPTER_TITLE = 'chapter_title' + + +class FlowablesContainerBase(Container): + """A :class:`Container` that renders :class:`Flowable`\\ s to a rectangular + area on a page. The first flowable is rendered at the top of the container. + The next flowable is rendered below the first one, and so on.""" + + def __init__(self, name, type, parent, left=None, top=None, + width=None, height=None, right=None, bottom=None, + vertically_center_content=False): + self._self_cursor = Dimension(0) # initialized at container's top edge + self._cursor = DimensionAddition(self._self_cursor) + self._placed_styleds = {} + super().__init__(name, parent, left=left, top=top, width=width, + height=height, right=right, bottom=bottom) + self.type = type + self.vertically_center_content = vertically_center_content + + @property + def top_level_container(self): + try: + return self.parent.top_level_container + except AttributeError: + return self + + def clear(self): + super().clear() + del self.children[:] + self._placed_styleds.clear() + self._self_cursor._value = 0 # initialized at container's top edge + del self._cursor.addends[1:] + + def mark_page_nonempty(self): + if self.type == CONTENT: + self.page._empty = False + elif self.type is None: + self.parent.mark_page_nonempty() + + @property + def cursor(self): + """Keeps track of where the next flowable is to be placed. As flowables + are flowed into the container, the cursor moves down.""" + return float(self._cursor) + + @property + def remaining_height(self): + return self.height - self.cursor + + def advance(self, height, ignore_overflow=False): + """Advance the cursor by `height`. If this would cause the cursor to + point beyond the bottom of the container, an :class:`EndOfContainer` + exception is raised.""" + if height <= self.remaining_height + FLOATING_POINT_FUZZ: + self._self_cursor.grow(height) + elif ignore_overflow: + self._self_cursor.grow(float(self.remaining_height)) + else: + raise ContainerOverflow(self.page.number) + + def advance2(self, height, ignore_overflow=False): + """Advance the cursor by `height`. Returns `True` on success. + + Returns `False` if this would cause the cursor to point beyond the + bottom of the container. + + """ + if height <= self.remaining_height + FLOATING_POINT_FUZZ: + self._self_cursor.grow(height) + elif ignore_overflow: + self._self_cursor.grow(float(self.remaining_height)) + else: + return False + return True + + def check_overflow(self): + return self.type is not CONTENT or self.remaining_height > 0 + + def render(self, type, rerender=False): + if type in (self.type, None): + self._render(type, rerender) + if self.vertically_center_content and type is CONTENT: + self.top += float(self.remaining_height) / 2 + + def _render(self, type, rerender): + raise NotImplementedError('{}.render()'.format(self.__class__.__name__)) + + def register_styled(self, styled, continued=False): + styleds = self._placed_styleds.setdefault(len(self.children), []) + styleds.append((styled, continued)) + + def before_placing(self, preallocate=False): + def log_styleds(index): + for styled, continued in self._placed_styleds.get(index, ()): + self.document.style_log.log_styled(styled, self, continued) + styled.before_placing(self, preallocate) + + log_styleds(0) + for i, child in enumerate(self.children, start=1): + child.before_placing(preallocate) + log_styleds(i) + + +FLOATING_POINT_FUZZ = 1e-10 + + +class _FlowablesContainer(FlowableTarget, FlowablesContainerBase): + def __init__(self, name, type, parent, *args, **kwargs): + super().__init__(parent.document_part, name, type, parent, + *args, **kwargs) + + def _render(self, type, rerender): + self.flowables.flow(self, last_descender=None) + + +class FlowablesContainer(_FlowablesContainer): + """A container that renders a predefined series of flowables.""" + + def __init__(self, name, type, parent, left=None, top=None, width=None, + height=None, right=None, bottom=None, + vertically_center_content=False): + super().__init__(name, type, parent, left=left, top=top, + width=width, height=height, right=right, bottom=bottom, + vertically_center_content=vertically_center_content) + + +class ChainedContainer(FlowablesContainerBase): + """A container that renders flowables from the :class:`Chain` it is part + of.""" + + def __init__(self, name, type, parent, chain, left=None, top=None, + width=None, height=None, right=None, bottom=None, + vertically_center_content=False): + super().__init__(name, type, parent, left=left, top=top, width=width, + height=height, right=right, bottom=bottom, + vertically_center_content=vertically_center_content) + chain.containers.append(self) + self.chain = chain + + def _render(self, type, rerender): + self.chain.render(self, rerender=rerender) + + +class ExpandingContainerBase(FlowablesContainerBase): + """A dynamically, vertically growing :class:`Container`.""" + + def __init__(self, name, type, parent, left=None, top=None, width=None, + right=None, bottom=None, max_height=None): + """See :class:`ContainerBase` for information on the `parent`, `left`, + `width` and `right` parameters. + + `max_height` is the maximum height this container can grow to.""" + height = DimensionAddition() + super().__init__(name, type, parent, left=left, top=top, + width=width, height=height, right=right, bottom=bottom) + self.height.addends.append(self._cursor) + self.max_height = max_height or float('+inf') + + @property + def remaining_height(self): + return self.max_height - self.cursor + + +class DownExpandingContainerBase(ExpandingContainerBase): + """A container that is anchored at the top and expands downwards.""" + + def __init__(self, name, type, parent, left=None, top=None, width=None, + right=None, max_height=None): + """See :class:`Container` for information on the `name`, `parent`, + `left`, `width` and `right` parameters. + + `top` specifies the location of the container's top edge with respect to + that of the parent container. When `top` is omitted, the top edge is + placed at the top edge of the parent container. + + `max_height` is the maximum height this container can grow to.""" + super().__init__(name, type, parent, left=left, top=top, width=width, + right=right, max_height=max_height) + + +class DownExpandingContainer(_FlowablesContainer, ExpandingContainerBase): + def __init__(self, name, type, parent, left=None, top=None, width=None, + right=None, max_height=None): + super().__init__(name, type, parent, left=left, top=top, + width=width, right=right, max_height=max_height) + + +class ConditionalDownExpandingContainerBase(DownExpandingContainerBase): + def __init__(self, name, type, parent, left=None, top=None, width=None, + right=None, max_height=None, place=True): + super().__init__(name, type, parent, left=left, top=top, width=width, + right=right, max_height=max_height) + self._do_place = place + + def do_place(self, place=True): + self._do_place = place + + def place(self): + if self._do_place: + super().place() + + def before_placing(self, preallocate=False): + if self._do_place: + super().before_placing(preallocate) + + +class InlineDownExpandingContainer(ConditionalDownExpandingContainerBase): + """A :class:`DownExpandingContainer` whose top edge is placed at the + parent's current cursor position. As flowables are flowed in this container, + the parent's cursor also advances (but this behavior can be suppressed). + + See :class:`Container` about the `name`, `parent`, `left`, `width` + and `right` parameters. Setting `advance_parent` to `False` prevents the + parent container's cursor being advanced. + + """ + + def __init__(self, name, parent, left=None, width=None, right=None, + advance_parent=True, place=True): + super().__init__(name, None, parent, left=left, top=parent.cursor, + width=width, right=right, + max_height=parent.remaining_height, place=place) + if advance_parent: + parent._cursor.addends.append(self._cursor) + + +class UpExpandingContainer(_FlowablesContainer, ExpandingContainerBase): + """A container that is anchored at the bottom and expands upwards.""" + + def __init__(self, name, type, parent, left=None, bottom=None, width=None, + right=None, max_height=None): + """See :class:`ContainerBase` for information on the `name`, `parent`, + `left`, `width` and `right` parameters. + + `bottom` specifies the location of the container's bottom edge with + respect to that of the parent container. When `bottom` is omitted, the + bottom edge is placed at the bottom edge of the parent container. + + `max_height` is the maximum height this container can grow to.""" + bottom = bottom or parent.height + super().__init__(name, type, parent, left=left, top=None, width=width, + right=right, bottom=bottom, max_height=max_height) + + +class UpDownExpandingContainer(_FlowablesContainer, ExpandingContainerBase): + """A container that is anchored in the middle and symetrically expands + upwards and downwards.""" + + def __init__(self, name, type, parent, left=None, middle=None, width=None, + right=None, max_height=None): + """See :class:`ContainerBase` for information on the `name`, `parent`, + `left`, `width` and `right` parameters. + + `middle` specifies the location of the container's vertical center with + respect to the top of the parent container. When `middle` is omitted, + the middle is placed at the top edge of the parent container. + + `max_height` is the maximum height this container can grow to.""" + if middle is None: + middle = 0*PT + top = middle + super().__init__(name, type, parent, left=left, top=top, width=width, + right=right, max_height=max_height) + self.top -= self.height / 2 + + +class _MaybeContainer(InlineDownExpandingContainer): + def __init__(self, parent, left=None, width=None, right=None): + super().__init__('MAYBE', parent, left=left, width=width, right=right, + place=False) + + +class MaybeContainer(ContextManager): + def __init__(self, parent, left=None, width=None, right=None): + self._container = _MaybeContainer(parent, left, width, right) + + def __enter__(self): + return self._container + + def __exit__(self, exc_type, exc_value, _): + if (exc_type is None or (issubclass(exc_type, (EndOfContainer, + PageBreakException)) + and not exc_value.flowable_state.initial)): + self._container.do_place() + + +class VirtualContainer(ConditionalDownExpandingContainerBase): + """An infinitely down-expanding container whose contents are not + automatically placed on the parent container's canvas. This container's + content needs to be placed explicitly using :meth:`place_at`.""" + + register_with_parent = False + + def __init__(self, parent, width=None, never_placed=False): + """`width` specifies the width of the container.""" + super().__init__('VIRTUAL', None, parent, width=width, + max_height=float('+inf'), place=False) + self._never_placed = never_placed + + def place_at(self, parent_container, left, top): + self.parent = parent_container + parent_container.children.append(self) + self.left = left + self.top = top + self.do_place() + + +class FloatContainer(ExpandingContainerBase): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + +class TopFloatContainer(DownExpandingContainer, FloatContainer): + pass + + +class BottomFloatContainer(UpExpandingContainer, FloatContainer): + pass + + +class FootnoteContainer(UpExpandingContainer): + def __init__(self, name, parent, left=None, bottom=None, width=None, + right=None, max_height=None): + super().__init__(name, CONTENT, parent, left, bottom, + width=width, right=right, max_height=max_height) + self._footnote_number = 0 + self._footnote_space = self + self.footnotes = [] + self._flowing_footnotes = False + self._reflowed = False + self._descenders = [0] + self._allocation_phase = True + self._placed_footnotes = set() + parent._footnote_space = self + + def add_footnote(self, footnote, preallocate): + self.footnotes.append(footnote) + if not self._flowing_footnotes: + self._flowing_footnotes = True + if not self.flow_footnotes(preallocate): + return False + self._flowing_footnotes = False + return True + + def flow_footnotes(self, preallocate=False): + if self._allocation_phase and not preallocate: + self.clear() + self._descenders = [0] + self._allocation_phase = False + self._placed_footnotes.clear() + if self._reflowed: + self._cursor.addends.pop() + self._descenders.pop() + maybe_container = _MaybeContainer(self) + for i, footnote in enumerate(self.footnotes): + footnote_id = footnote.get_id(self.document) + if footnote_id not in (self._placed_footnotes + | self.document.placed_footnotes): + _, _, descender = footnote.flow(maybe_container, + self._descenders[-1], + footnote=True) + self._descenders.append(descender) + self._reflowed = True + if not self.page.check_overflow(): + assert self._allocation_phase + return False + self._reflowed = False + self._placed_footnotes.add(footnote_id) + if not self._allocation_phase: + self.document.placed_footnotes |= self._placed_footnotes + maybe_container.do_place() + return True + + +class Chain(FlowableTarget): + """A :class:`FlowableTarget` that renders its flowables to a series of + containers. Once a container is filled, the chain starts flowing flowables + into the next container.""" + + def __init__(self, document_part): + """Initialize this chain. + + `document` is the :class:`Document` this chain is part of.""" + super().__init__(document_part) + self.document_part = document_part + self.init_state() + self.containers = [] + self.done = True + + def init_state(self): + """Reset the state of this chain: empty the list of containers, and zero + the counter keeping track of which flowable needs to be rendered next. + """ + self._state = self._fresh_page_state = None + self._rerendering = False + + @property + def last_container(self): + return self.containers[-1] + + def render(self, container, rerender=False): + """Flow the flowables into the containers that have been added to this + chain.""" + if rerender: + container.clear() + if not self._rerendering: + # restore saved state on this chain's 1st container on this page + self._state = copy(self._fresh_page_state) + self._rerendering = True + try: + self.done = False + self.flowables.flow(container, last_descender=None, + state=self._state) + # all flowables have been rendered + from .flowable import GroupedFlowablesState + self._state = GroupedFlowablesState(None, []) + self.done = True + except PageBreakException as exc: + self._state = exc.flowable_state + self._fresh_page_state = copy(self._state) + raise + except EndOfContainer as e: + self._state = e.flowable_state + if container == self.last_container: + # save state for when ReflowRequired occurs + self._fresh_page_state = copy(self._state) + except ReflowRequired: + self._rerendering = False + raise diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/number.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/number.py new file mode 100644 index 000000000..3c4af0a54 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/number.py @@ -0,0 +1,135 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from copy import copy + +from .attribute import Attribute, OptionSet, Bool, ParseError +from .style import Style +from .text import StyledText, SingleStyledText + + +__all__ = ['NumberFormat', 'Label', 'LabelStyle', 'NumberStyle', + 'format_number'] + + +# number: plain arabic numbers (1, 2, 3, ...) +# lowercase character: lowercase letters (a, b, c, ..., aa, ab, ...) +# uppercase character: uppercase letters (A, B, C, ..., AA, AB, ...) +# lowercase roman: lowercase Roman numerals (i, ii, iii, iv, v, vi, ...) +# uppercase roman: uppercase Roman numerals (I, II, III, IV, V, VI, ...) +# symbol: symbols (*, †, ‡, §, ‖, ¶, #, **, *†, ...) + + +class NumberFormatBase(OptionSet): + values = (None, 'number', 'symbol', 'lowercase character', + 'uppercase character', 'lowercase roman', 'uppercase roman') + + +class NumberFormat(NumberFormatBase): + """How (or if) numbers are displayed + + Instead of a numbering format, it's possible to supply a custom label + (:class:`~.StyledText`) to show instead of the number. + + """ + + @classmethod + def check_type(cls, value): + return super().check_type(value) or StyledText.check_type(value) + + @classmethod + def from_tokens(cls, tokens, source): + tokens.push_state() + try: + return super().from_tokens(tokens, source) + except ParseError: + tokens.pop_state(discard=False) + return StyledText.from_tokens(tokens, source) + + +class LabelStyle(Style): + label_prefix = Attribute(StyledText, None, 'Text to prepend to the label') + label_suffix = Attribute(StyledText, None, 'Text to append to the label') + custom_label = Attribute(Bool, False, 'Use a custom label if specified') + + +class Label(object): + """Mixin class that formats a label + + Args: + custom_label (StyledText): a frontend can supply a custom label to use + instead of an automatically determined label (typically a number) + + """ + + def __init__(self, custom_label=None): + self.custom_label = custom_label + + def format_label(self, label, container): + empty_string = SingleStyledText('') + prefix = self.get_style('label_prefix', container) or empty_string + suffix = self.get_style('label_suffix', container) or empty_string + return copy(prefix) + copy(label) + copy(suffix) + + +class NumberStyle(LabelStyle): + number_format = Attribute(NumberFormat, 'number', + 'How numbers are formatted') + + +def format_number(number, format): + """Format `number` according the given `format` (:class:`NumberFormat`)""" + try: + return FORMAT_NUMBER[format](number) + except TypeError: # 'number' is a custom label (StyledText) + return format + + +def characterize(number): + string = '' + while number > 0: + number, ordinal = divmod(number, 26) + if ordinal == 0: + ordinal = 26 + number -= 1 + string = chr(ord('a') - 1 + ordinal) + string + return string + + +# romanize by Kay Schluehr - from http://billmill.org/python_roman.html + +NUMERALS = (('M', 1000), ('CM', 900), ('D', 500), ('CD', 400), + ('C', 100), ('XC', 90), ('L', 50), ('XL', 40), + ('X', 10), ('IX', 9), ('V', 5), ('IV', 4), ('I', 1)) + +def romanize(number): + """Convert `number` to a Roman numeral.""" + roman = [] + for numeral, value in NUMERALS: + times, number = divmod(number, value) + roman.append(times * numeral) + return ''.join(roman) + + +SYMBOLS = ('*', '†', '‡', '§', '‖', '¶', '#') + +def symbolize(number): + """Convert `number` to a foot/endnote symbol.""" + repeat, index = divmod(number - 1, len(SYMBOLS)) + return SYMBOLS[index] * (1 + repeat) + + +FORMAT_NUMBER = { + NumberFormat.NUMBER: str, + NumberFormat.LOWERCASE_CHARACTER: characterize, + NumberFormat.UPPERCASE_CHARACTER: lambda num: characterize(num).upper(), + NumberFormat.LOWERCASE_ROMAN: lambda number: romanize(number).lower(), + NumberFormat.UPPERCASE_ROMAN: romanize, + NumberFormat.SYMBOL: symbolize, + NumberFormat.NONE: lambda number: '' +} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/paper.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/paper.py new file mode 100644 index 000000000..ed2e39348 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/paper.py @@ -0,0 +1,93 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +""" + +The :class:`Paper` class and a number of predefined paper formats. + +""" + + +from .attribute import AttributeType, ParseError +from .dimension import Dimension, INCH, MM + + +__all__ = ['Paper', + 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', + 'LETTER', 'LEGAL', 'JUNIOR_LEGAL', 'LEDGER', 'TABLOID'] + + +class Paper(AttributeType): + """Defines a paper size. + + Args: + name (str): the name of this paper type + width (Dimension): the (portrait) width of this paper type + height (Dimension): the (portrait) height of this paper type + + """ + + def __init__(self, name, width, height): + self.name = name + self.width = width + self.height = height + + def __repr__(self): + return ("{}('{}', width={}, height={})" + .format(type(self).__name__, self.name, + repr(self.width), repr(self.height))) + + def __str__(self): + return self.name + + @classmethod + def parse_string(cls, string, source): + try: + return PAPER_BY_NAME[string.lower()] + except KeyError: + try: + width, height = (Dimension.from_string(part.strip()) + for part in string.split('*')) + except ValueError: + raise ParseError("'{}' is not a valid {} format" + .format(string, cls.__name__)) + return cls(string, width, height) + + @classmethod + def doc_format(cls): + return ('the name of a :ref:`predefined paper format ` ' + 'or `` * `` where ``width`` and ``height`` are ' + ':class:`.Dimension`\\ s') + + +# International (DIN 476 / ISO 216) + +A0 = Paper('A0', 841*MM, 1189*MM) #: +A1 = Paper('A1', 594*MM, 841*MM) #: +A2 = Paper('A2', 420*MM, 594*MM) #: +A3 = Paper('A3', 297*MM, 420*MM) #: +A4 = Paper('A4', 210*MM, 297*MM) #: +A5 = Paper('A5', 148*MM, 210*MM) #: +A6 = Paper('A6', 105*MM, 148*MM) #: +A7 = Paper('A7', 74*MM, 105*MM) #: +A8 = Paper('A8', 52*MM, 74*MM) #: +A9 = Paper('A9', 37*MM, 52*MM) #: +A10 = Paper('A10', 26*MM, 37*MM) #: + + +# North America + +LETTER = Paper('letter', 8.5*INCH, 11*INCH) #: +LEGAL = Paper('legal', 8.5*INCH, 14*INCH) #: +JUNIOR_LEGAL = Paper('junior legal', 8*INCH, 5*INCH) #: +LEDGER = Paper('ledger', 17*INCH, 11*INCH) #: +TABLOID = Paper('tabloid', 11*INCH, 17*INCH) #: + + +PAPER_BY_NAME = {paper.name.lower(): paper + for paper in globals().values() + if isinstance(paper, Paper)} diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/paragraph.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/paragraph.py new file mode 100644 index 000000000..5c31be619 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/paragraph.py @@ -0,0 +1,1285 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +""" + +Classes for representing and typesetting paragraphs + +""" + +import re + +from ast import literal_eval +from collections.abc import Iterable +from copy import copy +from functools import partial +from itertools import chain, groupby, count, islice +from os import path + +from . import DATA_PATH +from .annotation import AnnotatedSpan +from .attribute import (Attribute, AttributeType, OptionSet, ParseError, + OverrideDefault, Integer) +from .dimension import Dimension, PT +from .flowable import Flowable, FlowableStyle, FlowableState, FlowableWidth +from .font import MissingGlyphException +from .hyphenator import Hyphenator +from .inline import InlineFlowableException +from .layout import EndOfContainer, ContainerOverflow +from .number import NumberStyle, Label, format_number +from .strings import StringField +from .text import (TextStyle, StyledText, SingleStyledText, MixedStyledText, + ESCAPE, LANGUAGE_DEFAULT) +from .util import all_subclasses, ReadAliasAttribute, consumer + + +__all__ = ['Paragraph', 'ParagraphStyle', 'TabStop', + 'ProportionalSpacing', 'FixedSpacing', 'Leading', + 'DEFAULT', 'STANDARD', 'SINGLE', 'DOUBLE'] + + +# Text justification + +class TextAlign(OptionSet): + """Text justification""" + + values = 'left', 'right', 'center', 'justify' + + +# Line spacing + +class LineSpacing(AttributeType): + """Base class for line spacing types + + Line spacing is defined as the distance between the baselines of two + consecutive lines of text in a paragraph. + + """ + + def __repr__(self): + args = ', '.join(repr(arg) for arg in self._str_args) + return '{}({})'.format(type(self).__name__, args) + + def __str__(self): + for name, spacing in PREDEFINED_SPACINGS.items(): + if self is spacing: + return name + label = type(self).__name__.lower().replace('spacing', '') + args = ', '.join(str(arg) for arg in self._str_args) + return label + ('({})'.format(args) if args else '') + + @property + def _str_args(self): + raise NotImplementedError + + REGEX = re.compile(r'^(?P[a-z]+)(\((?P.*)\))?$', re.I) + + @classmethod + def parse_string(cls, string, source): + m = cls.REGEX.match(string) + if not m: + raise ParseError("'{}' is not a valid {} type" + .format(string, cls.__name__)) + spacing_type = m.group('type').lower() + arg_strings = m.group('arg').split(',') if m.group('arg') else () + if spacing_type in PREDEFINED_SPACINGS: + if arg_strings: + raise ParseError("'{}' takes no arguments" + .format(spacing_type)) + return PREDEFINED_SPACINGS[spacing_type] + for subcls in all_subclasses(cls): + if subcls.__name__.lower().replace('spacing', '') == spacing_type: + stripped_args = (arg.strip() for arg in arg_strings) + try: + args = subcls.parse_arguments(*stripped_args) + except TypeError as error: + raise ParseError("Incorrect number or type of arguments " + "passed to '{}'".format(spacing_type)) + return subcls(*args) + raise ParseError("'{}' is not a valid {}".format(string, cls.__name__)) + + @classmethod + def parse_arguments(cls, arg_strings): + raise NotImplementedError + + @classmethod + def doc_format(cls): + return ('a :ref:`predefined line spacing ` ' + 'type or the name of a line spacing type followed by comma-' + 'separated arguments enclosed in braces: ' + '``(, , ...)``') + + def advance(self, line, last_descender, container): + """Return the distance between the descender of the previous line and + the baseline of the current line.""" + raise NotImplementedError + + +class DefaultSpacing(LineSpacing): + """The default line spacing as specified by the font.""" + + @property + def _str_args(self): + return () + + def advance(self, line, last_descender, container): + max_line_gap = max(float(glyph_span.span.line_gap(container)) + for glyph_span in line) + max_ascender = max(float(glyph_span.span.ascender(container)) + for glyph_span in line) + return max_ascender + max_line_gap + + +DEFAULT = DefaultSpacing() +"""The default line spacing as specified by the font.""" + + +class ProportionalSpacing(LineSpacing): + """Line spacing proportional to the line height + + Args: + factor (float): amount by which the line height is multiplied to obtain + the line spacing + + """ + + def __init__(self, factor): + self.factor = factor + + @property + def _str_args(self): + return (self.factor, ) + + @classmethod + def parse_arguments(cls, factor): + try: + return float(factor), + except ValueError: + raise ParseError("'factor' parameter of 'proportional' should be " + "a floating point number") + + def advance(self, line, last_descender, container): + max_font_size = max(float(glyph_span.span.height(container)) + for glyph_span in line) + return self.factor * max_font_size + last_descender + + +STANDARD = ProportionalSpacing(1.2) +"""Line spacing of 1.2 times the line height.""" + + +SINGLE = ProportionalSpacing(1.0) +"""Line spacing equal to the line height (no leading).""" + + +DOUBLE = ProportionalSpacing(2.0) +"""Line spacing of double the line height.""" + + +class FixedSpacing(LineSpacing): + """Fixed line spacing, with optional minimum spacing + + Args: + pitch (Dimension): the distance between the baseline of two consecutive + lines of text + minimum (LineSpacing): the minimum line spacing to prevents lines with + large fonts (or inline elements) from overlapping; set to ``None`` + if no minimum is required, set to `None` + + """ + + def __init__(self, pitch, minimum=SINGLE): + self.pitch = pitch + self.minimum = minimum + + @property + def _str_args(self): + if self.minimum is SINGLE: + return (self.pitch, ) + else: + return (self.pitch, self.minimum) + + @classmethod + def parse_arguments(cls, pitch_str, minimum_str=None): + pitch = Dimension.from_string(pitch_str) + if minimum_str: + minimum = LineSpacing.from_string(minimum_str) + return pitch, minimum + return pitch, + + def advance(self, line, last_descender, container): + advance = float(self.pitch) + last_descender + if self.minimum is not None: + minimum = self.minimum.advance(line, last_descender, container) + return max(advance, minimum) + else: + return advance + + +class Leading(LineSpacing): + """Line spacing determined by the space in between two lines + + Args: + leading (Dimension): the space between the bottom of a line and the top + of the next line of text + + """ + + def __init__(self, leading): + self.leading = leading + + @property + def _str_args(self): + return (self.leading, ) + + @classmethod + def parse_arguments(cls, leading_str): + leading = Dimension.from_string(leading_str) + return leading, + + def advance(self, line, last_descender, container): + document = container + max_ascender = max(float(item.span.ascender(document)) for item in line) + return max_ascender + float(self.leading) + + +PREDEFINED_SPACINGS = dict(default=DEFAULT, + standard=STANDARD, + single=SINGLE, + double=DOUBLE) + + +class TabAlign(OptionSet): + """Alignment of text with respect to a tab stop""" + + values = 'left', 'right', 'center' + + +class TabStop(object): + """Horizontal position for aligning text of successive lines + + Args: + position (:class:`Dimension` or :class:`Fraction`): tab stop position + align (TabAlign): the alignment of text with respect to the tab stop + position + fill (str): string pattern to fill the empty tab space with + + """ + + def __init__(self, position, align='left', fill=None): + self._position = position + self.align = align + self.fill = fill + + def __repr__(self): + fill_repr = None if self.fill is None else "'{}'".format(self.fill) + return "{}({}, {}, {})".format(type(self).__name__, self._position, + self.align.upper(), fill_repr) + + def __str__(self): + result = '{} {}'.format(self._position, self.align) + if self.fill: + result += " '{}'".format(self.fill.translate(ESCAPE)) + return result + + def get_position(self, line_width): + """Return the absolute position of this tab stop.""" + return self._position.to_points(line_width) + + +class TabStopList(AttributeType, list): + """List of tab stop positions (with alignment and fill string)""" + + def __str__(self): + return ', '.join(str(tab_stop) for tab_stop in self) + + @classmethod + def check_type(cls, value): + return (isinstance(value, (list, tuple)) + and all(isinstance(item, TabStop) for item in value)) + + REGEX = re.compile(r"""\s* # leading whitespace + (?P{pos}) # tab stop position + + (?: ## optional: tab alignment + \s+ # whitespace + (?P{align}) # tab alignment + )? + (?: ## optional: fill string + \s+ # whitespace + (?P.+) # fill string + )? + (?: ## optional: separator + \s* # whitespace + , # separating comma + \s* # whitespace + )? + """.format(pos=Dimension.REGEX.pattern, + align='|'.join(TabAlign.values)), + re.IGNORECASE | re.VERBOSE) + + @classmethod + def parse_string(cls, string, source): + tabstops = [] + i = 0 + while string[i:]: + m = cls.REGEX.match(string, pos=i) + if not m: + raise ValueError("'{}' is not a valid tab stop definition" + .format(string, cls.__name__)) + _, i = m.span() + position, align, fill = m.group('position', 'align', 'fill') + tabstop = TabStop(Dimension.from_string(position), + TabAlign.from_string(align) if align else 'left', + literal_eval(fill) if fill else None) + tabstops.append(tabstop) + return cls(tabstops) + + @classmethod + def doc_format(cls): + return ('a comma-seperated list of tab stops. A tab stop is specified ' + 'as `` [align] [fill string]``, where ' + '``position`` (:class:`.Dimension`) is required and ' + '``align`` (:class:`.TabAlign`) and ``fill string`` ' + '(string enclosed in quotes) are optional.') + + +# TODO: look at Word/OpenOffice for more options +class ParagraphStyle(FlowableStyle, NumberStyle, TextStyle): + width = OverrideDefault('fill') + + indent_first = Attribute(Dimension, 0*PT, 'Indentation of the first line ' + 'of text') + line_spacing = Attribute(LineSpacing, DEFAULT, 'Spacing between the ' + 'baselines of two successive lines of text') + text_align = Attribute(TextAlign, 'justify', 'Alignment of text to the ' + 'margins') + tab_stops = Attribute(TabStopList, TabStopList(), 'List of tab positions') + number_format = OverrideDefault(None) + number_separator = Attribute(StyledText, '.', + "Characters inserted between the number label" + " of this element's parent and this element's" + " own number label. If ``None``, only show" + " this item's number label.") + numbering_level = Attribute(Integer, 0, 'At which section level to ' + 'restart numbering (positive: ' + 'absolute, negative: relative)') + + +class Glyph(object): + __slots__ = ('metrics', 'width', 'char') + + def __init__(self, metrics, width, char): + self.metrics = metrics + self.width = width + self.char = char + + +def form_ligatures(chars_and_glyphs, get_ligature): + prev_char, prev_glyph = next(chars_and_glyphs) + for char, glyph in chars_and_glyphs: + ligature_glyph = get_ligature(prev_glyph, glyph) + if ligature_glyph: + prev_char += char + prev_glyph = ligature_glyph + else: + yield prev_char, prev_glyph + prev_char, prev_glyph = char, glyph + yield prev_char, prev_glyph + + +def kern(chars_and_glyphs, get_kerning): + prev_char, prev_glyph = next(chars_and_glyphs) + for char, glyph in chars_and_glyphs: + yield prev_char, prev_glyph, get_kerning(prev_glyph, glyph) + prev_char, prev_glyph = char, glyph + yield prev_char, prev_glyph, 0.0 + + +def create_lig_kern(span, flowable_target): + font = span.font(flowable_target) + scale = span.height(flowable_target) / font.units_per_em + variant = span.get_style('font_variant', flowable_target) + kerning = span.get_style('kerning', flowable_target) + ligatures = span.get_style('ligatures', flowable_target) + get_glyph_metrics = partial(font.get_glyph_metrics, variant=variant) + # TODO: handle ligatures at span borders + def lig_kern(chars, glyph_metrics=None): + if glyph_metrics is None: + glyph_metrics = (get_glyph_metrics(char) for char in chars) + chars_and_glyph_metrics = zip(chars, glyph_metrics) + if ligatures: + chars_and_glyph_metrics = form_ligatures(chars_and_glyph_metrics, + font.get_ligature) + if kerning: + glyphs_kern = kern(chars_and_glyph_metrics, font.get_kerning) + else: + glyphs_kern = [(char, glyph, 0.0) + for char, glyph in chars_and_glyph_metrics] + return [Glyph(glyph_metrics, scale * (glyph_metrics.width + + kern_adjust), char) + for char, glyph_metrics, kern_adjust in glyphs_kern] + + return get_glyph_metrics, lig_kern + + +def handle_missing_glyphs(span, container): + get_glyph, _ = create_lig_kern(span, container) + string = [] + for char in span.text(container): + try: + get_glyph(char) + string.append(char) + except MissingGlyphException: + if string: + yield SingleStyledText(''.join(string), parent=span) + string.clear() + if span.parent.style == '_fallback_': + yield SingleStyledText('?', parent=span) + else: + yield SingleStyledText(char, style='_fallback_', parent=span) + if string: + yield SingleStyledText(''.join(string), parent=span) + + +class LinePart(object): + def hyphenate(self, container): + return iter([]) + + +class SpecialCharacter(LinePart): + def __init__(self, span, chars_to_glyphs): + self.glyphs_span = GlyphsSpan(span, chars_to_glyphs) + + def __iter__(self): + yield self.glyphs_span + + @property + def width(self): + return self.glyphs_span.width + + +class Space(SpecialCharacter): + char = ' ' + + def __init__(self, span, chars_to_glyphs): + super().__init__(span, chars_to_glyphs) + self.glyphs_span.append_space() + + def __getitem__(self, index): + raise SpaceException + + +class SpaceException(Exception): + pass + + +class Tab(SpecialCharacter): + char = '\t' + + def __getitem__(self, index): + raise TabException + + +class TabException(Exception): + pass + + +class NewLine(SpecialCharacter): + char = '\n' + + def __getitem__(self, index): + raise NewLineException + + +class NewLineException(Exception): + pass + + +class ZeroWidthSpace(SpecialCharacter): + char = '\N{ZERO WIDTH SPACE}' + + def __getitem__(self, index): + assert index == 0 + return self.glyphs_span + + +class ForwardSlash(SpecialCharacter): + char = '/' + + def __getitem__(self, index): + assert index == 0 + return self.glyphs_span + + +WHITESPACE = { + ' ': Space, + '\t': Tab, + '\n': NewLine, + '\N{ZERO WIDTH SPACE}': ZeroWidthSpace, + '/': ForwardSlash, +} + + + + +class DefaultTabStops(object): + def __init__(self, tab_width): + self.tab_width = tab_width + + def __iter__(self): + return (TabStop(i * self.tab_width) for i in count(1)) + + +class ParagraphState(FlowableState): + def __init__(self, paragraph, language, span_index=0, group_index=0, + nested_flowable_state=None, _first_word=None, _initial=True): + super().__init__(paragraph, _initial) + self.language = language + self._words = None + self.span_index = max(span_index, 0) + self.group_index = group_index + self.nested_flowable_state = nested_flowable_state + self._first_word = _first_word + self._saved = None + + paragraph = ReadAliasAttribute('flowable') + + def __copy__(self): + return self.__class__(self.paragraph, self.language, + self.span_index, self.group_index, + copy(self.nested_flowable_state), + _first_word=self._first_word, + _initial=self.initial) + + def next_word(self, container): + if self._first_word: + word = self._first_word + self._first_word = None + else: + if not self._words: + spans = self.paragraph.text(container).wrapped_spans(container) + for _ in islice(spans, 0, self.span_index): pass + self._words = self._spans_to_words(spans) + word = self._words.send(container) + return word + + # TODO: shouldn't take a container (but needed by flow_inline) + # (return InlineFlowableSpan that raises InlineFlowableException later) + @consumer + def _spans_to_words(self, spans): + missing_glyphs_spans = None + container = yield + word = Word() + group_index = 0 + self.span_index -= 1 + while True: + if group_index: + self.group_index = 0 + group_index = 0 + if missing_glyphs_spans: + try: + span = next(missing_glyphs_spans) + except StopIteration: + missing_glyphs_spans = None + if not missing_glyphs_spans: + try: + span = next(spans) + self.span_index += 1 + except StopIteration: + break + try: + no_break_after = span.get_style('no_break_after', container) + except KeyError: # InlineFlowable + no_break_after = [] + if no_break_after == LANGUAGE_DEFAULT: + no_break_after = self.language.no_break_after + try: + get_glyph_metrics, lig_kern = create_lig_kern(span, container) + groups = groupby(iter(span.text(container)), WHITESPACE.get) + for _ in range(self.group_index): + next(groups) + group_index += 1 + for special, chars in groups: + group_index += 1 + if special is ForwardSlash: + self.group_index = group_index - 1 + if word: + container = yield word + word = Word() + elif special: + word_string = str(word).strip() + last_word = (word_string.rsplit(maxsplit=1)[-1] + if word_string else '') + if not (last_word.lower() in no_break_after + and special is Space): + self.group_index = group_index - 1 + if word: + container = yield word + for _ in chars: + container = yield special(span, lig_kern) + word = Word() + continue + part = ''.join(chars).replace('\N{NO-BREAK SPACE}', ' ') + if word and word[-1].span is span: + prev_glyphs_span = word.pop() + part = str(prev_glyphs_span) + part + try: + glyphs = [get_glyph_metrics(char) for char in part] + except MissingGlyphException: + # FIXME: span annotations are lost here + rest = ''.join(char for _, group in groups + for char in group) + rest_of_span = SingleStyledText(part + rest, parent=span) + missing_glyphs_spans = handle_missing_glyphs(rest_of_span, container) + break + glyphs = lig_kern(part, glyphs) + glyphs_span = GlyphsSpan(span, lig_kern, glyphs) + word.append(glyphs_span) + except InlineFlowableException: + glyphs_span = span.flow_inline(container, 0) + word.append(glyphs_span) + if word: + yield word + + def prepend_word(self, word): + self._first_word = word + + def save(self): + self._saved = (self._first_word, self.span_index, self.group_index, + copy(self.nested_flowable_state), self.initial) + + def restore(self): + first_word, span_index, group_index, nested_state, initial = self._saved + self._first_word = first_word + self._words = None + self.span_index = span_index + self.group_index = group_index + self.nested_flowable_state = nested_state + self.initial = initial + self._saved = None + + +class ParagraphBase(Flowable, Label): + """Base class for paragraphs + + A paragraph holds styled text and other line elements to be flowed into a + container. + + """ + + category = 'paragraph' + style_class = ParagraphStyle + significant_whitespace = False + + def __init__(self, custom_label=None, align=None, width=None, + id=None, style=None, parent=None, source=None): + super().__init__(align=align, width=width, + id=id, style=style, parent=parent, source=source) + Label.__init__(self, custom_label=custom_label) + + @property + def referenceable(self): + return self + + def prepare(self, flowable_target): + super().prepare(flowable_target) + document = flowable_target.document + number_format = self.get_style('number_format', flowable_target) + if self.get_style('custom_label', flowable_target): + assert self.custom_label is not None + label = str(self.custom_label) + elif number_format: + numbering_level = self.get_style('numbering_level', flowable_target) + section = self.section + if numbering_level < 0: + numbering_level = section.level + numbering_level + while section and section.level > numbering_level: + section = section.parent.section + section_id = section.get_id(document, False) if section else None + ref_category = self.referenceable.category + section_counters = document.counters.setdefault(ref_category, {}) + section_counter = section_counters.setdefault(section_id, []) + section_counter.append(self) + number = len(section_counter) + label = self.prepare_label(number, section, flowable_target) + else: + return + category_label = StringField(self.referenceable.category) + reference = MixedStyledText([category_label, ' ', label]) + for id in self.referenceable.get_ids(document): + document.set_reference(id, 'number', label) + document.set_reference(id, 'reference', reference) + + def prepare_label(self, number, parent_section, container): + document = container.document + number_format = self.get_style('number_format', container) + label = format_number(number, number_format) + separator = self.get_style('number_separator', container) + if separator is not None and parent_section and parent_section.level > 0: + parent_id = parent_section.get_id(document) + parent_ref = document.get_reference(parent_id, 'number', None) + if parent_ref: + separator_string = separator.to_string(container) + label = parent_ref + separator_string + label + return label + + def number(self, container): + document = container.document + target_id = self.referenceable.get_id(document) + formatted_number = document.get_reference(target_id, 'number') + if formatted_number: + label = self.format_label(formatted_number, container) + label.style = 'label' + return label + else: + return '' + + def text(self, container): + text = [] + if self.get_style('number_format', container): + text.append(self.number(container)) + before = self.get_style('before', container) + if before is not None: + text.append(before.copy()) + text.append(self.content) + after = self.get_style('after', container) + if after is not None: + text.append(after.copy()) + return MixedStyledText(text, parent=self) + + @property + def paragraph(self): + return self + + def initial_state(self, container): + return ParagraphState(self, container.document.language) + + def _short_repr_args(self, flowable_target): + yield self._short_repr_string(flowable_target) + + def to_string(self, flowable_target): + return ''.join(item.to_string(flowable_target) for + item in self.text(flowable_target)) + + def _text(self, container): + raise NotImplementedError('{}.text()'.format(self.__class__.__name__)) + + def render(self, container, descender, state, space_below=0, + first_line_only=False): + """Typeset the paragraph + + The paragraph is typeset in the given container starting below the + current cursor position of the container. When the end of the container + is reached, the rendering state is preserved to continue setting the + rest of the paragraph when this method is called with a new container. + + Args: + container (Container): the container to render to + descender (float or None): descender height of the preceding line + state (ParagraphState): the state where rendering will continue + first_line_only (bool): typeset only the first line + + """ + indent_first = (float(self.get_style('indent_first', container)) + if state.initial else 0) + line_width = float(container.width) + line_spacing = self.get_style('line_spacing', container) + text_align = self.get_style('text_align', container) + tab_stops = self.get_style('tab_stops', container) + if not tab_stops: + tab_width = 2 * self.get_style('font_size', container) + tab_stops = DefaultTabStops(tab_width) + + # `saved_state` is updated after successfully rendering each line, so + # that when `container` overflows on rendering a line, the words in that + # line are yielded again on the next typeset() call. + saved_state = copy(state) + max_line_width = 0 + + def typeset_line(line, last_line=False): + """Typeset `line` and, if no exception is raised, update the + paragraph's internal rendering state. + + Args: + line (Line): the line to typeset + last_line (bool): True if this is the paragraph's last line + + """ + nonlocal state, saved_state, max_line_width, descender, space_below + max_line_width = max(max_line_width, line.cursor) + # descender is None when this is the first line in the container + advance = (line.ascender(container) if descender is None + else line_spacing.advance(line, descender, container)) + descender = line.descender(container) # descender <= 0 + line.advance = advance + total_advance = advance + (space_below if last_line else 0) - descender + if container.remaining_height < total_advance: + raise EndOfContainer(saved_state) + assert container.advance2(advance) + try: + line.typeset(container, text_align, last_line) + except ContainerOverflow: + raise EndOfContainer(saved_state) + assert container.advance2(- descender) + state.initial = False + saved_state = copy(state) + return Line(tab_stops, line_width, container, + significant_whitespace=self.significant_whitespace) + + first_line = line = Line(tab_stops, line_width, container, + indent_first, self.significant_whitespace) + state.save() + while True: + try: + word = state.next_word(container) + except StopIteration: + break + try: + if not line.append_word(word): + for first, second, is_last in word.hyphenate(container): + if line.append_word(first, is_last): + state.prepend_word(second) # prepend second part + break + else: + if not line: + line.append_word(word, True) + else: + state.restore() + line = typeset_line(line) + if first_line_only: + break + continue + except NewLineException: + line.append(word.glyphs_span) + line = typeset_line(line, last_line=True) + if first_line_only: + break + state.save() + if line: + typeset_line(line, last_line=True) + + # Correct the horizontal text placement for auto-width paragraphs + if self._width(container) == FlowableWidth.AUTO: + if text_align == TextAlign.CENTER: + container.left -= float(container.width - max_line_width) / 2 + if text_align == TextAlign.RIGHT: + container.left -= float(container.width - max_line_width) + + return max_line_width, first_line.advance, descender + + +class StaticParagraph(ParagraphBase): + """A paragraph of static text + + Args: + content (StyledText): the paragraph's text content + + """ + has_title = False + + def __init__(self, content, custom_label=None, align=None, width=None, + id=None, style=None, parent=None, source=None): + super().__init__(custom_label=custom_label, align=align, width=width, + id=id, style=style, parent=parent, source=source) + if isinstance(content, str): + content = SingleStyledText(content) + elif isinstance(content, Iterable): + content = MixedStyledText(content) + assert content.parent is None + content.parent = self + self.content = content + + def prepare(self, container): + super().prepare(container) + self.content.prepare(container) + if self.has_title: + for id in self.referenceable.get_ids(container.document): + container.document.set_reference(id, 'title', self.content) + + def _text(self, container): + return self.content + + +class Paragraph(StaticParagraph): + pass + + +class HyphenatorStore(dict): + def __missing__(self, key): + hyphen_lang, hyphen_chars = key + dic_path = dic_file = 'hyph_{}.dic'.format(hyphen_lang) + if not path.exists(dic_path): + dic_path = path.join(path.join(DATA_PATH, 'hyphen'), dic_file) + if not path.exists(dic_path): + raise IOError("Hyphenation dictionary '{}' neither found in " + "current directory, nor in the data directory" + .format(dic_file)) + self[key] = Hyphenator(dic_path, hyphen_chars, hyphen_chars) + return self[key] + + +HYPHENATORS = HyphenatorStore() + + +def create_hyphenate(span, container): + if not span.get_style('hyphenate', container): + def dont_hyphenate(word): + return + yield + return dont_hyphenate + + hyphenator = HYPHENATORS[span.get_style('hyphen_lang', container), + span.get_style('hyphen_chars', container)] + def hyphenate(word): + """Generator yielding possible options for splitting this single-styled + text (assuming it is a word) across two lines. Items yielded are tuples + containing the first (with trailing hyphen) and second part of the split + word. + + In the first returned option, the word is split at the right-most + possible break point. In subsequent items, the break point advances to + the front of the word. + If hyphenation is not possible or simply not enabled, a single tuple is + yielded of which the first element is the word itself, and the second + element is `None`.""" + for first, second, is_last in hyphenator.iterate(word): + yield first + '-', second, is_last + return hyphenate + + +class GlyphsSpan(list): + def __init__(self, span, chars_to_glyphs, glyphs=[]): + super().__init__() + self.span = span + self.filled_tabs = {} + self.chars_to_glyphs = chars_to_glyphs + self.space, = chars_to_glyphs(' ') + super().__init__(self.space if glyph.char == ' ' else glyph + for glyph in glyphs) + + def __str__(self): + return ''.join(glyph.char for glyph in self) + + @property + def width(self): + return sum(glyph.width for glyph in self) + + @property + def number_of_spaces(self): + return self.count(self.space) + + @property + def ends_with_space(self): + return self[-1] == self.space + + def append_space(self): + self.append(self.space) + + def _fill_tabs(self): + for index, glyph in enumerate(super().__iter__()): + if index in self.filled_tabs: + fill_string = self.filled_tabs[index] + fill_glyphs = self.chars_to_glyphs(fill_string) + fill_string_width = sum(glyph.width for glyph in fill_glyphs) + number, rest = divmod(glyph.width, fill_string_width) + yield Glyph(glyph.metrics, rest, glyph.char) + for i in range(int(number)): + for fill_glyph in fill_glyphs: + yield fill_glyph + else: + yield glyph + + def __iter__(self): + if self.filled_tabs: + return self._fill_tabs() + else: + return super().__iter__() + + +class Word(LinePart, list): + def __init__(self, glyphs_spans=()): + super().__init__(glyphs_spans) + + def __str__(self): + return ''.join(str(glyphs_span) for glyphs_span in self) + + def __repr__(self): + return f"{type(self).__name__}('{self}')" + + @property + def width(self): + return sum(glyph_span.width for glyph_span in self) + + def hyphenate(self, container): + # TODO: hyphenate mixed-styled words (if lang is the same) + if len(self) > 1: + return + first_glyphs_span, = self + span = first_glyphs_span.span + c2g = first_glyphs_span.chars_to_glyphs + hyphenate = create_hyphenate(first_glyphs_span.span, container) + words = str(self).split() + for i, word in enumerate(words): + for first, second, is_last in hyphenate(word): + f = chain(words[:i], [first]) + s = chain([second], words[i+1:]) + first_gs = GlyphsSpan(span, c2g, c2g(' '.join(f))) + second_gs = GlyphsSpan(span, c2g, c2g(' '.join(s))) + yield Word([first_gs]), Word([second_gs]), is_last + + +class Line(list): + """Helper class for building and typesetting a single line of text within + a paragraph. + + Args: + tab_stops (TabStopList): as given in the paragraph style + width (float): the available line width + container (Container); the render target for this line + indent (float): left indent width (positive or negative) + significant_whitespace (bool): whether to typeset whitespace as-is or + consider them as tokens separating words + + """ + + def __init__(self, tab_stops, width, container, indent=0, + significant_whitespace=False): + super().__init__() + self.tab_stops = tab_stops + self.width = width + self.indent = indent + self.container = container + self.cursor = indent + self.advance = 0 + self.significant_whitespace = significant_whitespace + self._has_tab = False + self._current_tab = None + self._current_tab_stop = None + + def __str__(self): + return ''.join(str(word) for word in self) + + def __repr__(self): + return f"{type(self).__name__}('{self}')" + + def _handle_tab(self, glyphs_span): + span = glyphs_span.span + for tab_stop in self.tab_stops: + tab_position = tab_stop.get_position(self.width) + if self.cursor < tab_position: + tab_width = tab_position - self.cursor + tab = Glyph(glyphs_span.space.metrics, tab_width, '\t') + if tab_stop.fill: + glyphs_span.filled_tabs[len(glyphs_span)] = tab_stop.fill + glyphs_span.append(tab) + self.cursor = tab_position + self._current_tab_stop = tab_stop + if tab_stop.align in (TabAlign.RIGHT, TabAlign.CENTER): + self._current_tab = tab + self._current_tab_stop = tab_stop + else: + self._current_tab = None + self._current_tab_stop = None + break + else: + span.warn('Tab did not fall into any of the tab stops.', + self.container) + + def append_word(self, word_or_inline, force=False): + try: + first_glyphs_span = word_or_inline[0] + except SpaceException: + if not self and not self.significant_whitespace: + return True + first_glyphs_span = word_or_inline.glyphs_span + except TabException: + empty_glyphs_span = copy(word_or_inline.glyphs_span) + self._handle_tab(empty_glyphs_span) + self.append(empty_glyphs_span) + return True + + width = word_or_inline.width + if self._current_tab: + current_tab = self._current_tab + tab_width = current_tab.width + factor = (2 if self._current_tab_stop.align == TabAlign.CENTER + else 1) + item_width = width / factor + if item_width < tab_width: + current_tab.width -= item_width + else: + first_glyphs_span.span.warn('Tab space exceeded.', + self.container) + current_tab.width = 0 + self._current_tab = None + self.cursor -= item_width + if self.cursor + width > self.width: + if self or not force: + return False + elif self.width > 0: + first_glyphs_span.span.warn('item too long to fit on line', + self.container) + self.cursor += width + for glyphs_span in word_or_inline: + self.append(glyphs_span) + return True + + def descender(self, container): + return min(glyph_span.span.descender(container) for glyph_span in self) + + def ascender(self, container): + return max(glyph_span.span.ascender(container) for glyph_span in self) + + def typeset(self, container, text_align, last_line=False): + """Typeset the line in `container` below its current cursor position. + Advances the container's cursor to below the descender of this line. + + `justification` and `line_spacing` are passed on from the paragraph + style. `last_descender` is the previous line's descender, used in the + vertical positioning of this line. Finally, `last_line` specifies + whether this is the last line of the paragraph. + + Returns the line's descender size.""" + document = container.document + + # drop spaces (and empty spans) at the end of the line + while len(self) > 0: + last_span = self[-1] + if last_span and last_span.ends_with_space: + self.cursor -= last_span.space.width + self.pop() + else: + break + else: # abort if the line is empty + return + + descender = self.descender(container) + # Temporarily advance with descender so that overflow on + # before_placing (e.g. footnotes) can be detected + assert container.advance2(- descender) + if not container.never_placed: + for glyph_span in self: + glyph_span.span.before_placing(container, preallocate=True) + assert container.advance2(descender) + + # horizontal displacement + left = self.indent + + if self._current_tab or text_align == TextAlign.JUSTIFY and last_line: + text_align = 'left' + extra_space = self.width - self.cursor + if text_align == TextAlign.JUSTIFY: + # TODO: padding added to spaces should be prop. to font size + nr_spaces = sum(glyph_span.number_of_spaces for glyph_span in self) + if nr_spaces > 0: + add_to_spaces = extra_space / nr_spaces + for glyph_span in self: + if glyph_span.number_of_spaces > 0: + glyph_span.space.width += add_to_spaces + elif text_align == TextAlign.CENTER: + left += extra_space / 2.0 + elif text_align == TextAlign.RIGHT: + left += extra_space + + canvas = container.canvas + cursor = container.cursor + current_annotation = AnnotationState(container) + for span, glyphs in group_spans(self): + try: + width = canvas.show_glyphs(left, cursor, span, glyphs, + container) + except InlineFlowableException: + ascender = span.ascender(document) + if ascender > 0: + top = cursor - ascender + else: + inline_height = span.virtual_container.height + top = cursor - span.descender(document) - inline_height + span.virtual_container.place_at(container, left, top) + width = span.width + current_annotation.update(span, left, width) + left += width + current_annotation.place_if_any() + + +def group_spans(line): + span = None + glyphs = [] + for glyph_span in line: + if glyph_span.span is not span: + if span: + yield span, glyphs + span = glyph_span.span + glyphs = [] + try: + glyphs += glyph_span + except TypeError: # InlineFlowable + yield glyph_span, None + span = None + if span: + yield span, glyphs + + +class AnnotationRect(object): + __slots__ = ('annotation', 'left', 'width', 'height', 'ascender') + + def __init__(self, annotation, left, width, height, ascender): + self.annotation = annotation + self.left = left + self.width = width + self.height = height + self.ascender = ascender + + def update(self, width, height, ascender): + self.width += width + self.height = max(self.height, height) + self.ascender = max(self.ascender, ascender) + + +class AnnotationState(object): + __slots__ = ('anchor', 'link', 'container') + + def __init__(self, container): + self.anchor = None + self.link = None + self.container = container + + def update_annotation(self, span, annotation_type, left, width): + annotation = getattr(span, annotation_type + '_annotation') + annotation_rect = getattr(self, annotation_type) + if annotation_rect and annotation is not annotation_rect.annotation: + self.place_if_any(annotation_type) + if annotation: + container = self.container + if annotation_rect and annotation is annotation_rect.annotation: + annotation_rect.update(width, span.height(container), + span.ascender(container)) + else: + annotation_rect = AnnotationRect(annotation, left, width, + span.height(container), + span.ascender(container)) + else: + annotation_rect = None + setattr(self, annotation_type, annotation_rect) + + def update(self, span, left, width): + if isinstance(span, AnnotatedSpan): + self.update_annotation(span, 'anchor', left, width) + self.update_annotation(span, 'link', left, width) + + def place_if_any(self, annotation_type=None): + annotation_types = ((annotation_type, ) if annotation_type + else ('anchor', 'link')) + for type in annotation_types: + annotation_rect = getattr(self, type) + if annotation_rect: + top = self.container.cursor - annotation_rect.ascender + self.container.canvas.annotate(annotation_rect.annotation, + annotation_rect.left, top, + annotation_rect.width, + annotation_rect.height) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/reference.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/reference.py new file mode 100644 index 000000000..426992e76 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/reference.py @@ -0,0 +1,469 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import re +from itertools import chain, zip_longest + +from .annotation import NamedDestinationLink +from .attribute import Attribute, Bool, OptionSet, OverrideDefault +from .flowable import (Flowable, LabeledFlowable, DummyFlowable, + LabeledFlowableStyle) +from .layout import ContainerOverflow +from .number import NumberStyle, Label, format_number +from .paragraph import Paragraph, ParagraphStyle, ParagraphBase +from .strings import StringField +from .style import HasClass, HasClasses, Styled +from .text import (StyledText, TextStyle, SingleStyledText, + MixedStyledTextBase, MixedStyledText, ErrorText) +from .util import NotImplementedAttribute + +__all__ = ['Reference', 'ReferenceField', 'ReferenceText', 'ReferenceType', + 'ReferencingParagraph', 'ReferencingParagraphStyle', + 'Note', 'NoteMarkerBase', 'NoteMarkerByID', 'NoteMarkerWithNote', + 'NoteMarkerStyle', 'Field', + 'PAGE_NUMBER', 'NUMBER_OF_PAGES', 'SECTION_NUMBER', + 'SECTION_TITLE', 'DOCUMENT_TITLE', 'DOCUMENT_SUBTITLE'] + + +class ReferenceType(OptionSet): + values = 'reference', 'number', 'title', 'page', 'custom' + + +# examples for section "3.2 Some Title" +# reference: Section 3.2 +# number: 3.2 +# title: Some Title +# page: + + +class ReferenceStyle(TextStyle, NumberStyle): + type = Attribute(ReferenceType, ReferenceType.REFERENCE, + 'How the reference should be displayed') + link = Attribute(Bool, True, 'Create a hyperlink to the reference target') + quiet = Attribute(Bool, False, 'If the given reference type does not exist' + 'for the target, resolve to an empty string' + 'instead of making a fuss about it') + + +class ReferenceBase(MixedStyledTextBase): + style_class = ReferenceStyle + + def __init__(self, type=None, custom_title=None, style=None, parent=None, + source=None): + super().__init__(style=style, parent=parent, source=source) + self.type = type + self.custom_title = custom_title + if custom_title: + custom_title.parent = self + + def __str__(self): + result = "'{{{}}}'".format((self.type or 'none').upper()) + if self.style is not None: + result += ' ({})'.format(self.style) + return result + + def copy(self, parent=None): + return type(self)(self.type, self.custom_title, style=self.style, + parent=parent, source=self.source) + + def target_id(self, document): + raise NotImplementedError + + def is_title_reference(self, container): + reference_type = self.type or self.get_style('type', container) + return reference_type == ReferenceType.TITLE + + def children(self, container, type=None): + document = container.document + type = type or self.type or self.get_style('type', container) + if container is None: + return '$REF({})'.format(type) + target_id = self.target_id(document) + if type == ReferenceType.CUSTOM: + yield self.custom_title + return + try: + text = document.get_reference(target_id, type) + except KeyError: + if self.custom_title: + text = self.custom_title + elif self.get_style('quiet', container): + text = '' + else: + self.warn(f"Target '{target_id}' has no '{type}' reference", + container) + text = ErrorText('??', parent=self) + if type == ReferenceType.TITLE: # prevent infinite recursion + document.title_targets.update(self.referenceable_ids) + if target_id in document.title_targets: + self.warn("Circular 'title' reference replaced with " + "'reference' reference", container) + yield from self.children(container, type='reference') + return + document.title_targets.add(target_id) + yield (text.copy(parent=self) if isinstance(text, Styled) + else SingleStyledText(text, parent=self)) + document.title_targets.clear() + + def get_annotation(self, container): + assert self.annotation is None + if self.get_style('link', container): + target_id = self.target_id(container.document) + return NamedDestinationLink(str(target_id)) + + +class Reference(ReferenceBase): + def __init__(self, target_id, *args, **kwargs): + super().__init__(*args, **kwargs) + self._target_id = target_id + + def copy(self, parent=None): + return type(self)(self._target_id, self.type, self.custom_title, + style=self.style, parent=parent, source=self.source) + + def target_id(self, document): + return self._target_id + + +class DirectReference(ReferenceBase): + def __init__(self, referenceable, type='number', **kwargs): + super().__init__(type=type, **kwargs) + self.referenceable = referenceable + + def target_id(self, document): + return self.referenceable.get_id(document) + + +class ReferenceField(ReferenceBase): + def target_id(self, document): + target_id_or_flowable = self.paragraph.target_id_or_flowable + return (target_id_or_flowable.get_id(document) + if isinstance(target_id_or_flowable, Flowable) + else target_id_or_flowable) + + +class ReferenceText(StyledText): + RE_TYPES = re.compile('{(' + '|'.join(ReferenceType.values) + ')}', re.I) + + @classmethod + def check_type(cls, value): + return isinstance(value, (str, type(None), StyledText)) + + @classmethod + def _substitute_variables(cls, text, style): + return substitute_variables(text, cls.RE_TYPES, create_reference_field, + super()._substitute_variables, style) + + +def create_reference_field(key, style=None): + return ReferenceField(key.lower(), style=style) + + +class ReferencingParagraphStyle(ParagraphStyle): + text = Attribute(ReferenceText, ReferenceField('title'), + 'The text content of this paragraph') + + +class ReferencingParagraph(ParagraphBase): + style_class = ReferencingParagraphStyle + + def __init__(self, target_id_or_flowable, id=None, style=None, parent=None): + super().__init__(id=id, style=style, parent=parent) + self.target_id_or_flowable = target_id_or_flowable + + def text(self, container): + return self.get_style('text', container).copy(parent=self) + + def _target_id(self, document): + target_id_or_flowable = self.target_id_or_flowable + return (target_id_or_flowable.get_id(document) + if isinstance(target_id_or_flowable, Flowable) + else target_id_or_flowable) + + def _target_flowable(self, document): + return document.elements[self._target_id(document)] + + def target_style(self, document): + """Filter selection on the ``style`` attribute of the target flowable""" + return self._target_flowable(document).style + + def target_has_class(self, document): + """Filter selection on a class of the target flowable""" + return HasClass(self._target_flowable(document)) + + def target_has_classes(self, document): + """Filter selection on a set of classes of the target flowable""" + return HasClasses(self._target_flowable(document)) + + def target_is_of_type(self, document): + """Filter selection on the type of the target flowable""" + return IsOfType(self._target_flowable(document)) + + +class IsOfType: + def __init__(self, styled): + self.styled = styled + + def __eq__(self, type_name): + return type_name == type(self.styled).__name__ + + +class NoteLocation(OptionSet): + """Where a :class:`.Note` is placed""" + + values = 'in-place', 'footer' + + +class NoteStyle(LabeledFlowableStyle): + location = Attribute(NoteLocation, 'footer', 'Where to place the note') + + +class Note(LabeledFlowable): + category = 'note' + style_class = NoteStyle + + def __init__(self, flowable, id=None, style=None, parent=None): + label = Paragraph(DirectReference(self)) + super().__init__(label, flowable, id=id, style=style, parent=parent) + + def flow(self, container, last_descender, state=None, footnote=False, + **kwargs): + location = self.get_style('location', container) + if not footnote and location == NoteLocation.FOOTER: + return 0, 0, last_descender + return super().flow(container, last_descender, state, **kwargs) + + +class NoteMarkerStyle(ReferenceStyle): + type = OverrideDefault(ReferenceType.NUMBER) + + +class NoteMarkerBase(ReferenceBase, Label): + style_class = NoteMarkerStyle + + def __init__(self, custom_label=None, **kwargs): + super().__init__(**kwargs) + Label.__init__(self, custom_label=custom_label) + + def prepare(self, flowable_target): + document = flowable_target.document + target_id = self.target_id(document) + try: # set reference only once (notes can be referenced multiple times) + document.get_reference(target_id, 'number') + except KeyError: + if self.get_style('custom_label', flowable_target): + assert self.custom_label is not None + label = self.custom_label + else: + number_format = self.get_style('number_format', flowable_target) + counter = document.counters.setdefault(Note.category, []) + counter.append(self) + label = format_number(len(counter), number_format) + formatted_label = self.format_label(label, flowable_target) + document.set_reference(target_id, 'number', formatted_label) + + def before_placing(self, container, preallocate=False): + note = container.document.elements[self.target_id(container.document)] + if note.get_style('location', container) == NoteLocation.FOOTER: + if not container._footnote_space.add_footnote(note, preallocate): + raise ContainerOverflow + super().before_placing(container, preallocate) + + +class NoteMarkerByID(Reference, NoteMarkerBase): + pass + + +class NoteMarkerWithNote(DirectReference, NoteMarkerBase): + def prepare(self, flowable_target): + self.referenceable.prepare(flowable_target) + super().prepare(flowable_target) + + +class FieldTypeBase(object): + name = NotImplementedAttribute() + + def __str__(self): + return '{{{}}}'.format(self.key) + + @property + def key(self): + return self.name.upper().replace(' ', '_') + + +class FieldType(FieldTypeBase): + all = {} + + def __init__(self, name): + super().__init__() + self.name = name + self.all[self.key] = self + + def __repr__(self): + return "{}('{}')".format(self.__class__.__name__, self.name) + + @classmethod + def from_string(cls, string): + return cls.all[string.upper()] + + +PAGE_NUMBER = FieldType('page number') +NUMBER_OF_PAGES = FieldType('number of pages') +DOCUMENT_TITLE = FieldType('document title') +DOCUMENT_SUBTITLE = FieldType('document subtitle') +DOCUMENT_AUTHOR = FieldType('document author') + + +class SectionFieldTypeMeta(type): + def __new__(metacls, classname, bases, cls_dict): + cls = super().__new__(metacls, classname, bases, cls_dict) + try: + SectionFieldType.all[classname] = cls + except NameError: + pass + return cls + + @property + def key(cls): + return cls.__name__ + + +class SectionFieldType(FieldTypeBase, metaclass=SectionFieldTypeMeta): + reference_type = None + all = {} + + def __init__(self, level): + super().__init__() + self.level = level + + def __eq__(self, other): + return type(self) == type(other) and self.__dict__ == other.__dict__ + + def __str__(self): + return '{{{key}({level})}}'.format(key=self.key, level=self.level) + + def __repr__(self): + return "{}({})".format(type(self).__name__, self.level) + + REGEX = re.compile(r'(?P[a-z_]+)\((?P\d+)\)', re.IGNORECASE) + + @classmethod + def from_string(cls, string): + m = cls.REGEX.match(string) + section_field, level = m.group('name', 'level') + return cls.all[section_field.upper()](int(level)) + + +class SECTION_NUMBER(SectionFieldType): + name = 'section number' + reference_type = 'number' + + +class SECTION_TITLE(SectionFieldType): + name = 'section title' + reference_type = 'title' + + +RE_STRINGFIELD = r'[@$](?:[a-z_][a-z0-9_]*)' + + +class Field(MixedStyledTextBase): + def __init__(self, type, id=None, style=None, parent=None, source=None): + super().__init__(id=id, style=style, parent=parent, source=source) + self.type = type + + def __str__(self): + result = "'{}'".format(self.type) + if self.style is not None: + result += ' ({})'.format(self.style) + return result + + def __repr__(self): + return "{0}({1})".format(self.__class__.__name__, repr(self.type)) + + @classmethod + def parse_string(cls, string, style=None): + try: + field = FieldType.from_string(string) + except KeyError: + field = SectionFieldType.from_string(string) + return cls(field, style=style) + + def copy(self, parent=None): + return type(self)(self.type, style=self.style, parent=parent, + source=self.source) + + def children(self, container): + if container is None: + text = '${}'.format(self.type) + elif self.type == PAGE_NUMBER: + text = container.page.formatted_number + elif self.type == NUMBER_OF_PAGES: + part = container.document_part + text = format_number(part.number_of_pages, part.page_number_format) + elif self.type == DOCUMENT_TITLE: + text = container.document.get_metadata('title') + elif self.type == DOCUMENT_SUBTITLE: + text = container.document.get_metadata('subtitle') + elif self.type == DOCUMENT_AUTHOR: + text = container.document.get_metadata('author') + elif isinstance(self.type, SectionFieldType): + doc = container.document + section = container.page.get_current_section(self.type.level) + section_id = section.get_id(doc) if section else None + if section_id: + text = doc.get_reference(section_id, self.type.reference_type, + '\N{ZERO WIDTH SPACE}') + else: + text = '\N{ZERO WIDTH SPACE}' + else: + text = '?' + if text is None: + return + elif isinstance(text, Styled): + yield text.copy(parent=self) + else: + yield SingleStyledText(text, parent=self) + + RE_FIELD = re.compile('{(' + '|'.join(chain(FieldType.all, + (r'{}\(\d+\)'.format(name) + for name + in SectionFieldType.all))) + + '|' + RE_STRINGFIELD + + ')}', re.IGNORECASE) + + @classmethod + def substitute(cls, text, substitute_others, style): + def create_variable(key, style=None): + try: + return cls.parse_string(key.lower(), style=style) + except AttributeError: + return StringField.parse_string(key, style=style) + + return substitute_variables(text, cls.RE_FIELD, create_variable, + substitute_others, style) + + +def substitute_variables(text, split_regex, create_variable, + substitute_others, style): + def sub(parts): + iter_parts = iter(parts) + for other_text, variable_type in zip_longest(iter_parts, iter_parts): + if other_text: + yield substitute_others(other_text, style=None) + if variable_type: + yield create_variable(variable_type) + + parts = split_regex.split(text) + if len(parts) == 1: # no variables + return substitute_others(text, style=style) + elif sum(1 for part in parts if part) == 1: # only a single variable + variable_type, = (part for part in parts if part) + return create_variable(variable_type, style=style) + else: # variable(s) and text + return MixedStyledText(sub(parts), style=style) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/resource.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/resource.py new file mode 100644 index 000000000..dddeb5a69 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/resource.py @@ -0,0 +1,214 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +import string +import sys + +from subprocess import Popen, PIPE + +try: # required on Python < 3.8, but always used if available + import importlib_metadata as ilm +except ImportError: + from importlib import metadata as ilm +from warnings import warn + +from .attribute import AttributeType +from .util import NotImplementedAttribute, class_property + + +__all__ = ['Resource', 'ResourceNotFound', 'find_entry_points'] + + +class Resource(AttributeType): + resource_type = NotImplementedAttribute() + + @class_property + def entry_point_group(cls): + return 'rinoh.{}s'.format(cls.resource_type) + + @classmethod + def parse_string(cls, resource_name, source): + entry_point_name = resource_name.lower() + entry_points = find_entry_points(cls.entry_point_group, + entry_point_name) + try: + entry_point, dist = next(entry_points) + except StopIteration: + raise ResourceNotFound(cls, resource_name, entry_point_name) + other_distributions = [dist for _, dist in entry_points] + if other_distributions: + warn("The {} '{}' is also provided by:\n".format(cls.resource_type, + resource_name) + + ''.join('* {}\n'.format(dist.metadata['Name']) + for dist in other_distributions) + + "Using the one from '{}'".format(dist.metadata['Name'])) + return entry_point.load() + + @class_property + def installed_resources(cls): + try: # Python >= 3.10 and importlib_metadata >= 3.6 + entry_points = ilm.entry_points(group=cls.entry_point_group) + except TypeError: + entry_points = ilm.entry_points()[cls.entry_point_group] + for entry_point in entry_points: + yield entry_point.name, entry_point + + @classmethod + def install_from_pypi(cls, entry_point_name): + resource_id = entry_point_name_to_identifier(entry_point_name) + package_name = '-'.join(['rinoh', cls.resource_type, resource_id]) + pip = Popen([sys.executable, '-m', 'pip', 'install', package_name], + stdout=PIPE, universal_newlines=True) + for line in pip.stdout: + if not line.startswith('Requirement already satisfied'): + sys.stdout.write(line) + return pip.wait() == 0 + + +class ResourceNotFound(Exception): + """Exception raised when a resource was not found + + Args: + resource_type (type): the type of the resource + resource_name (str): the name of the resource + entry_point_name (str): the entry point name for the resource + + """ + def __init__(self, resource_class, resource_name, entry_point_name): + self.resource_class = resource_class + self.resource_name = resource_name + self.entry_point_name = entry_point_name + + @property + def resource_type(self): + return self.resource_class.resource_type + + +def entry_point_name_to_identifier(entry_point_name): + """Transform an entry point name into an identifier suitable for inclusion + in a PyPI package name.""" + try: + entry_point_name.encode('ascii') + ascii_name = entry_point_name + except UnicodeEncodeError: + ascii_name = entry_point_name.encode('punycode').decode('ascii') + return ''.join(char for char in ascii_name + if char in string.ascii_lowercase + string.digits) + + +def find_entry_points(group, name=None): + """Find all entry points in `group`, optionally filtered by `name` + + Yields: + (EntryPoint, Distribution): entry point and distribution it belongs to + + """ + yield from ((ep, dist) for dist in ilm.distributions() + for ep in dist.entry_points + if ep.group == group and (name is None + or ep.name.lower() == name.lower())) + + +# dynamic entry point creation + +GROUPS = ('rinoh.templates', 'rinoh.typefaces') + +_installed_entry_points = {(ep.group, ep.name): dist + for dist in ilm.distributions() + for ep in dist.entry_points + if ep.group in GROUPS} + + +class DynamicEntryPoint(ilm.EntryPoint): + """An entry point defined by value instead of by module:attribute""" + + def load(self): + return self.value + + +class DynamicRinohDistribution(ilm.Distribution): + """Distribution for registering resource entry points to at runtime""" + + name = 'rinoh-dynamic' + + def __init__(self): + self._templates = {} + self._typefaces = {} + + def register_template(self, name, template_class): + """Register a template by (entry point) name at runtime""" + self._check_existing_entry_point('template', name) + try: + assert issubclass(template_class, DocumentTemplate) + except (TypeError, AssertionError): + raise ValueError("The template '{}' you are trying to register " + "is not a DocumentTemplate subclass".format(name)) + self._templates[name] = template_class + + def register_typeface(self, name, typeface): + """Register a typeface by (entry point) name at runtime""" + self._check_existing_entry_point('typeface', name) + if not isinstance(typeface, Typeface): + raise ValueError("The typeface '{}' you are trying to register " + "is not a Typeface instance".format(name)) + self._typefaces[name] = typeface + + def _check_existing_entry_point(self, resource_type, name): + group = 'rinoh.{}s'.format(resource_type) + try: + dist = _installed_entry_points[(group, name)] + existing = "by the distribution '{}'".format(dist.metadata['Name']) + except KeyError: + if name in self._entry_point_groups[group]: + existing = "using 'register_{}'".format(resource_type) + else: + return + raise ValueError("A {} named '{}' has already been registered {}" + .format(resource_type, name, existing)) + + @property + def _entry_point_groups(self): + return { + 'rinoh.templates': self._templates, + 'rinoh.typefaces': self._typefaces, + } + + @property + def entry_points(self): + return [DynamicEntryPoint(name, value, group) + for group, entry_points in self._entry_point_groups.items() + for name, value in entry_points.items()] + + def read_text(self, filename): # is abstract in importlib-metadata + raise NotImplementedError + + def locate_file(self, path): # is abstract in importlib-metadata + raise NotImplementedError + + +_DISTRIBUTION = DynamicRinohDistribution() + + +class DynamicDistributionFinder(ilm.DistributionFinder): + """Makes the dynamic rinohtype distribution discoverable""" + + @classmethod + def find_distributions(cls, context=ilm.DistributionFinder.Context()): + if context.name and context.name != 'rinohtype.dynamic': + return + yield _DISTRIBUTION + + @classmethod + def find_spec(cls, fullname, path=None, target=None): + return None + + +sys.meta_path.append(DynamicDistributionFinder) + + +from .font import Typeface +from .template import DocumentTemplate diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/strings.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/strings.py new file mode 100644 index 000000000..393fd24a4 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/strings.py @@ -0,0 +1,88 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from itertools import chain + +from .attribute import AcceptNoneAttributeType +from .text import StyledText, SingleStyledText, MixedStyledTextBase +from .util import NamedDescriptor, WithNamedDescriptors + + +__all__ = ['Strings', 'StringField'] + + +class Strings(AcceptNoneAttributeType): + """Stores several :class:`StringCollection`\\ s""" + + def __init__(self): + self.builtin = {} + self.user = {} + + def __setitem__(self, identifier, value): + symbol = identifier[0] + if symbol not in '@$': + raise ValueError("A string identifier need to start with @, for " + "builtin strings, or $ for user-defined strings") + key = identifier[1:] + if symbol == '@': + self.set_builtin_string(key, value) + else: + self.set_user_string(key, value) + + def set_builtin_string(self, key, value): + self.builtin[key] = value + + def set_user_string(self, key, value): + self.user[key] = value + + @classmethod + def doc_format(cls): + return "strings need to be entered in INI in a section named 'STRINGS'" + + +class StringField(MixedStyledTextBase): + """Styled text that will be substituted with a configured string + + The displayed string is either the localized string as determined by the + language set for the document or the user-supplied string passed to the + :class:`.TemplateConfiguration`. + + """ + def __init__(self, key, style=None, parent=None, source=None, user=False): + super().__init__(style=style, parent=parent, source=source) + self.key = key + self.user = user + + def __eq__(self, other): + return type(self) == type(other) and self.__dict__ == other.__dict__ + + def __str__(self): + result = "'{{{}{}}}'".format('$' if self.user else '@', self.key) + if self.style is not None: + result += ' ({})'.format(self.style) + return result + + def __repr__(self): + return ("{}({!r}, style={})" + .format(type(self).__name__, self.key, self.style)) + + @classmethod + def parse_string(cls, string, style=None): + return cls(string[1:], style=style, user=string[0] == '$') + + def copy(self, parent=None): + return type(self)(self.key, style=self.style, parent=parent, + source=self.source, user=self.user) + + def children(self, container): + text = container.document.get_string(self.key, self.user) + if isinstance(text, StyledText): + text.parent = self + yield text + else: + yield SingleStyledText(text, parent=self) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/structure.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/structure.py new file mode 100644 index 000000000..e1e677f82 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/structure.py @@ -0,0 +1,448 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from contextlib import suppress +from itertools import chain, takewhile + +from .attribute import Attribute, Bool, Integer, OverrideDefault +from .draw import Line, LineStyle +from .element import create_destination +from .flowable import GroupedFlowables, StaticGroupedFlowables, WarnFlowable +from .flowable import LabeledFlowable, GroupedLabeledFlowables +from .flowable import Flowable, FlowableStyle, GroupedFlowablesStyle +from .layout import PageBreakException +from .number import NumberStyle, Label, LabelStyle, format_number +from .paragraph import (ParagraphBase, StaticParagraph, Paragraph, + ParagraphStyle) +from .reference import (ReferenceField, ReferencingParagraph, + ReferencingParagraphStyle) +from .text import StyledText, SingleStyledText, MixedStyledText, Tab +from .strings import StringField +from .util import NotImplementedAttribute, itemcount + +__all__ = ['Section', 'Heading', + 'ListStyle', 'List', 'ListItem', 'ListItemLabel', 'DefinitionList', + 'Header', 'Footer', + 'TableOfContentsSection', 'TableOfContentsStyle', 'TableOfContents', + 'ListOfStyle', + 'TableOfContentsEntry', 'Admonition', 'AdmonitionStyle', + 'AdmonitionTitleParagraph', + 'HorizontalRule', 'HorizontalRuleStyle', 'OutOfLineFlowables'] + + +class SectionStyle(GroupedFlowablesStyle): + show_in_toc = Attribute(Bool, True, 'List this section in the table of ' + 'contents') + + +class NewChapterException(PageBreakException): + pass + + +class SectionBase(GroupedFlowables): + style_class = SectionStyle + break_exception = NewChapterException + + @property + def category(self): + return 'chapter' if self.level == 1 else 'section' + + @property + def level(self): + try: + return self.parent.level + 1 + except AttributeError: + return 1 + + @property + def section(self): + return self + + def show_in_toc(self, container): + parent_show_in_toc = (self.parent is None + or self.parent.section is None + or self.parent.section.show_in_toc(container)) + return (self.get_style('show_in_toc', container) + and not self.is_hidden(container) + and parent_show_in_toc) + + def create_destination(self, container, at_top_of_container=False): + pass # destination is set by the section's Heading + + +class Section(StaticGroupedFlowables, SectionBase): + """A subdivision of a document + + A section usually has a heading associated with it, which is optionally + numbered. + + """ + + +class HeadingStyle(ParagraphStyle): + keep_with_next = OverrideDefault(True) + numbering_level = OverrideDefault(-1) + + +class Heading(StaticParagraph): + """The title for a section + + Args: + content (StyledText): this heading's text + + """ + + style_class = HeadingStyle + has_title = True + + @property + def referenceable(self): + return self.section + + def prepare(self, container): + super().prepare(container) + container.document._sections.append(self.section) + + def flow(self, container, last_descender, state=None, **kwargs): + if self.level == 1 and container.page.chapter_title: + container.page.create_chapter_title(self) + result = 0, 0, None + else: + result = super().flow(container, last_descender, state, **kwargs) + return result + + def flow_inner(self, container, descender, state=None, **kwargs): + result = super().flow_inner(container, descender, state=state, **kwargs) + if not state.initial: + create_destination(self.section, container, True) + return result + + +class ListStyle(GroupedFlowablesStyle, NumberStyle): + ordered = Attribute(Bool, False, 'This list is ordered or unordered') + bullet = Attribute(StyledText, SingleStyledText('\N{BULLET}'), + 'Bullet to use in unordered lists') + + +class List(GroupedLabeledFlowables, StaticGroupedFlowables): + style_class = ListStyle + + def __init__(self, list_items, start_index=1, + id=None, style=None, parent=None): + super().__init__(list_items, id=id, style=style, parent=parent) + self.start_index = start_index + + def index(self, item, container): + items = filter(lambda itm: not itm.label.get_style('hide', container), + takewhile(lambda li: li != item, self.children)) + return self.start_index + itemcount(items) + + +class ListItem(LabeledFlowable): + def __init__(self, flowable, id=None, style=None, parent=None): + label = ListItemLabel() + super().__init__(label, flowable, id=id, style=style, parent=parent) + + +class ListItemLabelStyle(ParagraphStyle, LabelStyle): + number_separator = OverrideDefault(None) + + +class ListItemLabel(ParagraphBase, Label): + style_class = ListItemLabelStyle + + def text(self, container): + label = self._label(container) + return MixedStyledText(self.format_label(label, container), parent=self) + + def _label(self, container): + list_item = self.parent + list = list_item.parent + if list.get_style('ordered', container): + number_format = list.get_style('number_format', container) + separator = self.get_style('number_separator', container) + index = list.index(list_item, container) + label = format_number(index, number_format) + if separator is not None: + parent_list_item = None + parent = list.parent + while parent: + if isinstance(parent, ListItem): + parent_list_item = parent + break + parent = parent.parent + if parent_list_item: + parent_label = parent_list_item.label._label(container) + separator_string = separator.to_string(container) + label = parent_label + separator_string + label + else: + label = list.get_style('bullet', container) + return label + + + +class DefinitionList(GroupedLabeledFlowables, StaticGroupedFlowables): + pass + + +class Header(StaticParagraph): + pass + + +class Footer(StaticParagraph): + pass + + +class TableOfContentsStyle(GroupedFlowablesStyle, ParagraphStyle): + depth = Attribute(Integer, 3, 'The number of section levels to include in ' + 'the table of contents') + + def __init__(self, base=None, **attributes): + super().__init__(base=base, **attributes) + + +class TableOfContentsSection(Section): + def __init__(self): + section_title = StringField('contents') + super().__init__([Heading(section_title, style='unnumbered'), + TableOfContents()], + style='table of contents') + + def __repr__(self): + return '{}()'.format(type(self).__name__) + + def get_id(self, document, create=True): + try: + return document.metadata['toc_ids'][0] + except KeyError: + return super().get_id(document, create) + + def get_ids(self, document): + yield self.get_id(document) + yield from document.metadata.get('toc_ids', [])[1:] + + +class TableOfContents(GroupedFlowables): + style_class = TableOfContentsStyle + location = 'table of contents' + + def __init__(self, local=False, id=None, style=None, parent=None): + super().__init__(id=id, style=style, parent=parent) + self.local = local + self.source = self + + def __repr__(self): + args = ''.join(', {}={}'.format(name, repr(getattr(self, name))) + for name in ('id', 'style') + if getattr(self, name) is not None) + return '{}(local={}{})'.format(type(self).__name__, self.local, args) + + def flowables(self, container): + def limit_items(items, section): + while next(items) is not section: # fast-forward `items` to the + pass # first sub-section of `section` + for item in items: + if item.level <= section.level: + break + yield item + + depth = self.get_style('depth', container) + if self.local and self.section: + depth += self.level - 1 + items = (section for section in container.document._sections + if section.show_in_toc(container) and section.level <= depth) + if self.local and self.section: + items = limit_items(items, self.section) + for section in items: + yield TableOfContentsEntry(section, parent=self) + + +class TableOfContentsEntryStyle(ReferencingParagraphStyle): + text = OverrideDefault(ReferenceField('number') + + Tab() + ReferenceField('title') + + Tab() + ReferenceField('page')) + + +class TableOfContentsEntry(ReferencingParagraph): + style_class = TableOfContentsEntryStyle + + def __init__(self, flowable, id=None, style=None, parent=None): + super().__init__(flowable, id=id, style=style, parent=parent) + + @property + def depth(self): + return self.target_id_or_flowable.level + + +class ListOfSection(Section): + list_class = NotImplementedAttribute() + + def __init__(self): + key = 'list_of_{}s'.format(self.list_class.category.lower()) + section_title = StringField(key) + self.list_of = self.list_class() + super().__init__([Heading(section_title, style='unnumbered'), + self.list_of], + style='list of {}'.format(self.category)) + + def __repr__(self): + return '{}()'.format(type(self).__name__) + + def is_hidden(self, container): + return (super().is_hidden(container) + or self.list_of.is_hidden(container)) + + +class ListOfStyle(GroupedFlowablesStyle, ParagraphStyle): + pass + + +class ListOf(GroupedFlowables): + category = NotImplementedAttribute() + style_class = ListOfStyle + + def __init__(self, local=False, id=None, style=None, parent=None): + super().__init__(id=id, style=style, parent=parent) + self.local = local + self.source = self + + def __repr__(self): + args = ''.join(', {}={}'.format(name, repr(getattr(self, name))) + for name in ('id', 'style') + if getattr(self, name) is not None) + return '{}(local={}{})'.format(type(self).__name__, self.local, args) + + @property + def location(self): + return 'List of {}s'.format(self.category) + + def is_hidden(self, container): + try: + next(self.flowables(container)) + except StopIteration: + return True + return False + + def flowables(self, container): + document = container.document + category_counters = document.counters.get(self.category, {}) + + def limit_items(items, section): + for item in items: # fast-forward `items` to the + if item.section is section: # first sub-section of `section` + yield item + break + for item in items: + if not (item.section.level > section.level + or item.section is section): + break + yield item + + def items_in_section(section): + section_id = (section.get_id(document, create=False) + if section else None) + yield from category_counters.get(section_id, []) + + items = chain(items_in_section(None), + *(items_in_section(section) + for section in document._sections)) + + if self.local and self.section: + items = limit_items(items, self.section) + for caption in items: + yield ListOfEntry(caption.referenceable, parent=self) + + +class ListOfEntryStyle(ReferencingParagraphStyle): + text = OverrideDefault(ReferenceField('reference') + + ': ' + ReferenceField('title') + + Tab() + ReferenceField('page')) + + +class ListOfEntry(ReferencingParagraph): + style_class = ListOfEntryStyle + + +class AdmonitionStyle(GroupedFlowablesStyle): + inline_title = Attribute(Bool, True, "Show the admonition's title inline " + "with the body text, if possible") + + +class Admonition(StaticGroupedFlowables): + style_class = AdmonitionStyle + + def __init__(self, flowables, title=None, type=None, + id=None, style=None, parent=None): + super().__init__(flowables, id=id, style=style, parent=parent) + self.custom_title = title + self.admonition_type = type + + @property + def custom_title_text(self): + return self.custom_title.to_string(None) if self.custom_title else None + + def title(self, document): + return self.custom_title or document.get_string(self.admonition_type) + + def flowables(self, container): + title = self.title(container.document) + with suppress(AttributeError): + title = title.copy() + flowables = super().flowables(container) + first_flowable = next(flowables) + inline_title = self.get_style('inline_title', container) + if inline_title and isinstance(first_flowable, Paragraph): + title = MixedStyledText(title, style='inline title') + kwargs = dict(id=first_flowable.id, style=first_flowable.style, + source=first_flowable.source, parent=self) + title_plus_content = title + first_flowable.content + paragraph = AdmonitionTitleParagraph(title_plus_content, **kwargs) + paragraph.secondary_ids = first_flowable.secondary_ids + yield paragraph + else: + yield Paragraph(title, style='title', parent=self) + yield first_flowable + yield from flowables + + +class AdmonitionTitleParagraph(Paragraph): + pass + + +class HorizontalRuleStyle(FlowableStyle, LineStyle): + pass + + +class HorizontalRule(Flowable): + style_class = HorizontalRuleStyle + + def render(self, container, descender, state, **kwargs): + width = float(container.width) + line = Line((0, 0), (width, 0), parent=self) + line.render(container) + return width, 0, 0 + + +class OutOfLineFlowables(GroupedFlowables): + def __init__(self, name, align=None, width=None, id=None, style=None, + parent=None): + super().__init__(align=align, width=width, id=id, style=style, + parent=parent) + self.name = name + + def prepare(self, container): + with suppress(KeyError): + for flowable in container.document.supporting_matter[self.name]: + flowable.parent = self + + def flowables(self, container): + try: + yield from container.document.supporting_matter[self.name] + except KeyError: + yield WarnFlowable("No out-of-line content is registered for " + f"'{self.name}'", self) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/style.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/style.py new file mode 100644 index 000000000..fd2bba5be --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/style.py @@ -0,0 +1,1138 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +""" +Base classes and exceptions for styled document elements. + +* :class:`Style`: Dictionary storing a set of style attributes +* :class:`Styled`: A styled entity, having a :class:`Style` associated with it +* :class:`StyleStore`: Dictionary storing a set of related `Style`s by name +* :const:`PARENT_STYLE`: Special style that forwards style lookups to the parent + :class:`Styled` +* :exc:`ParentStyleException`: Thrown when style attribute lookup needs to be + delegated to the parent :class:`Styled` +""" + + +import string + +from ast import literal_eval +from collections import OrderedDict, namedtuple +from contextlib import suppress +from itertools import chain +from pathlib import Path + +from .attribute import (WithAttributes, AttributesDictionary, + RuleSet, RuleSetFile, Configurable, + DefaultValueException, Attribute, Bool) +from .element import DocumentElement +from .resource import Resource, ResourceNotFound +from .util import (cached, all_subclasses, NotImplementedAttribute, + class_property) +from .warnings import warn + + +__all__ = ['Style', 'Styled', 'StyledMeta', + 'StyledMatcher', 'StyleSheet', 'StyleSheetFile', + 'ClassSelector', 'ContextSelector', 'PARENT_STYLE'] + + +class StyleMeta(WithAttributes): + def __new__(mcls, classname, bases, cls_dict): + if '__doc__' not in cls_dict: + styled_class_name = classname.replace('Style', '') + cls_dict['__doc__'] = ('Style class for :class:`.{}`' + .format(styled_class_name)) + return super().__new__(mcls, classname, bases, cls_dict) + + +class Style(AttributesDictionary, metaclass=StyleMeta): + """Dictionary storing style attributes. + + The style attributes associated with this :class:`Style` are specified as + class attributes of type :class:`Attribute`. + + Style attributes can also be accessed as object attributes. + + """ + + hide = Attribute(Bool, False, 'Suppress rendering this element') + + def __init__(self, base=None, **attributes): + """Style attributes are as passed as keyword arguments. Supported + attributes are the :class:`Attribute` class attributes of this style + class and those defined in style classes this one inherits from. + + Optionally, a `base` (:class:`Style`) is passed, where attributes are + looked up when they have not been specified in this style. + Alternatively, if `base` is :class:`PARENT_STYLE`, the attribute lookup + is forwarded to the parent of the element the lookup originates from. + If `base` is a :class:`str`, it is used to look up the base style in + the :class:`StyleSheet` this style is defined in.""" + super().__init__(base, **attributes) + self.name = None + + def __repr__(self): + """Return a textual representation of this style.""" + return '{0}({1}) > {2}'.format(self.__class__.__name__, self.name or '', + self.base) + + def __copy__(self): + copy = self.__class__(base=self.base, **self) + if self.name is not None: + copy.name = self.name + ' (copy)' + return copy + + def __getattr__(self, attribute): + if attribute in self._supported_attributes: + return self[attribute] + else: + return super().__getattr__(attribute) + + @classmethod + def get_ruleset(self, document): + return document.stylesheet + + +class ExceptionalStyle(Style): + """Style that raises an exception on item access""" + + string = None + exception = NotImplementedError + + def __str__(self): + return self.string + + def __getitem__(self, item): + raise self.exception + + +class ParentStyleException(Exception): + pass + + +class ParentStyle(ExceptionalStyle): + """Style that forwards attribute lookups to the parent of the + :class:`Styled` from which the lookup originates.""" + + string = 'PARENT_STYLE' + exception = ParentStyleException + + +class NextMatchException(Exception): + pass + + +class NextStyle(ExceptionalStyle): + """Style that forwards attribute lookups to the next style in the style + sheet that matches the :class:`Styled` from which the lookup originates.""" + + string = 'NEXT_STYLE' + exception = NextMatchException + + +PARENT_STYLE = ParentStyle() +NEXT_STYLE = NextStyle() + + +EXCEPTIONAL_STYLES = {PARENT_STYLE.string: PARENT_STYLE, + NEXT_STYLE.string: NEXT_STYLE} + + +class Selector(object): + cls = NotImplementedAttribute + + def __truediv__(self, other): + try: + selectors = self.selectors + other.selectors + except AttributeError: + if isinstance(other, str): + selectors = self.selectors + (SelectorByName(other), ) + else: + assert other == Ellipsis + selectors = self.selectors + (EllipsisSelector(), ) + return ContextSelector(*selectors) + + def __rtruediv__(self, other): + assert isinstance(other, str) + return SelectorByName(other) / self + + def __pos__(self): + return self.pri(1) + + def __neg__(self): + return self.pri(-1) + + def __eq__(self, other): + return type(self) == type(other) and self.__dict__ == other.__dict__ + + def pri(self, priority): + return SelectorWithPriority(self, priority) + + def get_styled_class(self, stylesheet_or_matcher): + raise NotImplementedError + + def get_style_name(self, matcher): + raise NotImplementedError + + @property + def referenced_selectors(self): + raise NotImplementedError + + def flatten(self, stylesheet): + raise NotImplementedError + + def match(self, styled, stylesheet, document): + raise NotImplementedError + + +class SelectorWithPriority(Selector): + def __init__(self, selector, priority): + self.selector = selector + self.priority = priority + + def pri(self, priority): + return SelectorWithPriority(self.selector, self.priority + priority) + + def get_styled_class(self, stylesheet_or_matcher): + return self.selector.get_styled_class(stylesheet_or_matcher) + + def get_style_name(self, matcher): + return self.selector.get_style_name(matcher) + + @property + def selectors(self): + return (self, ) + + @property + def referenced_selectors(self): + return self.selector.referenced_selectors + + def flatten(self, stylesheet): + flattened_selector = self.selector.flatten(stylesheet) + return flattened_selector.pri(self.priority) + + def match(self, styled, stylesheet, document): + score = self.selector.match(styled, stylesheet, document) + if score: + score = Specificity(self.priority, 0, 0, 0, 0) + score + return score + + +class EllipsisSelector(Selector): + @property + def selectors(self): + return (self, ) + + @property + def referenced_selectors(self): + return + yield + + def flatten(self, stylesheet): + return self + + +class SingleSelector(Selector): + @property + def selectors(self): + return (self, ) + + +class SelectorByName(SingleSelector): + def __init__(self, name): + self.name = name + + @property + def referenced_selectors(self): + yield self.name + + def flatten(self, stylesheet): + return stylesheet.get_selector(self.name) + + def get_styled_class(self, stylesheet_or_matcher): + selector = stylesheet_or_matcher.get_selector(self.name) + return selector.get_styled_class(stylesheet_or_matcher) + + def get_style_name(self, matcher): + selector = matcher.by_name[self.name] + return selector.get_style_name(matcher) + + def match(self, styled, stylesheet, document): + selector = stylesheet.get_selector(self.name) + return selector.match(styled, stylesheet, document) + + +class ClassSelectorBase(SingleSelector): + def get_styled_class(self, stylesheet_or_matcher): + return self.cls + + @property + def referenced_selectors(self): + return + yield + + def flatten(self, stylesheet): + return self + + def get_style_name(self, matcher): + return self.style_name + + def match(self, styled, stylesheet, document): + if not isinstance(styled, self.cls): + return None + class_match = 2 if type(styled) == self.cls else 1 + + style_match = 0 + if self.style_name is not None: + if styled.style != self.style_name: + return None + style_match = 1 + + attributes_match = 0 + for attr, value in self.attributes.items(): + if not hasattr(styled, attr): + return None + attr = getattr(styled, attr) + if callable(attr): + attr = attr(document) + if attr != value: + return None + attributes_match += 1 + + return Specificity(0, 0, style_match, attributes_match, class_match) + + +class ClassSelector(ClassSelectorBase): + def __init__(self, cls, style_name=None, **attributes): + super().__init__() + self.cls = cls + self.style_name = style_name + self.attributes = attributes + + +class ContextSelector(Selector): + def __init__(self, *selectors): + super().__init__() + self.selectors = selectors + + @property + def referenced_selectors(self): + for selector in self.selectors: + for name in selector.referenced_selectors: + yield name + + def flatten(self, stylesheet): + return type(self)(*(child_selector for selector in self.selectors + for child_selector + in selector.flatten(stylesheet).selectors)) + + def get_styled_class(self, stylesheet_or_matcher): + return self.selectors[-1].get_styled_class(stylesheet_or_matcher) + + def get_style_name(self, matcher): + return self.selectors[-1].get_style_name(matcher) + + def match(self, styled, stylesheet, document): + def styled_and_parents(element): + while element is not None: + yield element + element = element.parent + raise NoMoreParentElement + + total_score = ZERO_SPECIFICITY + selectors = reversed(self.selectors) + elements = styled_and_parents(styled) + for selector in selectors: + try: + element = next(elements) # NoMoreParentElement + if isinstance(selector, EllipsisSelector): + selector = next(selectors) # StopIteration + while not selector.match(element, stylesheet, document): + element = next(elements) # NoMoreParentElement + except NoMoreParentElement: + return None + except StopIteration: + break + score = selector.match(element, stylesheet, document) + if not score: + return None + total_score += score + return total_score + + +class NoMoreParentElement(Exception): + """The top-level element in the document element tree has been reached""" + + +class DocumentLocationType(type): + def __gt__(cls, selector): + return DocumentLocationSelector(cls, selector) + + def match(self, styled, container): + raise NotImplementedError + + +class DocumentLocationSelector(object): + def __init__(self, location_class, selector): + self.location_class = location_class + self.selector = selector + + @property + def referenced_selectors(self): + return + yield + + def get_styled_class(self, matcher): + return self.selector.get_styled_class(matcher) + + def get_style_name(self, matcher): + return self.selector.get_style_name(matcher) + + def match(self, styled, stylesheet): + location_match = self.location_class.match(styled, stylesheet) + if location_match: + match = self.selector.match(styled, stylesheet) + if match: + return location_match + match + return None + + +class StyledMeta(type, ClassSelectorBase): + attributes = {} + style_name = None + + def __hash__(self): + return hash(id(self)) + + @property + def cls(cls): + return cls + + def like(cls, style_name=None, **attributes): + return ClassSelector(cls, style_name, **attributes) + + +class Styled(DocumentElement, Configurable, metaclass=StyledMeta): + """A document element who's style can be configured. + + Args: + style (str, Style): the style to associate with this element. If + `style` is a string, the corresponding style is lookup up in the + document's style sheet by means of selectors. + + """ + + @class_property + def configuration_class(cls): + return cls.style_class + + style_class = None + """The :class:`Style` subclass that corresponds to this :class:`Styled` + subclass.""" + + def __init__(self, id=None, style=None, parent=None, source=None): + """Associates `style` with this element. If `style` is `None`, an empty + :class:`Style` is create, effectively using the defaults defined for the + associated :class:`Style` class). + A `parent` can be passed on object initialization, or later by + assignment to the `parent` attribute.""" + super().__init__(id=id, parent=parent, source=source) + if (isinstance(style, Style) + and not isinstance(style, (self.style_class, ParentStyle))): + raise TypeError('the style passed to {} should be of type {} ' + '(a {} was passed instead)' + .format(self.__class__.__name__, + self.style_class.__name__, + style.__class__.__name__)) + self.style = style + self.annotation = None + self.classes = [] + + def __eq__(self, other): + return type(self) == type(other) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not self == other + + def short_repr(self, flowable_target): + args = ', '.join(chain(self._short_repr_args(flowable_target), + self._short_repr_kwargs(flowable_target))) + return '{}({})'.format(type(self).__name__, args) + + def _short_repr_args(self, flowable_target): + return () + + def _short_repr_kwargs(self, flowable_target): + if self.id: + yield "id='{}'".format(self.id) + if isinstance(self.style, str): + yield "style='{}'".format(self.style) + elif isinstance(self.style, Style): + yield 'style={}'.format(type(self.style).__name__) + + SHORT_REPR_STRING_LENGTH = 32 + + def _short_repr_string(self, flowable_target): + text = self.to_string(flowable_target) + if len(text) > self.SHORT_REPR_STRING_LENGTH: + text = text[:self.SHORT_REPR_STRING_LENGTH] + '...' + return "'{}'".format(text).replace('\n', '\\n') + + @property + def path(self): + parent = self.parent.path + ' > ' if self.parent else '' + style = '[{}]'.format(self.style) if self.style else '' + return parent + self.__class__.__name__ + style + + @property + def nesting_level(self): + try: + return self.parent.nesting_level + 1 + except AttributeError: + return 0 + + def fallback_to_parent(self, attribute): + return isinstance(self.style, ParentStyle) + + def get_annotation(self, container): + return self.annotation + + @cached + def get_style(self, attribute, container): + return self.get_config_value(attribute, container.document) + + @property + def has_id(self): + """Filter selection on an ID of this :class:`Styled`""" + return HasID(self) + + @property + def has_class(self): + """Filter selection on a class of this :class:`Styled`""" + return HasClass(self) + + @property + def has_classes(self): + """Filter selection on a set of classes of this :class:`Styled`""" + return HasClasses(self) + + def before_placing(self, container, preallocate=False): + if self.parent: + self.parent.before_placing(container, preallocate) + + +class HasID(object): + def __init__(self, styled): + self.styled = styled + + def __eq__(self, id): + return id == self.styled.id or id in self.styled.secondary_ids + + +class HasClass(object): + def __init__(self, styled): + self.styled = styled + + def __eq__(self, class_name): + return class_name in self.styled.classes + + +class HasClasses(object): + def __init__(self, styled): + self.styled = styled + + def __eq__(self, class_names): + return set(class_names).issubset(self.styled.classes) + + +class InvalidStyledMatcher(Exception): + """The :class:`StyledMatcher` includes selectors which reference selectors + which are not defined.""" + + def __init__(self, missing_selectors): + self.missing_selectors = missing_selectors + + +class StyledMatcher(dict): + """Dictionary mapping labels to selectors. + + This matcher can be initialized in the same way as a :class:`python:dict` + by passing a mapping, an interable and/or keyword arguments. + + """ + + def __init__(self, mapping_or_iterable=None, **kwargs): + super().__init__() + self.by_name = OrderedDict() + self._pending = {} + self.update(mapping_or_iterable, **kwargs) + + def __call__(self, name, selector): + self[name] = selector + return SelectorByName(name) + + def __setitem__(self, name, selector): + assert name not in self + is_pending = False + for referenced_name in set(selector.referenced_selectors): + if referenced_name not in self.by_name: + pending_selectors = self._pending.setdefault(referenced_name, {}) + pending_selectors[name] = selector + is_pending = True + if not is_pending: + cls_selectors = self.setdefault(selector.get_styled_class(self), {}) + style_name = selector.get_style_name(self) + style_selectors = cls_selectors.setdefault(style_name, {}) + self.by_name[name] = style_selectors[name] = selector + self._process_pending(name) + + def _process_pending(self, newly_defined_name): + if newly_defined_name in self._pending: + self.update(self._pending.pop(newly_defined_name)) + + def get_selector(self, name): + return self.by_name[name] + + def check_validity(self): + if self._pending: + raise InvalidStyledMatcher(list(self._pending.keys())) + + def update(self, iterable=None, **kwargs): + for name, selector in dict(iterable or (), **kwargs).items(): + self[name] = selector + + def match(self, styled, stylesheet, document): + for cls in type(styled).__mro__: + if cls not in self: + continue + style_str = styled.style if isinstance(styled.style, str) else None + for style in set((style_str, None)): + for name, selector in self[cls].get(style, {}).items(): + selector = selector.flatten(stylesheet) + specificity = selector.match(styled, stylesheet, document) + if specificity: + yield Match(name, specificity) + + +class StyleSheet(RuleSet, Resource): + """Dictionary storing a collection of related styles by name. + + :class:`Style`\\ s stored in a :class:`StyleSheet` can refer to their base + style by name. + + Args: + name (str): a label for this style sheet + matcher (StyledMatcher): the matcher providing the selectors the styles + contained in this style sheet map to. If no matcher is given and + `base` is specified, the `base`\\ 's matcher is used. If `base` is + not set, the default matcher is used. + base (StyleSheet or str): the style sheet to extend + description (str): a short string describing this style sheet + pygments_style (str): the Pygments style to use for styling code blocks + + """ + + resource_type = 'stylesheet' + main_section = 'STYLESHEET' + extension = '.rts' + + def __init__(self, name, matcher=None, base=None, source=None, + description=None, pygments_style=None, **user_options): + from .highlight import pygments_style_to_stylesheet + from .stylesheets import matcher as default_matcher + + base = self.from_string(base, self) if isinstance(base, str) else base + if matcher is None: + matcher = default_matcher if base is None else StyledMatcher() + if matcher is not None: + matcher.check_validity() + if pygments_style: + base = pygments_style_to_stylesheet(pygments_style, base) + super().__init__(name, base=base, source=source) + self.description = description + self.matcher = matcher + if user_options: + warn('Unsupported options passed to stylesheet: {}' + .format(', '.join(user_options.keys()))) + self.user_options = user_options + + def __str__(self): + for name, entry_point in self.installed_resources: + if self is entry_point.load(): + return name + raise NotImplementedError + + @classmethod + def parse_string(cls, string, source): + with suppress(ResourceNotFound): + return super().parse_string(string, source) + return StyleSheetFile(string, source=source) + + @classmethod + def doc_repr(cls, value): + for name, ep in cls.installed_resources: + if value is ep.load(): + return ('``{}`` (= :data:`{}.{}`)' + .format(name, *ep.value.split(':'))) + raise NotImplementedError + + @classmethod + def doc_format(cls): + return ('the name of an :ref:`installed style sheet ` or the filename of a stylesheet file (with the ' + '``{}`` extension)'.format(cls.extension)) + + def _get_value_lookup(self, styled, attribute, document): + if isinstance(styled.style, Style) and attribute in styled.style: + return styled.style[attribute] + try: + for match in document.get_matches(styled): + if match.stylesheet: # style is defined + with suppress(NextMatchException): + return self.get_value(match.style_name, attribute) + raise DefaultValueException # no matching styles define attribute + except DefaultValueException: # fallback to default style + if not styled.fallback_to_parent(attribute): + raise + except ParentStyleException: # fallback to parent's style + pass + return self._get_value_lookup(styled.parent, attribute, document) + + def get_styled(self, name): + return self.get_selector(name).get_styled_class(self) + + def get_entry_class(self, name): + return self.get_styled(name).style_class + + def get_selector(self, name): + """Find a selector mapped to a style in this or a base style sheet. + + Args: + name (str): a style name + + Returns: + :class:`.Selector`: the selector mapped to the style `name` + + Raises: + KeyError: if the style `name` was not found in this or a base + style sheet + + """ + + try: + return self.matcher.by_name[name] + except (AttributeError, KeyError): + if self.base is not None: + return self.base.get_selector(name) + else: + raise KeyError("No selector found for style '{}'".format(name)) + + def find_matches(self, styled, document): + for match in self.matcher.match(styled, self, document): + yield match + if self.base is not None: + yield from self.base.find_matches(styled, document) + + def write(self, base_filename): + from configparser import ConfigParser + config = ConfigParser(interpolation=None) + config.add_section(self.main_section) + main = config[self.main_section] + main['name'] = self.name + main['description'] = self.description or '' + + config.add_section('VARIABLES') + variables = config['VARIABLES'] + for name, value in self.variables.items(): + variables[name] = str(value) + + for style_name, style in self.items(): + classifier = ('' if style_name in self.matcher.by_name + else ':' + type(style).__name__.replace('Style', '')) + config.add_section(style_name + classifier) + section = config[style_name + classifier] + section['base'] = str(style.base) + for name in type(style).supported_attributes: + try: + section[name] = str(style[name]) + except KeyError: # default + section[';' + name] = str(style._get_default(name)) + with open(base_filename + self.extension, 'w') as file: + config.write(file, space_around_delimiters=True) + print(';Undefined styles:', file=file) + for style_name, selector in self.matcher.by_name.items(): + if style_name in self: + continue + print(';[{}]'.format(style_name), file=file) + + +class StyleSheetFile(RuleSetFile, StyleSheet): + """Loads styles defined in a `.rts` file (INI format). + + Args: + filename (str): the path to the style sheet file + + :class:`StyleSheetFile` takes the same optional arguments as + :class:`StyleSheet`. These can also be specified in the ``[STYLESHEET]`` + section of the style sheet file. If an argument is specified in both + places, the one passed as an argument overrides the one specified in the + style sheet file. + + """ + + def process_section(self, style_name, selector, items): + if selector: + selector = parse_selector(selector) + styled_class = selector.get_styled_class(self) + if not isinstance(selector, StyledMeta): + self.matcher[style_name] = selector + try: + matcher_styled = self.get_styled(style_name) + if styled_class is not matcher_styled: + raise TypeError("The type '{}' specified for style " + "'{}' does not match the type '{}' " + "returned by the matcher. Note that " + "you do not have to specify the type " + "in this case!" + .format(selector.__name__, + style_name, + matcher_styled.__name__)) + except KeyError: + pass + style_cls = styled_class.style_class + else: + try: + style_cls = self.get_entry_class(style_name) + except KeyError: + warn("The style definition '{}' will be ignored since there" + " is no selector defined for it in the matcher." + .format(style_name)) + return + kwargs = dict(items) + base = kwargs.pop('base', None) + if base in EXCEPTIONAL_STYLES: + base = EXCEPTIONAL_STYLES[base] + self[style_name] = style_cls(base=base, **kwargs) + + +class StyleParseError(Exception): + pass + + +def parse_selector(string): + chars = CharIterator(string) + selectors = [] + while True: + eat_whitespace(chars) + first_char = chars.peek() + if first_char in ("'", '"'): + selector_name = parse_string(chars) + selector = SelectorByName(selector_name) + elif first_char == '.': + assert next(chars) + next(chars) + next(chars) == '...' + selector = EllipsisSelector() + else: + priority = 0 + while chars.peek() in '+-': + priority += 1 if next(chars) == '+' else -1 + selector = parse_class_selector(chars) + if priority != 0: + selector = selector.pri(priority) + selectors.append(selector) + eat_whitespace(chars) + try: + next(chars) == '/' + except StopIteration: + break + if len(selectors) == 1: + return selectors[0] + else: + return ContextSelector(*selectors) + + +def parse_class_selector(chars): + styled_chars = [] + eat_whitespace(chars) + while chars.peek() and chars.peek() in string.ascii_letters: + styled_chars.append(next(chars)) + has_args = chars.peek() == '(' + styled_name = ''.join(styled_chars) + for selector in all_subclasses(Styled): + if selector.__name__ == styled_name: + break + else: + raise TypeError("Invalid styled class '{}'".format(styled_name)) + if has_args: + args, kwargs = parse_selector_args(chars) + selector = selector.like(*args, **kwargs) + return selector + + +def parse_selector_args(chars): + args, kwargs = [], {} + if next(chars) != '(': + raise StyleParseError('Expecting an opening brace') + eat_whitespace(chars) + while chars.peek() not in (None, ')'): + argument, unknown_keyword = parse_value(chars) + eat_whitespace(chars) + if chars.peek() == '=': + next(chars) + keyword = argument + if not unknown_keyword: + raise StyleParseError("'{}' is not a valid keyword argument" + .format(keyword)) + eat_whitespace(chars) + argument, unknown_keyword = parse_value(chars) + kwargs[keyword] = argument + elif kwargs: + raise StyleParseError('Non-keyword argument cannot follow a ' + 'keyword argument') + else: + args.append(argument) + if unknown_keyword: + raise StyleParseError("Unknown keyword '{}'".format(argument)) + eat_whitespace(chars) + if chars.peek() == ',': + next(chars) + eat_whitespace(chars) + if chars.peek() is None or next(chars) != ')': + raise StyleParseError('Expecting a closing brace') + return args, kwargs + + +def eat_whitespace(chars): + while chars.peek() and chars.peek() in ' \t': + next(chars) + + +class CharIterator(str): + def __init__(self, string): + self.next_index = 0 + + def __iter__(self): + return self + + def __next__(self): + index = self.next_index + self.next_index += 1 + try: + return self[index] + except IndexError: + raise StopIteration + + def match(self, chars): + """Return all next characters that are listed in `chars` as a string""" + start_index = self.next_index + for char in self: + if char not in chars: + self.next_index -= 1 + break + return self[start_index:self.next_index] + + def peek(self): + try: + return self[self.next_index] + except IndexError: + return None + + +def parse_value(chars): + unknown_keyword = False + first_char = chars.peek() + if first_char in ("'", '"'): + value = parse_string(chars) + elif first_char.isnumeric() or first_char in '+-': + value = parse_number(chars) + else: + value, unknown_keyword = parse_keyword(chars) + return value, unknown_keyword + + +def parse_string(chars): + open_quote = next(chars) + assert open_quote in '"\'' + string_chars = [open_quote] + escape_next = False + for char in chars: + string_chars.append(char) + if char == '\\': + escape_next = True + continue + elif not escape_next and char == open_quote: + break + escape_next = False + else: + raise StyleParseError('Did not encounter a closing ' + 'quote while parsing string') + return literal_eval(''.join(string_chars)) + + +def parse_number(chars): + return literal_eval(chars.match('0123456789.e+-')) + + +def parse_keyword(chars): + keyword = chars.match(string.ascii_letters + string.digits + '_') + try: + return KEYWORDS[keyword.lower()], False + except KeyError: + return keyword, True + + +KEYWORDS = dict(true=True, false=False, none=None) + + +class Specificity(namedtuple('Specificity', + ['priority', 'location', 'style', 'attributes', + 'klass'])): + def __add__(self, other): + return self.__class__(*(a + b for a, b in zip(self, other))) + + def __bool__(self): + return any(self) + + +class Match(object): + def __init__(self, style_name, specificity): + self.style_name = style_name + self.specificity = specificity + self.stylesheet = None + + def __gt__(self, other): + return self.specificity > other.specificity + + def __bool__(self): + return bool(self.specificity) + + +ZERO_SPECIFICITY = Specificity(0, 0, 0, 0, 0) + +NO_MATCH = Match(None, ZERO_SPECIFICITY) + + +class StyleLogEntry(object): + def __init__(self, styled, container, matches, continued, + custom_message=None): + self.styled = styled + self.container = container + self.matches = matches + self.continued = continued + self.custom_message = custom_message + + @property + def page_number(self): + return self.container.page.formatted_number + + +class StyleLog(object): + def __init__(self, stylesheet): + self.stylesheet = stylesheet + self.entries = [] + + def log_styled(self, styled, container, continued, custom_message=None): + matches = container.document.get_matches(styled) + log_entry = StyleLogEntry(styled, container, matches, continued, + custom_message) + self.entries.append(log_entry) + + def log_out_of_line(self): + raise NotImplementedError + + def write_log(self, document_source_root, filename_root): + log_path = filename_root.parent / (filename_root.name + '.stylelog') + with log_path.open('w', encoding='utf-8') as log: + current_page = None + current_container = None + for entry in self.entries: + if entry.page_number != current_page: + current_page = entry.page_number + log.write('{line} page {} {line}\n'.format(current_page, + line='-' * 34)) + container = entry.container + if container.top_level_container is not current_container: + current_container = container.top_level_container + log.write("#### {}('{}')\n" + .format(type(current_container).__name__, + current_container.name)) + styled = entry.styled + level = styled.nesting_level + attrs = OrderedDict() + style = None + indent = ' ' * level + loc = '' + if styled.source: + try: + filename, line, tag_name = styled.source.location + except ValueError: + loc = f' {styled.source.location}' + else: + if filename: + try: + filename, extra = filename.split(':') + except ValueError: + extra = None + file_path = Path(filename) + if file_path.is_absolute(): + try: + file_path = file_path.relative_to( + document_source_root) + except ValueError: + pass + loc = f' {file_path}' + if line: + loc += f':{line}' + if extra: + loc += f' ({extra})' + if tag_name: + loc += f' <{tag_name}>' + continued_text = '(continued) ' if entry.continued else '' + log.write(' {}{}{}{}' + .format(indent, continued_text, + styled.short_repr(container), loc)) + if entry.custom_message: + log.write('\n {} ! {}\n'.format(indent, + entry.custom_message)) + continue + first = True + if style is not None: + first = False + style_attrs = ', '.join(key + '=' + value + for key, value in style.items()) + log.write('\n {} > {}({})' + .format(indent, attrs['style'], style_attrs)) + if entry: + for match in entry.matches: + base = '' + stylesheet = match.stylesheet + if stylesheet: + if first: + label = '>' + first = False + else: + label = ' ' + name = match.style_name + style = self.stylesheet.get_configuration(name) + base_name = ("DEFAULT" if style.base is None + else str(style.base)) + base = f' > {base_name}' + stylesheet_path = Path(stylesheet) + if stylesheet_path.is_absolute(): + stylesheet = stylesheet_path.relative_to( + document_source_root) + else: + label = 'x' + specificity = ','.join(str(score) + for score in match.specificity) + + log.write('\n {} {} ({}) {}{}{}' + .format(indent, label, specificity, + match.style_name, + f' [{stylesheet}]' if stylesheet + else '', base)) + log.write('\n') diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/styleds.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/styleds.py new file mode 100644 index 000000000..ae6f77488 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/styleds.py @@ -0,0 +1,39 @@ + +from .text import Box +from .text import Character +from .text import CharacterLike +from .text import ControlCharacter, Newline, Tab +from .text import StyledText, SingleStyledText, MixedStyledText +from .text import ConditionalMixedStyledText +from .text import Space, FixedWidthSpace, NoBreakSpace, Spacer +from .text import Subscript, Superscript +from .draw import Line, Shape, Polygon, Rectangle +from .image import Figure, Caption +from .image import ListOfFiguresSection, ListOfFigures +from .image import Image, InlineImage +from .flowable import Flowable, Float +from .flowable import GroupedFlowables, StaticGroupedFlowables +from .flowable import LabeledFlowable, GroupedLabeledFlowables +from .flowable import DummyFlowable, AnchorFlowable, WarnFlowable +from .flowable import SetMetadataFlowable, SetOutOfLineFlowables +from .highlight import CodeBlock, CodeBlockWithCaption, Token +from .index import IndexSection, Index, IndexLabel, IndexEntry +from .index import InlineIndexTarget, IndexTarget +from .inline import InlineFlowable +from .paragraph import ParagraphBase, Paragraph +from .reference import ReferenceBase, Reference, DirectReference +from .reference import ReferenceField, ReferenceText, ReferencingParagraph +from .reference import Field +from .reference import Note +from .reference import NoteMarkerBase, NoteMarkerByID, NoteMarkerWithNote +from .structure import Header, Footer +from .structure import HorizontalRule +from .structure import List, ListItem, ListItemLabel, DefinitionList +from .structure import Section, TableOfContentsSection, Heading +from .structure import ListOfEntry +from .structure import Admonition, AdmonitionTitleParagraph +from .structure import TableOfContents, TableOfContentsEntry +from .structure import OutOfLineFlowables +from .table import TableWithCaption, Table, TableSection, TableHead, TableBody +from .table import TableRow, TableCell, TableCellBackground, TableCellBorder +from .table import ListOfTables, ListOfTablesSection diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/styles.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/styles.py new file mode 100644 index 000000000..c93d1b237 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/styles.py @@ -0,0 +1,15 @@ + +from .draw import LineStyle, ShapeStyle +from .flowable import FlowableStyle, GroupedFlowablesStyle +from .flowable import LabeledFlowableStyle +from .number import LabelStyle +from .number import NumberStyle +from .paragraph import ParagraphStyle +from .reference import NoteMarkerStyle +from .structure import HeadingStyle +from .structure import HorizontalRuleStyle +from .structure import ListStyle +from .structure import TableOfContentsStyle +from .table import TableStyle, TableCellStyle +from .table import TableCellBorderStyle, TableCellBackgroundStyle +from .text import TextStyle diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/__init__.py new file mode 100644 index 000000000..11e5f73e6 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/__init__.py @@ -0,0 +1,44 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import inspect +import os +import sys + +from .. import DATA_PATH +from ..style import StyleSheetFile + +from .matcher import matcher + + +__all__ = ['matcher', 'sphinx', 'sphinx_base14'] + + +STYLESHEETS_PATH = os.path.join(DATA_PATH, 'stylesheets') + + +def path(filename): + return os.path.join(STYLESHEETS_PATH, filename) + + +sphinx = StyleSheetFile(path('sphinx.rts')) + +sphinx_article = StyleSheetFile(path('sphinx_article.rts')) + +sphinx_base14 = StyleSheetFile(path('base14.rts')) + +sphinx_article_base14 = StyleSheetFile(path('article_base14.rts')) + + +# generate docstrings for the StyleSheet instances + +for name, stylesheet in inspect.getmembers(sys.modules[__name__]): + if not isinstance(stylesheet, StyleSheetFile): + continue + stylesheet.__doc__ = ('{}\n\nEntry point name: ``{}``' + .format(stylesheet.description, stylesheet)) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..c657e1aaa Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/__pycache__/matcher.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/__pycache__/matcher.cpython-312.pyc new file mode 100644 index 000000000..93edeccdb Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/__pycache__/matcher.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/matcher.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/matcher.py new file mode 100644 index 000000000..e9adc873b --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/stylesheets/matcher.py @@ -0,0 +1,423 @@ +from rinoh.document import DocumentTree +from rinoh.style import StyledMatcher, SelectorByName +from rinoh.styleds import * + + +__all__ = ['matcher'] + + +matcher = StyledMatcher({ + + # title page items + + 'title page rule': HorizontalRule.like('title page rule'), + 'title page logo': Image.like('title page logo'), + 'title page title': Paragraph.like('title page title'), + 'title page subtitle': Paragraph.like('title page subtitle'), + 'title page author': Paragraph.like('title page author'), + 'title page date': Paragraph.like('title page date'), + 'title page extra': Paragraph.like('title page extra'), + + # chapter titles + + 'front matter section title': Paragraph.like('front matter section title'), + 'body matter chapter label': Paragraph.like('body matter chapter label'), + 'body matter chapter number': SelectorByName('body matter chapter label') + / ... / StyledText.like('number'), + 'body matter chapter title': Paragraph.like('body matter chapter title'), + + # inline text + + 'fallback': StyledText.like('_fallback_'), + 'italic': StyledText.like('italic'), + 'bold': StyledText.like('bold'), + 'monospaced': StyledText.like('monospaced'), + 'emphasis': StyledText.like('emphasis'), + 'strong': StyledText.like('strong'), + 'literal emphasis': StyledText.like('literal emphasis'), + 'literal strong': StyledText.like('literal strong'), + 'inline math': StyledText.like('math'), + + 'inline definition': StyledText.like('definition'), + 'quote': StyledText.like('quote'), + 'file path': StyledText.like('file path'), + 'keystrokes': StyledText.like('keystrokes'), + 'regular expression': StyledText.like('regular expression'), + 'code with variable': StyledText.like('code with variable'), + 'mail header': StyledText.like('mail header'), + 'MIME type': StyledText.like('MIME type'), + 'newsgroup': StyledText.like('newsgroup'), + 'command': StyledText.like('command'), + 'make variable': StyledText.like('make variable'), + 'program': StyledText.like('program'), + 'man page': StyledText.like('man page'), + 'window title': StyledText.like('window title'), + 'UI control': StyledText.like('UI control'), + 'UI control accelerator': SelectorByName('UI control') / ... + / StyledText.like('accelerator'), + 'menu cascade': StyledText.like('menu cascade'), + 'draft comment': StyledText.like('draft comment'), + 'title reference': StyledText.like('title reference'), + 'error': StyledText.like('error'), + +}) + +matcher('linked reference', ReferenceBase) +matcher('external hyperlink', StyledText.like('external link')) +matcher('broken hyperlink', StyledText.like('broken link')) + +matcher('glossary inline definition', + StyledText.like('glossary inline definition')) + +# paragraphs + +matcher('body', Paragraph) +matcher('code block', +CodeBlock) +matcher('code block caption', CodeBlockWithCaption / Caption) +matcher('math block', Paragraph.like('math')) +matcher('graphviz code block', Paragraph.like('graphviz')) +matcher('attribution', Paragraph.like('attribution')) +matcher('centered', Paragraph.like('centered')) +matcher('line block', Paragraph.like('line block')) + +matcher('block quote', GroupedFlowables.like('block quote')) + + +# + +matcher('chapter', Section.like(level=1)) +matcher('content chapter', DocumentTree / ... / Section.like(level=1)) + +for i in range(1, 6): + matcher('heading level {}'.format(i), Heading.like(level=i)) + matcher('heading level {} label'.format(i), + Heading.like(level=i) / ... / StyledText.like('label')) + matcher('unnumbered heading level {}'.format(i), + Heading.like('unnumbered', level=i)) +matcher('other heading levels', Heading) + +matcher('appendix', Section.like('appendix')) +for i in range(1, 6): + matcher('appendix heading level {}'.format(i), + 'appendix' / Heading.like(level=i)) + +matcher('title', Paragraph.like('title')) + +matcher('prerequisites', GroupedFlowables.like('prerequisites')) +matcher('prerequisites title', 'prerequisites' / Paragraph.like('title')) + +matcher('post requirement', GroupedFlowables.like('post requirement')) + +matcher('abstract', GroupedFlowables.like('abstract')) +matcher('abstract paragraph', 'abstract' / Paragraph) + +matcher('example', GroupedFlowables.like('example')) +matcher('example title', 'example' / Paragraph.like('title')) + +matcher('topic', GroupedFlowables.like('topic')) +matcher('topic title', 'topic' / Paragraph.like('title')) + +matcher('rubric', Paragraph.like('rubric')) + +matcher('sidebar', GroupedFlowables.like('sidebar')) +matcher('sidebar title', 'sidebar' / Paragraph.like('title')) +matcher('sidebar subtitle', 'sidebar' / Paragraph.like('subtitle')) + + +# lists + +matcher('list item label', ListItemLabel) +matcher('list item body', ListItem / GroupedFlowables) +matcher('list item paragraph', 'list item body' / Paragraph) + +matcher('enumerated list', List.like('enumerated')) +matcher('enumerated list item', 'enumerated list' / ListItem) +matcher('enumerated list item label', 'enumerated list item' / ListItemLabel) +matcher('nested enumerated list', SelectorByName('list item body') + / 'enumerated list') + +matcher('(table) enumerated list', TableCell / ... / 'enumerated list') +matcher('(table) enumerated list item', '(table) enumerated list' / ListItem) +matcher('(table) enumerated list item label', '(table) enumerated list item' + / ListItemLabel) + +matcher('bulleted list', List.like('bulleted')) +matcher('compact bulleted list', List.like('bulleted', compact=True)) +matcher('bulleted list item', 'bulleted list' / ListItem) +matcher('bulleted list item label', 'bulleted list item' / ListItemLabel) +matcher('nested bulleted list', SelectorByName('list item body') + / 'bulleted list') + +matcher('(table) bulleted list', TableCell / ... / 'bulleted list') +matcher('(table) bulleted list item', '(table) bulleted list' / ListItem) +matcher('(table) bulleted list item label', '(table) bulleted list item' + / ListItemLabel) + +matcher('steps list', List.like('steps')) +matcher('steps list title', 'steps list' / Paragraph.like('title')) +matcher('steps list item', 'steps list' / ListItem) +matcher('steps list item label', 'steps list item' / ListItemLabel) + +matcher('unordered steps list', List.like('unordered steps')) +matcher('unordered steps list title', 'unordered steps list' + / Paragraph.like('title')) +matcher('unordered steps list item', 'unordered steps list' / ListItem) +matcher('unordered steps list item label', 'unordered steps list item' + / ListItemLabel) + +matcher('choices list', List.like('choices')) +matcher('choices list item', 'choices list' / ListItem) +matcher('choices list item label', 'choices list item' / ListItemLabel) + +matcher('definition list', DefinitionList) +matcher('definition list item', 'definition list' / LabeledFlowable) +matcher('definition term', 'definition list item' + / GroupedFlowables.like('definition term')) +matcher('definition term paragraph', SelectorByName('definition term') + / ... / Paragraph) +matcher('definition term classifier', SelectorByName('definition term paragraph') + / ... /StyledText.like('classifier')) +matcher('definition', 'definition list item' + / GroupedFlowables.like('definition')) +matcher('definition paragraph', 'definition' / Paragraph) + + +# (DITA) related links + +matcher('related links', GroupedFlowables.like('related links')) +matcher('related links section title', 'related links' + / Paragraph.like('title')) +matcher('related links list', 'related links' / List) +matcher('related links list item', 'related links list' / ListItem) +matcher('related links list item label', 'related links list item' + / ListItemLabel) +rlp = matcher('related links list item paragraph', + SelectorByName('related links list item') + / ... / ReferencingParagraph) +rlpe = rlp / ... +matcher('related link title reference',rlpe / ReferenceField.like(type='title')) +matcher('related link page reference', rlpe / ReferenceField.like(type='page')) +matcher('related link number reference', rlpe /ReferenceField.like(type='number')) +matcher('related link reference', rlpe / ReferenceField.like(type='reference')) + + +# (Sphinx) version added/changed & deprecated + +matcher('versionmodified', StyledText.like(classes=['versionmodified'])) + +# (Sphinx) object descriptions + +matcher('object description', LabeledFlowable.like('object description')) +matcher('object signatures', 'object description' + / GroupedFlowables.like('signatures')) +matcher('object signature', 'object signatures' / Paragraph) +sig = SelectorByName('object signature') / ... +matcher('object name', sig / StyledText.like('main object name')) +matcher('additional name part', sig / StyledText.like('additional name part')) +matcher('object type', sig / StyledText.like('type')) +matcher('object returns', sig / StyledText.like('returns')) +matcher('object parentheses', sig / StyledText.like('parentheses')) +matcher('object parameter list', sig / StyledText.like('parameter list')) +matcher('object parameter', sig / StyledText.like('parameter')) +matcher('object parameter (no emphasis)', + sig / StyledText.like('noemph parameter')) +matcher('object brackets', sig / StyledText.like('brackets')) +matcher('object optional parameter', sig / StyledText.like('optional')) +matcher('object annotation', sig / StyledText.like('annotation')) +matcher('object description content', 'object description' + / GroupedFlowables.like('content')) +matcher('object description content paragraph', 'object description content' + / Paragraph) + + +# (Sphinx) production list + +matcher('production list', DefinitionList.like('production list')) +matcher('production', 'production list' / LabeledFlowable.like('production')) +matcher('token name', SelectorByName('production list') + / ... / Paragraph.like('token')) +matcher('token definition', SelectorByName('production list') + / ... / Paragraph.like('definition')) + + +# field lists + +matcher('field list', DefinitionList.like('field list')) +matcher('field list item', 'field list' / LabeledFlowable) +matcher('field name', 'field list item' / Paragraph.like('field name')) + + +# option lists + +matcher('option list', DefinitionList.like('option list')) +matcher('option list item', 'option list' / LabeledFlowable) +matcher('option', Paragraph.like('option_group')) +matcher('option string', MixedStyledText.like('option_string')) +matcher('option argument', MixedStyledText.like('option_arg')) + +matcher('admonition', Admonition) +matcher('admonition title', 'admonition' / Paragraph.like('title')) +matcher('admonition title paragraph', 'admonition' / +AdmonitionTitleParagraph) +matcher('admonition inline title', SelectorByName('admonition') + / ... / StyledText.like('inline title')) + +for admonition_type in ('attention', 'caution', 'danger', 'error', 'hint', + 'important', 'note', 'tip', 'warning', 'seealso'): + admonition_selector = Admonition.like(admonition_type=admonition_type) + matcher(admonition_type + ' admonition', admonition_selector) + selector = admonition_selector / Paragraph.like('title') + matcher(admonition_type + ' admonition title', selector) + matcher(admonition_type + ' admonition title paragraph', + admonition_selector / +AdmonitionTitleParagraph) + matcher(admonition_type + ' admonition inline title', + admonition_selector / ... / StyledText.like('inline title')) + +# page header and footer + +matcher('header', Header) +matcher('footer', Footer) + +# footnotes + +footnote = Note.like('footnote') +matcher('footnote', footnote) +matcher('footnote marker', NoteMarkerBase.like('footnote')) +matcher('footnote paragraph', footnote / GroupedFlowables / Paragraph) +matcher('footnote label', footnote / Paragraph) + + +# citations + +citation = Note.like('citation') +matcher('citation', citation) +matcher('citation marker', NoteMarkerBase.like('citation')) +matcher('citation paragraph', citation / GroupedFlowables / Paragraph) +matcher('citation label', citation / Paragraph) + + +# images & figures + +matcher('image', Image) +matcher('inline image', InlineImage) +matcher('figure', Figure) +matcher('figure image', 'figure' / Image) +matcher('figure caption', 'figure' / Caption) +matcher('figure legend', 'figure' / GroupedFlowables.like('legend')) +matcher('figure legend paragraph', 'figure legend' / Paragraph) +matcher('image alt', Paragraph.like('image alt')) + +# front matter + +matcher('table of contents section', Section.like('table of contents')) +matcher('table of contents title', 'table of contents section' + / Heading.like(level=1)) +matcher('table of contents', TableOfContents) +matcher('local table of contents', TableOfContents.like(local=True)) +matcher('toc level 1', TableOfContentsEntry.like(depth=1)) +matcher('toc level 2', TableOfContentsEntry.like(depth=2)) +matcher('toc level 3', TableOfContentsEntry.like(depth=3)) +matcher('toc level 4', TableOfContentsEntry.like(depth=4)) +matcher('toc level 5', TableOfContentsEntry.like(depth=5)) +matcher('toc level 6', TableOfContentsEntry.like(depth=6)) +matcher('L3 toc level 3', TableOfContents.like(level=2) + / TableOfContentsEntry.like(depth=3)) +matcher('toc entry number reference field', + TableOfContentsEntry / ... / ReferenceField.like(type='number')) + +matcher('list of figures section', ListOfFiguresSection) +matcher('list of figures', ListOfFigures) +matcher('list of figures entry', 'list of figures' / ListOfEntry) + +matcher('list of tables section', ListOfTablesSection) +matcher('list of tables', ListOfTables) +matcher('list of tables entry', 'list of tables' / ListOfEntry) + + +# tables + +matcher('table', Table) +matcher('table with caption', TableWithCaption) +matcher('table caption', 'table with caption' / Caption) +matcher('choices table', Table.like('choice')) +matcher('table cell', Table / TableSection / TableRow / TableCell) +matcher('table body cell background on even row', + TableBody / TableRow + / TableCell.like(row_index=slice(1, None, 2), rowspan=1) + / TableCellBackground) +matcher('table body cell background on odd row', + TableBody / TableRow + / TableCell.like(row_index=slice(0, None, 2), rowspan=1) + / TableCellBackground) +matcher('table body cell paragraph', SelectorByName('table cell') + / ... / Paragraph) +matcher('table first column paragraph', + TableBody / TableRow / TableCell.like(column_index=0) / ... / Paragraph) +matcher('table body cell list item number', SelectorByName('table cell') + / ... / ListItem / Paragraph) +matcher('table head cell', Table / TableHead / TableRow / TableCell) +matcher('table head cell background', Table / TableHead / TableRow / TableCell + / TableCellBackground) +matcher('table head cell paragraph', 'table head cell' / Paragraph) +matcher('table cell left border', TableCellBorder.like(position='left')) +matcher('table cell top border', TableCellBorder.like(position='top')) +matcher('table cell right border', TableCellBorder.like(position='right')) +matcher('table cell bottom border', TableCellBorder.like(position='bottom')) + +matcher('table top border', TableHead + / TableRow + / TableCell.like(row_index=0) + / TableCellBorder.like(position='top')) +matcher('table bottom border', TableBody + / TableRow + / TableCell.like(row_index=-1) + / TableCellBorder.like(position='bottom')) +matcher('table left border', TableCell.like(column_index=0) + / TableCellBorder.like(position='left')) +matcher('table right border', TableCell.like(column_index=-1) + / TableCellBorder.like(position='right')) +matcher('table head cell left border', TableHead / TableRow / TableCell + / TableCellBorder.like(position='left')) +matcher('table head cell right border', TableHead / TableRow / TableCell + / TableCellBorder.like(position='right')) +matcher('table head bottom border', TableHead / TableRow + / TableCell.like(row_index=-1) + / TableCellBorder.like(position='bottom')) +matcher('table head left border', TableHead / TableRow + / TableCell.like(column_index=0) + / TableCellBorder.like(position='left')) +matcher('table head right border', TableHead / TableRow + / TableCell.like(column_index=-1) + / TableCellBorder.like(position='right')) +matcher('table body top border', TableBody / TableRow + / TableCell.like(row_index=0) + / TableCellBorder.like(position='top')) +matcher('table body left border', TableBody / TableRow + / TableCell.like(column_index=0) + / TableCellBorder.like(position='left')) +matcher('table body right border', TableBody / TableRow + / TableCell.like(column_index=-1) + / TableCellBorder.like(position='right')) + + + +matcher('horizontal rule', HorizontalRule) + + +# index + +matcher('index', Index) +matcher('index section label', IndexLabel) +matcher('level 1 index entry', IndexEntry.like(index_level=1)) +matcher('level 2 index entry', IndexEntry.like(index_level=2)) +matcher('level 3 index entry', IndexEntry.like(index_level=3)) +matcher('level 4 index entry', IndexEntry.like(index_level=4)) +matcher('domain index entry name', IndexEntry / ... / StyledText.like('domain')) + + +doc = ['The default matcher defines the following styles', + ''] +for style_name, selector in matcher.by_name.items(): + style_class = selector.get_styled_class(matcher).style_class + doc.append('* {}: :class:`.{}`'.format(style_name, style_class.__name__)) + +matcher.__doc__ = '\n'.join(doc) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/table.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/table.py new file mode 100644 index 000000000..10dfda875 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/table.py @@ -0,0 +1,656 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from collections.abc import Iterable +from itertools import chain +from functools import partial +from math import sqrt +from token import NAME + +from .attribute import (Attribute, OptionSet, OverrideDefault, Integer, Bool, + AcceptNoneAttributeType, ParseError) +from .dimension import DimensionBase as DimBase, Dimension, PERCENT +from .draw import Line, Rectangle, ShapeStyle, LineStyle +from .flowable import (Flowable, FlowableStyle, FlowableState, FlowableWidth, + Float, FloatStyle) +from .layout import MaybeContainer, VirtualContainer, EndOfContainer +from .structure import (StaticGroupedFlowables, GroupedFlowablesStyle, + ListOf, ListOfSection) +from .style import Styled +from .util import ReadAliasAttribute, INF + + +__all__ = ['Table', 'TableStyle', 'TableWithCaption', + 'TableSection', 'TableHead', 'TableBody', 'TableRow', + 'TableCell', 'TableCellStyle', + 'TableCellBorder', 'TableCellBorderStyle', + 'TableCellBackground', 'TableCellBackgroundStyle', 'VerticalAlign', + 'ListOfTables', 'ListOfTablesSection'] + + +class TableState(FlowableState): + table = ReadAliasAttribute('flowable') + + def __init__(self, table, column_widths=None, body_row_index=0): + super().__init__(table) + self.column_widths = column_widths + self.body_row_index = body_row_index + + @property + def width(self): + return sum(self.column_widths) + + @property + def body_row_index(self): + return self._body_row_index + + @body_row_index.setter + def body_row_index(self, body_row_index): + self._body_row_index = body_row_index + self.initial = body_row_index == 0 + + def __copy__(self): + return self.__class__(self.table, self.column_widths, + self.body_row_index) + + +class Auto: + @classmethod + def from_tokens(cls, tokens, source): + token = next(tokens) + if token.type != NAME or token.string.lower() != 'auto': + raise ParseError("Expecting the 'auto' keyword") + return None + + +class ColumnWidths(AcceptNoneAttributeType): + @classmethod + def check_type(cls, value): + return (super().check_type(value) + or (isinstance(value, list) + and all(item is None or isinstance(item, (DimBase, int)) + for item in value))) + + @classmethod + def from_tokens(cls, tokens, source): + items = [] + while tokens.next.type: + for cls in (Dimension, Integer, Auto): + tokens.push_state() + try: + items.append(cls.from_tokens(tokens, source)) + tokens.pop_state(discard=True) + break + except ParseError: + tokens.pop_state(discard=False) + else: + raise ParseError("Expecting a dimension, integer or 'auto'") + return items + + @classmethod + def doc_format(cls): + return ("a whitespace-delimited list of column widths;" + " :class:`.Dimension`\\ s (absolute width), integers (relative" + " width) and/or 'auto' (automatic width)") + + +class TableStyle(FlowableStyle): + column_widths = Attribute(ColumnWidths, None, 'Absolute or relative widths' + ' of each column') + split_minimum_rows = Attribute(Integer, 0, 'The minimum number of rows to ' + 'display when the table is ' + 'split across pages') + repeat_head = Attribute(Bool, False, 'Repeat the head when the table is ' + 'split across pages') + + +NEVER_SPLIT = float('+inf') + + +class Table(Flowable): + style_class = TableStyle + + def __init__(self, body, head=None, align=None, width=None, + column_widths=None, id=None, style=None, parent=None): + """ + + Args: + width (DimensionBase or None): the width of the table. If ``None``, + the width of the table is automatically determined. + column_widths (list or None): a list of relative (int or float) + and absolute (:class:`.Dimension`) column widths. A value of + ``None`` auto-sizes the column. Passing ``None` instead of a list + auto-sizes all columns. + + """ + super().__init__(align=align, width=width, + id=id, style=style, parent=parent) + self.head = head + if head: + head.parent = self + self.body = body + if body: + body.parent = self + self.column_widths = column_widths + + def prepare(self, flowable_target): + super().prepare(flowable_target) + if self.head: + self.head.prepare(flowable_target) + if self.body: + self.body.prepare(flowable_target) + + def initial_state(self, container): + return TableState(self) + + def render(self, container, last_descender, state, space_below=0, + **kwargs): + if state.column_widths is None: + state.column_widths = self._size_columns(container) + get_style = partial(self.get_style, container=container) + with MaybeContainer(container) as maybe_container: + def render_rows(section, next_row_index=0): + rows = section[next_row_index:] + rendered_spans = self._render_section(container, rows, + state.column_widths) + for rendered_rows, is_last_span in rendered_spans: + sum_row_heights = sum(row.height for row in rendered_rows) + remaining_height = maybe_container.remaining_height + if isinstance(section, TableBody) and is_last_span: + remaining_height -= space_below + if sum_row_heights > remaining_height: + break + self._place_rows_and_render_borders(maybe_container, + rendered_rows) + next_row_index += len(rendered_rows) + return next_row_index + + # head rows + if self.head and (state.initial or get_style('repeat_head')): + if render_rows(self.head) != len(self.head): + raise EndOfContainer(state) + # body rows + if self.body: + next_row_index = render_rows(self.body, state.body_row_index) + rows_left = len(self.body) - next_row_index + if rows_left > 0: + split_minimum_rows = get_style('split_minimum_rows') + if min(next_row_index, rows_left) >= split_minimum_rows: + state.body_row_index = next_row_index + raise EndOfContainer(state) + return sum(state.column_widths), 0, 0 + + def _size_columns(self, container): + """Calculate the table's column sizes constrained by: + + - given (absolute, relative and automatic) column widths + - full table width: fixed or automatic (container width max) + - cell contents + + """ + num_cols = (self.body or self.head).num_columns + width = self._width(container) + if width == FlowableWidth.FILL: + width = 100 * PERCENT + available_width = (float(container.width) + if width == FlowableWidth.AUTO + else width.to_points(container.width)) + column_widths = (self.column_widths + or self.get_style('column_widths', container) + or [None for _ in range(num_cols)]) # auto widths + if len(column_widths) != num_cols: + raise ValueError("'column_widths' length doesn't match the number" + " of table columns") + + # indices for fixed, relative and auto width columns + fixed_cols = [i for i, width in enumerate(column_widths) + if isinstance(width, DimBase)] + rel_cols = [i for i, width in enumerate(column_widths) + if width and i not in fixed_cols] + auto_cols = [i for i, width in enumerate(column_widths) + if width is None] + + # fixed-width columns + final = [width.to_points(container.width) if i in fixed_cols else None + for i, width in enumerate(column_widths)] + fixed_total_width = sum(width or 0 for width in final) + if fixed_total_width > available_width: + self.warn('Total width of fixed-width columns exceeds the' + ' available width') + + # minimum (wrap content) and maximum (non wrapping) column widths + min_widths = self._widths_from_content(final, 0, container) + max_widths = self._widths_from_content(final, INF, container) + + # calculate max column widths respecting the specified relative + # column widths (padding columns with whitespace) + rel_max_widths = [max(max(column_widths[i] / column_widths[j] + * max_widths[j] for j in rel_cols if j != i), + max_widths[i]) if i in rel_cols else width + for i, width in enumerate(max_widths)] + + # does the table fit within the available width without wrapping? + if sum(rel_max_widths) < available_width: # no content wrapping needed + if width == FlowableWidth.AUTO: # -> use maximum widths + return rel_max_widths + rel_widths = rel_max_widths + else: # content needs wrapping + rel_widths = [sqrt(mini * maxi) # -> use weighted widths + for mini, maxi in zip(min_widths, max_widths)] + + # transform auto-width columns to relative-width columns + if auto_cols: + # scaling factor between supplied relative column widths and the + # relative widths determined for auto-sized columns + # TODO: instead of min, use max or avg? + auto_rel_factor = min(rel_widths[i] / column_widths[i] + for i in rel_cols) if rel_cols else 1 + for i in auto_cols: + column_widths[i] = rel_widths[i] * auto_rel_factor + rel_cols = sorted(rel_cols + auto_cols) + + # scale relative-width columns to fill the specified/available width + if rel_cols: + rel_sum = sum(column_widths[i] for i in rel_cols) + total_relative_cols_width = available_width - fixed_total_width + rel_factor = total_relative_cols_width / rel_sum + for i in rel_cols: + final[i] = column_widths[i] * rel_factor + + if not all(fin >= maxw for fin, maxw in zip(final, max_widths)): + final = self._optimize_auto_columns(auto_cols, final, min_widths, + max_widths, container) + return final + + def _optimize_auto_columns(self, auto_cols, final, min_widths, + max_widths, container): + """Adjust auto-sized columns to prevent content overflowing cells""" + extra = [final[i] - min_widths[i] for i in auto_cols] + excess = [final[i] - max_widths[i] for i in auto_cols] + neg_extra = sum(x for x in extra if x < 0) # width to be compensated + # increase width of overfilled columns to the minimum width + for i in (i for i in auto_cols if extra[i] < 0): + final[i] = min_widths[i] + surplus = neg_extra + sum(x for x in excess if x > 0) + if surplus >= 0: # using only the unused space (padding) is enough + for i in (i for i in auto_cols if excess[i] > 0): + final[i] = max_widths[i] + else: # that isn't enough; wrap non-wrapped content instead + surplus = neg_extra + sum(x for x in extra if x > 0) + for i in (i for i in auto_cols if extra[i] > 0): + final[i] = min_widths[i] + pad_columns = auto_cols + if surplus < 0: + self.warn('Table contents are too wide to fit within the available' + ' width', container) + elif any(fin < mw for fin, mw in zip(final, max_widths)): + pad_columns = [i for i in auto_cols if final[i] < max_widths[i]] + # divide surplus space among all auto-sized columns < max_width + if pad_columns: + per_column_surplus = surplus / len(pad_columns) + for i in pad_columns: + final[i] += per_column_surplus + return final + + def _widths_from_content(self, fixed, max_cell_width, container): + """Calculate required column widths given a maximum cell width""" + def cell_content_width(cell): + buffer = VirtualContainer(container, width=max_cell_width, + never_placed=True) + width, _, _ = cell.flow(buffer, None) + return float(width) + + widths = [width if width else 0 for width in fixed] + fixed_width_cols = set(i for i, width in enumerate(widths) if width) + + # find the maximum content width for all non-column-spanning cells for + # each non-fixed-width column + for row in chain(self.head or [], self.body or []): + for cell in (cell for cell in row if cell.colspan == 1): + col = int(cell.column_index) + if col not in fixed_width_cols: + widths[col] = max(widths[col], cell_content_width(cell)) + + # divide the extra space needed for column-spanning cells equally over + # the spanned columns (skipping fixed-width columns) + for row in chain(self.head or [], self.body or []): + for cell in (cell for cell in row if cell.colspan > 1): + c = int(cell.column_index) + c_end = c + cell.colspan + extra = cell_content_width(cell) - sum(widths[c:c_end]) + non_fixed_cols = [i for i in range(c, c_end) + if i not in fixed_width_cols] + if extra > 0 and non_fixed_cols: + per_column_extra = extra / len(non_fixed_cols) + for i in non_fixed_cols: + widths[i] += per_column_extra + return widths + + @classmethod + def _render_section(cls, container, rows, column_widths): + rendered_rows = [] + rows_left_in_span = 0 + for row in rows: + rows_left_in_span = max(row.maximum_rowspan, rows_left_in_span) - 1 + rendered_row = cls._render_row(column_widths, container, row) + rendered_rows.append(rendered_row) + if rows_left_in_span == 0: + is_last_span = row == rows[-1] + yield cls._vertically_size_cells(rendered_rows), is_last_span + rendered_rows = [] + assert not rendered_rows + + @staticmethod + def _render_row(column_widths, container, row): + rendered_row = RenderedRow(int(row._index), row) + for cell in row: + col_idx = int(cell.column_index) + left = sum(column_widths[:col_idx]) + cell_width = sum(column_widths[col_idx:col_idx + cell.colspan]) + buffer = VirtualContainer(container, cell_width) + cell.flow(buffer, None) + rendered_cell = RenderedCell(cell, buffer, left) + rendered_row.append(rendered_cell) + return rendered_row + + @staticmethod + def _vertically_size_cells(rendered_rows): + """Grow row heights to cater for vertically spanned cells that do not + fit in the available space.""" + for r, rendered_row in enumerate(rendered_rows): + for rendered_cell in rendered_row: + if rendered_cell.rowspan > 1: + row_height = sum(row.height for row in + rendered_rows[r:r + rendered_cell.rowspan]) + extra_height_needed = rendered_cell.height - row_height + if extra_height_needed > 0: + padding = extra_height_needed / rendered_cell.rowspan + for i in range(r, r + rendered_cell.rowspan): + rendered_rows[i].height += padding + return rendered_rows + + @staticmethod + def _place_rows_and_render_borders(container, rendered_rows): + """Place the rendered cells onto the page canvas and draw borders around + them.""" + def draw_cell_border(rendered_cell, cell_height, container): + cell_width = rendered_cell.width + background = TableCellBackground((0, 0), cell_width, cell_height, + parent=rendered_cell.cell) + background.render(container) + container.register_styled(background) + for position in ('top', 'right', 'bottom', 'left'): + border = TableCellBorder(rendered_cell, cell_height, position) + border.render(container) + container.register_styled(border) + + y_cursor = container.cursor + for r, rendered_row in enumerate(rendered_rows): + container.advance(rendered_row.height) + if rendered_row.index == 0: + container.register_styled(rendered_row.row.parent) + container.register_styled(rendered_row.row) + for c, rendered_cell in enumerate(rendered_row): + cell_height = sum(rendered_row.height for rendered_row in + rendered_rows[r:r + rendered_cell.rowspan]) + x_cursor = rendered_cell.x_position + y_pos = float(y_cursor + cell_height) + cell_container = VirtualContainer(container) + draw_cell_border(rendered_cell, cell_height, cell_container) + cell_container.place_at(container, x_cursor, y_pos) + vertical_align = rendered_cell.cell.get_style('vertical_align', + container) + if vertical_align == VerticalAlign.TOP: + vertical_offset = 0 + elif vertical_align == VerticalAlign.MIDDLE: + vertical_offset = (cell_height - rendered_cell.height) / 2 + elif vertical_align == VerticalAlign.BOTTOM: + vertical_offset = (cell_height - rendered_cell.height) + y_offset = float(y_cursor + vertical_offset) + rendered_cell.container.place_at(container, x_cursor, y_offset) + y_cursor += rendered_row.height + + +class TableWithCaptionStyle(FloatStyle, GroupedFlowablesStyle): + pass + + +class TableWithCaption(Float, StaticGroupedFlowables): + style_class = TableWithCaptionStyle + category = 'table' + + +class TableSection(Styled, list): + def __init__(self, rows, style=None, parent=None): + Styled.__init__(self, style=style, parent=parent) + list.__init__(self, rows) + for row in rows: + row.parent = self + + def prepare(self, flowable_target): + for row in self: + row.prepare(flowable_target) + + @property + def num_columns(self): + return sum(cell.colspan for cell in self[0]) + + +class TableHead(TableSection): + pass + + +class TableBody(TableSection): + pass + + +class TableRow(Styled, list): + def __init__(self, cells, style=None, parent=None): + Styled.__init__(self, style=style, parent=parent) + list.__init__(self, cells) + for cell in cells: + cell.parent = self + + @property + def maximum_rowspan(self): + return max((cell.rowspan for cell in self), default=1) + + def prepare(self, flowable_target): + for cells in self: + cells.prepare(flowable_target) + + @property + def _index(self): + return next(i for i, item in enumerate(self.parent) if item is self) + + def get_rowspanned_columns(self): + """Return a dictionary mapping column indices to the number of columns + spanned.""" + section = self.parent + spanned_columns = {} + current_row_index = self._index + current_row_cols = sum(cell.colspan for cell in self) + prev_rows = iter(reversed(section[:current_row_index])) + while current_row_cols < section.num_columns: + row = next(prev_rows) + min_rowspan = current_row_index - int(row._index) + if row.maximum_rowspan > min_rowspan: + for cell in (c for c in row if c.rowspan > min_rowspan): + col_index = int(cell.column_index) + spanned_columns[col_index] = cell.colspan + current_row_cols += cell.colspan + return spanned_columns + + +class VerticalAlign(OptionSet): + values = 'top', 'middle', 'bottom' + + +class TableCellStyle(GroupedFlowablesStyle): + vertical_align = Attribute(VerticalAlign, 'middle', + 'Vertical alignment of the cell contents ' + 'within the available space') + + +class TableCell(StaticGroupedFlowables): + style_class = TableCellStyle + + row = ReadAliasAttribute('parent') + + def __init__(self, flowables, rowspan=1, colspan=1, + id=None, style=None, parent=None): + super().__init__(flowables, id=id, style=style, parent=parent) + self.rowspan = rowspan + self.colspan = colspan + + @property + def row_index(self): + return RowIndex(self) + + @property + def column_index(self): + return ColumnIndex(self) + + +class Index(object): + def __init__(self, cell): + self.cell = cell + + @property + def row(self): + return self.cell.parent + + @property + def table_section(self): + return self.row.parent + + def __eq__(self, other): + if isinstance(other, slice): + indices = range(*other.indices(self.num_items)) + elif isinstance(other, Iterable): + indices = other + else: + indices = (other, ) + indices = [self.num_items + idx if idx < 0 else idx for idx in indices] + return any(index in indices for index in self) + + def __int__(self): + raise NotImplementedError + + def num_items(self): + raise NotImplementedError + + +class RowIndex(Index): + def __int__(self): + return next(i for i, row in enumerate(self.table_section) + if row is self.row) + + def __iter__(self): + index = int(self) + return (index + i for i in range(self.cell.rowspan)) + + @property + def num_items(self): + return len(self.table_section) + + +class ColumnIndex(Index): + def __int__(self): + spanned_columns = self.row.get_rowspanned_columns() + column_index = 0 + cells = iter(self.row) + for col_index in range(self.cell.row.parent.num_columns): + if col_index in spanned_columns: + column_index += spanned_columns[col_index] + else: + cell = next(cells) + if cell is self.cell: + return column_index + column_index += cell.colspan + + def __iter__(self): + index = int(self) + return (index + i for i in range(self.cell.colspan)) + + @property + def num_items(self): + return self.row.parent.num_columns + + +class RenderedCell(object): + def __init__(self, cell, container, x_position): + self.cell = cell + self.container = container + self.x_position = x_position + + @property + def width(self): + return float(self.container.width) + + @property + def height(self): + return float(self.container.height) + + @property + def rowspan(self): + return self.cell.rowspan + + +class RenderedRow(list): + def __init__(self, index, row): + super().__init__() + self.index = index + self.row = row + self.height = 0 + + def append(self, rendered_cell): + if rendered_cell.cell.rowspan == 1: + self.height = max(self.height, rendered_cell.height) + super().append(rendered_cell) + + +class TableCellBorderStyle(LineStyle): + stroke = OverrideDefault(None) + + +class TableCellBorder(Line): + style_class = TableCellBorderStyle + + def __init__(self, rendered_cell, cell_height, position, style=None): + left, bottom, right, top = 0, 0, rendered_cell.width, cell_height + if position == 'top': + start, end = (left, top), (right, top) + if position == 'right': + start, end = (right, top), (right, bottom) + if position == 'bottom': + start, end = (left, bottom), (right, bottom) + if position == 'left': + start, end = (left, bottom), (left, top) + super().__init__(start, end, style=style, parent=rendered_cell.cell) + self.position = position + + def _short_repr_args(self, flowable_target): + return (repr(self.position), ) + + +class TableCellBackgroundStyle(ShapeStyle): + fill_color = OverrideDefault(None) + stroke = OverrideDefault(None) + + +class TableCellBackground(Rectangle): + style_class = TableCellBackgroundStyle + + +class ListOfTables(ListOf): + category = 'table' + + +class ListOfTablesSection(ListOfSection): + list_class = ListOfTables diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/template.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/template.py new file mode 100644 index 000000000..c1ec43908 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/template.py @@ -0,0 +1,819 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import re + +from collections import OrderedDict +from contextlib import suppress +from functools import partial +from itertools import chain + +from . import styleds, reference +from .attribute import (Bool, Integer, Attribute, AttributesDictionary, + RuleSet, RuleSetFile, WithAttributes, AttributeType, + OptionSet, AcceptNoneAttributeType, OverrideDefault, + Configurable, DefaultValueException, + VariableNotDefined) +from .dimension import Dimension, CM, PT, PERCENT +from .document import (Document, Page, PageOrientation, PageType, + PageNumberFormat) +from .element import create_destination +from .image import BackgroundImage, Image +from .flowable import Flowable, StaticGroupedFlowables +from .language import Language, EN +from .layout import (Container, DownExpandingContainer, UpExpandingContainer, + FlowablesContainer, FootnoteContainer, ChainedContainer, + BACKGROUND, CONTENT, HEADER_FOOTER, CHAPTER_TITLE, + PageBreakException, Chain) +from .paper import Paper, A4 +from .paragraph import Paragraph +from .reference import (Field, SECTION_NUMBER, SECTION_TITLE, + PAGE_NUMBER, NUMBER_OF_PAGES) +from .resource import Resource +from .text import StyledText, Tab +from .strings import Strings +from .structure import Header, Footer, HorizontalRule, NewChapterException +from .style import StyleSheet, Specificity, DocumentLocationType +from .stylesheets import sphinx +from .util import NamedDescriptor + + +__all__ = ['BodyPage', 'TitlePage', 'BodyPageTemplate', 'PageNumberFormat', + 'TitlePageTemplate', 'ContentsPartTemplate', + 'FixedDocumentPartTemplate', 'Option', 'DocumentTemplate', + 'TemplateConfiguration', 'TemplateConfigurationFile'] + + +class Option(Attribute): + """Descriptor used to describe a document option""" + + +class DefaultOptionException(Exception): + pass + + +class Template(AttributesDictionary, NamedDescriptor): + @classmethod + def get_ruleset(self, document): + return document.configuration + + def get_option(self, name, document): + ruleset = self.get_ruleset(document) + try: + value = ruleset.get_value(self.name, name) + except DefaultValueException: + value = self._get_default(name) + return value + + +class Templated(Configurable): + configuration_class = Template + + def __init__(self, template): + self.template = template + + @property + def template_name(self): + return self.template.name + + def configuration_name(self, document): + return self.template_name + + +class Sideways(OptionSet): + values = ('left', 'right') + + +class PageTemplateBase(Template): + page_size = Option(Paper, A4, 'The format of the pages in the document') + page_orientation = Option(PageOrientation, 'portrait', + 'The orientation of pages in the document') + left_margin = Option(Dimension, 3*CM, 'The margin size on the left of the ' + 'page') + right_margin = Option(Dimension, 3*CM, 'The margin size on the right of ' + 'the page') + top_margin = Option(Dimension, 3*CM, 'The margin size at the top of the ' + 'page') + bottom_margin = Option(Dimension, 3*CM, 'The margin size at the bottom of ' + 'the page') + background = Option(BackgroundImage, None, 'An image to place in the ' + 'background of the page') + after_break_background = Option(BackgroundImage, None, 'An image to place ' + 'in the background after a page break') + sideways = Option(Sideways, Sideways.RIGHT, 'Rotate sideways pages to the ' + 'left or right') + + def page(self, document_part, page_number, chain): + raise NotImplementedError + + def new_chapter_page(self, document_part, page_number, chain): + return self.page(document_part, page_number, chain) + + +class FlowablesList(AcceptNoneAttributeType): + @classmethod + def check_type(cls, value): + if not (super().check_type(value) or isinstance(value, (list, tuple))): + return False + return value is None or all(isinstance(val, Flowable) for val in value) + + @classmethod + def parse_string(cls, string, source): + locals = {} + locals.update(reference.__dict__) + locals.update(styleds.__dict__) + flowables = eval(string, {'__builtins__':{}}, locals) # TODO: parse! + return [StaticGroupedFlowables(flowables, source=source)] + + @classmethod + def doc_format(cls): + return ('Python source code that represents a list of ' + ':class:`.Flowable`\\ s') + + +class BodyPageTemplateBase(PageTemplateBase): + header_footer_distance = Option(Dimension, 14*PT, 'Distance of the ' + 'header and footer to the content area') + columns = Option(Integer, 1, 'The number of columns for the body text') + column_spacing = Option(Dimension, 1*CM, 'The spacing between columns') + header_text = Option(StyledText, Field(SECTION_NUMBER(1)) + + ' ' + Field(SECTION_TITLE(1)), + 'The text to place in the page header') + footer_text = Option(StyledText, Tab() + Field(PAGE_NUMBER) + + '/' + Field(NUMBER_OF_PAGES), + 'The text to place in the page footer') + + def page(self, document_part, page_number, chain): + return BodyPage(document_part, self, page_number, chain) + + def sideways_page(self, document_part, page_number, chain): + return SidewaysBodyPage(document_part, self, page_number, chain) + + +class BodyPageTemplate(BodyPageTemplateBase): + chapter_header_text = Option(StyledText, None, 'The text to place in the ' + 'header on a page that starts a new chapter') + chapter_footer_text = Option(StyledText, None, 'The text to place in the ' + 'footer on a page that starts a new chapter') + chapter_title_flowables = Option(FlowablesList, None, + 'Generator that yields the flowables to ' + 'represent the chapter title') + chapter_title_height = Option(Dimension, 150*PT, 'The height of the ' + 'container holding the chapter title') + + def new_chapter_page(self, document_part, page_number, chain): + if self.get_option('chapter_title_flowables', document_part.document): + return NewChapterBodyPage(document_part, self, page_number, chain) + else: + return self.page(document_part, page_number, chain) + + +class PageBase(Page, Templated): + configuration_class = PageTemplateBase + + def __init__(self, document_part, template, page_number, + enable_sideways=False): + Templated.__init__(self, template) + document = document_part.document + paper = self.get_config_value('page_size', document) + orientation = self.get_config_value('page_orientation', document) + sideways = (self.get_config_value('sideways', document) + if enable_sideways else None) + Page.__init__(self, document_part, page_number, paper, orientation, + display_sideways=sideways) + self.left_margin = self.get_option('left_margin') + self.right_margin = self.get_option('right_margin') + self.top_margin = self.get_option('top_margin') + self.bottom_margin = self.get_option('bottom_margin') + self.body_width = self.width - (self.left_margin + self.right_margin) + self.body_height = self.height - (self.top_margin + self.bottom_margin) + self.background = FlowablesContainer('background', BACKGROUND, self) + background_image = self.background_image + if background_image: + self.background << background_image + + @property + def background_image(self): + return self.get_option('background') + + def get_option(self, name, document=None): + return self.get_config_value(name, document or self.document) + + +def try_copy(obj, parent=None): + try: + return obj.copy(parent=parent) + except AttributeError: + return obj + + +class BodyPageBase(PageBase): + configuration_class = BodyPageTemplate + + float_space = None + chapter_title = None + + def __init__(self, document_part, template, page_number, + enable_sideways=False): + super().__init__(document_part, template, page_number, enable_sideways) + header_footer_distance = self.get_option('header_footer_distance') + self.body = Container('body', self, self.left_margin, self.top_margin, + self.body_width, self.body_height, + sideways=self.display_sideways) + self.footnote_space = FootnoteContainer('footnotes', self.body, 0*PT, + self.body.height) + self.body._footnote_space = self.footnote_space + header, footer, self.content_top = self.get_header_footer_contenttop() + if header: + header_bottom = self.body.top - header_footer_distance + self.header = UpExpandingContainer('header', HEADER_FOOTER, self, + left=self.left_margin, + bottom=header_bottom, + width=self.body_width) + self.header.append_flowable(Header(header)) + if footer: + footer_vpos = self.body.bottom + header_footer_distance + self.footer = DownExpandingContainer('footer', HEADER_FOOTER, self, + left=self.left_margin, + top=footer_vpos, + width=self.body_width) + self.footer.append_flowable(Footer(footer)) + + def get_header_footer_contenttop(self): + max_height = self.body_height / 2 + self.float_space = DownExpandingContainer('floats', CONTENT, self.body, + 0, 0, max_height=max_height) + self.body.float_space = self.float_space + header = try_copy(self.get_option('header_text')) + footer = try_copy(self.get_option('footer_text')) + return header, footer, self.float_space.bottom + + +class BodyPage(BodyPageBase): + configuration_class = BodyPageTemplate + + def __init__(self, document_part, template, page_number, chain): + super().__init__(document_part, template, page_number) + num_cols = self.get_option('columns') + column_spacing = self.get_option('column_spacing') + total_column_spacing = column_spacing * (num_cols - 1) + column_width = (self.body_width - total_column_spacing) / num_cols + self.columns = [ChainedContainer('column{}'.format(i + 1), CONTENT, + self.body, chain, + left=i * (column_width + column_spacing), + top=self.content_top, width=column_width, + bottom=self.footnote_space.top) + for i in range(num_cols)] + + +class NewChapterBodyPage(BodyPage): + @property + def background_image(self): + return self.get_option('after_break_background') + + def get_header_footer_contenttop(self): + height = self.get_option('chapter_title_height') + self.chapter_title = FlowablesContainer('chapter title', + CHAPTER_TITLE, self.body, + 0, 0, height=height) + header = try_copy(self.get_option('chapter_header_text')) + footer = try_copy(self.get_option('chapter_footer_text')) + return header, footer, self.chapter_title.bottom + + def create_chapter_title(self, heading): + create_destination(heading.section, self.chapter_title, False) + create_destination(heading, self.chapter_title, False) + descender = None + for flowable in self.get_config_value('chapter_title_flowables', + self.document): + _, _, descender = flowable.flow(self.chapter_title, descender) + + +class SidewaysBodyPage(BodyPageBase): + + def __init__(self, document_part, template, page_number, chain): + super().__init__(document_part, template, page_number, True) + self.content = ChainedContainer('content', CONTENT, self.body, chain, + top=self.content_top, + bottom=self.footnote_space.top, + vertically_center_content=True) + + +class TitlePageTemplate(PageTemplateBase): + extra = Option(StyledText, None, 'Extra text to include on the title ' + 'page below the title') + + def page(self, document_part, page_number, chain): + return TitlePage(document_part, self, page_number) + + +class TitlePage(PageBase): + configuration_class = TitlePageTemplate + + def __init__(self, document_part, template, page_number): + super().__init__(document_part, template, page_number) + get_option = partial(self.get_config_value, document=self.document) + metadata = self.document.metadata + get_metadata = self.document.get_metadata + self.title = DownExpandingContainer('title', CONTENT, self, + self.left_margin, self.top_margin, + self.body_width) + + if 'logo' in metadata: + self.title << HorizontalRule(style='title page rule') + self.title << Image(get_metadata('logo'), + style='title page logo', + limit_width=100*PERCENT) + if 'title' in metadata: + self.title << Paragraph(get_metadata('title'), + style='title page title') + if 'subtitle' in metadata: + self.title << Paragraph(get_metadata('subtitle'), + style='title page subtitle') + if 'author' in metadata: + self.title << Paragraph(get_metadata('author'), + style='title page author') + with suppress(KeyError): + self.title << metadata['abstract'] + date = metadata['date'] + try: + self.title << Paragraph(date.strftime('%B %d, %Y'), + style='title page date') + except AttributeError: + self.title << Paragraph(date, style='title page date') + extra = get_option('extra') + if extra: + self.title << Paragraph(extra, style='title page extra') + + +class DocumentPartTemplate(Template): + """A template that produces a document part + + The document part is created given a set of flowables, and page templates. + The latter are looked up in the :class:`TemplateConfiguration` where this + part template was. + + """ + + page_number_prefix = Option(StyledText, None, 'Text to place in front of' + 'the page number.') + page_number_format = Option(PageNumberFormat, 'number', 'The format for ' + 'page numbers in this document part.') + end_at_page = Option(PageType, 'any', 'The type of page to end this ' + 'document part on') + drop_if_empty = Option(Bool, True, 'Exclude this part from the document ' + 'if it is empty (no flowables)') + + @property + def doc_repr(self): + doc = ('**{}** (:class:`{}.{}`)\n\n' + .format(self.name, type(self).__module__, type(self).__name__)) + for name, default_value in self.items(): + doc += ' - *{}*: ``{}``\n'.format(name, default_value) + return doc + + def prepare(self, fake_container): + for flowable in self.all_flowables(fake_container.document): + flowable.prepare(fake_container) + + def _flowables(self, document): + """Return a list of :class:`rinoh.flowable.Flowable`\\ s that make up + the document part""" + raise NotImplementedError + + def all_flowables(self, document): + extra_flowables = document._to_insert.get(self.name, ()) + flowables = [flowable for flowable in self._flowables(document)] + for flowable, position in extra_flowables: + flowables.insert(position, flowable) + return flowables + + def document_part(self, document, last_number_format): + flowables = self.all_flowables(document) + if flowables or not self.drop_if_empty: + return DocumentPart(self, document, flowables, last_number_format) + + +class DocumentPart(Templated, metaclass=DocumentLocationType): + """Part of a document. + + Args: + template (DocumentPartTemplate): the template that determines the + contents and style of this document part + document (Document): the document this part belongs to + flowables (list[Flowable]): the flowables to render in this document + part + + """ + + configuration_class = DocumentPartTemplate + + def __init__(self, template, document, flowables, last_number_format): + super().__init__(template) + self.document = document + page_number_format = self.get_config_value('page_number_format', + self.document) + self.page_number_format = (last_number_format + if page_number_format == 'continue' + else page_number_format) + self.pages = [] + self.chain = Chain(self) + for flowable in flowables or []: + self.chain << flowable + + @property + def number_of_pages(self): + try: + return self.document.part_page_counts[self.template.name].count + except KeyError: + return 0 + + def prepare(self): + for flowable in self._flowables(self.document): + flowable.prepare(self) + + def render(self, first_page_number): + self.chain.init_state() + self.add_page(self.first_page(first_page_number)) + page_number = first_page_number + sideways_chain = None + for page in self.pages: + restart = None + page_number += 1 + try: + page.render() + break_type = None + except NewChapterException as nce: + break_type = nce.break_type + with suppress(ValueError): + break_type, restart = break_type.split() + except PageBreakException as pbe: + break_type = None + page.place() + next_page_type = 'left' if page.number % 2 else 'right' + if not sideways_chain or sideways_chain.done: + sideways_float = self.document.next_sideways_float() + sideways_chain = (Chain(self) << sideways_float + if sideways_float else None) + if sideways_chain: + page = self.new_page(page_number, sideways_chain, + new_chapter=False, sideways=True) + self.add_page(page) + elif self.chain and not self.chain.done: + next_page_breaks = next_page_type == break_type + if restart and next_page_breaks: + page_number = 1 + page = self.new_page(page_number, self.chain, next_page_breaks) + self.add_page(page) # this grows self.pages! + next_page_type = 'right' if page_number % 2 else 'left' + end_at_page = self.get_config_value('end_at_page', self.document) + if next_page_type == end_at_page: + self.add_page(self.first_page(page_number + 1)) + return len(self.pages) + + def add_page(self, page): + """Append `page` (:class:`Page`) to this :class:`DocumentPart`.""" + self.pages.append(page) + + def first_page(self, page_number): + return self.new_page(page_number, self.chain, new_chapter=True) + + def new_page(self, page_number, chain, new_chapter, sideways=False): + """Called by :meth:`render` with the :class:`Chain`s that need more + :class:`Container`s. This method should create a new :class:`Page` which + contains a container associated with `chain`.""" + right_template = self.document.get_page_template(self, 'right') + left_template = self.document.get_page_template(self, 'left') + page_template = right_template if page_number % 2 else left_template + if sideways: + page = page_template.sideways_page(self, page_number, chain) + elif new_chapter: + page = page_template.new_chapter_page(self, page_number, chain) + else: + page = page_template.page(self, page_number, chain) + return page + + @classmethod + def match(cls, styled, container): + if isinstance(container.document_part, cls): + return Specificity(0, 1, 0, 0, 0) + else: + return None + + +class TitlePartTemplate(DocumentPartTemplate): + """The title page of a document.""" + + drop_if_empty = OverrideDefault(False) + + def _flowables(self, document): + return iter([]) + + +class ContentsPartTemplate(DocumentPartTemplate): + """The body of a document. + + Renders all of the content present in the + :class:`~.DocumentTree` passed to the :class:`DocumentTemplate`. + + """ + + def _flowables(self, document): + yield document.document_tree + + +class FixedDocumentPartTemplate(DocumentPartTemplate): + """A document part template that renders a fixed list of flowables""" + + flowables = Option(FlowablesList, [], 'The list of flowables to include ' + 'in this document part') + + @property + def doc_kwargs(self): + kwargs = OrderedDict() + kwargs['flowables'] = '``{}``'.format(self._flowables) + kwargs.update(super().doc_kwargs) + return kwargs + + def _flowables(self, document): + return self.get_option('flowables', document) + + +class TemplateConfiguration(RuleSet): + """Stores a configuration for a :class:`DocumentTemplate` + + Args: + name (str): a label for this template configuration + base (TemplateConfiguration): the template configuration to extend + template (DocumentTemplateMeta or str): the document template to + configure + description (str): a short string describing this style sheet + options: configuration values for the configuration attributes + defined by the document :attr:`template` + + """ + + template = None + """The :class:`.DocumentTemplate` subclass to configure""" + + def __init__(self, name, base=None, source=None, + template=None, description=None, **options): + if template: + if isinstance(template, str): + template = DocumentTemplate.from_string(template) + assert self.template in (None, template) + self.template = template + if base: + if isinstance(base, str): + base = TemplateConfigurationFile(base, source=self) + assert self.template in (None, base.template) + self.template = self.template or base.template + for attr, val in options.items(): + options[attr] = self._validate_attribute(self.template, attr, val) + base = base or self.template + super().__init__(name, base=base, source=source, **options) + self.description = description + + def get_entries(self, name, document): + if name in self: + yield self[name] + if self.base: + yield from self.base.get_entries(name, document) + raise KeyError(name) + + def get_attribute_value(self, name): + if name in self: + return self[name] + return self.base.get_attribute_value(name) + + def get_entry_class(self, name): + try: + template = self.template.get_template(name) + except KeyError: + raise ValueError("'{}' is not a template used by {}" + .format(name, self.template)) + return type(template) + + def document(self, document_tree, backend=None): + """Create a :class:`DocumentTemplate` object based on the given + document tree and this template configuration + + Args: + document_tree (DocumentTree): tree of the document's contents + backend: the backend to use when rendering the document + + """ + return self.template(document_tree, configuration=self, + backend=backend) + + +class TemplateConfigurationFile(RuleSetFile, TemplateConfiguration): + + main_section = 'TEMPLATE_CONFIGURATION' + + def process_section(self, section_name, classifier, items): + if section_name == 'STRINGS': + strings = self.setdefault('strings', Strings()) + for identifier, value in items: + strings[identifier] = StyledText.from_string(value) + else: + template_class = self.get_entry_class(section_name) + self[section_name] = template_class(**dict(items)) + + +class DocumentTemplateMeta(WithAttributes): + def __new__(mcls, classname, bases, cls_dict): + templates = cls_dict['_templates'] = OrderedDict() + cls = super().__new__(mcls, classname, bases, cls_dict) + for name, attr in cls_dict.items(): + if isinstance(attr, Template): + templates[name] = attr + if templates: + doc = [] + for name, template in templates.items(): + attr_type = type(template) + base = (':attr:`{}`'.format(template.base) + if template.base else '``None``') + tmpl_doc = ('{} (:class:`.{}`): base: {}' + .format(name, attr_type.__name__, base)) + if template: + defaults = [] + for name, value in template.items(): + defaults.append('- :attr:`~.{}.{}` = ``{}``' + .format(attr_type.__name__, name, + value)) + tmpl_doc += ('\n\n Overrides these defaults:' + '\n\n ' + + '\n '.join(defaults) + '\n') + doc.append(tmpl_doc) + template.template_configuration = cls + + templ_doc = '\n '.join(chain(['\n\n Attributes:'], doc)) + cls.__doc__ += templ_doc + + cfg_class_name = classname + 'Configuration' + cfg_class = type(cfg_class_name, (TemplateConfiguration, ), + dict(template=cls)) + # assign this document template's configuration class a name at the + # module level so that Sphinx can pickle instances of it + cls.Configuration = globals()[cfg_class_name] = cfg_class + + file_class_name = classname + 'ConfigurationFile' + file_class = type(file_class_name, (TemplateConfigurationFile, ), + dict(template=cls)) + cls.ConfigurationFile = globals()[file_class_name] = file_class + return cls + + def get_template(cls, name): + try: + for klass in cls.__mro__: + if name in klass._templates: + return klass._templates[name] + except AttributeError: + pass + raise KeyError(name) + + def get_attribute_value(cls, name): + return cls._get_default(name) + + def get_entries(cls, name, document): + with suppress(KeyError): + yield cls.get_template(name) + m = cls.RE_PAGE.match(name) + if m: + general_template = m.group(1) + '_page' + yield cls.get_template(general_template) + + def _get_value_recursive(cls, name, attribute): + if name in cls._templates: + template = cls._templates[name] + if attribute in template: + return template[attribute] + elif isinstance(template.base, str): + return cls._get_value_recursive(template.base, attribute) + elif template.base is not None: + return template.base[attribute] + raise DefaultValueException + + +class PartsList(AttributeType, list): + """Stores the names of the document part templates making up a document + + Args: + parts (list[str]): the names of the document parts + + """ + + def __init__(self, *parts): + super().__init__(parts) + + def __str__(self): + return ' '.join(self.parts) + + @classmethod + def check_type(cls, value): + if not (super().check_type(value) or isinstance(value, list)): + return False + return all(isinstance(item, str) for item in value) + + @classmethod + def parse_string(cls, string, source): + return cls(*string.split()) + + @classmethod + def doc_repr(cls, value): + return ' '.join(':attr:`{}`'.format(part) + for part in value) or '(empty list)' + + @classmethod + def doc_format(cls): + return 'a space-separated list of document part template names' + + +class DocumentTemplate(Document, AttributesDictionary, Resource, + metaclass=DocumentTemplateMeta): + """Template for documents + + Args: + document_tree (DocumentTree): a tree of the document's contents + configuration (TemplateConfiguration): configuration for this template + backend: the backend used for rendering the document + + """ + + resource_type = 'template' + + language = Attribute(Language, EN, 'The main language of the document') + strings = Attribute(Strings, None, 'Strings to override standard element ' + 'names') + stylesheet = Attribute(StyleSheet, sphinx, 'The stylesheet to use for ' + 'styling document elements') + + parts = Attribute(PartsList, [], 'The parts making up this document') + + variables = {'paper_size': A4} # default variable values + + def __init__(self, document_tree, configuration=None, backend=None): + self.configuration = (configuration if configuration is not None + else self.Configuration('empty')) + self.options = document_tree.options + stylesheet = self.get_option('stylesheet') + language = self.get_option('language') + strings = self.get_option('strings') + super().__init__(document_tree, stylesheet, language, strings=strings, + backend=backend) + parts = self.get_option('parts') + try: + self.part_templates = [next(self._find_templates(name)) + for name in parts] + except KeyError as exc: + raise ValueError("The '{}' document template has no part named" + " '{}'".format(type(self).__name__, *exc.args)) + self._to_insert = {} + + def _find_templates(self, name): + """Yields all :class:`Template`\\ s in the template hierarchy: + + - template matching `name` in this TemplateConfiguration + - templates in base TemplateConfigurations (recursively) + - the default template defined in the DocumentTemplate class + + """ + return self.configuration.get_entries(name, self) + + RE_PAGE = re.compile('^(.*)_(right|left)_page$') + + @classmethod + def get_variable(cls, configuration_class, attribute, variable): + try: + value = cls.variables[variable.name] + except KeyError: + raise VariableNotDefined("Document template provides no default " + "for variable '{}'".format(variable.name)) + return configuration_class.attribute_type(attribute).validate(value) + + def get_option(self, option_name): + return self.configuration.get_attribute_value(option_name) + + def get_entry_class(self, name): + template = next(self._find_templates(name)) + return type(template) + + def get_page_template(self, part, right_or_left, sideways=False): + part_template_name = part.template.name + label = '{}_page'.format(right_or_left) if right_or_left else 'page' + templates = self._find_templates(part_template_name + '_' + label) + return next(templates) + + def insert(self, document_part_name, flowable, position): + docpart_flowables = self._to_insert.setdefault(document_part_name, []) + docpart_flowables.append((flowable, position)) + + def prepare(self, flowable_target): + for part_template in self.part_templates: + part_template.prepare(flowable_target) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__init__.py new file mode 100644 index 000000000..0b6f0ab03 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__init__.py @@ -0,0 +1,13 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from .article import Article +from .book import Book + + +__all__ = ['Article', 'Book'] diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..3aeeeb9eb Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__pycache__/article.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__pycache__/article.cpython-312.pyc new file mode 100644 index 000000000..5f41fac4e Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__pycache__/article.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__pycache__/book.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__pycache__/book.cpython-312.pyc new file mode 100644 index 000000000..2bb545f5e Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/__pycache__/book.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/article.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/article.py new file mode 100644 index 000000000..8293293ab --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/article.py @@ -0,0 +1,98 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +from contextlib import suppress + +from ..attribute import OverrideDefault, Var, OptionSet +from ..dimension import CM, PT, Dimension +from ..layout import DownExpandingContainer, CONTENT +from ..paragraph import Paragraph +from ..structure import TableOfContentsSection +from ..stylesheets import sphinx_article +from ..template import (DocumentTemplate, BodyPageTemplateBase, + ContentsPartTemplate, BodyPage, try_copy, Option) +from ..text import StyledText + + +__all__ = ['Article', 'AbstractLocation'] + + +class ArticleContentsPartTemplate(ContentsPartTemplate): + toc_section = TableOfContentsSection() + + def _flowables(self, document): + if document.get_option('abstract_location') == 'body': + with suppress(KeyError): + yield document.metadata['abstract'] + yield self.toc_section + yield from super()._flowables(document) + + +class ArticleBodyPageTemplate(BodyPageTemplateBase): + title_spacing = Option(Dimension, 12*PT, 'Vertical spacing between the' + ' title and the body text') + title_page_header_text = Option(StyledText, None, 'The text to place in the' + ' header on the title page') + title_page_footer_text = Option(StyledText, + BodyPageTemplateBase.footer_text.default_value, + 'The text to place in the footer on the' + ' title page') + + def page(self, document_part, page_number, chain): + return ArticleBodyPage(document_part, self, page_number, chain) + + +class ArticleBodyPage(BodyPage): + configuration_class = ArticleBodyPageTemplate + + def get_header_footer_contenttop(self): + if self.number > 1: + return super().get_header_footer_contenttop() + + self.title = DownExpandingContainer('title', CONTENT, self.body, 0, 0) + metadata = self.document.metadata + p = lambda key, style: Paragraph(metadata[key], style=style) + if 'title' in metadata: + self.title << p('title', 'title page title') + if 'subtitle' in metadata: + self.title << p('subtitle', 'title page subtitle') + if 'author' in metadata: + self.title << p('author', 'title page author') + if self.document.get_option('abstract_location') == 'title': + with suppress(KeyError): + self.title << metadata['abstract'] + + header = try_copy(self.get_option('title_page_header_text')) + footer = try_copy(self.get_option('title_page_footer_text')) + return (header, footer, + self.title.bottom + self.get_option('title_spacing')) + + +class AbstractLocation(OptionSet): + """Where to place the article's abstract""" + + values = 'title', 'body' + + +class Article(DocumentTemplate): + stylesheet = OverrideDefault(sphinx_article) + abstract_location = Option(AbstractLocation, 'title', + 'Where to place the abstract') + + parts = OverrideDefault(['contents']) + + # default document part templates + contents = ArticleContentsPartTemplate(page_number_format='number') + + # default page templates + page = ArticleBodyPageTemplate(page_size=Var('paper_size'), + left_margin=1.2*CM, + right_margin=1.2*CM, + top_margin=1.8*CM, + bottom_margin=1.6*CM, + header_footer_distance=2*PT) + contents_page = ArticleBodyPageTemplate(base='page') diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/book.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/book.py new file mode 100644 index 000000000..9abe8dd02 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/templates/book.py @@ -0,0 +1,148 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +from ..attribute import OverrideDefault, Var +from ..dimension import INCH +from ..image import ListOfFiguresSection +from ..index import IndexSection +from ..paragraph import Paragraph +from ..reference import (Field, PAGE_NUMBER, DOCUMENT_TITLE, DOCUMENT_SUBTITLE, + SECTION_NUMBER, SECTION_TITLE) +from ..strings import StringField +from ..structure import TableOfContentsSection +from ..stylesheets import sphinx +from ..table import ListOfTablesSection +from ..template import (TitlePageTemplate, BodyPageTemplate, DocumentTemplate, + FixedDocumentPartTemplate, ContentsPartTemplate, + TitlePartTemplate, DocumentPartTemplate) +from ..text import Tab + + +FRONT_MATTER_TITLE = [Paragraph(Field(SECTION_TITLE(1)), + style='front matter section title')] + + +BODY_TITLE = [Paragraph(StringField('chapter') + ' ' + + Field(SECTION_NUMBER(1), style='number'), + style='body matter chapter label'), + Paragraph(Field(SECTION_TITLE(1)), + style='body matter chapter title')] + + +class BackMatterTemplate(DocumentPartTemplate): + index_section = IndexSection() + + def _flowables(self, document): + if document.index_entries: + yield self.index_section + + +class Book(DocumentTemplate): + stylesheet = OverrideDefault(sphinx) + + parts = OverrideDefault(['title', 'front_matter', + 'contents', 'back_matter']) + + # default document part templates + cover = FixedDocumentPartTemplate(drop_if_empty=False, + page_number_format=None, + end_at_page='left') + title = TitlePartTemplate(page_number_format='number', + end_at_page='left') + front_matter = FixedDocumentPartTemplate( + flowables=[TableOfContentsSection(), + ListOfFiguresSection(), + ListOfTablesSection()], + page_number_format='lowercase roman', + end_at_page='left') + contents = ContentsPartTemplate(page_number_format='number', + end_at_page='left') + back_matter = BackMatterTemplate(page_number_format='continue', + end_at_page='left') + + # default page templates + page = \ + BodyPageTemplate(page_size=Var('paper_size'), + left_margin=1*INCH, + right_margin=1*INCH, + top_margin=1*INCH, + bottom_margin=1*INCH) + + cover_page = BodyPageTemplate(base='page') + title_page = TitlePageTemplate(base='page') + + front_matter_page = \ + BodyPageTemplate(base='page', + header_footer_distance=0, + header_text=None) + + front_matter_right_page = \ + BodyPageTemplate(base='front_matter_page', + footer_text=Tab() + Tab() + Field(PAGE_NUMBER), + chapter_header_text=None, + chapter_footer_text=Tab() + Tab() + Field(PAGE_NUMBER), + chapter_title_height=2.5*INCH, + chapter_title_flowables=FRONT_MATTER_TITLE, + sideways='right') + + front_matter_left_page = \ + BodyPageTemplate(base='front_matter_page', + footer_text=Field(PAGE_NUMBER), + sideways='left') + + contents_page = \ + BodyPageTemplate(base='page', + header_footer_distance=0) + + contents_right_page = \ + BodyPageTemplate(base='contents_page', + header_text=(Tab() + Tab() + Field(DOCUMENT_TITLE) + + ', ' + Field(DOCUMENT_SUBTITLE)), + footer_text=(Field(SECTION_NUMBER(2)) + + '. ' + Field(SECTION_TITLE(2)) + + Tab() + Tab() + Field(PAGE_NUMBER)), + chapter_header_text=None, + chapter_footer_text=Tab() + Tab() + Field(PAGE_NUMBER), + chapter_title_height=2.4*INCH, + chapter_title_flowables=BODY_TITLE, + sideways='right') + + contents_left_page = \ + BodyPageTemplate(base='contents_page', + header_text=(Field(DOCUMENT_TITLE) + ', ' + + Field(DOCUMENT_SUBTITLE)), + footer_text=(Field(PAGE_NUMBER) + Tab() + Tab() + + StringField('chapter') + + ' ' + Field(SECTION_NUMBER(1)) + + '. ' + Field(SECTION_TITLE(1))), + sideways='left') + + back_matter_page = \ + BodyPageTemplate(base='page', + columns=2, + header_footer_distance=0) + + back_matter_right_page = \ + BodyPageTemplate(base='back_matter_page', + header_text=(Tab() + Tab() + Field(DOCUMENT_TITLE) + + ', ' + Field(DOCUMENT_SUBTITLE)), + footer_text=(Field(SECTION_TITLE(1)) + + Tab() + Tab() + Field(PAGE_NUMBER)), + chapter_header_text=None, + chapter_footer_text=Tab() + Tab() + Field(PAGE_NUMBER), + chapter_title_height=2.5*INCH, + chapter_title_flowables=FRONT_MATTER_TITLE, + sideways='right') + + back_matter_left_page = \ + BodyPageTemplate(base='back_matter_page', + header_text=(Field(DOCUMENT_TITLE) + ', ' + + Field(DOCUMENT_SUBTITLE)), + footer_text=(Field(PAGE_NUMBER) + Tab() + Tab() + + Field(SECTION_TITLE(1))), + sideways='left') diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/text.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/text.py new file mode 100644 index 000000000..72f353ac3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/text.py @@ -0,0 +1,722 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +""" +Classes for describing styled text: + +* :class:`StyledText`: Base class for styled text. +* :class:`SingleStyledText`: Text of a single style. +* :class:`MixedStyledText`: Text where different substrings can have different + styles. +* :class:`TextStyle`: Style class specifying the font and other styling of text. + +Some characters with special properties and are represented by special classes: + +* :class:`Space` +* :class:`FixedWidthSpace` +* :class:`NoBreakSpace` +* :class:`Spacer +* :class:`Tab` +* :class:`Newline` + +""" + +import re + +from ast import literal_eval +from html.entities import name2codepoint +from token import NAME, STRING, NEWLINE, NL, LPAR, RPAR, ENDMARKER + +from .annotation import AnchorAnnotation, LinkAnnotation, AnnotatedSpan +from .attribute import (AttributeType, AcceptNoneAttributeType, Attribute, + Bool, Integer, ParseError) +from .color import Color, BLACK, RED +from .dimension import Dimension, PT +from .font import Typeface +from .fonts import adobe14 +from .font.style import (FontWeight, FontSlant, FontWidth, FontVariant, + TextPosition) +from .style import Style, Styled, StyledMeta +from .util import NotImplementedAttribute + + +__all__ = ['InlineStyle', 'InlineStyled', 'TextStyle', 'StyledText', + 'WarnInline', 'SingleStyledText', 'MixedStyledText', + 'ConditionalMixedStyledText', + 'Space', 'FixedWidthSpace', 'NoBreakSpace', 'Spacer', 'Tab', + 'Newline', 'Superscript', 'Subscript'] + + +class Locale(AttributeType): + """Selects a language""" + + REGEX = re.compile(r'^[a-z]{2}_[A-Z]{2}$') + + @classmethod + def check_type(cls, value): + return cls.REGEX.match(value) is not None + + @classmethod + def from_tokens(cls, tokens, source): + token = next(tokens) + if not cls.check_type(token.string): + raise ValueError("'{}' is not a valid locale. Needs to be of the " + "form 'en_US'.".format(token.string)) + return token.string + + @classmethod + def doc_format(cls): + return 'locale identifier in the ``_`` format' + + +LANGUAGE_DEFAULT = 'language-default' + + +class NoBreakAfter(AttributeType, list): + """List of words after which no line break will be allowed""" + + def __str__(self): + return ', '.join(str(word) for word in self) + + @classmethod + def check_type(cls, value): + return (value == LANGUAGE_DEFAULT + or (isinstance(value, (list, tuple)) + and all(isinstance(item, str) for item in value))) + + @classmethod + def from_string(cls, string, source=None): + if string.strip().lower() == LANGUAGE_DEFAULT: + return LANGUAGE_DEFAULT + return string.split() + + @classmethod + def doc_format(cls): + return f'``{LANGUAGE_DEFAULT}``, or a space-separated list of words' + + +class InlineStyled(Styled): + """""" + + @property + def referenceable_ids(self): + try: + return self.parent.referenceable_ids + except AttributeError: + return [self.parent.referenceable.id, + *self.parent.referenceable.secondary_ids] + + def _annotated_spans(self, container): + spans = self.spans(container) + ann = self.get_annotation(container) + if not ann: + yield from spans + return + anchor = ann if isinstance(ann, AnchorAnnotation) else None + link = ann if isinstance(ann, LinkAnnotation) else None + for span in spans: + if isinstance(span, AnnotatedSpan): + if anchor and not span.anchor_annotation: + span.anchor_annotation = anchor + elif link and not span.link_annotation: + span.link_annotation = link + yield span + else: + yield AnnotatedSpan(span, anchor=anchor, link=link) + + def wrapped_spans(self, container): + """Generator yielding all spans in this inline element (flattened)""" + before = self.get_style('before', container) + if before is not None: + yield from before.copy(self.parent).wrapped_spans(container) + if not self.get_style('hide', container): + yield from self._annotated_spans(container) + after = self.get_style('after', container) + if after is not None: + yield from after.copy(self.parent).wrapped_spans(container) + + def is_title_reference(self, container): + return False + + def copy(self, parent=None): + raise NotImplementedError + + def spans(self, container): + raise NotImplementedError + + +class CharacterLike(Styled): + def __repr__(self): + return "{0}(style={1})".format(self.__class__.__name__, self.style) + + @property + def width(self): + raise NotImplementedError + + def height(self, document): + raise NotImplementedError + + def render(self): + raise NotImplementedError + + +NAME2CHAR = {name: chr(codepoint) + for name, codepoint in name2codepoint.items()} + + +class StyledText(InlineStyled, AcceptNoneAttributeType): + """Base class for text that has a :class:`TextStyle` associated with it.""" + + def __add__(self, other): + """Return the concatenation of this styled text and `other`. If `other` + is `None`, this styled text itself is returned.""" + return MixedStyledText([self, other]) if other is not None else self + + def __radd__(self, other): + """Return the concatenation of `other` and this styled text. If `other` + is `None`, this styled text itself is returned.""" + return MixedStyledText([other, self]) if other is not None else self + + def __iadd__(self, other): + """Return the concatenation of this styled text and `other`. If `other` + is `None`, this styled text itself is returned.""" + return self + other + + @classmethod + def check_type(cls, value): + return super().check_type(value) or isinstance(value, str) + + @classmethod + def from_tokens(cls, tokens, source): + items = [] + while tokens.next.type: + if tokens.next.type == NAME: + items.append(InlineFlowable.from_tokens(tokens, source)) + elif tokens.next.type == STRING: + items.append(cls.text_from_tokens(tokens)) + elif tokens.next.type in (NEWLINE, NL): + next(tokens) + elif tokens.next.type == ENDMARKER: + break + else: + raise StyledTextParseError('Expecting text or inline flowable') + if len(items) == 1: + first, = items + return first + return MixedStyledText(items, source=source) + + @classmethod + def text_from_tokens(cls, tokens): + text = literal_eval(next(tokens).string) + if tokens.next.exact_type == LPAR: + _, start_col = next(tokens).end + for token in tokens: + if token.exact_type == RPAR: + _, end_col = token.start + style = token.line[start_col:end_col].strip() + break + elif token.type == NEWLINE: + raise StyledTextParseError('No newline allowed in ' + 'style name') + else: + style = None + return cls._substitute_variables(text, style) + + @classmethod + def doc_repr(cls, value): + return '``{}``'.format(value) if value else '(no value)' + + @classmethod + def doc_format(cls): + return ("a list of styled text strings, separated by spaces. A styled " + "text string is a quoted string (``'`` or ``\"``), optionally " + "followed by a style name enclosed in braces: " + "``'text string' (style name)``") + + @classmethod + def validate(cls, value): + if isinstance(value, str): + value = SingleStyledText(value) + return super().validate(value) + + @classmethod + def _substitute_variables(cls, text, style): + def substitute_controlchars_htmlentities(string, style=None): + try: + return ControlCharacter.all[string]() + except KeyError: + return SingleStyledText(string.format(**NAME2CHAR), style=style) + + return Field.substitute(text, substitute_controlchars_htmlentities, + style=style) + + def __str__(self): + return self.to_string(None) + + def _short_repr_args(self, flowable_target): + yield self._short_repr_string(flowable_target) + + def to_string(self, flowable_target): + """Return the text content of this styled text.""" + raise NotImplementedError('{}.to_string'.format(type(self).__name__)) + + @property + def paragraph(self): + return self.parent.paragraph + + def fallback_to_parent(self, attribute): + return attribute not in ('position', 'before', 'after') + + position = {TextPosition.SUPERSCRIPT: 1 / 3, + TextPosition.SUBSCRIPT: - 1 / 6} + position_size = 583 / 1000 + + def is_script(self, container): + """Returns `True` if this styled text is super/subscript.""" + position = self.get_style('position', container) + return position != TextPosition.NORMAL + + def script_level(self, container): + """Nesting level of super/subscript.""" + try: + level = self.parent.script_level(container) + except AttributeError: + level = -1 + return level + 1 if self.is_script(container) else level + + def height(self, container): + """Font size after super/subscript size adjustment.""" + height = float(self.get_style('font_size', container)) + script_level = self.script_level(container) + if script_level > -1: + height *= self.position_size * (5 / 6)**script_level + return height + + def y_offset(self, container): + """Vertical baseline offset (up is positive).""" + offset = (self.parent.y_offset(container) + if hasattr(self.parent, 'y_offset') else 0) + if self.is_script(container): + position = self.get_style('position', container) + offset += self.parent.height(container) * self.position[position] + return offset + + @property + def items(self): + """The list of items in this StyledText.""" + return [self] + + +class StyledTextParseError(ParseError): + pass + + +class InlineStyle(Style): + before = Attribute(StyledText, None, 'Item to insert before this one') + after = Attribute(StyledText, None, 'Item to insert after this one') + + +InlineStyled.style_class = InlineStyle + + +class TextStyle(InlineStyle): + typeface = Attribute(Typeface, adobe14.times, 'Typeface to set the text in') + font_weight = Attribute(FontWeight, 'medium', 'Thickness of character ' + 'outlines relative to their ' + 'height') + font_slant = Attribute(FontSlant, 'upright', 'Slope style of the font') + font_width = Attribute(FontWidth, 'normal', 'Stretch of the characters') + font_size = Attribute(Dimension, 10*PT, 'Height of characters') + font_color = Attribute(Color, BLACK, 'Color of the font') + font_variant = Attribute(FontVariant, 'normal', 'Variant of the font') + # TODO: text_case = Attribute(TextCase, None, 'Change text casing') + position = Attribute(TextPosition, 'normal', 'Vertical text position') + kerning = Attribute(Bool, True, 'Improve inter-letter spacing') + ligatures = Attribute(Bool, True, 'Run letters together where possible') + # TODO: character spacing + hyphenate = Attribute(Bool, True, 'Allow words to be broken over two lines') + hyphen_chars = Attribute(Integer, 2, 'Minimum number of characters in a ' + 'hyphenated part of a word') + hyphen_lang = Attribute(Locale, 'en_US', 'Language to use for hyphenation. ' + 'Accepts locale codes such as ' + "'en_US'") + no_break_after = Attribute(NoBreakAfter, LANGUAGE_DEFAULT, + 'Prevent a line break after these words') + + + +StyledText.style_class = TextStyle + + +class WarnInline(StyledText): + """Inline element that emits a warning + + Args: + message (str): the warning message to emit + + """ + + def __init__(self, message, parent=None): + super().__init__(parent=parent) + self.message = message + + def to_string(self, flowable_target): + return '' + + def spans(self, container): + self.warn(self.message, container) + return iter([]) + + +class SingleStyledTextBase(StyledText): + """Styled text where all text shares a single :class:`TextStyle`.""" + + def __repr__(self): + """Return a representation of this single-styled text; the text string + along with a representation of its :class:`TextStyle`.""" + return "{0}('{1}', style={2})".format(self.__class__.__name__, + self.text(None), self.style) + + def text(self, flowable_target, **kwargs): + raise NotImplementedError + + def to_string(self, flowable_target): + return self.text(flowable_target) + + def font(self, container): + """The :class:`Font` described by this single-styled text's style. + + If the exact font style as described by the `font_weight`, + `font_slant` and `font_width` style attributes is not present in the + `typeface`, the closest font available is returned instead, and a + warning is printed.""" + typeface = self.get_style('typeface', container) + weight = self.get_style('font_weight', container) + slant = self.get_style('font_slant', container) + width = self.get_style('font_width', container) + return typeface.get_font(weight=weight, slant=slant, width=width) + + def ascender(self, container): + return (self.font(container).ascender_in_pt + * float(self.get_style('font_size', container))) + + def descender(self, container): + return (self.font(container).descender_in_pt + * float(self.get_style('font_size', container))) + + def line_gap(self, container): + return (self.font(container).line_gap_in_pt + * float(self.get_style('font_size', container))) + + def spans(self, container): + yield self + + +ESCAPE = str.maketrans({"'": r"\'", + '\n': r'\n', + '\t': r'\t'}) + + +class SingleStyledText(SingleStyledTextBase): + """Text with a single style applied""" + + def __init__(self, text, style=None, parent=None, source=None): + super().__init__(style=style, parent=parent, source=source) + self._text = text + + def __str__(self): + result = "'{}'".format(self._text.translate(ESCAPE)) + if self.style is not None: + result += ' ({})'.format(self.style) + return result + + def text(self, container, **kwargs): + return self._text + + def copy(self, parent=None): + return type(self)(self._text, style=self.style, parent=parent, + source=self.source) + + +class MixedStyledTextBase(StyledText): + def to_string(self, flowable_target): + return ''.join(item.to_string(flowable_target) + for item in self.children(flowable_target)) + + def spans(self, container): + """Recursively yield all the :class:`SingleStyledText` items in this + mixed-styled text.""" + for child in self.children(container): + container.register_styled(child) + yield from child.wrapped_spans(container) + + def children(self, flowable_target): + raise NotImplementedError + + +class MixedStyledText(MixedStyledTextBase, list): + """Concatenation of styled text + + Args: + text_or_items (str, StyledText or iterable of these): mixed styled text + style: see :class:`.Styled` + parent: see :class:`.DocumentElement` + + """ + + _assumed_equal = {} + + def __init__(self, text_or_items, id=None, style=None, parent=None, + source=None): + """Initialize this mixed-styled text as the concatenation of + `text_or_items`, which is either a single text item or an iterable of + text items. Individual text items can be :class:`StyledText` or + :class:`str` objects. This mixed-styled text is set as the parent of + each of the text items. + + See :class:`StyledText` for information on `style`, and `parent`.""" + super().__init__(id=id, style=style, parent=parent, source=source) + if isinstance(text_or_items, (str, StyledText)): + text_or_items = (text_or_items, ) + for item in text_or_items: + self.append(item) + + def __add__(self, other): + if isinstance(other, str): + other = SingleStyledText(other) + if self.style == other.style: + return MixedStyledText(self.items + other.items, + style=self.style, parent=self.parent) + else: + return super().__add__(other) + + def __repr__(self): + """Return a representation of this mixed-styled text; its children + along with a representation of its :class:`TextStyle`.""" + return '{}{} (style={})'.format(self.__class__.__name__, + super().__repr__(), self.style) + + def __str__(self): + assert self.style is None + return ' '.join(str(item) for item in self) + + def __eq__(self, other): + # avoid infinite recursion due to the 'parent' attribute + assumed_equal = type(self)._assumed_equal.setdefault(id(self), set()) + other_id = id(other) + if other_id in assumed_equal: + return True + try: + assumed_equal.add(other_id) + return super().__eq__(other) and list.__eq__(self, other) + finally: + assumed_equal.remove(other_id) + + def prepare(self, flowable_target): + super().prepare(flowable_target) + for item in self: + item.prepare(flowable_target) + + def append(self, item): + """Append `item` (:class:`StyledText` or :class:`str`) to the end of + this mixed-styled text. + + The parent of `item` is set to this mixed-styled text.""" + if isinstance(item, str): + item = SingleStyledText(item) + item.parent = self + list.append(self, item) + + @property + def items(self): + return list(self) + + def children(self, flowable_target): + return self.items + + def copy(self, parent=None): + items = [item.copy() for item in self.items] + return type(self)(items, style=self.style, parent=parent, + source=self.source) + + +class ConditionalMixedStyledText(MixedStyledText): + def __init__(self, text_or_items, document_option, style=None, parent=None): + super().__init__(text_or_items, style=style, parent=parent) + self.document_option = document_option + + def spans(self, container): + if container.document.options[self.document_option]: + for span in super().spans(container): + yield span + + +class Character(SingleStyledText): + """:class:`SingleStyledText` consisting of a single character.""" + + +class Space(Character): + """A space character.""" + + def __init__(self, fixed_width=False, style=None, parent=None): + """Initialize this space. `fixed_width` specifies whether this space + can be stretched (`False`) or not (`True`) in justified paragraphs. + See :class:`StyledText` about `style` and `parent`.""" + super().__init__(' ', style=style, parent=parent) + self.fixed_width = fixed_width + + +class FixedWidthSpace(Space): + """A fixed-width space character.""" + + def __init__(self, style=None, parent=None): + """Initialize this fixed-width space with `style` and `parent` (see + :class:`StyledText`).""" + super().__init__(True, style=style, parent=parent) + + +class NoBreakSpace(Character): + """Non-breaking space character. + + Lines cannot wrap at a this type of space.""" + + def __init__(self, style=None, parent=None): + """Initialize this non-breaking space with `style` and `parent` (see + :class:`StyledText`).""" + super().__init__(' ', style=style, parent=parent) + + +class Spacer(FixedWidthSpace): + """A space of a specific width.""" + + def __init__(self, width, style=None, parent=None): + """Initialize this spacer at `width` with `style` and `parent` (see + :class:`StyledText`).""" + super().__init__(style=style, parent=parent) + self._width = width + + def widths(self): + """Generator yielding the width of this spacer.""" + yield float(self._width) + + +class Box(Character): + def __init__(self, width, height, depth, ps): + super().__init__('?') + self._width = width + self._height = height + self.depth = depth + self.ps = ps + + @property + def width(self): + return self._width + + def height(self, document): + return self._height + + def render(self, canvas, x, y): + box_canvas = canvas.new(x, y - self.depth, self.width, + self.height + self.depth) + print(self.ps, file=box_canvas.psg_canvas) + canvas.append(box_canvas) + return self.width + + +class ControlCharacterMeta(StyledMeta): + def __new__(metacls, classname, bases, cls_dict): + cls = super().__new__(metacls, classname, bases, cls_dict) + try: + ControlCharacter.all[cls.character] = cls + except NameError: + pass + return cls + + +class ControlCharacter(Character, metaclass=ControlCharacterMeta): + """A non-printing character that affects typesetting of the text near it.""" + + character = NotImplementedAttribute() + exception = Exception + all = {} + + def __init__(self, style=None, parent=None, source=None): + """Initialize this control character with it's unicode `char`.""" + super().__init__(self.character, style=style, parent=parent, + source=source) + + def __repr__(self): + """A textual representation of this control character.""" + return self.__class__.__name__ + + def copy(self, parent=None): + return type(self)(style=self.style, parent=parent, source=self.source) + + @property + def width(self): + """Raises the exception associated with this control character. + + This method is called during typesetting.""" + raise self.exception + + +class NewlineException(Exception): + """Exception signaling a :class:`Newline`.""" + + +class Newline(ControlCharacter): + """Control character ending the current line and starting a new one.""" + + character = '\n' + exception = NewlineException + + +class Tab(ControlCharacter): + """Tabulator character, used for vertically aligning text. + + The :attr:`tab_width` attribute is set a later point in time when context + (:class:`TabStop`) is available.""" + + character = '\t' + + +# predefined text styles + +SUPERSCRIPT_STYLE = TextStyle(position='superscript') +SUBSCRIPT_STYLE = TextStyle(position='subscript') + + +class Superscript(MixedStyledText): + """Superscript.""" + + def __init__(self, text, parent=None, source=None): + """Accepts a single instance of :class:`str` or :class:`StyledText`, or + an iterable of these.""" + super().__init__(text, style=SUPERSCRIPT_STYLE, parent=parent, + source=source) + + +class Subscript(MixedStyledText): + """Subscript.""" + + def __init__(self, text, parent=None, source=None): + """Accepts a single instance of :class:`str` or :class:`StyledText`, or + an iterable of these.""" + super().__init__(text, style=SUBSCRIPT_STYLE, parent=parent, + source=source) + + +ERROR_STYLE = TextStyle(font_color=RED) + + +class ErrorText(SingleStyledText): + def __init__(self, text, style=ERROR_STYLE, parent=None, source=None): + super().__init__(text, style=style, parent=parent, source=source) + + +from .reference import Field +from .inline import InlineFlowable diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/util.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/util.py new file mode 100644 index 000000000..83999f83c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/util.py @@ -0,0 +1,345 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + +""" +Collection of miscellaneous classes, functions and decorators: + +* :class:`Decorator`: Superclass for decorator classes of the decorator design + pattern +* :func:`all_subclasses`: Generator yielding all subclasses of `cls` recursively +* :func:`intersperse`: Generator inserting an element between every two elements + of a given iterable +* :class:`cached_property`: Caching property decorator +* :func:`timed`: Method decorator printing the time the method call took +* :class:`ReadAliasAttribute`: Descriptor creates a read-only alias for another + attribute +""" + + +import ntpath +import os +import posixpath +import time + +from collections import OrderedDict +from collections.abc import MutableMapping +from functools import wraps, partial +from itertools import tee +from weakref import ref + + +__all__ = ['INF', 'all_subclasses', 'clamp', 'intersperse', 'itemcount', + 'PeekIterator', 'posix_path', + 'consumer', 'cached', 'cached_property', 'cached_generator', + 'class_property', 'timed', 'Decorator', 'ReadAliasAttribute', + 'NotImplementedAttribute', 'NamedDescriptor', + 'WithNamedDescriptors', 'ContextManager', + 'WeakMutableKeyDictionary', + 'VersionError'] + + +# constants + +INF = float('+inf') +DEFAULT = object() + + +# functions + +def all_subclasses(cls): + """Generator yielding all subclasses of `cls` recursively""" + for subcls in cls.__subclasses__(): + yield subcls + for subsubcls in all_subclasses(subcls): + yield subsubcls + + +def clamp(min_value, value, max_value): + """Limit `value` to a range between `min_value` and `max_value`""" + return max(min_value, min(value, max_value)) + + +def intersperse(iterable, element): + """Generator yielding all elements of `iterable`, but with `element` + inserted between each two consecutive elements""" + iterable = iter(iterable) + yield next(iterable) + for next_from_iterable in iterable: + yield element + yield next_from_iterable + + +def itemcount(iterable): + """Count the number of items in `iterable`""" + return sum(1 for _ in iterable) + + +class PeekIterator(object): + """An iterator that allows inspecting the next element""" + + def __init__(self, iterable): + self.next = None + self._iterator = iter(iterable) + self.at_end = False + self._advance() + self._saved_states = [] + + def push_state(self): + """Save the current state on a stack""" + self._iterator, saved_iter = tee(self._iterator) + state = saved_iter, self.next, self.at_end + self._saved_states.append(state) + + def pop_state(self, discard=False): + """Restore or discard the last saved state + + Args: + discard (bool): if True, discard the last saved state + + """ + state = self._saved_states.pop() + if not discard: + self._iterator, self.next, self.at_end = state + + def _advance(self): + result = self.next + try: + self.next = next(self._iterator) + except StopIteration: + self.next = None + self.at_end = True + return result + + def __iter__(self): + return self + + def __next__(self): + if self.at_end: + raise StopIteration + return self._advance() + + +def posix_path(path): + return os.path.normpath(path).replace(ntpath.sep, posixpath.sep) + + +# function decorators + +def consumer(function): + """Decorator that makes a generator function automatically advance to its + first yield point when initially called (PEP 342).""" + @wraps(function) + def wrapper(*args, **kwargs): + generator = function(*args, **kwargs) + next(generator) + return generator + return wrapper + + +# method decorators + +def cached(function): + """Method decorator caching a method's returned values.""" + cache_variable = '_cached_' + function.__name__ + @wraps(function) + def function_wrapper(obj, *args, **kwargs): + # values are cached in a dict stored in the object + try: + cache = getattr(obj, cache_variable) + except AttributeError: + cache = {} + setattr(obj, cache_variable, cache) + args_kwargs = args + tuple(kwargs.values()) + try: + return cache[args_kwargs] + except KeyError: + cache_value = function(obj, *args, **kwargs) + cache[args_kwargs] = cache_value + return cache_value + return function_wrapper + + +class cached_property(property): + """Property decorator that additionally caches the return value of the + decorated getter method.""" + def __init__(self, function, *args, **kwargs): + super().__init__(function, *args, **kwargs) + self._cache_variable = '_cached_' + function.__name__ + + def __get__(self, obj, *args): + # the cached value is stored as an attribute of the object + cache_variable = self._cache_variable + try: + return getattr(obj, cache_variable) + except AttributeError: + cache_value = super().__get__(obj, *args) + setattr(obj, cache_variable, cache_value) + return cache_value + + +def cached_generator(function): + """Method decorator caching a generator's yielded items.""" + cache_variable = '_cached_' + function.__name__ + @wraps(function) + def function_wrapper(obj, *args, **kwargs): + # values are cached in a list stored in the object + try: + for item in getattr(obj, cache_variable): + yield item + except AttributeError: + setattr(obj, cache_variable, []) + cache = getattr(obj, cache_variable) + for item in function(obj, *args, **kwargs): + cache.append(item) + yield item + return function_wrapper + + +class class_property(object): + """A read-only class property""" + def __init__(self, function): + self.function = function + + def __get__(self, obj, owner): + return self.function(owner) + + +def timed(function): + """Decorator timing the method call and printing the result to `stdout`""" + @wraps(function) + def function_wrapper(obj, *args, **kwargs): + """Wrapper function printing the time taken by the call to `function`""" + name = obj.__class__.__name__ + '.' + function.__name__ + start = time.process_time() + result = function(obj, *args, **kwargs) + print('{}: {:.4f} seconds'.format(name, time.process_time() - start)) + return result + return function_wrapper + + +class Decorator(object): + """Class simplifying the implementation of the decorater pattern, which + allows for a sort of "run-time inheritance".""" + + def __new__(cls, decoratee, *args, **kwargs): + """A decorator takes the object to be decorated as its first argument + `decoratee`. + + Returns an object of a class with a name that is the concatenation of + the class names of the decorator and decorated classes. It also inherits + from these two classes.""" + cls = type(cls.__name__ + decoratee.__class__.__name__, + (cls, decoratee.__class__), decoratee.__dict__) + return object.__new__(cls) + + def __init__(self, decoratee, *args, **kwargs): + """The `decoratee` is stored in the decorator as the :attr:`_decoratee` + attribute, where it is available for access by the decorator class.""" + self._decoratee = decoratee + + +# descriptors + +# from "Caching and aliasing with descriptors (Python recipe)" by Denis Otkidach +class ReadAliasAttribute(object): + """Descriptor creates a read-only alias for another attribute.""" + + def __init__(self, name): + self.name = name + + def __get__(self, inst, cls): + if inst is None: + return self + return getattr(inst, self.name) + + +class NotImplementedAttribute(object): + """Descriptor raising :class:`NotImplementedError` on attribute access""" + def __get__(self, instance, owner): + raise NotImplementedError('Attribute implementation is missing in ' + 'subclass') + + +# from http://code.activestate.com/recipes/577426-auto-named-decriptors/ +class NamedDescriptor(object): + """Base class for descriptor's whose name will be derived from the attribute + name the descriptor instance is assigned to. The `name` attribute will hold + the descriptor name.""" + + +class WithNamedDescriptors(type): + """Set the names of the descriptors""" + + @classmethod + def __prepare__(metacls, name, bases): + return OrderedDict() # keeps the order of member variables (PEP3115) + + def __new__(metacls, classname, bases, cls_dict): + for name, attr in cls_dict.items(): + if isinstance(attr, NamedDescriptor): + attr.name = name + return super().__new__(metacls, classname, bases, cls_dict) + + +# context managers + +class ContextManager(object): + """Base for classes that can only be used as a context manager. Raises + :class:`TypeError` if any other attributes besides :meth:`__enter__` and + :meth:`__exit__` are accessed.""" + + def __getattr__(self, item): + raise TypeError('{} is a context manager'.format(type(self))) + + def __enter__(self): + raise NotImplementedError + + def __exit__(self, exc_type, exc_value, traceback): + raise NotImplementedError + + +# http://stackoverflow.com/a/3387975/438249 +class WeakMutableKeyDictionary(MutableMapping): + """A dictionary that accepts mutable keys and references them weakly + + Entries in the dictionary will be discarded when there is no longer a + strong reference to the key. This is similar to ``WeakKeyDictionary`` + from the Python standard library, with the addition of support for mutable + keys.""" + + def __init__(self): + self.store = dict() + + def __getitem__(self, obj): + try: + obj_weakref, value = self.store[id(obj)] + except KeyError: + raise KeyError(obj) + return value + + def __setitem__(self, obj, value): + obj_id = id(obj) + self.store[obj_id] = ref(obj, partial(self._remove, obj_id)), value + + def _remove(self, obj_id, _): + del self.store[obj_id] + + def __delitem__(self, obj): + self[obj] # check the weakref + del self.store[id(obj)] + + def __iter__(self): + return iter(self.store) + + def __len__(self): + return len(self.store) + + +# exceptions + +class VersionError(Exception): + """An incompatible version of a dependency is installed""" diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/warnings.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/warnings.py new file mode 100644 index 000000000..324f0b358 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh/warnings.py @@ -0,0 +1,36 @@ +# This file is part of rinohtype, the Python document preparation system. +# +# Copyright (c) Brecht Machiels. +# +# Use of this source code is subject to the terms of the GNU Affero General +# Public License v3. See the LICENSE file or http://www.gnu.org/licenses/. + + +import sys +import warnings + +from warnings import formatwarning as standard_formatwarning +from warnings import showwarning as standard_showwarning + + +class RinohWarning(UserWarning): + @property + def message(self): + return self.args[0] + + +def warn(message): + warnings.warn(message, category=RinohWarning, stacklevel=2) + + +def showwarning(warning, category, filename, lineno, file=None, line=None): + if category == RinohWarning: + if file is None: + file = sys.stderr + file.write('\r{}\n'.format(warning.message)) + else: + return standard_showwarning(warning, category, filename, lineno, file, + line) + + +warnings.showwarning = showwarning diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/METADATA new file mode 100644 index 000000000..6b5ffb3a3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/METADATA @@ -0,0 +1,33 @@ +Metadata-Version: 2.1 +Name: rinoh-typeface-dejavuserif +Version: 0.1.3 +Summary: DejaVu Serif typeface +Home-page: https://github.com/brechtm/rinoh-typeface-dejavuserif +Author: Brecht Machiels +Author-email: brecht@mos6581.org +License: Bitstream Vera Fonts Copyright, Arev Fonts Copyright, Public Domain +Keywords: opentype font +Platform: UNKNOWN +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: End Users/Desktop +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Text Processing :: Fonts +Requires-Dist: rinohtype + +========================== +rinoh-typeface-dejavuserif +========================== + +This package provides the `DejaVu Serif`_ typeface for use with rinohtype_. The +DejaVu fonts are a font family based on the `Vera Fonts`_. Its purpose is to +provide a wider range of characters while maintaining the original look and +feel through the process of collaborative development, under a Free license. + + +.. _DejaVu Serif: http://dejavu-fonts.org +.. _Vera Fonts: http://gnome.org/fonts/ +.. _rinohtype: https://github.com/brechtm/rinohtype#readme + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/RECORD new file mode 100644 index 000000000..b8af361f5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/RECORD @@ -0,0 +1,24 @@ +rinoh_typeface_dejavuserif-0.1.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +rinoh_typeface_dejavuserif-0.1.3.dist-info/METADATA,sha256=cPDB6usGSIzmjVg0p0LQNipSZnBWwuVQ2uL21NwfFBk,1184 +rinoh_typeface_dejavuserif-0.1.3.dist-info/RECORD,, +rinoh_typeface_dejavuserif-0.1.3.dist-info/WHEEL,sha256=EVRjI69F5qVjm_YgqcTXPnTAv3BfSUr0WVAHuSP3Xoo,92 +rinoh_typeface_dejavuserif-0.1.3.dist-info/entry_points.txt,sha256=Z0t8V-su3xm3vA0iu96HD2kgyJI5fq49yRcvwxbBpYs,70 +rinoh_typeface_dejavuserif-0.1.3.dist-info/top_level.txt,sha256=ofzTh6ykwVE9HtWqVr2SBlf8czwNAuRd_Wjnf_E9syc,27 +rinoh_typeface_dejavuserif/AUTHORS,sha256=kVp0LwskLqQ_y--TS20kNTtRNRRw9x2KjQDHUYkvrVA,842 +rinoh_typeface_dejavuserif/BUGS,sha256=fgegW6qgF6TsCEnRjGwKomEscfyLmRiIaMLaeJBKpqE,60 +rinoh_typeface_dejavuserif/DejaVuSerif-Bold.ttf,sha256=xHtVJ7zcjc-eqMdwVEVMWohL6sovRIUaKoI-5jnL8H8,356088 +rinoh_typeface_dejavuserif/DejaVuSerif-BoldItalic.ttf,sha256=jT3T0xNQMJBC7SJq-Cs0U5vXc1GOYQfLNScShTuoAwg,347460 +rinoh_typeface_dejavuserif/DejaVuSerif-Italic.ttf,sha256=Ljmx1Q-QuTOwDHu1Spav0_hkGbPXF8fPIC428tSXPkc,345996 +rinoh_typeface_dejavuserif/DejaVuSerif.ttf,sha256=QtHt63lS8xsfltdn7XAwsIo54MNysAcWQVGIZOK_-1E,380132 +rinoh_typeface_dejavuserif/DejaVuSerifCondensed-Bold.ttf,sha256=4JqofGDD6N5_Tmx7_uyP2UibbNl14wMyWbyj1gCa7Rg,331244 +rinoh_typeface_dejavuserif/DejaVuSerifCondensed-BoldItalic.ttf,sha256=TPxaNwDHJBP1HEu1TwlhdAGgpj7Muf9XdxPiCvoEf6U,346508 +rinoh_typeface_dejavuserif/DejaVuSerifCondensed-Italic.ttf,sha256=3-W_UzbWLKcd5BnMz3_RirGaVyRdw5KJHudjRxKYB-E,345324 +rinoh_typeface_dejavuserif/DejaVuSerifCondensed.ttf,sha256=aF3N-42vMqRT00JqTrjYgcchRt3ZmSKTVPt1dRE1eZU,346664 +rinoh_typeface_dejavuserif/LICENSE,sha256=egg7E25k0GR5TDQZdR5cfdENL2TBCP5boWHq5eWVipM,8816 +rinoh_typeface_dejavuserif/NEWS,sha256=v3LMB7y385hkvShJ7DiSFXZkn7ixfccime6stQVuit8,77009 +rinoh_typeface_dejavuserif/README.md,sha256=SC8qgClBTc1aVAZdfBELUX_J0FbMKWu6s2JFdVknpUo,2556 +rinoh_typeface_dejavuserif/__init__.py,sha256=zR-1aByizr5QwEqmdUh63uT4XJ7aRQka50f3RSLXPTs,1140 +rinoh_typeface_dejavuserif/__pycache__/__init__.cpython-312.pyc,, +rinoh_typeface_dejavuserif/langcover.txt,sha256=SiDYuKofjIdHNcoInf5u59qM1FJp0W6O77gdxq5TToQ,26001 +rinoh_typeface_dejavuserif/status.txt,sha256=1u55_JSTDNgZPUq9a6PpuI_XxuKWv61FzURTyTl9gI4,1544005 +rinoh_typeface_dejavuserif/unicover.txt,sha256=pR9Id26yvzpbvo1BComxfZpnp0h3Awe4maiZdEpRu3Y,29009 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/WHEEL new file mode 100644 index 000000000..83ff02e96 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.35.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/entry_points.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/entry_points.txt new file mode 100644 index 000000000..51edd76a3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[rinoh.typefaces] +dejavu serif = rinoh_typeface_dejavuserif:typeface + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/top_level.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/top_level.txt new file mode 100644 index 000000000..ffec1d591 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif-0.1.3.dist-info/top_level.txt @@ -0,0 +1 @@ +rinoh_typeface_dejavuserif diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/AUTHORS b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/AUTHORS new file mode 100644 index 000000000..55c2bc990 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/AUTHORS @@ -0,0 +1,57 @@ +abysta at yandex.ru +Adrian Schroeter +Aleksey Chalabyan +Andrey Valentinovich Panov +Ben Laenen +Besarion Gugushvili +Bhikkhu Pesala +Clayborne Arevalo +Dafydd Harries +Danilo Segan +Davide Viti +David Jez +David Lawrence Ramsey +Denis Jacquerye +Dwayne Bailey +Eugeniy Meshcheryakov +Frédéric Wang +Gee Fung Sit +Heikki Lindroos +James Cloos +James Crippen +John Karp +Keenan Pepper +Lars Næsbye Christensen +Lior Halphon +MaEr +Mashrab Kuvatov +Max Berger +Mederic Boquien +Michael Everson +MihailJP +Misu Moldovan +Nguyen Thai Ngoc Duy +Nicolas Mailhot +Norayr Chilingarian +Olleg Samoylov +Ognyan Kulev +Ondrej Koala Vacha +Peter Cernak +Remy Oudompheng +Roozbeh Pournader +Rouben Hakobian +Sahak Petrosyan +Sami Tarazi +Sander Vesik +Stepan Roh +Stephen Hartke +Steve Tinney +Tavmjong Bah +Thomas Henlich +Tim May +Valentin Stoykov +Vasek Stodulka +Wesley Transue +Yoshiki Ohshima + +$Id$ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/BUGS b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/BUGS new file mode 100644 index 000000000..43d1c9401 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/BUGS @@ -0,0 +1,3 @@ +See http://dejavu.sourceforge.net/wiki/index.php/Bugs + +$Id$ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif-Bold.ttf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif-Bold.ttf new file mode 100644 index 000000000..3bb755fa1 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif-Bold.ttf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif-BoldItalic.ttf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif-BoldItalic.ttf new file mode 100644 index 000000000..a36dd4b70 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif-BoldItalic.ttf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif-Italic.ttf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif-Italic.ttf new file mode 100644 index 000000000..805daf222 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif-Italic.ttf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif.ttf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif.ttf new file mode 100644 index 000000000..0b803d206 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerif.ttf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed-Bold.ttf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed-Bold.ttf new file mode 100644 index 000000000..222bf134b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed-Bold.ttf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed-BoldItalic.ttf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed-BoldItalic.ttf new file mode 100644 index 000000000..e44663695 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed-BoldItalic.ttf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed-Italic.ttf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed-Italic.ttf new file mode 100644 index 000000000..c529df31b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed-Italic.ttf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed.ttf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed.ttf new file mode 100644 index 000000000..d3959b322 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/DejaVuSerifCondensed.ttf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/LICENSE new file mode 100644 index 000000000..df52c1709 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/LICENSE @@ -0,0 +1,187 @@ +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. +Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) + + +Bitstream Vera Fonts Copyright +------------------------------ + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is +a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the fonts accompanying this license ("Fonts") and associated +documentation files (the "Font Software"), to reproduce and distribute the +Font Software, including without limitation the rights to use, copy, merge, +publish, distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to the +following conditions: + +The above copyright and trademark notices and this permission notice shall +be included in all copies of one or more of the Font Software typefaces. + +The Font Software may be modified, altered, or added to, and in particular +the designs of glyphs or characters in the Fonts may be modified and +additional glyphs or characters may be added to the Fonts, only if the fonts +are renamed to names not containing either the words "Bitstream" or the word +"Vera". + +This License becomes null and void to the extent applicable to Fonts or Font +Software that has been modified and is distributed under the "Bitstream +Vera" names. + +The Font Software may be sold as part of a larger software package but no +copy of one or more of the Font Software typefaces may be sold by itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME +FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING +ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE +FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font Software +without prior written authorization from the Gnome Foundation or Bitstream +Inc., respectively. For further information, contact: fonts at gnome dot +org. + +Arev Fonts Copyright +------------------------------ + +Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license ("Fonts") and +associated documentation files (the "Font Software"), to reproduce +and distribute the modifications to the Bitstream Vera Font Software, +including without limitation the rights to use, copy, merge, publish, +distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to +the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words "Tavmjong Bah" or the word "Arev". + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +"Tavmjong Bah Arev" names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the name of Tavmjong Bah shall not +be used in advertising or otherwise to promote the sale, use or other +dealings in this Font Software without prior written authorization +from Tavmjong Bah. For further information, contact: tavmjong @ free +. fr. + +TeX Gyre DJV Math +----------------- +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. + +Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski +(on behalf of TeX users groups) are in public domain. + +Letters imported from Euler Fraktur from AMSfonts are (c) American +Mathematical Society (see below). +Bitstream Vera Fonts Copyright +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera +is a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the fonts accompanying this license (“Fonts”) and associated +documentation +files (the “Font Software”), to reproduce and distribute the Font Software, +including without limitation the rights to use, copy, merge, publish, +distribute, +and/or sell copies of the Font Software, and to permit persons to whom +the Font Software is furnished to do so, subject to the following +conditions: + +The above copyright and trademark notices and this permission notice +shall be +included in all copies of one or more of the Font Software typefaces. + +The Font Software may be modified, altered, or added to, and in particular +the designs of glyphs or characters in the Fonts may be modified and +additional +glyphs or characters may be added to the Fonts, only if the fonts are +renamed +to names not containing either the words “Bitstream” or the word “Vera”. + +This License becomes null and void to the extent applicable to Fonts or +Font Software +that has been modified and is distributed under the “Bitstream Vera” +names. + +The Font Software may be sold as part of a larger software package but +no copy +of one or more of the Font Software typefaces may be sold by itself. + +THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME +FOUNDATION +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, +SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN +ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR +INABILITY TO USE +THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. +Except as contained in this notice, the names of GNOME, the GNOME +Foundation, +and Bitstream Inc., shall not be used in advertising or otherwise to promote +the sale, use or other dealings in this Font Software without prior written +authorization from the GNOME Foundation or Bitstream Inc., respectively. +For further information, contact: fonts at gnome dot org. + +AMSFonts (v. 2.2) copyright + +The PostScript Type 1 implementation of the AMSFonts produced by and +previously distributed by Blue Sky Research and Y&Y, Inc. are now freely +available for general use. This has been accomplished through the +cooperation +of a consortium of scientific publishers with Blue Sky Research and Y&Y. +Members of this consortium include: + +Elsevier Science IBM Corporation Society for Industrial and Applied +Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS) + +In order to assure the authenticity of these fonts, copyright will be +held by +the American Mathematical Society. This is not meant to restrict in any way +the legitimate use of the fonts, such as (but not limited to) electronic +distribution of documents containing these fonts, inclusion of these fonts +into other public domain or commercial font collections or computer +applications, use of the outline data to create derivative fonts and/or +faces, etc. However, the AMS does require that the AMS copyright notice be +removed from any derivative versions of the fonts which have been altered in +any way. In addition, to ensure the fidelity of TeX documents using Computer +Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces, +has requested that any alterations which yield different font metrics be +given a different name. + +$Id$ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/NEWS b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/NEWS new file mode 100644 index 000000000..2a2ee3708 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/NEWS @@ -0,0 +1,1455 @@ +Changes from 2.35 to 2.36 + +* Fix issue with empty glyphs in condensed typefaces in the released source files. + +Changes from 2.35 to 2.36 + +* Math: added DejaVu Math Tex Gyre by B. Jackowski, P. Strzelczyk and + P. Pianowski (on behalf of TeX users groups) +* Sans: removed dot of U+06BA in all forms +* Sans: fixed position of three dots of U+06BD in init and medi forms (by + Denis Jacquerye) +* Sans: corrected direction of contours in U+05E7 (by Lior Halphon) +* Sans: added U+1F643 (by Olleg Samoylov) +* Serif: moved up U+0360-0361 (by Gee Fung Sit 薛至峰) +* Serif: increased spacing of Roman numerals U+2161-2163, U+2165-2168, + U+216A-216B (by Gee Fung Sit 薛至峰) +* Serif: fixed anchor position of U+00E6 (by Gee Fung Sit 薛至峰) +* Sans: fixed vertical position of U+20BA (by Gee Fung Sit 薛至峰) +* Sans, Serif: fixed glyph height of Block Elements (by Gee Fung Sit 薛至峰) +* Sans, Serif: added U+A698-A699 (by Gee Fung Sit 薛至峰) +* Sans, Mono, Serif: added U+037F (by Gee Fung Sit 薛至峰) +* Mono: added U+0376-0377, U+037B-037D (by Gee Fung Sit 薛至峰) +* Serif: removed duplicate point from U+1D05 (by Gee Fung Sit 薛至峰) +* Mono: added U+20BA, U+20BD (by Gee Fung Sit 薛至峰) +* Sans: added moon symbols U+1F311-1F318 (by Ben Laenen) + +Changes from 2.34 to 2.35 + +* Sans, SansMono, Serif: added U+0E3F, U+A7F8-U+A7F9 (by Gee Fung Sit 薛至峰) +* Sans, SansMono, Serif: moved inverted marks U+00A1, U+00BF, U+2E18 to x-height + and added 'case' feature using original glyphs+hints (by Gee Fung Sit 薛至峰) +* Sans, SansMono, Serif: fixed glyph heights in Box Drawing block (by Gee Fung + Sit 薛至峰) +* SansMono, Serif: adjusted U+016E to prevent cut-off (by Gee Fung Sit 薛至峰) +* Sans: added U+269E-U+269F (by Lars Næsbye Christensen) +* Sans: added U+06C7-U+06C8, U+06CB, U+06D0 and their presentation forms + U+FBD7-U+FBD8, U+FBDB-U+FBDC, U+FBDE-U+FBDF, U+FBE4-U+FBE7 (by MihailJP) +* Sans: added isolated, initial and stretched forms in the Arabic Mathematical + Alphabetic Symbols block, U+1EE00 et seq. (by Gee Fung Sit 薛至峰) +* Sans: restored GSUB tables for Hebrew (by Gee Fung Sit 薛至峰) +* Sans: fixed U+1D301-U+1D303 (bug 73532) (by Gee Fung Sit 薛至峰) +* Sans: fixed instructions for U+0394, U+039B in Bold (bug 16442) (by Gee Fung + Sit 薛至峰) +* Sans: minor improvements/fixes to U+07D4, U+203D, U+20A6, U+20BA, U+2E18, + U+A782-U+A783 (by Gee Fung Sit 薛至峰) +* Sans: moved U+2E1F to correct code point, was off by one (by Gee Fung Sit + 薛至峰) +* SansExtraLight: added U+0184-U+0185, U+019B, U+01B7-U+01B9, U+01EE-U+01EF, + U+0292, U+0298, U+0E3F, U+04E0-U+04E1, U+0516-U+0519 (by Gee Fung Sit 薛至峰) +* SansMono: added U+203F, U+2150-U+2151, U+2189, U+220E, U+2210, U+2223, + U+228D-U+228E, U+2293-U+2294, U+22B2-U+22B5, U+22B8, U+22C2-U+22C3, + U+22CE-U+22D1, U+27DC, U+27EA-U+27EB, U+27F5-U+27F7, U+2987-U+2988, + U+2997-U+2998, U+2A00 (by Gee Fung Sit 薛至峰) +* SansMono: minor improvements/fixes to U+018C and U+018D, U+026F-U+0270 (by + Gee Fung Sit 薛至峰) +* SansMono: fixed glyph heights in Block Elements block (bug 14316) (by Gee + Fung Sit 薛至峰) +* Serif: replaced inverted breve on U+0202, U+0206, U+020A, U+020E, U+0212, + U+0216 with its case form to prevent cut-off (by Gee Fung Sit 薛至峰) +* Serif: redesigned/redrawn U+01E5, U+025E, U+0262, U+0277-U+0278, + U+029A-U+029B (by Gee Fung Sit 薛至峰) +* Serif: minor improvements/fixes to U+00DF, U+017B, U+01E4, U+0265, + U+026F-U+0270, U+0280-U+0281, U+0294-U+0297, U+029F, U+02A1-U+02A2, U+03FB, + U+1D0C, U+20A6, U+20B8, U+A731 (by Gee Fung Sit 薛至峰) +* Serif: added stylistic alternatives for U+0110-U+0111, U+01E4-U+01E5 (by Gee + Fung Sit 薛至峰) +* Serif: added or adjusted anchors for U+0294, U+0256, U+041D (by Denis + Jacquerye) +* Sans, Serif: added OpenType MATH table (by Frédéric Wang) +* Sans, Serif: added displaystyle math operators (by Frédéric Wang) +* Serif: added italic mathematical alphanumeric characterd (by Frédéric Wang) +* Serif: added construction for stretchy radical symbol (by Frédéric Wang) +* Serif: added stylistic ssty variants for prime symbols +* Sans, Serif: fixed incorrect glyph for U+22C4 (by Gee Fung Sit 薛至峰) +* SansMono: added U+22C4 (by Gee Fung Sit 薛至峰) +* SansMono: added to U+2336, U+233F-U+2340, U+2345-U+2346, U+234A, + U+234E-U+234F, U+2351, U+2355-U+2356, U+235D, U+2361-U+2362, U+2366-U+2367, + U+236A, U+2371-U+2372 (by Sami Tarazi) +* Serif: added U+20BA (by Gee Fung Sit 薛至峰) +* Sans, Serif: added U+20BD (by Gee Fung Sit 薛至峰) + +Changes from 2.33 to 2.34 + +* Sans, SansMono, Serif: unlinked references of U+2596 for bug 50848 + (by Denis Jacquerye) +* Sans, SansMono, Serif: added U+A7AA (by Denis Jacquerye) +* Sans, SansMono, Serif: added U+2A6A, U+2A6B, U+2E1F based on U+223B + (by Denis Jacquerye) +* Sans, Serif: removed superfluous ligature definitions for ffl und ffi + (bug 55363) (by Gee Fung Sit 薛至峰) +* Sans, Serif: swapped glyphs for U+25D2 and U+25D3 (bug 55197) + (by Gee Fung Sit 薛至峰) +* Sans, Serif: added U+A740, U+A741 (by Denis Jacquerye) +* Sans: added U+20BA Turkish Lira sign (by Denis Jacquerye) +* Sans: replaced Georgian Asomtavruli U+10A0-U+10C5 and Mkhedruli U+10D0-U+10FC + with new version (by Besarion Gugushvili) +* Sans: added Georgian Nuskhuri U+2D00-U+U+2D25 (by Besarion Gugushvili) +* Sans: added Private Use Area glyphs for Georgian U+F400-U+F441 + (by Besarion Gugushvili) +* Sans: tweaked U+0250, U+0254 (by Denis Jacquerye) +* Sans: adjusted hinting of U+032C-U+032D, avoiding problem on some platforms + (by Denis Jacquerye) +* Sans: added U+A7A0-U+A7A9, pre-1921 Latvian letters with oblique stroke + (by Denis Jacquerye) +* Sans: added anchors to U+2C6D (by Denis Jacquerye) +* Sans: added cedilla anchor to some Latin characters (by Denis Jacquerye) +* Sans: added ogonek anchor to A, E, O, U, Y (by Denis Jacquerye) +* Sans: adjusted ogonek reference in U+0172, U+01EA, U+01EB + (by Denis Jacquerye) +* Sans: added anchors to U+0104, U+0105 (by Denis Jacquerye) +* Sans: added U+1F600, U+1F611, U+1F615, U+1F617, U+1F619, U+1F61B, U+1F61F, + U+1F626-U+1F627, U+1F62E-U+1F62F, U+1F634 (by Gee Fung Sit 薛至峰) +* Sans: replaced U+27A1 with mirror image of U+2B05 for consistency + (by Gee Fung Sit 薛至峰) +* Sans: copied hints from U+14A3, U+14A7 to U+2142-U+2143 + (by Gee Fung Sit 薛至峰) +* Sans: added Lisu block (by Gee Fung Sit 薛至峰) +* Sans: typographical improvements to U+0166-U+0167, U+02A6, U+02AA + (by Gee Fung Sit 薛至峰) +* Sans: slightly change hinting of "2" to fix bug 37395 (by Ben Laenen) +* Sans: fixed U+1444 which had wrong top dot that shouldn't be there + (by Denis Jacquerye) +* Sans: added anchors for diacritics to U+01B7, U+01B8, U+01B9, U+0292 + (by Denis Jacquerye) +* Sans: added U+01B7, U+01B8 to context for case diacritics above +* SansMono: fixed U+0574 (by Ruben Hakobian) +* SansMono: added U+2016, U+27C2 (by Yoshiki Ohshima) +* SansMono: added U+02CE, U+02CF (by Denis Jacquerye) +* SansMono: added U+2148, U+27E6-U+27E7, U+2B05-U+2B0D, U+1D55A + (by Gee Fung Sit 薛至峰) +* Serif: added U+02BA, U+02C2-U+02C5, U+02CA-U+02CB, U+02D7, U+02F3, U+02F7, + U+046C-U+046D, U+0476-U+0477, U+1D7C-U+1D7F, U+20B8, U+2132, U+214E, U+2C7B + to Serif (by Gee Fung Sit 薛至峰) +* Serif: typographic improvements to U+0194, U+01B1, U+0263, U+028A, U+02A6, + U+02A8, U+02AA, U+02E0, U+03DC, U+1D3B, U+1D7B (by Gee Fung Sit 薛至峰) +* Serif: added small cap versions of q, x (in italic styles), delta, theta, xi, + sigma, phi, omega, not wired in yet (by Gee Fung Sit 薛至峰) +* Serif: added anchors to U+0234-U+0236 (by Gee Fung Sit 薛至峰) +* Serif: added U+02EC, U+02EF, U+02F0, U+0360 (by Denis Jacquerye) + +Changes from 2.32 to 2.33 + +* added Old Italic block to Sans (by MaEr) +* added U+051E, U+051F to Sans (by MaEr) +* added U+01BA, U+0372-U+0373, U+0376-U+0377, U+03CF, U+1D00-U+1D01, + U+1D03-U+1D07, U+1D0A-U+1D13, U+1D15, U+1D18-U+1D1C, U+1D20-U+1D2B, + U+1D2F, U+1D3D, U+1D5C-U+1D61, U+1D66-U+1D6B, U+1DB8, U+1E9C-U+1E9D, + U+1EFA-U+1EFB, U+2C60-U+2C61, U+2C63, U+A726-U+A73C, U+A73E-U+A73F, + U+A746-U+A747, U+A74A-U+A74B, U+A74E+U+A74F, U+A768-U+A769, U+A77B-U+A77C, + U+A780-U+A787, U+A790-U+A791, U+A7FA-U+A7FF to Serif (by Gee Fung Sit 薛至峰) +* added alternate forms to U+014A and U+01B7 in Serif (by Gee Fung Sit 薛至峰) +* typographical improvements to U+0166-U+0167, U+0197, U+01B5-U+01B6, U+01BB, + U+0222-U+0223, U+023D, U+0250-U+0252, U+026E, U+0274, U+028F, U+029F, + U+02A3-U+02A5, U+02AB, U+03FE-U+03FF, U+1D02, U+1D14, U+1D1D-U+1D1F, U+1D3B, + U+1D43-U+1D46, U+1D59, U+1D9B, U+2C71, U+2C73 in Serif (by Gee Fung Sit 薛至峰) +* fixed bugs #31762 and #34700 plus other small fixes (wrong direction, + duplicate points, etc.) for Sans and Serif (by Gee Fung Sit 薛至峰) +* added U+204B to Mono (by Gee Fung Sit 薛至峰) +* added U+26E2 to Sans (by Gee Fung Sit 薛至峰) +* added Playing Cards block (U+1F0A0-U+1F0DF) to Sans (by Gee Fung Sit 薛至峰) +* emoticons in Sans: replace U+2639-U+263B with better versions, add + U+1F601-U+1F610, U+1F612-U+1F614, U+1F616, U+1F618, U+1F61A, U+1F61C-U+1F61E, + U+1F620-U+1F624, U+1F625, U+1F628-U+1F62B, U+1F62D, U+1F630-U+1F633, + U+1F635-U+1F640 (by Ben Laenen and Denis Jacquerye) +* added U+A78E, U+A790-U+A791 to Sans and Mono (by Denis Jacquerye) +* added U+A7FA to Sans (by Denis Jacquerye) +* subscripts: added U+2095-U+209C to Sans, Serif and Mono, adjusted + U+1D49-U+1D4A in Sans and Mono (by Denis Jacquerye) +* added U+0243 to Mono (by Denis Jacquerye) +* adjusted U+0307 to match dot of i, replaced dotaccent U+02D9 with U+0307 in +most dependencies in Sans (by Denis Jacquerye) +* adjusted anchors of f and added them to long s in Sans (by Denis Jacquerye) +* added anchors to precomposed dependencies of D and d (by Denis Jacquerye) +* added debug glyphs U+F002 and U+F003 which will show current point size (by + Ben Laenen) +* use correct version for Serbian italic be (by Eugeniy Meshcheryakov) +* added pictograms U+1F42D-U+1F42E, U+1F431, U+1F435 (by Denis Jacquerye) +* improved Hebrew in Sans (by Lior Halphon) +* improved Armenian in Sans, and added Armenian in Serif and Mono (by Rouben + Hakobian (Tarumian), Aleksey Chalabyan and Norayr Chilingarian) +* remove "locl" feature for Romanian for S/T/s/t with cedilla/comma accent (by + Ben Laenen) +* replace wrong "dflt" script tag in Mono with "DFLT" (by Ben Laenen) + +Changes from 2.31 to 2.32 + +* added to Sans: Latin small letter p with stroke (U+1D7D), Latin capital + letter p with stroke through descender (U+A750), Latin small letter p with + stroke through descender (U+A751), Latin capital letter thorn with stroke + (U+A764), Latin small letter thorn with stroke (U+A765), Latin capital letter + thorn with stroke through descender (U+A766), Latin small letter thorn with + stroke through descender (U+A767), Latin capital letter q with stroke through + descender (U+A756), Latin small letter q with stroke through descender + (U+A757), Latin capital letter p with flourish (U+A752), Latin small letter p + with flourish (U+A753) (by Ben Laenen) +* add new Indian rupee symbol (U+20B9) to Sans, Serif and Mono (although + standardization in Unicode not complete yet, UTC did assign this code point) + (by Ben Laenen) +* Sans: adjusted U+0E3F, U+20AB, U+20AD-U+20AE, U+20B1, U+20B5, U+20B8 to have + them take up the same width as digits (by Gee Fung Sit 薛至峰) +* added U+23E8 to Sans (by Thomas Henlich) +* fixed numerous bugs (#22579, #28189, #28977, N'Ko in Windows, fixed U+FB4F, + anchors for U+0332-U+0333, made extensions in Misc. Technical connect, and + other small fixes) (by Gee Fung Sit 薛至峰) +* added looptail g as stylistic variant to Serif (by Gee Fung Sit 薛至峰) +* added the remaining precomposed characters in Latin Extended Additional in + Serif (by Gee Fung Sit 薛至峰) +* added Georgian Mkhedruli (U+10D0-U+10FC) to Sans ExtraLight (by Besarion + Gugushvili) +* fix spacing in hinting of U+042E (Ю) in Mono (by Ben Laenen) +* replaced U+2650 and minor changes to U+2640-U+2642, U+2699, U+26A2-U+26A5, + U+26B2-U+26B5, U+26B8 in Sans (by Gee Fung Sit 薛至峰) +* added U+1E9C-U+1E9D, U+1EFA-U+1EFB, U+2028-U+2029, U+20B8, U+2150-U+2152, + U+2189, U+26C0-U+26C3, U+A722-U+A725, U+1F030-U+1F093 to Sans (by Gee Fung + Sit 薛至峰) +* added U+1E9C-U+1E9E, U+1EFA-U+1EFB, U+2028-U+2029, U+20B8, U+2181-U+2182, + U+2185 U+A722-U+A725, to Sans ExtraLight (by Gee Fung Sit 薛至峰) +* added U+20B8, U+22A2-U+22A5, U+A722-U+A725 to Mono (by Gee Fung Sit 薛至峰) +* added U+02CD, U+01BF, U+01F7, U+0222-U+0223, U+0243-U+0244, U+0246-U+024F, + U+2150-U+2152, U+2189, U+239B-U+23AD and U+A73D to Serif (by Gee Fung Sit + 薛至峰) + +Changes from 2.30 to 2.31 + +* fixed bug where Serif Condensed Italic wouldn't get proper subfamily tags (by + Ben Laenen) +* added math operators U+2234-U+2237 to Mono (by Ben Laenen) +* removed buggy instructions of U+032D (by Eugeniy Meshcheryakov) +* added U+2C70, U+2C7E, U+2C7F to Sans and Sans Mono (by Denis Jacquerye) +* added U+2C7D to Sans Mono (by Denis Jacquerye) +* added U+2C6D, U+2C70-2C73, U+2C7E-2C7F to Serif (by Denis Jacquerye) +* added extremas to alpha U+03B1 in Serif-Italic (by Denis Jacquerye) +* added U+4A4, U+4A5 to Mono (by Andrey V. Panov) +* added Arabic letters U+0657, U+0670, U+0688-U+0690, U+0693-U+0694, + U+0696-U+0697, U+0699-U+06A0, U+06A2-U+06A3, U+06A5, U+06A7-U+06A8, + U+06AA-U+06AE, U+06B0-U+06B4, U+06B6-U+06B9, U+06BB-U+06BE and their + contextual forms to Sans (by MihailJP) +* added U+A78D LATIN CAPITAL LETTER TURNED H for coming Unicode 6.0 (by Denis + Jacquerye) + +Changes from 2.29 to 2.30 + +* added U+0462-U+0463 to Mono (by Denis Jacquerye) +* corrected U+1E53 in Serif (by Gee Fung Sit) +* added U+1E4C-U+1E4D to Mono and Serif (by Gee Fung Sit) +* added U+1E78-U+1E79 to Mono (by Gee Fung Sit) +* fixed missing diacritics in Latin Extended Additional in Sans ExtraLight + (moved stacked diacritics out of PUA in the process) (by Gee Fung Sit) +* fixed anchors on U+1E78 in Serif (by Gee Fung Sit) +* added U+1DC4-U+1DC9 to Serif (by Denis Jacquerye) +* renamed above-mark to above-mark in Serif-Italic (by Denis Jacquerye) +* added U+1DC4-U+1DC9 to context class for dotless substitution (by Denis + Jacquerye) +* changed Doubleacute to Doublegrave in Sans ExtraLight (by Gee Fung Sit) +* removed redundant reference in U+01FB in Sans Oblique (by Gee Fung Sit) +* added U+A726-U+A727 to Mono (Denis Jacquerye) +* changed U+04BE and U+04BF according to recommedations of Sasha Ankwab in Sans + (by Andrey V. Panov) +* remove "Symbol Charset" from set of codepages in Sans (by Eugeniy + Meshcheryakov) + +Changes from 2.28 to 2.29 + +* modified U+10FB in Sans to be a mirror image of U+2056, since U+10FB is not + Georgian-specific (by Roozbeh Pournader) +* added U+2B1F, U+2B24, U+2B53, U+2B54 in Sans (by Roozbeh Pournader) +* fixed TUR opentype language tag to TRK in Serif (bug 19825) (by Ben Laenen) +* early implementation of Abkhaz letter U+0524-U+0525 in Sans + (by Michael Everson and abysta) +* flipped U+1D538 in Sans (by Gee Fung Sit) +* added U+26B3-U+26B8, U+1D7D8-U+1D7E1 in Sans (by Gee Fung Sit) +* corrected U+1D7A9 in Sans Bold Oblique (by Gee Fung Sit) +* Fixed U+0649 to be dual-joining in Sans Mono (by Roozbeh Pournader) +* Remove unnecessary 'isol' feature from Sans Mono (by Roozbeh Pournader) +* Remove 'cmap' mappings for U+066E, U+066F, U+067C, U+067D, U+0681, U+0682, + U+0685, U+0692, U+06A1, U+06B5, U+06BA, U+06C6, U+06CE, and U+06D5 + in Sans Mono (bug 20323) (by Roozbeh Pournader) +* add half brackets (U+2E22 - U+2E25, by Steve Tinney) + +Changes from 2.27 to 2.28 + +* added U+A789, U+A78A in Sans and Sans Mono (by Denis Jacquerye) +* modified U+02D6, U+02D7, U+02EE in Sans and Sans Mono (by Denis Jacquerye) +* added U+1E9E (German capital ß) to Sans and Serif (by Denis Jacquerye) +* adjusted width of U+01B7-U+01B9 in Serif Italic (by Denis Jacquerye) +* modified U+021C, U+021D in Sans (by Denis Jacquerye) +* added U+021C, U+021D in Mono (by Denis Jacquerye) +* added U+F428 (Georgian Nuskhuri "f") in private use area (by Besarion + Gugushvili) +* updated Georgian mkhedruli (U+10D0-U+10FA) with new version (by Besarion + Gugushvili) +* updated Georgian asomtavruli (U+10A0-U+10C5) with new version (by Besarion + Gugushvili) +* added Georgian nuskhuri (U+2D00-U+2D25) (by Besarion Gugushvili) +* added Georgian mtavruli in private use area (U+F400-U+F426) (by Besarion + Gugushvili) +* added mark anchors above to Cyrillic U+0430-U+0438, U+043A-U+044F, + U+0454-U+0455 in Mono (by Ben Laenen) +* modified/moved up U+0318-U+0319, U+031C-U+031F, U+0329-U+032A, U+032C-U+032D, + U+0339-U+033B, U+0348 and U+0353 in Sans to prevent cut-off (by Gee Fung Sit) +* added U+035A to Sans (by Gee Fung Sit) +* updated fontconfig files (by Nicolas Mailhot) +* added U+2032-2037 to Mono (by Denis Jacquerye) +* added Ogham to Sans ExtraLight (by Gee Fung Sit) +* added U+2C6F, U+2C79, U+2C7C-2C7D to Mono (by Gee Fung Sit) +* added U+210F to Serif and Sans ExtraLight (by Gee Fung Sit) +* changed U+210F to a more common glyph in Sans and Mono (by Gee Fung Sit) + +Changes from 2.26 to 2.27 + +* added some of Michael Everson's new Cyrillic glyphs to Sans (by Wesley + Transue) +* removed blank glyph at U+05EF from Sans Bold Oblique (by Gee Fung Sit) +* small adjustments to existing tone bars in Sans and Mono (by Gee Fung Sit) +* added U+0372-U+0373, U+0376-U+0377, U+03CF, U+A668-U+A66E, U+A708-U+A711, + U+A71B-U+A71F to Sans (by Gee Fung Sit) +* copied U+02E5-U+02E9 over from Sans to fix inconsistencies in Serif (by Gee + Fung Sit) +* added U+021C-U+021D, U+0370-U+0371, U+037B-U+037D, U+0470-U+0471, + U+0510-U+0515, U+051A-U+051D, U+1E9F, U+2C64, U+2C6E-U+2C6F, U+2C79, + U+2C7C-U+2C7D, U+A644-U+A647, U+A650-U+A651, U+A654-U+A657, U+A708-U+A716, + U+A71B-U+A71F to Serif (by Gee Fung Sit) +* added U+A708-U+A716, U+A71B-U+A71F to Mono (by Gee Fung Sit) +* added anchors to U+017F (ſ) and fixed U+1E9B (ẛ) in Serif (by Gee Fung Sit) +* made U+0325 smaller in Sans Bold and Serif to match Sans Book (by Gee Fung + Sit) +* fixes to U+02F3 (moved up), U+228F-U+2294 (more square-like) and + U+22CE-U+22CF (stroke width) in Sans (by Gee Fung Sit) +* replaced U+2202 ∂ (Sans and Mono) and U+221D ∝, U+221E ∞ (Sans) with glyphs + from Arev (with small changes) (by Gee Fung Sit) +* added U+22B0-U+22B1, U+22C7, U+22D0-U+22D5 from Arev to Sans to complete the + block (by Gee Fung Sit) +* added U+0514-U+0515 to Sans ExtraLight (by Gee Fung Sit) +* skewed U+A78C in all Oblique/Italic fonts (by Gee Fung Sit) +* moved U+2215 to U+2044 in Sans and Serif and replaced U+2215 with reference + to U+002F in all fonts (by Gee Fung Sit) +* added U+2C6E to Mono (by Denis Jacquerye) +* added U+A782 and U+A783 in Sans (by Wesley Transue) +* added U+0244, U+024C-024D, U+2C64 in Sans Mono (by Denis Jacquerye) +* modified U+01AE in Sans Mono (by Denis Jacquerye) +* added U+2C7A to all fonts (by Gee Fung Sit) +* italicized/small changes to U+2C76 in Serif (Bold) Italic (by Gee Fung Sit) +* improved outlines of U+2C68, U+2C6A, U+2C6C in Serif (Bold) Italic (by Gee + Fung Sit) +* rounded U+2C77 at the bottom in Serif (by Gee Fung Sit) +* added joining behavior for tone letters (U+02E5-U+02E9) in Sans (bug #15669) + (by Gee Fung Sit) +* fixed outline of y.alt in Sans Regular (by Denis Jacquerye) +* changed references of U+1D5A8, U+1D5C5, U+1D5DC, U+1D5F9, U+1D610, U+1D62D, + U+1D644 and U+1D661 to stylistic alternates to have a better distinction (by + Gee Fung Sit) +* hinted I.alt in Sans Regular (by Gee Fung Sit) +* added U+0487, completing Cyrillic block (by Gee Fung Sit) +* extended the bar of U+0463 to the right and moved the anchor (by Gee Fung + Sit) +* added anchors to glyphs in Cyrillic block (by Gee Fung Sit) +* added (preliminary) hints to tone letter forms (U+02E5.5, U+02E9.1, stem) in + Sans Book (by Gee Fung Sit) + +Changes from 2.25 to 2.26 + +- added glyphs for Cyrillic-B to Sans (by Wesley Transue) +- added U+0370-U+0371 to Sans (by Wesley Transue) +- added U+019C, U+01A2-U+01A3, U+01A6, U+01E4-U+01E5, U+024C-U+024D, U+0285, + U+0290, U+02A0, U+0370-U+0371, U+03F1, U+03FC to Sans ExtraLight (by Wesley + Transue) +- added U+20A0-U+20A5, U+20A7-U+20B3, U+2105, U+210D, U+210F, U+2115, U+2117, + U+2119-U+211A, U+211D, U+2124, U+212E, U+2200-U+2204 to Mono (by Heikki + Lindroos) +- added U+01BA and U+01BF to Mono (by Heikki Lindroos) +- merged OpenType "aalt" feature in Latin in Sans (by Denis Jacquerye) +- added alternative shape for y in Sans (by Denis Jacquerye) +- added saltillo (U+A78B-U+A78C) to all faces (by James Cloos) +- changed U+047C-U+047D to references instead of outlines in Sans (by Wesley + Transue) +- added Latin letter tresillo U+A72A-U+A72B to Sans (by Wesley Transue) +- added U+A734-U+A737 to Sans (by Wesley Transue) +- added U+2053 to Serif and fixed it bug:9425 in Sans (by Gee Fung Sit) +- removed problematic hints for U+0423 bug:10025 (by Gee Fung Sit) +- added U+27C5-U+27C6 bug:10255 to all faces (by Gee Fung Sit) +- fixed width of U+2016 in Sans Oblique (by Gee Fung Sit) +- added U+2016, U+2032-U+2038, U+2042, U+2045-U+2046, U+204B-U+204F, + U+2051-U+2052, U+2057 to Serif (by Gee Fung Sit) +- made U+2140 bigger to match other n-ary operators (by Gee Fung Sit) +- added U+0606-U+0607, U+0609-U+060A to Sans (by Gee Fung Sit) +- added U+221B-U+221C to Mono (by Gee Fung Sit) +- small adjustments to U+221B-U+221C in Sans and Serif (by Gee Fung Sit) +- update U+04B4-U+04B5 in Serif (by Andrey V. Panov) +- increased max-storage value from maxp table to 153 (by Andrey V. Panov) +- added U+0472-U+0473, U+0510-U+0511, U+051A-U+051D, U+0606-U+0607, + U+0609-U+060A, U+1E26-U+1E27, U+1E54-U+1E55, U+1E7C-U+1E7D, U+1E8C-U+1E8D, + U+1E90-U+1E91, U+1E97-U+1E99, U+1E9F, U+1EAC-U+1EAD, U+1EB6-U+1EB7, + U+1EC6-U+1EC7, U+1ED8-U+1EDD, U+1EE0-U+1EE3, U+1EE8-U+1EEB, U+1EEE-U+1EF1 to + Mono (by Gee Fung Sit) +- added locl rules for S/T cedilla for Romanian and Moldavian so they get + rendered as S/T with comma accent (see Redhat bug #455981) (by Ben Laenen) +- removed ligature rule from Armenian U+0587 bug:16113 (by Gee Fung Sit) + +Changes from 2.24 to 2.25 + +- moved/added U+2E18 (by Gee Fung Sit) +- added empty glyph for U+2064 in Sans and Serif (by Gee Fung Sit) +- added U+22CE-U+22CF to Sans (by Gee Fung Sit) +- Sans Oblique and Bold Oblique, Serif: reverted digits hinting instructions back to before revision 1590, which fixed mistaken debian bug #471024. This fixes Debian bug #411308. The original bug was in freetype not in the fonts (by Denis Jacquerye) +- added U+A726-U+A729, U+A730-U+A733, U+A738-U+A73F, U+A746-U+A74B, U+A74E-U+A74F, U+A780-U+A781, U+A7FB-U+A7FF to Sans (by Gee Fung Sit) +- added Macedonian italic glyph shape for U+0453 in Serif (by Ben Laenen) +- changed descenders in U+0446, U+0449, U+0497, U+04A3, U+04AD (by Andrey V. Panov) +- updated main SFD files to SplineFontDB 3.0 (Denis Jacquerye and Gee Fung Sit) +- moved U+0561 2 up since it wasn't aligned with the baseline well (by Ben Laenen) +- added U+2E2E to Sans (by Gee Fung Sit) +- replaced U+2699 with simpler version in Sans (by Gee Fung Sit) +- added a lot of hinting instructions to Latin Extended B, Greek and Coptic glyphs Sans Book (by Wesley Transue) +- differentiated U+2219 from U+22C5 and adjusted affected references in Sans and Mono (by Gee Fung Sit) +- made Hebrew narrower in Sans Bold and Sans Bold Oblique (by Denis Jacquerye) +- added Kurdish and Chuvash letters from Unicode 5.1 Cyrillic Extended block (by Wesley Transue) +- added U+1E9F, U+A644-U+A647, U+A64C-U+A64D, U+A650-U+A651, U+A654-U+A655, U+A712U+A716 to Sans (by Gee Fung Sit) +- added several glyphs to Sans ExtraLight (by Gee Fung Sit) +- added hinting instructions to U+046A-U+046B, U+0508-U+0509, U+050B, U+0512-U+0513 in Sans Book (by Wesley Transue) +- corrected width of U+027E in Sans Book (by Gee Fung Sit) +- added U+2C79, U+2C7B-U+2C7D to Sans (by Gee Fung Sit) +- added a bunch of glyphs+small corrections to Sans Light (by Gee Fung Sit) +- added U+0496, U+0497, U+04B0, U+04B1 (by Andrey V. Panov) +- updated U+0493, U+049B, U+04B3, U+04B7, U+04F7 (by Andrey V. Panov) +- further improvements in extended Cyrillic (by Andrey V. Panov) + +Changes from 2.23 to 2.24 + +- instructions for U+05C0 ׀, U+05C3 ׃, U+05F3 ׳, and U+05F4 ״ in DejaVu + Sans. (by Wesley Transue) +- instructions for U+2116 in Sans (by Andrey V. Panov) +- Unicode 5.1 update: moved U+F208 to U+2C6D, U+F25F to U+2C71, added + U+2C6E-U+2C6F, U+2C72-U+2C73, updated outline of U+2C71 in Sans. (by + Denis Jacquerye) +- updated and instructed U+0401 in Sans (by Andrey V. Panov) +- fixed the bug in Sans faces where U+02EC ˬ faced the wrong direction. + Also, added a few more glyph instructions. (by Wesley Transue) +- removed OS2Sub and OS2Strike that weren't intentional in Sans + ExtraLight. (by Denis Jacquerye) +- updated instructions for U+401, U+44F in Serif Book. (by Andrey V. + Panov) +- instructions for U+02C4 ˄, U+02C5 ˅, U+03D8 Ϙ, U+03D9 ϙ, U+0494 Ҕ, and + U+0495 ҕ in Sans Book. (by Wesley Transue) +- instructions for U+01A6 Ʀ, U+0238 ȸ, U+0239 ȹ, U+02EC ˬ, and U+05C6 ׆ + in Sans Book. (by Wesley Transue) +- DejaVuSans.sfd DejaVuSerif.sfd: updated instructions for U+447 and + U+451 using code generated with xgridfit (by Andrey V. Panov) +- instructions for a few glyphs in the Latin Extended-B Block, Greek + Block, Cyrillic Block, and N'Ko block. (by Wesley Transue) +- updated sfdnormalize.pl, and SFD files to new SFD format with empty + lines. (by Denis Jacquerye) + +Changes from 2.22 to 2.23 + +- fixed bug which made Condensed fonts appear instead of normal width ones +- added U+20DB, U+20DC, and U+20E1 to Sans (by Roozbeh Pournader) +- added hinting instructions to U+01A7, U+01AA-U+01AC, U+01AE-U+01AF, + U+01BC-U+01BD, U+01BF, U+01F7, U+0277, U+027F, U+0285-U+0286, U+0297, U+02AF, + U+02B4-U+02B5, U+02BD, U+030D, U+0311, U+0329, U+04A0-U+04A1 in Sans Book (by + Wesley Transue) +- modified hinting instructions of U+04A2 in Sans Book (by Wesley Transue) +- added hinting instructions to U+237D, U+2423 in Mono Book and Mono Bold (by + Wesley Transue) +- added mathematical alphanumeric symbols to all styles (by Max Berger) +- added Unicode 5.1 U+2E18 as U+2E18.u51 (not yet usable) to Sans (by Roozbeh + Pournader) +- dereferenced all glyphs with mixed references and outlines (by Denis + Jacquerye) +- removed non-zero width from U+0344 in Sans (by Denis Jacquerye) + +Changes from 2.21 to 2.22 + +- directory structure has changed, we now use the Makefile +- modified Armenian U+0565 in Sans (by Սահակ Պետրոսյան) +- added double struck letters and numbers U+2102, U+210D, U+2115, + U+2119-U+211A, U+211D, U+2124, U+213C-U+2140, U+2145-U+2149, U+1D538-U+1D539, + U+1D53B-U+1D53E, U+1D540-U+1D544, U+1D546, U+1D54A-U+1D550, U+1D552-U+1D56B, + U+1D7D8-U+1D7E1 to Serif (by Stephen Hartke) +- added letterlike symbols U+2103, U+2109, U+2127, U+214B, U+2141-U+2144 to + Serif (by Ben Laenen) +- fixed outline direction of U+2143 in Sans Bold/Bold Oblique (by Ben Laenen) +- added arrow set in Serif: arrows: U+2194-U+21FF; dingbats: U+27A1; + supplemental arrows A: U+27F0-U+27FF; supplemental arrows B: U+2900-U+2975, + U+297A; miscellaneous symbols and arrows: U+2B00-U+2B11 (by Ben Laenen) +- added U+0180, U+01DE, U+01E0-01E1, U+022A, U+022C, U+0230, U+1E08-U+1E09, + U+1E10-U+1E11, U+1EB0-U+1EB1 to Mono (by Denis Jacquerye) +- adjusted U+01D5, U+01D7, U+01D9, U+1DB in Mono (by Denis Jacquerye) +- added Ogham in Sans (by Wesley Transue) +- added Yijing Hexagram Symbols in Sans (by Wesley Transue) +- hinting instructions added to Cyrillic U+0460, U+04A6-U+04A7, U+04AC-U+04AD, + U+04C7-U+04C8, U+04F6-U+04F7, U+04FA-U+04FB, U+050C-U+050D in Sans Book (by + Wesley Transue) +- adjusted Cyrillic letters U+042A, U+044A, U+044C, U+0459-U+045B, U+0462, + U+048C-U+048D in Serif (by Andrey V. Panov) +- hinting instructions added to Lao U+0EB7 in Sans (by Wesley Transue) +- added Roman numerals and Claudian letter U+2160-U+2184 in Serif (by Ben + Laenen) +- added U+FFF9-U+FFFD to Sans, Serif and Mono (by Lars Næsbye Christensen) +- added mathematical symbols to Serif: U+2200, U+2203-U+2204, U+2213-U+2214, + U+2217-U+2218, U+2223-U+2226, U+2250-U+2255, U+2295-U+22AF, U+22C5 (by Ben + Laenen) +- modified bullet symbol U+2219 in Serif (by Ben Laenen) + +Changes from 2.20 to 2.21 + +- added U+FE20-U+FE23 (half diacritics) to Sans (by Denis Jacquerye) +- added anchor "half" to position right half of double marks, U+FE21 or U+FE23 + to Sans (by Denis Jacquerye) +- shifted U+0360 up to avoid collision with some outlines in Sans (by Denis + Jacquerye) +- added anchor above-mark anchor to U+035D, U+035E, U+0360, U+0361 in Sans (by + Denis Jacquerye) +- added instructions for ff, ffi, ffl ligatures in Serif Bold (by Eugeniy + Meshcheryakov) +- added instructions to some N'Ko glyphs (by Wesley Transue) +- added instructions to some Lao glyphs (by Wesley Transue) +- cleaning up 'liga' Standard Ligature in Latin, in Sans and Sans Mono (by + Denis Jacquerye) +- added U+046A, U+046B (big yus) in Serif (by Andrey V. Panov) +- added box drawing symbols to Sans and Serif (by Lars Næsbye Christensen) +- added Makefile to improve font and packages generating (by Nicolas Mailhot) + +Changes from 2.19 to 2.20 + +- removed TeX and TeXData tags from all sfd files (by Eugeniy Meshcheryakov) +- removed all 'frac' lookups (by Eugeniy Meshcheryakov) +- fixed duplicate glyph names (by Eugeniy Meshcheryakov) +- removed standard ligatures with U+00B7 in Mono (by Eugeniy Meshcheryakov) +- use reference to U+002D in U+00AD in Sans Oblique, and adjust instructions + (by Eugeniy Meshcheryakov) +- updated Cyrillic in Sans Extra Light (by Andrey V. Panov) +- added instructions to N'Ko U+07C1-U+07C6, U+07CA, U+07CE-U+07CF, U+07D1, + U+07D3-U+07D4, U+07D8, U+07DB and U+07EB in Sans (by Wesley Transue) +- added instructions to Lao U+0E8A, U+0E95, U+0E97, U+EA5, U+0EB4 and U+0EB5 + (by Wesley Transue) +- adjusted instructions for Hebrew glyphs (by Denis Jacquerye) +- added instructions for U+0265 in Sans Bold (by Denis Jacquerye) +- fix U+1D68 in Sans: it had the shape of delta, where it should be a rho (by + Ben Laenen) +- remove U+1D5C glyph in Sans Oblique (it was empty) (by Ben Laenen) +- fix instructions of U+01AD in Sans Bold (by Ben Laenen) +- fix instructions of U+042D in Serif (by Ben Laenen) +- remove buggy instructions of U+2328 in Serif (by Ben Laenen) +- corrected width of U+2C75-U+2C76 in Sans Bold and Serif Bold (by Gee Fung Sit) +- added U+2C75-U+2C77 to Mono (by Gee Fung Sit) + +Changes from 2.18 to 2.19 + +- fixed misplaced symbols (U+2325,2326) in Sans Oblique (by John Karp) +- added Mark to Base anchors: 'cedilla' for combining cedilla and + 'above-legacy' for stacking above precomposed glyphs (just a,e,i,o,u with + macron for now) in Sans (by Denis Jacquerye). +- added contextual substitution for Case and Dotless forms in all Sans variants + (by Denis Jacquerye). +- renamed 'ccmp' lookups for RTL and Basic (LGC, etc.) (by Denis Jacquerye) +- added anchor 'cedilla' for vowels in Sans. (by Denis Jacquerye) +- extended contextual dotless and case substitutions to handle both below and + above diacritics (by Denis Jacquerye) +- renamed Dotless and Case Form GSUB lookups in Sans with meaningful names (by + Denis Jacquerye) + +Changes from 2.17 to 2.18 + +- Re-encoded the source files for Full Unicode (by Ben Laenen) +- Re-enabled the "ff", "fl", "fi", "ffl", "ffi" ligatures by default in Serif + (by Ben Laenen) +- Disabled the "fi", "ffi" ligatures for languages with dotless i in Serif (by + Ben Laenen) +- added Tifinagh to Sans Book and Bold, U+2D30-U+2D65, U+2D6F, partially hinted + in Sans Book. (by Denis Jacquerye) +- added Tai Xuan Jing Symbols (U+1D300-1D356) to Sans (by Remy Oudompheng) +- added double-struck letters (U+1D538-U+1D56B minus reserved code points) to + Sans (by Gee Fung Sit) +- added U+22EE-U+22F1 to Sans (by Gee Fung Sit) +- added U+2C67-U+2C6C, U+2C75-U+2C77 to Serif (by Gee Fung Sit) +- italicized various glyphs in Latin Extended-B, IPA Extensions, Spacing + Modifier Letters, Phonetic Extension (Supplement) and Super- and Subscripts + in Serif Oblique fonts (by Gee Fung Sit) +- modified outlines, bearings of Hebrew U+05D6, U+05D8, U+05DB, U+05DE, U+05E0, + U+05E1, U+05E2, U+05EA in Sans Book and Oblique, adjusted hinting in Book + based on Yotam Benshalom's comments. (by Denis Jacquerye) +- added Braille Patterns (U+2800-U+28FF) to Serif fonts (by Gee Fung Sit) +- added N'Ko to Sans Book and Bold: U+07C0-U+07E7, U+07EB-U+07F5, U+07F8-U+07FA + (by Eugeniy Meshcheryakov) +- added U+0ED8 (Lao digit 8) to Sans (by Remy Oudompheng) +- added Lao diacritics U+0EB0-0EB9, U+0EBB-0EBC, U+0EC8-0ECD to Mono (by Remy + Oudompheng) +- renamed Serif [Bold] Oblique, make it Italic (by Eugeniy Meshcheryakov) +- added U+29FA-U+29FB to Sans and Sans Mono (by Gee Fung Sit) +- swapped glyphs for Eng U+014A from Sami Eng to African Eng, the latter being + more common (by Denis Jacquerye) +- swapped ae U+00E6 and ae.alt in Serif Italics fonts, thus fixing #8213 (by + Denis Jacquerye) +- minor improvements to Misc. Symbols in Sans (by Gee Fung Sit) +- minor improvements and additions to Sans ExtraLight (by Gee Fung Sit) +- improved instructions for various Cyrillic letters (by Eugeniy Meshcheryakov) +- fixed hinting of theta and chi in Sans Book (by Ben Laenen) +- added Georgian Mkhedruli to Sans, Serif and Mono, ASumtavruli to Sans and + Serif (by Besarion Gugushvili) + +Changes from 2.16 to 2.17 + +- Sans fonts: fix position for certain combinations of Arabic fatha, kasra, + shadda, damma, kasratan, dammatan, fathatan and hamza (by Ben Laenen) +- added 'ae.alt' to Serif Oblique fonts, with design matching shape of italic + 'a' instead of slanted 'a', see bug #8213 (by Denis Jacquerye) +- added super- and subscripts to Serif and Mono: U+1D2C-U+1D2E, U+1D30-U+1D3C, + U+1D3E-U+1D42, U+1D62-U+1D65, U+1D78, U+2071, U+207A-U+207E, U+208A-U+208E, + U+2090-U+2094 (by Gee Fung Sit) + +Changes from 2.15 to 2.16 + +- fixed hinting instructions for digits in DejaVu Sans Oblique, Bold Oblique, + and Serif Book to not change glyph width (by Eugeniy Meshcheryakov) +- added instructions for U+0404, U+0411, U+0413, U+0414, U+0417-U+041B, U+041F, + U+0423, U+0424, U+0426-U+0429, U+042C, U+042E, U+042F, U+0490 in Serif Bold + (by Eugeniy Meshcheryakov) +- added U+0220 and Eng.alt to Serif fonts (by Denis Jacquerye) +- added U+232C, U+2394, U+23E3 to Sans fonts (by John Karp) +- added U+230C-U+230F, U+231C-U+231F to Sans fonts, fixing bug:9547 + (by John Karp) +- adjusted dot below, dot above, dieresis above, dieresis below in Sans fonts + (by Denis Jacquerye) +- added U+2300, U+2301, U+2303, U+2304, U+2305, U+2307, U+2326, U+2327, U+232B, + arrow.base to Sans fonts (by John Karp) +- adjusted dot and dieresis below and above in Serif fonts (by Denis Jacquerye) +- added U+1E1C-U+1E1D to Serif fonts (by Denis Jacquerye) +- added U+22BE, U+22BF (by Wesley Transue) +- added U+2324; modified U+2325: more standard proportions, and matches U+2324 + and U+2387; added U+2387 : flipped U+2325 with standard arrowhead + (by John Karp) +- added Lao digits U+0ED0-0ED7, U+0ED9 (by Remy Oudompheng) +- added to Mono in Arabic block : U+060C, U+0615, U+061B, U+061F, + U+0621-U+063A, U+0640-0655, U+065A, U+0660-066F, U+0674, U+0679-0687, U+0691, + U+0692, U+0698, U+06A1, U+06A4, U+06A9, U+06AF, U+06B5, U+06BA, U+06BE, + U+06C6, U+06CC, U+06CE, U+06D5, U+06F0-06F9 (by Remy Oudompheng) +- added to Mono in Arabic Presentations Forms-A : U+FB52-FB81, U+FB8A-FB95, + U+FB9E, U+FB9F, U+FBAA-FBAD, U+FBE8, U+FBE9, U+FBFC-FBFF (by Remy Oudompheng) +- added to Mono in Arabic Presentations Forms-B : U+FE70-FE74, U+FE76-FEFC, + U+FEFF (by Remy Oudompheng) +- added U+05BA, U+05BE, U+05F3, U+05F4, U+FB1E, U+FB21-U+FB28, U+FB4F to Sans + (by Eugeniy Meshcheryakov) +- added U+2102 to Mono (by Eugeniy Meshcheryakov) +- added U+2983-U+2984 to Sans (by Gee Fung Sit) +- added U+2A2F to Sans, Serif and Mono (by Gee Fung Sit) +- added U+2373-2375, U+237A to Sans (by John Karp) +- converted kern pairs to kern classes with Tavmjong Bah's scripts + (by Denis Jacquerye) +- set ScriptLang of kerning classes to just latn because of Pango bug + (by Denis Jacquerye) +- added DNK to ScriptLang latn otherwise it is excluded, and SRB and MDK to + cyrl (by Denis Jacquerye) +- removed flag 0x80 in generate.pe, otherwise it generates kerning tables some + systems don't like; thus loosing Apple tables (by Denis Jacquerye) +- removed ligature for precomposed legacy characters of Sans Oblique fonts + (by Denis Jacquerye) +- added bearings to en dash U+2013, em dash U+2014 and figure dash U+2012 + by making dashes shorter, preserving character width (by Denis Jacquerye) +- reduced U+031C, U+0325 (ring below), U+0339 to be entirely visible; + added instructions in Sans Book; changed U+1e00-U+1e01 to use new ring below + (by Denis Jacquerye) +- adjusted circumflex below on U+1E12-U+1E13, U+1E18-U+1E19, U+1E3C-U+1E3D, + U+1E4A-U+1E4B, U+1E70-U+1E71, U+1E76-U+1E77 in Sans fonts (by Denis Jacquerye) +- Added U+0ED4, U+0ED5 to DejaVu Sans (by Remy Oudompheng) +- Lao-specific anchors (by Remy Oudompheng) +- added alternate I to match the small capital in Sans (by Gee Fung Sit) + +Changes from 2.14 to 2.15 + +- improved hinting in Sans Oblique to deal with some spacing and inconsistency + issues (by Ben Laenen) +- added anchors to Mono Book, and added GPOS rules for combining diacritics to + show up as zero width glyphs (by Ben Laenen) +- removed U+F21C (PUA), it was copy of U+2C64 from Latin Extended C (by Eugeniy + Meshcheryakov) +- added U+27E6-U+27E7 to Sans (by Gee Fung Sit) +- added U+1407, U+1409, U+140C-U+141B, U+141D-U+1425, U+1427-U+142E, + U+1435-U+1438, U+143A-U+1449, U+1452, U+1454, U+1457-U+1465, U+1467-U+146A, + U+1471, U+1474-U+1482, U+1484-U+1488, U+148F, U+1492, U+14A0, U+14A2, U+14A9, + U+14AC-U+14BA, U+14BC, U+14BD, U+14C6, U+14C9-U+14CF, U+14D1, U+14D2, U+14D9, + U+14DC-U+14E9, U+14EC, U+14F3, U+14F6-U+1504, U+1506, U+1507, U+1510-U+1525, + U+152C, U+152F-U+153D, U+1540, U+1541, U+154E, U+154F, U+1552, U+155B, U+155C, + U+1568, U+1569, U+1574-U+157B, U+157D, U+15A7-U+15AE, U+1646, U+1647 (by + Eugeniy Meshcheryakov) +- fixed several contours to not intersect, use horizontal or vertical tangents, + use integer coordinates, etc in Sans Book (by Denis Jacquerye) +- added U+0496-U+0497 in Serif (by Andrey V. Panov) + +Changes from 2.13 to 2.14 + +- added Philippine peso glyph U+20B1 (by Clayborne Arevalo) +- made U+2012 have the same width as digits, according to Unicode 5.0, + page 206 (by Roozbeh Pournader) +- made all of the "above" combining characters remove the dot of "i", + "j", etc (Soft_Dotted characters), according to Unicode 5.0, + page 228 (by Roozbeh Pournader) +- made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts + except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed), + U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif + and Serif Condensed) respect the Soft_Dotted property (by Roozbeh + Pournader) +- added U+223E, U+223F, U+2240, U+22C2, U+22C3 to Sans (by Remy Oudompheng) +- added U+203D to Serif (by Gee Fung Sit) +- added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee + Fung Sit) +- changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432) + (by Ben Laenen) +- added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A, + U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA, + U+0EAB, U+0EAD-0EAF to Sans Mono (by Remy Oudompheng) +- added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07, + U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D, + U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59, + U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77, + U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono + (by Ben Laenen) +- renamed uppercase variants of diacritics (macron, breve, double grave, + double acute, inverted breve, dot above) to "uni03XX.case" in Mono + (by Ben Laenen) +- moved uppercase variants of diacritics up in Mono so they properly + vertically align on capitals (by Ben Laenen) +- precomposed glyphs with macron, breve, double grave, double acute, + inverted breve, dot above, macron below, breve below, inverted breve + below, dot below, cedilla, caron below, circumflex below, diaeresis + below, tilde below now reference to combining diacritics instead of + space modifiers in Mono (by Ben Laenen) +- made ring below (U+0325), and half rings below (U+031C and U+0339) + smaller in Mono (by Ben Laenen) +- added U+205F to all fonts (by Roozbeh Pournader) +- added U+035E-U+035F to Sans (by Roozbeh Pournader) +- added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F, + U+FE00-U+FE0F to non-Mono fonts (by Roozbeh Pournader) +- added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B, + U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F, + U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11, + U+2B20-U+2B23 to Sans (by John Karp) +- reshaped omega (U+03C9) in Mono (by Ben Laenen) +- added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F, + U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344, + U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354, + U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365, + U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383, + U+2388-U+238B, U+2395 in Mono (by Ben Laenen) + +Changes from 2.12 to 2.13 + +- adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book + (by Denis Jacquerye) +- added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans + (by Denis Jacquerye) +- added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF, + U+021E-U+021F, U+0245, U+02BD, U+02C9, U+1E9B, U+2045-U+2046, U+2213, U+22C5, + U+22EF to Sans Mono (by Roozbeh Pournader) +- added U+04FA-U+04FD to Sans (by Michael Everson) +- removed U+2329 and U+232A because of their CJK properties, added U+27E8 + and U+27E9 in their stead, fixing part of bug #9038 (by Roozbeh Pournader) +- corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482, + U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A + in Sans (by Michael Everson) +- added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F, + U+0452, U+0459-U+045B, U+045F to Sans Book (by Eugeniy Meshcheryakov) +- made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447, + U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique + (by Andrey V. Panov) +- modified U+024C to match glyph in Unicode chart, fixing bug #9039 + (by Denis Jacquerye) +- made some canonically equivalent characters share the same glyph: + U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA + to look like double U+02B9, fixing parts of bug #9038 (by Roozbeh Pournader) +- changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts, + based on a recent decision by Unicode Technical Committee to only use + the digraph form (by Michael Everson) +- adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401 + (by Denis Jacquerye) +- fixed several contours to not intersect, use horizontal or vertical tangents, + use integer coordinates, etc (by Roozbeh Pournader and Denis Jacquerye) +- added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE, + U+1527, U+1545, U+157E, U+158E, U+15AF to Sans (by Eugeniy Meshcheryakov) +- enlarged width of U+459 and U+45A in Serif (by Andrey V. Panov) +- made traditional shape for U+452, U+45B (by Andrey V. Panov) +- added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize + the font as supporting English (by Denis Jacquerye) + +Changes from 2.11 to 2.12 + +- added U+0180 to Serif (by Denis Jacquerye) +- improved and/or hinted Armenian letters U+0542, U+0546, U+0562, + U+0563, U+0564, U+0577, U+0582 in Sans (by Ben Laenen) +- added U+4FE-U+4FF, U+512-U+513, U+2114, U+214E, U+26B2 to Sans + (by Gee Fung Sit) +- adjusted U+0496-U+0497, U+049A-U+04A1 in Sans to match U+0416, + U+041A, U+0436 and U+043A (by Gee Fung Sit) +- Mathematical Operators in Sans: changed U+22C0-U+22C1 to match + other n-ary operators, adjusted U+2203-U+2204, changed U+2220 in + Sans to match the style of U+2221 (by Gee Fung Sit) +- added U+1401, U+1403-U+1406, U+140A, U+140B, U+1426, U+142F, + U+1431-U+1434, U+1438, U+1439, U+1449, U+144A, U+144C, + U+144E-U+1451, U+1455, U+1456, U+1466, U+146B, U+146D-U+1470, + U+1472, U+1473, U+1483, U+1489, U+148B-U+148E, U+1490, U+1491, + U+14A1, U+14A3, U+14A5-U+14A8, U+14AA, U+14AB, U+14BB, U+14C0, + U+14C2-U+14C5, U+14C7, U+14C8, U+14D0, U+14D3, U+14D5-U+14D8, + U+14DA, U+14DB, U+14EA, U+14ED, U+14EF-U+14F2, U+14F4, U+14F5, + U+1405, U+1526, U+1528-U+152B, U+152D, U+152E, U+153E, + U+1542-U+1544, U+1546-U+154D, U+1550, U+1553, U+1555-U+155A, + U+1567, U+156A, U+157C, U+157F-U+1585, U+158A-U+158D, + U+158F-U+1596, U+15A0-U+15A6, U+15DE, U+15E1, U+166E-U+1676 to + Sans (by Eugeniy Meshcheryakov) +- re-enabled Latin ligatures fi, ffi, fl, ffl and ff in Sans + (by Ben Laenen) +- made italic shape for U+436, U+44A, U+44B, U+44C, U+44E, U+45F, + U+463 in SerifOblique and SerifBoldOblique (by Andrey V. Panov) +- fixed sub- and superscript metrics in Condensed Sans (bug #8848) + (by Ben Laenen) +- added U+474, U+475 in Serif (by Andrey V. Panov) +- hinted Greek glyphs U+03B7, U+30B8, U+03B9, U+03C1, U+03C3, + U+03C6 in Mono Book (by Ben Laenen) + +Changes from 2.10 to 2.11 + +- added instructions for Hebrew glyphs (Sans Book, by Eugeniy + Meshcheryakov) +- changed U+01A6 (Latin Yr) after bug #8212, in Sans, Serif and + Sans Mono fonts (by Denis Jacquerye). +- removed instruction for U+2600-U+26A1 (by Mederic Boquien) +- added U+202F and set width of U+00A0 (nobreakingspace) to the + same as U+0020, space (by Denis Jacquerye). +- added and improved instructions for various Cyrillic letters + (by Eugeniy Meshcheryakov) +- Changed U+416, U+42F, U+427 (non-Bold), U+436, U+447 (non-Bold), + U+44F, U+437 (Bold), corrected U+40F, U+414, U+424, U+426, U+429, + U+434, U+438 (Bold), U+446, U+449, U+44D (non-Bold), U+45F in + Sans Mono (by Andrey V. Panov) +- made small corrections to Cyrillic, most appreciable to U+409, + U+413, U+41B, U+427 and U+433, U+434, U+43B, U+447, U+459 + (upright fonts) to Serif (by Andrey V. Panov) +- adjusted bearings of U+410, U+416, U+41A, U+42F, U+436, U+43A, + U+443, U+44F in Serif (by Andrey V. Panov) +- enlarged width of U+44A, U+44B, U+44C, U+463 in Serif + (by Andrey V. Panov) +- added ligature "iacute" as "afii10103" (U+456) "acutecomb" in + Serif (by Andrey V. Panov) +- made italic shape to U+446, U+448, U+449 in Serif (by Andrey V. + Panov) +- added "afii10831" (U+F6C7), "afii10832" (U+F6C8) in Serif (by + Andrey V. Panov) +- new minimum version of fontforge is 20061014 (by Ben Laenen) + +Changes from 2.9 to 2.10: + +- added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F, + U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8, + U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and + U+FB29 to Sans (by Gee Fung Sit) +- added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D, + U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB, + U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD + (by Remy Oudompheng) +- fixed U+0193 not showing in Windows (bug #7897) (by Ben Laenen) +- changes to U+222B-222D in Sans Mono (by Remy Oudompheng) +- ported the three remaining currency symbols from Arev (U+20B0, + U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye + Christensen) +- corrected U+20A5 in Sans (by Gee Fung Sit) +- merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115, + U+2119-U+211A, U+2124, U+213C-U+2140 (by Gee Fung Sit) +- added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces, + fixed incorrect direction of U+2329 in Sans faces, and improved + U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David + Lawrence Ramsey) +- added U+06D5 and final form of it (needed for Kurdish) (by Ben Laenen) +- added two special glyphs U+F000 and U+F001 in Sans Book that show the + current ppem size (horizontal and vertical) (by Ben Laenen) +- added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions + (by David Lawrence Ramsey) +- added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David + Lawrence Ramsey) +- respaced all Geometric Shapes characters in Serif faces to match those + in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and + Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again, + and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1 + again (by David Lawrence Ramsey) +- corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique + and U+1D9B-U+1DBF in Sans Oblique and Sans Bold Oblique (by Gee Fung Sit) +- added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by + Gee Fung Sit) +- adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by + Gee Fung Sit) +- added U+0242, U+0245 to Serif (by Gee Fung Sit) +- replaced the SHPIX routines which gave them bad spacing at certain + sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen) + +Changes from 2.8 to 2.9: + +- DejaVuSansExtraLight.sfd: changed family name from "DejaVu Sans" to + "DejaVu Sans Light" (in case we add a Light weight variant), so legacy + apps that understand only 4 styles are happy. (by Denis Jacquerye) +- added Name ID 16, aka preferred family name, and Name ID 17, aka + preferred style name, so contemporary apps that understand more that 4 + styles can use big fonts families "DejaVu Sans" and "DejaVu Serif". For + those, Extralight and Condensed are just styles not different families. + (by Denis Jacquerye) +- added U+22B6-22BD, U+22C0-22C1, U+22D6-22D7 to Sans. (by Remy Oudompheng) +- added U+037B, U+2184, U+2C67-U+2C6A and U+2C75-U+2C77 to Sans (by Gee + Fung Sit) +- adjusted asteriskmath (U+2217) for consistency with other mathematical + operators in Sans (by Ben Laenen) +- hinted some Armenian capitals in Sans Book (by Ben Laenen) +- added U+0246 - U+0249 (by Ben Laenen) +- BUGFIX : swapped U+224E and U+224F, in Sans, Sans Condensed and Sans Mono + (by Remy Oudompheng) +- adjusted U+20B5 (by Mederic Boquien) +- swapped U+21DA and U+21DB which were in wrong order (by Heikki Lindroos) +- added U+222E-2233, U+239B-23AD, U+2A00-2A02, U+2A0F-2A1C to Sans (by Remy + Oudompheng) +- added U+239B-23AD to Mono (by Remy Oudompheng) +- added U+2024-2025 to Serif (by Mederic Boquien) +- added U+222C-222D, U+2A0C-2A0E to Serif (by Remy Oudompheng) +- added U+2190-21FF to Mono (by Heikki Lindroos) +- added Hebrew glyphs - U+05B0-U+05BD, U+05BF-U+05C3, U+05C6, U+05C7, + U+05D0-U+05EA, U+05F0-U+05F2, U+FB1F, U+FB20, U+FB2A-U+FB36, + U+FB38-U+FB3C, U+FB3E, U+FB40, U+FB41, U+FB43, U+FB44, U+FB46-U+FB4E (by + Gee Fung Sit and Eugeniy Meshcheryakov) +- adjustments for Cyrillic in Sans (by Andrey V. Panov) +- made italic shape for U+0434, U+0456, U+0457 in SerifOblique and Serif + Bold Oblique (by Andrey V. Panov) + +Changes from 2.7 to 2.8: + +- fixed instructions for U+0423, U+0427, U+0447, U+0448 in Serif, so they + look good at large sizes too (by Eugeniy Meshcheryakov) +- added U+FB00 and U+FB03 to U+FB06 to Serif typefaces (by Heikki Lindroos) +- added U+26B0-U+26B1, U+2701-U+2704, U+2706-U+2709, U+270C-U+2727, U+2729 + to U+274B, U+274D, U+274F to U+2752, U+2756, U+2758-U+275E, U+2761 to + U+2775 (by Heikki Lindroos) +- added and improved instructions for Cyrillic letters in Mono and Serif + (Book, by Eugeniy Meshcheryakov) +- rotated U+26B0 (was too small in mono) (by Gee Fung Sit) +- adjusted U+1EDA-U+1EDD, U+1EE8-U+1EEB, capitals using capital specific + accent and moved diacritics to match position on U+00F2 (ograve), etc. + (by Denis Jacquerye) +- added U+20D6, U+20D7 to Sans (by Gee Fung Sit) +- made Armenian ligatures discretionary since the Firefox ligature problem + still isn't fixed (by Ben Laenen) +- moved Armenian hyphen U+058A to a higher position (bug #7436) (by Ben + Laenen) +- hinted Greek glyphs in Sans Bold (by Ben Laenen) +- enabled Arabic lam-alif ligatures when diacritics are used (by Ben Laenen) + +Changes from 2.6 to 2.7: + +- added glyphs needed for Kurdish: U+0695, U+06B5, U+06C6, U+06CE and their + init/medi/fina forms in Sans (by Ben Laenen) +- added U+02CD, U+01F8 - U+01F9, U+1E3E - U+1E3F, U+1E30 - U+1E35, U+1EBC - + U+1EBD, U+1EF8 - U+1EF9 (includes glyphs needed for Yoruba, Maori, Guarani + and Twi) (by Ben Laenen) +- added U+22C8-22CC, U+29CE-29D5, U+2A7D-2AA0, U+2AAE-2ABA, U+2AF9-2AFA to + Sans (by Remy Oudompheng) +- adjusted diacritics on Vietnamese, Pinyin and other characters: + U+01A0-U+01A1, U+01AF-U+01B0, U+01D5-U+01DC, U+01DE-01E1, U+01FA-U+01FB + U+022A-U+022D, U+0230-U+0231, U+1E14-U+1E17, U+1E4C-U+1E53, U+1E78-U+1E7B, + U+1EA4-U+1EF1 in Sans (Book, Bold and Oblique) (by Denis Jacquerye) +- added basic arrows U+2190-U+2193 in Serif, which completes MES-1 compliance + for Serif (by Ben Laenen) +- added U+01E4, U+01E5, U+01FA, U+01FB, U+02BD, U+02C9 and U+02EE to Serif + (by Ben Laenen) +- fixed U+0209 in Serif Bold Oblique (by Ben Laenen) +- adjusted Box Drawing block characters U+2500-257F in Mono to fit character + cell, shifting them up by 416 (Denis Jacquerye) +- redid U+0194 in Sans (by Ben Laenen) +- added U+2217-2218, U+2295-22A1 to Mono (by Remy Oudompheng) +- added U+0462 to Serif (by Andrey V. Panov) +- added U+226C, U+228C-228E, U+2293-2294, U+22F2-22FF to Sans (by Remy + Oudompheng) +- adjusted U+2208-220D in Sans (by Remy Oudompheng) +- improved some Cyrillic glyphs in Mono (by Andrey V. Panov), rewritten + instructions for changed glyphs (by Eugeniy Meshcheryakov) +- added U+1E0E-1E0F, U+1E8E-1E8F to Mono fonts (by Denis Jacquerye). (bug + #7166) +- renamed 'Dotabove' to 'Dotaccent' in Mono Sans Oblique to match other fonts + (by Denis Jacquerye). +- added U+200B-U+200F in Sans faces and Serif faces, U+200B and U+200C were + in Sans already (by Lars Naesbye Christensen) +- added U+2601-U+262F, U+263D, U+263E, U+2648-U+265F, U+2668, U+2670-U+268B, + U+2690-U+269C, U+26A0, U+26A1, U+2794, U+2798-U+27AF, U+27B1-U+27BE to Mono + (by Heikki Lindroos) +- replaced the references with unshifted ones for both κ U+03BA and к U+043A + in Mono Book (by Denis Jacquerye) +- fixing glyph for U+04ED in Mono Book, consisted only of dieresis (by Andrey + V. Panov). + +Changes from 2.5 to 2.6: + +- redid U+2032 - U+2037, U+2057 based on Arev in Sans (by Gee Fung Sit) +- added U+0195, corrected U+039E, U+204B in Sans ExtraLight (by Gee Fung Sit) +- added instructions for some Cyrillic letters in Sans Bold (by Eugeniy + Meshcheryakov) +- added vulgar fractions U+2153-U+215F for Serif, made with references (by + Lars Naesbye Christensen) +- added U+228F-2292, U+2299-22AF, U+22B2-22B5, U+22CD, U+22D8-22ED to Sans + (by Remy Oudompheng) +- added U+2208-220D, U+2238-223D, U+2278-2281, U+228A-228B, U+228F-2292, + U+22CD, U+22DA-22E9 to Mono (by Remy Oudompheng) +- fixed misplaced dot in U+2250 in Mono (by Remy Oudompheng) +- added instructions for some Cyrillic letters in Mono Book and Bold(by + Eugeniy Meshcheryakov) +- minor changes to U+2241, U+2261-2263, U+22A4, U+22A5 in Sans (by Remy + Oudompheng) +- added hinting instructions to lowercase Armenian glyphs in Sans Book (by + Ben Laenen) +- changed U+2208, U+220B to match U+2209 and U+220C in Sans Bold (by Remy + Oudompheng) +- added Braille patterns U+2800-U+28FF to Sans (by Mederic Boquien) +- added instructions for some Cyrillic letters in Serif Book (by Eugeniy + Meshcheryakov) +- renamed BoldOblique fonts to Bold Oblique in TTF Name as originally in + Bitstream Vera fonts (by Denis Jacquerye) +- added hinting instructions to some Latin-B Extended and IPA characters in + Sans Book (by Denis Jacquerye and Ben Laenen) +- adjusted bearings, replaced diacritics, hinted hook and horn for + Vietnamese in Sans Book (by Denis Jacquerye) +- made FAX, TM, TEL, etc. discritionary ligatures in Sans and Serif fonts + (by Denis Jacquerye) +- removed ligatures of precomposed characters in Sans and Serif fonts (by + Denis Jacquerye) +- added U+F208, U+F20A, U+F215-F217, U+F21A-F21B, U+F25F in PUA (from SIL's + PUA, probably in Unicode 5.0): U+0243, U+0244, U+0245, U+024C, U+024D, + U+2C64, (U+2C6D), (U+2C71) +- modified some glyphs in Serif Oblique to make them more italic (by Denis + Jacquerye) + +Changes from 2.4 to 2.5: + +- fixed excessive kerning bug that occurs with Pango (by Denis Jacquerye) +- added U+20AF to Sans and Serif (by Lars Naesbye Christensen) +- regenerated Condensed faces (by Ben Laenen) +- added U+035C-U+035D to Sans, fixed U+0361 (by Denis Jacquerye) +- integrated 255 characters from Arev fonts: Latin Extended-B, Spacing + Modifiers, Combining Diacritical Marks, Cyrillic, Cyrillic supplement, + General Punctuation, Letterlike Symbols, Arrows, Mathematical Operators, + Miscellaneous Technical, Dingbats, Alphabetic Presentation Forms (by Denis + Jacquerye) +- added basic Cyrillic and basic Greek to Sans ExtraLight (by Denis Jacquerye) +- added U+0498, U+049A, U+04AA, U+04AB, U+04AF to Serif (by Eugeniy + Meshcheryakov) +- added U+0494, U+0495, U+0498, U+0499, U+04AA, U+04AB, U+04C3, U+04C4, + U+04C7, U+04C8 to Mono (by Eugeniy Meshcheryakov) +- adjusted weight of U+0256, U+0257, U+0260, U+0272, U+0273, U+0277, U+029B, + U+02A0 and modifed U+028B and U+027A in Mono (by Denis Jacquerye) +- added U+2000-200A to Mono (by Denis Jacquerye) +- added vulgar fractions U+2153 - U+215F to Mono (by Gee Fung Sit) +- adapted metrics of Arabic glyphs so they stay above cut-off height in Sans + (by Ben Laenen) +- fixed mkmk anchors for Arabic diacritics so they stack properly in Sans (by + Ben Laenen) +- fixed weight of lowercase upsilon in Sans Bold, make small adjustment to + lowercase omega in Sans (by Ben Laenen) +- added U+210E (by Mederic Boquien) +- unslanted U+2201, U+221B and U+221C in Sans Oblique (by Mederic Boquien) +- added several mathematical relation symbols to Sans and Mono (U+2241-224C, + U+2250-2255, U+2260-2269, U+226E-2277, U+2282-2287) modified U+223C to match + other tildes, and U+2282-2284 to have the same shape. (by Remy Oudompheng) +- made U+2234-U+2237 refer to U+2219 instead of U+00B7 in Sans (by Mederic + Boquien) +- added U+2238-223B, U+226A-226B, U+2278-2281, U+2288-228B to Sans (by Remy + Oudompheng) +- unslanted and changed reference of U+22C5 from U+00B7 to U+2219 in Sans (by + Mederic Boquien) +- added U+224D-225F, U+226D, U+22C6 to Sans and unslanted U+2219 in Sans + Oblique. (by Remy Oudompheng) +- added U+224D-225F, U+226D to Mono, shifted U+2266-2269 higher upwards and + unslanted U+2219 in Oblique. (by Remy Oudompheng) +- merged Coptic glyphs from Arev 0.2 (by Lars Naesbye Christensen) +- fixed and adjusted various Cyrillic glyphs in Serif (by Andrey V. Panov) +- made fi, fl... ligatures discretionary ligatures (by Ben Laenen) + +Changes from 2.3 to 2.4: + +- added U+04A2, U+04A3, U+04AC - U+04AF, U+04BA, U+04BB, U+04C0 - + U+04C2, U+04CB, U+04CD, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04E8 - U+04F5, + U+04F6 - U+04F9 to Mono (by Eugeniy Meshcheryakov) +- added U+048C, U+048D, U+0494, U+0495, U+049E - U+04A7, U+04AC - + U+04AE, U+04B4- U+04B7, U+04BA, U+04BB, U+04C0 - U+04C4, U+04C7, U+04C8, + U+04CB, U+04CC, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04EC - U+04F9 to Serif + (by Eugeniy Meshcheryakov) +- added U+2134 to Sans (by Gee Fung Sit) +- added U+2080 - U+2089 to all faces (by Gee Fung Sit) +- several minor corrections to Sans (by Gee Fung Sit) +- major corrections to Sans Condensed (by Gee Fung Sit) +- corrected Superscripts and Subscripts in Sans (by Gee Fung Sit) +- corrected anchors of U+0316-U+0319 (by Denis Jacquerye) +- Verajja integrated (by Stepan Roh) +- copied U+2328, U+2600, U+2639-U+263C, U+263F-U+2647, U+2660-U+2667, + and U+2669-U+266F from Sans to Serif, and copied scaled-down versions of + them to Sans Mono (by David Lawrence Ramsey) +- added U+20B4 to all faces (by Eugeniy Meshcheryakov) +- added more minor positional adjustments to U+2638 in all faces to + match the other miscellaneous symbols in Verajja, and rescale it in Sans + Mono so that it looks better (by David Lawrence Ramsey) +- added U+2242, U+2243 and U+22A4 (by Mederic Boquien) +- corrected U+2245 in Sans (by Mederic Boquien) +- added U+0221, U+0234-0236 (by Denis Jacquerye) +- added in Arabic block to Sans: U+060C, U+0615, U+061B, U+061F, U+0621 +- U+063A, U+0640 - U+0655, U+0660 - U+066F, U+0679 - U+0687, U+0698, U+06A1, + U+06A9, U+06AF, U+06BA, U+06BF, U+06CC, U+06F0 - U+06F9 (by Ben Laenen) +- added in Arabic Presentation Forms A to Sans: U+FB52 - U+FB81, U+FB8A +- U+FB95, U+FB9E - U+FB9F, U+FBE8 - U+FBE9, U+FBFC - U+FBFF (by Ben Laenen) +- added complete Arabic Presentation Forms B to Sans: U+FE70 - U+FE74, + U+FE76 - U+FEFC, U+FEFF (by Ben Laenen) +- added complete Greek Extended block to Mono (by Ben Laenen) +- modified Greek capitals with tonos in Mono (by Ben Laenen) +- added U+01C4-01CC, U+01D5, U+01DE, U+01E0-U+01E1, U+01E6-U+01E9, + U+01EE-U+01F5, U+01F8-U+0217, U+021E-U+021F, U+0226-U+022A, U+022C to Serif + (by Denis Jacquerye) +- adjusted U+043B and U+044F in Serif (by Denis Jacquerye) +- added U+2000-U+200A (by Denis Jacquerye) +- added U+1E00-U+1E0B, U+1E0E-U+1E11, U+1E14-U+1E1C, U+1E1E-U+1E23, + U+1E26-U+1E2D, U+1E30-U+1E35, U+1E3A-U+1E3B, U+1E3E-U+1E40, U+1E48-U+1E49, + U+1E50-U+1E56, U+1E58-U+1E59, U+1E5E-U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, + U+1E72-U+1E7D, U+1E86-U+1E9B, U+1EA0-U+1EA3, U+1EAC-U+1EB7, U+1EBA-U+1EBD, + U+1EC6-U+1ECF, U+1ED8-U+1ED9, U+1EE6-U+1EE7, U+1EF4-U+1EF9 to Serif (by + Denis Jacquerye) +- added U+048E, U+048F, U+049C-U+049F, U+04B8, U+04B9, U+04BC-U+04BF, + U+04C3, U+04C4 to Sans (by Eugeniy Meshcheryakov) +- added DejaVu Sans Extra Light (by Denis Jacquerye) +- Adjusted underline position for (hopefully) improved legibility in + Sans, Serif, Mono (Tim May) +- added auto-generated DejaVu LGC (by Stepan Roh) + +Changes from 2.2 to 2.3: + +- fixed bug U+042B and U+044B behave badly in Sans Bold or Oblique (by + Keenan Pepper) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- added U+04D0-U+04D7, U+04E6, U+04E7 to Mono (by Eugeniy Meshcheryakov) +- added U+048A - U+048D, U+0498, U+0499, U+04AA, U+04AB, U+04B0, U+04B1, + U+04C0, U+04C9, U+04CA, U+04CE, U+04CD, U+04DA, U+04DB, U+04DE, U+04DF, + U+04E2 - U+04E5, U+04EC - U+04F8, U+04F9 to Sans (by Eugeniy Meshcheryakov) +- added U+04E0, U+04E1 to all faces (by Eugeniy Meshcheryakov) +- added Greek Extended to Sans and Serif: U+1F00-U+1F15, U+1F18-U+1F1D, + U+1F20-U+1F45, U+1F48-U+1F4D, U+1F50-U+1F57, U+1F59, U+1F5B, U+1F5D, + U+1F5F-U+1F7D, U+1F80-U+1FB4, U+1FB6-U+1FC4, U+1FC6-U+1FD3, U+1FD6-U+1FDB, + U+1FDD-U+1FEF, U+1FF2-U+1FF4, U+1FF6-U+1FFE (by Ben Laenen) +- added Greek variant letterforms, archaic letters and symbols to Mono: + U+03D0-U+03E1, U+03F0-U+03FF (by Ben Laenen) +- added Armenian block and Armenian ligatures to Sans (U+0531 - U+0556, + U+0559 - U+055F, U+0561 - U+0587, U+0589 - U+058A, U+FB13 - U+FB17) (by Ben + Laenen) +- redid some Greek characters in Sans and Mono to make them look better + and to correct some errors (by Ben Laenen) +- added U+27E0 to all faces (by David Lawrence Ramsey) +- added underscore (U+005F) consistency fixes: extended the Sans Mono + and Sans Mono Oblique underscores to touch both horizontal edges, and + reduced the height of the Sans Bold Oblique underscore to match the Sans + Bold underscore (by David Lawrence Ramsey) +- added underscore (U+005F) derivatives and consistency fixes for them: + made U+0332 a reference to underscore at Denis Jacquerye's suggestion; made + U+0333 two references to underscore; made U+033F two references to U+203E; + added U+2017 as two references to underscore, and made U+0333 a reference to + it; and added U+203E as a reference to underscore, and made U+0305 a + reference to it (by David Lawrence Ramsey) +- added U+201B, U+2220, U+2320-U+2321, U+23AE, U+23CF, all remaining + Geometric Shapes glyphs (U+25A0-U+25C9, U+25CB-U+25D7, U+25D9-U+25E5, + U+25E7-U+25FF), and U+2B12-U+2B13 to all faces (by David Lawrence Ramsey) +- added minor positional adjustments to U+2638 in all faces (by David + Lawrence Ramsey) +- added U+201F to Sans Mono and Serif faces (by David Lawrence Ramsey) +- added U+01B7, U+01F6, U+0464 - U+0465, U+2160 - U+2180, U+2183, + U+220A, U+220D, U+2329, U+232A, U+2422, U+27E8 - U+27EB, U+2680 - U+2685 to + Sans (by Gee Fung Sit ???) +- added U+2116 to Sans and Serif (by Gee Fung Sit) +- changed florin sign U+0192 in Sans (by Gee Fung Sit) +- added anchor points to some glyphs (by Denis Jacquerye) +- adjusted height of IPA superscripts U+02B0-02B8, U+02C0-02C1, + U+02E0-02E4, U+207F to match with height of U+00B2 (by Denis Jacquerye) +- added U+0184-U+0185, U+019C, U+019F, U+01A0-U+01A3, U+01A6, U+01AA, + U+01AF-U+01B0, U+01B2-U+01B4, U+01B7-U+01B8, U+01BC-U+01BC, U+0224-U+0225, + U+023A-U+0240, U+1D16-U+1D17, U+1D1D-U+1D1E, U+1D43-U+1D5B, U+1D7B, + U+1D85,U+1D9B-1DB7, U+1DB9-U+1DBF, U+20A6 to all fonts (by Denis Jacquerye) +- added added U+0182, U+018B, U+018E, U+01A0-U+01A1, U+01B1, U+01B9, + U+01C0-U+01C3, U+0238-U+0239, U+1D02, U+1D08-U+1D09, U+1D14, U+1D1F, U+1D77 + to Serif and Mono (by Denis Jacquerye) +- added U+0181, U+0183, U+0187-U+0188, U+018A-U+018F, U+0191, U+0193, + U+0195-U+019B, U+019D-U+019E, U+01A4-U+01A5, U+01AC-U+01AE, U+01B5-U+01B6, + U+01B9, U+01BB, U+01F6 to Serif (by Denis Jacquerye) +- added U+0181, U+0187-U+0188, U+018A, U+018D, U+018F, U+0191, U+0193, + U+0195-U+019F, U+01A4-01A5, U+01AC-01AD, U+01B5-U+01B6, U+1BB, U+01F6, + U+01D7-U+01DC, U+0238-U+0239, U+0241 to Mono (by Denis Jacquerye) +- added to Mono and Serif (by Denis Jacquerye) + +Changes from 2.1 to 2.2: + +- reworked the vertical orientation of the Blocks Elements characters + in all faces to remove their overly large descenders, in order to fix + problems with e.g. terminal emulators (by David Lawrence Ramsey) +- copied bullet in Sans faces to Serif faces for consistency (by David + Lawrence Ramsey) +- added U+2023, U+25D8, U+25E6, and U+29EB to all faces (by David + Lawrence Ramsey) +- added U+1EB8, U+1EB9, U+1ECA - U+1ECD, U+1EE4, U+1EE5 (by Tim May) +- added U+01DD, U+02BE, U+02BF, U+02D3 to all, changed U+02D2 in + non-Condensed and U+1EE5 in Serif (by Tim May) +- fixed U+01CE, replacing wrong circumflex by caron (by Denis Jacquerye) +- added anchor points to some glyphs (by Denis Jacquerye) +- added U+20B5 (by Denis Jacquerye) +- added U+0181 - U+0183, U+0187, U+0188, U+018A - U+018D, U+0191, + U+0193, U+0195 - U+019B, U+019D, U+019E, U+01A4, U+01A7 - U+01A9, U+01AB - + U+01AE, U+01B1, U+01B5, U+01B6, U+01BB, U+01C0 - U+01C3, U+01F1 - U+01F3, + U+0238, U+0239, U+1D02, U+1D08, U+1D09, U+1D14, U+1D1F, U+1D77, U+2103, + U+2126, U+2127, U+212A, U+212B, U+2132, U+214B, U+2210, U+2217, U+2218, + U+2A0C - U+2A0E, U+FB00, U+FB03 and U+FB04 to Sans (by Gee Fung Sit) +- added U+01A9, U+01C3 and U+2126 to Mono and Serif (by Gee Fung Sit) +- adjusted bearings of U+028B in Sans (by Gee Fung Sit) +- added U+018F, U+0494-U+0497, U+04A0-U+04A7, U+04AC-U+04AF, + U+04B4-U+04B7, U+04BA-U+04BB, U+04C1-U+04C2, U+04C5-U+04C8, U+04CB-U+04CC, + U+04D0-U+04D9, U+04DC-U+04DD, U+04E6-U+04EB to Sans (by Eugeniy + Meshcheryakov) +- replaced with references U+0391-U+0393, U+0395-U+0397, U+0399, U+039A, + U+039C, U+039D, U+039F-U+03A1, U+03A4, U+03A5, U+03A7, U+03BF, U+03DC, + U+0405, U+0406, U+0408, U+0410, U+0412, U+0415, U+0417, U+041A, + U+041C-U+041E, U+0420-U+0422, U+0425, U+0430, U+0435, U+043E, U+0440, + U+0441, U+0443, U+0445, U+0455-U+0458 in Serif and Mono (by Eugeniy + Meshcheryakov) +- added U+04D0-U+04D7, U+04E6-U+04EB to Serif (by Eugeniy Meshcheryakov) +- added U+212A and U+212B to the rest of the faces (by Lars Naesbye + Christensen) +- added U+2318 and U+2325 to Sans and Serif (by Lars Naesbye Christensen) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- completed basic Greek alphabet: added U+0374-U+0375, U+037A, U+037E, + U+0384-U+038A, U+038C, U+038E-U+0390, U+03AC-U+03BF, U+03C1-U+03CE (by Ben + Laenen) +- added U+2070 and U+2074-U+2079 (by Mederic Boquien) + +Changes from 2.0 to 2.1: + +*** Be aware that names of some TTF files changed since version 2.0. *** + +- added U+0323, U+1E0C, U+1E0D, U+1E24, U+1E25, U+1E36 - U+1E39, U+1E42, + U+1E43, U+1E46, U+1E47, U+1E5A - U+1E5D, U+1E62, U+1E63, U+1E6C, U+1E6D, + U+1E7E, U+1E7F (by Tim May) +- fixed bug where GNOME applications used Mono Bold Oblique instead of + Mono Oblique (by Keenan Pepper) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- added U+1E41, U+1E57, U+1E61 (by Sander Vesik) +- added U+0189, U+0309, U+0313, U+0314, U+031A, U+031B, U+0327, U+0328, + U+032B, U+0333, U+033C (by Denis Jacquerye) +- adjusted and fixed U+0186, U+0254, U+0291, U+0316 - U+0319, U+031C - + U+0320, U+0323 - U+0326, U+0329 - U+032A, U+032C - U+0332, U+0339 - U+033B, + U+033E, U+033F (by Denis Jacquerye) +- fixed U+1E12, U+1E3C, U+1E4A, U+1E70 to have normal below diacritics + (by Denis Jacquerye) +- fixed U+1E82, U+1E84 and U+1EF2 to have uppercase above diacritics (by + Denis Jacquerye) +- added anchor points to some glyphs (by Denis Jacquerye) +- dropped "-Roman" from font names - affects both internal TTF names and + names of generated files (by Stepan Roh) +- attempt to fix bug Vertical spacing too big for Mono by exchanging + LineGap and OS2TypoLinegap values (proofed by Stefan Rank) +- added Greek capitals U+0391 - U+03A1, U+03A3 - U+03A9, U+03AA, U+03AB + in Mono (by Ben Laenen) +- added the per ten thousand sign U+2031 (by Mederic Boquien) +- added U+2207, U+221D, U+221F, U+2227 - U+222A, and U+2261 (by David + Lawrence Ramsey) +- new logo (by Gee Fung Sit) +- added U+0180, U+018E, U+201F, U+2024, U+2025, U+203D, U+2200, U+2203, + U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit) + +Changes from 1.15 to 2.0: + +- "Italized" basic glyphs in all Serif Oblique and their Condensed faces + (by David Jez) +- added and improved TrueType instructions and related settings (by Keenan + Pepper) +- added anchor points to some glyphs (by Denis Jacquerye) +- many new spacing and combining accents (by Denis Jacquerye) +- smart substitutions for transforming i and j to dottless form and for + using uppercase diacritics (by Denis Jacquerye) +- fixed remaining erroneously slanted characters in Serif Oblique faces (by + David Lawrence Ramsey) +- copied bullet in Sans faces to Sans Oblique faces for consistency (by + David Lawrence Ramsey) +- added U+203C and U+2047-U+2049 (by David Lawrence Ramsey) +- added Greek glyphs to Serif (by Ben Laenen, Condensed merge by David Jez) +- fixed bug LTR glyphs behaving like RTL (by Ben Laenen) +- fixed wrong glyph directions (by David Jez) +- fixed repositioned accents in Condensed faces (by David Jez) + +Changes from 1.14 to 1.15: + +- added and improved TrueType instructions and related settings (by Keenan + Pepper) +- fixed U+2302, U+2319 (by David Lawrence Ramsey) +- fixed yet another monospace bug (by Stepan Roh) +- fixed potential "too big ascender/descender" bug (by Stepan Roh) +- fixed U+026E and U+028E (by Denis Jacquerye) +- added U+0186, U+0190, U+0300 - U+0304, U+0306 - U+0308, U+030A - U+030C, + U+0321, U+0322 (by Denis Jacquerye) +- added rest of Block Elements: U+2591 - U+2593 (by David Lawrence Ramsey) +- added U+2311, U+237D and U+2638 (by David Lawrence Ramsey) +- added U+01CD - U+01D4 (by Denis Jacquerye) +- fixed accents of U+00F2 - U+00F6 by replacing them with references in Mono + Bold (by David Jez) +- added U+0490, U+0491 (by Eugeniy Meshcheryakov) +- added hints to U+0404 and U+0454 in Sans (by Eugeniy Meshcheryakov) +- completed Greek glyphs from U+0370 to U+03CF in Serif (by Ben Laenen) +- fixed shape of U+0255 in Sans Bold and Sans Bold Oblique (by Denis + Jacquerye) + +Changes from 1.13 to 1.14: + +- fixed bug where Mono faces were not recognized as fixed pitch in Windows + by correcting Venda glyphs (by David Jez) +- added and improved TrueType instructions (by Keenan Pepper) +- added 6 Uzbekian glyphs (by Mashrab Kuvatov) +- added Greek glyphs to Sans and Serif, changed pi and omega to fit in (by + Ben Laenen) +- added IPA and related superscript glyphs (by Denis Jacquerye) +- fixed buggy Venda glyphs (by David Lawrence Ramsey and Stepan Roh) +- added U+2302, U+2310, U+2319 (by David Lawrence Ramsey) +- fixed slanted U+00AC in Serif Oblique faces (by David Lawrence Ramsey) +- added 29 glyphs from Block Elements (by David Lawrence Ramsey) + +Changes from 1.12 to 1.13: + +- removed all stems (PS hints) (requested by David Jez) +- added U+01D6, U+01DF, U+022B, U+022D and U+0231 (by Sander Vesik) +- added 10 Venda glyphs (by Dwayne Bailey) +- fixed bug when fonts had no name on Microsoft Windows (by Stepan Roh) +- updated 'missing' glyph U+FFFD (by David Jez) +- set TTF flag fsType to 'Installable Embedding' (= unrestricted usage) + (idea by C. Tiffany) + +Changes from 1.11 to 1.12: + +- added long s (by James Cloos) +- prettier comma accent in gcommaaccent (by David Jez) +- added Hbar, hbar, kgreenlandic, napostrophe, Eng, eng, Tbar, tbar, + afii57929 (by David Jez) +- changed Iogonek, iogonek, IJ, ij to look better (by David Jez) +- glyph uni0237 renamed to dotlessj (requested by David Jez) +- fixed accents for dcaron, lcaron, tcaron, Uogonek, uogonek in Serif (by + David Jez) +- added U+2500 - U+257F box drawing glyphs to Sans Mono (by David Jez) +- fixed accents in Wcircumflex, Ycircumflex and Zdotaccent (by David Jez) +- extra kerning for F (by Sander Vesik) +- added 'missing' glyph U+FFFD (by David Jez) + +Changes from 1.10 to 1.11: + +- kerning updates (by Sander Vesik) +- added Iogonek, iogonek, IJ, ij, Uogonek, uogonek (from SuSE standard fonts + by Adrian Schroeter, SuSE AG) +- added Gcommaaccent, gcommaaccent, Kcommaaccent, kcommaaccent, + Lcommaaccent, lcommaaccent, Ncommaaccent, ncommaaccent, Rcommaaccent, + rcommaaccent (by Stepan Roh) + +Changes from 1.9 to 1.10: + +- added U+022E, U+022F (by Sander Vesik) +- kerning updates for DejaVu Sans (by Sander Vesik) +- fixed too wide cyrillic glyphs in DejaVu Sans Mono (by Valentin Stoykov) +- fixed ligatures bug in Mono (by Stepan Roh) + +Changes from 1.8 to 1.9: + +- integrated Arev Cyrillics (by Danilo Segan) +- added U+01EA, U+01EB, U+01EC, U+01ED (by Sander Vesik) + +Changes from 1.7 to 1.8: + +- fixed accents in Serif Oblique and Serif Bold Oblique (by Stepan Roh) + +Changes from 1.6 to 1.7: + +- added automatically generated Condensed typefaces (by Stepan Roh) + +Changes from 1.5 to 1.6: + +- monospace bug fixed (by Stepan Roh) +- incorrect Bitstream foundry assigned by fontconfig and KDE Font Installer +fixed (by Stepan Roh) +- added automatically generated Oblique version of Serif typefaces (by +Stepan Roh) +- corrected cyrillic D and d (by Danilo Segan and David Jez) +- fixed accents position in Oblique version of Serif typefaces (by Danilo +Segan and Sander Vesik) +- fixed incorrect computation of OS2Win* fields (by Stepan Roh) +- added visiblespace U+2423 (by David Jez) +- fixed 'line height' bug by fixing ascender and descender values (by David +Jez and Stepan Roh) +- fixed part of 'worse than Vera' bug (by Peter Cernak) +- smaller comma accent U+0326 (by David Jez) + +Changes from 1.4 to 1.5: + +- added Cyrillics (96 characters) and Dcroat to the rest of typefaces (by +Danilo Segan) +- fixed bugs in some Cyrillic characters, some of them reported by Sander +Vesik (by Danilo Segan) +- added U+0100, U+0101, U+0112, U+0113, U+012A, U+012B, U+014C, U+014D, +U+016A, U+016B, U+01E2, U+01E3, U+0232 and U+0233 (by Sander Vesik) +- added Romanian characters (by Misu Moldovan) +- added U+0108, U+0109, U+010A, U+010B, U+0114, U+0115, U+0116, U+0117, +U+011C, U+011D, U+0120, U+0121, U+0124, U+0125, U+0128, U+0129, U+012C, +U+012D, U+0134, U+0135, U+014E, U+014F, U+0150, U+0151, U+015C, U+015D, +U+0168, U+0169, U+016C, U+016D, U+0170, U+0171 and U+0237 (by James +Crippen) +- added U+02BB, U+2010, U+2011, U+2012 and U+2015 (by Stepan Roh) + +Changes from 1.3 to 1.4: + +- added Polish characters (Aogonek, aogonek, Eogonek, eogonek, Nacute, +nacute, Sacute, sacute, Zacute, zacute, Zdotaccent, zdotaccent) (by Stepan +Roh) + +Changes from 1.2 to 1.3: + +- added Cyrillics (96 characters) and Dcroat to Sans typefaces (by Danilo +Segan from his BePa fonts) + +Changes from 1.1 to 1.2: + +- added Ldot, ldot, Wcircumflex, wcircumflex, Ycircumflex, ycircumflex, + Wgrave, wgrave, Wacute, wacute, Wdieresis, wdieresis, Ygrave and ygrave + (from The Olwen Font Family 0.2 by Dafydd Harries) + +Changes from 1.0 to 1.1: + +- added Lacute, lacute, Lcaron, lcaron, Racute and racute (by Peter Cernak) + +Changes from 0.9.4 to 1.0: + +- none, just changed version and updated README + +Changes from 0.9.3 to 0.9.4: + +- fixed TTF generation (kerning tables were missing) + +Changes from 0.9.2 to 0.9.3: + +- kerning of added characters +- proper caron shape for dcaron in Mono (by Ondrej Koala Vacha) +- minor visual changes + +Changes from 0.9.1 to 0.9.2: + +- internal bugged version + +Changes from 0.9 to 0.9.1: + +- proper caron shape for dcaron and tcaron +- minor visual changes + +$Id$ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/README.md b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/README.md new file mode 100644 index 000000000..43148d7c7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/README.md @@ -0,0 +1,67 @@ +[![Build Status](https://travis-ci.org/dejavu-fonts/dejavu-fonts.svg)](https://travis-ci.org/dejavu-fonts/dejavu-fonts) + +DejaVu fonts 2.37 (c)2004-2016 DejaVu fonts team +------------------------------------------------ + +The DejaVu fonts are a font family based on the Bitstream Vera Fonts +(http://gnome.org/fonts/). Its purpose is to provide a wider range of +characters (see status.txt for more information) while maintaining the +original look and feel. + +DejaVu fonts are based on Bitstream Vera fonts version 1.10. + +Available fonts (Sans = sans serif, Mono = monospaced): + +DejaVu Sans Mono +DejaVu Sans Mono Bold +DejaVu Sans Mono Bold Oblique +DejaVu Sans Mono Oblique +DejaVu Sans +DejaVu Sans Bold +DejaVu Sans Bold Oblique +DejaVu Sans Oblique +DejaVu Sans ExtraLight (experimental) +DejaVu Serif +DejaVu Serif Bold +DejaVu Serif Bold Italic (experimental) +DejaVu Serif Italic (experimental) +DejaVu Sans Condensed (experimental) +DejaVu Sans Condensed Bold (experimental) +DejaVu Sans Condensed Bold Oblique (experimental) +DejaVu Sans Condensed Oblique (experimental) +DejaVu Serif Condensed (experimental) +DejaVu Serif Condensed Bold (experimental) +DejaVu Serif Condensed Bold Italic (experimental) +DejaVu Serif Condensed Italic (experimental) +DejaVu Math TeX Gyre + +All fonts are also available as derivative called DejaVu LGC with support +only for Latin, Greek and Cyrillic scripts. + +For license information see LICENSE. What's new is described in NEWS. Known +bugs are in BUGS. All authors are mentioned in AUTHORS. + +Fonts are published in source form as SFD files (Spline Font Database from +FontForge - http://fontforge.sf.net/) and in compiled form as TTF files +(TrueType fonts). + +For more information go to http://dejavu.sourceforge.net/. + +Characters from Arev fonts, Copyright (c) 2006 by Tavmjong Bah: +--------------------------- +U+01BA, U+01BF, U+01F7, U+021C-U+021D, U+0220, U+0222-U+0223, +U+02B9, U+02BA, U+02BD, U+02C2-U+02C5, U+02d4-U+02D5, +U+02D7, U+02EC-U+02EE, U+0346-U+034E, U+0360, U+0362, +U+03E2-03EF, U+0460-0463, U+0466-U+0486, U+0488-U+0489, U+04A8-U+04A9, +U+0500-U+050F, U+2055-205E, U+20B0, U+20B2-U+20B3, U+2102, U+210D, U+210F, +U+2111, U+2113, U+2115, U+2118-U+211A, U+211C-U+211D, U+2124, U+2135, +U+213C-U+2140, U+2295-U+2298, U+2308-U+230B, U+26A2-U+26B1, U+2701-U+2704, +U+2706-U+2709, U+270C-U+274B, U+2758-U+275A, U+2761-U+2775, U+2780-U+2794, +U+2798-U+27AF, U+27B1-U+27BE, U+FB05-U+FB06 + +DejaVu Math TeX Gyre +-------------------- +TeX Gyre DJV Math by B. Jackowski, P. Strzelczyk and P. Pianowski +(on behalf of TeX users groups). + +$Id$ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/__init__.py new file mode 100644 index 000000000..1390ec608 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/__init__.py @@ -0,0 +1,32 @@ +from os import path + +from rinoh.font import Typeface +from rinoh.font.style import REGULAR, BOLD, ITALIC, FontWidth +from rinoh.font.opentype import OpenTypeFont + + +__all__ = ['typeface'] + + +try: + SEMI_CONDENSED = FontWidth.SEMI_CONDENSED +except AttributeError: # rinohtype <= 0.4.2 + SEMI_CONDENSED = FontWidth.CONDENSED + + +def otf(style, **kwargs): + filename = 'DejaVuSerif{}.ttf'.format(style) + return OpenTypeFont(path.join(path.dirname(__file__), filename), **kwargs) + + +typeface = Typeface('DejaVu Serif', + otf('', weight=REGULAR), + otf('-Italic', weight=REGULAR, slant=ITALIC), + otf('-Bold', weight=BOLD), + otf('-BoldItalic', weight=BOLD, slant=ITALIC), + otf('Condensed', weight=REGULAR, width=SEMI_CONDENSED), + otf('Condensed-Italic', weight=REGULAR, slant=ITALIC, + width=SEMI_CONDENSED), + otf('Condensed-Bold', weight=BOLD, width=SEMI_CONDENSED), + otf('Condensed-BoldItalic', weight=BOLD, slant=ITALIC, + width=SEMI_CONDENSED)) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..3d4df9f3a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/langcover.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/langcover.txt new file mode 100644 index 000000000..75105316c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/langcover.txt @@ -0,0 +1,250 @@ +This is the language coverage file for DejaVu fonts +($Id$) + + Sans Serif Sans Mono +aa Afar 100% (62/62) 100% (62/62) 100% (62/62) +ab Abkhazia 100% (90/90) 93% (84/90) 84% (76/90) +af Afrikaans 100% (69/69) 100% (69/69) 100% (69/69) +ak Akan 100% (73/73) 100% (73/73) 100% (73/73) +am Amharic (0/264) (0/264) (0/264) +an Aragonese 100% (66/66) 100% (66/66) 100% (66/66) +ar Arabic 100% (36/36) (0/36) 100% (36/36) +as Assamese (0/64) (0/64) (0/64) +ast Asturian/Bable/Leonese/Asturleonese 100% (70/70) 100% (70/70) 100% (70/70) +av Avaric 100% (67/67) 100% (67/67) 100% (67/67) +ay Aymara 100% (60/60) 100% (60/60) 100% (60/60) +az-az Azerbaijani in Azerbaijan 100% (66/66) 100% (66/66) 100% (66/66) +az-ir Azerbaijani in Iran 100% (40/40) (0/40) 100% (40/40) +ba Bashkir 100% (82/82) 100% (82/82) 97% (80/82) +be Byelorussian 100% (68/68) 100% (68/68) 100% (68/68) +ber-dz Berber in Algeria 100% (70/70) 100% (70/70) 100% (70/70) +ber-ma Berber in Morocco 100% (32/32) (0/32) (0/32) +bg Bulgarian 100% (60/60) 100% (60/60) 100% (60/60) +bh Bihari (Devanagari script) (0/68) (0/68) (0/68) +bho Bhojpuri (Devanagari script) (0/68) (0/68) (0/68) +bi Bislama 100% (58/58) 100% (58/58) 100% (58/58) +bin Edo or Bini 100% (78/78) 100% (78/78) 100% (78/78) +bm Bambara 100% (60/60) 100% (60/60) 100% (60/60) +bn Bengali (0/63) (0/63) (0/63) +bo Tibetan (0/95) (0/95) (0/95) +br Breton 100% (64/64) 100% (64/64) 100% (64/64) +brx Bodo (Devanagari script) (0/82) (0/82) (0/82) +bs Bosnian 100% (62/62) 100% (62/62) 100% (62/62) +bua Buriat (Buryat) 100% (70/70) 100% (70/70) 100% (70/70) +byn Blin/Bilin (0/255) (0/255) (0/255) +ca Catalan 100% (74/74) 100% (74/74) 100% (74/74) +ce Chechen 100% (67/67) 100% (67/67) 100% (67/67) +ch Chamorro 100% (58/58) 100% (58/58) 100% (58/58) +chm Mari (Lower Cheremis / Upper Cheremis) 100% (76/76) 100% (76/76) 100% (76/76) +chr Cherokee (0/85) (0/85) (0/85) +co Corsican 100% (84/84) 100% (84/84) 100% (84/84) +crh Crimean Tatar/Crimean Turkish 100% (68/68) 100% (68/68) 100% (68/68) +cs Czech 100% (82/82) 100% (82/82) 100% (82/82) +csb Kashubian 100% (74/74) 100% (74/74) 100% (74/74) +cu Old Church Slavonic 100% (103/103) 90% (93/103) 78% (81/103) +cv Chuvash 100% (74/74) 100% (74/74) 100% (74/74) +cy Welsh 100% (78/78) 100% (78/78) 100% (78/78) +da Danish 100% (70/70) 100% (70/70) 100% (70/70) +de German 100% (59/59) 100% (59/59) 100% (59/59) +doi Dogri (0/85) (0/85) (0/85) +dv Divehi/Dhivehi/Maldivian (0/49) (0/49) (0/49) +dz Dzongkha (0/95) (0/95) (0/95) +ee Ewe 100% (99/99) 100% (99/99) 100% (99/99) +el Greek 100% (69/69) 100% (69/69) 100% (69/69) +en English 100% (72/72) 100% (72/72) 100% (72/72) +eo Esperanto 100% (64/64) 100% (64/64) 100% (64/64) +es Spanish 100% (66/66) 100% (66/66) 100% (66/66) +et Estonian 100% (64/64) 100% (64/64) 100% (64/64) +eu Basque 100% (56/56) 100% (56/56) 100% (56/56) +fa Persian 100% (40/40) (0/40) 100% (40/40) +fat Fanti 100% (73/73) 100% (73/73) 100% (73/73) +ff Fulah (Fula) 100% (62/62) 100% (62/62) 100% (62/62) +fi Finnish 100% (62/62) 100% (62/62) 100% (62/62) +fil Filipino 100% (84/84) 100% (84/84) 100% (84/84) +fj Fijian 100% (52/52) 100% (52/52) 100% (52/52) +fo Faroese 100% (68/68) 100% (68/68) 100% (68/68) +fr French 100% (84/84) 100% (84/84) 100% (84/84) +fur Friulian 100% (66/66) 100% (66/66) 100% (66/66) +fy Frisian 100% (75/75) 100% (75/75) 100% (75/75) +ga Irish 100% (80/80) 100% (80/80) 100% (80/80) +gd Scots Gaelic 100% (70/70) 100% (70/70) 100% (70/70) +gez Ethiopic (Geez) (0/218) (0/218) (0/218) +gl Galician 100% (66/66) 100% (66/66) 100% (66/66) +gn Guarani 100% (70/70) 100% (70/70) 100% (70/70) +gu Gujarati (0/68) (0/68) (0/68) +gv Manx Gaelic 100% (54/54) 100% (54/54) 100% (54/54) +ha Hausa 100% (60/60) 100% (60/60) 100% (60/60) +haw Hawaiian 100% (63/63) 100% (63/63) 100% (63/63) +he Hebrew 100% (27/27) (0/27) (0/27) +hi Hindi (Devanagari script) (0/68) (0/68) (0/68) +hne Chhattisgarhi (0/68) (0/68) (0/68) +ho Hiri Motu 100% (52/52) 100% (52/52) 100% (52/52) +hr Croatian 100% (62/62) 100% (62/62) 100% (62/62) +hsb Upper Sorbian 100% (72/72) 100% (72/72) 100% (72/72) +ht Haitian/Haitian Creole 100% (56/56) 100% (56/56) 100% (56/56) +hu Hungarian 100% (70/70) 100% (70/70) 100% (70/70) +hy Armenian 100% (77/77) 100% (77/77) 100% (77/77) +hz Herero 100% (57/57) 100% (57/57) 100% (57/57) +ia Interlingua 100% (52/52) 100% (52/52) 100% (52/52) +id Indonesian 100% (54/54) 100% (54/54) 100% (54/54) +ie Interlingue 100% (52/52) 100% (52/52) 100% (52/52) +ig Igbo 100% (58/58) 100% (58/58) 100% (58/58) +ii Sichuan Yi/Nuosu (0/1165) (0/1165) (0/1165) +ik Inupiaq (Inupiak, Eskimo) 100% (68/68) 100% (68/68) 100% (68/68) +io Ido 100% (52/52) 100% (52/52) 100% (52/52) +is Icelandic 100% (70/70) 100% (70/70) 100% (70/70) +it Italian 100% (72/72) 100% (72/72) 100% (72/72) +iu Inuktitut 100% (161/161) (0/161) (0/161) +ja Japanese (0/2314) (0/2314) (0/2314) +jv Javanese 100% (56/56) 100% (56/56) 100% (56/56) +ka Georgian 100% (33/33) 100% (33/33) 100% (33/33) +kaa Kara-Kalpak (Karakalpak) 100% (78/78) 100% (78/78) 100% (78/78) +kab Kabyle 100% (70/70) 100% (70/70) 100% (70/70) +ki Kikuyu 100% (56/56) 100% (56/56) 100% (56/56) +kj Kuanyama/Kwanyama 100% (52/52) 100% (52/52) 100% (52/52) +kk Kazakh 100% (77/77) 100% (77/77) 100% (77/77) +kl Greenlandic 100% (81/81) 100% (81/81) 100% (81/81) +km Central Khmer (0/63) (0/63) (0/63) +kn Kannada (0/70) (0/70) (0/70) +ko Korean (0/2442) (0/2442) (0/2442) +kok Kokani (Devanagari script) (0/68) (0/68) (0/68) +kr Kanuri 100% (56/56) 100% (56/56) 100% (56/56) +ks Kashmiri 78% (26/33) (0/33) 69% (23/33) +ku-am Kurdish in Armenia 100% (64/64) 100% (64/64) 100% (64/64) +ku-iq Kurdish in Iraq 100% (32/32) (0/32) 87% (28/32) +ku-ir Kurdish in Iran 100% (32/32) (0/32) 87% (28/32) +ku-tr Kurdish in Turkey 100% (62/62) 100% (62/62) 100% (62/62) +kum Kumyk 100% (66/66) 100% (66/66) 100% (66/66) +kv Komi (Komi-Permyak/Komi-Siryan) 100% (70/70) 100% (70/70) 100% (70/70) +kw Cornish 100% (64/64) 100% (64/64) 100% (64/64) +kwm Kwambi 100% (52/52) 100% (52/52) 100% (52/52) +ky Kirgiz 100% (70/70) 100% (70/70) 100% (70/70) +la Latin 100% (68/68) 100% (68/68) 100% (68/68) +lah Lahnda 92% (25/27) (0/27) 85% (23/27) +lb Luxembourgish (Letzeburgesch) 100% (75/75) 100% (75/75) 100% (75/75) +lez Lezghian (Lezgian) 100% (67/67) 100% (67/67) 100% (67/67) +lg Ganda 100% (54/54) 100% (54/54) 100% (54/54) +li Limburgan/Limburger/Limburgish 100% (62/62) 100% (62/62) 100% (62/62) +ln Lingala 100% (81/81) 100% (81/81) 100% (81/81) +lo Lao 100% (55/55) (0/55) 83% (46/55) +lt Lithuanian 100% (70/70) 100% (70/70) 100% (70/70) +lv Latvian 100% (78/78) 100% (78/78) 100% (78/78) +mai Maithili (Devanagari script) (0/68) (0/68) (0/68) +mg Malagasy 100% (56/56) 100% (56/56) 100% (56/56) +mh Marshallese 100% (62/62) 100% (62/62) 100% (62/62) +mi Maori 100% (64/64) 100% (64/64) 100% (64/64) +mk Macedonian 100% (42/42) 100% (42/42) 100% (42/42) +ml Malayalam (0/68) (0/68) (0/68) +mn-cn Mongolian in China (0/130) (0/130) (0/130) +mn-mn Mongolian in Mongolia 100% (70/70) 100% (70/70) 100% (70/70) +mni Maniputi (0/78) (0/78) (0/78) +mo Moldavian 100% (128/128) 100% (128/128) 100% (128/128) +mr Marathi (Devanagari script) (0/68) (0/68) (0/68) +ms Malay 100% (52/52) 100% (52/52) 100% (52/52) +mt Maltese 100% (72/72) 100% (72/72) 100% (72/72) +my Burmese (Myanmar) (0/48) (0/48) (0/48) +na Nauru 100% (60/60) 100% (60/60) 100% (60/60) +nb Norwegian Bokmal 100% (70/70) 100% (70/70) 100% (70/70) +nds Low Saxon 100% (59/59) 100% (59/59) 100% (59/59) +ne Nepali (0/72) (0/72) (0/72) +ng Ndonga 100% (52/52) 100% (52/52) 100% (52/52) +nl Dutch 100% (82/82) 100% (82/82) 100% (82/82) +nn Norwegian Nynorsk 100% (76/76) 100% (76/76) 100% (76/76) +no Norwegian (Bokmal) 100% (70/70) 100% (70/70) 100% (70/70) +nqo N'Ko 91% (54/59) (0/59) (0/59) +nr Ndebele, South 100% (52/52) 100% (52/52) 100% (52/52) +nso Northern Sotho 100% (58/58) 100% (58/58) 100% (58/58) +nv Navajo/Navaho 100% (72/72) 100% (72/72) 100% (72/72) +ny Chichewa 100% (54/54) 100% (54/54) 100% (54/54) +oc Occitan 100% (70/70) 100% (70/70) 100% (70/70) +om Oromo or Galla 100% (52/52) 100% (52/52) 100% (52/52) +or Oriya (0/68) (0/68) (0/68) +os Ossetic 100% (66/66) 100% (66/66) 100% (66/66) +ota Ottoman Turkish 100% (37/37) (0/37) 97% (36/37) +pa Panjabi/Punjabi (0/63) (0/63) (0/63) +pa-pk Panjabi/Punjabi in Pakistan 92% (25/27) (0/27) 85% (23/27) +pap-an Papiamento in Netherlands Antilles 100% (72/72) 100% (72/72) 100% (72/72) +pap-aw Papiamento in Aruba 100% (54/54) 100% (54/54) 100% (54/54) +pes Western Farsi 100% (40/40) (0/40) 100% (40/40) +pl Polish 100% (70/70) 100% (70/70) 100% (70/70) +prs Dari/Eastern Farsi 100% (40/40) (0/40) 100% (40/40) +ps-af Pashto in Afghanistan 97% (48/49) (0/49) 77% (38/49) +ps-pk Pashto in Pakistan 95% (47/49) (0/49) 75% (37/49) +pt Portuguese 100% (82/82) 100% (82/82) 100% (82/82) +qu Quechua 100% (55/55) 100% (55/55) 100% (55/55) +quz Cusco Quechua 100% (55/55) 100% (55/55) 100% (55/55) +rm Rhaeto-Romance (Romansch) 100% (66/66) 100% (66/66) 100% (66/66) +rn Rundi 100% (52/52) 100% (52/52) 100% (52/52) +ro Romanian 100% (62/62) 100% (62/62) 100% (62/62) +ru Russian 100% (66/66) 100% (66/66) 100% (66/66) +rw Kinyarwanda 100% (52/52) 100% (52/52) 100% (52/52) +sa Sanskrit (Devanagari script) (0/68) (0/68) (0/68) +sah Yakut 100% (76/76) 100% (76/76) 100% (76/76) +sat Santali (Devanagari script) (0/70) (0/70) (0/70) +sc Sardinian 100% (62/62) 100% (62/62) 100% (62/62) +sco Scots 100% (56/56) 100% (56/56) 100% (56/56) +sd Sindhi 100% (54/54) (0/54) 79% (43/54) +se North Sami 100% (66/66) 100% (66/66) 100% (66/66) +sel Selkup (Ostyak-Samoyed) 100% (66/66) 100% (66/66) 100% (66/66) +sg Sango 100% (72/72) 100% (72/72) 100% (72/72) +sh Serbo-Croatian 100% (156/156) 100% (156/156) 98% (154/156) +shs Secwepemctsin 100% (48/48) 100% (48/48) 100% (48/48) +si Sinhala/Sinhalese (0/73) (0/73) (0/73) +sid Sidamo (0/281) (0/281) (0/281) +sk Slovak 100% (86/86) 100% (86/86) 100% (86/86) +sl Slovenian 100% (62/62) 100% (62/62) 100% (62/62) +sm Samoan 100% (53/53) 100% (53/53) 100% (53/53) +sma South Sami 100% (60/60) 100% (60/60) 100% (60/60) +smj Lule Sami 100% (60/60) 100% (60/60) 100% (60/60) +smn Inari Sami 100% (68/68) 100% (68/68) 100% (68/68) +sms Skolt Sami 100% (80/80) 100% (80/80) 97% (78/80) +sn Shona 100% (52/52) 100% (52/52) 100% (52/52) +so Somali 100% (52/52) 100% (52/52) 100% (52/52) +sq Albanian 100% (56/56) 100% (56/56) 100% (56/56) +sr Serbian 100% (60/60) 100% (60/60) 100% (60/60) +ss Swati 100% (52/52) 100% (52/52) 100% (52/52) +st Sotho, Southern 100% (52/52) 100% (52/52) 100% (52/52) +su Sundanese 100% (54/54) 100% (54/54) 100% (54/54) +sv Swedish 100% (68/68) 100% (68/68) 100% (68/68) +sw Swahili 100% (52/52) 100% (52/52) 100% (52/52) +syr Syriac (0/45) (0/45) (0/45) +ta Tamil (0/48) (0/48) (0/48) +te Telugu (0/70) (0/70) (0/70) +tg Tajik 100% (78/78) 100% (78/78) 97% (76/78) +th Thai 1% (1/74) 1% (1/74) 1% (1/74) +ti-er Eritrean Tigrinya (0/255) (0/255) (0/255) +ti-et Ethiopian Tigrinya (0/281) (0/281) (0/281) +tig Tigre (0/221) (0/221) (0/221) +tk Turkmen 100% (68/68) 100% (68/68) 100% (68/68) +tl Tagalog 100% (84/84) 100% (84/84) 100% (84/84) +tn Tswana 100% (58/58) 100% (58/58) 100% (58/58) +to Tonga 100% (53/53) 100% (53/53) 100% (53/53) +tr Turkish 100% (70/70) 100% (70/70) 100% (70/70) +ts Tsonga 100% (52/52) 100% (52/52) 100% (52/52) +tt Tatar 100% (76/76) 100% (76/76) 100% (76/76) +tw Twi 100% (73/73) 100% (73/73) 100% (73/73) +ty Tahitian 100% (65/65) 100% (65/65) 100% (65/65) +tyv Tuvinian 100% (70/70) 100% (70/70) 100% (70/70) +ug Uyghur 100% (33/33) (0/33) 78% (26/33) +uk Ukrainian 100% (72/72) 100% (72/72) 100% (72/72) +ur Urdu 92% (25/27) (0/27) 85% (23/27) +uz Uzbek 100% (52/52) 100% (52/52) 100% (52/52) +ve Venda 100% (62/62) 100% (62/62) 100% (62/62) +vi Vietnamese 100% (194/194) 100% (194/194) 76% (148/194) +vo Volapuk 100% (54/54) 100% (54/54) 100% (54/54) +vot Votic 100% (62/62) 100% (62/62) 100% (62/62) +wa Walloon 100% (70/70) 100% (70/70) 100% (70/70) +wal Wolaitta/Wolaytta (0/281) (0/281) (0/281) +wen Sorbian languages (lower and upper) 100% (76/76) 100% (76/76) 100% (76/76) +wo Wolof 100% (66/66) 100% (66/66) 100% (66/66) +xh Xhosa 100% (52/52) 100% (52/52) 100% (52/52) +yap Yapese 100% (58/58) 100% (58/58) 100% (58/58) +yi Yiddish 100% (27/27) (0/27) (0/27) +yo Yoruba 100% (119/119) 100% (119/119) 100% (119/119) +za Zhuang/Chuang 100% (52/52) 100% (52/52) 100% (52/52) +zh-cn Chinese (simplified) 0% (2/6765) 0% (2/6765) 0% (2/6765) +zh-hk Chinese Hong Kong Supplementary Character Set (0/1083) (0/1083) (0/1083) +zh-mo Chinese in Macau (0/1083) (0/1083) (0/1083) +zh-sg Chinese in Singapore 0% (2/6765) 0% (2/6765) 0% (2/6765) +zh-tw Chinese (traditional) (0/13063) (0/13063) (0/13063) +zu Zulu 100% (52/52) 100% (52/52) 100% (52/52) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/status.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/status.txt new file mode 100644 index 000000000..8b78cf38b --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/status.txt @@ -0,0 +1,7143 @@ +This is the status file for DejaVu fonts +($Id$) + +original = present in original Bitstream Vera 1.10 + = added in DejaVu fonts + +U+0020 space original +U+0021 exclam original +U+0022 quotedbl original +U+0023 numbersign original +U+0024 dollar original +U+0025 percent original +U+0026 ampersand original +U+0027 quotesingle original +U+0028 parenleft original +U+0029 parenright original +U+002a asterisk original +U+002b plus original +U+002c comma original +U+002d hyphen original +U+002e period original +U+002f slash original +U+0030 zero original +U+0031 one original +U+0032 two original +U+0033 three original +U+0034 four original +U+0035 five original +U+0036 six original +U+0037 seven original +U+0038 eight original +U+0039 nine original +U+003a colon original +U+003b semicolon original +U+003c less original +U+003d equal original +U+003e greater original +U+003f question original +U+0040 at original +U+0041 A original +U+0042 B original +U+0043 C original +U+0044 D original +U+0045 E original +U+0046 F original +U+0047 G original +U+0048 H original +U+0049 I original +U+004a J original +U+004b K original +U+004c L original +U+004d M original +U+004e N original +U+004f O original +U+0050 P original +U+0051 Q original +U+0052 R original +U+0053 S original +U+0054 T original +U+0055 U original +U+0056 V original +U+0057 W original +U+0058 X original +U+0059 Y original +U+005a Z original +U+005b bracketleft original +U+005c backslash original +U+005d bracketright original +U+005e asciicircum original +U+005f underscore original +U+0060 grave original +U+0061 a original +U+0062 b original +U+0063 c original +U+0064 d original +U+0065 e original +U+0066 f original +U+0067 g original +U+0068 h original +U+0069 i original +U+006a j original +U+006b k original +U+006c l original +U+006d m original +U+006e n original +U+006f o original +U+0070 p original +U+0071 q original +U+0072 r original +U+0073 s original +U+0074 t original +U+0075 u original +U+0076 v original +U+0077 w original +U+0078 x original +U+0079 y original +U+007a z original +U+007b braceleft original +U+007c bar original +U+007d braceright original +U+007e asciitilde original +U+00a0 nonbreakingspace original +U+00a1 exclamdown original +U+00a2 cent original +U+00a3 sterling original +U+00a4 currency original +U+00a5 yen original +U+00a6 brokenbar original +U+00a7 section original +U+00a8 dieresis original +U+00a9 copyright original +U+00aa ordfeminine original +U+00ab guillemotleft original +U+00ac logicalnot original +U+00ad sfthyphen original +U+00ae registered original +U+00af macron original +U+00b0 degree original +U+00b1 plusminus original +U+00b2 twosuperior original +U+00b3 threesuperior original +U+00b4 acute original +U+00b5 mu original +U+00b6 paragraph original +U+00b7 periodcentered original +U+00b8 cedilla original +U+00b9 onesuperior original +U+00ba ordmasculine original +U+00bb guillemotright original +U+00bc onequarter original +U+00bd onehalf original +U+00be threequarters original +U+00bf questiondown original +U+00c0 Agrave original +U+00c1 Aacute original +U+00c2 Acircumflex original +U+00c3 Atilde original +U+00c4 Adieresis original +U+00c5 Aring original +U+00c6 AE original +U+00c7 Ccedilla original +U+00c8 Egrave original +U+00c9 Eacute original +U+00ca Ecircumflex original +U+00cb Edieresis original +U+00cc Igrave original +U+00cd Iacute original +U+00ce Icircumflex original +U+00cf Idieresis original +U+00d0 Eth original +U+00d1 Ntilde original +U+00d2 Ograve original +U+00d3 Oacute original +U+00d4 Ocircumflex original +U+00d5 Otilde original +U+00d6 Odieresis original +U+00d7 multiply original +U+00d8 Oslash original +U+00d9 Ugrave original +U+00da Uacute original +U+00db Ucircumflex original +U+00dc Udieresis original +U+00dd Yacute original +U+00de Thorn original +U+00df germandbls original +U+00e0 agrave original +U+00e1 aacute original +U+00e2 acircumflex original +U+00e3 atilde original +U+00e4 adieresis original +U+00e5 aring original +U+00e6 ae original +U+00e7 ccedilla original +U+00e8 egrave original +U+00e9 eacute original +U+00ea ecircumflex original +U+00eb edieresis original +U+00ec igrave original +U+00ed iacute original +U+00ee icircumflex original +U+00ef idieresis original +U+00f0 eth original +U+00f1 ntilde original +U+00f2 ograve original +U+00f3 oacute original +U+00f4 ocircumflex original +U+00f5 otilde original +U+00f6 odieresis original +U+00f7 divide original +U+00f8 oslash original +U+00f9 ugrave original +U+00fa uacute original +U+00fb ucircumflex original +U+00fc udieresis original +U+00fd yacute original +U+00fe thorn original +U+00ff ydieresis original +U+0100 Amacron 1.5 +U+0101 amacron 1.5 +U+0102 Abreve 1.5 +U+0103 abreve 1.5 +U+0104 Aogonek 1.4 +U+0105 aogonek 1.4 +U+0106 Cacute original +U+0107 cacute original +U+0108 Ccircumflex 1.5 +U+0109 ccircumflex 1.5 +U+010a Cdotaccent 1.5 +U+010b cdotaccent 1.5 +U+010c Ccaron original +U+010d ccaron original +U+010e Dcaron 1.0 +U+010f dcaron 1.0 +U+0110 Dcroat 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+0111 dcroat original +U+0112 Emacron 1.5 +U+0113 emacron 1.5 +U+0114 Ebreve 1.5 +U+0115 ebreve 1.5 +U+0116 Edotaccent 1.5 +U+0117 edotaccent 1.5 +U+0118 Eogonek 1.4 +U+0119 eogonek 1.4 +U+011a Ecaron 1.0 +U+011b ecaron 1.0 +U+011c Gcircumflex 1.5 +U+011d gcircumflex 1.5 +U+011e Gbreve original +U+011f gbreve original +U+0120 Gdotaccent 1.5 +U+0121 gdotaccent 1.5 +U+0122 Gcommaaccent 1.11 +U+0123 gcommaaccent 1.11 +U+0124 Hcircumflex 1.5 +U+0125 hcircumflex 1.5 +U+0126 Hbar 1.12 +U+0127 hbar 1.12 +U+0128 Itilde 1.5 +U+0129 itilde 1.5 +U+012a Imacron 1.5 +U+012b imacron 1.5 +U+012c Ibreve 1.5 +U+012d ibreve 1.5 +U+012e Iogonek 1.11 +U+012f iogonek 1.11 +U+0130 Idotaccent original +U+0131 dotlessi original +U+0132 IJ 1.11 +U+0133 ij 1.11 +U+0134 Jcircumflex 1.5 +U+0135 jcircumflex 1.5 +U+0136 Kcommaaccent 1.11 +U+0137 kcommaaccent 1.11 +U+0138 kgreenlandic 1.12 +U+0139 Lacute 1.1 +U+013a lacute 1.1 +U+013b Lcommaaccent 1.11 +U+013c lcommaaccent 1.11 +U+013d Lcaron 1.1 +U+013e lcaron 1.1 +U+013f Ldot 1.2 +U+0140 ldot 1.2 +U+0141 Lslash original +U+0142 lslash original +U+0143 Nacute 1.4 +U+0144 nacute 1.4 +U+0145 Ncommaaccent 1.11 +U+0146 ncommaaccent 1.11 +U+0147 Ncaron 1.0 +U+0148 ncaron 1.0 +U+0149 napostrophe 1.12 +U+014a Eng 1.12 +U+014b eng 1.12 +U+014c Omacron 1.5 +U+014d omacron 1.5 +U+014e Obreve 1.5 +U+014f obreve 1.5 +U+0150 Ohungarumlaut 1.5 +U+0151 ohungarumlaut 1.5 +U+0152 OE original +U+0153 oe original +U+0154 Racute 1.1 +U+0155 racute 1.1 +U+0156 Rcommaaccent 1.11 +U+0157 rcommaaccent 1.11 +U+0158 Rcaron 1.0 +U+0159 rcaron 1.0 +U+015a Sacute 1.4 +U+015b sacute 1.4 +U+015c Scircumflex 1.5 +U+015d scircumflex 1.5 +U+015e Scedilla original +U+015f scedilla original +U+0160 Scaron original +U+0161 scaron original +U+0162 Tcommaaccent 1.5 +U+0163 tcommaaccent 1.5 +U+0164 Tcaron 1.0 +U+0165 tcaron 1.0 +U+0166 Tbar 1.12 +U+0167 tbar 1.12 +U+0168 Utilde 1.5 +U+0169 utilde 1.5 +U+016a Umacron 1.5 +U+016b umacron 1.5 +U+016c Ubreve 1.5 +U+016d ubreve 1.5 +U+016e Uring 1.0 +U+016f uring 1.0 +U+0170 Uhungarumlaut 1.5 +U+0171 uhungarumlaut 1.5 +U+0172 Uogonek 1.11 +U+0173 uogonek 1.11 +U+0174 Wcircumflex 1.2 +U+0175 wcircumflex 1.2 +U+0176 Ycircumflex 1.2 +U+0177 ycircumflex 1.2 +U+0178 Ydieresis original +U+0179 Zacute 1.4 +U+017a zacute 1.4 +U+017b Zdotaccent 1.4 +U+017c zdotaccent 1.4 +U+017d Zcaron original +U+017e zcaron original +U+017f longs 1.12 +U+0180 uni0180 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0181 uni0181 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0182 uni0182 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0183 uni0183 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0184 uni0184 2.3 +U+0185 uni0185 2.3 +U+0186 uni0186 1.15 +U+0187 uni0187 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0188 uni0188 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0189 uni0189 2.1 +U+018a uni018A 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018b uni018B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018c uni018C 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018d uni018D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018e uni018E 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018f uni018F 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0190 uni0190 1.15 +U+0191 uni0191 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0192 florin original +U+0193 uni0193 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0194 uni0194 1.14 +U+0195 uni0195 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.6 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0196 uni0196 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0197 uni0197 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0198 uni0198 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0199 uni0199 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019a uni019A 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019b uni019B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans ExtraLight) +U+019c uni019C 2.3 +U+019d uni019D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019e uni019E 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019f uni019F 2.3 +U+01a0 Ohorn 2.3 +U+01a1 ohorn 2.3 +U+01a2 uni01A2 2.3 +U+01a3 uni01A3 2.3 +U+01a4 uni01A4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a5 uni01A5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a6 uni01A6 2.3 +U+01a7 uni01A7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a8 uni01A8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a9 uni01A9 2.2 +U+01aa uni01AA 2.3 +U+01ab uni01AB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ac uni01AC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ad uni01AD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ae uni01AE 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01af Uhorn 2.3 +U+01b0 uhorn 2.3 +U+01b1 uni01B1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b2 uni01B2 2.3 +U+01b3 uni01B3 2.3 +U+01b4 uni01B4 2.3 +U+01b5 uni01B5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b6 uni01B6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b7 uni01B7 2.3 +U+01b8 uni01B8 2.3 +U+01b9 uni01B9 2.3 +U+01ba uni01BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+01bb uni01BB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01bc uni01BC 2.3 +U+01bd uni01BD 2.3 +U+01be uni01BE 2.3 +U+01bf uni01BF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+01c0 uni01C0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c1 uni01C1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c2 uni01C2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c3 uni01C3 2.2 +U+01c4 uni01C4 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c5 uni01C5 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c6 uni01C6 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c7 uni01C7 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c8 uni01C8 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c9 uni01C9 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01ca uni01CA 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cb uni01CB 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cc uni01CC 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cd uni01CD 1.15 +U+01ce uni01CE 1.15 +U+01cf uni01CF 1.15 +U+01d0 uni01D0 1.15 +U+01d1 uni01D1 1.15 +U+01d2 uni01D2 1.15 +U+01d3 uni01D3 1.15 +U+01d4 uni01D4 1.15 +U+01d5 uni01D5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01d6 uni01D6 1.13 +U+01d7 uni01D7 2.3 +U+01d8 uni01D8 2.3 +U+01d9 uni01D9 2.3 +U+01da uni01DA 2.3 +U+01db uni01DB 2.3 +U+01dc uni01DC 2.3 +U+01dd uni01DD 2.2 +U+01de uni01DE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique) 2.23 (Serif Italic Condensed) +U+01df uni01DF 1.13 +U+01e0 uni01E0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e1 uni01E1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e2 uni01E2 1.5 +U+01e3 uni01E3 1.5 +U+01e4 uni01E4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+01e5 uni01E5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+01e6 Gcaron 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e7 gcaron 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e8 uni01E8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e9 uni01E9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ea uni01EA 1.9 +U+01eb uni01EB 1.9 +U+01ec uni01EC 1.9 +U+01ed uni01ED 1.9 +U+01ee uni01EE 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.35 (Sans ExtraLight) +U+01ef uni01EF 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.35 (Sans ExtraLight) +U+01f0 uni01F0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono) 2.22 (Sans Mono Bold) 2.23 (Serif Italic Condensed) +U+01f1 uni01F1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f2 uni01F2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f3 uni01F3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f4 uni01F4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f5 uni01F5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f6 uni01F6 2.3 +U+01f7 uni01F7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+01f8 uni01F8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f9 uni01F9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fa Aringacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01fb aringacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01fc AEacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fd aeacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fe Oslashacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ff oslashacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0200 uni0200 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0201 uni0201 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0202 uni0202 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0203 uni0203 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0204 uni0204 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0205 uni0205 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0206 uni0206 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0207 uni0207 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0208 uni0208 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0209 uni0209 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020a uni020A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020b uni020B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020c uni020C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020d uni020D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020e uni020E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020f uni020F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0210 uni0210 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0211 uni0211 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0212 uni0212 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0213 uni0213 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0214 uni0214 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0215 uni0215 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0216 uni0216 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0217 uni0217 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0218 Scommaaccent 1.5 +U+0219 scommaaccent 1.5 +U+021a uni021A 1.5 +U+021b uni021B 1.5 +U+021c uni021C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+021d uni021D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+021e uni021E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+021f uni021F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0220 uni0220 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.18 (Sans Mono, Sans Mono Bold) 2.23 (Serif Italic Condensed) +U+0221 uni0221 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0222 uni0222 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0223 uni0223 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0224 uni0224 2.3 +U+0225 uni0225 2.3 +U+0226 uni0226 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0227 uni0227 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0228 uni0228 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0229 uni0229 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022a uni022A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022b uni022B 1.13 +U+022c uni022C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022d uni022D 1.13 +U+022e uni022E 1.10 +U+022f uni022F 1.10 +U+0230 uni0230 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0231 uni0231 1.13 +U+0232 uni0232 1.5 +U+0233 uni0233 1.5 +U+0234 uni0234 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0235 uni0235 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0236 uni0236 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0237 dotlessj 1.5 +U+0238 uni0238 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0239 uni0239 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+023a uni023A 2.3 +U+023b uni023B 2.3 +U+023c uni023C 2.3 +U+023d uni023D 2.3 +U+023e uni023E 2.3 +U+023f uni023F 2.3 +U+0240 uni0240 2.3 +U+0241 uni0241 2.3 +U+0242 uni0242 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+0243 uni0243 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0244 uni0244 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0245 uni0245 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0246 uni0246 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0247 uni0247 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0248 uni0248 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0249 uni0249 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024a uni024A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024b uni024B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024c uni024C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024d uni024D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024e uni024E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024f uni024F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0250 uni0250 1.14 +U+0251 uni0251 1.14 +U+0252 uni0252 1.14 +U+0253 uni0253 1.14 +U+0254 uni0254 1.14 +U+0255 uni0255 1.14 +U+0256 uni0256 1.14 +U+0257 uni0257 1.14 +U+0258 uni0258 1.14 +U+0259 uni0259 1.14 +U+025a uni025A 1.14 +U+025b uni025B 1.14 +U+025c uni025C 1.14 +U+025d uni025D 1.14 +U+025e uni025E 1.14 +U+025f uni025F 1.14 +U+0260 uni0260 1.14 +U+0261 uni0261 1.14 +U+0262 uni0262 1.14 +U+0263 uni0263 1.14 +U+0264 uni0264 1.14 +U+0265 uni0265 1.14 +U+0266 uni0266 1.14 +U+0267 uni0267 1.14 +U+0268 uni0268 1.14 +U+0269 uni0269 1.14 +U+026a uni026A 1.14 +U+026b uni026B 1.14 +U+026c uni026C 1.14 +U+026d uni026D 1.14 +U+026e uni026E 1.14 +U+026f uni026F 1.14 +U+0270 uni0270 1.14 +U+0271 uni0271 1.14 +U+0272 uni0272 1.14 +U+0273 uni0273 1.14 +U+0274 uni0274 1.14 +U+0275 uni0275 1.14 +U+0276 uni0276 1.14 +U+0277 uni0277 1.14 +U+0278 uni0278 1.14 +U+0279 uni0279 1.14 +U+027a uni027A 1.14 +U+027b uni027B 1.14 +U+027c uni027C 1.14 +U+027d uni027D 1.14 +U+027e uni027E 1.14 +U+027f uni027F 1.14 +U+0280 uni0280 1.14 +U+0281 uni0281 1.14 +U+0282 uni0282 1.14 +U+0283 uni0283 1.14 +U+0284 uni0284 1.14 +U+0285 uni0285 1.14 +U+0286 uni0286 1.14 +U+0287 uni0287 1.14 +U+0288 uni0288 1.14 +U+0289 uni0289 1.14 +U+028a uni028A 1.14 +U+028b uni028B 1.14 +U+028c uni028C 1.14 +U+028d uni028D 1.14 +U+028e uni028E 1.14 +U+028f uni028F 1.14 +U+0290 uni0290 1.14 +U+0291 uni0291 1.14 +U+0292 uni0292 1.14 +U+0293 uni0293 1.14 +U+0294 uni0294 1.14 +U+0295 uni0295 1.14 +U+0296 uni0296 1.14 +U+0297 uni0297 1.14 +U+0298 uni0298 1.14 +U+0299 uni0299 1.14 +U+029a uni029A 1.14 +U+029b uni029B 1.14 +U+029c uni029C 1.14 +U+029d uni029D 1.14 +U+029e uni029E 1.14 +U+029f uni029F 1.14 +U+02a0 uni02A0 1.14 +U+02a1 uni02A1 1.14 +U+02a2 uni02A2 1.14 +U+02a3 uni02A3 1.14 +U+02a4 uni02A4 1.14 +U+02a5 uni02A5 1.14 +U+02a6 uni02A6 1.14 +U+02a7 uni02A7 1.14 +U+02a8 uni02A8 1.14 +U+02a9 uni02A9 1.14 +U+02aa uni02AA 1.14 +U+02ab uni02AB 1.14 +U+02ac uni02AC 1.14 +U+02ad uni02AD 1.14 +U+02ae uni02AE 1.14 +U+02af uni02AF 1.14 +U+02b0 uni02B0 1.14 +U+02b1 uni02B1 1.14 +U+02b2 uni02B2 1.14 +U+02b3 uni02B3 1.14 +U+02b4 uni02B4 1.14 +U+02b5 uni02B5 1.14 +U+02b6 uni02B6 1.14 +U+02b7 uni02B7 1.14 +U+02b8 uni02B8 1.14 +U+02b9 uni02B9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+02ba uni02BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02bb uni02BB 1.5 +U+02bc uni02BC 1.12 +U+02bd uni02BD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+02be uni02BE 2.2 +U+02bf uni02BF 2.2 +U+02c0 uni02C0 1.14 +U+02c1 uni02C1 1.14 +U+02c2 uni02C2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02c3 uni02C3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02c4 uni02C4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02c5 uni02C5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02c6 circumflex original +U+02c7 caron original +U+02c8 uni02C8 2.0 +U+02c9 uni02C9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+02ca uni02CA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02cb uni02CB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02cc uni02CC 2.0 +U+02cd uni02CD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02ce uni02CE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02cf uni02CF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02d0 uni02D0 1.14 +U+02d1 uni02D1 1.14 +U+02d2 uni02D2 2.0 +U+02d3 uni02D3 2.2 +U+02d4 uni02D4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d5 uni02D5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d6 uni02D6 2.0 +U+02d7 uni02D7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02d8 breve original +U+02d9 dotaccent original +U+02da ring original +U+02db ogonek original +U+02dc tilde original +U+02dd hungarumlaut original +U+02de uni02DE 2.0 +U+02df uni02DF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02e0 uni02E0 1.14 +U+02e1 uni02E1 1.14 +U+02e2 uni02E2 1.14 +U+02e3 uni02E3 1.14 +U+02e4 uni02E4 1.14 +U+02e5 uni02E5 2.0 +U+02e6 uni02E6 2.0 +U+02e7 uni02E7 2.0 +U+02e8 uni02E8 2.0 +U+02e9 uni02E9 2.0 +U+02ec uni02EC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02ed uni02ED 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02ee uni02EE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02ef uni02EF 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02f0 uni02F0 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02f3 uni02F3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02f7 uni02F7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0300 gravecomb 1.15 +U+0301 acutecomb 1.15 +U+0302 uni0302 1.15 +U+0303 tildecomb 1.15 +U+0304 uni0304 1.15 +U+0305 uni0305 2.0 +U+0306 uni0306 1.15 +U+0307 uni0307 1.15 +U+0308 uni0308 1.15 +U+0309 hookabovecomb 2.1 +U+030a uni030A 1.15 +U+030b uni030B 1.15 +U+030c uni030C 1.15 +U+030d uni030D 2.0 +U+030e uni030E 2.0 +U+030f uni030F 2.0 +U+0310 uni0310 2.0 +U+0311 uni0311 2.0 +U+0312 uni0312 1.11 +U+0313 uni0313 2.1 +U+0314 uni0314 2.1 +U+0315 uni0315 2.0 +U+0316 uni0316 2.0 +U+0317 uni0317 2.0 +U+0318 uni0318 2.0 +U+0319 uni0319 2.0 +U+031a uni031A 2.1 +U+031b uni031B 2.1 +U+031c uni031C 2.0 +U+031d uni031D 2.0 +U+031e uni031E 2.0 +U+031f uni031F 2.0 +U+0320 uni0320 2.0 +U+0321 uni0321 1.15 +U+0322 uni0322 1.15 +U+0323 dotbelowcomb 2.1 +U+0324 uni0324 2.0 +U+0325 uni0325 2.0 +U+0326 uni0326 1.5 +U+0327 uni0327 2.1 +U+0328 uni0328 2.1 +U+0329 uni0329 2.0 +U+032a uni032A 2.0 +U+032b uni032B 2.1 +U+032c uni032C 2.0 +U+032d uni032D 2.0 +U+032e uni032E 2.0 +U+032f uni032F 2.0 +U+0330 uni0330 2.0 +U+0331 uni0331 2.0 +U+0332 uni0332 2.0 +U+0333 uni0333 2.1 +U+0334 uni0334 2.3 +U+0335 uni0335 2.3 +U+0336 uni0336 2.3 +U+0337 uni0337 2.3 +U+0338 uni0338 2.3 +U+0339 uni0339 2.0 +U+033a uni033A 2.0 +U+033b uni033B 2.0 +U+033c uni033C 2.1 +U+033d uni033D 2.0 +U+033e uni033E 2.1 +U+033f uni033F 2.1 +U+0340 uni0340 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0341 uni0341 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0342 uni0342 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0343 uni0343 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0344 uni0344 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0345 uni0345 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0346 uni0346 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0347 uni0347 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0348 uni0348 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0349 uni0349 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034a uni034A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034b uni034B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034c uni034C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034d uni034D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+034e uni034E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034f uni034F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0351 uni0351 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0352 uni0352 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) 2.28 (Sans Condensed Oblique, Sans Oblique) +U+0353 uni0353 2.5 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0357 uni0357 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0358 uni0358 2.3 +U+035a uni035A 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+035c uni035C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+035d uni035D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+035e uni035E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+035f uni035F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0360 uni0360 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0361 uni0361 2.0 +U+0362 uni0362 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0370 uni0370 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0371 uni0371 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0372 uni0372 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0373 uni0373 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0374 uni0374 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0375 uni0375 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0376 uni0376 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0377 uni0377 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+037a uni037A 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+037b uni037B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+037c uni037C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+037d uni037D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+037e uni037E 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+037f uni037F 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0384 tonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0385 dieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0386 Alphatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0387 anoteleia 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0388 Epsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0389 Etatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038a Iotatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038c Omicrontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038e Upsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038f Omegatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0390 iotadieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0391 Alpha 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+0392 Beta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+0393 Gamma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+0394 uni0394 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+0395 Epsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+0396 Zeta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+0397 Eta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+0398 Theta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+0399 Iota 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+039a Kappa 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+039b Lambda 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+039c Mu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+039d Nu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+039e Xi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+039f Omicron 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03a0 Pi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03a1 Rho 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03a3 Sigma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03a4 Tau 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03a5 Upsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03a6 Phi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03a7 Chi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03a8 Psi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03a9 Omega original +U+03aa Iotadieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ab Upsilondieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ac alphatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ad epsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ae etatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03af iotatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b0 upsilondieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b1 alpha 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03b2 beta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03b3 gamma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03b4 delta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03b5 epsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03b6 zeta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03b7 eta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03b8 theta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03b9 iota 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03ba kappa 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03bb lambda 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03bc uni03BC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03bd nu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03be xi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03bf omicron 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03c0 pi original +U+03c1 rho 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03c2 sigma1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03c3 sigma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03c4 tau 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03c5 upsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03c6 phi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03c7 chi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03c8 psi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03c9 omega 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03ca iotadieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cb upsilondieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cc omicrontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cd upsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ce omegatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cf uni03CF 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+03d0 uni03D0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d1 theta1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03d2 Upsilon1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d3 uni03D3 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d4 uni03D4 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d5 phi1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.18 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03d6 omega1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) 2.36 (Math TeX Gyre Regular) +U+03d7 uni03D7 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d8 uni03D8 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03d9 uni03D9 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03da uni03DA 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03db uni03DB 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03dc uni03DC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03dd uni03DD 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03de uni03DE 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03df uni03DF 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e0 uni03E0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e1 uni03E1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e2 uni03E2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e3 uni03E3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e4 uni03E4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e5 uni03E5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e6 uni03E6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e7 uni03E7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e8 uni03E8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e9 uni03E9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ea uni03EA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03eb uni03EB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ec uni03EC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ed uni03ED 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ee uni03EE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ef uni03EF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03f0 uni03F0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03f1 uni03F1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) 2.36 (Math TeX Gyre Regular) +U+03f2 uni03F2 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f3 uni03F3 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f4 uni03F4 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03f5 uni03F5 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+03f6 uni03F6 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f7 uni03F7 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f8 uni03F8 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f9 uni03F9 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03fa uni03FA 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03fb uni03FB 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03fc uni03FC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03fd uni03FD 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03fe uni03FE 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ff uni03FF 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0400 uni0400 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0401 uni0401 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0402 uni0402 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0403 uni0403 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0404 uni0404 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0405 uni0405 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0406 uni0406 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0407 uni0407 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0408 uni0408 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0409 uni0409 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040a uni040A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040b uni040B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040c uni040C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040d uni040D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040e uni040E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040f uni040F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0410 uni0410 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0411 uni0411 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0412 uni0412 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0413 uni0413 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0414 uni0414 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0415 uni0415 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0416 uni0416 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0417 uni0417 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0418 uni0418 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0419 uni0419 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041a uni041A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041b uni041B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041c uni041C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041d uni041D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041e uni041E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041f uni041F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0420 uni0420 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0421 uni0421 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0422 uni0422 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0423 uni0423 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0424 uni0424 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0425 uni0425 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0426 uni0426 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0427 uni0427 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0428 uni0428 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0429 uni0429 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042a uni042A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042b uni042B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042c uni042C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042d uni042D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042e uni042E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042f uni042F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0430 uni0430 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0431 uni0431 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0432 uni0432 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0433 uni0433 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0434 uni0434 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0435 uni0435 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0436 uni0436 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0437 uni0437 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0438 uni0438 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0439 uni0439 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043a uni043A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043b uni043B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043c uni043C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043d uni043D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043e uni043E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043f uni043F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0440 uni0440 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0441 uni0441 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0442 uni0442 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0443 uni0443 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0444 uni0444 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0445 uni0445 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0446 uni0446 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0447 uni0447 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0448 uni0448 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0449 uni0449 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044a uni044A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044b uni044B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044c uni044C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044d uni044D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044e uni044E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044f uni044F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0450 uni0450 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0451 uni0451 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0452 uni0452 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0453 uni0453 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0454 uni0454 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0455 uni0455 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0456 uni0456 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0457 uni0457 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0458 uni0458 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0459 uni0459 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045a uni045A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045b uni045B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045c uni045C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045d uni045D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045e uni045E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045f uni045F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0460 uni0460 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0461 uni0461 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0462 uni0462 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0463 uni0463 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0464 uni0464 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0465 uni0465 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0466 uni0466 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0467 uni0467 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0468 uni0468 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0469 uni0469 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046a uni046A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.21 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+046b uni046B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.21 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+046c uni046C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+046d uni046D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+046e uni046E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046f uni046F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0470 uni0470 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0471 uni0471 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0472 uni0472 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0473 uni0473 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0474 uni0474 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0475 uni0475 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0476 uni0476 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0477 uni0477 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0478 uni0478 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0479 uni0479 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047a uni047A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047b uni047B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047c uni047C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047d uni047D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047e uni047E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047f uni047F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0480 uni0480 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0481 uni0481 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0482 uni0482 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0483 uni0483 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0484 uni0484 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0485 uni0485 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0486 uni0486 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0487 uni0487 2.9 (Sans, Sans Condensed) 2.27 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0488 uni0488 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0489 uni0489 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048a uni048A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048b uni048B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048c uni048C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+048d uni048D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+048e uni048E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048f uni048F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0490 uni0490 1.15 +U+0491 uni0491 1.15 +U+0492 uni0492 1.14 +U+0493 uni0493 1.14 +U+0494 uni0494 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0495 uni0495 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0496 uni0496 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0497 uni0497 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0498 uni0498 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0499 uni0499 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+049a uni049A 1.14 +U+049b uni049B 1.14 +U+049c uni049C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+049d uni049D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+049e uni049E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+049f uni049F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a0 uni04A0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04a1 uni04A1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04a2 uni04A2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a3 uni04A3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a4 uni04A4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04a5 uni04A5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04a6 uni04A6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a7 uni04A7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a8 uni04A8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04a9 uni04A9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04aa uni04AA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ab uni04AB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ac uni04AC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ad uni04AD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ae uni04AE 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04af uni04AF 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b0 uni04B0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+04b1 uni04B1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+04b2 uni04B2 1.14 +U+04b3 uni04B3 1.14 +U+04b4 uni04B4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04b5 uni04B5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04b6 uni04B6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b7 uni04B7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b8 uni04B8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04b9 uni04B9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ba uni04BA 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04bb uni04BB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04bc uni04BC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04bd uni04BD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04be uni04BE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04bf uni04BF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c0 uni04C0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04c1 uni04C1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04c2 uni04C2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04c3 uni04C3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04c4 uni04C4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04c5 uni04C5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c6 uni04C6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c7 uni04C7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04c8 uni04C8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04c9 uni04C9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ca uni04CA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04cb uni04CB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04cc uni04CC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04cd uni04CD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ce uni04CE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04cf uni04CF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04d0 uni04D0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d1 uni04D1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d2 uni04D2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d3 uni04D3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d4 uni04D4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d5 uni04D5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d6 uni04D6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d7 uni04D7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d8 uni04D8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04d9 uni04D9 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04da uni04DA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04db uni04DB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04dc uni04DC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04dd uni04DD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04de uni04DE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04df uni04DF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e0 uni04E0 2.3 +U+04e1 uni04E1 2.3 +U+04e2 uni04E2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e3 uni04E3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e4 uni04E4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e5 uni04E5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e6 uni04E6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04e7 uni04E7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04e8 uni04E8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04e9 uni04E9 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04ea uni04EA 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04eb uni04EB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04ec uni04EC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ed uni04ED 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ee uni04EE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ef uni04EF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f0 uni04F0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f1 uni04F1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f2 uni04F2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f3 uni04F3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f4 uni04F4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f5 uni04F5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f6 uni04F6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f7 uni04F7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f8 uni04F8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f9 uni04F9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04fa uni04FA 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fb uni04FB 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fc uni04FC 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fd uni04FD 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fe uni04FE 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+04ff uni04FF 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0500 uni0500 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0501 uni0501 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0502 uni0502 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0503 uni0503 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0504 uni0504 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0505 uni0505 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0506 uni0506 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0507 uni0507 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0508 uni0508 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0509 uni0509 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050a uni050A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050b uni050B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050c uni050C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050d uni050D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050e uni050E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050f uni050F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0510 uni0510 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0511 uni0511 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0512 uni0512 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0513 uni0513 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0514 uni0514 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0515 uni0515 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0516 uni0516 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans ExtraLight) +U+0517 uni0517 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans ExtraLight) +U+0518 uni0518 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans ExtraLight) +U+0519 uni0519 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans ExtraLight) +U+051a uni051A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051b uni051B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051c uni051C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051d uni051D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051e uni051E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+051f uni051F 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0520 uni0520 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0521 uni0521 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0522 uni0522 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0523 uni0523 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0524 uni0524 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0525 uni0525 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0531 uni0531 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0532 uni0532 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0533 uni0533 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0534 uni0534 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0535 uni0535 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0536 uni0536 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0537 uni0537 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0538 uni0538 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0539 uni0539 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053a uni053A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053b uni053B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053c uni053C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053d uni053D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053e uni053E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053f uni053F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0540 uni0540 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0541 uni0541 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0542 uni0542 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0543 uni0543 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0544 uni0544 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0545 uni0545 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0546 uni0546 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0547 uni0547 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0548 uni0548 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0549 uni0549 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054a uni054A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054b uni054B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054c uni054C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054d uni054D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054e uni054E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054f uni054F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0550 uni0550 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0551 uni0551 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0552 uni0552 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0553 uni0553 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0554 uni0554 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0555 uni0555 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0556 uni0556 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0559 uni0559 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055a uni055A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055b uni055B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055c uni055C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055d uni055D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055e uni055E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055f uni055F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0561 uni0561 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0562 uni0562 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0563 uni0563 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0564 uni0564 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0565 uni0565 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0566 uni0566 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0567 uni0567 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0568 uni0568 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0569 uni0569 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056a uni056A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056b uni056B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056c uni056C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056d uni056D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056e uni056E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056f uni056F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0570 uni0570 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0571 uni0571 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0572 uni0572 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0573 uni0573 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0574 uni0574 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0575 uni0575 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0576 uni0576 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0577 uni0577 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0578 uni0578 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0579 uni0579 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057a uni057A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057b uni057B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057c uni057C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057d uni057D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057e uni057E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057f uni057F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0580 uni0580 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0581 uni0581 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0582 uni0582 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0583 uni0583 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0584 uni0584 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0585 uni0585 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0586 uni0586 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0587 uni0587 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0589 uni0589 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+058a uni058A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+05b0 uni05B0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b1 uni05B1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b2 uni05B2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b3 uni05B3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b4 uni05B4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b5 uni05B5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b6 uni05B6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b7 uni05B7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b8 uni05B8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b9 uni05B9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05ba uni05BA 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+05bb uni05BB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bc uni05BC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bd uni05BD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05be uni05BE 2.9 (Sans Condensed Oblique, Sans Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) +U+05bf uni05BF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c0 uni05C0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c1 uni05C1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c2 uni05C2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c3 uni05C3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c6 uni05C6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c7 uni05C7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d0 uni05D0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d1 uni05D1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d2 uni05D2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d3 uni05D3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d4 uni05D4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d5 uni05D5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d6 uni05D6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d7 uni05D7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d8 uni05D8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d9 uni05D9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05da uni05DA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05db uni05DB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05dc uni05DC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05dd uni05DD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05de uni05DE 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05df uni05DF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e0 uni05E0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e1 uni05E1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e2 uni05E2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e3 uni05E3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e4 uni05E4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e5 uni05E5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e6 uni05E6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e7 uni05E7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e8 uni05E8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e9 uni05E9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05ea uni05EA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f0 uni05F0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f1 uni05F1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f2 uni05F2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f3 uni05F3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+05f4 uni05F4 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0606 uni0606 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+0607 uni0607 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+0609 uni0609 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+060a uni060A 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+060c uni060C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0615 uni0615 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+061b uni061B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+061f uni061F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0621 uni0621 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0622 uni0622 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0623 uni0623 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0624 uni0624 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0625 uni0625 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0626 uni0626 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0627 uni0627 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0628 uni0628 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0629 uni0629 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062a uni062A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062b uni062B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062c uni062C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062d uni062D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062e uni062E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062f uni062F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0630 uni0630 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0631 uni0631 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0632 uni0632 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0633 uni0633 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0634 uni0634 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0635 uni0635 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0636 uni0636 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0637 uni0637 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0638 uni0638 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0639 uni0639 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+063a uni063A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0640 uni0640 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0641 uni0641 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0642 uni0642 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0643 uni0643 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0644 uni0644 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0645 uni0645 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0646 uni0646 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0647 uni0647 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0648 uni0648 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0649 uni0649 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064a uni064A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064b uni064B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064c uni064C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064d uni064D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064e uni064E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064f uni064F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0650 uni0650 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0651 uni0651 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0652 uni0652 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0653 uni0653 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0654 uni0654 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0655 uni0655 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0657 uni0657 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+065a uni065A 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0660 uni0660 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0661 uni0661 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0662 uni0662 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0663 uni0663 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0664 uni0664 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0665 uni0665 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0666 uni0666 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0667 uni0667 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0668 uni0668 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0669 uni0669 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066a uni066A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066b uni066B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066c uni066C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066d uni066D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066e uni066E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066f uni066F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0670 uni0670 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0674 uni0674 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans ExtraLight) 2.16 (Sans Mono, Sans Mono Bold) +U+0679 uni0679 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067a uni067A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067b uni067B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067c uni067C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067d uni067D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067e uni067E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067f uni067F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0680 uni0680 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0681 uni0681 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0682 uni0682 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0683 uni0683 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0684 uni0684 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0685 uni0685 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0686 uni0686 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0687 uni0687 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0688 uni0688 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0689 uni0689 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068a uni068A 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068b uni068B 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068c uni068C 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068d uni068D 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068e uni068E 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068f uni068F 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0690 uni0690 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0691 uni0691 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0692 uni0692 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0693 uni0693 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0694 uni0694 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0695 uni0695 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0696 uni0696 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0697 uni0697 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0698 uni0698 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0699 uni0699 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069a uni069A 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069b uni069B 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069c uni069C 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069d uni069D 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069e uni069E 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069f uni069F 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a0 uni06A0 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a1 uni06A1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06a2 uni06A2 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a3 uni06A3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a4 uni06A4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06a5 uni06A5 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a6 uni06A6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a7 uni06A7 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a8 uni06A8 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a9 uni06A9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06aa uni06AA 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ab uni06AB 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ac uni06AC 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ad uni06AD 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ae uni06AE 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06af uni06AF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06b0 uni06B0 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b1 uni06B1 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b2 uni06B2 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b3 uni06B3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b4 uni06B4 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b5 uni06B5 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06b6 uni06B6 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b7 uni06B7 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b8 uni06B8 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b9 uni06B9 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ba uni06BA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06bb uni06BB 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06bc uni06BC 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06bd uni06BD 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06be uni06BE 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06bf uni06BF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06c6 uni06C6 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06c7 uni06C7 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06c8 uni06C8 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06cb uni06CB 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06cc uni06CC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06ce uni06CE 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06d0 uni06D0 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06d5 uni06D5 2.10 (Sans, Sans Bold) 2.11 (Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f0 uni06F0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f1 uni06F1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f2 uni06F2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f3 uni06F3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f4 uni06F4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f5 uni06F5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f6 uni06F6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f7 uni06F7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f8 uni06F8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f9 uni06F9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+07c0 uni07C0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c1 uni07C1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c2 uni07C2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c3 uni07C3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c4 uni07C4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c5 uni07C5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c6 uni07C6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c7 uni07C7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c8 uni07C8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c9 uni07C9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ca uni07CA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cb uni07CB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cc uni07CC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cd uni07CD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ce uni07CE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cf uni07CF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d0 uni07D0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d1 uni07D1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d2 uni07D2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d3 uni07D3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d4 uni07D4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d5 uni07D5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d6 uni07D6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d7 uni07D7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d8 uni07D8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d9 uni07D9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07da uni07DA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07db uni07DB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07dc uni07DC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07dd uni07DD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07de uni07DE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07df uni07DF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e0 uni07E0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e1 uni07E1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e2 uni07E2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e3 uni07E3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e4 uni07E4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e5 uni07E5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e6 uni07E6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e7 uni07E7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07eb uni07EB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ec uni07EC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ed uni07ED 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ee uni07EE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ef uni07EF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f0 uni07F0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f1 uni07F1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f2 uni07F2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f3 uni07F3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f4 uni07F4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f5 uni07F5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f8 uni07F8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f9 uni07F9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07fa uni07FA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0e3f uni0E3F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.35 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+0e81 uni0E81 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e82 uni0E82 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e84 uni0E84 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e87 uni0E87 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e88 uni0E88 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e8a uni0E8A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e8d uni0E8D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e94 uni0E94 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e95 uni0E95 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e96 uni0E96 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e97 uni0E97 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e99 uni0E99 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9a uni0E9A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9b uni0E9B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9c uni0E9C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9d uni0E9D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9e uni0E9E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9f uni0E9F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea1 uni0EA1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea2 uni0EA2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea3 uni0EA3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea5 uni0EA5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea7 uni0EA7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eaa uni0EAA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eab uni0EAB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ead uni0EAD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eae uni0EAE 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eaf uni0EAF 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb0 uni0EB0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb1 uni0EB1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb2 uni0EB2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb3 uni0EB3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb4 uni0EB4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb5 uni0EB5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb6 uni0EB6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb7 uni0EB7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb8 uni0EB8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb9 uni0EB9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebb uni0EBB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebc uni0EBC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebd uni0EBD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec0 uni0EC0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec1 uni0EC1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec2 uni0EC2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec3 uni0EC3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec4 uni0EC4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec6 uni0EC6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec8 uni0EC8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ec9 uni0EC9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eca uni0ECA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecb uni0ECB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecc uni0ECC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecd uni0ECD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ed0 uni0ED0 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed1 uni0ED1 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed2 uni0ED2 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed3 uni0ED3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed4 uni0ED4 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed5 uni0ED5 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed6 uni0ED6 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed7 uni0ED7 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed8 uni0ED8 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0ed9 uni0ED9 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0edc uni0EDC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0edd uni0EDD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+10a0 uni10A0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a1 uni10A1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a2 uni10A2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a3 uni10A3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a4 uni10A4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a5 uni10A5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a6 uni10A6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a7 uni10A7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a8 uni10A8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a9 uni10A9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10aa uni10AA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ab uni10AB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ac uni10AC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ad uni10AD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ae uni10AE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10af uni10AF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b0 uni10B0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b1 uni10B1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b2 uni10B2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b3 uni10B3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b4 uni10B4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b5 uni10B5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b6 uni10B6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b7 uni10B7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b8 uni10B8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b9 uni10B9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ba uni10BA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bb uni10BB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bc uni10BC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bd uni10BD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10be uni10BE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bf uni10BF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c0 uni10C0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c1 uni10C1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c2 uni10C2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c3 uni10C3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c4 uni10C4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c5 uni10C5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d0 uni10D0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d1 uni10D1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d2 uni10D2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d3 uni10D3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d4 uni10D4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d5 uni10D5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d6 uni10D6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d7 uni10D7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d8 uni10D8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d9 uni10D9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10da uni10DA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10db uni10DB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10dc uni10DC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10dd uni10DD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10de uni10DE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10df uni10DF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e0 uni10E0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e1 uni10E1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e2 uni10E2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e3 uni10E3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e4 uni10E4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e5 uni10E5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e6 uni10E6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e7 uni10E7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e8 uni10E8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e9 uni10E9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ea uni10EA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10eb uni10EB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ec uni10EC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ed uni10ED 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ee uni10EE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ef uni10EF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f0 uni10F0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f1 uni10F1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f2 uni10F2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f3 uni10F3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f4 uni10F4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f5 uni10F5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f6 uni10F6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f7 uni10F7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f8 uni10F8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f9 uni10F9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10fa uni10FA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10fb uni10FB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10fc uni10FC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+1401 uni1401 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1402 uni1402 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1403 uni1403 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1404 uni1404 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1405 uni1405 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1406 uni1406 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1407 uni1407 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1409 uni1409 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140a uni140A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140b uni140B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140c uni140C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140d uni140D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140e uni140E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140f uni140F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1410 uni1410 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1411 uni1411 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1412 uni1412 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1413 uni1413 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1414 uni1414 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1415 uni1415 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1416 uni1416 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1417 uni1417 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1418 uni1418 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1419 uni1419 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141a uni141A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141b uni141B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141d uni141D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141e uni141E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141f uni141F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1420 uni1420 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1421 uni1421 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1422 uni1422 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1423 uni1423 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1424 uni1424 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1425 uni1425 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1426 uni1426 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1427 uni1427 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1428 uni1428 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1429 uni1429 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142a uni142A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142b uni142B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142c uni142C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142d uni142D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142e uni142E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142f uni142F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1430 uni1430 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1431 uni1431 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1432 uni1432 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1433 uni1433 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1434 uni1434 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1435 uni1435 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1437 uni1437 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1438 uni1438 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1439 uni1439 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143a uni143A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143b uni143B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143c uni143C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143d uni143D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143e uni143E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143f uni143F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1440 uni1440 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1441 uni1441 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1442 uni1442 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1443 uni1443 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1444 uni1444 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1445 uni1445 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1446 uni1446 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1447 uni1447 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1448 uni1448 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1449 uni1449 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144a uni144A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144c uni144C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144d uni144D 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144e uni144E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144f uni144F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1450 uni1450 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1451 uni1451 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1452 uni1452 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1454 uni1454 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1455 uni1455 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1456 uni1456 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1457 uni1457 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1458 uni1458 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1459 uni1459 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145a uni145A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145b uni145B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145c uni145C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145d uni145D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145e uni145E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145f uni145F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1460 uni1460 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1461 uni1461 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1462 uni1462 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1463 uni1463 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1464 uni1464 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1465 uni1465 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1466 uni1466 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1467 uni1467 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1468 uni1468 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1469 uni1469 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146a uni146A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146b uni146B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146c uni146C 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146d uni146D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146e uni146E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146f uni146F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1470 uni1470 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1471 uni1471 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1472 uni1472 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1473 uni1473 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1474 uni1474 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1475 uni1475 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1476 uni1476 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1477 uni1477 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1478 uni1478 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1479 uni1479 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147a uni147A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147b uni147B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147c uni147C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147d uni147D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147e uni147E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147f uni147F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1480 uni1480 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1481 uni1481 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1482 uni1482 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1483 uni1483 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1484 uni1484 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1485 uni1485 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1486 uni1486 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1487 uni1487 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1488 uni1488 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1489 uni1489 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148a uni148A 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148b uni148B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148c uni148C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148d uni148D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148e uni148E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148f uni148F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1490 uni1490 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1491 uni1491 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1492 uni1492 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1493 uni1493 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1494 uni1494 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1495 uni1495 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1496 uni1496 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1497 uni1497 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1498 uni1498 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1499 uni1499 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149a uni149A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149b uni149B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149c uni149C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149d uni149D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149e uni149E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149f uni149F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a0 uni14A0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a1 uni14A1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a2 uni14A2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a3 uni14A3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a4 uni14A4 2.13 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.15 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+14a5 uni14A5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a6 uni14A6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a7 uni14A7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a8 uni14A8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a9 uni14A9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14aa uni14AA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ab uni14AB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ac uni14AC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ad uni14AD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ae uni14AE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14af uni14AF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b0 uni14B0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b1 uni14B1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b2 uni14B2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b3 uni14B3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b4 uni14B4 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b5 uni14B5 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b6 uni14B6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b7 uni14B7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b8 uni14B8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b9 uni14B9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ba uni14BA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bb uni14BB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bc uni14BC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bd uni14BD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c0 uni14C0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c1 uni14C1 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c2 uni14C2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c3 uni14C3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c4 uni14C4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c5 uni14C5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c6 uni14C6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c7 uni14C7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c8 uni14C8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c9 uni14C9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ca uni14CA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cb uni14CB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cc uni14CC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cd uni14CD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ce uni14CE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cf uni14CF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d0 uni14D0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d1 uni14D1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d2 uni14D2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d3 uni14D3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d4 uni14D4 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d5 uni14D5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d6 uni14D6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d7 uni14D7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d8 uni14D8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d9 uni14D9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14da uni14DA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14db uni14DB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14dc uni14DC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14dd uni14DD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14de uni14DE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14df uni14DF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e0 uni14E0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e1 uni14E1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e2 uni14E2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e3 uni14E3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e4 uni14E4 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e5 uni14E5 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e6 uni14E6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e7 uni14E7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e8 uni14E8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e9 uni14E9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ea uni14EA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ec uni14EC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ed uni14ED 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ee uni14EE 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ef uni14EF 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f0 uni14F0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f1 uni14F1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f2 uni14F2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f3 uni14F3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f4 uni14F4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f5 uni14F5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f6 uni14F6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f7 uni14F7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f8 uni14F8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f9 uni14F9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fa uni14FA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fb uni14FB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fc uni14FC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fd uni14FD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fe uni14FE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ff uni14FF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1500 uni1500 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1501 uni1501 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1502 uni1502 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1503 uni1503 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1504 uni1504 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1505 uni1505 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1506 uni1506 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1507 uni1507 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1510 uni1510 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1511 uni1511 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1512 uni1512 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1513 uni1513 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1514 uni1514 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1515 uni1515 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1516 uni1516 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1517 uni1517 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1518 uni1518 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1519 uni1519 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151a uni151A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151b uni151B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151c uni151C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151d uni151D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151e uni151E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151f uni151F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1520 uni1520 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1521 uni1521 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1522 uni1522 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1523 uni1523 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1524 uni1524 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1525 uni1525 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1526 uni1526 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1527 uni1527 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1528 uni1528 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1529 uni1529 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152a uni152A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152b uni152B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152c uni152C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152d uni152D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152e uni152E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152f uni152F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1530 uni1530 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1531 uni1531 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1532 uni1532 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1533 uni1533 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1534 uni1534 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1535 uni1535 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1536 uni1536 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1537 uni1537 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1538 uni1538 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1539 uni1539 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153a uni153A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153b uni153B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153c uni153C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153d uni153D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153e uni153E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1540 uni1540 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1541 uni1541 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1542 uni1542 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1543 uni1543 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1544 uni1544 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1545 uni1545 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1546 uni1546 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1547 uni1547 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1548 uni1548 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1549 uni1549 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154a uni154A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154b uni154B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154c uni154C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154d uni154D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154e uni154E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154f uni154F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1550 uni1550 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1552 uni1552 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1553 uni1553 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1554 uni1554 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1555 uni1555 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1556 uni1556 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1557 uni1557 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1558 uni1558 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1559 uni1559 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155a uni155A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155b uni155B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155c uni155C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155d uni155D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155e uni155E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155f uni155F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1560 uni1560 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1561 uni1561 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1562 uni1562 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1563 uni1563 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1564 uni1564 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1565 uni1565 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1566 uni1566 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1567 uni1567 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1568 uni1568 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1569 uni1569 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+156a uni156A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1574 uni1574 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1575 uni1575 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1576 uni1576 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1577 uni1577 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1578 uni1578 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1579 uni1579 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157a uni157A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157b uni157B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157c uni157C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157d uni157D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157e uni157E 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157f uni157F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1580 uni1580 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1581 uni1581 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1582 uni1582 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1583 uni1583 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1584 uni1584 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1585 uni1585 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158a uni158A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158b uni158B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158c uni158C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158d uni158D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158e uni158E 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158f uni158F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1590 uni1590 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1591 uni1591 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1592 uni1592 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1593 uni1593 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1594 uni1594 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1595 uni1595 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1596 uni1596 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a0 uni15A0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a1 uni15A1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a2 uni15A2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a3 uni15A3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a4 uni15A4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a5 uni15A5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a6 uni15A6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a7 uni15A7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a8 uni15A8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a9 uni15A9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15aa uni15AA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ab uni15AB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ac uni15AC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ad uni15AD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ae uni15AE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15af uni15AF 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15de uni15DE 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15e1 uni15E1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1646 uni1646 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1647 uni1647 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+166e uni166E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+166f uni166F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1670 uni1670 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1671 uni1671 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1672 uni1672 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1673 uni1673 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1674 uni1674 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1675 uni1675 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1676 uni1676 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1680 uni1680 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1681 uni1681 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1682 uni1682 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1683 uni1683 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1684 uni1684 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1685 uni1685 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1686 uni1686 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1687 uni1687 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1688 uni1688 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1689 uni1689 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168a uni168A 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168b uni168B 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168c uni168C 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168d uni168D 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168e uni168E 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168f uni168F 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1690 uni1690 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1691 uni1691 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1692 uni1692 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1693 uni1693 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1694 uni1694 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1695 uni1695 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1696 uni1696 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1697 uni1697 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1698 uni1698 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1699 uni1699 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169a uni169A 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169b uni169B 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169c uni169C 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1d00 uni1D00 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d01 uni1D01 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d02 uni1D02 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d03 uni1D03 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d04 uni1D04 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d05 uni1D05 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d06 uni1D06 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d07 uni1D07 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d08 uni1D08 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+1d09 uni1D09 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d0a uni1D0A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d0b uni1D0B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d0c uni1D0C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d0d uni1D0D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d0e uni1D0E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d0f uni1D0F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d10 uni1D10 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d11 uni1D11 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d12 uni1D12 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d13 uni1D13 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d14 uni1D14 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d15 uni1D15 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d16 uni1D16 2.3 +U+1d17 uni1D17 2.3 +U+1d18 uni1D18 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d19 uni1D19 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d1a uni1D1A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d1b uni1D1B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d1c uni1D1C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d1d uni1D1D 2.3 +U+1d1e uni1D1E 2.3 +U+1d1f uni1D1F 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+1d20 uni1D20 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d21 uni1D21 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d22 uni1D22 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d23 uni1D23 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d24 uni1D24 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d25 uni1D25 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d26 uni1D26 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d27 uni1D27 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d28 uni1D28 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d29 uni1D29 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d2a uni1D2A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d2b uni1D2B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d2c uni1D2C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d2d uni1D2D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d2e uni1D2E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d2f uni1D2F 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d30 uni1D30 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d31 uni1D31 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d32 uni1D32 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d33 uni1D33 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d34 uni1D34 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d35 uni1D35 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d36 uni1D36 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d37 uni1D37 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d38 uni1D38 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d39 uni1D39 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3a uni1D3A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3b uni1D3B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3c uni1D3C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3d uni1D3D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d3e uni1D3E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3f uni1D3F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d40 uni1D40 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d41 uni1D41 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d42 uni1D42 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d43 uni1D43 2.3 +U+1d44 uni1D44 2.3 +U+1d45 uni1D45 2.3 +U+1d46 uni1D46 2.3 +U+1d47 uni1D47 2.3 +U+1d48 uni1D48 2.3 +U+1d49 uni1D49 2.3 +U+1d4a uni1D4A 2.3 +U+1d4b uni1D4B 2.3 +U+1d4c uni1D4C 2.3 +U+1d4d uni1D4D 2.3 +U+1d4e uni1D4E 2.3 +U+1d4f uni1D4F 2.3 +U+1d50 uni1D50 2.3 +U+1d51 uni1D51 2.3 +U+1d52 uni1D52 2.3 +U+1d53 uni1D53 2.3 +U+1d54 uni1D54 2.3 +U+1d55 uni1D55 2.3 +U+1d56 uni1D56 2.3 +U+1d57 uni1D57 2.3 +U+1d58 uni1D58 2.3 +U+1d59 uni1D59 2.3 +U+1d5a uni1D5A 2.3 +U+1d5b uni1D5B 2.3 +U+1d5c uni1D5C 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d5d uni1D5D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d5e uni1D5E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d5f uni1D5F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d60 uni1D60 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d61 uni1D61 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d62 uni1D62 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d63 uni1D63 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d64 uni1D64 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d65 uni1D65 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d66 uni1D66 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d67 uni1D67 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d68 uni1D68 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d69 uni1D69 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d6a uni1D6A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d6b uni1D6B 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d77 uni1D77 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d78 uni1D78 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d7b uni1D7B 2.3 +U+1d7c uni1D7C 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d7d uni1D7D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d7e uni1D7E 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d7f uni1D7F 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d85 uni1D85 2.3 +U+1d9b uni1D9B 2.3 +U+1d9c uni1D9C 2.3 +U+1d9d uni1D9D 2.3 +U+1d9e uni1D9E 2.3 +U+1d9f uni1D9F 2.3 +U+1da0 uni1DA0 2.3 +U+1da1 uni1DA1 2.3 +U+1da2 uni1DA2 2.3 +U+1da3 uni1DA3 2.3 +U+1da4 uni1DA4 2.3 +U+1da5 uni1DA5 2.3 +U+1da6 uni1DA6 2.3 +U+1da7 uni1DA7 2.3 +U+1da8 uni1DA8 2.3 +U+1da9 uni1DA9 2.3 +U+1daa uni1DAA 2.3 +U+1dab uni1DAB 2.3 +U+1dac uni1DAC 2.3 +U+1dad uni1DAD 2.3 +U+1dae uni1DAE 2.3 +U+1daf uni1DAF 2.3 +U+1db0 uni1DB0 2.3 +U+1db1 uni1DB1 2.3 +U+1db2 uni1DB2 2.3 +U+1db3 uni1DB3 2.3 +U+1db4 uni1DB4 2.3 +U+1db5 uni1DB5 2.3 +U+1db6 uni1DB6 2.3 +U+1db7 uni1DB7 2.3 +U+1db8 uni1DB8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1db9 uni1DB9 2.3 +U+1dba uni1DBA 2.3 +U+1dbb uni1DBB 2.3 +U+1dbc uni1DBC 2.3 +U+1dbd uni1DBD 2.3 +U+1dbe uni1DBE 2.3 +U+1dbf uni1DBF 2.3 +U+1dc4 uni1DC4 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc5 uni1DC5 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc6 uni1DC6 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc7 uni1DC7 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc8 uni1DC8 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc9 uni1DC9 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1e00 uni1E00 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e01 uni1E01 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e02 uni1E02 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e03 uni1E03 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e04 uni1E04 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e05 uni1E05 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e06 uni1E06 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e07 uni1E07 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e08 uni1E08 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e09 uni1E09 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0a uni1E0A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0b uni1E0B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0c uni1E0C 2.1 +U+1e0d uni1E0D 2.1 +U+1e0e uni1E0E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0f uni1E0F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e10 uni1E10 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e11 uni1E11 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e12 uni1E12 1.13 +U+1e13 uni1E13 1.13 +U+1e14 uni1E14 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e15 uni1E15 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e16 uni1E16 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e17 uni1E17 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e18 uni1E18 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e19 uni1E19 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1a uni1E1A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1b uni1E1B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1c uni1E1C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1e1d uni1E1D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1e1e uni1E1E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1f uni1E1F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e20 uni1E20 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e21 uni1E21 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e22 uni1E22 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e23 uni1E23 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e24 uni1E24 2.1 +U+1e25 uni1E25 2.1 +U+1e26 uni1E26 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e27 uni1E27 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e28 uni1E28 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e29 uni1E29 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2a uni1E2A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2b uni1E2B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2c uni1E2C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2d uni1E2D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2e uni1E2E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e2f uni1E2F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e30 uni1E30 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e31 uni1E31 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e32 uni1E32 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e33 uni1E33 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e34 uni1E34 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e35 uni1E35 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e36 uni1E36 2.1 +U+1e37 uni1E37 2.1 +U+1e38 uni1E38 2.1 +U+1e39 uni1E39 2.1 +U+1e3a uni1E3A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3b uni1E3B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3c uni1E3C 1.13 +U+1e3d uni1E3D 1.13 +U+1e3e uni1E3E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3f uni1E3F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e40 uni1E40 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e41 uni1E41 2.1 +U+1e42 uni1E42 2.1 +U+1e43 uni1E43 2.1 +U+1e44 uni1E44 1.13 +U+1e45 uni1E45 1.13 +U+1e46 uni1E46 2.1 +U+1e47 uni1E47 2.1 +U+1e48 uni1E48 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e49 uni1E49 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e4a uni1E4A 1.13 +U+1e4b uni1E4B 1.13 +U+1e4c uni1E4C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1e4d uni1E4D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1e4e uni1E4E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e4f uni1E4F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e50 uni1E50 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e51 uni1E51 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e52 uni1E52 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e53 uni1E53 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e54 uni1E54 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e55 uni1E55 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e56 uni1E56 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e57 uni1E57 2.1 +U+1e58 uni1E58 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e59 uni1E59 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e5a uni1E5A 2.1 +U+1e5b uni1E5B 2.1 +U+1e5c uni1E5C 2.1 +U+1e5d uni1E5D 2.1 +U+1e5e uni1E5E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e5f uni1E5F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e60 uni1E60 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e61 uni1E61 2.1 +U+1e62 uni1E62 2.1 +U+1e63 uni1E63 2.1 +U+1e64 uni1E64 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e65 uni1E65 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e66 uni1E66 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e67 uni1E67 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e68 uni1E68 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e69 uni1E69 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6a uni1E6A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6b uni1E6B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6c uni1E6C 2.1 +U+1e6d uni1E6D 2.1 +U+1e6e uni1E6E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6f uni1E6F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e70 uni1E70 1.13 +U+1e71 uni1E71 1.13 +U+1e72 uni1E72 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e73 uni1E73 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e74 uni1E74 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e75 uni1E75 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e76 uni1E76 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e77 uni1E77 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e78 uni1E78 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e79 uni1E79 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7a uni1E7A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e7b uni1E7B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e7c uni1E7C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7d uni1E7D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7e uni1E7E 2.1 +U+1e7f uni1E7F 2.1 +U+1e80 Wgrave 1.2 +U+1e81 wgrave 1.2 +U+1e82 Wacute 1.2 +U+1e83 wacute 1.2 +U+1e84 Wdieresis 1.2 +U+1e85 wdieresis 1.2 +U+1e86 uni1E86 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e87 uni1E87 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e88 uni1E88 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e89 uni1E89 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8a uni1E8A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8b uni1E8B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8c uni1E8C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8d uni1E8D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8e uni1E8E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8f uni1E8F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e90 uni1E90 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e91 uni1E91 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e92 uni1E92 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e93 uni1E93 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e94 uni1E94 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e95 uni1E95 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e96 uni1E96 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e97 uni1E97 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e98 uni1E98 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e99 uni1E99 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e9a uni1E9A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e9b uni1E9B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e9c uni1E9C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e9d uni1E9D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e9e uni1E9E 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.32 (Sans ExtraLight) +U+1e9f uni1E9F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1ea0 uni1EA0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ea1 uni1EA1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ea2 uni1EA2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ea3 uni1EA3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ea4 uni1EA4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ea5 uni1EA5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ea6 uni1EA6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ea7 uni1EA7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ea8 uni1EA8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ea9 uni1EA9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1eaa uni1EAA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1eab uni1EAB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1eac uni1EAC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+1ead uni1EAD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+1eae uni1EAE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1eaf uni1EAF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1eb0 uni1EB0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1eb1 uni1EB1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1eb2 uni1EB2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1eb3 uni1EB3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1eb4 uni1EB4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1eb5 uni1EB5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1eb6 uni1EB6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+1eb7 uni1EB7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+1eb8 uni1EB8 2.2 +U+1eb9 uni1EB9 2.2 +U+1eba uni1EBA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ebb uni1EBB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ebc uni1EBC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ebd uni1EBD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ebe uni1EBE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ebf uni1EBF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ec0 uni1EC0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ec1 uni1EC1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ec2 uni1EC2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ec3 uni1EC3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ec4 uni1EC4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ec5 uni1EC5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ec6 uni1EC6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+1ec7 uni1EC7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+1ec8 uni1EC8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ec9 uni1EC9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1eca uni1ECA 2.2 +U+1ecb uni1ECB 2.2 +U+1ecc uni1ECC 2.2 +U+1ecd uni1ECD 2.2 +U+1ece uni1ECE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ecf uni1ECF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ed0 uni1ED0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ed1 uni1ED1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ed2 uni1ED2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ed3 uni1ED3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ed4 uni1ED4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ed5 uni1ED5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ed6 uni1ED6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ed7 uni1ED7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ed8 uni1ED8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+1ed9 uni1ED9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+1eda uni1EDA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1edb uni1EDB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1edc uni1EDC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1edd uni1EDD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ede uni1EDE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1edf uni1EDF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ee0 uni1EE0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ee1 uni1EE1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ee2 uni1EE2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ee3 uni1EE3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ee4 uni1EE4 2.2 +U+1ee5 uni1EE5 2.2 +U+1ee6 uni1EE6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ee7 uni1EE7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ee8 uni1EE8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ee9 uni1EE9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1eea uni1EEA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1eeb uni1EEB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1eec uni1EEC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1eed uni1EED 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1eee uni1EEE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1eef uni1EEF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ef0 uni1EF0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ef1 uni1EF1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+1ef2 Ygrave 1.2 +U+1ef3 ygrave 1.2 +U+1ef4 uni1EF4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ef5 uni1EF5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ef6 uni1EF6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ef7 uni1EF7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ef8 uni1EF8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1ef9 uni1EF9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+1efa uni1EFA 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1efb uni1EFB 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1f00 uni1F00 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f01 uni1F01 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f02 uni1F02 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f03 uni1F03 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f04 uni1F04 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f05 uni1F05 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f06 uni1F06 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f07 uni1F07 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f08 uni1F08 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f09 uni1F09 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0a uni1F0A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0b uni1F0B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0c uni1F0C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0d uni1F0D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0e uni1F0E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0f uni1F0F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f10 uni1F10 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f11 uni1F11 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f12 uni1F12 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f13 uni1F13 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f14 uni1F14 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f15 uni1F15 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f18 uni1F18 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f19 uni1F19 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1a uni1F1A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1b uni1F1B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1c uni1F1C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1d uni1F1D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f20 uni1F20 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f21 uni1F21 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f22 uni1F22 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f23 uni1F23 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f24 uni1F24 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f25 uni1F25 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f26 uni1F26 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f27 uni1F27 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f28 uni1F28 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f29 uni1F29 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2a uni1F2A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2b uni1F2B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2c uni1F2C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2d uni1F2D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2e uni1F2E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2f uni1F2F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f30 uni1F30 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f31 uni1F31 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f32 uni1F32 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f33 uni1F33 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f34 uni1F34 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f35 uni1F35 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f36 uni1F36 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f37 uni1F37 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f38 uni1F38 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f39 uni1F39 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3a uni1F3A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3b uni1F3B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3c uni1F3C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3d uni1F3D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3e uni1F3E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3f uni1F3F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f40 uni1F40 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f41 uni1F41 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f42 uni1F42 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f43 uni1F43 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f44 uni1F44 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f45 uni1F45 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f48 uni1F48 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f49 uni1F49 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4a uni1F4A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4b uni1F4B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4c uni1F4C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4d uni1F4D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f50 uni1F50 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f51 uni1F51 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f52 uni1F52 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f53 uni1F53 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f54 uni1F54 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f55 uni1F55 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f56 uni1F56 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f57 uni1F57 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f59 uni1F59 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5b uni1F5B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5d uni1F5D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5f uni1F5F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f60 uni1F60 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f61 uni1F61 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f62 uni1F62 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f63 uni1F63 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f64 uni1F64 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f65 uni1F65 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f66 uni1F66 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f67 uni1F67 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f68 uni1F68 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f69 uni1F69 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6a uni1F6A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6b uni1F6B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6c uni1F6C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6d uni1F6D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6e uni1F6E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6f uni1F6F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f70 uni1F70 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f71 uni1F71 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f72 uni1F72 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f73 uni1F73 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f74 uni1F74 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f75 uni1F75 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f76 uni1F76 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f77 uni1F77 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f78 uni1F78 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f79 uni1F79 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f7a uni1F7A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7b uni1F7B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7c uni1F7C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7d uni1F7D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f80 uni1F80 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f81 uni1F81 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f82 uni1F82 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f83 uni1F83 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f84 uni1F84 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f85 uni1F85 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f86 uni1F86 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f87 uni1F87 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f88 uni1F88 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f89 uni1F89 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8a uni1F8A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8b uni1F8B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8c uni1F8C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8d uni1F8D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8e uni1F8E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8f uni1F8F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f90 uni1F90 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f91 uni1F91 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f92 uni1F92 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f93 uni1F93 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f94 uni1F94 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f95 uni1F95 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f96 uni1F96 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f97 uni1F97 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f98 uni1F98 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f99 uni1F99 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9a uni1F9A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9b uni1F9B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9c uni1F9C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9d uni1F9D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9e uni1F9E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9f uni1F9F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa0 uni1FA0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa1 uni1FA1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa2 uni1FA2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa3 uni1FA3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa4 uni1FA4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa5 uni1FA5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa6 uni1FA6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa7 uni1FA7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa8 uni1FA8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa9 uni1FA9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1faa uni1FAA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fab uni1FAB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fac uni1FAC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fad uni1FAD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fae uni1FAE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1faf uni1FAF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb0 uni1FB0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb1 uni1FB1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb2 uni1FB2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb3 uni1FB3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb4 uni1FB4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb6 uni1FB6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb7 uni1FB7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb8 uni1FB8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fb9 uni1FB9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fba uni1FBA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbb uni1FBB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbc uni1FBC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fbd uni1FBD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fbe uni1FBE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbf uni1FBF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc0 uni1FC0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc1 uni1FC1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc2 uni1FC2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc3 uni1FC3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc4 uni1FC4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc6 uni1FC6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc7 uni1FC7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc8 uni1FC8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc9 uni1FC9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fca uni1FCA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fcb uni1FCB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fcc uni1FCC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fcd uni1FCD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fce uni1FCE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fcf uni1FCF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd0 uni1FD0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd1 uni1FD1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd2 uni1FD2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd3 uni1FD3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd6 uni1FD6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd7 uni1FD7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd8 uni1FD8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fd9 uni1FD9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fda uni1FDA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fdb uni1FDB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fdd uni1FDD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fde uni1FDE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fdf uni1FDF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe0 uni1FE0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe1 uni1FE1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe2 uni1FE2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe3 uni1FE3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe4 uni1FE4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe5 uni1FE5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe6 uni1FE6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe7 uni1FE7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe8 uni1FE8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fe9 uni1FE9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fea uni1FEA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1feb uni1FEB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fec uni1FEC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fed uni1FED 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fee uni1FEE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fef uni1FEF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ff2 uni1FF2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff3 uni1FF3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff4 uni1FF4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff6 uni1FF6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff7 uni1FF7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff8 uni1FF8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ff9 uni1FF9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ffa uni1FFA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffb uni1FFB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffc uni1FFC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffd uni1FFD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ffe uni1FFE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+2000 uni2000 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2001 uni2001 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2002 uni2002 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2003 uni2003 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2004 uni2004 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2005 uni2005 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2006 uni2006 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2007 uni2007 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2008 uni2008 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2009 uni2009 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+200a uni200A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+200b uni200B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+200c uni200C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+200d uni200D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+200e uni200E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200f uni200F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2010 uni2010 1.5 +U+2011 uni2011 1.5 +U+2012 figuredash 1.5 +U+2013 endash original +U+2014 emdash original +U+2015 uni2015 1.5 +U+2016 uni2016 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2017 underscoredbl 2.3 +U+2018 quoteleft original +U+2019 quoteright original +U+201a quotesinglbase original +U+201b quotereversed 2.3 +U+201c quotedblleft original +U+201d quotedblright original +U+201e quotedblbase original +U+201f uni201F 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+2020 dagger original +U+2021 daggerdbl original +U+2022 bullet original +U+2023 uni2023 2.2 +U+2024 onedotenleader 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2025 twodotenleader 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2026 ellipsis original +U+2027 uni2027 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2028 uni2028 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2029 uni2029 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+202a uni202A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202b uni202B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202c uni202C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202d uni202D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202e uni202E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202f uni202F 2.11 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2030 perthousand original +U+2031 uni2031 2.1 +U+2032 minute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+2033 second 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+2034 uni2034 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+2035 uni2035 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+2036 uni2036 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+2037 uni2037 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+2038 uni2038 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2039 guilsinglleft original +U+203a guilsinglright original +U+203b uni203B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+203c exclamdbl 2.0 +U+203d uni203D 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.11 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.14 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+203e uni203E 2.3 +U+203f uni203F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2040 uni2040 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2041 uni2041 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2042 uni2042 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2043 uni2043 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2044 fraction 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+2045 uni2045 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2046 uni2046 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2047 uni2047 2.0 +U+2048 uni2048 2.0 +U+2049 uni2049 2.0 +U+204a uni204A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+204b uni204B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+204c uni204C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+204d uni204D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+204e uni204E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+204f uni204F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2050 uni2050 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2051 uni2051 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2052 uni2052 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+2053 uni2053 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2054 uni2054 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2055 uni2055 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2056 uni2056 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2057 uni2057 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+2058 uni2058 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2059 uni2059 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205a uni205A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205b uni205B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205c uni205C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205d uni205D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205e uni205E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205f uni205F 2.14 +U+2060 uni2060 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2061 uni2061 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2062 uni2062 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2063 uni2063 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2064 uni2064 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+206a uni206A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206b uni206B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206c uni206C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206d uni206D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206e uni206E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206f uni206F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2070 uni2070 2.2 +U+2071 uni2071 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2074 uni2074 2.2 +U+2075 uni2075 2.2 +U+2076 uni2076 2.2 +U+2077 uni2077 2.2 +U+2078 uni2078 2.2 +U+2079 uni2079 2.2 +U+207a uni207A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207b uni207B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207c uni207C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207d uni207D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207e uni207E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207f uni207F 1.14 +U+2080 uni2080 2.4 +U+2081 uni2081 2.4 +U+2082 uni2082 2.4 +U+2083 uni2083 2.4 +U+2084 uni2084 2.4 +U+2085 uni2085 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2086 uni2086 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2087 uni2087 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2088 uni2088 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2089 uni2089 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+208a uni208A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208b uni208B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208c uni208C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208d uni208D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208e uni208E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2090 uni2090 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2091 uni2091 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2092 uni2092 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2093 uni2093 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2094 uni2094 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2095 uni2095 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2096 uni2096 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2097 uni2097 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2098 uni2098 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2099 uni2099 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+209a uni209A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+209b uni209B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+209c uni209C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+20a0 uni20A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a1 colonmonetary 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+20a2 uni20A2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a3 franc 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a4 lira 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+20a5 uni20A5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a6 uni20A6 2.3 +U+20a7 peseta 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a8 uni20A8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a9 uni20A9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+20aa uni20AA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ab dong 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+20ac Euro original +U+20ad uni20AD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ae uni20AE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20af uni20AF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b0 uni20B0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b1 uni20B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+20b2 uni20B2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+20b3 uni20B3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b4 uni20B4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+20b5 uni20B5 2.2 +U+20b8 uni20B8 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+20b9 uni20B9 2.32 +U+20ba uni20BA 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20bd uni20BD 2.35 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20d0 uni20D0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+20d1 uni20D1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+20d2 uni20D2 2.36 (Math TeX Gyre Regular) +U+20d3 uni20D3 2.36 (Math TeX Gyre Regular) +U+20d4 uni20D4 2.36 (Math TeX Gyre Regular) +U+20d5 uni20D5 2.36 (Math TeX Gyre Regular) +U+20d6 uni20D6 2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+20d7 uni20D7 2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+20d8 uni20D8 2.36 (Math TeX Gyre Regular) +U+20db uni20DB 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+20dc uni20DC 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+20dd uni20DD 2.36 (Math TeX Gyre Regular) +U+20de uni20DE 2.36 (Math TeX Gyre Regular) +U+20df uni20DF 2.36 (Math TeX Gyre Regular) +U+20e1 uni20E1 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+20e4 uni20E4 2.36 (Math TeX Gyre Regular) +U+20e5 uni20E5 2.36 (Math TeX Gyre Regular) +U+20e6 uni20E6 2.36 (Math TeX Gyre Regular) +U+20e8 uni20E8 2.36 (Math TeX Gyre Regular) +U+20e9 uni20E9 2.36 (Math TeX Gyre Regular) +U+20ea uni20EA 2.36 (Math TeX Gyre Regular) +U+20eb uni20EB 2.36 (Math TeX Gyre Regular) +U+20ec uni20EC 2.36 (Math TeX Gyre Regular) +U+20ed uni20ED 2.36 (Math TeX Gyre Regular) +U+20ee uni20EE 2.36 (Math TeX Gyre Regular) +U+20ef uni20EF 2.36 (Math TeX Gyre Regular) +U+20f0 uni20F0 2.36 (Math TeX Gyre Regular) +U+2100 uni2100 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2101 uni2101 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2102 uni2102 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.16 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+2103 uni2103 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2104 uni2104 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2105 uni2105 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2106 uni2106 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2107 uni2107 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2108 uni2108 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2109 uni2109 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+210a uni210A 2.36 (Math TeX Gyre Regular) +U+210b uni210B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+210c uni210C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+210d uni210D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+210e uni210E 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) 2.36 (Math TeX Gyre Regular) +U+210f uni210F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.28 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+2110 uni2110 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2111 Ifraktur 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2112 uni2112 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2113 uni2113 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2114 uni2114 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2115 uni2115 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2116 uni2116 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2117 uni2117 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2118 weierstrass 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2119 uni2119 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+211a uni211A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+211b uni211B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+211c Rfraktur 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+211d uni211D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+211e prescription 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+211f uni211F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2120 uni2120 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2121 uni2121 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2122 trademark original +U+2123 uni2123 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2124 uni2124 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2125 uni2125 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2126 uni2126 2.2 +U+2127 uni2127 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2128 uni2128 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2129 uni2129 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212a uni212A 2.2 +U+212b uni212B 2.2 +U+212c uni212C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+212d uni212D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+212e estimated 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+212f uni212F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2130 uni2130 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2131 uni2131 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2132 uni2132 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2133 uni2133 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2134 uni2134 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2135 aleph 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2136 uni2136 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2137 uni2137 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2138 uni2138 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2139 uni2139 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213a uni213A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213b uni213B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213c uni213C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+213d uni213D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+213e uni213E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+213f uni213F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+2140 uni2140 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+2141 uni2141 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans ExtraLight) +U+2142 uni2142 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans ExtraLight) +U+2143 uni2143 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans ExtraLight) +U+2144 uni2144 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans ExtraLight) +U+2145 uni2145 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+2146 uni2146 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+2147 uni2147 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+2148 uni2148 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2149 uni2149 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+214b uni214B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+214e uni214E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2150 uni2150 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2151 uni2151 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2152 uni2152 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2153 onethird 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2154 twothirds 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2155 uni2155 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2156 uni2156 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2157 uni2157 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2158 uni2158 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2159 uni2159 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215a uni215A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215b oneeighth 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215c threeeighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215d fiveeighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215e seveneighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215f uni215F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2160 uni2160 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2161 uni2161 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2162 uni2162 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2163 uni2163 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2164 uni2164 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2165 uni2165 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2166 uni2166 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2167 uni2167 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2168 uni2168 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2169 uni2169 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216a uni216A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216b uni216B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216c uni216C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216d uni216D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216e uni216E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216f uni216F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2170 uni2170 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2171 uni2171 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2172 uni2172 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2173 uni2173 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2174 uni2174 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2175 uni2175 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2176 uni2176 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2177 uni2177 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2178 uni2178 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2179 uni2179 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217a uni217A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217b uni217B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217c uni217C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217d uni217D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217e uni217E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217f uni217F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2180 uni2180 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2181 uni2181 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+2182 uni2182 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+2183 uni2183 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2184 uni2184 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2185 uni2185 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2189 uni2189 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2190 arrowleft 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2191 arrowup 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2192 arrowright 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2193 arrowdown 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2194 arrowboth 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2195 arrowupdn 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2196 uni2196 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2197 uni2197 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2198 uni2198 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2199 uni2199 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+219a uni219A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+219b uni219B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+219c uni219C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219d uni219D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219e uni219E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+219f uni219F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21a0 uni21A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21a1 uni21A1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21a2 uni21A2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21a3 uni21A3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21a4 uni21A4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21a5 uni21A5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21a6 uni21A6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21a7 uni21A7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21a8 arrowupdnbse 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a9 uni21A9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21aa uni21AA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21ab uni21AB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21ac uni21AC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21ad uni21AD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21ae uni21AE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21af uni21AF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b0 uni21B0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21b1 uni21B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21b2 uni21B2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21b3 uni21B3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21b4 uni21B4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21b5 carriagereturn 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21b6 uni21B6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21b7 uni21B7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21b8 uni21B8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b9 uni21B9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ba uni21BA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21bb uni21BB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21bc uni21BC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21bd uni21BD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21be uni21BE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21bf uni21BF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21c0 uni21C0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21c1 uni21C1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21c2 uni21C2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21c3 uni21C3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21c4 uni21C4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21c5 uni21C5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21c6 uni21C6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21c7 uni21C7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21c8 uni21C8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21c9 uni21C9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21ca uni21CA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21cb uni21CB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21cc uni21CC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21cd uni21CD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21ce uni21CE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21cf uni21CF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21d0 arrowdblleft 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21d1 arrowdblup 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21d2 arrowdblright 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21d3 arrowdbldown 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21d4 arrowdblboth 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21d5 uni21D5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21d6 uni21D6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21d7 uni21D7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21d8 uni21D8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21d9 uni21D9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21da uni21DA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21db uni21DB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21dc uni21DC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21dd uni21DD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21de uni21DE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21df uni21DF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e0 uni21E0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e1 uni21E1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e2 uni21E2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e3 uni21E3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e4 uni21E4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e5 uni21E5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e6 uni21E6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21e7 uni21E7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21e8 uni21E8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21e9 uni21E9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21ea uni21EA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21eb uni21EB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ec uni21EC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ed uni21ED 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ee uni21EE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ef uni21EF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f0 uni21F0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f1 uni21F1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f2 uni21F2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f3 uni21F3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21f4 uni21F4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f5 uni21F5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21f6 uni21F6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+21f7 uni21F7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f8 uni21F8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f9 uni21F9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fa uni21FA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fb uni21FB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fc uni21FC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fd uni21FD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fe uni21FE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ff uni21FF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2200 universal 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2201 uni2201 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2202 partialdiff original +U+2203 existential 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2204 uni2204 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2205 emptyset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2206 Delta original +U+2207 gradient 2.1 +U+2208 element 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2209 notelement 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+220a uni220A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+220b suchthat 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+220c uni220C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+220d uni220D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+220e uni220E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+220f product original +U+2210 uni2210 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2211 summation original +U+2212 minus original +U+2213 uni2213 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2214 uni2214 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2215 uni2215 original +U+2216 uni2216 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2217 asteriskmath 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2218 uni2218 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2219 uni2219 original +U+221a radical original +U+221b uni221B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+221c uni221C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+221d proportional 2.1 +U+221e infinity original +U+221f orthogonal 2.1 +U+2220 angle 2.3 +U+2221 uni2221 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2222 uni2222 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2223 uni2223 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2224 uni2224 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2225 uni2225 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2226 uni2226 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2227 logicaland 2.1 +U+2228 logicalor 2.1 +U+2229 intersection 2.1 +U+222a union 2.1 +U+222b integral original +U+222c uni222C 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+222d uni222D 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+222e uni222E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+222f uni222F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2230 uni2230 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2231 uni2231 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2232 uni2232 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2233 uni2233 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2234 therefore 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2235 uni2235 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2236 uni2236 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2237 uni2237 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2238 uni2238 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2239 uni2239 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+223a uni223A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+223b uni223B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+223c similar 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+223d uni223D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+223e uni223E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+223f uni223F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2240 uni2240 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2241 uni2241 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2242 uni2242 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2243 uni2243 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2244 uni2244 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2245 congruent 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2246 uni2246 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2247 uni2247 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2248 approxequal original +U+2249 uni2249 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+224a uni224A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+224b uni224B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+224c uni224C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+224d uni224D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+224e uni224E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+224f uni224F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2250 uni2250 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2251 uni2251 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2252 uni2252 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2253 uni2253 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2254 uni2254 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2255 uni2255 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2256 uni2256 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2257 uni2257 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2258 uni2258 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2259 uni2259 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+225a uni225A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+225b uni225B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+225c uni225C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+225d uni225D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+225e uni225E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+225f uni225F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2260 notequal original +U+2261 equivalence 2.1 +U+2262 uni2262 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2263 uni2263 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2264 lessequal original +U+2265 greaterequal original +U+2266 uni2266 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2267 uni2267 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2268 uni2268 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2269 uni2269 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+226a uni226A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+226b uni226B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+226c uni226C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+226d uni226D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+226e uni226E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+226f uni226F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2270 uni2270 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2271 uni2271 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2272 uni2272 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2273 uni2273 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2274 uni2274 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2275 uni2275 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2276 uni2276 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2277 uni2277 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2278 uni2278 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2279 uni2279 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+227a uni227A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+227b uni227B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+227c uni227C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+227d uni227D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+227e uni227E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+227f uni227F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2280 uni2280 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2281 uni2281 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2282 propersubset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2283 propersuperset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2284 notsubset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2285 uni2285 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2286 reflexsubset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2287 reflexsuperset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2288 uni2288 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2289 uni2289 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+228a uni228A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+228b uni228B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+228c uni228C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+228d uni228D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+228e uni228E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+228f uni228F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2290 uni2290 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2291 uni2291 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2292 uni2292 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2293 uni2293 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2294 uni2294 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2295 circleplus 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2296 uni2296 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2297 circlemultiply 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2298 uni2298 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2299 uni2299 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+229a uni229A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+229b uni229B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+229c uni229C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+229d uni229D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+229e uni229E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+229f uni229F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22a0 uni22A0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22a1 uni22A1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22a2 uni22A2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22a3 uni22A3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22a4 uni22A4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22a5 perpendicular 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22a6 uni22A6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22a7 uni22A7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22a8 uni22A8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22a9 uni22A9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22aa uni22AA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22ab uni22AB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22ac uni22AC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22ad uni22AD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22ae uni22AE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22af uni22AF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22b0 uni22B0 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b1 uni22B1 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b2 uni22B2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22b3 uni22B3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22b4 uni22B4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22b5 uni22B5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22b6 uni22B6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22b7 uni22B7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22b8 uni22B8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22b9 uni22B9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22ba uni22BA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22bb uni22BB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22bc uni22BC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22bd uni22BD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22be uni22BE 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+22bf uni22BF 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+22c0 uni22C0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22c1 uni22C1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22c2 uni22C2 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22c3 uni22C3 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22c4 uni22C4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+22c5 dotmath 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+22c6 uni22C6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22c7 uni22C7 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22c8 uni22C8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22c9 uni22C9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22ca uni22CA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22cb uni22CB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22cc uni22CC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22cd uni22CD 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+22ce uni22CE 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22cf uni22CF 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22d0 uni22D0 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22d1 uni22D1 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+22d2 uni22D2 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22d3 uni22D3 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22d4 uni22D4 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d5 uni22D5 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22d6 uni22D6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22d7 uni22D7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22d8 uni22D8 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+22d9 uni22D9 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+22da uni22DA 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+22db uni22DB 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+22dc uni22DC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22dd uni22DD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22de uni22DE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22df uni22DF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22e0 uni22E0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22e1 uni22E1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22e2 uni22E2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22e3 uni22E3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22e4 uni22E4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22e5 uni22E5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22e6 uni22E6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22e7 uni22E7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22e8 uni22E8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22e9 uni22E9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22ea uni22EA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22eb uni22EB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22ec uni22EC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22ed uni22ED 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22ee uni22EE 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22ef uni22EF 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22f0 uni22F0 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22f1 uni22F1 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+22f2 uni22F2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f3 uni22F3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f4 uni22F4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f5 uni22F5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f6 uni22F6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f7 uni22F7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f8 uni22F8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f9 uni22F9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fa uni22FA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fb uni22FB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fc uni22FC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fd uni22FD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fe uni22FE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ff uni22FF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2300 uni2300 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+2301 uni2301 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2302 house 1.14 +U+2303 uni2303 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2304 uni2304 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2305 uni2305 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+2306 uni2306 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2307 uni2307 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2308 uni2308 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2309 uni2309 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+230a uni230A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+230b uni230B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+230c uni230C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230d uni230D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230e uni230E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230f uni230F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2310 revlogicalnot 1.14 +U+2311 uni2311 1.15 +U+2312 uni2312 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2313 uni2313 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2314 uni2314 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2315 uni2315 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2318 uni2318 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2319 uni2319 1.14 +U+231c uni231C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+231d uni231D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+231e uni231E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+231f uni231F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+2320 integraltp 2.3 +U+2321 integralbt 2.3 +U+2322 uni2322 2.36 (Math TeX Gyre Regular) +U+2323 uni2323 2.36 (Math TeX Gyre Regular) +U+2324 uni2324 2.16 (Sans, Sans Bold, Sans Bold Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) 2.19 (Sans Condensed Oblique, Sans Oblique) +U+2325 uni2325 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2326 uni2326 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2327 uni2327 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2328 uni2328 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2329 angleleft 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+232a angleright 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+232b uni232B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+232c uni232C 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2335 uni2335 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2336 uni2336 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2337 uni2337 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2338 uni2338 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2339 uni2339 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233a uni233A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233b uni233B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233c uni233C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233d uni233D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233e uni233E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233f uni233F 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2340 uni2340 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2341 uni2341 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2342 uni2342 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2343 uni2343 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2344 uni2344 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2345 uni2345 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2346 uni2346 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2347 uni2347 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2348 uni2348 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2349 uni2349 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234a uni234A 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234b uni234B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234c uni234C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234d uni234D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234e uni234E 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234f uni234F 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2350 uni2350 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2351 uni2351 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2352 uni2352 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2353 uni2353 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2354 uni2354 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2355 uni2355 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2356 uni2356 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2357 uni2357 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2358 uni2358 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2359 uni2359 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235a uni235A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235b uni235B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235c uni235C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235d uni235D 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235e uni235E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235f uni235F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2360 uni2360 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2361 uni2361 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2362 uni2362 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2363 uni2363 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2364 uni2364 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2365 uni2365 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2366 uni2366 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2367 uni2367 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2368 uni2368 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2369 uni2369 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236a uni236A 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236b uni236B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236c uni236C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236d uni236D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236e uni236E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236f uni236F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2370 uni2370 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2371 uni2371 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2372 uni2372 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2373 uni2373 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2374 uni2374 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2375 uni2375 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2376 uni2376 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2377 uni2377 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2378 uni2378 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2379 uni2379 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+237a uni237A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+237d uni237D 1.15 +U+2380 uni2380 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2381 uni2381 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2382 uni2382 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2383 uni2383 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2387 uni2387 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2388 uni2388 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2389 uni2389 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+238a uni238A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+238b uni238B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2394 uni2394 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2395 uni2395 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+239b uni239B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+239c uni239C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+239d uni239D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+239e uni239E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+239f uni239F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23a0 uni23A0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23a1 uni23A1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23a2 uni23A2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23a3 uni23A3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23a4 uni23A4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23a5 uni23A5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23a6 uni23A6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23a7 uni23A7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23a8 uni23A8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23a9 uni23A9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23aa uni23AA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23ab uni23AB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23ac uni23AC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23ad uni23AD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.36 (Math TeX Gyre Regular) +U+23ae uni23AE 2.3 +U+23b2 uni23B2 2.36 (Math TeX Gyre Regular) +U+23b3 uni23B3 2.36 (Math TeX Gyre Regular) +U+23b4 uni23B4 2.36 (Math TeX Gyre Regular) +U+23b5 uni23B5 2.36 (Math TeX Gyre Regular) +U+23b7 uni23B7 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+23ce uni23CE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23cf uni23CF 2.3 +U+23d0 uni23D0 2.36 (Math TeX Gyre Regular) +U+23dc uni23DC 2.36 (Math TeX Gyre Regular) +U+23dd uni23DD 2.36 (Math TeX Gyre Regular) +U+23de uni23DE 2.36 (Math TeX Gyre Regular) +U+23df uni23DF 2.36 (Math TeX Gyre Regular) +U+23e0 uni23E0 2.36 (Math TeX Gyre Regular) +U+23e1 uni23E1 2.36 (Math TeX Gyre Regular) +U+23e3 uni23E3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+23e5 uni23E5 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+23e8 uni23E8 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2422 uni2422 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2423 uni2423 1.6 +U+2460 uni2460 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2461 uni2461 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2462 uni2462 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2463 uni2463 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2464 uni2464 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2465 uni2465 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2466 uni2466 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2467 uni2467 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2468 uni2468 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2469 uni2469 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2500 SF100000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+2501 uni2501 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2502 SF110000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+2503 uni2503 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2504 uni2504 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2505 uni2505 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2506 uni2506 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2507 uni2507 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2508 uni2508 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2509 uni2509 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+250a uni250A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+250b uni250B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+250c SF010000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+250d uni250D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+250e uni250E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+250f uni250F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2510 SF030000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+2511 uni2511 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2512 uni2512 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2513 uni2513 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2514 SF020000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+2515 uni2515 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2516 uni2516 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2517 uni2517 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2518 SF040000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+2519 uni2519 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+251a uni251A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+251b uni251B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+251c SF080000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+251d uni251D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+251e uni251E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+251f uni251F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2520 uni2520 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2521 uni2521 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2522 uni2522 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2523 uni2523 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2524 SF090000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+2525 uni2525 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2526 uni2526 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2527 uni2527 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2528 uni2528 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2529 uni2529 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+252a uni252A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+252b uni252B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+252c SF060000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+252d uni252D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+252e uni252E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+252f uni252F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2530 uni2530 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2531 uni2531 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2532 uni2532 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2533 uni2533 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2534 SF070000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+2535 uni2535 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2536 uni2536 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2537 uni2537 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2538 uni2538 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2539 uni2539 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+253a uni253A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+253b uni253B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+253c SF050000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+253d uni253D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+253e uni253E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+253f uni253F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2540 uni2540 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2541 uni2541 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2542 uni2542 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2543 uni2543 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2544 uni2544 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2545 uni2545 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2546 uni2546 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2547 uni2547 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2548 uni2548 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2549 uni2549 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+254a uni254A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+254b uni254B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+254c uni254C 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+254d uni254D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+254e uni254E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+254f uni254F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2550 SF430000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2551 SF240000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2552 SF510000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2553 SF520000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2554 SF390000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2555 SF220000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2556 SF210000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2557 SF250000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2558 SF500000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2559 SF490000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+255a SF380000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+255b SF280000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+255c SF270000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+255d SF260000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+255e SF360000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+255f SF370000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2560 SF420000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2561 SF190000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2562 SF200000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2563 SF230000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2564 SF470000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2565 SF480000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2566 SF410000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2567 SF450000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2568 SF460000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2569 SF400000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+256a SF540000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+256b SF530000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+256c SF440000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+256d uni256D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+256e uni256E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+256f uni256F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2570 uni2570 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2571 uni2571 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2572 uni2572 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2573 uni2573 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2574 uni2574 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2575 uni2575 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2576 uni2576 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2577 uni2577 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2578 uni2578 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2579 uni2579 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+257a uni257A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+257b uni257B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+257c uni257C 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+257d uni257D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+257e uni257E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+257f uni257F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Mono Bold, Sans Mono Bold Oblique, Serif Bold, Serif Bold Italic, Serif Condensed Bold, Serif Condensed Bold Italic) +U+2580 upblock 1.14 +U+2581 uni2581 1.14 +U+2582 uni2582 1.14 +U+2583 uni2583 1.14 +U+2584 dnblock 1.14 +U+2585 uni2585 1.14 +U+2586 uni2586 1.14 +U+2587 uni2587 1.14 +U+2588 block 1.14 +U+2589 uni2589 1.14 +U+258a uni258A 1.14 +U+258b uni258B 1.14 +U+258c lfblock 1.14 +U+258d uni258D 1.14 +U+258e uni258E 1.14 +U+258f uni258F 1.14 +U+2590 rtblock 1.14 +U+2591 ltshade 1.15 +U+2592 shade 1.15 +U+2593 dkshade 1.15 +U+2594 uni2594 1.14 +U+2595 uni2595 1.14 +U+2596 uni2596 1.14 +U+2597 uni2597 1.14 +U+2598 uni2598 1.14 +U+2599 uni2599 1.14 +U+259a uni259A 1.14 +U+259b uni259B 1.14 +U+259c uni259C 1.14 +U+259d uni259D 1.14 +U+259e uni259E 1.14 +U+259f uni259F 1.14 +U+25a0 filledbox 2.3 +U+25a1 H22073 2.3 +U+25a2 uni25A2 2.3 +U+25a3 uni25A3 2.3 +U+25a4 uni25A4 2.3 +U+25a5 uni25A5 2.3 +U+25a6 uni25A6 2.3 +U+25a7 uni25A7 2.3 +U+25a8 uni25A8 2.3 +U+25a9 uni25A9 2.3 +U+25aa H18543 2.3 +U+25ab H18551 2.3 +U+25ac filledrect 2.3 +U+25ad uni25AD 2.3 +U+25ae uni25AE 2.3 +U+25af uni25AF 2.3 +U+25b0 uni25B0 2.3 +U+25b1 uni25B1 2.3 +U+25b2 triagup 2.3 +U+25b3 uni25B3 2.3 +U+25b4 uni25B4 2.3 +U+25b5 uni25B5 2.3 +U+25b6 uni25B6 2.3 +U+25b7 uni25B7 2.3 +U+25b8 uni25B8 2.3 +U+25b9 uni25B9 2.3 +U+25ba triagrt 2.3 +U+25bb uni25BB 2.3 +U+25bc triagdn 2.3 +U+25bd uni25BD 2.3 +U+25be uni25BE 2.3 +U+25bf uni25BF 2.3 +U+25c0 uni25C0 2.3 +U+25c1 uni25C1 2.3 +U+25c2 uni25C2 2.3 +U+25c3 uni25C3 2.3 +U+25c4 triaglf 2.3 +U+25c5 uni25C5 2.3 +U+25c6 uni25C6 2.3 +U+25c7 uni25C7 2.3 +U+25c8 uni25C8 2.3 +U+25c9 uni25C9 2.3 +U+25ca lozenge original +U+25cb circle 2.3 +U+25cc uni25CC 2.3 +U+25cd uni25CD 2.3 +U+25ce uni25CE 2.3 +U+25cf H18533 2.3 +U+25d0 uni25D0 2.3 +U+25d1 uni25D1 2.3 +U+25d2 uni25D2 2.3 +U+25d3 uni25D3 2.3 +U+25d4 uni25D4 2.3 +U+25d5 uni25D5 2.3 +U+25d6 uni25D6 2.3 +U+25d7 uni25D7 2.3 +U+25d8 invbullet 2.2 +U+25d9 invcircle 2.3 +U+25da uni25DA 2.3 +U+25db uni25DB 2.3 +U+25dc uni25DC 2.3 +U+25dd uni25DD 2.3 +U+25de uni25DE 2.3 +U+25df uni25DF 2.3 +U+25e0 uni25E0 2.3 +U+25e1 uni25E1 2.3 +U+25e2 uni25E2 2.3 +U+25e3 uni25E3 2.3 +U+25e4 uni25E4 2.3 +U+25e5 uni25E5 2.3 +U+25e6 openbullet 2.2 +U+25e7 uni25E7 2.3 +U+25e8 uni25E8 2.3 +U+25e9 uni25E9 2.3 +U+25ea uni25EA 2.3 +U+25eb uni25EB 2.3 +U+25ec uni25EC 2.3 +U+25ed uni25ED 2.3 +U+25ee uni25EE 2.3 +U+25ef uni25EF 2.3 +U+25f0 uni25F0 2.3 +U+25f1 uni25F1 2.3 +U+25f2 uni25F2 2.3 +U+25f3 uni25F3 2.3 +U+25f4 uni25F4 2.3 +U+25f5 uni25F5 2.3 +U+25f6 uni25F6 2.3 +U+25f7 uni25F7 2.3 +U+25f8 uni25F8 2.3 +U+25f9 uni25F9 2.3 +U+25fa uni25FA 2.3 +U+25fb uni25FB 2.3 +U+25fc uni25FC 2.3 +U+25fd uni25FD 2.3 +U+25fe uni25FE 2.3 +U+25ff uni25FF 2.3 +U+2600 uni2600 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2601 uni2601 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2602 uni2602 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2603 uni2603 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2604 uni2604 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2605 uni2605 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2606 uni2606 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2607 uni2607 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2608 uni2608 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2609 uni2609 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260a uni260A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260b uni260B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260c uni260C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260d uni260D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260e uni260E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260f uni260F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2610 uni2610 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2611 uni2611 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2612 uni2612 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2613 uni2613 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2614 uni2614 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2615 uni2615 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2616 uni2616 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2617 uni2617 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2618 uni2618 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2619 uni2619 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261a uni261A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261b uni261B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261c uni261C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261d uni261D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261e uni261E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261f uni261F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2620 uni2620 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2621 uni2621 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2622 uni2622 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2623 uni2623 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2624 uni2624 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2625 uni2625 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2626 uni2626 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2627 uni2627 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2628 uni2628 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2629 uni2629 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262a uni262A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262b uni262B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262c uni262C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262d uni262D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262e uni262E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262f uni262F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2630 uni2630 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2631 uni2631 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2632 uni2632 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2633 uni2633 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2634 uni2634 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2635 uni2635 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2636 uni2636 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2637 uni2637 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2638 uni2638 1.15 +U+2639 uni2639 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263a smileface 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263b invsmileface 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263c sun 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263d uni263D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+263e uni263E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+263f uni263F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2640 female 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2641 uni2641 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2642 male 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2643 uni2643 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2644 uni2644 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2645 uni2645 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2646 uni2646 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2647 uni2647 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2648 uni2648 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2649 uni2649 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264a uni264A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264b uni264B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264c uni264C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264d uni264D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264e uni264E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264f uni264F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2650 uni2650 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2651 uni2651 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2652 uni2652 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2653 uni2653 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2654 uni2654 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2655 uni2655 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2656 uni2656 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2657 uni2657 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2658 uni2658 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2659 uni2659 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265a uni265A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265b uni265B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265c uni265C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265d uni265D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265e uni265E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265f uni265F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2660 spade 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2661 uni2661 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2662 uni2662 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2663 club 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2664 uni2664 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2665 heart 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2666 diamond 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2667 uni2667 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2668 uni2668 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2669 uni2669 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266a musicalnote 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+266b musicalnotedbl 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266c uni266C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266d uni266D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+266e uni266E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+266f uni266F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2670 uni2670 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2671 uni2671 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2672 uni2672 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2673 uni2673 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2674 uni2674 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2675 uni2675 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2676 uni2676 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2677 uni2677 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2678 uni2678 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2679 uni2679 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267a uni267A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267b uni267B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267c uni267C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267d uni267D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267e uni267E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267f uni267F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2680 uni2680 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2681 uni2681 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2682 uni2682 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2683 uni2683 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2684 uni2684 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2685 uni2685 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2686 uni2686 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2687 uni2687 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2688 uni2688 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2689 uni2689 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268a uni268A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268b uni268B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268c uni268C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268d uni268D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268e uni268E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268f uni268F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2690 uni2690 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2691 uni2691 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2692 uni2692 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2693 uni2693 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2694 uni2694 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2695 uni2695 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2696 uni2696 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2697 uni2697 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2698 uni2698 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2699 uni2699 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269a uni269A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269b uni269B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269c uni269C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269e uni269E 2.35 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+269f uni269F 2.35 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26a0 uni26A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a1 uni26A1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a2 uni26A2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a3 uni26A3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a4 uni26A4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a5 uni26A5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a6 uni26A6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a7 uni26A7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a8 uni26A8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a9 uni26A9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26aa uni26AA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ab uni26AB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ac uni26AC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ad uni26AD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+26ae uni26AE 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.36 (Math TeX Gyre Regular) +U+26af uni26AF 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26b0 uni26B0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+26b1 uni26B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+26b2 uni26B2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b3 uni26B3 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b4 uni26B4 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b5 uni26B5 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b6 uni26B6 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b7 uni26B7 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b8 uni26B8 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c0 uni26C0 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c1 uni26C1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c2 uni26C2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c3 uni26C3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26e2 uni26E2 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2701 uni2701 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2702 uni2702 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2703 uni2703 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2704 uni2704 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2706 uni2706 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2707 uni2707 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2708 uni2708 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2709 uni2709 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270c uni270C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270d uni270D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270e uni270E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270f uni270F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2710 uni2710 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2711 uni2711 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2712 uni2712 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2713 uni2713 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) 2.36 (Math TeX Gyre Regular) +U+2714 uni2714 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2715 uni2715 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2716 uni2716 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2717 uni2717 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2718 uni2718 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2719 uni2719 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271a uni271A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271b uni271B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271c uni271C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271d uni271D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271e uni271E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271f uni271F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2720 uni2720 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) 2.36 (Math TeX Gyre Regular) +U+2721 uni2721 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2722 uni2722 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2723 uni2723 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2724 uni2724 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2725 uni2725 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2726 uni2726 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2727 uni2727 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2729 uni2729 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272a uni272A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272b uni272B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272c uni272C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272d uni272D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272e uni272E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272f uni272F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2730 uni2730 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2731 uni2731 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2732 uni2732 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2733 uni2733 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2734 uni2734 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2735 uni2735 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2736 uni2736 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2737 uni2737 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2738 uni2738 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2739 uni2739 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273a uni273A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273b uni273B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273c uni273C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273d uni273D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273e uni273E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273f uni273F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2740 uni2740 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2741 uni2741 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2742 uni2742 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2743 uni2743 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2744 uni2744 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2745 uni2745 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2746 uni2746 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2747 uni2747 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2748 uni2748 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2749 uni2749 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274a uni274A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274b uni274B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274d uni274D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274f uni274F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2750 uni2750 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2751 uni2751 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2752 uni2752 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2756 uni2756 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2758 uni2758 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2759 uni2759 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275a uni275A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275b uni275B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275c uni275C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275d uni275D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275e uni275E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2761 uni2761 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2762 uni2762 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2763 uni2763 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2764 uni2764 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2765 uni2765 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2766 uni2766 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2767 uni2767 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2768 uni2768 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2769 uni2769 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276a uni276A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276b uni276B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276c uni276C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276d uni276D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276e uni276E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276f uni276F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2770 uni2770 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2771 uni2771 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2772 uni2772 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2773 uni2773 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2774 uni2774 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2775 uni2775 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2776 uni2776 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2777 uni2777 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2778 uni2778 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2779 uni2779 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277a uni277A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277b uni277B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277c uni277C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277d uni277D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277e uni277E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277f uni277F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2780 uni2780 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2781 uni2781 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2782 uni2782 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2783 uni2783 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2784 uni2784 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2785 uni2785 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2786 uni2786 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2787 uni2787 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2788 uni2788 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2789 uni2789 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278a uni278A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278b uni278B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278c uni278C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278d uni278D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278e uni278E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278f uni278F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2790 uni2790 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2791 uni2791 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2792 uni2792 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2793 uni2793 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2794 uni2794 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2798 uni2798 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2799 uni2799 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279a uni279A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279b uni279B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279c uni279C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279d uni279D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279e uni279E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279f uni279F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a0 uni27A0 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a1 uni27A1 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27a2 uni27A2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a3 uni27A3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a4 uni27A4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a5 uni27A5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a6 uni27A6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a7 uni27A7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a8 uni27A8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a9 uni27A9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27aa uni27AA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ab uni27AB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ac uni27AC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ad uni27AD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ae uni27AE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27af uni27AF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b1 uni27B1 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b2 uni27B2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b3 uni27B3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b4 uni27B4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b5 uni27B5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b6 uni27B6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b7 uni27B7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b8 uni27B8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b9 uni27B9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ba uni27BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bb uni27BB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bc uni27BC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bd uni27BD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27be uni27BE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bf uni27BF 2.7 (Sans Mono Bold) +U+27c2 uni27C2 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+27c5 uni27C5 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+27c6 uni27C6 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+27d8 uni27D8 2.36 (Math TeX Gyre Regular) +U+27d9 uni27D9 2.36 (Math TeX Gyre Regular) +U+27da uni27DA 2.36 (Math TeX Gyre Regular) +U+27db uni27DB 2.36 (Math TeX Gyre Regular) +U+27dc uni27DC 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+27dd uni27DD 2.36 (Math TeX Gyre Regular) +U+27de uni27DE 2.36 (Math TeX Gyre Regular) +U+27e0 uni27E0 2.3 +U+27e1 uni27E1 2.36 (Math TeX Gyre Regular) +U+27e2 uni27E2 2.36 (Math TeX Gyre Regular) +U+27e3 uni27E3 2.36 (Math TeX Gyre Regular) +U+27e6 uni27E6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+27e7 uni27E7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+27e8 uni27E8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27e9 uni27E9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27ea uni27EA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+27eb uni27EB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+27ee uni27EE 2.36 (Math TeX Gyre Regular) +U+27ef uni27EF 2.36 (Math TeX Gyre Regular) +U+27f0 uni27F0 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f1 uni27F1 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f2 uni27F2 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f3 uni27F3 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f4 uni27F4 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27f5 uni27F5 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+27f6 uni27F6 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+27f7 uni27F7 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+27f8 uni27F8 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27f9 uni27F9 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27fa uni27FA 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27fb uni27FB 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27fc uni27FC 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27fd uni27FD 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27fe uni27FE 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+27ff uni27FF 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2800 uni2800 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2801 uni2801 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2802 uni2802 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2803 uni2803 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2804 uni2804 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2805 uni2805 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2806 uni2806 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2807 uni2807 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2808 uni2808 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2809 uni2809 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280a uni280A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280b uni280B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280c uni280C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280d uni280D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280e uni280E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280f uni280F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2810 uni2810 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2811 uni2811 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2812 uni2812 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2813 uni2813 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2814 uni2814 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2815 uni2815 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2816 uni2816 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2817 uni2817 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2818 uni2818 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2819 uni2819 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281a uni281A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281b uni281B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281c uni281C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281d uni281D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281e uni281E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281f uni281F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2820 uni2820 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2821 uni2821 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2822 uni2822 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2823 uni2823 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2824 uni2824 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2825 uni2825 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2826 uni2826 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2827 uni2827 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2828 uni2828 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2829 uni2829 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282a uni282A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282b uni282B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282c uni282C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282d uni282D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282e uni282E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282f uni282F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2830 uni2830 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2831 uni2831 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2832 uni2832 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2833 uni2833 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2834 uni2834 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2835 uni2835 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2836 uni2836 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2837 uni2837 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2838 uni2838 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2839 uni2839 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283a uni283A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283b uni283B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283c uni283C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283d uni283D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283e uni283E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283f uni283F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2840 uni2840 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2841 uni2841 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2842 uni2842 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2843 uni2843 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2844 uni2844 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2845 uni2845 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2846 uni2846 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2847 uni2847 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2848 uni2848 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2849 uni2849 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284a uni284A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284b uni284B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284c uni284C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284d uni284D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284e uni284E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284f uni284F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2850 uni2850 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2851 uni2851 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2852 uni2852 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2853 uni2853 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2854 uni2854 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2855 uni2855 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2856 uni2856 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2857 uni2857 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2858 uni2858 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2859 uni2859 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285a uni285A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285b uni285B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285c uni285C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285d uni285D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285e uni285E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285f uni285F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2860 uni2860 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2861 uni2861 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2862 uni2862 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2863 uni2863 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2864 uni2864 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2865 uni2865 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2866 uni2866 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2867 uni2867 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2868 uni2868 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2869 uni2869 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286a uni286A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286b uni286B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286c uni286C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286d uni286D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286e uni286E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286f uni286F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2870 uni2870 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2871 uni2871 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2872 uni2872 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2873 uni2873 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2874 uni2874 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2875 uni2875 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2876 uni2876 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2877 uni2877 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2878 uni2878 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2879 uni2879 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287a uni287A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287b uni287B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287c uni287C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287d uni287D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287e uni287E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287f uni287F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2880 uni2880 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2881 uni2881 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2882 uni2882 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2883 uni2883 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2884 uni2884 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2885 uni2885 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2886 uni2886 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2887 uni2887 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2888 uni2888 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2889 uni2889 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288a uni288A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288b uni288B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288c uni288C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288d uni288D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288e uni288E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288f uni288F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2890 uni2890 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2891 uni2891 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2892 uni2892 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2893 uni2893 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2894 uni2894 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2895 uni2895 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2896 uni2896 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2897 uni2897 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2898 uni2898 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2899 uni2899 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289a uni289A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289b uni289B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289c uni289C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289d uni289D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289e uni289E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289f uni289F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a0 uni28A0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a1 uni28A1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a2 uni28A2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a3 uni28A3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a4 uni28A4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a5 uni28A5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a6 uni28A6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a7 uni28A7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a8 uni28A8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a9 uni28A9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28aa uni28AA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ab uni28AB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ac uni28AC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ad uni28AD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ae uni28AE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28af uni28AF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b0 uni28B0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b1 uni28B1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b2 uni28B2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b3 uni28B3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b4 uni28B4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b5 uni28B5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b6 uni28B6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b7 uni28B7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b8 uni28B8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b9 uni28B9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ba uni28BA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bb uni28BB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bc uni28BC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bd uni28BD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28be uni28BE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bf uni28BF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c0 uni28C0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c1 uni28C1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c2 uni28C2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c3 uni28C3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c4 uni28C4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c5 uni28C5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c6 uni28C6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c7 uni28C7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c8 uni28C8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c9 uni28C9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ca uni28CA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cb uni28CB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cc uni28CC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cd uni28CD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ce uni28CE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cf uni28CF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d0 uni28D0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d1 uni28D1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d2 uni28D2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d3 uni28D3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d4 uni28D4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d5 uni28D5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d6 uni28D6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d7 uni28D7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d8 uni28D8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d9 uni28D9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28da uni28DA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28db uni28DB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28dc uni28DC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28dd uni28DD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28de uni28DE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28df uni28DF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e0 uni28E0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e1 uni28E1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e2 uni28E2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e3 uni28E3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e4 uni28E4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e5 uni28E5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e6 uni28E6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e7 uni28E7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e8 uni28E8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e9 uni28E9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ea uni28EA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28eb uni28EB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ec uni28EC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ed uni28ED 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ee uni28EE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ef uni28EF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f0 uni28F0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f1 uni28F1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f2 uni28F2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f3 uni28F3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f4 uni28F4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f5 uni28F5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f6 uni28F6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f7 uni28F7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f8 uni28F8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f9 uni28F9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fa uni28FA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fb uni28FB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fc uni28FC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fd uni28FD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fe uni28FE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ff uni28FF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2900 uni2900 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2901 uni2901 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2902 uni2902 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2903 uni2903 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2904 uni2904 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2905 uni2905 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2906 uni2906 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2907 uni2907 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2908 uni2908 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2909 uni2909 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290a uni290A 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290b uni290B 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290c uni290C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290d uni290D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290e uni290E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290f uni290F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2910 uni2910 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2911 uni2911 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2912 uni2912 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2913 uni2913 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2914 uni2914 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2915 uni2915 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2916 uni2916 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2917 uni2917 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2918 uni2918 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2919 uni2919 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291a uni291A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291b uni291B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291c uni291C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291d uni291D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291e uni291E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291f uni291F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2920 uni2920 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2921 uni2921 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2922 uni2922 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2923 uni2923 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2924 uni2924 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2925 uni2925 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2926 uni2926 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2927 uni2927 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2928 uni2928 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2929 uni2929 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292a uni292A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292b uni292B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292c uni292C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292d uni292D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292e uni292E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292f uni292F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2930 uni2930 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2931 uni2931 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2932 uni2932 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2933 uni2933 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2934 uni2934 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2935 uni2935 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2936 uni2936 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2937 uni2937 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2938 uni2938 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2939 uni2939 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293a uni293A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293b uni293B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293c uni293C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293d uni293D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293e uni293E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293f uni293F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2940 uni2940 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2941 uni2941 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2942 uni2942 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2943 uni2943 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2944 uni2944 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2945 uni2945 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2946 uni2946 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2947 uni2947 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2948 uni2948 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2949 uni2949 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294a uni294A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294b uni294B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294c uni294C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294d uni294D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294e uni294E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294f uni294F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2950 uni2950 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2951 uni2951 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2952 uni2952 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2953 uni2953 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2954 uni2954 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2955 uni2955 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2956 uni2956 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2957 uni2957 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2958 uni2958 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2959 uni2959 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295a uni295A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295b uni295B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295c uni295C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295d uni295D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295e uni295E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295f uni295F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2960 uni2960 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2961 uni2961 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2962 uni2962 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2963 uni2963 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2964 uni2964 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2965 uni2965 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2966 uni2966 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2967 uni2967 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2968 uni2968 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2969 uni2969 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296a uni296A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296b uni296B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296c uni296C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296d uni296D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296e uni296E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296f uni296F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2970 uni2970 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2971 uni2971 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2972 uni2972 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2973 uni2973 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2974 uni2974 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2975 uni2975 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2976 uni2976 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2977 uni2977 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2978 uni2978 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2979 uni2979 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297a uni297A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297b uni297B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297c uni297C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297d uni297D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297e uni297E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297f uni297F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2983 uni2983 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2984 uni2984 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2987 uni2987 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2988 uni2988 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2997 uni2997 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2998 uni2998 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+29ce uni29CE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29cf uni29CF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d0 uni29D0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d1 uni29D1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d2 uni29D2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d3 uni29D3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d4 uni29D4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d5 uni29D5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29eb uni29EB 2.2 +U+29fa uni29FA 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+29fb uni29FB 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2a00 uni2A00 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.35 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2a01 uni2A01 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a02 uni2A02 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a03 uni2A03 2.36 (Math TeX Gyre Regular) +U+2a04 uni2A04 2.36 (Math TeX Gyre Regular) +U+2a05 uni2A05 2.36 (Math TeX Gyre Regular) +U+2a06 uni2A06 2.36 (Math TeX Gyre Regular) +U+2a09 uni2A09 2.36 (Math TeX Gyre Regular) +U+2a0c uni2A0C 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2a0d uni2A0D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0e uni2A0E 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0f uni2A0F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a10 uni2A10 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a11 uni2A11 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a12 uni2A12 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a13 uni2A13 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a14 uni2A14 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a15 uni2A15 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a16 uni2A16 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a17 uni2A17 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a18 uni2A18 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a19 uni2A19 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1a uni2A1A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1b uni2A1B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1c uni2A1C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a2f uni2A2F 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2a3f uni2A3F 2.36 (Math TeX Gyre Regular) +U+2a6a uni2A6A 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2a6b uni2A6B 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2a7d uni2A7D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a7e uni2A7E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a7f uni2A7F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a80 uni2A80 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a81 uni2A81 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a82 uni2A82 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a83 uni2A83 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a84 uni2A84 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a85 uni2A85 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a86 uni2A86 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a87 uni2A87 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a88 uni2A88 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a89 uni2A89 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a8a uni2A8A 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a8b uni2A8B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a8c uni2A8C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a8d uni2A8D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8e uni2A8E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8f uni2A8F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a90 uni2A90 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a91 uni2A91 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a92 uni2A92 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a93 uni2A93 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a94 uni2A94 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a95 uni2A95 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a96 uni2A96 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2a97 uni2A97 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a98 uni2A98 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a99 uni2A99 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9a uni2A9A 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9b uni2A9B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9c uni2A9C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9d uni2A9D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9e uni2A9E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9f uni2A9F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aa0 uni2AA0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aae uni2AAE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aaf uni2AAF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2ab0 uni2AB0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+2ab1 uni2AB1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab2 uni2AB2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab3 uni2AB3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab4 uni2AB4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab5 uni2AB5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab6 uni2AB6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab7 uni2AB7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab8 uni2AB8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab9 uni2AB9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aba uni2ABA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2af9 uni2AF9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2afa uni2AFA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b00 uni2B00 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b01 uni2B01 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b02 uni2B02 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b03 uni2B03 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b04 uni2B04 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2b05 uni2B05 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2b06 uni2B06 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2b07 uni2B07 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2b08 uni2B08 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b09 uni2B09 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b0a uni2B0A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b0b uni2B0B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b0c uni2B0C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2b0d uni2B0D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+2b0e uni2B0E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0f uni2B0F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b10 uni2B10 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b11 uni2B11 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b12 uni2B12 2.3 +U+2b13 uni2B13 2.3 +U+2b14 uni2B14 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b15 uni2B15 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b16 uni2B16 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b17 uni2B17 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b18 uni2B18 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b19 uni2B19 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b1a uni2B1A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+2b1f uni2B1F 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b20 uni2B20 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b21 uni2B21 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b22 uni2B22 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b23 uni2B23 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b24 uni2B24 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b31 uni2B31 2.36 (Math TeX Gyre Regular) +U+2b33 uni2B33 2.36 (Math TeX Gyre Regular) +U+2b53 uni2B53 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b54 uni2B54 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2c60 uni2C60 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c61 uni2C61 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c62 uni2C62 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c63 uni2C63 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c64 uni2C64 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2c65 uni2C65 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c66 uni2C66 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c67 uni2C67 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c68 uni2C68 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c69 uni2C69 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6a uni2C6A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6b uni2C6B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6c uni2C6C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6d uni2C6D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c6e uni2C6E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2c6f uni2C6F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c70 uni2C70 2.31 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c71 uni2C71 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c72 uni2C72 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c73 uni2C73 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c74 uni2C74 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c75 uni2C75 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c76 uni2C76 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c77 uni2C77 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c79 uni2C79 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c7a uni2C7A 2.27 +U+2c7b uni2C7B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c7c uni2C7C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c7d uni2C7D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c7e uni2C7E 2.31 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c7f uni2C7F 2.31 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2d00 uni2D00 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d01 uni2D01 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d02 uni2D02 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d03 uni2D03 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d04 uni2D04 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d05 uni2D05 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d06 uni2D06 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d07 uni2D07 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d08 uni2D08 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d09 uni2D09 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0a uni2D0A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0b uni2D0B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0c uni2D0C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0d uni2D0D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0e uni2D0E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0f uni2D0F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d10 uni2D10 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d11 uni2D11 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d12 uni2D12 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d13 uni2D13 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d14 uni2D14 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d15 uni2D15 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d16 uni2D16 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d17 uni2D17 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d18 uni2D18 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d19 uni2D19 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1a uni2D1A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1b uni2D1B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1c uni2D1C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1d uni2D1D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1e uni2D1E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1f uni2D1F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d20 uni2D20 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d21 uni2D21 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d22 uni2D22 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d23 uni2D23 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d24 uni2D24 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d25 uni2D25 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d30 uni2D30 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d31 uni2D31 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d32 uni2D32 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d33 uni2D33 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d34 uni2D34 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d35 uni2D35 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d36 uni2D36 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d37 uni2D37 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d38 uni2D38 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d39 uni2D39 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3a uni2D3A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3b uni2D3B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3c uni2D3C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3d uni2D3D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3e uni2D3E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3f uni2D3F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d40 uni2D40 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d41 uni2D41 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d42 uni2D42 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d43 uni2D43 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d44 uni2D44 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d45 uni2D45 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d46 uni2D46 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d47 uni2D47 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d48 uni2D48 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d49 uni2D49 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4a uni2D4A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4b uni2D4B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4c uni2D4C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4d uni2D4D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4e uni2D4E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4f uni2D4F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d50 uni2D50 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d51 uni2D51 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d52 uni2D52 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d53 uni2D53 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d54 uni2D54 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d55 uni2D55 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d56 uni2D56 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d57 uni2D57 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d58 uni2D58 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d59 uni2D59 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5a uni2D5A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5b uni2D5B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5c uni2D5C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5d uni2D5D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5e uni2D5E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5f uni2D5F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d60 uni2D60 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d61 uni2D61 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d62 uni2D62 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d63 uni2D63 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d64 uni2D64 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d65 uni2D65 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d6f uni2D6F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2e18 uni2E18 2.26 +U+2e1e uni2E1E 2.34 (Sans, Sans Condensed) +U+2e1f uni2E1F 2.34 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.35 (Sans, Sans Condensed) +U+2e22 uni2E22 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e23 uni2E23 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e24 uni2E24 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e25 uni2E25 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e2e uni2E2E 2.26 +U+3016 whitelenticularbracketleft 2.36 (Math TeX Gyre Regular) +U+3017 whitelenticularbracketright 2.36 (Math TeX Gyre Regular) +U+4dc0 uni4DC0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc1 uni4DC1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc2 uni4DC2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc3 uni4DC3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc4 uni4DC4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc5 uni4DC5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc6 uni4DC6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc7 uni4DC7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc8 uni4DC8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc9 uni4DC9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dca uni4DCA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcb uni4DCB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcc uni4DCC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcd uni4DCD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dce uni4DCE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcf uni4DCF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd0 uni4DD0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd1 uni4DD1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd2 uni4DD2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd3 uni4DD3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd4 uni4DD4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd5 uni4DD5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd6 uni4DD6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd7 uni4DD7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd8 uni4DD8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd9 uni4DD9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dda uni4DDA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddb uni4DDB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddc uni4DDC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddd uni4DDD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dde uni4DDE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddf uni4DDF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de0 uni4DE0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de1 uni4DE1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de2 uni4DE2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de3 uni4DE3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de4 uni4DE4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de5 uni4DE5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de6 uni4DE6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de7 uni4DE7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de8 uni4DE8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de9 uni4DE9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dea uni4DEA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4deb uni4DEB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dec uni4DEC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ded uni4DED 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dee uni4DEE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4def uni4DEF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df0 uni4DF0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df1 uni4DF1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df2 uni4DF2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df3 uni4DF3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df4 uni4DF4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df5 uni4DF5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df6 uni4DF6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df7 uni4DF7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df8 uni4DF8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df9 uni4DF9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfa uni4DFA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfb uni4DFB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfc uni4DFC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfd uni4DFD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfe uni4DFE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dff uni4DFF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a4d0 uniA4D0 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d1 uniA4D1 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d2 uniA4D2 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d3 uniA4D3 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d4 uniA4D4 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d5 uniA4D5 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d6 uniA4D6 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d7 uniA4D7 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d8 uniA4D8 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d9 uniA4D9 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4da uniA4DA 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4db uniA4DB 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4dc uniA4DC 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4dd uniA4DD 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4de uniA4DE 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4df uniA4DF 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e0 uniA4E0 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e1 uniA4E1 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e2 uniA4E2 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e3 uniA4E3 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e4 uniA4E4 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e5 uniA4E5 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e6 uniA4E6 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e7 uniA4E7 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e8 uniA4E8 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e9 uniA4E9 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ea uniA4EA 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4eb uniA4EB 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ec uniA4EC 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ed uniA4ED 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ee uniA4EE 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ef uniA4EF 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f0 uniA4F0 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f1 uniA4F1 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f2 uniA4F2 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f3 uniA4F3 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f4 uniA4F4 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f5 uniA4F5 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f6 uniA4F6 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f7 uniA4F7 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f8 uniA4F8 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f9 uniA4F9 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4fa uniA4FA 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4fb uniA4FB 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4fc uniA4FC 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4fd uniA4FD 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4fe uniA4FE 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ff uniA4FF 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a644 uniA644 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a645 uniA645 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a646 uniA646 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a647 uniA647 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a64c uniA64C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a64d uniA64D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a650 uniA650 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a651 uniA651 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a654 uniA654 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a655 uniA655 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a656 uniA656 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a657 uniA657 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a662 uniA662 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a663 uniA663 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a664 uniA664 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a665 uniA665 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a666 uniA666 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a667 uniA667 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a668 uniA668 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a669 uniA669 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66a uniA66A 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66b uniA66B 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66c uniA66C 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66d uniA66D 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66e uniA66E 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a68a uniA68A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a68b uniA68B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a68c uniA68C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a68d uniA68D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a694 uniA694 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a695 uniA695 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a698 uniA698 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a699 uniA699 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a708 uniA708 2.27 +U+a709 uniA709 2.27 +U+a70a uniA70A 2.27 +U+a70b uniA70B 2.27 +U+a70c uniA70C 2.27 +U+a70d uniA70D 2.27 +U+a70e uniA70E 2.27 +U+a70f uniA70F 2.27 +U+a710 uniA710 2.27 +U+a711 uniA711 2.27 +U+a712 uniA712 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a713 uniA713 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a714 uniA714 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a715 uniA715 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a716 uniA716 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a71b uniA71B 2.27 +U+a71c uniA71C 2.27 +U+a71d uniA71D 2.27 +U+a71e uniA71E 2.27 +U+a71f uniA71F 2.27 +U+a722 uniA722 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a723 uniA723 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a724 uniA724 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a725 uniA725 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a726 uniA726 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a727 uniA727 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a728 uniA728 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a729 uniA729 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72a uniA72A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72b uniA72B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72c uniA72C 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72d uniA72D 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72e uniA72E 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72f uniA72F 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a730 uniA730 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a731 uniA731 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a732 uniA732 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a733 uniA733 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a734 uniA734 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a735 uniA735 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a736 uniA736 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a737 uniA737 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a738 uniA738 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a739 uniA739 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73a uniA73A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73b uniA73B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73c uniA73C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73d uniA73D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73e uniA73E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73f uniA73F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a740 uniA740 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a741 uniA741 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a746 uniA746 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a747 uniA747 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a748 uniA748 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a749 uniA749 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a74a uniA74A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a74b uniA74B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a74e uniA74E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a74f uniA74F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a750 uniA750 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a751 uniA751 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a752 uniA752 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a753 uniA753 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a756 uniA756 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a757 uniA757 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a764 uniA764 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a765 uniA765 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a766 uniA766 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a767 uniA767 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a768 uniA768 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a769 uniA769 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a77b uniA77B 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a77c uniA77C 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a780 uniA780 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a781 uniA781 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a782 uniA782 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a783 uniA783 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a784 uniA784 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a785 uniA785 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a786 uniA786 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a787 uniA787 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a789 uniA789 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a78a uniA78A 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a78b uniA78B 2.26 +U+a78c uniA78C 2.26 +U+a78d uniA78D 2.31 +U+a78e uniA78E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a790 uniA790 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a791 uniA791 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7a0 uniA7A0 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a1 uniA7A1 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a2 uniA7A2 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a3 uniA7A3 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a4 uniA7A4 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a5 uniA7A5 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a6 uniA7A6 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a7 uniA7A7 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a8 uniA7A8 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a9 uniA7A9 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7aa uniA7AA 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7f8 uniA7F8 2.35 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7f9 uniA7F9 2.35 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7fa uniA7FA 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7fb uniA7FB 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7fc uniA7FC 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7fd uniA7FD 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7fe uniA7FE 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7ff uniA7FF 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+e000 uniE000 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e001 uniE001 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e002 uniE002 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e003 uniE003 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e004 uniE004 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e005 uniE005 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e006 uniE006 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e007 uniE007 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e008 uniE008 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e009 uniE009 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00a uniE00A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00b uniE00B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00c uniE00C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00d uniE00D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00e uniE00E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00f uniE00F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e010 uniE010 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e011 uniE011 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e012 uniE012 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e013 uniE013 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e014 uniE014 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e015 uniE015 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e016 uniE016 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e017 uniE017 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e018 uniE018 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e019 uniE019 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01a uniE01A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01b uniE01B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01c uniE01C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01d uniE01D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef00 uni02E5.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef01 uni02E6.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef02 uni02E7.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef03 uni02E8.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef04 uni02E9.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef05 uni02E5.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef06 uni02E6.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef07 uni02E7.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef08 uni02E8.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef09 uni02E9.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0a uni02E5.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0b uni02E6.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0c uni02E7.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0d uni02E8.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0e uni02E9.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0f uni02E5.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef10 uni02E6.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef11 uni02E7.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef12 uni02E8.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef13 uni02E9.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef14 uni02E5.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef15 uni02E6.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef16 uni02E7.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef17 uni02E8.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef18 uni02E9.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef19 stem 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f000 uniF000 2.10 (Sans) 2.11 (Sans Condensed) +U+f001 uniF001 2.10 (Sans) 2.11 (Sans Condensed) +U+f002 uniF002 2.33 (Sans, Sans Condensed) +U+f003 uniF003 2.33 (Sans, Sans Condensed) +U+f208 uniF208 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f20a uniF20A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f215 uniF215 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f216 uniF216 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f217 uniF217 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f21a uniF21A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f21b uniF21B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f25f uniF25F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f400 uniF400 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f401 uniF401 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f402 uniF402 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f403 uniF403 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f404 uniF404 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f405 uniF405 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f406 uniF406 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f407 uniF407 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f408 uniF408 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f409 uniF409 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40a uniF40A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40b uniF40B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40c uniF40C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40d uniF40D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40e uniF40E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40f uniF40F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f410 uniF410 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f411 uniF411 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f412 uniF412 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f413 uniF413 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f414 uniF414 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f415 uniF415 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f416 uniF416 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f417 uniF417 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f418 uniF418 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f419 uniF419 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41a uniF41A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41b uniF41B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41c uniF41C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41d uniF41D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41e uniF41E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41f uniF41F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f420 uniF420 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f421 uniF421 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f422 uniF422 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f423 uniF423 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f424 uniF424 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f425 uniF425 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f426 uniF426 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f428 uniF428 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f429 uniF429 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42a uniF42A 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42b uniF42B 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42c uniF42C 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42d uniF42D 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42e uniF42E 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42f uniF42F 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f430 uniF430 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f431 uniF431 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f432 uniF432 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f433 uniF433 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f434 uniF434 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f435 uniF435 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f436 uniF436 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f437 uniF437 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f438 uniF438 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f439 uniF439 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43a uniF43A 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43b uniF43B 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43c uniF43C 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43d uniF43D 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43e uniF43E 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43f uniF43F 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f440 uniF440 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f441 uniF441 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f5c5 uniF5C5 2.9 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+f6c4 uniF6C4 2.10 (Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+f6c5 uniF6C5 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.9 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+f6c6 uniF6C6 2.5 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6c7 uniF6C7 2.11 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6c8 uniF6C8 2.11 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6d1 cyrBreve 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6d4 cyrbreve 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb00 uniFB00 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+fb01 fi original +U+fb02 fl original +U+fb03 uniFB03 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+fb04 uniFB04 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.36 (Math TeX Gyre Regular) +U+fb05 uniFB05 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb06 uniFB06 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb13 uniFB13 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb14 uniFB14 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb15 uniFB15 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb16 uniFB16 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb17 uniFB17 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb1d uniFB1D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb1e uniFB1E 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb1f uniFB1F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb20 uniFB20 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb21 uniFB21 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb22 uniFB22 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb23 uniFB23 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb24 uniFB24 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb25 uniFB25 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb26 uniFB26 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb27 uniFB27 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb28 uniFB28 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb29 uniFB29 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb2a uniFB2A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2b uniFB2B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2c uniFB2C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2d uniFB2D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2e uniFB2E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2f uniFB2F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb30 uniFB30 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb31 uniFB31 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb32 uniFB32 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb33 uniFB33 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb34 uniFB34 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb35 uniFB35 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb36 uniFB36 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb37 uniFB37 2.11 (Sans Condensed Oblique, Sans Oblique) 2.33 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+fb38 uniFB38 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb39 uniFB39 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3a uniFB3A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3b uniFB3B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3c uniFB3C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3d uniFB3D 2.33 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3e uniFB3E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3f uniFB3F 2.33 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb40 uniFB40 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb41 uniFB41 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb42 uniFB42 2.33 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb43 uniFB43 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb44 uniFB44 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb45 uniFB45 2.33 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb46 uniFB46 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb47 uniFB47 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb48 uniFB48 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb49 uniFB49 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4a uniFB4A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4b uniFB4B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4c uniFB4C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4d uniFB4D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4e uniFB4E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4f uniFB4F 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb52 uniFB52 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb53 uniFB53 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb54 uniFB54 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb55 uniFB55 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb56 uniFB56 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb57 uniFB57 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb58 uniFB58 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb59 uniFB59 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5a uniFB5A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5b uniFB5B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5c uniFB5C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5d uniFB5D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5e uniFB5E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5f uniFB5F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb60 uniFB60 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb61 uniFB61 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb62 uniFB62 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb63 uniFB63 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb64 uniFB64 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb65 uniFB65 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb66 uniFB66 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb67 uniFB67 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb68 uniFB68 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb69 uniFB69 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6a uniFB6A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6b uniFB6B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6c uniFB6C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6d uniFB6D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6e uniFB6E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6f uniFB6F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb70 uniFB70 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb71 uniFB71 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb72 uniFB72 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb73 uniFB73 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb74 uniFB74 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb75 uniFB75 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb76 uniFB76 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb77 uniFB77 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb78 uniFB78 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb79 uniFB79 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7a uniFB7A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7b uniFB7B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7c uniFB7C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7d uniFB7D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7e uniFB7E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7f uniFB7F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb80 uniFB80 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb81 uniFB81 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb82 uniFB82 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb83 uniFB83 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb84 uniFB84 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb85 uniFB85 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb86 uniFB86 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb87 uniFB87 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb88 uniFB88 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb89 uniFB89 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb8a uniFB8A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8b uniFB8B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8c uniFB8C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8d uniFB8D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8e uniFB8E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8f uniFB8F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb90 uniFB90 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb91 uniFB91 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb92 uniFB92 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb93 uniFB93 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb94 uniFB94 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb95 uniFB95 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb96 uniFB96 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb97 uniFB97 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb98 uniFB98 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb99 uniFB99 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9a uniFB9A 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9b uniFB9B 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9c uniFB9C 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9d uniFB9D 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9e uniFB9E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb9f uniFB9F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fba0 uniFBA0 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fba1 uniFBA1 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fba2 uniFBA2 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fba3 uniFBA3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbaa uniFBAA 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbab uniFBAB 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbac uniFBAC 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbad uniFBAD 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd3 uniFBD3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd4 uniFBD4 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd5 uniFBD5 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd6 uniFBD6 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd7 uniFBD7 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd8 uniFBD8 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd9 uniFBD9 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbda uniFBDA 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbdb uniFBDB 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbdc uniFBDC 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbde uniFBDE 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbdf uniFBDF 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbe4 uniFBE4 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbe5 uniFBE5 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbe6 uniFBE6 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbe7 uniFBE7 2.35 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbe8 uniFBE8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbe9 uniFBE9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfc uniFBFC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfd uniFBFD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfe uniFBFE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbff uniFBFF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe00 uniFE00 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe01 uniFE01 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe02 uniFE02 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe03 uniFE03 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe04 uniFE04 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe05 uniFE05 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe06 uniFE06 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe07 uniFE07 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe08 uniFE08 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe09 uniFE09 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0a uniFE0A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0b uniFE0B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0c uniFE0C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0d uniFE0D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0e uniFE0E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0f uniFE0F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe20 uniFE20 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe21 uniFE21 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe22 uniFE22 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe23 uniFE23 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe70 uniFE70 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe71 uniFE71 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe72 uniFE72 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe73 uniFE73 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe74 uniFE74 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe76 uniFE76 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe77 uniFE77 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe78 uniFE78 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe79 uniFE79 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7a uniFE7A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7b uniFE7B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7c uniFE7C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7d uniFE7D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7e uniFE7E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7f uniFE7F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe80 uniFE80 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe81 uniFE81 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe82 uniFE82 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe83 uniFE83 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe84 uniFE84 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe85 uniFE85 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe86 uniFE86 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe87 uniFE87 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe88 uniFE88 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe89 uniFE89 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8a uniFE8A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8b uniFE8B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8c uniFE8C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8d uniFE8D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8e uniFE8E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8f uniFE8F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe90 uniFE90 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe91 uniFE91 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe92 uniFE92 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe93 uniFE93 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe94 uniFE94 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe95 uniFE95 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe96 uniFE96 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe97 uniFE97 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe98 uniFE98 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe99 uniFE99 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9a uniFE9A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9b uniFE9B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9c uniFE9C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9d uniFE9D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9e uniFE9E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9f uniFE9F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea0 uniFEA0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea1 uniFEA1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea2 uniFEA2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea3 uniFEA3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea4 uniFEA4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea5 uniFEA5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea6 uniFEA6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea7 uniFEA7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea8 uniFEA8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea9 uniFEA9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feaa uniFEAA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feab uniFEAB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feac uniFEAC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fead uniFEAD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feae uniFEAE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feaf uniFEAF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb0 uniFEB0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb1 uniFEB1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb2 uniFEB2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb3 uniFEB3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb4 uniFEB4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb5 uniFEB5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb6 uniFEB6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb7 uniFEB7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb8 uniFEB8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb9 uniFEB9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feba uniFEBA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febb uniFEBB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febc uniFEBC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febd uniFEBD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febe uniFEBE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febf uniFEBF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec0 uniFEC0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec1 uniFEC1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec2 uniFEC2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec3 uniFEC3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec4 uniFEC4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec5 uniFEC5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec6 uniFEC6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec7 uniFEC7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec8 uniFEC8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec9 uniFEC9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feca uniFECA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecb uniFECB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecc uniFECC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecd uniFECD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fece uniFECE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecf uniFECF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed0 uniFED0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed1 uniFED1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed2 uniFED2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed3 uniFED3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed4 uniFED4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed5 uniFED5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed6 uniFED6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed7 uniFED7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed8 uniFED8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed9 uniFED9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feda uniFEDA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedb uniFEDB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedc uniFEDC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedd uniFEDD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fede uniFEDE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedf uniFEDF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee0 uniFEE0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee1 uniFEE1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee2 uniFEE2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee3 uniFEE3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee4 uniFEE4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee5 uniFEE5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee6 uniFEE6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee7 uniFEE7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee8 uniFEE8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee9 uniFEE9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feea uniFEEA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feeb uniFEEB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feec uniFEEC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feed uniFEED 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feee uniFEEE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feef uniFEEF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef0 uniFEF0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef1 uniFEF1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef2 uniFEF2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef3 uniFEF3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef4 uniFEF4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef5 uniFEF5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef6 uniFEF6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef7 uniFEF7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef8 uniFEF8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef9 uniFEF9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefa uniFEFA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefb uniFEFB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefc uniFEFC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feff uniFEFF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) 2.36 (Math TeX Gyre Regular) +U+fff9 uniFFF9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffa uniFFFA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffb uniFFFB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffc uniFFFC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffd uniFFFD 1.12 +U+10300 u10300 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10301 u10301 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10302 u10302 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10303 u10303 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10304 u10304 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10305 u10305 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10306 u10306 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10307 u10307 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10308 u10308 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10309 u10309 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030a u1030A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030b u1030B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030c u1030C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030d u1030D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030e u1030E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030f u1030F 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10310 u10310 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10311 u10311 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10312 u10312 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10313 u10313 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10314 u10314 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10315 u10315 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10316 u10316 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10317 u10317 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10318 u10318 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10319 u10319 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1031a u1031A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1031b u1031B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1031c u1031C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1031d u1031D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1031e u1031E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10320 u10320 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10321 u10321 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10322 u10322 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10323 u10323 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d300 u1D300 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d301 u1D301 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d302 u1D302 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d303 u1D303 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d304 u1D304 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d305 u1D305 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d306 u1D306 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d307 u1D307 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d308 u1D308 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d309 u1D309 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30a u1D30A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30b u1D30B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30c u1D30C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30d u1D30D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30e u1D30E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30f u1D30F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d310 u1D310 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d311 u1D311 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d312 u1D312 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d313 u1D313 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d314 u1D314 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d315 u1D315 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d316 u1D316 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d317 u1D317 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d318 u1D318 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d319 u1D319 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31a u1D31A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31b u1D31B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31c u1D31C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31d u1D31D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31e u1D31E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31f u1D31F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d320 u1D320 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d321 u1D321 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d322 u1D322 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d323 u1D323 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d324 u1D324 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d325 u1D325 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d326 u1D326 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d327 u1D327 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d328 u1D328 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d329 u1D329 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32a u1D32A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32b u1D32B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32c u1D32C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32d u1D32D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32e u1D32E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32f u1D32F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d330 u1D330 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d331 u1D331 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d332 u1D332 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d333 u1D333 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d334 u1D334 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d335 u1D335 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d336 u1D336 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d337 u1D337 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d338 u1D338 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d339 u1D339 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33a u1D33A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33b u1D33B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33c u1D33C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33d u1D33D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33e u1D33E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33f u1D33F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d340 u1D340 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d341 u1D341 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d342 u1D342 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d343 u1D343 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d344 u1D344 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d345 u1D345 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d346 u1D346 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d347 u1D347 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d348 u1D348 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d349 u1D349 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34a u1D34A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34b u1D34B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34c u1D34C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34d u1D34D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34e u1D34E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34f u1D34F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d350 u1D350 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d351 u1D351 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d352 u1D352 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d353 u1D353 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d354 u1D354 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d355 u1D355 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d356 u1D356 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d400 u1D400 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d401 u1D401 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d402 u1D402 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d403 u1D403 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d404 u1D404 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d405 u1D405 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d406 u1D406 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d407 u1D407 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d408 u1D408 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d409 u1D409 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d40a u1D40A 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d40b u1D40B 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d40c u1D40C 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d40d u1D40D 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d40e u1D40E 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d40f u1D40F 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d410 u1D410 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d411 u1D411 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d412 u1D412 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d413 u1D413 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d414 u1D414 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d415 u1D415 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d416 u1D416 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d417 u1D417 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d418 u1D418 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d419 u1D419 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d41a u1D41A 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d41b u1D41B 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d41c u1D41C 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d41d u1D41D 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d41e u1D41E 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d41f u1D41F 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d420 u1D420 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d421 u1D421 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d422 u1D422 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d423 u1D423 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d424 u1D424 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d425 u1D425 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d426 u1D426 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d427 u1D427 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d428 u1D428 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d429 u1D429 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d42a u1D42A 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d42b u1D42B 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d42c u1D42C 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d42d u1D42D 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d42e u1D42E 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d42f u1D42F 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d430 u1D430 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d431 u1D431 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d432 u1D432 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d433 u1D433 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d434 u1D434 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d435 u1D435 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d436 u1D436 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d437 u1D437 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d438 u1D438 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d439 u1D439 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d43a u1D43A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d43b u1D43B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d43c u1D43C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d43d u1D43D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d43e u1D43E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d43f u1D43F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d440 u1D440 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d441 u1D441 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d442 u1D442 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d443 u1D443 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d444 u1D444 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d445 u1D445 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d446 u1D446 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d447 u1D447 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d448 u1D448 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d449 u1D449 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d44a u1D44A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d44b u1D44B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d44c u1D44C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d44d u1D44D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d44e u1D44E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d44f u1D44F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d450 u1D450 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d451 u1D451 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d452 u1D452 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d453 u1D453 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d454 u1D454 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d456 u1D456 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d457 u1D457 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d458 u1D458 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d459 u1D459 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d45a u1D45A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d45b u1D45B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d45c u1D45C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d45d u1D45D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d45e u1D45E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d45f u1D45F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d460 u1D460 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d461 u1D461 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d462 u1D462 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d463 u1D463 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d464 u1D464 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d465 u1D465 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d466 u1D466 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d467 u1D467 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d468 u1D468 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d469 u1D469 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d46a u1D46A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d46b u1D46B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d46c u1D46C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d46d u1D46D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d46e u1D46E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d46f u1D46F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d470 u1D470 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d471 u1D471 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d472 u1D472 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d473 u1D473 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d474 u1D474 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d475 u1D475 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d476 u1D476 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d477 u1D477 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d478 u1D478 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d479 u1D479 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d47a u1D47A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d47b u1D47B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d47c u1D47C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d47d u1D47D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d47e u1D47E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d47f u1D47F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d480 u1D480 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d481 u1D481 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d482 u1D482 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d483 u1D483 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d484 u1D484 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d485 u1D485 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d486 u1D486 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d487 u1D487 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d488 u1D488 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d489 u1D489 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d48a u1D48A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d48b u1D48B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d48c u1D48C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d48d u1D48D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d48e u1D48E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d48f u1D48F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d490 u1D490 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d491 u1D491 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d492 u1D492 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d493 u1D493 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d494 u1D494 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d495 u1D495 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d496 u1D496 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d497 u1D497 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d498 u1D498 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d499 u1D499 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d49a u1D49A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d49b u1D49B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d49c u1D49C 2.36 (Math TeX Gyre Regular) +U+1d49e u1D49E 2.36 (Math TeX Gyre Regular) +U+1d49f u1D49F 2.36 (Math TeX Gyre Regular) +U+1d4a2 u1D4A2 2.36 (Math TeX Gyre Regular) +U+1d4a5 u1D4A5 2.36 (Math TeX Gyre Regular) +U+1d4a6 u1D4A6 2.36 (Math TeX Gyre Regular) +U+1d4a9 u1D4A9 2.36 (Math TeX Gyre Regular) +U+1d4aa u1D4AA 2.36 (Math TeX Gyre Regular) +U+1d4ab u1D4AB 2.36 (Math TeX Gyre Regular) +U+1d4ac u1D4AC 2.36 (Math TeX Gyre Regular) +U+1d4ae u1D4AE 2.36 (Math TeX Gyre Regular) +U+1d4af u1D4AF 2.36 (Math TeX Gyre Regular) +U+1d4b0 u1D4B0 2.36 (Math TeX Gyre Regular) +U+1d4b1 u1D4B1 2.36 (Math TeX Gyre Regular) +U+1d4b2 u1D4B2 2.36 (Math TeX Gyre Regular) +U+1d4b3 u1D4B3 2.36 (Math TeX Gyre Regular) +U+1d4b4 u1D4B4 2.36 (Math TeX Gyre Regular) +U+1d4b5 u1D4B5 2.36 (Math TeX Gyre Regular) +U+1d4b6 u1D4B6 2.36 (Math TeX Gyre Regular) +U+1d4b7 u1D4B7 2.36 (Math TeX Gyre Regular) +U+1d4b8 u1D4B8 2.36 (Math TeX Gyre Regular) +U+1d4b9 u1D4B9 2.36 (Math TeX Gyre Regular) +U+1d4bb u1D4BB 2.36 (Math TeX Gyre Regular) +U+1d4bd u1D4BD 2.36 (Math TeX Gyre Regular) +U+1d4be u1D4BE 2.36 (Math TeX Gyre Regular) +U+1d4bf u1D4BF 2.36 (Math TeX Gyre Regular) +U+1d4c0 u1D4C0 2.36 (Math TeX Gyre Regular) +U+1d4c1 u1D4C1 2.36 (Math TeX Gyre Regular) +U+1d4c2 u1D4C2 2.36 (Math TeX Gyre Regular) +U+1d4c3 u1D4C3 2.36 (Math TeX Gyre Regular) +U+1d4c5 u1D4C5 2.36 (Math TeX Gyre Regular) +U+1d4c6 u1D4C6 2.36 (Math TeX Gyre Regular) +U+1d4c7 u1D4C7 2.36 (Math TeX Gyre Regular) +U+1d4c8 u1D4C8 2.36 (Math TeX Gyre Regular) +U+1d4c9 u1D4C9 2.36 (Math TeX Gyre Regular) +U+1d4ca u1D4CA 2.36 (Math TeX Gyre Regular) +U+1d4cb u1D4CB 2.36 (Math TeX Gyre Regular) +U+1d4cc u1D4CC 2.36 (Math TeX Gyre Regular) +U+1d4cd u1D4CD 2.36 (Math TeX Gyre Regular) +U+1d4ce u1D4CE 2.36 (Math TeX Gyre Regular) +U+1d4cf u1D4CF 2.36 (Math TeX Gyre Regular) +U+1d4d0 u1D4D0 2.36 (Math TeX Gyre Regular) +U+1d4d1 u1D4D1 2.36 (Math TeX Gyre Regular) +U+1d4d2 u1D4D2 2.36 (Math TeX Gyre Regular) +U+1d4d3 u1D4D3 2.36 (Math TeX Gyre Regular) +U+1d4d4 u1D4D4 2.36 (Math TeX Gyre Regular) +U+1d4d5 u1D4D5 2.36 (Math TeX Gyre Regular) +U+1d4d6 u1D4D6 2.36 (Math TeX Gyre Regular) +U+1d4d7 u1D4D7 2.36 (Math TeX Gyre Regular) +U+1d4d8 u1D4D8 2.36 (Math TeX Gyre Regular) +U+1d4d9 u1D4D9 2.36 (Math TeX Gyre Regular) +U+1d4da u1D4DA 2.36 (Math TeX Gyre Regular) +U+1d4db u1D4DB 2.36 (Math TeX Gyre Regular) +U+1d4dc u1D4DC 2.36 (Math TeX Gyre Regular) +U+1d4dd u1D4DD 2.36 (Math TeX Gyre Regular) +U+1d4de u1D4DE 2.36 (Math TeX Gyre Regular) +U+1d4df u1D4DF 2.36 (Math TeX Gyre Regular) +U+1d4e0 u1D4E0 2.36 (Math TeX Gyre Regular) +U+1d4e1 u1D4E1 2.36 (Math TeX Gyre Regular) +U+1d4e2 u1D4E2 2.36 (Math TeX Gyre Regular) +U+1d4e3 u1D4E3 2.36 (Math TeX Gyre Regular) +U+1d4e4 u1D4E4 2.36 (Math TeX Gyre Regular) +U+1d4e5 u1D4E5 2.36 (Math TeX Gyre Regular) +U+1d4e6 u1D4E6 2.36 (Math TeX Gyre Regular) +U+1d4e7 u1D4E7 2.36 (Math TeX Gyre Regular) +U+1d4e8 u1D4E8 2.36 (Math TeX Gyre Regular) +U+1d4e9 u1D4E9 2.36 (Math TeX Gyre Regular) +U+1d4ea u1D4EA 2.36 (Math TeX Gyre Regular) +U+1d4eb u1D4EB 2.36 (Math TeX Gyre Regular) +U+1d4ec u1D4EC 2.36 (Math TeX Gyre Regular) +U+1d4ed u1D4ED 2.36 (Math TeX Gyre Regular) +U+1d4ee u1D4EE 2.36 (Math TeX Gyre Regular) +U+1d4ef u1D4EF 2.36 (Math TeX Gyre Regular) +U+1d4f0 u1D4F0 2.36 (Math TeX Gyre Regular) +U+1d4f1 u1D4F1 2.36 (Math TeX Gyre Regular) +U+1d4f2 u1D4F2 2.36 (Math TeX Gyre Regular) +U+1d4f3 u1D4F3 2.36 (Math TeX Gyre Regular) +U+1d4f4 u1D4F4 2.36 (Math TeX Gyre Regular) +U+1d4f5 u1D4F5 2.36 (Math TeX Gyre Regular) +U+1d4f6 u1D4F6 2.36 (Math TeX Gyre Regular) +U+1d4f7 u1D4F7 2.36 (Math TeX Gyre Regular) +U+1d4f8 u1D4F8 2.36 (Math TeX Gyre Regular) +U+1d4f9 u1D4F9 2.36 (Math TeX Gyre Regular) +U+1d4fa u1D4FA 2.36 (Math TeX Gyre Regular) +U+1d4fb u1D4FB 2.36 (Math TeX Gyre Regular) +U+1d4fc u1D4FC 2.36 (Math TeX Gyre Regular) +U+1d4fd u1D4FD 2.36 (Math TeX Gyre Regular) +U+1d4fe u1D4FE 2.36 (Math TeX Gyre Regular) +U+1d4ff u1D4FF 2.36 (Math TeX Gyre Regular) +U+1d500 u1D500 2.36 (Math TeX Gyre Regular) +U+1d501 u1D501 2.36 (Math TeX Gyre Regular) +U+1d502 u1D502 2.36 (Math TeX Gyre Regular) +U+1d503 u1D503 2.36 (Math TeX Gyre Regular) +U+1d504 u1D504 2.36 (Math TeX Gyre Regular) +U+1d505 u1D505 2.36 (Math TeX Gyre Regular) +U+1d507 u1D507 2.36 (Math TeX Gyre Regular) +U+1d508 u1D508 2.36 (Math TeX Gyre Regular) +U+1d509 u1D509 2.36 (Math TeX Gyre Regular) +U+1d50a u1D50A 2.36 (Math TeX Gyre Regular) +U+1d50d u1D50D 2.36 (Math TeX Gyre Regular) +U+1d50e u1D50E 2.36 (Math TeX Gyre Regular) +U+1d50f u1D50F 2.36 (Math TeX Gyre Regular) +U+1d510 u1D510 2.36 (Math TeX Gyre Regular) +U+1d511 u1D511 2.36 (Math TeX Gyre Regular) +U+1d512 u1D512 2.36 (Math TeX Gyre Regular) +U+1d513 u1D513 2.36 (Math TeX Gyre Regular) +U+1d514 u1D514 2.36 (Math TeX Gyre Regular) +U+1d516 u1D516 2.36 (Math TeX Gyre Regular) +U+1d517 u1D517 2.36 (Math TeX Gyre Regular) +U+1d518 u1D518 2.36 (Math TeX Gyre Regular) +U+1d519 u1D519 2.36 (Math TeX Gyre Regular) +U+1d51a u1D51A 2.36 (Math TeX Gyre Regular) +U+1d51b u1D51B 2.36 (Math TeX Gyre Regular) +U+1d51c u1D51C 2.36 (Math TeX Gyre Regular) +U+1d51e u1D51E 2.36 (Math TeX Gyre Regular) +U+1d51f u1D51F 2.36 (Math TeX Gyre Regular) +U+1d520 u1D520 2.36 (Math TeX Gyre Regular) +U+1d521 u1D521 2.36 (Math TeX Gyre Regular) +U+1d522 u1D522 2.36 (Math TeX Gyre Regular) +U+1d523 u1D523 2.36 (Math TeX Gyre Regular) +U+1d524 u1D524 2.36 (Math TeX Gyre Regular) +U+1d525 u1D525 2.36 (Math TeX Gyre Regular) +U+1d526 u1D526 2.36 (Math TeX Gyre Regular) +U+1d527 u1D527 2.36 (Math TeX Gyre Regular) +U+1d528 u1D528 2.36 (Math TeX Gyre Regular) +U+1d529 u1D529 2.36 (Math TeX Gyre Regular) +U+1d52a u1D52A 2.36 (Math TeX Gyre Regular) +U+1d52b u1D52B 2.36 (Math TeX Gyre Regular) +U+1d52c u1D52C 2.36 (Math TeX Gyre Regular) +U+1d52d u1D52D 2.36 (Math TeX Gyre Regular) +U+1d52e u1D52E 2.36 (Math TeX Gyre Regular) +U+1d52f u1D52F 2.36 (Math TeX Gyre Regular) +U+1d530 u1D530 2.36 (Math TeX Gyre Regular) +U+1d531 u1D531 2.36 (Math TeX Gyre Regular) +U+1d532 u1D532 2.36 (Math TeX Gyre Regular) +U+1d533 u1D533 2.36 (Math TeX Gyre Regular) +U+1d534 u1D534 2.36 (Math TeX Gyre Regular) +U+1d535 u1D535 2.36 (Math TeX Gyre Regular) +U+1d536 u1D536 2.36 (Math TeX Gyre Regular) +U+1d537 u1D537 2.36 (Math TeX Gyre Regular) +U+1d538 u1D538 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d539 u1D539 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d53b u1D53B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d53c u1D53C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d53d u1D53D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d53e u1D53E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d540 u1D540 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d541 u1D541 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d542 u1D542 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d543 u1D543 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d544 u1D544 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d546 u1D546 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d54a u1D54A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d54b u1D54B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d54c u1D54C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d54d u1D54D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d54e u1D54E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d54f u1D54F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d550 u1D550 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d552 u1D552 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d553 u1D553 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d554 u1D554 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d555 u1D555 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d556 u1D556 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d557 u1D557 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d558 u1D558 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d559 u1D559 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d55a u1D55A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.36 (Math TeX Gyre Regular) +U+1d55b u1D55B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d55c u1D55C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d55d u1D55D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d55e u1D55E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d55f u1D55F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d560 u1D560 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d561 u1D561 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d562 u1D562 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d563 u1D563 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d564 u1D564 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d565 u1D565 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d566 u1D566 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d567 u1D567 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d568 u1D568 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d569 u1D569 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d56a u1D56A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d56b u1D56B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d56c u1D56C 2.36 (Math TeX Gyre Regular) +U+1d56d u1D56D 2.36 (Math TeX Gyre Regular) +U+1d56e u1D56E 2.36 (Math TeX Gyre Regular) +U+1d56f u1D56F 2.36 (Math TeX Gyre Regular) +U+1d570 u1D570 2.36 (Math TeX Gyre Regular) +U+1d571 u1D571 2.36 (Math TeX Gyre Regular) +U+1d572 u1D572 2.36 (Math TeX Gyre Regular) +U+1d573 u1D573 2.36 (Math TeX Gyre Regular) +U+1d574 u1D574 2.36 (Math TeX Gyre Regular) +U+1d575 u1D575 2.36 (Math TeX Gyre Regular) +U+1d576 u1D576 2.36 (Math TeX Gyre Regular) +U+1d577 u1D577 2.36 (Math TeX Gyre Regular) +U+1d578 u1D578 2.36 (Math TeX Gyre Regular) +U+1d579 u1D579 2.36 (Math TeX Gyre Regular) +U+1d57a u1D57A 2.36 (Math TeX Gyre Regular) +U+1d57b u1D57B 2.36 (Math TeX Gyre Regular) +U+1d57c u1D57C 2.36 (Math TeX Gyre Regular) +U+1d57d u1D57D 2.36 (Math TeX Gyre Regular) +U+1d57e u1D57E 2.36 (Math TeX Gyre Regular) +U+1d57f u1D57F 2.36 (Math TeX Gyre Regular) +U+1d580 u1D580 2.36 (Math TeX Gyre Regular) +U+1d581 u1D581 2.36 (Math TeX Gyre Regular) +U+1d582 u1D582 2.36 (Math TeX Gyre Regular) +U+1d583 u1D583 2.36 (Math TeX Gyre Regular) +U+1d584 u1D584 2.36 (Math TeX Gyre Regular) +U+1d585 u1D585 2.36 (Math TeX Gyre Regular) +U+1d586 u1D586 2.36 (Math TeX Gyre Regular) +U+1d587 u1D587 2.36 (Math TeX Gyre Regular) +U+1d588 u1D588 2.36 (Math TeX Gyre Regular) +U+1d589 u1D589 2.36 (Math TeX Gyre Regular) +U+1d58a u1D58A 2.36 (Math TeX Gyre Regular) +U+1d58b u1D58B 2.36 (Math TeX Gyre Regular) +U+1d58c u1D58C 2.36 (Math TeX Gyre Regular) +U+1d58d u1D58D 2.36 (Math TeX Gyre Regular) +U+1d58e u1D58E 2.36 (Math TeX Gyre Regular) +U+1d58f u1D58F 2.36 (Math TeX Gyre Regular) +U+1d590 u1D590 2.36 (Math TeX Gyre Regular) +U+1d591 u1D591 2.36 (Math TeX Gyre Regular) +U+1d592 u1D592 2.36 (Math TeX Gyre Regular) +U+1d593 u1D593 2.36 (Math TeX Gyre Regular) +U+1d594 u1D594 2.36 (Math TeX Gyre Regular) +U+1d595 u1D595 2.36 (Math TeX Gyre Regular) +U+1d596 u1D596 2.36 (Math TeX Gyre Regular) +U+1d597 u1D597 2.36 (Math TeX Gyre Regular) +U+1d598 u1D598 2.36 (Math TeX Gyre Regular) +U+1d599 u1D599 2.36 (Math TeX Gyre Regular) +U+1d59a u1D59A 2.36 (Math TeX Gyre Regular) +U+1d59b u1D59B 2.36 (Math TeX Gyre Regular) +U+1d59c u1D59C 2.36 (Math TeX Gyre Regular) +U+1d59d u1D59D 2.36 (Math TeX Gyre Regular) +U+1d59e u1D59E 2.36 (Math TeX Gyre Regular) +U+1d59f u1D59F 2.36 (Math TeX Gyre Regular) +U+1d5a0 u1D5A0 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5a1 u1D5A1 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5a2 u1D5A2 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5a3 u1D5A3 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5a4 u1D5A4 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5a5 u1D5A5 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5a6 u1D5A6 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5a7 u1D5A7 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5a8 u1D5A8 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5a9 u1D5A9 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5aa u1D5AA 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5ab u1D5AB 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5ac u1D5AC 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5ad u1D5AD 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5ae u1D5AE 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5af u1D5AF 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5b0 u1D5B0 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5b1 u1D5B1 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5b2 u1D5B2 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5b3 u1D5B3 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5b4 u1D5B4 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5b5 u1D5B5 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5b6 u1D5B6 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5b7 u1D5B7 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5b8 u1D5B8 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5b9 u1D5B9 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5ba u1D5BA 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5bb u1D5BB 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5bc u1D5BC 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5bd u1D5BD 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5be u1D5BE 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5bf u1D5BF 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5c0 u1D5C0 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5c1 u1D5C1 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5c2 u1D5C2 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5c3 u1D5C3 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5c4 u1D5C4 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5c5 u1D5C5 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5c6 u1D5C6 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5c7 u1D5C7 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5c8 u1D5C8 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5c9 u1D5C9 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5ca u1D5CA 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5cb u1D5CB 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5cc u1D5CC 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5cd u1D5CD 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5ce u1D5CE 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5cf u1D5CF 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5d0 u1D5D0 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5d1 u1D5D1 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5d2 u1D5D2 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5d3 u1D5D3 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d5d4 u1D5D4 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5d5 u1D5D5 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5d6 u1D5D6 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5d7 u1D5D7 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5d8 u1D5D8 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5d9 u1D5D9 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5da u1D5DA 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5db u1D5DB 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5dc u1D5DC 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5dd u1D5DD 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5de u1D5DE 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5df u1D5DF 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5e0 u1D5E0 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5e1 u1D5E1 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5e2 u1D5E2 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5e3 u1D5E3 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5e4 u1D5E4 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5e5 u1D5E5 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5e6 u1D5E6 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5e7 u1D5E7 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5e8 u1D5E8 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5e9 u1D5E9 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5ea u1D5EA 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5eb u1D5EB 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5ec u1D5EC 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5ed u1D5ED 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5ee u1D5EE 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5ef u1D5EF 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5f0 u1D5F0 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5f1 u1D5F1 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5f2 u1D5F2 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5f3 u1D5F3 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5f4 u1D5F4 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5f5 u1D5F5 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5f6 u1D5F6 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5f7 u1D5F7 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5f8 u1D5F8 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5f9 u1D5F9 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5fa u1D5FA 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5fb u1D5FB 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5fc u1D5FC 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5fd u1D5FD 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5fe u1D5FE 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d5ff u1D5FF 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d600 u1D600 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d601 u1D601 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d602 u1D602 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d603 u1D603 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d604 u1D604 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d605 u1D605 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d606 u1D606 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d607 u1D607 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d608 u1D608 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d609 u1D609 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d60a u1D60A 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d60b u1D60B 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d60c u1D60C 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d60d u1D60D 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d60e u1D60E 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d60f u1D60F 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d610 u1D610 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d611 u1D611 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d612 u1D612 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d613 u1D613 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d614 u1D614 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d615 u1D615 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d616 u1D616 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d617 u1D617 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d618 u1D618 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d619 u1D619 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d61a u1D61A 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d61b u1D61B 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d61c u1D61C 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d61d u1D61D 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d61e u1D61E 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d61f u1D61F 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d620 u1D620 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d621 u1D621 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d622 u1D622 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d623 u1D623 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d624 u1D624 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d625 u1D625 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d626 u1D626 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d627 u1D627 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d628 u1D628 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d629 u1D629 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d62a u1D62A 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d62b u1D62B 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d62c u1D62C 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d62d u1D62D 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d62e u1D62E 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d62f u1D62F 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d630 u1D630 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d631 u1D631 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d632 u1D632 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d633 u1D633 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d634 u1D634 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d635 u1D635 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d636 u1D636 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d637 u1D637 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d638 u1D638 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d639 u1D639 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d63a u1D63A 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d63b u1D63B 2.23 (Sans Condensed Oblique, Sans Oblique) 2.36 (Math TeX Gyre Regular) +U+1d63c u1D63C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d63d u1D63D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d63e u1D63E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d63f u1D63F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d640 u1D640 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d641 u1D641 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d642 u1D642 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d643 u1D643 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d644 u1D644 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d645 u1D645 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d646 u1D646 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d647 u1D647 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d648 u1D648 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d649 u1D649 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d64a u1D64A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d64b u1D64B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d64c u1D64C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d64d u1D64D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d64e u1D64E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d64f u1D64F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d650 u1D650 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d651 u1D651 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d652 u1D652 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d653 u1D653 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d654 u1D654 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d655 u1D655 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d656 u1D656 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d657 u1D657 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d658 u1D658 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d659 u1D659 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d65a u1D65A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d65b u1D65B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d65c u1D65C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d65d u1D65D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d65e u1D65E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d65f u1D65F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d660 u1D660 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d661 u1D661 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d662 u1D662 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d663 u1D663 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d664 u1D664 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d665 u1D665 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d666 u1D666 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d667 u1D667 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d668 u1D668 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d669 u1D669 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d66a u1D66A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d66b u1D66B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d66c u1D66C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d66d u1D66D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d66e u1D66E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d66f u1D66F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d670 u1D670 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d671 u1D671 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d672 u1D672 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d673 u1D673 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d674 u1D674 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d675 u1D675 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d676 u1D676 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d677 u1D677 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d678 u1D678 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d679 u1D679 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d67a u1D67A 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d67b u1D67B 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d67c u1D67C 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d67d u1D67D 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d67e u1D67E 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d67f u1D67F 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d680 u1D680 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d681 u1D681 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d682 u1D682 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d683 u1D683 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d684 u1D684 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d685 u1D685 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d686 u1D686 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d687 u1D687 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d688 u1D688 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d689 u1D689 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d68a u1D68A 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d68b u1D68B 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d68c u1D68C 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d68d u1D68D 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d68e u1D68E 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d68f u1D68F 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d690 u1D690 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d691 u1D691 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d692 u1D692 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d693 u1D693 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d694 u1D694 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d695 u1D695 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d696 u1D696 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d697 u1D697 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d698 u1D698 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d699 u1D699 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d69a u1D69A 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d69b u1D69B 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d69c u1D69C 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d69d u1D69D 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d69e u1D69E 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d69f u1D69F 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d6a0 u1D6A0 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d6a1 u1D6A1 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d6a2 u1D6A2 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d6a3 u1D6A3 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d6a4 u1D6A4 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d6a5 u1D6A5 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.35 (Serif, Serif Condensed) 2.36 (Math TeX Gyre Regular) +U+1d6a8 u1D6A8 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6a9 u1D6A9 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6aa u1D6AA 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6ab u1D6AB 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6ac u1D6AC 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6ad u1D6AD 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6ae u1D6AE 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6af u1D6AF 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6b0 u1D6B0 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6b1 u1D6B1 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6b2 u1D6B2 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6b3 u1D6B3 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6b4 u1D6B4 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6b5 u1D6B5 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6b6 u1D6B6 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6b7 u1D6B7 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6b8 u1D6B8 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6b9 u1D6B9 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6ba u1D6BA 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6bb u1D6BB 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6bc u1D6BC 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6bd u1D6BD 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6be u1D6BE 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6bf u1D6BF 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6c0 u1D6C0 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6c1 u1D6C1 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6c2 u1D6C2 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6c3 u1D6C3 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6c4 u1D6C4 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6c5 u1D6C5 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6c6 u1D6C6 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6c7 u1D6C7 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6c8 u1D6C8 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6c9 u1D6C9 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6ca u1D6CA 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6cb u1D6CB 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6cc u1D6CC 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6cd u1D6CD 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6ce u1D6CE 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6cf u1D6CF 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6d0 u1D6D0 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6d1 u1D6D1 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6d2 u1D6D2 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6d3 u1D6D3 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6d4 u1D6D4 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6d5 u1D6D5 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6d6 u1D6D6 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6d7 u1D6D7 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6d8 u1D6D8 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6d9 u1D6D9 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6da u1D6DA 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6db u1D6DB 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6dc u1D6DC 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6dd u1D6DD 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6de u1D6DE 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6df u1D6DF 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6e0 u1D6E0 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6e1 u1D6E1 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d6e2 u1D6E2 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6e3 u1D6E3 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6e4 u1D6E4 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6e5 u1D6E5 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6e6 u1D6E6 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6e7 u1D6E7 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6e8 u1D6E8 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6e9 u1D6E9 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6ea u1D6EA 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6eb u1D6EB 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6ec u1D6EC 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6ed u1D6ED 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6ee u1D6EE 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6ef u1D6EF 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6f0 u1D6F0 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6f1 u1D6F1 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6f2 u1D6F2 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6f3 u1D6F3 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6f4 u1D6F4 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6f5 u1D6F5 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6f6 u1D6F6 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6f7 u1D6F7 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6f8 u1D6F8 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6f9 u1D6F9 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6fa u1D6FA 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6fb u1D6FB 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6fc u1D6FC 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6fd u1D6FD 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6fe u1D6FE 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d6ff u1D6FF 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d700 u1D700 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d701 u1D701 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d702 u1D702 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d703 u1D703 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d704 u1D704 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d705 u1D705 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d706 u1D706 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d707 u1D707 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d708 u1D708 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d709 u1D709 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d70a u1D70A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d70b u1D70B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d70c u1D70C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d70d u1D70D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d70e u1D70E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d70f u1D70F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d710 u1D710 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d711 u1D711 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d712 u1D712 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d713 u1D713 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d714 u1D714 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d715 u1D715 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d716 u1D716 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d717 u1D717 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d718 u1D718 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d719 u1D719 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d71a u1D71A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d71b u1D71B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.36 (Math TeX Gyre Regular) +U+1d71c u1D71C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d71d u1D71D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d71e u1D71E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d71f u1D71F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d720 u1D720 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d721 u1D721 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d722 u1D722 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d723 u1D723 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d724 u1D724 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d725 u1D725 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d726 u1D726 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d727 u1D727 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d728 u1D728 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d729 u1D729 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d72a u1D72A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d72b u1D72B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d72c u1D72C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d72d u1D72D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d72e u1D72E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d72f u1D72F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d730 u1D730 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d731 u1D731 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d732 u1D732 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d733 u1D733 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d734 u1D734 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d735 u1D735 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d736 u1D736 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d737 u1D737 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d738 u1D738 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d739 u1D739 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d73a u1D73A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d73b u1D73B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d73c u1D73C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d73d u1D73D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d73e u1D73E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d73f u1D73F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d740 u1D740 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d741 u1D741 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d742 u1D742 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d743 u1D743 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d744 u1D744 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d745 u1D745 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d746 u1D746 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d747 u1D747 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d748 u1D748 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d749 u1D749 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d74a u1D74A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d74b u1D74B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d74c u1D74C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d74d u1D74D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d74e u1D74E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d74f u1D74F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d750 u1D750 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d751 u1D751 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d752 u1D752 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d753 u1D753 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d754 u1D754 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d755 u1D755 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) 2.36 (Math TeX Gyre Regular) +U+1d756 u1D756 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d757 u1D757 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d758 u1D758 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d759 u1D759 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d75a u1D75A 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d75b u1D75B 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d75c u1D75C 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d75d u1D75D 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d75e u1D75E 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d75f u1D75F 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d760 u1D760 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d761 u1D761 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d762 u1D762 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d763 u1D763 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d764 u1D764 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d765 u1D765 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d766 u1D766 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d767 u1D767 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d768 u1D768 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d769 u1D769 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d76a u1D76A 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d76b u1D76B 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d76c u1D76C 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d76d u1D76D 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d76e u1D76E 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d76f u1D76F 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d770 u1D770 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d771 u1D771 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d772 u1D772 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d773 u1D773 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d774 u1D774 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d775 u1D775 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d776 u1D776 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d777 u1D777 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d778 u1D778 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d779 u1D779 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d77a u1D77A 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d77b u1D77B 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d77c u1D77C 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d77d u1D77D 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d77e u1D77E 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d77f u1D77F 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d780 u1D780 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d781 u1D781 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d782 u1D782 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d783 u1D783 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d784 u1D784 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d785 u1D785 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d786 u1D786 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d787 u1D787 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d788 u1D788 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d789 u1D789 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d78a u1D78A 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d78b u1D78B 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d78c u1D78C 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d78d u1D78D 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d78e u1D78E 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d78f u1D78F 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d790 u1D790 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d791 u1D791 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d792 u1D792 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d793 u1D793 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d794 u1D794 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d795 u1D795 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d796 u1D796 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d797 u1D797 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d798 u1D798 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d799 u1D799 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d79a u1D79A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d79b u1D79B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d79c u1D79C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d79d u1D79D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d79e u1D79E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d79f u1D79F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7a0 u1D7A0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7a1 u1D7A1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7a2 u1D7A2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7a3 u1D7A3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7a4 u1D7A4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7a5 u1D7A5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7a6 u1D7A6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7a7 u1D7A7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7a8 u1D7A8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7a9 u1D7A9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7aa u1D7AA 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7ab u1D7AB 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7ac u1D7AC 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7ad u1D7AD 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7ae u1D7AE 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7af u1D7AF 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7b0 u1D7B0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7b1 u1D7B1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7b2 u1D7B2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7b3 u1D7B3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7b4 u1D7B4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7b5 u1D7B5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7b6 u1D7B6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7b7 u1D7B7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7b8 u1D7B8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7b9 u1D7B9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7ba u1D7BA 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7bb u1D7BB 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7bc u1D7BC 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7bd u1D7BD 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7be u1D7BE 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7bf u1D7BF 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7c0 u1D7C0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7c1 u1D7C1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7c2 u1D7C2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7c3 u1D7C3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7c4 u1D7C4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7c5 u1D7C5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7c6 u1D7C6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7c7 u1D7C7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7c8 u1D7C8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7c9 u1D7C9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) 2.36 (Math TeX Gyre Regular) +U+1d7ca u1D7CA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7cb u1D7CB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7ce u1D7CE 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7cf u1D7CF 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7d0 u1D7D0 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7d1 u1D7D1 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7d2 u1D7D2 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7d3 u1D7D3 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7d4 u1D7D4 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7d5 u1D7D5 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7d6 u1D7D6 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7d7 u1D7D7 2.23 (Serif Bold, Serif Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7d8 u1D7D8 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) 2.36 (Math TeX Gyre Regular) +U+1d7d9 u1D7D9 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) 2.36 (Math TeX Gyre Regular) +U+1d7da u1D7DA 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) 2.36 (Math TeX Gyre Regular) +U+1d7db u1D7DB 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) 2.36 (Math TeX Gyre Regular) +U+1d7dc u1D7DC 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) 2.36 (Math TeX Gyre Regular) +U+1d7dd u1D7DD 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) 2.36 (Math TeX Gyre Regular) +U+1d7de u1D7DE 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) 2.36 (Math TeX Gyre Regular) +U+1d7df u1D7DF 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) 2.36 (Math TeX Gyre Regular) +U+1d7e0 u1D7E0 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) 2.36 (Math TeX Gyre Regular) +U+1d7e1 u1D7E1 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) 2.36 (Math TeX Gyre Regular) +U+1d7e2 u1D7E2 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d7e3 u1D7E3 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d7e4 u1D7E4 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d7e5 u1D7E5 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d7e6 u1D7E6 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d7e7 u1D7E7 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d7e8 u1D7E8 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d7e9 u1D7E9 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d7ea u1D7EA 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d7eb u1D7EB 2.23 (Sans, Sans Condensed) 2.36 (Math TeX Gyre Regular) +U+1d7ec u1D7EC 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7ed u1D7ED 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7ee u1D7EE 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7ef u1D7EF 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7f0 u1D7F0 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7f1 u1D7F1 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7f2 u1D7F2 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7f3 u1D7F3 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7f4 u1D7F4 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7f5 u1D7F5 2.23 (Sans Bold, Sans Condensed Bold) 2.36 (Math TeX Gyre Regular) +U+1d7f6 u1D7F6 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d7f7 u1D7F7 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d7f8 u1D7F8 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d7f9 u1D7F9 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d7fa u1D7FA 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d7fb u1D7FB 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d7fc u1D7FC 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d7fd u1D7FD 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d7fe u1D7FE 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1d7ff u1D7FF 2.23 (Sans Mono) 2.36 (Math TeX Gyre Regular) +U+1ee00 u1EE00 2.35 (Sans, Sans Condensed) +U+1ee01 u1EE01 2.35 (Sans, Sans Condensed) +U+1ee02 u1EE02 2.35 (Sans, Sans Condensed) +U+1ee03 u1EE03 2.35 (Sans, Sans Condensed) +U+1ee05 u1EE05 2.35 (Sans, Sans Condensed) +U+1ee06 u1EE06 2.35 (Sans, Sans Condensed) +U+1ee07 u1EE07 2.35 (Sans, Sans Condensed) +U+1ee08 u1EE08 2.35 (Sans, Sans Condensed) +U+1ee09 u1EE09 2.35 (Sans, Sans Condensed) +U+1ee0a u1EE0A 2.35 (Sans, Sans Condensed) +U+1ee0b u1EE0B 2.35 (Sans, Sans Condensed) +U+1ee0c u1EE0C 2.35 (Sans, Sans Condensed) +U+1ee0d u1EE0D 2.35 (Sans, Sans Condensed) +U+1ee0e u1EE0E 2.35 (Sans, Sans Condensed) +U+1ee0f u1EE0F 2.35 (Sans, Sans Condensed) +U+1ee10 u1EE10 2.35 (Sans, Sans Condensed) +U+1ee11 u1EE11 2.35 (Sans, Sans Condensed) +U+1ee12 u1EE12 2.35 (Sans, Sans Condensed) +U+1ee13 u1EE13 2.35 (Sans, Sans Condensed) +U+1ee14 u1EE14 2.35 (Sans, Sans Condensed) +U+1ee15 u1EE15 2.35 (Sans, Sans Condensed) +U+1ee16 u1EE16 2.35 (Sans, Sans Condensed) +U+1ee17 u1EE17 2.35 (Sans, Sans Condensed) +U+1ee18 u1EE18 2.35 (Sans, Sans Condensed) +U+1ee19 u1EE19 2.35 (Sans, Sans Condensed) +U+1ee1a u1EE1A 2.35 (Sans, Sans Condensed) +U+1ee1b u1EE1B 2.35 (Sans, Sans Condensed) +U+1ee1c u1EE1C 2.35 (Sans, Sans Condensed) +U+1ee1d u1EE1D 2.35 (Sans, Sans Condensed) +U+1ee1e u1EE1E 2.35 (Sans, Sans Condensed) +U+1ee1f u1EE1F 2.35 (Sans, Sans Condensed) +U+1ee21 u1EE21 2.35 (Sans, Sans Condensed) +U+1ee22 u1EE22 2.35 (Sans, Sans Condensed) +U+1ee24 u1EE24 2.35 (Sans, Sans Condensed) +U+1ee27 u1EE27 2.35 (Sans, Sans Condensed) +U+1ee29 u1EE29 2.35 (Sans, Sans Condensed) +U+1ee2a u1EE2A 2.35 (Sans, Sans Condensed) +U+1ee2b u1EE2B 2.35 (Sans, Sans Condensed) +U+1ee2c u1EE2C 2.35 (Sans, Sans Condensed) +U+1ee2d u1EE2D 2.35 (Sans, Sans Condensed) +U+1ee2e u1EE2E 2.35 (Sans, Sans Condensed) +U+1ee2f u1EE2F 2.35 (Sans, Sans Condensed) +U+1ee30 u1EE30 2.35 (Sans, Sans Condensed) +U+1ee31 u1EE31 2.35 (Sans, Sans Condensed) +U+1ee32 u1EE32 2.35 (Sans, Sans Condensed) +U+1ee34 u1EE34 2.35 (Sans, Sans Condensed) +U+1ee35 u1EE35 2.35 (Sans, Sans Condensed) +U+1ee36 u1EE36 2.35 (Sans, Sans Condensed) +U+1ee37 u1EE37 2.35 (Sans, Sans Condensed) +U+1ee39 u1EE39 2.35 (Sans, Sans Condensed) +U+1ee3b u1EE3B 2.35 (Sans, Sans Condensed) +U+1ee61 u1EE61 2.35 (Sans, Sans Condensed) +U+1ee62 u1EE62 2.35 (Sans, Sans Condensed) +U+1ee64 u1EE64 2.35 (Sans, Sans Condensed) +U+1ee67 u1EE67 2.35 (Sans, Sans Condensed) +U+1ee68 u1EE68 2.35 (Sans, Sans Condensed) +U+1ee69 u1EE69 2.35 (Sans, Sans Condensed) +U+1ee6a u1EE6A 2.35 (Sans, Sans Condensed) +U+1ee6c u1EE6C 2.35 (Sans, Sans Condensed) +U+1ee6d u1EE6D 2.35 (Sans, Sans Condensed) +U+1ee6e u1EE6E 2.35 (Sans, Sans Condensed) +U+1ee6f u1EE6F 2.35 (Sans, Sans Condensed) +U+1ee70 u1EE70 2.35 (Sans, Sans Condensed) +U+1ee71 u1EE71 2.35 (Sans, Sans Condensed) +U+1ee72 u1EE72 2.35 (Sans, Sans Condensed) +U+1ee74 u1EE74 2.35 (Sans, Sans Condensed) +U+1ee75 u1EE75 2.35 (Sans, Sans Condensed) +U+1ee76 u1EE76 2.35 (Sans, Sans Condensed) +U+1ee77 u1EE77 2.35 (Sans, Sans Condensed) +U+1ee79 u1EE79 2.35 (Sans, Sans Condensed) +U+1ee7a u1EE7A 2.35 (Sans, Sans Condensed) +U+1ee7b u1EE7B 2.35 (Sans, Sans Condensed) +U+1ee7c u1EE7C 2.35 (Sans, Sans Condensed) +U+1ee7e u1EE7E 2.35 (Sans, Sans Condensed) +U+1f030 u1F030 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f031 u1F031 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f032 u1F032 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f033 u1F033 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f034 u1F034 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f035 u1F035 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f036 u1F036 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f037 u1F037 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f038 u1F038 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f039 u1F039 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03a u1F03A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03b u1F03B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03c u1F03C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03d u1F03D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03e u1F03E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03f u1F03F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f040 u1F040 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f041 u1F041 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f042 u1F042 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f043 u1F043 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f044 u1F044 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f045 u1F045 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f046 u1F046 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f047 u1F047 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f048 u1F048 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f049 u1F049 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04a u1F04A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04b u1F04B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04c u1F04C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04d u1F04D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04e u1F04E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04f u1F04F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f050 u1F050 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f051 u1F051 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f052 u1F052 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f053 u1F053 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f054 u1F054 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f055 u1F055 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f056 u1F056 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f057 u1F057 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f058 u1F058 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f059 u1F059 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05a u1F05A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05b u1F05B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05c u1F05C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05d u1F05D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05e u1F05E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05f u1F05F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f060 u1F060 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f061 u1F061 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f062 u1F062 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f063 u1F063 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f064 u1F064 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f065 u1F065 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f066 u1F066 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f067 u1F067 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f068 u1F068 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f069 u1F069 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06a u1F06A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06b u1F06B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06c u1F06C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06d u1F06D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06e u1F06E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06f u1F06F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f070 u1F070 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f071 u1F071 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f072 u1F072 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f073 u1F073 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f074 u1F074 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f075 u1F075 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f076 u1F076 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f077 u1F077 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f078 u1F078 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f079 u1F079 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07a u1F07A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07b u1F07B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07c u1F07C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07d u1F07D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07e u1F07E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07f u1F07F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f080 u1F080 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f081 u1F081 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f082 u1F082 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f083 u1F083 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f084 u1F084 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f085 u1F085 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f086 u1F086 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f087 u1F087 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f088 u1F088 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f089 u1F089 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08a u1F08A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08b u1F08B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08c u1F08C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08d u1F08D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08e u1F08E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08f u1F08F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f090 u1F090 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f091 u1F091 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f092 u1F092 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f093 u1F093 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a0 u1F0A0 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a1 u1F0A1 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a2 u1F0A2 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a3 u1F0A3 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a4 u1F0A4 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a5 u1F0A5 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a6 u1F0A6 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a7 u1F0A7 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a8 u1F0A8 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a9 u1F0A9 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0aa u1F0AA 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ab u1F0AB 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ac u1F0AC 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ad u1F0AD 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ae u1F0AE 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b1 u1F0B1 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b2 u1F0B2 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b3 u1F0B3 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b4 u1F0B4 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b5 u1F0B5 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b6 u1F0B6 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b7 u1F0B7 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b8 u1F0B8 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b9 u1F0B9 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ba u1F0BA 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0bb u1F0BB 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0bc u1F0BC 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0bd u1F0BD 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0be u1F0BE 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c1 u1F0C1 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c2 u1F0C2 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c3 u1F0C3 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c4 u1F0C4 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c5 u1F0C5 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c6 u1F0C6 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c7 u1F0C7 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c8 u1F0C8 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c9 u1F0C9 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ca u1F0CA 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0cb u1F0CB 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0cc u1F0CC 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0cd u1F0CD 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ce u1F0CE 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0cf u1F0CF 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d1 u1F0D1 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d2 u1F0D2 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d3 u1F0D3 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d4 u1F0D4 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d5 u1F0D5 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d6 u1F0D6 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d7 u1F0D7 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d8 u1F0D8 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d9 u1F0D9 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0da u1F0DA 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0db u1F0DB 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0dc u1F0DC 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0dd u1F0DD 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0de u1F0DE 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0df u1F0DF 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f311 u1F311 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f312 u1F312 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f313 u1F313 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f314 u1F314 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f315 u1F315 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f316 u1F316 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f317 u1F317 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f318 u1F318 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f42d u1F42D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f42e u1F42E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f431 u1F431 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f435 u1F435 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f600 u1F600 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f601 u1F601 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f602 u1F602 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f603 u1F603 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f604 u1F604 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f605 u1F605 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f606 u1F606 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f607 u1F607 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f608 u1F608 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f609 u1F609 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60a u1F60A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60b u1F60B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60c u1F60C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60d u1F60D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60e u1F60E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60f u1F60F 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f610 u1F610 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f611 u1F611 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f612 u1F612 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f613 u1F613 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f614 u1F614 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f615 u1F615 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f616 u1F616 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f617 u1F617 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f618 u1F618 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f619 u1F619 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61a u1F61A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61b u1F61B 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61c u1F61C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61d u1F61D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61e u1F61E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61f u1F61F 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f620 u1F620 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f621 u1F621 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f622 u1F622 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f623 u1F623 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f625 u1F625 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f626 u1F626 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f627 u1F627 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f628 u1F628 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f629 u1F629 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f62a u1F62A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f62b u1F62B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f62d u1F62D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f62e u1F62E 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f62f u1F62F 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f630 u1F630 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f631 u1F631 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f632 u1F632 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f633 u1F633 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f634 u1F634 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f635 u1F635 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f636 u1F636 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f637 u1F637 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f638 u1F638 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f639 u1F639 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63a u1F63A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63b u1F63B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63c u1F63C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63d u1F63D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63e u1F63E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63f u1F63F 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f640 u1F640 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f643 u1F643 2.36 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/unicover.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/unicover.txt new file mode 100644 index 000000000..fc05f99b4 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_dejavuserif/unicover.txt @@ -0,0 +1,279 @@ +This is the Unicode coverage file for DejaVu fonts +($Id$) + +Control and similar characters are discounted from totals. + + Sans Serif Sans Mono +U+0000 Basic Latin 100% (95/95) 100% (95/95) 100% (95/95) +U+0080 Latin-1 Supplement 100% (96/96) 100% (96/96) 100% (96/96) +U+0100 Latin Extended-A 100% (128/128) 100% (128/128) 100% (128/128) +U+0180 Latin Extended-B 100% (208/208) 100% (208/208) 86% (180/208) +U+0250 IPA Extensions 100% (96/96) 100% (96/96) 100% (96/96) +U+02b0 Spacing Modifier Letters 78% (63/80) 73% (59/80) 62% (50/80) +U+0300 Combining Diacritical Marks 83% (93/112) 61% (69/112) 59% (67/112) +U+0370 Greek and Coptic 100% (135/135) 89% (121/135) 85% (116/135) +U+0400 Cyrillic 100% (256/256) 79% (204/256) 70% (180/256) +U+0500 Cyrillic Supplement 79% (38/48) 20% (10/48) 12% (6/48) +U+0530 Armenian 96% (86/89) 96% (86/89) 96% (86/89) +U+0590 Hebrew 62% (54/87) (0/87) (0/87) +U+0600 Arabic 64% (165/255) (0/255) 38% (99/255) +U+0700 Syriac (0/77) (0/77) (0/77) +U+0750 Arabic Supplement (0/48) (0/48) (0/48) +U+0780 Thaana (0/50) (0/50) (0/50) +U+07c0 NKo 91% (54/59) (0/59) (0/59) +U+0800 Samaritan (0/61) (0/61) (0/61) +U+0840 Mandaic (0/29) (0/29) (0/29) +U+08a0 Arabic Extended-A (0/73) (0/73) (0/73) +U+0900 Devanagari (0/128) (0/128) (0/128) +U+0980 Bengali (0/93) (0/93) (0/93) +U+0a00 Gurmukhi (0/79) (0/79) (0/79) +U+0a80 Gujarati (0/85) (0/85) (0/85) +U+0b00 Oriya (0/90) (0/90) (0/90) +U+0b80 Tamil (0/72) (0/72) (0/72) +U+0c00 Telugu (0/96) (0/96) (0/96) +U+0c80 Kannada (0/88) (0/88) (0/88) +U+0d00 Malayalam (0/114) (0/114) (0/114) +U+0d80 Sinhala (0/90) (0/90) (0/90) +U+0e00 Thai 1% (1/87) 1% (1/87) 1% (1/87) +U+0e80 Lao 97% (65/67) (0/67) 68% (46/67) +U+0f00 Tibetan (0/211) (0/211) (0/211) +U+1000 Myanmar (0/160) (0/160) (0/160) +U+10a0 Georgian 94% (83/88) 94% (83/88) 51% (45/88) +U+1100 Hangul Jamo (0/256) (0/256) (0/256) +U+1200 Ethiopic (0/358) (0/358) (0/358) +U+1380 Ethiopic Supplement (0/26) (0/26) (0/26) +U+13a0 Cherokee (0/92) (0/92) (0/92) +U+1400 Unified Canadian Aboriginal Syllabics 63% (404/640) (0/640) (0/640) +U+1680 Ogham 100% (29/29) (0/29) (0/29) +U+16a0 Runic (0/89) (0/89) (0/89) +U+1700 Tagalog (0/20) (0/20) (0/20) +U+1720 Hanunoo (0/23) (0/23) (0/23) +U+1740 Buhid (0/20) (0/20) (0/20) +U+1760 Tagbanwa (0/18) (0/18) (0/18) +U+1780 Khmer (0/114) (0/114) (0/114) +U+1800 Mongolian (0/156) (0/156) (0/156) +U+18b0 Unified Canadian Aboriginal Syllabics Extended (0/70) (0/70) (0/70) +U+1900 Limbu (0/68) (0/68) (0/68) +U+1950 Tai Le (0/35) (0/35) (0/35) +U+1980 New Tai Lue (0/83) (0/83) (0/83) +U+19e0 Khmer Symbols (0/32) (0/32) (0/32) +U+1a00 Buginese (0/30) (0/30) (0/30) +U+1a20 Tai Tham (0/127) (0/127) (0/127) +U+1ab0 Combining Diacritical Marks Extended (0/15) (0/15) (0/15) +U+1b00 Balinese (0/121) (0/121) (0/121) +U+1b80 Sundanese (0/64) (0/64) (0/64) +U+1bc0 Batak (0/56) (0/56) (0/56) +U+1c00 Lepcha (0/74) (0/74) (0/74) +U+1c50 Ol Chiki (0/48) (0/48) (0/48) +U+1c80 Cyrillic Extended-C (0/9) (0/9) (0/9) +U+1cc0 Sundanese Supplement (0/8) (0/8) (0/8) +U+1cd0 Vedic Extensions (0/41) (0/41) (0/41) +U+1d00 Phonetic Extensions 82% (106/128) 89% (115/128) 48% (62/128) +U+1d80 Phonetic Extensions Supplement 59% (38/64) 59% (38/64) 57% (37/64) +U+1dc0 Combining Diacritical Marks Supplement 10% (6/59) 10% (6/59) (0/59) +U+1e00 Latin Extended Additional 98% (252/256) 98% (252/256) 71% (182/256) +U+1f00 Greek Extended 100% (233/233) 100% (233/233) 100% (233/233) +U+2000 General Punctuation 96% (107/111) 78% (87/111) 48% (54/111) +U+2070 Superscripts and Subscripts 100% (42/42) 100% (42/42) 100% (42/42) +U+20a0 Currency Symbols 83% (26/31) 32% (10/31) 83% (26/31) +U+20d0 Combining Diacritical Marks for Symbols 21% (7/33) (0/33) (0/33) +U+2100 Letterlike Symbols 93% (75/80) 42% (34/80) 22% (18/80) +U+2150 Number Forms 91% (55/60) 91% (55/60) 26% (16/60) +U+2190 Arrows 100% (112/112) 100% (112/112) 100% (112/112) +U+2200 Mathematical Operators 100% (256/256) 39% (101/256) 69% (178/256) +U+2300 Miscellaneous Technical 25% (65/255) 14% (36/255) 53% (136/255) +U+2400 Control Pictures 5% (2/39) 2% (1/39) 2% (1/39) +U+2440 Optical Character Recognition (0/11) (0/11) (0/11) +U+2460 Enclosed Alphanumerics 6% (10/160) (0/160) (0/160) +U+2500 Box Drawing 100% (128/128) 100% (128/128) 100% (128/128) +U+2580 Block Elements 100% (32/32) 100% (32/32) 100% (32/32) +U+25a0 Geometric Shapes 100% (96/96) 100% (96/96) 100% (96/96) +U+2600 Miscellaneous Symbols 73% (189/256) 11% (30/256) 58% (149/256) +U+2700 Dingbats 90% (174/192) 0% (1/192) 75% (144/192) +U+27c0 Miscellaneous Mathematical Symbols-A 18% (9/48) 10% (5/48) 22% (11/48) +U+27f0 Supplemental Arrows-A 100% (16/16) 100% (16/16) 18% (3/16) +U+2800 Braille Patterns 100% (256/256) 100% (256/256) (0/256) +U+2900 Supplemental Arrows-B 4% (6/128) 100% (128/128) (0/128) +U+2980 Miscellaneous Mathematical Symbols-B 10% (13/128) 0% (1/128) 5% (7/128) +U+2a00 Supplemental Mathematical Operators 28% (74/256) 2% (6/256) 1% (4/256) +U+2b00 Miscellaneous Symbols and Arrows 16% (35/206) 13% (27/206) 8% (18/206) +U+2c00 Glagolitic (0/94) (0/94) (0/94) +U+2c60 Latin Extended-C 96% (31/32) 84% (27/32) 43% (14/32) +U+2c80 Coptic (0/123) (0/123) (0/123) +U+2d00 Georgian Supplement 95% (38/40) 95% (38/40) (0/40) +U+2d30 Tifinagh 93% (55/59) (0/59) (0/59) +U+2d80 Ethiopic Extended (0/79) (0/79) (0/79) +U+2de0 Cyrillic Extended-A (0/32) (0/32) (0/32) +U+2e00 Supplemental Punctuation 10% (7/69) 10% (7/69) 10% (7/69) +U+2e80 CJK Radicals Supplement (0/115) (0/115) (0/115) +U+2f00 Kangxi Radicals (0/214) (0/214) (0/214) +U+2ff0 Ideographic Description Characters (0/12) (0/12) (0/12) +U+3000 CJK Symbols and Punctuation (0/64) (0/64) (0/64) +U+3040 Hiragana (0/93) (0/93) (0/93) +U+30a0 Katakana (0/96) (0/96) (0/96) +U+3100 Bopomofo (0/41) (0/41) (0/41) +U+3130 Hangul Compatibility Jamo (0/94) (0/94) (0/94) +U+3190 Kanbun (0/16) (0/16) (0/16) +U+31a0 Bopomofo Extended (0/27) (0/27) (0/27) +U+31c0 CJK Strokes (0/36) (0/36) (0/36) +U+31f0 Katakana Phonetic Extensions (0/16) (0/16) (0/16) +U+3200 Enclosed CJK Letters and Months (0/254) (0/254) (0/254) +U+3300 CJK Compatibility (0/256) (0/256) (0/256) +U+3400 CJK Unified Ideographs Extension A (0/0) (0/0) (0/0) +U+4dc0 Yijing Hexagram Symbols 100% (64/64) (0/64) (0/64) +U+4e00 CJK Unified Ideographs (0/0) (0/0) (0/0) +U+a000 Yi Syllables (0/1165) (0/1165) (0/1165) +U+a490 Yi Radicals (0/55) (0/55) (0/55) +U+a4d0 Lisu 100% (48/48) (0/48) (0/48) +U+a500 Vai (0/300) (0/300) (0/300) +U+a640 Cyrillic Extended-B 34% (33/96) 12% (12/96) (0/96) +U+a6a0 Bamum (0/88) (0/88) (0/88) +U+a700 Modifier Tone Letters 62% (20/32) 62% (20/32) 62% (20/32) +U+a720 Latin Extended-D 48% (77/160) 37% (60/160) 10% (17/160) +U+a800 Syloti Nagri (0/44) (0/44) (0/44) +U+a830 Common Indic Number Forms (0/10) (0/10) (0/10) +U+a840 Phags-pa (0/56) (0/56) (0/56) +U+a880 Saurashtra (0/82) (0/82) (0/82) +U+a8e0 Devanagari Extended (0/30) (0/30) (0/30) +U+a900 Kayah Li (0/48) (0/48) (0/48) +U+a930 Rejang (0/37) (0/37) (0/37) +U+a960 Hangul Jamo Extended-A (0/29) (0/29) (0/29) +U+a980 Javanese (0/91) (0/91) (0/91) +U+a9e0 Myanmar Extended-B (0/31) (0/31) (0/31) +U+aa00 Cham (0/83) (0/83) (0/83) +U+aa60 Myanmar Extended-A (0/32) (0/32) (0/32) +U+aa80 Tai Viet (0/72) (0/72) (0/72) +U+aae0 Meetei Mayek Extensions (0/23) (0/23) (0/23) +U+ab00 Ethiopic Extended-A (0/32) (0/32) (0/32) +U+ab30 Latin Extended-E (0/54) (0/54) (0/54) +U+ab70 Cherokee Supplement (0/80) (0/80) (0/80) +U+abc0 Meetei Mayek (0/56) (0/56) (0/56) +U+ac00 Hangul Syllables (0/0) (0/0) (0/0) +U+d7b0 Hangul Jamo Extended-B (0/72) (0/72) (0/72) +U+d800 High Surrogates (0/0) (0/0) (0/0) +U+db80 High Private Use Surrogates (0/0) (0/0) (0/0) +U+dc00 Low Surrogates (0/0) (0/0) (0/0) +U+e000 Private Use Area (0/0) (0/0) (0/0) +U+f900 CJK Compatibility Ideographs (0/472) (0/472) (0/472) +U+fb00 Alphabetic Presentation Forms 100% (58/58) 12% (7/58) 3% (2/58) +U+fb50 Arabic Presentation Forms-A 17% (108/611) (0/611) 11% (72/611) +U+fe00 Variation Selectors 100% (16/16) 100% (16/16) (0/16) +U+fe10 Vertical Forms (0/10) (0/10) (0/10) +U+fe20 Combining Half Marks 25% (4/16) (0/16) (0/16) +U+fe30 CJK Compatibility Forms (0/32) (0/32) (0/32) +U+fe50 Small Form Variants (0/26) (0/26) (0/26) +U+fe70 Arabic Presentation Forms-B 100% (141/141) (0/141) 100% (141/141) +U+ff00 Halfwidth and Fullwidth Forms (0/225) (0/225) (0/225) +U+fff0 Specials 100% (5/5) 100% (5/5) 100% (5/5) +U+10000 Linear B Syllabary (0/88) (0/88) (0/88) +U+10080 Linear B Ideograms (0/123) (0/123) (0/123) +U+10100 Aegean Numbers (0/57) (0/57) (0/57) +U+10140 Ancient Greek Numbers (0/79) (0/79) (0/79) +U+10190 Ancient Symbols (0/13) (0/13) (0/13) +U+101d0 Phaistos Disc (0/46) (0/46) (0/46) +U+10280 Lycian (0/29) (0/29) (0/29) +U+102a0 Carian (0/49) (0/49) (0/49) +U+102e0 Coptic Epact Numbers (0/28) (0/28) (0/28) +U+10300 Old Italic 97% (35/36) (0/36) (0/36) +U+10330 Gothic (0/27) (0/27) (0/27) +U+10350 Old Permic (0/43) (0/43) (0/43) +U+10380 Ugaritic (0/31) (0/31) (0/31) +U+103a0 Old Persian (0/50) (0/50) (0/50) +U+10400 Deseret (0/80) (0/80) (0/80) +U+10450 Shavian (0/48) (0/48) (0/48) +U+10480 Osmanya (0/40) (0/40) (0/40) +U+104b0 Osage (0/72) (0/72) (0/72) +U+10500 Elbasan (0/40) (0/40) (0/40) +U+10530 Caucasian Albanian (0/53) (0/53) (0/53) +U+10600 Linear A (0/341) (0/341) (0/341) +U+10800 Cypriot Syllabary (0/55) (0/55) (0/55) +U+10840 Imperial Aramaic (0/31) (0/31) (0/31) +U+10860 Palmyrene (0/32) (0/32) (0/32) +U+10880 Nabataean (0/40) (0/40) (0/40) +U+108e0 Hatran (0/26) (0/26) (0/26) +U+10900 Phoenician (0/29) (0/29) (0/29) +U+10920 Lydian (0/27) (0/27) (0/27) +U+10980 Meroitic Hieroglyphs (0/32) (0/32) (0/32) +U+109a0 Meroitic Cursive (0/90) (0/90) (0/90) +U+10a00 Kharoshthi (0/65) (0/65) (0/65) +U+10a60 Old South Arabian (0/32) (0/32) (0/32) +U+10a80 Old North Arabian (0/32) (0/32) (0/32) +U+10ac0 Manichaean (0/51) (0/51) (0/51) +U+10b00 Avestan (0/61) (0/61) (0/61) +U+10b40 Inscriptional Parthian (0/30) (0/30) (0/30) +U+10b60 Inscriptional Pahlavi (0/27) (0/27) (0/27) +U+10b80 Psalter Pahlavi (0/29) (0/29) (0/29) +U+10c00 Old Turkic (0/73) (0/73) (0/73) +U+10c80 Old Hungarian (0/108) (0/108) (0/108) +U+10e60 Rumi Numeral Symbols (0/31) (0/31) (0/31) +U+11000 Brahmi (0/109) (0/109) (0/109) +U+11080 Kaithi (0/66) (0/66) (0/66) +U+110d0 Sora Sompeng (0/35) (0/35) (0/35) +U+11100 Chakma (0/67) (0/67) (0/67) +U+11150 Mahajani (0/39) (0/39) (0/39) +U+11180 Sharada (0/94) (0/94) (0/94) +U+111e0 Sinhala Archaic Numbers (0/20) (0/20) (0/20) +U+11200 Khojki (0/62) (0/62) (0/62) +U+11280 Multani (0/38) (0/38) (0/38) +U+112b0 Khudawadi (0/69) (0/69) (0/69) +U+11300 Grantha (0/85) (0/85) (0/85) +U+11400 Newa (0/92) (0/92) (0/92) +U+11480 Tirhuta (0/82) (0/82) (0/82) +U+11580 Siddham (0/92) (0/92) (0/92) +U+11600 Modi (0/79) (0/79) (0/79) +U+11660 Mongolian Supplement (0/13) (0/13) (0/13) +U+11680 Takri (0/66) (0/66) (0/66) +U+11700 Ahom (0/57) (0/57) (0/57) +U+118a0 Warang Citi (0/84) (0/84) (0/84) +U+11ac0 Pau Cin Hau (0/57) (0/57) (0/57) +U+11c00 Bhaiksuki (0/97) (0/97) (0/97) +U+11c70 Marchen (0/68) (0/68) (0/68) +U+12000 Cuneiform (0/922) (0/922) (0/922) +U+12400 Cuneiform Numbers and Punctuation (0/116) (0/116) (0/116) +U+12480 Early Dynastic Cuneiform (0/196) (0/196) (0/196) +U+13000 Egyptian Hieroglyphs (0/1071) (0/1071) (0/1071) +U+14400 Anatolian Hieroglyphs (0/583) (0/583) (0/583) +U+16800 Bamum Supplement (0/569) (0/569) (0/569) +U+16a40 Mro (0/43) (0/43) (0/43) +U+16ad0 Bassa Vah (0/36) (0/36) (0/36) +U+16b00 Pahawh Hmong (0/127) (0/127) (0/127) +U+16f00 Miao (0/133) (0/133) (0/133) +U+16fe0 Ideographic Symbols and Punctuation (0/1) (0/1) (0/1) +U+17000 Tangut (0/0) (0/0) (0/0) +U+18800 Tangut Components (0/755) (0/755) (0/755) +U+1b000 Kana Supplement (0/2) (0/2) (0/2) +U+1bc00 Duployan (0/143) (0/143) (0/143) +U+1bca0 Shorthand Format Controls (0/4) (0/4) (0/4) +U+1d000 Byzantine Musical Symbols (0/246) (0/246) (0/246) +U+1d100 Musical Symbols (0/231) (0/231) (0/231) +U+1d200 Ancient Greek Musical Notation (0/70) (0/70) (0/70) +U+1d300 Tai Xuan Jing Symbols 100% (87/87) (0/87) (0/87) +U+1d360 Counting Rod Numerals (0/18) (0/18) (0/18) +U+1d400 Mathematical Alphanumeric Symbols 11% (117/996) 10% (108/996) 6% (63/996) +U+1d800 Sutton SignWriting (0/672) (0/672) (0/672) +U+1e000 Glagolitic Supplement (0/38) (0/38) (0/38) +U+1e800 Mende Kikakui (0/213) (0/213) (0/213) +U+1e900 Adlam (0/87) (0/87) (0/87) +U+1ee00 Arabic Mathematical Alphabetic Symbols 51% (74/143) (0/143) (0/143) +U+1f000 Mahjong Tiles (0/44) (0/44) (0/44) +U+1f030 Domino Tiles 100% (100/100) (0/100) (0/100) +U+1f0a0 Playing Cards 71% (59/82) (0/82) (0/82) +U+1f100 Enclosed Alphanumeric Supplement (0/191) (0/191) (0/191) +U+1f200 Enclosed Ideographic Supplement (0/58) (0/58) (0/58) +U+1f300 Miscellaneous Symbols and Pictographs 1% (12/768) (0/768) (0/768) +U+1f600 Emoticons 80% (64/80) (0/80) (0/80) +U+1f650 Ornamental Dingbats (0/48) (0/48) (0/48) +U+1f680 Transport and Map Symbols (0/103) (0/103) (0/103) +U+1f700 Alchemical Symbols (0/116) (0/116) (0/116) +U+1f780 Geometric Shapes Extended (0/85) (0/85) (0/85) +U+1f800 Supplemental Arrows-C (0/148) (0/148) (0/148) +U+1f900 Supplemental Symbols and Pictographs (0/82) (0/82) (0/82) +U+20000 CJK Unified Ideographs Extension B (0/0) (0/0) (0/0) +U+2a700 CJK Unified Ideographs Extension C (0/0) (0/0) (0/0) +U+2b740 CJK Unified Ideographs Extension D (0/0) (0/0) (0/0) +U+2b820 CJK Unified Ideographs Extension E (0/0) (0/0) (0/0) +U+2f800 CJK Compatibility Ideographs Supplement (0/542) (0/542) (0/542) +U+e0000 Tags (0/98) (0/98) (0/98) +U+e0100 Variation Selectors Supplement (0/240) (0/240) (0/240) +U+f0000 Supplementary Private Use Area-A (0/0) (0/0) (0/0) +U+100000 Supplementary Private Use Area-B (0/0) (0/0) (0/0) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/DESCRIPTION.rst b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/DESCRIPTION.rst new file mode 100644 index 000000000..0d983facc --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/DESCRIPTION.rst @@ -0,0 +1,12 @@ +============================ +rinoh-typeface-texgyrecursor +============================ + +This package provides the `TeX Gyre Cursor`_ typeface for use with rinohtype_. +TeX Gyre Cursor is based on URW Nimbus Mono L and can be used as a replacement +for Courier. + +.. _TeX Gyre Cursor: http://www.gust.org.pl/projects/e-foundry/tex-gyre/cursor +.. _rinohtype: https://github.com/brechtm/rinohtype#readme + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/METADATA new file mode 100644 index 000000000..463357098 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/METADATA @@ -0,0 +1,30 @@ +Metadata-Version: 2.0 +Name: rinoh-typeface-texgyrecursor +Version: 0.1.1 +Summary: TeX Gyre Cursor typeface +Home-page: https://github.com/brechtm/rinoh-typeface-texgyrecursor +Author: Brecht Machiels +Author-email: brecht@mos6581.org +License: GUST Font License (GFL) +Keywords: opentype font +Platform: UNKNOWN +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: End Users/Desktop +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Text Processing :: Fonts +Requires-Dist: rinohtype + +============================ +rinoh-typeface-texgyrecursor +============================ + +This package provides the `TeX Gyre Cursor`_ typeface for use with rinohtype_. +TeX Gyre Cursor is based on URW Nimbus Mono L and can be used as a replacement +for Courier. + +.. _TeX Gyre Cursor: http://www.gust.org.pl/projects/e-foundry/tex-gyre/cursor +.. _rinohtype: https://github.com/brechtm/rinohtype#readme + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/RECORD new file mode 100644 index 000000000..edd7ee7d2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/RECORD @@ -0,0 +1,16 @@ +rinoh_typeface_texgyrecursor-0.1.1.dist-info/DESCRIPTION.rst,sha256=kmadMzoo87ET3_JLJnD_Ld4Vavfhs5gRKjJrE-J8Qqw,400 +rinoh_typeface_texgyrecursor-0.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +rinoh_typeface_texgyrecursor-0.1.1.dist-info/METADATA,sha256=gh096tCTTS7_200YuQS77hYTlJMBwIwl-1XtUX7tygs,1010 +rinoh_typeface_texgyrecursor-0.1.1.dist-info/RECORD,, +rinoh_typeface_texgyrecursor-0.1.1.dist-info/WHEEL,sha256=rNo05PbNqwnXiIHFsYm0m22u4Zm6YJtugFG2THx4w3g,92 +rinoh_typeface_texgyrecursor-0.1.1.dist-info/entry_points.txt,sha256=xiJfENsD8kPeUrUNfc6DPL2uIXENOACsh_g7zDdaITE,75 +rinoh_typeface_texgyrecursor-0.1.1.dist-info/metadata.json,sha256=aRwqXqZD7OtMavFW8liH3BBAXWrWXPAmQGp9_TJV0F0,906 +rinoh_typeface_texgyrecursor-0.1.1.dist-info/top_level.txt,sha256=-oegGLivMP-cEgq2xKbEUWkJuQapgMAAf7GkYHhwXkw,29 +rinoh_typeface_texgyrecursor/GUST-FONT-LICENSE.txt,sha256=K9aa_8PaAHFRFvcT9X6rlwfpba81Yq0CFZh7FbnBb3M,1456 +rinoh_typeface_texgyrecursor/README-TeX-Gyre-Cursor.txt,sha256=q638VpxGtu7sBRg8wZZefWh4EL_7FNPS5dqljrjx9Jc,17976 +rinoh_typeface_texgyrecursor/__init__.py,sha256=-I48CQXUam3Yb2ZHwelRiE8lsGsjYxcozm0HX1o0J6g,625 +rinoh_typeface_texgyrecursor/__pycache__/__init__.cpython-312.pyc,, +rinoh_typeface_texgyrecursor/texgyrecursor-bold.otf,sha256=lel1W_oFdZ6NH4-6IakZukYJHhJ1rrW_gx3_2ck7BB4,87288 +rinoh_typeface_texgyrecursor/texgyrecursor-bolditalic.otf,sha256=aqXEH0ibiYqokMVD59zV5zLGOJS6vGVWngHufkZTPYI,90360 +rinoh_typeface_texgyrecursor/texgyrecursor-italic.otf,sha256=VF8koqnl3VrOhl_l6AE09Vo3eUs24mq65UJK6_9gAFY,87536 +rinoh_typeface_texgyrecursor/texgyrecursor-regular.otf,sha256=BmfetIqg6Ivo9JnE0wjouRFvKQ5_lpsPWjTuFclkQnI,84652 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/WHEEL new file mode 100644 index 000000000..bb7f7dba6 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.29.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/entry_points.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/entry_points.txt new file mode 100644 index 000000000..8d1b8b8d2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[rinoh.typefaces] +tex gyre cursor = rinoh_typeface_texgyrecursor:typeface + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/metadata.json b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/metadata.json new file mode 100644 index 000000000..ddbc01119 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Text Processing :: Fonts"], "extensions": {"python.details": {"contacts": [{"email": "brecht@mos6581.org", "name": "Brecht Machiels", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/brechtm/rinoh-typeface-texgyrecursor"}}, "python.exports": {"rinoh.typefaces": {"tex gyre cursor": "rinoh_typeface_texgyrecursor:typeface"}}}, "extras": [], "generator": "bdist_wheel (0.29.0)", "keywords": ["opentype", "font"], "license": "GUST Font License (GFL)", "metadata_version": "2.0", "name": "rinoh-typeface-texgyrecursor", "run_requires": [{"requires": ["rinohtype"]}], "summary": "TeX Gyre Cursor typeface", "version": "0.1.1"} \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/top_level.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/top_level.txt new file mode 100644 index 000000000..298b022f9 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor-0.1.1.dist-info/top_level.txt @@ -0,0 +1 @@ +rinoh_typeface_texgyrecursor diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/GUST-FONT-LICENSE.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/GUST-FONT-LICENSE.txt new file mode 100644 index 000000000..60b55002e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/GUST-FONT-LICENSE.txt @@ -0,0 +1,30 @@ +% This is a preliminary version (2006-09-30), barring acceptance from +% the LaTeX Project Team and other feedback, of the GUST Font License. +% (GUST is the Polish TeX Users Group, http://www.gust.org.pl) +% +% For the most recent version of this license see +% http://www.gust.org.pl/fonts/licenses/GUST-FONT-LICENSE.txt +% or +% http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt +% +% This work may be distributed and/or modified under the conditions +% of the LaTeX Project Public License, either version 1.3c of this +% license or (at your option) any later version. +% +% Please also observe the following clause: +% 1) it is requested, but not legally required, that derived works be +% distributed only after changing the names of the fonts comprising this +% work and given in an accompanying "manifest", and that the +% files comprising the Work, as listed in the manifest, also be given +% new names. Any exceptions to this request are also given in the +% manifest. +% +% We recommend the manifest be given in a separate file named +% MANIFEST-.txt, where is some unique identification +% of the font family. If a separate "readme" file accompanies the Work, +% we recommend a name of the form README-.txt. +% +% The latest version of the LaTeX Project Public License is in +% http://www.latex-project.org/lppl.txt and version 1.3c or later +% is part of all distributions of LaTeX version 2006/05/20 or later. + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/README-TeX-Gyre-Cursor.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/README-TeX-Gyre-Cursor.txt new file mode 100644 index 000000000..f0b6517d1 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/README-TeX-Gyre-Cursor.txt @@ -0,0 +1,302 @@ +########################################################################### +############ The TeX Gyre Collection of Fonts ############ +############ The font Cursor ############ +########################################################################### + +Font: TeX Gyre Cursor +Authors: Bogus\l{}aw Jackowski and Janusz M. Nowacki +Version: 2.004 +Date: 30 X 2009 +Downloads: http://www.gust.org.pl/projects/e-foundry/tex-gyre/cursor + +License: + % Copyright 2007--2009 for TeX Gyre extensions by B. Jackowski + % and J.M. Nowacki (on behalf of TeX Users Groups). + % Vietnamese characters were added by Han The Thanh. + % + % This work can be freely used and distributed under + % the GUST Font License (GFL -- see GUST-FONT-LICENSE.txt) + % which is actually an instance of the LaTeX Project Public License + % (LPPL -- see http://www.latex-project.org/lppl.txt ). + % + % This work has the maintenance status "maintained". The Current Maintainer + % of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki. + % + % This work consists of the files listed in + % the MANIFEST-TeX-Gyre-Cursor.txt file. + +########################################################################### +############ A BRIEF DESCRIPTION OF THE PACKAGE ############ +########################################################################### + +The current package contains the most recent version of the TeX Gyre +Cursor family of fonts in the PostScript Type 1 and OpenType formats. +TeX Gyre Cursor is based on the URW Nimbus Mono L kindly released +by URW++ Design and Development Inc. under GFL (independently +of the GPL release accompanying Ghostscript). The Vietnamese +glyphs were added by Han The Thanh. + +TeX Gyre Cursor can be used as a replacement for a well-known +Courier typeface (designed by Howard G. ``Bud'' Kettler, 1955, +for the IBM corporation). + + * * * + +The TeX Gyre project, following the Latin Modern project, aims at providing +a rich collection of diacritical characters in the attempt to cover as many +Latin-based scripts as possible. To our knowledge, the repertoire of +characters covers all European languages as well as some other Latin-based +alphabets such as Vietnamese and Navajo; at the request of users, recent +extensions (following the enhancement of the Latin Modern collection) +provide glyphs sufficient for typesetting of romanized transliterations +of Arabic and Sanskrit scripts. We have frequently used the information +presented by Michael Everson at the ``The Alphabets of Europe'' +( http://www.evertype.com/alphabets/ ) web site. If you know about European +languages that are not covered completely or if some glyphs have apparently +wrong shapes -- please let us know. Note, however, that Greek glyphs +bear provisional character. + +The TeX Gyre Project was launched and is supported by TeX USERS GROUPS +(CS TUG, DANTE eV, GUST, NTG, TUG India, TUG). Hearty thanks to the +representatives of these groups and also to all people who helped with +comments, ideas, remarks, bug reports, objections, hints, consolations, etc. + + * * * + +The TeX Gyre Cursor family consists of 4 text fonts: regular, +italic, bold and bold italic (qcrr, qcrri, qcrb, qcrbi). + +The TeX Gyre Cursor family can be freely used and distributed +under the GUST Font License (see above) which is actually +an instance of the LaTeX Project Public License +(LPPL; see http://www.latex-project.org/lppl.txt ). + + * * * + +The package consists of the files in the directories conforming +to the TeX Directory Structure (v. 1.1). The directories contain: + +doc/fonts/tex-gyre this file, manifest, licence, test files, + and, moreover, selected files used as input + for generating OTFs (meant as a technical + documentation of the OTFs) +tex/latex/tex-gyre support for LaTeX (*.fd and *.sty files, + prepared by Marcin Woli\'nski) +fonts/enc/dvips/tex-gyre support for dvips (*.enc files); + NOTE: all fonts of the TeX Gyre family + share the same *.enc files with + a few exceptions: CS, QX, and RM encodings + for TeX Gyre Cursor (monospace) differ + from the standard ones (because of the + compatibility with Computer Modern + typewriter fonts requested by users), + and, moreover, CS, L7x, QX and RM encodings + for TeX Gyre Chorus exploit exceptionally + the `lslash_lslash' ligature +fonts/map/dvips/tex-gyre support for dvips (*.map files) +fonts/opentype/public/tex-gyre fonts in the OpenType format (*.otf files) +fonts/type1/public/tex-gyre PostScript (Type 1) font files and printer + font metric files (*.pfb and *.pfm, + respectively); +fonts/tfm/public/tex-gyre TeX font metric files (*.tfm) for: + -- CS (CSTUG) encoding (cs-*.tfm), + -- EC (Cork) encoding (ec-*.tfm), + -- L7x (Lithuanian) encoding (l7x-*.tfm), + -- QX (GUST) encoding (qx-*.tfm), + -- RM (Regular Math or OT1) encoding (rm-*.tfm), + -- Y&Y's TeX'n'ANSI aka LY1 encoding + (texnansi-*.tfm), + -- T5 (Vietnamese) encoding (t5-*.tfm), + -- Text Companion for EC fonts aka TS1 + (ts1-*.tfm). + Encodings CS, EC, L7x, QX, RM, Y&Y, and T5 + have their cap-small-caps counterparts + (*-sc.tfm). +fonts/afm/public/tex-gyre Adobe font metric files (*.afm); + +Email contact: Bogus\l{}aw Jackowski aka Jacko, B_Jackowski@gust.org.pl + + * * * + +In ConTeXt, support for TeX Gyre Collection can be found in the typescript +definition files: + + ... /tex/context/base/type-enc.tex + ... /tex/context/base/type-syn.tex + ... /tex/context/base/type-exa.tex + ... /tex/context/base/type-map.tex + +Additional encoding and map files can be found under: + + ... /texmf/fonts/map/pdftex/context + ... /texmf/fonts/enc/pdftex/context + + * * * + +All four font files, qcrb, qcrbi, qcrr, qcrri, contain the same repertoire +of 1086 characters, namely (these are the names used in Type 1 fonts; +note that in comparison with other TeX Gyre fonts the ligatures +ffi ffl and f_k are missing): + +A a a.sc Aacute aacute aacute.sc Abreve abreve abreve.sc Abreveacute +abreveacute abreveacute.sc Abrevedotbelow abrevedotbelow +abrevedotbelow.sc Abrevegrave abrevegrave abrevegrave.sc Abrevehookabove +abrevehookabove abrevehookabove.sc Abrevetilde abrevetilde abrevetilde.sc +Acaron acaron acaron.sc Acircumflex acircumflex acircumflex.sc +Acircumflexacute acircumflexacute acircumflexacute.sc Acircumflexdotbelow +acircumflexdotbelow acircumflexdotbelow.sc Acircumflexgrave +acircumflexgrave acircumflexgrave.sc Acircumflexhookabove +acircumflexhookabove acircumflexhookabove.sc Acircumflextilde +acircumflextilde acircumflextilde.sc Acute acute acute.dup acute.ts1 +Acutecomb acutecomb Adblgrave adblgrave adblgrave.sc Adieresis adieresis +adieresis.sc Adotbelow adotbelow adotbelow.sc AE ae AE.dup ae.dup ae.sc +AEacute aeacute aeacute.sc Agrave agrave agrave.sc Ahookabove ahookabove +ahookabove.sc Alpha alpha Amacron amacron amacron.sc ampersand anglearc +angleleft angleright Aogonek aogonek aogonek.sc Aogonekacute aogonekacute +aogonekacute.sc approxequal Aring aring aring.sc Aringacute aringacute +aringacute.sc arrowdown arrowleft arrowright arrowup asciicircum +asciitilde asterisk asteriskmath at at.alt Atilde atilde atilde.sc B b +b.sc backslash baht bar Beta beta bigcircle blanksymbol born braceleft +braceright bracketleft bracketright Breve breve breve.ts1 Breveacute +breveacute brevebelow brevebelowcomb brevebelowinverted +brevebelowinvertedcomb Brevecomb brevecomb Brevegrave brevegrave +Brevehookabove brevehookabove Breveinverted breveinverted +Breveinvertedcomb breveinvertedcomb Brevetilde brevetilde brokenbar +bullet C c c.sc Cacute cacute cacute.sc Caron caron caron.ts1 Caroncomb +caroncomb Ccaron ccaron ccaron.sc Ccedilla ccedilla ccedilla.sc +Ccircumflex ccircumflex ccircumflex.sc Cdotaccent cdotaccent +cdotaccent.sc cedilla cedilla.dup cent cent.oldstyle centigrade Chi chi +Circumflex circumflex circumflex.dup Circumflexacute circumflexacute +Circumflexcomb circumflexcomb Circumflexgrave circumflexgrave +Circumflexhookabove circumflexhookabove Circumflextilde circumflextilde +colon colonmonetary comma commaaccent commaaccentcomb copyleft copyright +copyright.alt currency cwm cwmascender cwmcapital cyrBreve cyrbreve +cyrFlex cyrflex D d d.sc dagger daggerdbl dblbracketleft dblbracketright +dblGrave dblgrave dblgrave.ts1 dblGravecomb dblgravecomb dblverticalbar +Dcaron dcaron dcaron.sc Dcroat dcroat dcroat.sc Ddotbelow ddotbelow +ddotbelow.sc degree Delta delta diameter died Dieresis dieresis +dieresis.dup dieresis.ts1 Dieresisacute dieresisacute Dieresiscaron +dieresiscaron Dieresiscomb dieresiscomb Dieresisgrave dieresisgrave +discount divide divorced Dlinebelow dlinebelow dlinebelow.sc dollar +dollar.oldstyle dong Dotaccent dotaccent Dotaccentcomb dotaccentcomb +dotbelow dotbelowcomb dotlessi dotlessi.sc dotlessj dotlessj.dup +dotlessj.sc E e e.sc Eacute eacute eacute.sc Ebreve ebreve ebreve.sc +Ecaron ecaron ecaron.sc Ecircumflex ecircumflex ecircumflex.sc +Ecircumflexacute ecircumflexacute ecircumflexacute.sc Ecircumflexdotbelow +ecircumflexdotbelow ecircumflexdotbelow.sc Ecircumflexgrave +ecircumflexgrave ecircumflexgrave.sc Ecircumflexhookabove +ecircumflexhookabove ecircumflexhookabove.sc Ecircumflextilde +ecircumflextilde ecircumflextilde.sc Edblgrave edblgrave edblgrave.sc +Edieresis edieresis edieresis.sc Edotaccent edotaccent edotaccent.sc +Edotbelow edotbelow edotbelow.sc Egrave egrave egrave.sc Ehookabove +ehookabove ehookabove.sc eight eight.oldstyle eight.prop +eight.taboldstyle ell ellipsis Emacron emacron emacron.sc emdash endash +Eng eng eng.sc Eogonek eogonek eogonek.sc Eogonekacute eogonekacute +eogonekacute.sc Epsilon epsilon epsilon.alt equal Ereversed ereversed +ereversed.sc estimated Eta eta Eth eth eth.sc Etilde etilde etilde.sc +eturned eturned.sc Euro exclam exclamdown F f f.sc ff fi five +five.oldstyle five.prop five.taboldstyle fl florin four four.oldstyle +four.prop four.taboldstyle fraction fraction.alt G g g.sc Gacute gacute +gacute.sc Gamma gamma Gbreve gbreve gbreve.sc Gcaron gcaron gcaron.sc +Gcedilla gcedilla Gcircumflex gcircumflex gcircumflex.sc Gcommaaccent +gcommaaccent gcommaaccent.sc Gdotaccent gdotaccent gdotaccent.sc +Germandbls germandbls germandbls.dup germandbls.sc gnaborretni Grave +grave grave.ts1 Gravecomb gravecomb greater greaterequal +greaterorequalslant guarani guillemotleft guillemotright guilsinglleft +guilsinglright H h h.sc Hbar hbar hbar.sc Hbrevebelow hbrevebelow +hbrevebelow.sc Hcircumflex hcircumflex hcircumflex.sc Hdieresis hdieresis +hdieresis.sc Hdotbelow hdotbelow hdotbelow.sc Hookabove hookabove +Hookabovecomb hookabovecomb horn Htilde htilde htilde.sc Hungarumlaut +hungarumlaut hungarumlaut.ts1 Hungarumlautcomb hungarumlautcomb hyphen +hyphen.alt hyphen.dup hyphen.prop hyphendbl hyphendbl.alt I i i.sc Iacute +iacute iacute.sc Ibreve ibreve ibreve.sc Icaron icaron icaron.sc +Icircumflex icircumflex icircumflex.sc Idblgrave idblgrave idblgrave.sc +Idieresis idieresis idieresis.sc Idieresisacute idieresisacute +idieresisacute.sc Idotaccent idotaccent.sc Idotbelow idotbelow +idotbelow.sc Igrave igrave igrave.sc Ihookabove ihookabove ihookabove.sc +IJ ij ij.sc Imacron imacron Imacron.alt imacron.alt imacron.alt.sc +imacron.sc infinity interrobang Iogonek iogonek iogonek.sc Iogonekacute +iogonekacute iogonekacute.sc Iota iota Itilde itilde itilde.sc J j j.sc +J_caron Jacute jacute jacute.sc jcaron jcaron.sc Jcircumflex jcircumflex +jcircumflex.sc K k k.sc Kappa kappa Kcedilla kcedilla Kcommaaccent +kcommaaccent kcommaaccent.sc L l l.sc Lacute lacute lacute.sc Lambda +lambda Lcaron lcaron lcaron.sc Lcedilla lcedilla Lcommaaccent +lcommaaccent lcommaaccent.sc Ldot ldot ldot.sc Ldotbelow ldotbelow +ldotbelow.sc Ldotbelowmacron ldotbelowmacron ldotbelowmacron.sc leaf less +lessequal lessorequalslant linebelow linebelowcomb lira logicalnot longs +lozenge lscript Lslash lslash lslash.sc Ltilde ltilde ltilde.sc M m m.sc +Macron macron Macron.alt macron.alt macron.dup macron.ts1 macronbelow +macronbelowcomb Macroncomb macroncomb married Mdotbelow mdotbelow +mdotbelow.sc mho minus minusplus Mu mu mu.alt multiply musicalnote N n +n.sc Nacute nacute nacute.sc naira nbspace Ncaron ncaron ncaron.sc +Ncedilla ncedilla Ncommaaccent ncommaaccent ncommaaccent.sc Ndotaccent +ndotaccent ndotaccent.sc Ndotbelow ndotbelow ndotbelow.sc nine +nine.oldstyle nine.prop nine.taboldstyle notequal Ntilde ntilde ntilde.sc +Nu nu numbersign numero O o o.sc Oacute oacute oacute.sc Obreve obreve +obreve.sc Ocaron ocaron ocaron.sc Ocircumflex ocircumflex ocircumflex.sc +Ocircumflexacute ocircumflexacute ocircumflexacute.sc Ocircumflexdotbelow +ocircumflexdotbelow ocircumflexdotbelow.sc Ocircumflexgrave +ocircumflexgrave ocircumflexgrave.sc Ocircumflexhookabove +ocircumflexhookabove ocircumflexhookabove.sc Ocircumflextilde +ocircumflextilde ocircumflextilde.sc Odblgrave odblgrave odblgrave.sc +Odieresis odieresis odieresis.sc Odotbelow odotbelow odotbelow.sc OE oe +OE.dup oe.dup oe.sc ogonek Ograve ograve ograve.sc ohm Ohookabove +ohookabove ohookabove.sc Ohorn ohorn ohorn.sc Ohornacute ohornacute +ohornacute.sc Ohorndotbelow ohorndotbelow ohorndotbelow.sc Ohorngrave +ohorngrave ohorngrave.sc Ohornhookabove ohornhookabove ohornhookabove.sc +Ohorntilde ohorntilde ohorntilde.sc Ohungarumlaut ohungarumlaut +ohungarumlaut.sc Omacron omacron omacron.sc Omega omega Omicron omicron +one one.oldstyle one.prop one.superior one.taboldstyle onehalf onequarter +Oogonek oogonek oogonek.sc Oogonekacute oogonekacute oogonekacute.sc +openbullet ordfeminine ordmasculine Orogate orogate orogate.sc Oslash +oslash Oslash.dup oslash.dup oslash.sc Oslashacute oslashacute +oslashacute.sc Otilde otilde otilde.sc P p p.sc paragraph paragraph.alt +parenleft parenright partialdiff percent period periodcentered permyriad +perthousand perthousandzero peso Phi phi phi.alt Pi pi pi.alt plus +plusminus Psi psi published Q q q.sc question questiondown +quillbracketleft quillbracketright quotedbl quotedblbase quotedblbase.ts1 +quotedblleft quotedblright quoteleft quoteleft.dup quoteright +quoteright.dup quotesinglbase quotesinglbase.ts1 quotesingle +quotesingle.ts1 R r r.sc Racute racute racute.sc radical Rcaron rcaron +rcaron.sc Rcedilla rcedilla Rcommaaccent rcommaaccent rcommaaccent.sc +Rdblgrave rdblgrave rdblgrave.sc Rdotaccent rdotaccent rdotaccent.sc +Rdotbelow rdotbelow rdotbelow.sc Rdotbelowmacron rdotbelowmacron +rdotbelowmacron.sc recipe referencemark registered registered.alt Rho rho +rho.alt Ring ring Ringacute ringacute Ringcomb ringcomb ringhalfleft +ringhalfright S s s.sc Sacute sacute sacute.sc Scaron scaron scaron.sc +Scedilla scedilla scedilla.sc schwa Scircumflex scircumflex +scircumflex.sc Scommaaccent scommaaccent scommaaccent.sc Sdotbelow +sdotbelow sdotbelow.sc section semicolon servicemark seven seven.oldstyle +seven.prop seven.taboldstyle sfthyphen Sigma sigma sigma1 six +six.oldstyle six.prop six.taboldstyle slash space star sterling summation +suppress T t t.sc Tau tau Tcaron tcaron tcaron.sc Tcedilla tcedilla +tcedilla.sc Tcommaaccent tcommaaccent tcommaaccent.sc Tdieresis tdieresis +tdieresis.sc Tdotbelow tdotbelow tdotbelow.sc Theta theta theta.alt Thorn +thorn thorn.sc three three.oldstyle three.prop three.superior +three.taboldstyle threequarters threequartersemdash tie tieaccentcapital +tieaccentcapital.new tieaccentlowercase tieaccentlowercase.new Tilde +tilde tilde.dup tildebelow tildebelowcomb Tildecomb tildecomb tildelow +Tlinebelow tlinebelow tlinebelow.sc trademark Ttilde ttilde ttilde.sc +twelveudash two two.oldstyle two.prop two.superior two.taboldstyle U u +u.sc Uacute uacute uacute.sc Ubreve ubreve ubreve.sc Ubrevebelowinverted +ubrevebelowinverted ubrevebelowinverted.sc Ucaron ucaron ucaron.sc +Ucircumflex ucircumflex ucircumflex.sc Udblgrave udblgrave udblgrave.sc +Udieresis udieresis udieresis.sc Udieresisacute udieresisacute +udieresisacute.sc Udieresiscaron udieresiscaron udieresiscaron.sc +Udieresisgrave udieresisgrave udieresisgrave.sc Udotbelow udotbelow +udotbelow.sc Ugrave ugrave ugrave.sc Uhookabove uhookabove uhookabove.sc +Uhorn uhorn uhorn.sc Uhornacute uhornacute uhornacute.sc Uhorndotbelow +uhorndotbelow uhorndotbelow.sc Uhorngrave uhorngrave uhorngrave.sc +Uhornhookabove uhornhookabove uhornhookabove.sc Uhorntilde uhorntilde +uhorntilde.sc Uhungarumlaut uhungarumlaut uhungarumlaut.sc Umacron +umacron umacron.sc underscore undertie undertieinverted uni2010 uni2011 +uni2423 Uogonek uogonek uogonek.sc Upsilon upsilon Uring uring uring.sc +Utilde utilde utilde.sc V v v.sc W w w.sc Wacute wacute wacute.sc +Wcircumflex wcircumflex wcircumflex.sc Wdieresis wdieresis wdieresis.sc +weierstrass Wgrave wgrave wgrave.sc won X x x.sc Xi xi Y y y.sc Yacute +yacute yacute.sc Ycircumflex ycircumflex ycircumflex.sc Ydieresis +ydieresis ydieresis.sc Ydotbelow ydotbelow ydotbelow.sc yen Ygrave ygrave +ygrave.sc Yhookabove yhookabove yhookabove.sc Ytilde ytilde ytilde.sc Z z +z.sc Zacute zacute zacute.sc Zcaron zcaron zcaron.sc Zdotaccent +zdotaccent zdotaccent.sc Zdotbelow zdotbelow zdotbelow.sc zero +zero.oldstyle zero.prop zero.slash zero.taboldstyle Zeta zeta diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/__init__.py new file mode 100644 index 000000000..da9668cb2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/__init__.py @@ -0,0 +1,20 @@ +from os import path + +from rinoh.font import Typeface +from rinoh.font.style import REGULAR, BOLD, ITALIC +from rinoh.font.opentype import OpenTypeFont + + +__all__ = ['typeface'] + + +def otf(style): + filename = 'texgyrecursor-{}.otf'.format(style) + return path.join(path.dirname(__file__), filename) + + +typeface = Typeface('TeX Gyre Cursor', + OpenTypeFont(otf('regular'), weight=REGULAR), + OpenTypeFont(otf('italic'), weight=REGULAR, slant=ITALIC), + OpenTypeFont(otf('bold'), weight=BOLD), + OpenTypeFont(otf('bolditalic'), weight=BOLD, slant=ITALIC)) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..545d59bd5 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-bold.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-bold.otf new file mode 100644 index 000000000..6205ebe06 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-bold.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-bolditalic.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-bolditalic.otf new file mode 100644 index 000000000..757348b29 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-bolditalic.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-italic.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-italic.otf new file mode 100644 index 000000000..947030c09 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-italic.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-regular.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-regular.otf new file mode 100644 index 000000000..d061925e3 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrecursor/texgyrecursor-regular.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/DESCRIPTION.rst b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/DESCRIPTION.rst new file mode 100644 index 000000000..698da4d49 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/DESCRIPTION.rst @@ -0,0 +1,12 @@ +=========================== +rinoh-typeface-texgyreheros +=========================== + +This package provides the `TeX Gyre Heros`_ typeface for use with rinohtype_. +TeX Gyre Heros is based on URW Nimbus Sans L and can be used as a replacement +for Helvetica. + +.. _TeX Gyre Heros: http://www.gust.org.pl/projects/e-foundry/tex-gyre/heros +.. _rinohtype: https://github.com/brechtm/rinohtype#readme + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/METADATA new file mode 100644 index 000000000..4ea09ad7c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/METADATA @@ -0,0 +1,30 @@ +Metadata-Version: 2.0 +Name: rinoh-typeface-texgyreheros +Version: 0.1.1 +Summary: TeX Gyre Heros typeface +Home-page: https://github.com/brechtm/rinoh-typeface-texgyreheros +Author: Brecht Machiels +Author-email: brecht@mos6581.org +License: GUST Font License (GFL) +Keywords: opentype font +Platform: UNKNOWN +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: End Users/Desktop +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Text Processing :: Fonts +Requires-Dist: rinohtype + +=========================== +rinoh-typeface-texgyreheros +=========================== + +This package provides the `TeX Gyre Heros`_ typeface for use with rinohtype_. +TeX Gyre Heros is based on URW Nimbus Sans L and can be used as a replacement +for Helvetica. + +.. _TeX Gyre Heros: http://www.gust.org.pl/projects/e-foundry/tex-gyre/heros +.. _rinohtype: https://github.com/brechtm/rinohtype#readme + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/RECORD new file mode 100644 index 000000000..b4b991a40 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/RECORD @@ -0,0 +1,20 @@ +rinoh_typeface_texgyreheros-0.1.1.dist-info/DESCRIPTION.rst,sha256=1oh_6rRjffXpLWvJwIn2XUOmi7OaqSUMaEw8tW3wHwE,395 +rinoh_typeface_texgyreheros-0.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +rinoh_typeface_texgyreheros-0.1.1.dist-info/METADATA,sha256=gJSUUEZ5PPhK2maBbRCQS1v-BERr_ZzteMtuaDmvFRs,1002 +rinoh_typeface_texgyreheros-0.1.1.dist-info/RECORD,, +rinoh_typeface_texgyreheros-0.1.1.dist-info/WHEEL,sha256=rNo05PbNqwnXiIHFsYm0m22u4Zm6YJtugFG2THx4w3g,92 +rinoh_typeface_texgyreheros-0.1.1.dist-info/entry_points.txt,sha256=Ln5y01_Gc7Gmj7tOGalOw-6_7T-fecHA3lkCQz5a58o,73 +rinoh_typeface_texgyreheros-0.1.1.dist-info/metadata.json,sha256=kHaZepbnZPGbKilo4Iic7UBRvucEqztqmMR-2aus1lg,901 +rinoh_typeface_texgyreheros-0.1.1.dist-info/top_level.txt,sha256=KVEBNcHG-Rj4mv_6SaP9cgtBE_R21LctNrtNdCr7crA,28 +rinoh_typeface_texgyreheros/GUST-FONT-LICENSE.txt,sha256=K9aa_8PaAHFRFvcT9X6rlwfpba81Yq0CFZh7FbnBb3M,1456 +rinoh_typeface_texgyreheros/README-TeX-Gyre-Heros.txt,sha256=fg3lEPQLPzAqLiIBpAmDUtxtHlRrsFh3yp5vdW5RQyQ,20588 +rinoh_typeface_texgyreheros/__init__.py,sha256=o6yr1odpIbPRgXV39AW0Zjq6k7AR222uVxfL4h8TmG4,1166 +rinoh_typeface_texgyreheros/__pycache__/__init__.cpython-312.pyc,, +rinoh_typeface_texgyreheros/texgyreheros-bold.otf,sha256=sXAWKDX078KIiG3UIxQG3Efhm2FM9EFoNmNVmdRKfWA,135204 +rinoh_typeface_texgyreheros/texgyreheros-bolditalic.otf,sha256=Fm_G0GjZyZdCgVVcs9cwNlU3qbZ2qyabtRY_WnVJZQU,135264 +rinoh_typeface_texgyreheros/texgyreheros-italic.otf,sha256=ZHPff6EHs_tL44lzcQr-IrBkDCrAdtUzfPEmvtmqEIw,139208 +rinoh_typeface_texgyreheros/texgyreheros-regular.otf,sha256=auGgnVqUA2e3qqqR7ovYosMzv-GT5wluI_kxNX1iCB8,133600 +rinoh_typeface_texgyreheros/texgyreheroscn-bold.otf,sha256=ujsaWRWZS0GG0N6-ge0KRfSC_eF1CnvFm0ZJ9QXkxic,133220 +rinoh_typeface_texgyreheros/texgyreheroscn-bolditalic.otf,sha256=r2jZ0uUcdWp7PqBbv8hQHVYcurfv0cV9pCAtr5K2k-k,138876 +rinoh_typeface_texgyreheros/texgyreheroscn-italic.otf,sha256=u6_VAo3UYx1TIO6MPKr8zzRUjf95SW9Tc1lu8WStoog,138940 +rinoh_typeface_texgyreheros/texgyreheroscn-regular.otf,sha256=Hs9lPkJF2OlekT-kPjz3zI8l4v8DuhbffbGp6DpAGno,132372 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/WHEEL new file mode 100644 index 000000000..bb7f7dba6 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.29.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/entry_points.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/entry_points.txt new file mode 100644 index 000000000..77b93ef3c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[rinoh.typefaces] +tex gyre heros = rinoh_typeface_texgyreheros:typeface + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/metadata.json b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/metadata.json new file mode 100644 index 000000000..1c2f1fc48 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Text Processing :: Fonts"], "extensions": {"python.details": {"contacts": [{"email": "brecht@mos6581.org", "name": "Brecht Machiels", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/brechtm/rinoh-typeface-texgyreheros"}}, "python.exports": {"rinoh.typefaces": {"tex gyre heros": "rinoh_typeface_texgyreheros:typeface"}}}, "extras": [], "generator": "bdist_wheel (0.29.0)", "keywords": ["opentype", "font"], "license": "GUST Font License (GFL)", "metadata_version": "2.0", "name": "rinoh-typeface-texgyreheros", "run_requires": [{"requires": ["rinohtype"]}], "summary": "TeX Gyre Heros typeface", "version": "0.1.1"} \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/top_level.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/top_level.txt new file mode 100644 index 000000000..a13600829 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros-0.1.1.dist-info/top_level.txt @@ -0,0 +1 @@ +rinoh_typeface_texgyreheros diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/GUST-FONT-LICENSE.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/GUST-FONT-LICENSE.txt new file mode 100644 index 000000000..60b55002e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/GUST-FONT-LICENSE.txt @@ -0,0 +1,30 @@ +% This is a preliminary version (2006-09-30), barring acceptance from +% the LaTeX Project Team and other feedback, of the GUST Font License. +% (GUST is the Polish TeX Users Group, http://www.gust.org.pl) +% +% For the most recent version of this license see +% http://www.gust.org.pl/fonts/licenses/GUST-FONT-LICENSE.txt +% or +% http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt +% +% This work may be distributed and/or modified under the conditions +% of the LaTeX Project Public License, either version 1.3c of this +% license or (at your option) any later version. +% +% Please also observe the following clause: +% 1) it is requested, but not legally required, that derived works be +% distributed only after changing the names of the fonts comprising this +% work and given in an accompanying "manifest", and that the +% files comprising the Work, as listed in the manifest, also be given +% new names. Any exceptions to this request are also given in the +% manifest. +% +% We recommend the manifest be given in a separate file named +% MANIFEST-.txt, where is some unique identification +% of the font family. If a separate "readme" file accompanies the Work, +% we recommend a name of the form README-.txt. +% +% The latest version of the LaTeX Project Public License is in +% http://www.latex-project.org/lppl.txt and version 1.3c or later +% is part of all distributions of LaTeX version 2006/05/20 or later. + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/README-TeX-Gyre-Heros.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/README-TeX-Gyre-Heros.txt new file mode 100644 index 000000000..812ff6049 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/README-TeX-Gyre-Heros.txt @@ -0,0 +1,356 @@ +########################################################################### +############ The TeX Gyre Collection of Fonts ############ +############ The font Heros ############ +########################################################################### + +Font: TeX Gyre Heros +Authors: Bogus\l{}aw Jackowski and Janusz M. Nowacki +Version: 2.004 +Date: 30 X 2009 +Downloads: http://www.gust.org.pl/projects/e-foundry/tex-gyre/heros + +License: + % Copyright 2007--2009 for TeX Gyre extensions by B. Jackowski + % and J.M. Nowacki (on behalf of TeX Users Groups). + % Vietnamese characters were added by Han The Thanh. + % + % This work can be freely used and distributed under + % the GUST Font License (GFL -- see GUST-FONT-LICENSE.txt) + % which is actually an instance of the LaTeX Project Public License + % (LPPL -- see http://www.latex-project.org/lppl.txt ). + % + % This work has the maintenance status "maintained". The Current Maintainer + % of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki. + % + % This work consists of the files listed + % in the MANIFEST-TeX-Gyre-Heros.txt file. + +########################################################################### +############ A BRIEF DESCRIPTION OF THE PACKAGE ############ +########################################################################### + +The current package contains the most recent version of the TeX Gyre +Heros family of fonts in the PostScript Type 1 and OpenType formats. +TeX Gyre Heros is based on the URW Nimbus Sans L kindly released by +URW++ Design and Development Inc. under GFL (independently of the GPL +release accompanying Ghostscript). The Vietnamese glyphs were added by +Han The Thanh. + +TeX Gyre Heros can be used as a replacement for a popular font Helvetica, +also known as Swiss (prepared by Max Miedinger with Eduard Hoffmann, 1957, +at the Haas Type Foundry). + +Note that the widths of nearly all glyphs made consistent with the Adobe +metric data (for the glyphs from the Adobe Standard Encoding): + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/hv______.afm + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/hvo_____.afm + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/hvb_____.afm + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/hvbo____.afm + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/hvn_____.afm + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/hvno____.afm + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/hvnb____.afm + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/hvnbo___.afm + +There are, however, a few exceptions (all of which we consider Adobe's +mistakes): + font glyph Adobe width TG width + -------------------------------------------- + qhvb slash 611 716 + " lslash 278 418 + -------------------------------------------- + qhvbi Lslash 611 716 + " lslash 278 418 + -------------------------------------------- + qhvr Lslash 556 627 + " dotlessi 278 222 + " exclamdown 333 278 + " lslash 222 305 + " oslash 611 556 + " questiondown 611 556 + -------------------------------------------- + qhvri Lslash 556 628 + " dotlessi 278 222 + " exclamdown 333 278 + " lslash 222 305 + " questiondown 611 556 + -------------------------------------------- + qhcb Lslash 501 618 + " lslash 228 402 + -------------------------------------------- + qhcbi Lslash 501 618 + " lslash 228 402 + -------------------------------------------- + qhcr Lslash 456 552 + " dotlessi 228 182 + " exclamdown 273 228 + " lslash 182 314 + " oslash 501 456 + " questiondown 501 456 + -------------------------------------------- + qhcri Lslash 456 552 + " dotlessi 228 182 + " exclamdown 273 228 + " lslash 182 314 + " questiondown 501 456 + + + * * * + +The TeX Gyre project, following the Latin Modern project, aims at providing +a rich collection of diacritical characters in the attempt to cover as many +Latin-based scripts as possible. To our knowledge, the repertoire of +characters covers all European languages as well as some other Latin-based +alphabets such as Vietnamese and Navajo; at the request of users, recent +extensions (following the enhancement of the Latin Modern collection) +provide glyphs sufficient for typesetting of romanized transliterations +of Arabic and Sanskrit scripts. We have frequently used the information +presented by Michael Everson at the ``The Alphabets of Europe'' +( http://www.evertype.com/alphabets/ ) web site. If you know about European +languages that are not covered completely or if some glyphs have apparently +wrong shapes -- please let us know. Note, however, that Greek glyphs +bear provisional character. + +The TeX Gyre Project was launched and is supported by TeX USERS GROUPS +(CS TUG, DANTE eV, GUST, NTG, TUG India, TUG). Hearty thanks to the +representatives of these groups and also to all people who helped with +comments, ideas, remarks, bug reports, objections, hints, consolations, etc. + + * * * + +The TeX Gyre Heros family consists of 8 text fonts: regular, +italic, bold and bold italic (qhvr, qhvri, qhvb, qhvbi) +and the condensed variants (qhvcr, qhvcri, qhvcb, qhvcbi). + +The TeX Gyre Heros family can be freely used and distributed +under the GUST Font License (see above) which is actually +an instance of the LaTeX Project Public License +(LPPL; see http://www.latex-project.org/lppl.txt ). + + * * * + +The package consists of the files in the directories conforming +to the TeX Directory Structure (v. 1.1). The directories contain: + +doc/fonts/tex-gyre this file, manifest, licence, test files, + and, moreover, selected files used as input + for generating OTFs (meant as a technical + documentation of the OTFs) +tex/latex/tex-gyre support for LaTeX (*.fd and *.sty files, + prepared by Marcin Woli\'nski) +fonts/enc/dvips/tex-gyre support for dvips (*.enc files); + NOTE: all fonts of the TeX Gyre family + share the same *.enc files with + a few exceptions: CS, QX, and RM encodings + for TeX Gyre Cursor (monospace) differ + from the standard ones (because of the + compatibility with Computer Modern + typewriter fonts requested by users), + and, moreover, CS, L7x, QX and RM encodings + for TeX Gyre Chorus exploit exceptionally + the `lslash_lslash' ligature +fonts/map/dvips/tex-gyre support for dvips (*.map files) +fonts/opentype/public/tex-gyre fonts in the OpenType format (*.otf files) +fonts/type1/public/tex-gyre PostScript (Type 1) font files and printer + font metric files (*.pfb and *.pfm, + respectively); +fonts/tfm/public/tex-gyre TeX font metric files (*.tfm) for: + -- CS (CSTUG) encoding (cs-*.tfm), + -- EC (Cork) encoding (ec-*.tfm), + -- L7x (Lithuanian) encoding (l7x-*.tfm), + -- QX (GUST) encoding (qx-*.tfm), + -- RM (Regular Math or OT1) encoding (rm-*.tfm), + -- Y&Y's TeX'n'ANSI aka LY1 encoding + (texnansi-*.tfm), + -- T5 (Vietnamese) encoding (t5-*.tfm), + -- Text Companion for EC fonts aka TS1 + (ts1-*.tfm). + Encodings CS, EC, L7x, QX, RM, Y&Y, and T5 + have their cap-small-caps counterparts + (*-sc.tfm). +fonts/afm/public/tex-gyre Adobe font metric files (*.afm); + +Email contact: Bogus\l{}aw Jackowski aka Jacko, B_Jackowski@gust.org.pl + + * * * + +In ConTeXt, support for TeX Gyre Collection can be found in the typescript +definition files: + + ... /tex/context/base/type-enc.tex + ... /tex/context/base/type-syn.tex + ... /tex/context/base/type-exa.tex + ... /tex/context/base/type-map.tex + +Additional encoding and map files can be found under: + + ... /texmf/fonts/map/pdftex/context + ... /texmf/fonts/enc/pdftex/context + + * * * + +All eight font files, qhvb, qhvbi, qhvr, qhvri, qhvcb, qhvcbi, qhvcr, qhvcri, +contain the same repertoire of 1089 characters, namely (these are the names +used in Type 1 fonts): + +A a a.sc Aacute aacute aacute.sc Abreve abreve abreve.sc Abreveacute +abreveacute abreveacute.sc Abrevedotbelow abrevedotbelow +abrevedotbelow.sc Abrevegrave abrevegrave abrevegrave.sc Abrevehookabove +abrevehookabove abrevehookabove.sc Abrevetilde abrevetilde abrevetilde.sc +Acaron acaron acaron.sc Acircumflex acircumflex acircumflex.sc +Acircumflexacute acircumflexacute acircumflexacute.sc Acircumflexdotbelow +acircumflexdotbelow acircumflexdotbelow.sc Acircumflexgrave +acircumflexgrave acircumflexgrave.sc Acircumflexhookabove +acircumflexhookabove acircumflexhookabove.sc Acircumflextilde +acircumflextilde acircumflextilde.sc Acute acute acute.dup acute.ts1 +Acutecomb acutecomb Adblgrave adblgrave adblgrave.sc Adieresis adieresis +adieresis.sc Adotbelow adotbelow adotbelow.sc AE ae AE.dup ae.dup ae.sc +AEacute aeacute aeacute.sc Agrave agrave agrave.sc Ahookabove ahookabove +ahookabove.sc Alpha alpha Amacron amacron amacron.sc ampersand anglearc +angleleft angleright Aogonek aogonek aogonek.sc Aogonekacute aogonekacute +aogonekacute.sc approxequal Aring aring aring.sc Aringacute aringacute +aringacute.sc arrowdown arrowleft arrowright arrowup asciicircum +asciitilde asterisk asteriskmath at at.alt Atilde atilde atilde.sc B b +b.sc backslash baht bar Beta beta bigcircle blanksymbol born braceleft +braceright bracketleft bracketright Breve breve breve.ts1 Breveacute +breveacute brevebelow brevebelowcomb brevebelowinverted +brevebelowinvertedcomb Brevecomb brevecomb Brevegrave brevegrave +Brevehookabove brevehookabove Breveinverted breveinverted +Breveinvertedcomb breveinvertedcomb Brevetilde brevetilde brokenbar +bullet C c c.sc Cacute cacute cacute.sc Caron caron caron.ts1 Caroncomb +caroncomb Ccaron ccaron ccaron.sc Ccedilla ccedilla ccedilla.sc +Ccircumflex ccircumflex ccircumflex.sc Cdotaccent cdotaccent +cdotaccent.sc cedilla cedilla.dup cent cent.oldstyle centigrade Chi chi +Circumflex circumflex circumflex.dup Circumflexacute circumflexacute +Circumflexcomb circumflexcomb Circumflexgrave circumflexgrave +Circumflexhookabove circumflexhookabove Circumflextilde circumflextilde +colon colonmonetary comma commaaccent commaaccentcomb copyleft copyright +copyright.alt currency cwm cwmascender cwmcapital cyrBreve cyrbreve +cyrFlex cyrflex D d d.sc dagger daggerdbl dblbracketleft dblbracketright +dblGrave dblgrave dblgrave.ts1 dblGravecomb dblgravecomb dblverticalbar +Dcaron dcaron dcaron.sc Dcroat dcroat dcroat.sc Ddotbelow ddotbelow +ddotbelow.sc degree Delta delta diameter died Dieresis dieresis +dieresis.dup dieresis.ts1 Dieresisacute dieresisacute Dieresiscaron +dieresiscaron Dieresiscomb dieresiscomb Dieresisgrave dieresisgrave +discount divide divorced Dlinebelow dlinebelow dlinebelow.sc dollar +dollar.oldstyle dong Dotaccent dotaccent Dotaccentcomb dotaccentcomb +dotbelow dotbelowcomb dotlessi dotlessi.sc dotlessj dotlessj.dup +dotlessj.sc E e e.sc Eacute eacute eacute.sc Ebreve ebreve ebreve.sc +Ecaron ecaron ecaron.sc Ecircumflex ecircumflex ecircumflex.sc +Ecircumflexacute ecircumflexacute ecircumflexacute.sc Ecircumflexdotbelow +ecircumflexdotbelow ecircumflexdotbelow.sc Ecircumflexgrave +ecircumflexgrave ecircumflexgrave.sc Ecircumflexhookabove +ecircumflexhookabove ecircumflexhookabove.sc Ecircumflextilde +ecircumflextilde ecircumflextilde.sc Edblgrave edblgrave edblgrave.sc +Edieresis edieresis edieresis.sc Edotaccent edotaccent edotaccent.sc +Edotbelow edotbelow edotbelow.sc Egrave egrave egrave.sc Ehookabove +ehookabove ehookabove.sc eight eight.oldstyle eight.prop +eight.taboldstyle ell ellipsis Emacron emacron emacron.sc emdash endash +Eng eng eng.sc Eogonek eogonek eogonek.sc Eogonekacute eogonekacute +eogonekacute.sc Epsilon epsilon epsilon.alt equal Ereversed ereversed +ereversed.sc estimated Eta eta Eth eth eth.sc Etilde etilde etilde.sc +eturned eturned.sc Euro exclam exclamdown F f f.sc f_k ff ffi ffl fi five +five.oldstyle five.prop five.taboldstyle fl florin four four.oldstyle +four.prop four.taboldstyle fraction fraction.alt G g g.sc Gacute gacute +gacute.sc Gamma gamma Gbreve gbreve gbreve.sc Gcaron gcaron gcaron.sc +Gcedilla gcedilla Gcircumflex gcircumflex gcircumflex.sc Gcommaaccent +gcommaaccent gcommaaccent.sc Gdotaccent gdotaccent gdotaccent.sc +Germandbls germandbls germandbls.dup germandbls.sc gnaborretni Grave +grave grave.ts1 Gravecomb gravecomb greater greaterequal +greaterorequalslant guarani guillemotleft guillemotright guilsinglleft +guilsinglright H h h.sc Hbar hbar hbar.sc Hbrevebelow hbrevebelow +hbrevebelow.sc Hcircumflex hcircumflex hcircumflex.sc Hdieresis hdieresis +hdieresis.sc Hdotbelow hdotbelow hdotbelow.sc Hookabove hookabove +Hookabovecomb hookabovecomb horn Htilde htilde htilde.sc Hungarumlaut +hungarumlaut hungarumlaut.ts1 Hungarumlautcomb hungarumlautcomb hyphen +hyphen.alt hyphen.dup hyphen.prop hyphendbl hyphendbl.alt I i i.sc Iacute +iacute iacute.sc Ibreve ibreve ibreve.sc Icaron icaron icaron.sc +Icircumflex icircumflex icircumflex.sc Idblgrave idblgrave idblgrave.sc +Idieresis idieresis idieresis.sc Idieresisacute idieresisacute +idieresisacute.sc Idotaccent idotaccent.sc Idotbelow idotbelow +idotbelow.sc Igrave igrave igrave.sc Ihookabove ihookabove ihookabove.sc +IJ ij ij.sc Imacron imacron Imacron.alt imacron.alt imacron.alt.sc +imacron.sc infinity interrobang Iogonek iogonek iogonek.sc Iogonekacute +iogonekacute iogonekacute.sc Iota iota Itilde itilde itilde.sc J j j.sc +J_caron Jacute jacute jacute.sc jcaron jcaron.sc Jcircumflex jcircumflex +jcircumflex.sc K k k.sc Kappa kappa Kcedilla kcedilla Kcommaaccent +kcommaaccent kcommaaccent.sc L l l.sc Lacute lacute lacute.sc Lambda +lambda Lcaron lcaron lcaron.sc Lcedilla lcedilla Lcommaaccent +lcommaaccent lcommaaccent.sc Ldot ldot ldot.sc Ldotbelow ldotbelow +ldotbelow.sc Ldotbelowmacron ldotbelowmacron ldotbelowmacron.sc leaf less +lessequal lessorequalslant linebelow linebelowcomb lira logicalnot longs +lozenge lscript Lslash lslash lslash.sc Ltilde ltilde ltilde.sc M m m.sc +Macron macron Macron.alt macron.alt macron.dup macron.ts1 macronbelow +macronbelowcomb Macroncomb macroncomb married Mdotbelow mdotbelow +mdotbelow.sc mho minus minusplus Mu mu mu.alt multiply musicalnote N n +n.sc Nacute nacute nacute.sc naira nbspace Ncaron ncaron ncaron.sc +Ncedilla ncedilla Ncommaaccent ncommaaccent ncommaaccent.sc Ndotaccent +ndotaccent ndotaccent.sc Ndotbelow ndotbelow ndotbelow.sc nine +nine.oldstyle nine.prop nine.taboldstyle notequal Ntilde ntilde ntilde.sc +Nu nu numbersign numero O o o.sc Oacute oacute oacute.sc Obreve obreve +obreve.sc Ocaron ocaron ocaron.sc Ocircumflex ocircumflex ocircumflex.sc +Ocircumflexacute ocircumflexacute ocircumflexacute.sc Ocircumflexdotbelow +ocircumflexdotbelow ocircumflexdotbelow.sc Ocircumflexgrave +ocircumflexgrave ocircumflexgrave.sc Ocircumflexhookabove +ocircumflexhookabove ocircumflexhookabove.sc Ocircumflextilde +ocircumflextilde ocircumflextilde.sc Odblgrave odblgrave odblgrave.sc +Odieresis odieresis odieresis.sc Odotbelow odotbelow odotbelow.sc OE oe +OE.dup oe.dup oe.sc ogonek Ograve ograve ograve.sc ohm Ohookabove +ohookabove ohookabove.sc Ohorn ohorn ohorn.sc Ohornacute ohornacute +ohornacute.sc Ohorndotbelow ohorndotbelow ohorndotbelow.sc Ohorngrave +ohorngrave ohorngrave.sc Ohornhookabove ohornhookabove ohornhookabove.sc +Ohorntilde ohorntilde ohorntilde.sc Ohungarumlaut ohungarumlaut +ohungarumlaut.sc Omacron omacron omacron.sc Omega omega Omicron omicron +one one.oldstyle one.prop one.superior one.taboldstyle onehalf onequarter +Oogonek oogonek oogonek.sc Oogonekacute oogonekacute oogonekacute.sc +openbullet ordfeminine ordmasculine Orogate orogate orogate.sc Oslash +oslash Oslash.dup oslash.dup oslash.sc Oslashacute oslashacute +oslashacute.sc Otilde otilde otilde.sc P p p.sc paragraph paragraph.alt +parenleft parenright partialdiff percent period periodcentered permyriad +perthousand perthousandzero peso Phi phi phi.alt Pi pi pi.alt plus +plusminus Psi psi published Q q q.sc question questiondown +quillbracketleft quillbracketright quotedbl quotedblbase quotedblbase.ts1 +quotedblleft quotedblright quoteleft quoteleft.dup quoteright +quoteright.dup quotesinglbase quotesinglbase.ts1 quotesingle +quotesingle.ts1 R r r.sc Racute racute racute.sc radical Rcaron rcaron +rcaron.sc Rcedilla rcedilla Rcommaaccent rcommaaccent rcommaaccent.sc +Rdblgrave rdblgrave rdblgrave.sc Rdotaccent rdotaccent rdotaccent.sc +Rdotbelow rdotbelow rdotbelow.sc Rdotbelowmacron rdotbelowmacron +rdotbelowmacron.sc recipe referencemark registered registered.alt Rho rho +rho.alt Ring ring Ringacute ringacute Ringcomb ringcomb ringhalfleft +ringhalfright S s s.sc Sacute sacute sacute.sc Scaron scaron scaron.sc +Scedilla scedilla scedilla.sc schwa Scircumflex scircumflex +scircumflex.sc Scommaaccent scommaaccent scommaaccent.sc Sdotbelow +sdotbelow sdotbelow.sc section semicolon servicemark seven seven.oldstyle +seven.prop seven.taboldstyle sfthyphen Sigma sigma sigma1 six +six.oldstyle six.prop six.taboldstyle slash space star sterling summation +suppress T t t.sc Tau tau Tcaron tcaron tcaron.sc Tcedilla tcedilla +tcedilla.sc Tcommaaccent tcommaaccent tcommaaccent.sc Tdieresis tdieresis +tdieresis.sc Tdotbelow tdotbelow tdotbelow.sc Theta theta theta.alt Thorn +thorn thorn.sc three three.oldstyle three.prop three.superior +three.taboldstyle threequarters threequartersemdash tie tieaccentcapital +tieaccentcapital.new tieaccentlowercase tieaccentlowercase.new Tilde +tilde tilde.dup tildebelow tildebelowcomb Tildecomb tildecomb tildelow +Tlinebelow tlinebelow tlinebelow.sc trademark Ttilde ttilde ttilde.sc +twelveudash two two.oldstyle two.prop two.superior two.taboldstyle U u +u.sc Uacute uacute uacute.sc Ubreve ubreve ubreve.sc Ubrevebelowinverted +ubrevebelowinverted ubrevebelowinverted.sc Ucaron ucaron ucaron.sc +Ucircumflex ucircumflex ucircumflex.sc Udblgrave udblgrave udblgrave.sc +Udieresis udieresis udieresis.sc Udieresisacute udieresisacute +udieresisacute.sc Udieresiscaron udieresiscaron udieresiscaron.sc +Udieresisgrave udieresisgrave udieresisgrave.sc Udotbelow udotbelow +udotbelow.sc Ugrave ugrave ugrave.sc Uhookabove uhookabove uhookabove.sc +Uhorn uhorn uhorn.sc Uhornacute uhornacute uhornacute.sc Uhorndotbelow +uhorndotbelow uhorndotbelow.sc Uhorngrave uhorngrave uhorngrave.sc +Uhornhookabove uhornhookabove uhornhookabove.sc Uhorntilde uhorntilde +uhorntilde.sc Uhungarumlaut uhungarumlaut uhungarumlaut.sc Umacron +umacron umacron.sc underscore undertie undertieinverted uni2010 uni2011 +uni2423 Uogonek uogonek uogonek.sc Upsilon upsilon Uring uring uring.sc +Utilde utilde utilde.sc V v v.sc W w w.sc Wacute wacute wacute.sc +Wcircumflex wcircumflex wcircumflex.sc Wdieresis wdieresis wdieresis.sc +weierstrass Wgrave wgrave wgrave.sc won X x x.sc Xi xi Y y y.sc Yacute +yacute yacute.sc Ycircumflex ycircumflex ycircumflex.sc Ydieresis +ydieresis ydieresis.sc Ydotbelow ydotbelow ydotbelow.sc yen Ygrave ygrave +ygrave.sc Yhookabove yhookabove yhookabove.sc Ytilde ytilde ytilde.sc Z z +z.sc Zacute zacute zacute.sc Zcaron zcaron zcaron.sc Zdotaccent +zdotaccent zdotaccent.sc Zdotbelow zdotbelow zdotbelow.sc zero +zero.oldstyle zero.prop zero.slash zero.taboldstyle Zeta zeta diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/__init__.py new file mode 100644 index 000000000..02c9aa2b7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/__init__.py @@ -0,0 +1,28 @@ +from os import path + +from rinoh.font import Typeface +from rinoh.font.style import REGULAR, BOLD, ITALIC, CONDENSED +from rinoh.font.opentype import OpenTypeFont + + +__all__ = ['typeface'] + + +def otf(style, variant=''): + filename = 'texgyreheros{}-{}.otf'.format(variant, style) + return path.join(path.dirname(__file__), filename) + + +typeface = Typeface('TeX Gyre Heros', + OpenTypeFont(otf('regular'), weight=REGULAR), + OpenTypeFont(otf('italic'), weight=REGULAR, slant=ITALIC), + OpenTypeFont(otf('bold'), weight=BOLD), + OpenTypeFont(otf('bolditalic'), weight=BOLD, slant=ITALIC), + OpenTypeFont(otf('regular', 'cn'), + width=CONDENSED, weight=REGULAR), + OpenTypeFont(otf('italic', 'cn'), + width=CONDENSED, weight=REGULAR, slant=ITALIC), + OpenTypeFont(otf('bold', 'cn'), + width=CONDENSED, weight=BOLD), + OpenTypeFont(otf('bolditalic', 'cn'), + width=CONDENSED, weight=BOLD, slant=ITALIC)) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..f28d98d51 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-bold.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-bold.otf new file mode 100644 index 000000000..4c94009f7 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-bold.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-bolditalic.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-bolditalic.otf new file mode 100644 index 000000000..2f4e007cc Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-bolditalic.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-italic.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-italic.otf new file mode 100644 index 000000000..bd5bdfef4 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-italic.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-regular.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-regular.otf new file mode 100644 index 000000000..cf83f0146 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheros-regular.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-bold.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-bold.otf new file mode 100644 index 000000000..8016e5be2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-bold.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-bolditalic.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-bolditalic.otf new file mode 100644 index 000000000..d60b728fe Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-bolditalic.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-italic.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-italic.otf new file mode 100644 index 000000000..092a3427a Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-italic.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-regular.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-regular.otf new file mode 100644 index 000000000..80c214567 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyreheros/texgyreheroscn-regular.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/DESCRIPTION.rst b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/DESCRIPTION.rst new file mode 100644 index 000000000..e6c1b20e3 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/DESCRIPTION.rst @@ -0,0 +1,12 @@ +============================= +rinoh-typeface-texgyrepagella +============================= + +This package provides the `TeX Gyre Pagella`_ typeface for use with rinohtype_. +TeX Gyre Pagella is based on URW Palladio L and can be used as a replacement +for Palatino. + +.. _TeX Gyre Pagella: http://www.gust.org.pl/projects/e-foundry/tex-gyre/pagella +.. _rinohtype: https://github.com/brechtm/rinohtype#readme + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/METADATA new file mode 100644 index 000000000..b1200b2f6 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/METADATA @@ -0,0 +1,30 @@ +Metadata-Version: 2.0 +Name: rinoh-typeface-texgyrepagella +Version: 0.1.1 +Summary: TeX Gyre Pagella typeface +Home-page: https://github.com/brechtm/rinoh-typeface-texgyrepagella +Author: Brecht Machiels +Author-email: brecht@mos6581.org +License: GUST Font License (GFL) +Keywords: opentype font +Platform: UNKNOWN +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: End Users/Desktop +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Text Processing :: Fonts +Requires-Dist: rinohtype + +============================= +rinoh-typeface-texgyrepagella +============================= + +This package provides the `TeX Gyre Pagella`_ typeface for use with rinohtype_. +TeX Gyre Pagella is based on URW Palladio L and can be used as a replacement +for Palatino. + +.. _TeX Gyre Pagella: http://www.gust.org.pl/projects/e-foundry/tex-gyre/pagella +.. _rinohtype: https://github.com/brechtm/rinohtype#readme + + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/RECORD new file mode 100644 index 000000000..a622faee5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/RECORD @@ -0,0 +1,16 @@ +rinoh_typeface_texgyrepagella-0.1.1.dist-info/DESCRIPTION.rst,sha256=HzK0G2JzTw8vRvenr6DAIuO4DgDXtrc1SvF7lvBpLxw,405 +rinoh_typeface_texgyrepagella-0.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +rinoh_typeface_texgyrepagella-0.1.1.dist-info/METADATA,sha256=nWLtYzlHYOdSXNfaRnByGl41u9CPKl9Zv-Xt4oRjs1Y,1018 +rinoh_typeface_texgyrepagella-0.1.1.dist-info/RECORD,, +rinoh_typeface_texgyrepagella-0.1.1.dist-info/WHEEL,sha256=rNo05PbNqwnXiIHFsYm0m22u4Zm6YJtugFG2THx4w3g,92 +rinoh_typeface_texgyrepagella-0.1.1.dist-info/entry_points.txt,sha256=mYif_TNrIVAouLGnq9JUOo5-HlD2cKpDMWDhIFGBS8Q,77 +rinoh_typeface_texgyrepagella-0.1.1.dist-info/metadata.json,sha256=S7_ff2WpxdVIUKlNqy13Q6b6NVKKNSEwpk7PdhW3N0Q,911 +rinoh_typeface_texgyrepagella-0.1.1.dist-info/top_level.txt,sha256=x4kuC6Rk0tbexvOxnrFH3JtpOybNiLuq87_SnDUm3xc,30 +rinoh_typeface_texgyrepagella/GUST-FONT-LICENSE.txt,sha256=K9aa_8PaAHFRFvcT9X6rlwfpba81Yq0CFZh7FbnBb3M,1456 +rinoh_typeface_texgyrepagella/README-TeX-Gyre-Pagella.txt,sha256=v79p8VK0YtisQZnQr35M633-vl2mvN1DYvbxMu3R2AU,18776 +rinoh_typeface_texgyrepagella/__init__.py,sha256=wi7m8lNHJfUXYi6aBUxmsZeydzLN3RbyJ30JsJNpQBM,627 +rinoh_typeface_texgyrepagella/__pycache__/__init__.cpython-312.pyc,, +rinoh_typeface_texgyrepagella/texgyrepagella-bold.otf,sha256=0f26FJgruLHFAOp9DoIOzsLvpwS9jOav867eVydu8YQ,143844 +rinoh_typeface_texgyrepagella/texgyrepagella-bolditalic.otf,sha256=pJoDjVXu-Ey3p7mk93R8gcZIunxjTJ9yrE4XCGkCS5k,134516 +rinoh_typeface_texgyrepagella/texgyrepagella-italic.otf,sha256=4DLS_qtHqdQYt9e4TTzDjZcwrkroyHaUOwr1beVbGv4,146432 +rinoh_typeface_texgyrepagella/texgyrepagella-regular.otf,sha256=IhVgFDU8AUwa1q6gBN5I3laoQ81z5e5dL7wV8Se1wlI,144472 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/WHEEL new file mode 100644 index 000000000..bb7f7dba6 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.29.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/entry_points.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/entry_points.txt new file mode 100644 index 000000000..e6f550e57 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[rinoh.typefaces] +tex gyre pagella = rinoh_typeface_texgyrepagella:typeface + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/metadata.json b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/metadata.json new file mode 100644 index 000000000..64c13bef7 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Text Processing :: Fonts"], "extensions": {"python.details": {"contacts": [{"email": "brecht@mos6581.org", "name": "Brecht Machiels", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/brechtm/rinoh-typeface-texgyrepagella"}}, "python.exports": {"rinoh.typefaces": {"tex gyre pagella": "rinoh_typeface_texgyrepagella:typeface"}}}, "extras": [], "generator": "bdist_wheel (0.29.0)", "keywords": ["opentype", "font"], "license": "GUST Font License (GFL)", "metadata_version": "2.0", "name": "rinoh-typeface-texgyrepagella", "run_requires": [{"requires": ["rinohtype"]}], "summary": "TeX Gyre Pagella typeface", "version": "0.1.1"} \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/top_level.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/top_level.txt new file mode 100644 index 000000000..573683830 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella-0.1.1.dist-info/top_level.txt @@ -0,0 +1 @@ +rinoh_typeface_texgyrepagella diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/GUST-FONT-LICENSE.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/GUST-FONT-LICENSE.txt new file mode 100644 index 000000000..60b55002e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/GUST-FONT-LICENSE.txt @@ -0,0 +1,30 @@ +% This is a preliminary version (2006-09-30), barring acceptance from +% the LaTeX Project Team and other feedback, of the GUST Font License. +% (GUST is the Polish TeX Users Group, http://www.gust.org.pl) +% +% For the most recent version of this license see +% http://www.gust.org.pl/fonts/licenses/GUST-FONT-LICENSE.txt +% or +% http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt +% +% This work may be distributed and/or modified under the conditions +% of the LaTeX Project Public License, either version 1.3c of this +% license or (at your option) any later version. +% +% Please also observe the following clause: +% 1) it is requested, but not legally required, that derived works be +% distributed only after changing the names of the fonts comprising this +% work and given in an accompanying "manifest", and that the +% files comprising the Work, as listed in the manifest, also be given +% new names. Any exceptions to this request are also given in the +% manifest. +% +% We recommend the manifest be given in a separate file named +% MANIFEST-.txt, where is some unique identification +% of the font family. If a separate "readme" file accompanies the Work, +% we recommend a name of the form README-.txt. +% +% The latest version of the LaTeX Project Public License is in +% http://www.latex-project.org/lppl.txt and version 1.3c or later +% is part of all distributions of LaTeX version 2006/05/20 or later. + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/README-TeX-Gyre-Pagella.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/README-TeX-Gyre-Pagella.txt new file mode 100644 index 000000000..30c544798 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/README-TeX-Gyre-Pagella.txt @@ -0,0 +1,315 @@ +########################################################################### +############ The TeX Gyre Collection of Fonts ############ +############ The font Pagella ############ +########################################################################### + +Font: TeX Gyre Pagella +Authors: Bogus\l{}aw Jackowski and Janusz M. Nowacki +Version: 2.004 +Date: 7 X 2009 +Downloads: http://www.gust.org.pl/projects/e-foundry/tex-gyre/pagella + +License: + % Copyright 2006--2009 for TeX Gyre extensions by B. Jackowski + % and J.M. Nowacki (on behalf of TeX Users Groups). + % Vietnamese characters were added by Han The Thanh. + % + % This work can be freely used and distributed under + % the GUST Font License (GFL -- see GUST-FONT-LICENSE.txt) + % which is actually an instance of the LaTeX Project Public License + % (LPPL -- see http://www.latex-project.org/lppl.txt ). + % + % This work has the maintenance status "maintained". The Current Maintainer + % of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki. + % + % This work consists of the files listed + % in the MANIFEST-TeX-Gyre-Pagella.txt file. + +########################################################################### +############ A BRIEF DESCRIPTION OF THE PACKAGE ############ +########################################################################### + +The current package contains the most recent version of the TeX Gyre +Pagella family of fonts in the PostScript Type 1 and OpenType formats. +TeX Gyre Pagella is based on the URW Palladio L kindly released +by URW++ Design and Development Inc. under GFL (independently of the GPL +release accompanying Ghostscript). The Vietnamese glyphs were added +by Han The Thanh. + +TeX Gyre Pagella can be used as a replacement for the renowned Palatino +font (designed by Hermann Zapf in the 1940's for the Stempel type foundry; +an interesting lifestory of Hermann Zapf can be found at: +http://www.linotype.com/1494/theschoolyears.html ); + +Note that the widths of the TeX Gyre Pagella glyphs are almost consistent +with the relevant Adobe metric data (for the glyphs from the Adobe Standard +Encoding): + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/pob_____.afm + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/pobi____.afm + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/poi_____.afm + ftp://ftp.adobe.com/pub/adobe/type/win/all/afmfiles/base35/por_____.afm + +The only exception is `perthousand' in the regular variant (Adobe: 1144; +TeX Gyre: 1000 which is consistent with the width of perthousand in other +variants). The discrepancy (in the regular variant) between the width +of the glyph `i' (291) and the width of `dotlessi' (287) was preserved +as optically irrelevant. + + * * * + +The TeX Gyre project, following the Latin Modern project, aims at providing +a rich collection of diacritical characters in the attempt to cover as many +Latin-based scripts as possible. To our knowledge, the repertoire of +characters covers all European languages as well as some other Latin-based +alphabets such as Vietnamese and Navajo; at the request of users, recent +extensions (following the enhancement of the Latin Modern collection) +provide glyphs sufficient for typesetting of romanized transliterations +of Arabic and Sanskrit scripts. We have frequently used the information +presented by Michael Everson at the ``The Alphabets of Europe'' +( http://www.evertype.com/alphabets/ ) web site. If you know about European +languages that are not covered completely or if some glyphs have apparently +wrong shapes -- please let us know. Note, however, that Greek glyphs +bear provisional character. + +The TeX Gyre Project was launched and is supported by TeX USERS GROUPS +(CS TUG, DANTE eV, GUST, NTG, TUG India, TUG). Hearty thanks to the +representatives of these groups and also to all people who helped with +comments, ideas, remarks, bug reports, objections, hints, consolations, etc. + + * * * + +The TeX Gyre Pagella family consists of 4 text fonts: regular, +italic, bold and bold italic (qplr, qplri, qplb, qplbi). + +The TeX Gyre Pagella family can be freely used and distributed +under the GUST Font License (see above) which is actually +an instance of the LaTeX Project Public License +(LPPL; see http://www.latex-project.org/lppl.txt ). + + * * * + +The package consists of the files in the directories conforming +to the TeX Directory Structure (v. 1.1). The directories contain: + +doc/fonts/tex-gyre this file, manifest, licence, test files, + and, moreover, selected files used as input + for generating OTFs (meant as a technical + documentation of the OTFs) +tex/latex/tex-gyre support for LaTeX (*.fd and *.sty files, + prepared by Marcin Woli\'nski) +fonts/enc/dvips/tex-gyre support for dvips (*.enc files); + NOTE: all fonts of the TeX Gyre family + share the same *.enc files with + a few exceptions: CS, QX, and RM encodings + for TeX Gyre Cursor (monospace) differ + from the standard ones (because of the + compatibility with Computer Modern + typewriter fonts requested by users), + and, moreover, CS, L7x, QX and RM encodings + for TeX Gyre Chorus exploit exceptionally + the `lslash_lslash' ligature +fonts/map/dvips/tex-gyre support for dvips (*.map files) +fonts/opentype/public/tex-gyre fonts in the OpenType format (*.otf files) +fonts/type1/public/tex-gyre PostScript (Type 1) font files and printer + font metric files (*.pfb and *.pfm, + respectively); +fonts/tfm/public/tex-gyre TeX font metric files (*.tfm) for: + -- CS (CSTUG) encoding (cs-*.tfm), + -- EC (Cork) encoding (ec-*.tfm), + -- L7x (Lithuanian) encoding (l7x-*.tfm), + -- QX (GUST) encoding (qx-*.tfm), + -- RM (Regular Math or OT1) encoding (rm-*.tfm), + -- Y&Y's TeX'n'ANSI aka LY1 encoding + (texnansi-*.tfm), + -- T5 (Vietnamese) encoding (t5-*.tfm), + -- Text Companion for EC fonts aka TS1 + (ts1-*.tfm). + Encodings CS, EC, L7x, QX, RM, Y&Y, and T5 + have their cap-small-caps counterparts + (*-sc.tfm). +fonts/afm/public/tex-gyre Adobe font metric files (*.afm); + +Email contact: Bogus\l{}aw Jackowski aka Jacko, B_Jackowski@gust.org.pl + + * * * + +In ConTeXt, support for TeX Gyre Collection can be found in the typescript +definition files: + + ... /tex/context/base/type-enc.tex + ... /tex/context/base/type-syn.tex + ... /tex/context/base/type-exa.tex + ... /tex/context/base/type-map.tex + +Additional encoding and map files can be found under: + + ... /texmf/fonts/map/pdftex/context + ... /texmf/fonts/enc/pdftex/context + + * * * + +All four font files, qplb, qplbi, qplr, qplri, contain the same repertoire +of 1089 characters, namely (these are the names used in Type 1 fonts): + +A a a.sc Aacute aacute aacute.sc Abreve abreve abreve.sc Abreveacute +abreveacute abreveacute.sc Abrevedotbelow abrevedotbelow +abrevedotbelow.sc Abrevegrave abrevegrave abrevegrave.sc Abrevehookabove +abrevehookabove abrevehookabove.sc Abrevetilde abrevetilde abrevetilde.sc +Acaron acaron acaron.sc Acircumflex acircumflex acircumflex.sc +Acircumflexacute acircumflexacute acircumflexacute.sc Acircumflexdotbelow +acircumflexdotbelow acircumflexdotbelow.sc Acircumflexgrave +acircumflexgrave acircumflexgrave.sc Acircumflexhookabove +acircumflexhookabove acircumflexhookabove.sc Acircumflextilde +acircumflextilde acircumflextilde.sc Acute acute acute.dup acute.ts1 +Acutecomb acutecomb Adblgrave adblgrave adblgrave.sc Adieresis adieresis +adieresis.sc Adotbelow adotbelow adotbelow.sc AE ae AE.dup ae.dup ae.sc +AEacute aeacute aeacute.sc Agrave agrave agrave.sc Ahookabove ahookabove +ahookabove.sc Alpha alpha Amacron amacron amacron.sc ampersand anglearc +angleleft angleright Aogonek aogonek aogonek.sc Aogonekacute aogonekacute +aogonekacute.sc approxequal Aring aring aring.sc Aringacute aringacute +aringacute.sc arrowdown arrowleft arrowright arrowup asciicircum +asciitilde asterisk asteriskmath at at.alt Atilde atilde atilde.sc B b +b.sc backslash baht bar Beta beta bigcircle blanksymbol born braceleft +braceright bracketleft bracketright Breve breve breve.ts1 Breveacute +breveacute brevebelow brevebelowcomb brevebelowinverted +brevebelowinvertedcomb Brevecomb brevecomb Brevegrave brevegrave +Brevehookabove brevehookabove Breveinverted breveinverted +Breveinvertedcomb breveinvertedcomb Brevetilde brevetilde brokenbar +bullet C c c.sc Cacute cacute cacute.sc Caron caron caron.ts1 Caroncomb +caroncomb Ccaron ccaron ccaron.sc Ccedilla ccedilla ccedilla.sc +Ccircumflex ccircumflex ccircumflex.sc Cdotaccent cdotaccent +cdotaccent.sc cedilla cedilla.dup cent cent.oldstyle centigrade Chi chi +Circumflex circumflex circumflex.dup Circumflexacute circumflexacute +Circumflexcomb circumflexcomb Circumflexgrave circumflexgrave +Circumflexhookabove circumflexhookabove Circumflextilde circumflextilde +colon colonmonetary comma commaaccent commaaccentcomb copyleft copyright +copyright.alt currency cwm cwmascender cwmcapital cyrBreve cyrbreve +cyrFlex cyrflex D d d.sc dagger daggerdbl dblbracketleft dblbracketright +dblGrave dblgrave dblgrave.ts1 dblGravecomb dblgravecomb dblverticalbar +Dcaron dcaron dcaron.sc Dcroat dcroat dcroat.sc Ddotbelow ddotbelow +ddotbelow.sc degree Delta delta diameter died Dieresis dieresis +dieresis.dup dieresis.ts1 Dieresisacute dieresisacute Dieresiscaron +dieresiscaron Dieresiscomb dieresiscomb Dieresisgrave dieresisgrave +discount divide divorced Dlinebelow dlinebelow dlinebelow.sc dollar +dollar.oldstyle dong Dotaccent dotaccent Dotaccentcomb dotaccentcomb +dotbelow dotbelowcomb dotlessi dotlessi.sc dotlessj dotlessj.dup +dotlessj.sc E e e.sc Eacute eacute eacute.sc Ebreve ebreve ebreve.sc +Ecaron ecaron ecaron.sc Ecircumflex ecircumflex ecircumflex.sc +Ecircumflexacute ecircumflexacute ecircumflexacute.sc Ecircumflexdotbelow +ecircumflexdotbelow ecircumflexdotbelow.sc Ecircumflexgrave +ecircumflexgrave ecircumflexgrave.sc Ecircumflexhookabove +ecircumflexhookabove ecircumflexhookabove.sc Ecircumflextilde +ecircumflextilde ecircumflextilde.sc Edblgrave edblgrave edblgrave.sc +Edieresis edieresis edieresis.sc Edotaccent edotaccent edotaccent.sc +Edotbelow edotbelow edotbelow.sc Egrave egrave egrave.sc Ehookabove +ehookabove ehookabove.sc eight eight.oldstyle eight.prop +eight.taboldstyle ell ellipsis Emacron emacron emacron.sc emdash endash +Eng eng eng.sc Eogonek eogonek eogonek.sc Eogonekacute eogonekacute +eogonekacute.sc Epsilon epsilon epsilon.alt equal Ereversed ereversed +ereversed.sc estimated Eta eta Eth eth eth.sc Etilde etilde etilde.sc +eturned eturned.sc Euro exclam exclamdown F f f.sc f_k ff ffi ffl fi five +five.oldstyle five.prop five.taboldstyle fl florin four four.oldstyle +four.prop four.taboldstyle fraction fraction.alt G g g.sc Gacute gacute +gacute.sc Gamma gamma Gbreve gbreve gbreve.sc Gcaron gcaron gcaron.sc +Gcedilla gcedilla Gcircumflex gcircumflex gcircumflex.sc Gcommaaccent +gcommaaccent gcommaaccent.sc Gdotaccent gdotaccent gdotaccent.sc +Germandbls germandbls germandbls.dup germandbls.sc gnaborretni Grave +grave grave.ts1 Gravecomb gravecomb greater greaterequal +greaterorequalslant guarani guillemotleft guillemotright guilsinglleft +guilsinglright H h h.sc Hbar hbar hbar.sc Hbrevebelow hbrevebelow +hbrevebelow.sc Hcircumflex hcircumflex hcircumflex.sc Hdieresis hdieresis +hdieresis.sc Hdotbelow hdotbelow hdotbelow.sc Hookabove hookabove +Hookabovecomb hookabovecomb horn Htilde htilde htilde.sc Hungarumlaut +hungarumlaut hungarumlaut.ts1 Hungarumlautcomb hungarumlautcomb hyphen +hyphen.alt hyphen.dup hyphen.prop hyphendbl hyphendbl.alt I i i.sc Iacute +iacute iacute.sc Ibreve ibreve ibreve.sc Icaron icaron icaron.sc +Icircumflex icircumflex icircumflex.sc Idblgrave idblgrave idblgrave.sc +Idieresis idieresis idieresis.sc Idieresisacute idieresisacute +idieresisacute.sc Idotaccent idotaccent.sc Idotbelow idotbelow +idotbelow.sc Igrave igrave igrave.sc Ihookabove ihookabove ihookabove.sc +IJ ij ij.sc Imacron imacron Imacron.alt imacron.alt imacron.alt.sc +imacron.sc infinity interrobang Iogonek iogonek iogonek.sc Iogonekacute +iogonekacute iogonekacute.sc Iota iota Itilde itilde itilde.sc J j j.sc +J_caron Jacute jacute jacute.sc jcaron jcaron.sc Jcircumflex jcircumflex +jcircumflex.sc K k k.sc Kappa kappa Kcedilla kcedilla Kcommaaccent +kcommaaccent kcommaaccent.sc L l l.sc Lacute lacute lacute.sc Lambda +lambda Lcaron lcaron lcaron.sc Lcedilla lcedilla Lcommaaccent +lcommaaccent lcommaaccent.sc Ldot ldot ldot.sc Ldotbelow ldotbelow +ldotbelow.sc Ldotbelowmacron ldotbelowmacron ldotbelowmacron.sc leaf less +lessequal lessorequalslant linebelow linebelowcomb lira logicalnot longs +lozenge lscript Lslash lslash lslash.sc Ltilde ltilde ltilde.sc M m m.sc +Macron macron Macron.alt macron.alt macron.dup macron.ts1 macronbelow +macronbelowcomb Macroncomb macroncomb married Mdotbelow mdotbelow +mdotbelow.sc mho minus minusplus Mu mu mu.alt multiply musicalnote N n +n.sc Nacute nacute nacute.sc naira nbspace Ncaron ncaron ncaron.sc +Ncedilla ncedilla Ncommaaccent ncommaaccent ncommaaccent.sc Ndotaccent +ndotaccent ndotaccent.sc Ndotbelow ndotbelow ndotbelow.sc nine +nine.oldstyle nine.prop nine.taboldstyle notequal Ntilde ntilde ntilde.sc +Nu nu numbersign numero O o o.sc Oacute oacute oacute.sc Obreve obreve +obreve.sc Ocaron ocaron ocaron.sc Ocircumflex ocircumflex ocircumflex.sc +Ocircumflexacute ocircumflexacute ocircumflexacute.sc Ocircumflexdotbelow +ocircumflexdotbelow ocircumflexdotbelow.sc Ocircumflexgrave +ocircumflexgrave ocircumflexgrave.sc Ocircumflexhookabove +ocircumflexhookabove ocircumflexhookabove.sc Ocircumflextilde +ocircumflextilde ocircumflextilde.sc Odblgrave odblgrave odblgrave.sc +Odieresis odieresis odieresis.sc Odotbelow odotbelow odotbelow.sc OE oe +OE.dup oe.dup oe.sc ogonek Ograve ograve ograve.sc ohm Ohookabove +ohookabove ohookabove.sc Ohorn ohorn ohorn.sc Ohornacute ohornacute +ohornacute.sc Ohorndotbelow ohorndotbelow ohorndotbelow.sc Ohorngrave +ohorngrave ohorngrave.sc Ohornhookabove ohornhookabove ohornhookabove.sc +Ohorntilde ohorntilde ohorntilde.sc Ohungarumlaut ohungarumlaut +ohungarumlaut.sc Omacron omacron omacron.sc Omega omega Omicron omicron +one one.oldstyle one.prop one.superior one.taboldstyle onehalf onequarter +Oogonek oogonek oogonek.sc Oogonekacute oogonekacute oogonekacute.sc +openbullet ordfeminine ordmasculine Orogate orogate orogate.sc Oslash +oslash Oslash.dup oslash.dup oslash.sc Oslashacute oslashacute +oslashacute.sc Otilde otilde otilde.sc P p p.sc paragraph paragraph.alt +parenleft parenright partialdiff percent period periodcentered permyriad +perthousand perthousandzero peso Phi phi phi.alt Pi pi pi.alt plus +plusminus Psi psi published Q q q.sc question questiondown +quillbracketleft quillbracketright quotedbl quotedblbase quotedblbase.ts1 +quotedblleft quotedblright quoteleft quoteleft.dup quoteright +quoteright.dup quotesinglbase quotesinglbase.ts1 quotesingle +quotesingle.ts1 R r r.sc Racute racute racute.sc radical Rcaron rcaron +rcaron.sc Rcedilla rcedilla Rcommaaccent rcommaaccent rcommaaccent.sc +Rdblgrave rdblgrave rdblgrave.sc Rdotaccent rdotaccent rdotaccent.sc +Rdotbelow rdotbelow rdotbelow.sc Rdotbelowmacron rdotbelowmacron +rdotbelowmacron.sc recipe referencemark registered registered.alt Rho rho +rho.alt Ring ring Ringacute ringacute Ringcomb ringcomb ringhalfleft +ringhalfright S s s.sc Sacute sacute sacute.sc Scaron scaron scaron.sc +Scedilla scedilla scedilla.sc schwa Scircumflex scircumflex +scircumflex.sc Scommaaccent scommaaccent scommaaccent.sc Sdotbelow +sdotbelow sdotbelow.sc section semicolon servicemark seven seven.oldstyle +seven.prop seven.taboldstyle sfthyphen Sigma sigma sigma1 six +six.oldstyle six.prop six.taboldstyle slash space star sterling summation +suppress T t t.sc Tau tau Tcaron tcaron tcaron.sc Tcedilla tcedilla +tcedilla.sc Tcommaaccent tcommaaccent tcommaaccent.sc Tdieresis tdieresis +tdieresis.sc Tdotbelow tdotbelow tdotbelow.sc Theta theta theta.alt Thorn +thorn thorn.sc three three.oldstyle three.prop three.superior +three.taboldstyle threequarters threequartersemdash tie tieaccentcapital +tieaccentcapital.new tieaccentlowercase tieaccentlowercase.new Tilde +tilde tilde.dup tildebelow tildebelowcomb Tildecomb tildecomb tildelow +Tlinebelow tlinebelow tlinebelow.sc trademark Ttilde ttilde ttilde.sc +twelveudash two two.oldstyle two.prop two.superior two.taboldstyle U u +u.sc Uacute uacute uacute.sc Ubreve ubreve ubreve.sc Ubrevebelowinverted +ubrevebelowinverted ubrevebelowinverted.sc Ucaron ucaron ucaron.sc +Ucircumflex ucircumflex ucircumflex.sc Udblgrave udblgrave udblgrave.sc +Udieresis udieresis udieresis.sc Udieresisacute udieresisacute +udieresisacute.sc Udieresiscaron udieresiscaron udieresiscaron.sc +Udieresisgrave udieresisgrave udieresisgrave.sc Udotbelow udotbelow +udotbelow.sc Ugrave ugrave ugrave.sc Uhookabove uhookabove uhookabove.sc +Uhorn uhorn uhorn.sc Uhornacute uhornacute uhornacute.sc Uhorndotbelow +uhorndotbelow uhorndotbelow.sc Uhorngrave uhorngrave uhorngrave.sc +Uhornhookabove uhornhookabove uhornhookabove.sc Uhorntilde uhorntilde +uhorntilde.sc Uhungarumlaut uhungarumlaut uhungarumlaut.sc Umacron +umacron umacron.sc underscore undertie undertieinverted uni2010 uni2011 +uni2423 Uogonek uogonek uogonek.sc Upsilon upsilon Uring uring uring.sc +Utilde utilde utilde.sc V v v.sc W w w.sc Wacute wacute wacute.sc +Wcircumflex wcircumflex wcircumflex.sc Wdieresis wdieresis wdieresis.sc +weierstrass Wgrave wgrave wgrave.sc won X x x.sc Xi xi Y y y.sc Yacute +yacute yacute.sc Ycircumflex ycircumflex ycircumflex.sc Ydieresis +ydieresis ydieresis.sc Ydotbelow ydotbelow ydotbelow.sc yen Ygrave ygrave +ygrave.sc Yhookabove yhookabove yhookabove.sc Ytilde ytilde ytilde.sc Z z +z.sc Zacute zacute zacute.sc Zcaron zcaron zcaron.sc Zdotaccent +zdotaccent zdotaccent.sc Zdotbelow zdotbelow zdotbelow.sc zero +zero.oldstyle zero.prop zero.slash zero.taboldstyle Zeta zeta diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/__init__.py new file mode 100644 index 000000000..b9b98037f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/__init__.py @@ -0,0 +1,20 @@ +from os import path + +from rinoh.font import Typeface +from rinoh.font.style import REGULAR, BOLD, ITALIC +from rinoh.font.opentype import OpenTypeFont + + +__all__ = ['typeface'] + + +def otf(style): + filename = 'texgyrepagella-{}.otf'.format(style) + return path.join(path.dirname(__file__), filename) + + +typeface = Typeface('TeX Gyre Pagella', + OpenTypeFont(otf('regular'), weight=REGULAR), + OpenTypeFont(otf('italic'), weight=REGULAR, slant=ITALIC), + OpenTypeFont(otf('bold'), weight=BOLD), + OpenTypeFont(otf('bolditalic'), weight=BOLD, slant=ITALIC)) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..cd76850a1 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-bold.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-bold.otf new file mode 100644 index 000000000..7a08a659c Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-bold.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-bolditalic.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-bolditalic.otf new file mode 100644 index 000000000..5f2b5b188 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-bolditalic.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-italic.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-italic.otf new file mode 100644 index 000000000..a464dd5d7 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-italic.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-regular.otf b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-regular.otf new file mode 100644 index 000000000..40a6cbafb Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinoh_typeface_texgyrepagella/texgyrepagella-regular.otf differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/INSTALLER b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/LICENSE b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/LICENSE new file mode 100644 index 000000000..dba13ed2d --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/METADATA b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/METADATA new file mode 100644 index 000000000..7c95551a1 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/METADATA @@ -0,0 +1,235 @@ +Metadata-Version: 2.1 +Name: rinohtype +Version: 0.5.5 +Summary: The Python document processor +Home-page: https://github.com/brechtm/rinohtype +License: AGPL-3.0-only +Keywords: typesetting,rst,pdf,opentype +Author: Brecht Machiels +Author-email: brecht@mos6581.org +Requires-Python: >=3.8.0,<4.0.0 +Classifier: Development Status :: 4 - Beta +Classifier: Environment :: Console +Classifier: Environment :: Other Environment +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: End Users/Desktop +Classifier: License :: OSI Approved :: GNU Affero General Public License v3 +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Printing +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Fonts +Classifier: Topic :: Text Processing :: Markup +Classifier: Topic :: Text Processing :: Markup :: XML +Requires-Dist: appdirs (>=1.4.3,<2.0.0) +Requires-Dist: docutils (>=0.15) +Requires-Dist: myst-parser (>=0.18.1) +Requires-Dist: packaging (>=14.0) +Requires-Dist: rinoh-typeface-dejavuserif (>=0.1.3,<0.2.0) +Requires-Dist: rinoh-typeface-texgyrecursor (>=0.1.1,<0.2.0) +Requires-Dist: rinoh-typeface-texgyreheros (>=0.1.1,<0.2.0) +Requires-Dist: rinoh-typeface-texgyrepagella (>=0.1.1,<0.2.0) +Project-URL: Bug Tracker, https://github.com/brechtm/rinohtype/issues +Project-URL: Changelog, http://www.mos6581.org/rinohtype/master/changelog.html +Project-URL: Documentation, http://www.mos6581.org/rinohtype/master +Project-URL: Repository, https://github.com/brechtm/rinohtype +Description-Content-Type: text/x-rst + +rinohtype +========= + +.. image:: http://img.shields.io/pypi/v/rinohtype.svg + :target: https://pypi.python.org/pypi/rinohtype + :alt: PyPI + +.. image:: https://img.shields.io/pypi/pyversions/rinohtype.svg + :target: https://pypi.python.org/pypi/rinohtype + :alt: Python version + +.. image:: https://img.shields.io/github/discussions/brechtm/rinohtype + :target: https://github.com/brechtm/rinohtype/discussions + :alt: Discussions + +.. image:: https://badges.gitter.im/brechtm/rinohtype.svg + :target: https://gitter.im/brechtm/rinohtype + :alt: Gitter chat + +.. image:: https://github.com/brechtm/rinohtype/workflows/Test%20&%20Publish/badge.svg + :target: https://github.com/brechtm/rinohtype/actions?query=workflow%3A%22Test+%26+Publish%22 + :alt: Tests + +.. image:: https://codecov.io/gh/brechtm/rinohtype/branch/master/graph/badge.svg + :target: https://codecov.io/gh/brechtm/rinohtype + :alt: Test coverage + + +rinohtype is a batch-mode document processor. It renders structured documents +to PDF based on a document template and a style sheet. An important design goal +of rinohtype is make document layout and style customization user-friendly. +Have a look at the showcase_ to get an idea of the level of customization that +is possible. See the documentation_ to learn how to customize the style of your +document. + +.. _showcase: https://www.mos6581.org/rinohtype/master/showcase.html +.. _documentation: http://www.mos6581.org/rinohtype/master/ + + +Call for Contributions +---------------------- + +Since rinohtype is a fairly sizable project and currently being maintained by a +single person, your contribution can make a big difference. Specifically, the +following things can help move rinohtype forward: + +* development of professional-looking stylesheets and document templates +* volunteering to be a maintainer: fix issues that pop up when new versions of + dependencies are released (Python, Sphinx, ...), or handling + platform-specific regressions (development is mainly on macOS). +* help with maintaining and improving the documentation +* development of new features, e.g. widow/orphan handling, Knuth-Plass line + breaking, mathematics typesetting, performance improvements, ... +* companies might be interested in funding the development of particular + features + +So if you are interested in helping with any of these items, please don't +hesitate to get in touch via Discussions_, Gitter_ or brecht@opqode.com! + +.. _Discussions: https://github.com/brechtm/rinohtype/discussions +.. _Gitter: https://gitter.im/brechtm/rinohtype + + +Features +-------- + +rinohtype is still in beta, so you might run into some issues when using it. +I'd highly appreciate it if you could `create a ticket`_ for any bugs you may +encounter. That said, rinohtype is already quite capable. For example, it +should be able to replace Sphinx_'s LaTeX builder in most cases. Here is an +overview of the main features: + +* a powerful page layout system supporting columns, running headers/footers, + floatable elements and footnotes +* support for figures and (large) tables, optionally rendered sideways +* automatic generation of table of contents and index +* automatic numbering and cross-referencing of section headings, figures and + tables +* configure one of the included document templates or create your own +* an intuitive style sheet system inspired by CSS allowing changing almost + every aspect of how document elements are rendered +* modular design allowing for multiple frontends (such as reStructuredText, + Markdown, DocBook, ...) +* handles OpenType, TrueType and Type1 fonts with support for advanced + typographic features such as kerning, ligatures, small capitals and old style + figures +* built-in support for the 1000+ libre licensed fonts on `Google Fonts`_ +* embeds PDF, PNG and JPEG images, preserving transparency and color profiles +* easy to install and deploy; pure-Python with few dependencies +* built on Unicode; ready for non-latin languages + +rinohtype's primary input format is reStructuredText_. The ``rinoh`` command +line tool renders reStructuredText documents and the included Sphinx_ builder +makes it possible to output large documents with your own style applied. Have +a look at the `rinohtype manual`_ for an example of the output. + +There is also a commercial DITA_ frontend, but it's development is currently +on hold. Please `contact me`_ if you are interested in testing it. + +.. _create a ticket: https://github.com/brechtm/rinohtype/issues/new/choose +.. _Google Fonts: https://fonts.google.com +.. _reStructuredText: http://docutils.sourceforge.net/rst.html +.. _Sphinx: http://sphinx-doc.org +.. _rinohtype manual: http://www.mos6581.org/rinohtype/master/manual.pdf +.. _DITA: https://en.wikipedia.org/wiki/Darwin_Information_Typing_Architecture +.. _contact me: brecht@opqode.com + + +Requirements +------------ + +rinohtype supports all stable Python 3 versions that have not reached +end-of-life_ status. For parsing reStructuredText and CommonMark documents, +rinohtype depends on docutils_ and myst-parser_ respectively. pip_ takes care +of installing these requirements when you install rinohtype. + +Syntax highlighting of code blocks is enabled if Pygments_ is installed, which +will be installed automatically with Sphinx_. If you want to include images +other than PDF, PNG or JPEG, you also need to install Pillow_. + +.. _end-of-life: https://devguide.python.org/versions/#versions +.. _docutils: http://docutils.sourceforge.net/index.html +.. _myst-parser: https://myst-parser.readthedocs.io +.. _pip: https://pip.pypa.io +.. _Pygments: https://pygments.org +.. _Pillow: http://python-pillow.github.io + + +Getting Started +--------------- + +Installation is trivial:: + + pip install rinohtype + + +If you want to have access to bug fixes and features that are not available in +a release, you can install the current development version:: + + pip install https://github.com/brechtm/rinohtype/archive/refs/heads/master.zip + + +reStructuredText Renderer +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The easiest way to get started with rinohtype is to render a reStructuredText +document (such as ``CHANGES.rst`` from this repository) using the ``rinoh`` +command line tool:: + + rinoh CHANGES.rst + +When ``rinoh`` finishes, you will find ``CHANGES.pdf`` alongside the input +file. + +By default ``rinoh`` renders the input document using the article template. Run +``rinoh --help`` to see how you can tell ``rinoh`` which document template and +style sheet to use. + + +Sphinx Builder +~~~~~~~~~~~~~~ + +rinohtype can be used as a drop-in replacement for the LaTeX builder (the +``latex_documents`` configuration variable has to be set). Simply select the +`rinoh` builder when building the Sphinx project:: + + sphinx-build -b rinoh . _build/rinoh + + +Contributing +------------ + +See ``CONTRIBUTING.rst`` and ``DEVELOPING.rst`` + + +License +------- + +All of rinohtype's source code is licensed under the `Affero GPL 3.0`_, unless +indicated otherwise in the source file (such as ``hyphenator.py`` and +``purepng.py``). + +The Affero GPL requires for software that builds on rinohtype to also be +released as open source under this license. For building closed-source +applications, you can obtain a `commercial license`_. The author of rinohtype +is also available for consultancy projects involving rinohtype. + +.. _Affero GPL 3.0: https://www.gnu.org/licenses/agpl-3.0.html +.. _commercial license: `contact me`_ + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/RECORD b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/RECORD new file mode 100644 index 000000000..7f199f8f5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/RECORD @@ -0,0 +1,255 @@ +../../../bin/rinoh,sha256=kHSgtEEqK36lA8NyklFQWIQy0xMeTe7VFajs4G3uV48,273 +rinoh/__init__.py,sha256=jFK8GrR8CID0d-Jszh1RxLSfL3aaptX_nea0rr-fyxE,1614 +rinoh/__main__.py,sha256=75oOt_aO7xJKOr-Cojh7wTURHHiBTyqPowwVfWgW1n0,15425 +rinoh/__pycache__/__init__.cpython-312.pyc,, +rinoh/__pycache__/__main__.cpython-312.pyc,, +rinoh/__pycache__/annotation.cpython-312.pyc,, +rinoh/__pycache__/attribute.cpython-312.pyc,, +rinoh/__pycache__/color.cpython-312.pyc,, +rinoh/__pycache__/csl_formatter.cpython-312.pyc,, +rinoh/__pycache__/dimension.cpython-312.pyc,, +rinoh/__pycache__/document.cpython-312.pyc,, +rinoh/__pycache__/draw.cpython-312.pyc,, +rinoh/__pycache__/element.cpython-312.pyc,, +rinoh/__pycache__/flowable.cpython-312.pyc,, +rinoh/__pycache__/glossary.cpython-312.pyc,, +rinoh/__pycache__/highlight.cpython-312.pyc,, +rinoh/__pycache__/hyphenator.cpython-312.pyc,, +rinoh/__pycache__/image.cpython-312.pyc,, +rinoh/__pycache__/index.cpython-312.pyc,, +rinoh/__pycache__/inline.cpython-312.pyc,, +rinoh/__pycache__/layout.cpython-312.pyc,, +rinoh/__pycache__/number.cpython-312.pyc,, +rinoh/__pycache__/paper.cpython-312.pyc,, +rinoh/__pycache__/paragraph.cpython-312.pyc,, +rinoh/__pycache__/reference.cpython-312.pyc,, +rinoh/__pycache__/resource.cpython-312.pyc,, +rinoh/__pycache__/strings.cpython-312.pyc,, +rinoh/__pycache__/structure.cpython-312.pyc,, +rinoh/__pycache__/style.cpython-312.pyc,, +rinoh/__pycache__/styleds.cpython-312.pyc,, +rinoh/__pycache__/styles.cpython-312.pyc,, +rinoh/__pycache__/table.cpython-312.pyc,, +rinoh/__pycache__/template.cpython-312.pyc,, +rinoh/__pycache__/text.cpython-312.pyc,, +rinoh/__pycache__/util.cpython-312.pyc,, +rinoh/__pycache__/warnings.cpython-312.pyc,, +rinoh/annotation.py,sha256=MvB3lGs7eDne_DZ903x4Z_g5i1SnZvozqXpaXLipKhw,1178 +rinoh/attribute.py,sha256=VVb_5rUbtD3QIR7rVwMLRcuaE-NQKmbOitoRyCvDr6A,20698 +rinoh/backend/__init__.py,sha256=KguIM-drOK0vS8_35df4-nhCG6uzpmDfuiuXDfjnjKs,282 +rinoh/backend/__pycache__/__init__.cpython-312.pyc,, +rinoh/backend/pdf/__init__.py,sha256=aGTzOmgCt8mnV43NOtgXP07aSjdJSDm_-KMzakxun6I,17085 +rinoh/backend/pdf/__pycache__/__init__.cpython-312.pyc,, +rinoh/backend/pdf/__pycache__/cos.cpython-312.pyc,, +rinoh/backend/pdf/__pycache__/filter.cpython-312.pyc,, +rinoh/backend/pdf/__pycache__/pdfdoccodec.cpython-312.pyc,, +rinoh/backend/pdf/__pycache__/reader.cpython-312.pyc,, +rinoh/backend/pdf/__pycache__/util.cpython-312.pyc,, +rinoh/backend/pdf/cos.py,sha256=0VU7WztX8g8p18TJ3IsaQHe0vNrvsthH5EvIPPayoRs,31594 +rinoh/backend/pdf/filter.py,sha256=37eRiL1Yt1B0yTONkPOTiLZN5tasnzk8iDeoCRqoOtI,13381 +rinoh/backend/pdf/pdfdoccodec.py,sha256=NPB78kOWS8yUHTGuXTF6sHc1Aa9C7B9z8JKvlq57ZjY,11099 +rinoh/backend/pdf/reader.py,sha256=MohU4m7KoRPkC3bd_XFtPZXlJgPOjcDQow6tUF1-ENY,19970 +rinoh/backend/pdf/util.py,sha256=ePNvAnZmNS2wDEWipFT0HVkJSQZi-md3n9sj348nKyA,1412 +rinoh/backend/pdf/xobject/__init__.py,sha256=Q5WvdMAn18rbId_4OJLyifNNbYgdyf4YMC-lh24_eVU,2109 +rinoh/backend/pdf/xobject/__pycache__/__init__.cpython-312.pyc,, +rinoh/backend/pdf/xobject/__pycache__/jpeg.cpython-312.pyc,, +rinoh/backend/pdf/xobject/__pycache__/png.cpython-312.pyc,, +rinoh/backend/pdf/xobject/__pycache__/purepng.cpython-312.pyc,, +rinoh/backend/pdf/xobject/icc/__init__.py,sha256=nRgcGVWouU9oScFsnx0bnpaio7yh6F5wzuJsdIrHqjk,1106 +rinoh/backend/pdf/xobject/icc/__pycache__/__init__.cpython-312.pyc,, +rinoh/backend/pdf/xobject/icc/sRGB_IEC61966-2-1_black_scaled.icc,sha256=a844M6BkqyMccNAST2iduny05DcbI6w7sbltls0tNqo,3048 +rinoh/backend/pdf/xobject/icc/sRGB_IEC61966-2-1_black_scaled.txt,sha256=AMPaD2f6bZ3RQpEksL7LOT0GvzabQfIXaVZ98erayCk,1928 +rinoh/backend/pdf/xobject/jpeg.py,sha256=fr-tnVvh2OZbK3_dpwmzi0PNykQlfyCZhO4syHqpAaQ,11832 +rinoh/backend/pdf/xobject/png.py,sha256=NWtXt9EjgZgZRLgflG5Sg8MxqpWk4AqY_obdK1hhuYA,10880 +rinoh/backend/pdf/xobject/purepng.py,sha256=UejYHnHCG-P4l1tuKQctOFmvuUuiZbBQA4SD5jdh4lw,114428 +rinoh/color.py,sha256=IKLg4DEWFBn8A13mPhFGuXrKwVTlRAN_6pDCb78lNxM,3466 +rinoh/csl_formatter.py,sha256=25PpfewALhReifqbQjkdZrP0vJ2S-D073mHaF8ttgCs,855 +rinoh/data/fonts/adobe14/Courier-Bold.afm,sha256=rQFQ1L7cyId3Qr-UJR_OwT40jdWZ1GA_Z52SAn0ebpk,15675 +rinoh/data/fonts/adobe14/Courier-BoldOblique.afm,sha256=y4LmnvX21CHo9AT-ALsNmTQlqueXJTMdDr-EfpTpfpI,15741 +rinoh/data/fonts/adobe14/Courier-Oblique.afm,sha256=snEDsqLvYDDBEGJll-KrR7uCeQdaA5q5Fw-ssKofcOE,15783 +rinoh/data/fonts/adobe14/Courier.afm,sha256=Uh4NfHUh79S-eKWpxTmOTGfQdx45YRWwNGvE73StpT0,15677 +rinoh/data/fonts/adobe14/Helvetica-Bold.afm,sha256=uIDZa69W0MwFnyWPYLTXZO9JtVWrnbKUuVnAAW3uQfI,72096 +rinoh/data/fonts/adobe14/Helvetica-BoldOblique.afm,sha256=aZhKNcomlzo58mHPg-DTZ-ouZRfFkLCwMNTUohnZwmk,72192 +rinoh/data/fonts/adobe14/Helvetica-Oblique.afm,sha256=tGCbcbZgo5KsCd81BgJxqHbCzmZhfdg7-Cb3QrudlyE,77443 +rinoh/data/fonts/adobe14/Helvetica.afm,sha256=2jPxhwR0yOaL_j4jU_8QerbG7qH5g2ziqvHhoHsXmC8,77343 +rinoh/data/fonts/adobe14/MustRead.html,sha256=sia_wA4bi4qAx7PPu8Mi0TtLBAH5TN6v3ZOyIQrYAus,937 +rinoh/data/fonts/adobe14/Symbol.afm,sha256=PSEoqCA3WhDem8i_bPsV3tSCwByg-VzAsyd_N-yL3mY,9953 +rinoh/data/fonts/adobe14/Times-Bold.afm,sha256=tKAA7YXLIsbN2YWqD9P2947VB5t8aGDcTwI04NDjxSI,66839 +rinoh/data/fonts/adobe14/Times-BoldItalic.afm,sha256=k8R0S6lVIV3gLEquC3dxM0Qq2i96taKvMKBAt5KzxV0,62026 +rinoh/data/fonts/adobe14/Times-Italic.afm,sha256=7Tf6LmpntbF9_Ufzb8fpDfMokaRAiGDbyNTLvplZ4kI,68995 +rinoh/data/fonts/adobe14/Times-Roman.afm,sha256=do4cq-oIXUiaY9o-gLlrxavw7JjTBzybTWunbnvMumQ,62879 +rinoh/data/fonts/adobe14/ZapfDingbats.afm,sha256=oyVlyQr9G1enAI_FZ7eNlc8cIq3_XghglNZm2IsDmFk,9752 +rinoh/data/fonts/zapfdingbats.txt,sha256=f7WEzVYAR4NWz4WB33zuhL5bTY6lZfRFRtdeCxge0Go,3928 +rinoh/data/hyphen/hyph_en_US.dic,sha256=PUu90SowTvOmbgKJD62YeYa8FmK0-AKDNs19va7VUn4,108132 +rinoh/data/stylesheets/article_base14.rts,sha256=o2QvYrKChkcZyk1OdzDWBmlybsOD5w7YxMQJHqgehdM,268 +rinoh/data/stylesheets/base14.rts,sha256=N23CUxKVJXKZPZHuboPH6DZDS-GXG5msEyLXYLZeykw,244 +rinoh/data/stylesheets/sphinx.rts,sha256=BHttDfyvk9VGRcXNlKxDbbpLhgrTJAoSKKYnQno46dU,13419 +rinoh/data/stylesheets/sphinx_article.rts,sha256=_gShf4G9VxoCOJV-DKcMZKgndcl-y7Wx8Ciu2XLpOJA,330 +rinoh/data/xml/catalog,sha256=cVZhKqxpP3BPXLgTb1Dd9QLvtuPZJ2iVERhuLsTNNAw,681 +rinoh/data/xml/docutils/docutils.dtd,sha256=XZO6oyg9SeHjFtlxQXhAoRTHSicpuA3WXmJdDr0rQRs,16727 +rinoh/data/xml/docutils/soextblx.dtd,sha256=ciWvmPg7MdWPKoqxbHj1NnxJ4XfxXIRMPgDLjJ519cE,12744 +rinoh/data/xml/w3c-entities/html5-uppercase.ent,sha256=hImZSQG3tGLxei0tUDt1qhsvVYQnWlxD2Q5nqKVjg3w,1788 +rinoh/data/xml/w3c-entities/htmlmathml-f.ent,sha256=I4b4G93IvAr8LHbEoYHiVdEK8QDZUv3cugTALj2OUys,159186 +rinoh/data/xml/w3c-entities/htmlmathml.ent,sha256=MWSUuKy7iULJIDyezd2SFZ6apBuVTO2JFBKGvuY4aMU,3664 +rinoh/data/xml/w3c-entities/isoamsa.ent,sha256=YlIE6UrJL0GywZSnVQr2Me7A7wnJZ9j9Q45jbC6zgnY,13454 +rinoh/data/xml/w3c-entities/isoamsb.ent,sha256=5OT0l7Xuqxah3DyC_ewQd9O20RQ0LNWsT1M_5EKeWRQ,10191 +rinoh/data/xml/w3c-entities/isoamsc.ent,sha256=aqjY4Qu-ILaMlMvdBuHOvcTRF6WZCc5QRVQHoXTV73I,3350 +rinoh/data/xml/w3c-entities/isoamsn.ent,sha256=Z-sQG99RKKCDWN8zf4pZyv2xxXSQg1UU4h1LLw6tn18,9387 +rinoh/data/xml/w3c-entities/isoamso.ent,sha256=r1QA-33FbM-QUpEhDToFtZEk-Mk728n_QZFsXq6KOF8,5634 +rinoh/data/xml/w3c-entities/isoamsr.ent,sha256=ttIJ4kswmgsmIX9BTa67RhDFw7XWzgvZw8Jm1Ko7MF8,15199 +rinoh/data/xml/w3c-entities/isobox.ent,sha256=46u_OjFeRjghvL7eexczngdMRSC-XbFq01ol9PmzmCU,5080 +rinoh/data/xml/w3c-entities/isocyr1.ent,sha256=6RILqVvOGzRlX2kurOvXpSTcxhZoeQSXzuUTSuGDzbU,6555 +rinoh/data/xml/w3c-entities/isocyr2.ent,sha256=C2JjpSuy33oaKbNz-GSlsUknY42tAd0a62P2mohSoW8,3630 +rinoh/data/xml/w3c-entities/isodia.ent,sha256=o83BNLeMT1Lz8V6Di2IcKKGm4h8xHnKrArJT5OeajoI,2452 +rinoh/data/xml/w3c-entities/isogrk1.ent,sha256=dkWDWu3kA5XxNzMkZdXWyUy0r3XkYJNVF_qewndkKOI,5164 +rinoh/data/xml/w3c-entities/isogrk2.ent,sha256=wAqrUj-h9rcDWbofOFviqIt8rWKi5PuOunpFvX47ZQw,3361 +rinoh/data/xml/w3c-entities/isogrk3.ent,sha256=h3MNZNdd97sOapv0obVxsTyby_bj0ewtNr1WYTWG_Aw,4683 +rinoh/data/xml/w3c-entities/isogrk4.ent,sha256=g4iiLsB_2CUBnPKb_2ARv5I_GB3oLDAskBBQpINrfUg,4963 +rinoh/data/xml/w3c-entities/isolat1.ent,sha256=2kHv7zynPTGckFcvFiVAoKCaaHs6wMB7OfjTweo9rng,6635 +rinoh/data/xml/w3c-entities/isolat2.ent,sha256=V_MOKXnKLhRZPJYrixKnVMpkzKsIBKVPy3HONMFOga4,11463 +rinoh/data/xml/w3c-entities/isomfrk.ent,sha256=18Hg1r7ezwTcKZaMigWtGp7dYomyWRmzxICcSFE3q4A,5608 +rinoh/data/xml/w3c-entities/isomopf.ent,sha256=GHKWwOW9NsC7N2u7StzMj8BWMcdnN20GQzSJ6NBC_D8,3741 +rinoh/data/xml/w3c-entities/isomscr.ent,sha256=AWOn6Kb-A4ktKjd_XbdpQ9pj-ry8fRig0H_1KdfU0_0,5451 +rinoh/data/xml/w3c-entities/isonum.ent,sha256=GI1hkUgVzSw8dlyyw4jsS0cTvPrjZF3Zra5bcGM5DAU,6541 +rinoh/data/xml/w3c-entities/isopub.ent,sha256=99uunVJpgSh6aGReprlLEmiW3xbr6aIZdmcAf2N8QCY,7216 +rinoh/data/xml/w3c-entities/isotech.ent,sha256=NvqUYyUikSwg7KL4FwRHqTlNrzkCceFTkMoVqEo5mlQ,13141 +rinoh/data/xml/w3c-entities/mmlalias.ent,sha256=NI8w163QAoTSON2QbP-KgHUp3cPBARhJVwgG0dutVSg,40813 +rinoh/data/xml/w3c-entities/mmlextra.ent,sha256=Evk28go_JidsvYb9Ov3vidvCBX55pVdeVgWeq7xtB3Q,9666 +rinoh/data/xml/w3c-entities/predefined.ent,sha256=k-g5IF5-euazU-vN3g8sy2n6WCde74TVNPhHgnHQnDM,1611 +rinoh/data/xml/w3c-entities/w3centities-f.ent,sha256=vBbG00tot_MZTgNa2oz-3AGSeFm1QdiM9oHdHbgaRlg,167770 +rinoh/data/xml/w3c-entities/w3centities.ent,sha256=nrv1J1zCFunm71w2AwMPAjwtq3GFQs5FyvaGDp1HQuI,3937 +rinoh/data/xml/w3c-entities/xhtml1-lat1.ent,sha256=EbOrwZHMXzP-5jvkn6uzWoBS5imUm8eT-COg2Bm7_WY,8512 +rinoh/data/xml/w3c-entities/xhtml1-special.ent,sha256=PxBtQA5wzuSbkDr-xv4paXvKo3JR6v-uLeHITOSxqQ8,3454 +rinoh/data/xml/w3c-entities/xhtml1-symbol.ent,sha256=ckS_U3WdLnRDCkRxpuhMJwiv8WhJn51-bPJxOtZgAE4,9598 +rinoh/dimension.py,sha256=tf1mWGmszgpU3gymhhKRXEp9dfzwoOUOFAaDGo9if8U,11120 +rinoh/document.py,sha256=citPLFuwg6Nl-Qw0uAtwdHfAvyIgbH-492j639LQOdU,21306 +rinoh/draw.py,sha256=icNbLYXChBZprSDtKBNM7JsynYFvoRwbugWWkdBtYRg,4472 +rinoh/element.py,sha256=0Mi1AbIXuarHgPJvshKwKvgJM_IBHmg5g6zQVKMywVY,3278 +rinoh/flowable.py,sha256=NUaopRShEpQOGPvvWtECOyfJFPFiElZEV6HkMDHCuoI,36502 +rinoh/font/__init__.py,sha256=mbGWsWi1DIXEVTyXmfMM-6wnBuIbooV4NA4s5gpJVbk,9040 +rinoh/font/__pycache__/__init__.cpython-312.pyc,, +rinoh/font/__pycache__/google.cpython-312.pyc,, +rinoh/font/__pycache__/mapping.cpython-312.pyc,, +rinoh/font/__pycache__/style.cpython-312.pyc,, +rinoh/font/__pycache__/type1.cpython-312.pyc,, +rinoh/font/google.py,sha256=0K67HkjJJsduDH49PQtrLTKUT1-FrEatl38xQuL4PKQ,3547 +rinoh/font/mapping.py,sha256=434XB0DjxUvz6f3coZeZ9vINZsiJwZ5AG-dD8JTo1U8,130895 +rinoh/font/opentype/__init__.py,sha256=RPAeOp94W_Fcb79p1QsXv-2GRaSnN3DlzQWO-5vHeh4,8138 +rinoh/font/opentype/__pycache__/__init__.cpython-312.pyc,, +rinoh/font/opentype/__pycache__/cff.cpython-312.pyc,, +rinoh/font/opentype/__pycache__/gpos.cpython-312.pyc,, +rinoh/font/opentype/__pycache__/gsub.cpython-312.pyc,, +rinoh/font/opentype/__pycache__/ids.cpython-312.pyc,, +rinoh/font/opentype/__pycache__/layout.cpython-312.pyc,, +rinoh/font/opentype/__pycache__/macglyphs.cpython-312.pyc,, +rinoh/font/opentype/__pycache__/other.cpython-312.pyc,, +rinoh/font/opentype/__pycache__/parse.cpython-312.pyc,, +rinoh/font/opentype/__pycache__/required.cpython-312.pyc,, +rinoh/font/opentype/__pycache__/truetype.cpython-312.pyc,, +rinoh/font/opentype/cff.py,sha256=Bwdd4sRo1kJ2GGbqgmNXNaDMIpfXHWrlSd29DdfXsGs,7019 +rinoh/font/opentype/gpos.py,sha256=Cjyt1WG-eX6NknQP_AT54B5ZV6MLiHFO1wftxjza3bY,10327 +rinoh/font/opentype/gsub.py,sha256=_uw6ArqmamH3fj3Hdu2BNYLzfxJ7TgdKMWmvWg1eOjM,5032 +rinoh/font/opentype/ids.py,sha256=sH0s-dwT_EMZu4P6uPlYDkBOvGZpoHNsjBGL63k5ukg,979 +rinoh/font/opentype/layout.py,sha256=6K666boYXOZZ27SPWeGx5rENC0Mima_hnlfidiBcAww,7131 +rinoh/font/opentype/macglyphs.py,sha256=P4ezJ7ImRtRdt-ySa7Lu2zARxz6M4o3hH9EWK3qgflY,6561 +rinoh/font/opentype/other.py,sha256=hY408NXqhKOPf6L785PJiRzrwvbTPSEZPcBsX-TzcH0,1694 +rinoh/font/opentype/parse.py,sha256=Fe-am6WN9hqffjnQD_805QNnXWkjIkjvOQmVcxaCOr8,7391 +rinoh/font/opentype/required.py,sha256=HcK-kFn62VMyos911gvIoI7DK8op0Q5cSSb4ZqA8SBs,16589 +rinoh/font/opentype/truetype.py,sha256=rnHtgV3lQ4b8JZFnhHZWQRrv0uKSkXHuJ07iO7v2Mxg,1902 +rinoh/font/style.py,sha256=9q0iP_b6nQxrTkLLM3ftkkUHIZsazO3954h9PMOQC3o,4926 +rinoh/font/type1.py,sha256=wzi00WWJW2vON-Z-bZdlqkXto8iMVH02PrSaiITNxKs,12776 +rinoh/fonts/__init__.py,sha256=e6CdYFYGgpXuhxGS52fcreEG8bo10lVEJGIqKgXorkM,394 +rinoh/fonts/__pycache__/__init__.cpython-312.pyc,, +rinoh/fonts/__pycache__/adobe14.cpython-312.pyc,, +rinoh/fonts/adobe14.py,sha256=ssDtrsmK1WZ_UPIh_nODojtCCb7f_el6oKUQK95AtJw,1810 +rinoh/frontend/__init__.py,sha256=Z0i6vvAiOPwq4BvQ8PCSAj_3yXhZ3hWnqJfdVU9fxO4,5561 +rinoh/frontend/__pycache__/__init__.cpython-312.pyc,, +rinoh/frontend/commonmark/__init__.py,sha256=_zi8zwMttJ0DDvErC-IjO_J3JC75O5CrAzu5dxs1c24,465 +rinoh/frontend/commonmark/__pycache__/__init__.cpython-312.pyc,, +rinoh/frontend/docbook/__init__.py,sha256=IF3INALd8yW5VatfepKQP0y48x_gWZl494NfX7XwJ2I,1717 +rinoh/frontend/docbook/__pycache__/__init__.cpython-312.pyc,, +rinoh/frontend/docbook/__pycache__/nodes.cpython-312.pyc,, +rinoh/frontend/docbook/nodes.py,sha256=Qct8mTVQM_xxBYSEq10pTZwQmUFF7ORaiFN9ElCNdNg,3723 +rinoh/frontend/epub/__init__.py,sha256=cpWRVxRc7D3NJ-KFRGN4xhCemGPhSG0z42iqK5uBfyo,3758 +rinoh/frontend/epub/__pycache__/__init__.cpython-312.pyc,, +rinoh/frontend/epub/__pycache__/nodes.cpython-312.pyc,, +rinoh/frontend/epub/nodes.py,sha256=NF8rCJOQqMjG_4_k6sLKXcOJE9vpg1DTxW1tsi-Piro,4808 +rinoh/frontend/rst/__init__.py,sha256=1e6GlNELB7FYMCAt-gyMu059bm0XMxOrPToinUpWmAw,4181 +rinoh/frontend/rst/__pycache__/__init__.cpython-312.pyc,, +rinoh/frontend/rst/__pycache__/nodes.cpython-312.pyc,, +rinoh/frontend/rst/nodes.py,sha256=dMIWxC6y32vOFia30JkLPFuBWXibDRKO7SUYO8og5Ko,22200 +rinoh/frontend/sphinx/__init__.py,sha256=zPa8HQpQROJAcVvOar-UTiLa_vJJA5QcayE83EpUIDQ,16646 +rinoh/frontend/sphinx/__pycache__/__init__.cpython-312.pyc,, +rinoh/frontend/sphinx/__pycache__/nodes.cpython-312.pyc,, +rinoh/frontend/sphinx/__pycache__/transforms.cpython-312.pyc,, +rinoh/frontend/sphinx/__pycache__/util.cpython-312.pyc,, +rinoh/frontend/sphinx/nodes.py,sha256=dy7gSkHsmNJJvgAST2ZTsMn-WCUFpKHLq8FmnAo-PaA,13044 +rinoh/frontend/sphinx/transforms.py,sha256=MRQFlazDRBBJ90HraAL16AT0CjZ1SYtjZx9v87dKCQo,1309 +rinoh/frontend/sphinx/util.py,sha256=0GoxK7Vbf5syQvIbbERvYKVnVHVN6Fp0TXEa8tpTp4I,402 +rinoh/frontend/xml/__init__.py,sha256=ucEi3C1ucuLxKHSjZLpoLd72BWxU7vgYiMpuNspK-js,6249 +rinoh/frontend/xml/__pycache__/__init__.cpython-312.pyc,, +rinoh/frontend/xml/__pycache__/elementtree.cpython-312.pyc,, +rinoh/frontend/xml/__pycache__/lxml.cpython-312.pyc,, +rinoh/frontend/xml/elementtree.py,sha256=_OTUQbNPG7Xwf9mYULt1mbgoDL9qdsLESASdn4dDnJs,4856 +rinoh/frontend/xml/lxml.py,sha256=Onk7HjXpBYi_dtAutNnJz9FvXYMlXPz8Gv2OqAqdwY8,1587 +rinoh/glossary.py,sha256=Osqv6In-1eB-TGW51nR3wwQvLmPs6kOujVdMj65IzJU,2510 +rinoh/highlight.py,sha256=ns1LtIQH0AR3wvENEJvRv_Ls7TEEtNpWA91cNuXDZ5A,5375 +rinoh/hyphenator.py,sha256=45FSsmuhZqa8S2Bna_ovNMAz5WkHQRB8SWDXYWYtV3c,7901 +rinoh/image.py,sha256=K9gAHKuR_PJYDKhVWQ8NRn8oi4c9s5YWAHaLvekquFs,16311 +rinoh/index.py,sha256=nNamVKd8OTQFLeFKpeYD-TKabnUW4lbIw-oh0UugMCg,4839 +rinoh/inline.py,sha256=uxiH_fNFjPawdCQ1m6cwh1Xxr09d-cwOLcNXGx6_dx0,4331 +rinoh/language/__init__.py,sha256=ltxbxAOqXn6fliPVGNRN5MAY_J3tBnIjCtj-YYo0jv8,903 +rinoh/language/__pycache__/__init__.cpython-312.pyc,, +rinoh/language/__pycache__/cls.cpython-312.pyc,, +rinoh/language/__pycache__/cs.cpython-312.pyc,, +rinoh/language/__pycache__/de.cpython-312.pyc,, +rinoh/language/__pycache__/en.cpython-312.pyc,, +rinoh/language/__pycache__/es.cpython-312.pyc,, +rinoh/language/__pycache__/fr.cpython-312.pyc,, +rinoh/language/__pycache__/hu.cpython-312.pyc,, +rinoh/language/__pycache__/it.cpython-312.pyc,, +rinoh/language/__pycache__/nl.cpython-312.pyc,, +rinoh/language/__pycache__/pl.cpython-312.pyc,, +rinoh/language/cls.py,sha256=R6ZUCsohDEbF7xpVsz39IZVAWIlR97f7RW91KC3YwAk,2431 +rinoh/language/cs.py,sha256=8xHREQTHq2T1ZePZ_0DfxJmtLWsbVYI3wcavECYWu_Q,890 +rinoh/language/de.py,sha256=KmhNo4n-A7Au5y10Fxb-Z1MqZRrwJ1EI4cRhWZUkP9A,766 +rinoh/language/en.py,sha256=odfWtzdUmUPAmX8ehGOXWU5Xm9ONwuGqdsQdLeozow8,866 +rinoh/language/es.py,sha256=0udAr67SiwKzsv01mpBTSV4WGIaONXp-8pWmuVQOc7A,776 +rinoh/language/fr.py,sha256=dWKU160RG24CUcejWTGXDrHTVnQtjvP95RXu01IF1Zk,782 +rinoh/language/hu.py,sha256=zGL_1Z3o4O69BdHku9BnQ1r2OMxqUb0xOU3QFo7GsWg,738 +rinoh/language/it.py,sha256=eTruLOq7wa4ACAvbXpy17863VA-lovu1XjknHjBH0OA,787 +rinoh/language/nl.py,sha256=r5LhXeBLRPpbTn414PAuZM_ctht8zcXZdxG71BlPzlc,831 +rinoh/language/pl.py,sha256=KsXn4WTHV8_fQ0G60FO4M9Ip1H5A6A8DsemUqqOfkvY,788 +rinoh/layout.py,sha256=ANsIVnO-RR6yX8mHGlhZxZnIl_VPZSi--xaJe2ABI_o,25137 +rinoh/number.py,sha256=OTANTLBIWXd2x9BoVMk5mDFuPyNb6DgZklY5ImAtNjM,4360 +rinoh/paper.py,sha256=nWN9_-q2syUKKzW_vn3C6SjVzb-zOa2bWcZWU6JIze0,2890 +rinoh/paragraph.py,sha256=QCnAMzB7gBxSieET986XrIj0YZKFnjt1VdBEDom-GLo,47642 +rinoh/reference.py,sha256=ghRVjsgrYo0U_yaEXzVeol9uvbyBUQciynGZCicOMp4,16854 +rinoh/resource.py,sha256=Ecphinh8Knz75G8RhcifWMzBkS3k_uN3roxjV1IfAnA,7600 +rinoh/strings.py,sha256=8aLY3buyfTK14NbvRR2OhTpQrlx8a62RgcaOJASRLn0,2890 +rinoh/structure.py,sha256=tIZLyagc0WlQ1wDZnQOMtVx1Fn8aJ2HPhm1vLVSqEB8,15461 +rinoh/style.py,sha256=qZE04Bx3zbAxAzBVAw-JgaO1rgB8ztb4m9ikTvEpaxg,39205 +rinoh/styleds.py,sha256=1syTQXdqxvTrQlu_NGMUoHqSu1CncT6ytYA4OaRibx8,1963 +rinoh/styles.py,sha256=-QJA_qtO4T6W3qE-fV9P_83L6KXBsmN_xE2F-nOQ2FM,579 +rinoh/stylesheets/__init__.py,sha256=B28J14JBgkl61YaEqChnjY4vSClREQ3V1SYqFkJCsS4,1122 +rinoh/stylesheets/__pycache__/__init__.cpython-312.pyc,, +rinoh/stylesheets/__pycache__/matcher.cpython-312.pyc,, +rinoh/stylesheets/matcher.py,sha256=My-OGqrElHZJQ9Hd8jF7WM3GX9cIzikl7OIVFMbSlqs,18735 +rinoh/table.py,sha256=N0B91yk5Pj9kKFZTCww_UHQHcHfkWMf7FnNniCRpfTs,25741 +rinoh/template.py,sha256=Pt-KKGoae77expW7LsGGki58whzPEPzHElSfumhRwuA,33623 +rinoh/templates/__init__.py,sha256=9daHQC6BHVGb1xT0DgsrOzXZrY0wc1BfiyX_Yjt5hAs,348 +rinoh/templates/__pycache__/__init__.cpython-312.pyc,, +rinoh/templates/__pycache__/article.cpython-312.pyc,, +rinoh/templates/__pycache__/book.cpython-312.pyc,, +rinoh/templates/article.py,sha256=5ADLCiXsUIiF99yESYKYKo4zkEyRrhI0sl5aEohmKOk,3884 +rinoh/templates/book.py,sha256=t8dHlbDibKrG3-pu9ROnSW0xNBEDQ_PS6jBb1KPoJXo,6438 +rinoh/text.py,sha256=yC-RnHQtrXsrOKYTid24f8XEUaB5quA8CrZ3AlJ9nJ8,24639 +rinoh/util.py,sha256=rmH_kbjb08299khQb8Gt6Eer2r4UIQvoQ9bJnRXKb0E,10896 +rinoh/warnings.py,sha256=Zzzo_FkQD2tcG6BgutTvWPX-Oy3xu_PbR8rnp6FFxAQ,982 +rinohtype-0.5.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +rinohtype-0.5.5.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520 +rinohtype-0.5.5.dist-info/METADATA,sha256=GqvFdisdJA2QGJXLWE4HLogKxuPJ25KT4cPDq6tmWn0,9433 +rinohtype-0.5.5.dist-info/RECORD,, +rinohtype-0.5.5.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +rinohtype-0.5.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88 +rinohtype-0.5.5.dist-info/entry_points.txt,sha256=R9kmRqLcClRuv9dmq4mnymlmD1DeuYY4OzYKle57TbY,720 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/REQUESTED b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/REQUESTED new file mode 100644 index 000000000..e69de29bb diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/WHEEL b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/WHEEL new file mode 100644 index 000000000..d73ccaae8 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: poetry-core 1.9.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/entry_points.txt b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/entry_points.txt new file mode 100644 index 000000000..f3ed5e9ff --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/rinohtype-0.5.5.dist-info/entry_points.txt @@ -0,0 +1,27 @@ +[console_scripts] +rinoh=rinoh.__main__:main + +[rinoh.frontends] +CommonMark=rinoh.frontend.commonmark:CommonMarkReader +reStructuredText=rinoh.frontend.rst:ReStructuredTextReader + +[rinoh.stylesheets] +sphinx=rinoh.stylesheets:sphinx +sphinx_article=rinoh.stylesheets:sphinx_article +sphinx_article_base14=rinoh.stylesheets:sphinx_article_base14 +sphinx_base14=rinoh.stylesheets:sphinx_base14 + +[rinoh.templates] +article=rinoh.templates:Article +book=rinoh.templates:Book + +[rinoh.typefaces] +courier=rinoh.fonts.adobe14:courier +helvetica=rinoh.fonts.adobe14:helvetica +itczapfdingbats=rinoh.fonts.adobe14:zapfdingbats +symbol=rinoh.fonts.adobe14:symbol +times=rinoh.fonts.adobe14:times + +[sphinx.builders] +rinoh=rinoh.frontend.sphinx + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/sphinx/ext/__pycache__/graphviz.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/sphinx/ext/__pycache__/graphviz.cpython-312.pyc index 55fd887d9..dedfc4994 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/sphinx/ext/__pycache__/graphviz.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/sphinx/ext/__pycache__/graphviz.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/sphinx/util/__pycache__/console.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/sphinx/util/__pycache__/console.cpython-312.pyc index 42b179b98..ec6d647ba 100644 Binary files a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/sphinx/util/__pycache__/console.cpython-312.pyc and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/sphinx/util/__pycache__/console.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__init__.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__init__.py new file mode 100644 index 000000000..2ec4f203c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__init__.py @@ -0,0 +1,390 @@ + +from .error import * + +from .tokens import * +from .events import * +from .nodes import * + +from .loader import * +from .dumper import * + +__version__ = '6.0.2' +try: + from .cyaml import * + __with_libyaml__ = True +except ImportError: + __with_libyaml__ = False + +import io + +#------------------------------------------------------------------------------ +# XXX "Warnings control" is now deprecated. Leaving in the API function to not +# break code that uses it. +#------------------------------------------------------------------------------ +def warnings(settings=None): + if settings is None: + return {} + +#------------------------------------------------------------------------------ +def scan(stream, Loader=Loader): + """ + Scan a YAML stream and produce scanning tokens. + """ + loader = Loader(stream) + try: + while loader.check_token(): + yield loader.get_token() + finally: + loader.dispose() + +def parse(stream, Loader=Loader): + """ + Parse a YAML stream and produce parsing events. + """ + loader = Loader(stream) + try: + while loader.check_event(): + yield loader.get_event() + finally: + loader.dispose() + +def compose(stream, Loader=Loader): + """ + Parse the first YAML document in a stream + and produce the corresponding representation tree. + """ + loader = Loader(stream) + try: + return loader.get_single_node() + finally: + loader.dispose() + +def compose_all(stream, Loader=Loader): + """ + Parse all YAML documents in a stream + and produce corresponding representation trees. + """ + loader = Loader(stream) + try: + while loader.check_node(): + yield loader.get_node() + finally: + loader.dispose() + +def load(stream, Loader): + """ + Parse the first YAML document in a stream + and produce the corresponding Python object. + """ + loader = Loader(stream) + try: + return loader.get_single_data() + finally: + loader.dispose() + +def load_all(stream, Loader): + """ + Parse all YAML documents in a stream + and produce corresponding Python objects. + """ + loader = Loader(stream) + try: + while loader.check_data(): + yield loader.get_data() + finally: + loader.dispose() + +def full_load(stream): + """ + Parse the first YAML document in a stream + and produce the corresponding Python object. + + Resolve all tags except those known to be + unsafe on untrusted input. + """ + return load(stream, FullLoader) + +def full_load_all(stream): + """ + Parse all YAML documents in a stream + and produce corresponding Python objects. + + Resolve all tags except those known to be + unsafe on untrusted input. + """ + return load_all(stream, FullLoader) + +def safe_load(stream): + """ + Parse the first YAML document in a stream + and produce the corresponding Python object. + + Resolve only basic YAML tags. This is known + to be safe for untrusted input. + """ + return load(stream, SafeLoader) + +def safe_load_all(stream): + """ + Parse all YAML documents in a stream + and produce corresponding Python objects. + + Resolve only basic YAML tags. This is known + to be safe for untrusted input. + """ + return load_all(stream, SafeLoader) + +def unsafe_load(stream): + """ + Parse the first YAML document in a stream + and produce the corresponding Python object. + + Resolve all tags, even those known to be + unsafe on untrusted input. + """ + return load(stream, UnsafeLoader) + +def unsafe_load_all(stream): + """ + Parse all YAML documents in a stream + and produce corresponding Python objects. + + Resolve all tags, even those known to be + unsafe on untrusted input. + """ + return load_all(stream, UnsafeLoader) + +def emit(events, stream=None, Dumper=Dumper, + canonical=None, indent=None, width=None, + allow_unicode=None, line_break=None): + """ + Emit YAML parsing events into a stream. + If stream is None, return the produced string instead. + """ + getvalue = None + if stream is None: + stream = io.StringIO() + getvalue = stream.getvalue + dumper = Dumper(stream, canonical=canonical, indent=indent, width=width, + allow_unicode=allow_unicode, line_break=line_break) + try: + for event in events: + dumper.emit(event) + finally: + dumper.dispose() + if getvalue: + return getvalue() + +def serialize_all(nodes, stream=None, Dumper=Dumper, + canonical=None, indent=None, width=None, + allow_unicode=None, line_break=None, + encoding=None, explicit_start=None, explicit_end=None, + version=None, tags=None): + """ + Serialize a sequence of representation trees into a YAML stream. + If stream is None, return the produced string instead. + """ + getvalue = None + if stream is None: + if encoding is None: + stream = io.StringIO() + else: + stream = io.BytesIO() + getvalue = stream.getvalue + dumper = Dumper(stream, canonical=canonical, indent=indent, width=width, + allow_unicode=allow_unicode, line_break=line_break, + encoding=encoding, version=version, tags=tags, + explicit_start=explicit_start, explicit_end=explicit_end) + try: + dumper.open() + for node in nodes: + dumper.serialize(node) + dumper.close() + finally: + dumper.dispose() + if getvalue: + return getvalue() + +def serialize(node, stream=None, Dumper=Dumper, **kwds): + """ + Serialize a representation tree into a YAML stream. + If stream is None, return the produced string instead. + """ + return serialize_all([node], stream, Dumper=Dumper, **kwds) + +def dump_all(documents, stream=None, Dumper=Dumper, + default_style=None, default_flow_style=False, + canonical=None, indent=None, width=None, + allow_unicode=None, line_break=None, + encoding=None, explicit_start=None, explicit_end=None, + version=None, tags=None, sort_keys=True): + """ + Serialize a sequence of Python objects into a YAML stream. + If stream is None, return the produced string instead. + """ + getvalue = None + if stream is None: + if encoding is None: + stream = io.StringIO() + else: + stream = io.BytesIO() + getvalue = stream.getvalue + dumper = Dumper(stream, default_style=default_style, + default_flow_style=default_flow_style, + canonical=canonical, indent=indent, width=width, + allow_unicode=allow_unicode, line_break=line_break, + encoding=encoding, version=version, tags=tags, + explicit_start=explicit_start, explicit_end=explicit_end, sort_keys=sort_keys) + try: + dumper.open() + for data in documents: + dumper.represent(data) + dumper.close() + finally: + dumper.dispose() + if getvalue: + return getvalue() + +def dump(data, stream=None, Dumper=Dumper, **kwds): + """ + Serialize a Python object into a YAML stream. + If stream is None, return the produced string instead. + """ + return dump_all([data], stream, Dumper=Dumper, **kwds) + +def safe_dump_all(documents, stream=None, **kwds): + """ + Serialize a sequence of Python objects into a YAML stream. + Produce only basic YAML tags. + If stream is None, return the produced string instead. + """ + return dump_all(documents, stream, Dumper=SafeDumper, **kwds) + +def safe_dump(data, stream=None, **kwds): + """ + Serialize a Python object into a YAML stream. + Produce only basic YAML tags. + If stream is None, return the produced string instead. + """ + return dump_all([data], stream, Dumper=SafeDumper, **kwds) + +def add_implicit_resolver(tag, regexp, first=None, + Loader=None, Dumper=Dumper): + """ + Add an implicit scalar detector. + If an implicit scalar value matches the given regexp, + the corresponding tag is assigned to the scalar. + first is a sequence of possible initial characters or None. + """ + if Loader is None: + loader.Loader.add_implicit_resolver(tag, regexp, first) + loader.FullLoader.add_implicit_resolver(tag, regexp, first) + loader.UnsafeLoader.add_implicit_resolver(tag, regexp, first) + else: + Loader.add_implicit_resolver(tag, regexp, first) + Dumper.add_implicit_resolver(tag, regexp, first) + +def add_path_resolver(tag, path, kind=None, Loader=None, Dumper=Dumper): + """ + Add a path based resolver for the given tag. + A path is a list of keys that forms a path + to a node in the representation tree. + Keys can be string values, integers, or None. + """ + if Loader is None: + loader.Loader.add_path_resolver(tag, path, kind) + loader.FullLoader.add_path_resolver(tag, path, kind) + loader.UnsafeLoader.add_path_resolver(tag, path, kind) + else: + Loader.add_path_resolver(tag, path, kind) + Dumper.add_path_resolver(tag, path, kind) + +def add_constructor(tag, constructor, Loader=None): + """ + Add a constructor for the given tag. + Constructor is a function that accepts a Loader instance + and a node object and produces the corresponding Python object. + """ + if Loader is None: + loader.Loader.add_constructor(tag, constructor) + loader.FullLoader.add_constructor(tag, constructor) + loader.UnsafeLoader.add_constructor(tag, constructor) + else: + Loader.add_constructor(tag, constructor) + +def add_multi_constructor(tag_prefix, multi_constructor, Loader=None): + """ + Add a multi-constructor for the given tag prefix. + Multi-constructor is called for a node if its tag starts with tag_prefix. + Multi-constructor accepts a Loader instance, a tag suffix, + and a node object and produces the corresponding Python object. + """ + if Loader is None: + loader.Loader.add_multi_constructor(tag_prefix, multi_constructor) + loader.FullLoader.add_multi_constructor(tag_prefix, multi_constructor) + loader.UnsafeLoader.add_multi_constructor(tag_prefix, multi_constructor) + else: + Loader.add_multi_constructor(tag_prefix, multi_constructor) + +def add_representer(data_type, representer, Dumper=Dumper): + """ + Add a representer for the given type. + Representer is a function accepting a Dumper instance + and an instance of the given data type + and producing the corresponding representation node. + """ + Dumper.add_representer(data_type, representer) + +def add_multi_representer(data_type, multi_representer, Dumper=Dumper): + """ + Add a representer for the given type. + Multi-representer is a function accepting a Dumper instance + and an instance of the given data type or subtype + and producing the corresponding representation node. + """ + Dumper.add_multi_representer(data_type, multi_representer) + +class YAMLObjectMetaclass(type): + """ + The metaclass for YAMLObject. + """ + def __init__(cls, name, bases, kwds): + super(YAMLObjectMetaclass, cls).__init__(name, bases, kwds) + if 'yaml_tag' in kwds and kwds['yaml_tag'] is not None: + if isinstance(cls.yaml_loader, list): + for loader in cls.yaml_loader: + loader.add_constructor(cls.yaml_tag, cls.from_yaml) + else: + cls.yaml_loader.add_constructor(cls.yaml_tag, cls.from_yaml) + + cls.yaml_dumper.add_representer(cls, cls.to_yaml) + +class YAMLObject(metaclass=YAMLObjectMetaclass): + """ + An object that can dump itself to a YAML stream + and load itself from a YAML stream. + """ + + __slots__ = () # no direct instantiation, so allow immutable subclasses + + yaml_loader = [Loader, FullLoader, UnsafeLoader] + yaml_dumper = Dumper + + yaml_tag = None + yaml_flow_style = None + + @classmethod + def from_yaml(cls, loader, node): + """ + Convert a representation node to a Python object. + """ + return loader.construct_yaml_object(node, cls) + + @classmethod + def to_yaml(cls, dumper, data): + """ + Convert a Python object to a representation node. + """ + return dumper.represent_yaml_object(cls.yaml_tag, data, cls, + flow_style=cls.yaml_flow_style) + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/__init__.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 000000000..94d971602 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/__init__.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/composer.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/composer.cpython-312.pyc new file mode 100644 index 000000000..265717fc5 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/composer.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/constructor.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/constructor.cpython-312.pyc new file mode 100644 index 000000000..4f846e33b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/constructor.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/cyaml.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/cyaml.cpython-312.pyc new file mode 100644 index 000000000..e2fbe70c7 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/cyaml.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/dumper.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/dumper.cpython-312.pyc new file mode 100644 index 000000000..a9f8d3276 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/dumper.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/emitter.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/emitter.cpython-312.pyc new file mode 100644 index 000000000..81f8647c5 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/emitter.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/error.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/error.cpython-312.pyc new file mode 100644 index 000000000..6159097c2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/error.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/events.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/events.cpython-312.pyc new file mode 100644 index 000000000..d06dcca2b Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/events.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/loader.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/loader.cpython-312.pyc new file mode 100644 index 000000000..f9e107dbd Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/loader.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/nodes.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/nodes.cpython-312.pyc new file mode 100644 index 000000000..e531f75c2 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/nodes.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/parser.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/parser.cpython-312.pyc new file mode 100644 index 000000000..ca4a52545 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/parser.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/reader.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/reader.cpython-312.pyc new file mode 100644 index 000000000..9f9d6dcd0 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/reader.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/representer.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/representer.cpython-312.pyc new file mode 100644 index 000000000..7a9d7b106 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/representer.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/resolver.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/resolver.cpython-312.pyc new file mode 100644 index 000000000..5afdf476f Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/resolver.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/scanner.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/scanner.cpython-312.pyc new file mode 100644 index 000000000..f18f7f3e4 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/scanner.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/serializer.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/serializer.cpython-312.pyc new file mode 100644 index 000000000..a8cb93671 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/serializer.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/tokens.cpython-312.pyc b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/tokens.cpython-312.pyc new file mode 100644 index 000000000..e993b8543 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/__pycache__/tokens.cpython-312.pyc differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/_yaml.cpython-312-x86_64-linux-gnu.so b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/_yaml.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 000000000..a8fc86132 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/_yaml.cpython-312-x86_64-linux-gnu.so differ diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/composer.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/composer.py new file mode 100644 index 000000000..6d15cb40e --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/composer.py @@ -0,0 +1,139 @@ + +__all__ = ['Composer', 'ComposerError'] + +from .error import MarkedYAMLError +from .events import * +from .nodes import * + +class ComposerError(MarkedYAMLError): + pass + +class Composer: + + def __init__(self): + self.anchors = {} + + def check_node(self): + # Drop the STREAM-START event. + if self.check_event(StreamStartEvent): + self.get_event() + + # If there are more documents available? + return not self.check_event(StreamEndEvent) + + def get_node(self): + # Get the root node of the next document. + if not self.check_event(StreamEndEvent): + return self.compose_document() + + def get_single_node(self): + # Drop the STREAM-START event. + self.get_event() + + # Compose a document if the stream is not empty. + document = None + if not self.check_event(StreamEndEvent): + document = self.compose_document() + + # Ensure that the stream contains no more documents. + if not self.check_event(StreamEndEvent): + event = self.get_event() + raise ComposerError("expected a single document in the stream", + document.start_mark, "but found another document", + event.start_mark) + + # Drop the STREAM-END event. + self.get_event() + + return document + + def compose_document(self): + # Drop the DOCUMENT-START event. + self.get_event() + + # Compose the root node. + node = self.compose_node(None, None) + + # Drop the DOCUMENT-END event. + self.get_event() + + self.anchors = {} + return node + + def compose_node(self, parent, index): + if self.check_event(AliasEvent): + event = self.get_event() + anchor = event.anchor + if anchor not in self.anchors: + raise ComposerError(None, None, "found undefined alias %r" + % anchor, event.start_mark) + return self.anchors[anchor] + event = self.peek_event() + anchor = event.anchor + if anchor is not None: + if anchor in self.anchors: + raise ComposerError("found duplicate anchor %r; first occurrence" + % anchor, self.anchors[anchor].start_mark, + "second occurrence", event.start_mark) + self.descend_resolver(parent, index) + if self.check_event(ScalarEvent): + node = self.compose_scalar_node(anchor) + elif self.check_event(SequenceStartEvent): + node = self.compose_sequence_node(anchor) + elif self.check_event(MappingStartEvent): + node = self.compose_mapping_node(anchor) + self.ascend_resolver() + return node + + def compose_scalar_node(self, anchor): + event = self.get_event() + tag = event.tag + if tag is None or tag == '!': + tag = self.resolve(ScalarNode, event.value, event.implicit) + node = ScalarNode(tag, event.value, + event.start_mark, event.end_mark, style=event.style) + if anchor is not None: + self.anchors[anchor] = node + return node + + def compose_sequence_node(self, anchor): + start_event = self.get_event() + tag = start_event.tag + if tag is None or tag == '!': + tag = self.resolve(SequenceNode, None, start_event.implicit) + node = SequenceNode(tag, [], + start_event.start_mark, None, + flow_style=start_event.flow_style) + if anchor is not None: + self.anchors[anchor] = node + index = 0 + while not self.check_event(SequenceEndEvent): + node.value.append(self.compose_node(node, index)) + index += 1 + end_event = self.get_event() + node.end_mark = end_event.end_mark + return node + + def compose_mapping_node(self, anchor): + start_event = self.get_event() + tag = start_event.tag + if tag is None or tag == '!': + tag = self.resolve(MappingNode, None, start_event.implicit) + node = MappingNode(tag, [], + start_event.start_mark, None, + flow_style=start_event.flow_style) + if anchor is not None: + self.anchors[anchor] = node + while not self.check_event(MappingEndEvent): + #key_event = self.peek_event() + item_key = self.compose_node(node, None) + #if item_key in node.value: + # raise ComposerError("while composing a mapping", start_event.start_mark, + # "found duplicate key", key_event.start_mark) + item_value = self.compose_node(node, item_key) + #node.value[item_key] = item_value + node.value.append((item_key, item_value)) + end_event = self.get_event() + node.end_mark = end_event.end_mark + return node + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/constructor.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/constructor.py new file mode 100644 index 000000000..619acd307 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/constructor.py @@ -0,0 +1,748 @@ + +__all__ = [ + 'BaseConstructor', + 'SafeConstructor', + 'FullConstructor', + 'UnsafeConstructor', + 'Constructor', + 'ConstructorError' +] + +from .error import * +from .nodes import * + +import collections.abc, datetime, base64, binascii, re, sys, types + +class ConstructorError(MarkedYAMLError): + pass + +class BaseConstructor: + + yaml_constructors = {} + yaml_multi_constructors = {} + + def __init__(self): + self.constructed_objects = {} + self.recursive_objects = {} + self.state_generators = [] + self.deep_construct = False + + def check_data(self): + # If there are more documents available? + return self.check_node() + + def check_state_key(self, key): + """Block special attributes/methods from being set in a newly created + object, to prevent user-controlled methods from being called during + deserialization""" + if self.get_state_keys_blacklist_regexp().match(key): + raise ConstructorError(None, None, + "blacklisted key '%s' in instance state found" % (key,), None) + + def get_data(self): + # Construct and return the next document. + if self.check_node(): + return self.construct_document(self.get_node()) + + def get_single_data(self): + # Ensure that the stream contains a single document and construct it. + node = self.get_single_node() + if node is not None: + return self.construct_document(node) + return None + + def construct_document(self, node): + data = self.construct_object(node) + while self.state_generators: + state_generators = self.state_generators + self.state_generators = [] + for generator in state_generators: + for dummy in generator: + pass + self.constructed_objects = {} + self.recursive_objects = {} + self.deep_construct = False + return data + + def construct_object(self, node, deep=False): + if node in self.constructed_objects: + return self.constructed_objects[node] + if deep: + old_deep = self.deep_construct + self.deep_construct = True + if node in self.recursive_objects: + raise ConstructorError(None, None, + "found unconstructable recursive node", node.start_mark) + self.recursive_objects[node] = None + constructor = None + tag_suffix = None + if node.tag in self.yaml_constructors: + constructor = self.yaml_constructors[node.tag] + else: + for tag_prefix in self.yaml_multi_constructors: + if tag_prefix is not None and node.tag.startswith(tag_prefix): + tag_suffix = node.tag[len(tag_prefix):] + constructor = self.yaml_multi_constructors[tag_prefix] + break + else: + if None in self.yaml_multi_constructors: + tag_suffix = node.tag + constructor = self.yaml_multi_constructors[None] + elif None in self.yaml_constructors: + constructor = self.yaml_constructors[None] + elif isinstance(node, ScalarNode): + constructor = self.__class__.construct_scalar + elif isinstance(node, SequenceNode): + constructor = self.__class__.construct_sequence + elif isinstance(node, MappingNode): + constructor = self.__class__.construct_mapping + if tag_suffix is None: + data = constructor(self, node) + else: + data = constructor(self, tag_suffix, node) + if isinstance(data, types.GeneratorType): + generator = data + data = next(generator) + if self.deep_construct: + for dummy in generator: + pass + else: + self.state_generators.append(generator) + self.constructed_objects[node] = data + del self.recursive_objects[node] + if deep: + self.deep_construct = old_deep + return data + + def construct_scalar(self, node): + if not isinstance(node, ScalarNode): + raise ConstructorError(None, None, + "expected a scalar node, but found %s" % node.id, + node.start_mark) + return node.value + + def construct_sequence(self, node, deep=False): + if not isinstance(node, SequenceNode): + raise ConstructorError(None, None, + "expected a sequence node, but found %s" % node.id, + node.start_mark) + return [self.construct_object(child, deep=deep) + for child in node.value] + + def construct_mapping(self, node, deep=False): + if not isinstance(node, MappingNode): + raise ConstructorError(None, None, + "expected a mapping node, but found %s" % node.id, + node.start_mark) + mapping = {} + for key_node, value_node in node.value: + key = self.construct_object(key_node, deep=deep) + if not isinstance(key, collections.abc.Hashable): + raise ConstructorError("while constructing a mapping", node.start_mark, + "found unhashable key", key_node.start_mark) + value = self.construct_object(value_node, deep=deep) + mapping[key] = value + return mapping + + def construct_pairs(self, node, deep=False): + if not isinstance(node, MappingNode): + raise ConstructorError(None, None, + "expected a mapping node, but found %s" % node.id, + node.start_mark) + pairs = [] + for key_node, value_node in node.value: + key = self.construct_object(key_node, deep=deep) + value = self.construct_object(value_node, deep=deep) + pairs.append((key, value)) + return pairs + + @classmethod + def add_constructor(cls, tag, constructor): + if not 'yaml_constructors' in cls.__dict__: + cls.yaml_constructors = cls.yaml_constructors.copy() + cls.yaml_constructors[tag] = constructor + + @classmethod + def add_multi_constructor(cls, tag_prefix, multi_constructor): + if not 'yaml_multi_constructors' in cls.__dict__: + cls.yaml_multi_constructors = cls.yaml_multi_constructors.copy() + cls.yaml_multi_constructors[tag_prefix] = multi_constructor + +class SafeConstructor(BaseConstructor): + + def construct_scalar(self, node): + if isinstance(node, MappingNode): + for key_node, value_node in node.value: + if key_node.tag == 'tag:yaml.org,2002:value': + return self.construct_scalar(value_node) + return super().construct_scalar(node) + + def flatten_mapping(self, node): + merge = [] + index = 0 + while index < len(node.value): + key_node, value_node = node.value[index] + if key_node.tag == 'tag:yaml.org,2002:merge': + del node.value[index] + if isinstance(value_node, MappingNode): + self.flatten_mapping(value_node) + merge.extend(value_node.value) + elif isinstance(value_node, SequenceNode): + submerge = [] + for subnode in value_node.value: + if not isinstance(subnode, MappingNode): + raise ConstructorError("while constructing a mapping", + node.start_mark, + "expected a mapping for merging, but found %s" + % subnode.id, subnode.start_mark) + self.flatten_mapping(subnode) + submerge.append(subnode.value) + submerge.reverse() + for value in submerge: + merge.extend(value) + else: + raise ConstructorError("while constructing a mapping", node.start_mark, + "expected a mapping or list of mappings for merging, but found %s" + % value_node.id, value_node.start_mark) + elif key_node.tag == 'tag:yaml.org,2002:value': + key_node.tag = 'tag:yaml.org,2002:str' + index += 1 + else: + index += 1 + if merge: + node.value = merge + node.value + + def construct_mapping(self, node, deep=False): + if isinstance(node, MappingNode): + self.flatten_mapping(node) + return super().construct_mapping(node, deep=deep) + + def construct_yaml_null(self, node): + self.construct_scalar(node) + return None + + bool_values = { + 'yes': True, + 'no': False, + 'true': True, + 'false': False, + 'on': True, + 'off': False, + } + + def construct_yaml_bool(self, node): + value = self.construct_scalar(node) + return self.bool_values[value.lower()] + + def construct_yaml_int(self, node): + value = self.construct_scalar(node) + value = value.replace('_', '') + sign = +1 + if value[0] == '-': + sign = -1 + if value[0] in '+-': + value = value[1:] + if value == '0': + return 0 + elif value.startswith('0b'): + return sign*int(value[2:], 2) + elif value.startswith('0x'): + return sign*int(value[2:], 16) + elif value[0] == '0': + return sign*int(value, 8) + elif ':' in value: + digits = [int(part) for part in value.split(':')] + digits.reverse() + base = 1 + value = 0 + for digit in digits: + value += digit*base + base *= 60 + return sign*value + else: + return sign*int(value) + + inf_value = 1e300 + while inf_value != inf_value*inf_value: + inf_value *= inf_value + nan_value = -inf_value/inf_value # Trying to make a quiet NaN (like C99). + + def construct_yaml_float(self, node): + value = self.construct_scalar(node) + value = value.replace('_', '').lower() + sign = +1 + if value[0] == '-': + sign = -1 + if value[0] in '+-': + value = value[1:] + if value == '.inf': + return sign*self.inf_value + elif value == '.nan': + return self.nan_value + elif ':' in value: + digits = [float(part) for part in value.split(':')] + digits.reverse() + base = 1 + value = 0.0 + for digit in digits: + value += digit*base + base *= 60 + return sign*value + else: + return sign*float(value) + + def construct_yaml_binary(self, node): + try: + value = self.construct_scalar(node).encode('ascii') + except UnicodeEncodeError as exc: + raise ConstructorError(None, None, + "failed to convert base64 data into ascii: %s" % exc, + node.start_mark) + try: + if hasattr(base64, 'decodebytes'): + return base64.decodebytes(value) + else: + return base64.decodestring(value) + except binascii.Error as exc: + raise ConstructorError(None, None, + "failed to decode base64 data: %s" % exc, node.start_mark) + + timestamp_regexp = re.compile( + r'''^(?P[0-9][0-9][0-9][0-9]) + -(?P[0-9][0-9]?) + -(?P[0-9][0-9]?) + (?:(?:[Tt]|[ \t]+) + (?P[0-9][0-9]?) + :(?P[0-9][0-9]) + :(?P[0-9][0-9]) + (?:\.(?P[0-9]*))? + (?:[ \t]*(?PZ|(?P[-+])(?P[0-9][0-9]?) + (?::(?P[0-9][0-9]))?))?)?$''', re.X) + + def construct_yaml_timestamp(self, node): + value = self.construct_scalar(node) + match = self.timestamp_regexp.match(node.value) + values = match.groupdict() + year = int(values['year']) + month = int(values['month']) + day = int(values['day']) + if not values['hour']: + return datetime.date(year, month, day) + hour = int(values['hour']) + minute = int(values['minute']) + second = int(values['second']) + fraction = 0 + tzinfo = None + if values['fraction']: + fraction = values['fraction'][:6] + while len(fraction) < 6: + fraction += '0' + fraction = int(fraction) + if values['tz_sign']: + tz_hour = int(values['tz_hour']) + tz_minute = int(values['tz_minute'] or 0) + delta = datetime.timedelta(hours=tz_hour, minutes=tz_minute) + if values['tz_sign'] == '-': + delta = -delta + tzinfo = datetime.timezone(delta) + elif values['tz']: + tzinfo = datetime.timezone.utc + return datetime.datetime(year, month, day, hour, minute, second, fraction, + tzinfo=tzinfo) + + def construct_yaml_omap(self, node): + # Note: we do not check for duplicate keys, because it's too + # CPU-expensive. + omap = [] + yield omap + if not isinstance(node, SequenceNode): + raise ConstructorError("while constructing an ordered map", node.start_mark, + "expected a sequence, but found %s" % node.id, node.start_mark) + for subnode in node.value: + if not isinstance(subnode, MappingNode): + raise ConstructorError("while constructing an ordered map", node.start_mark, + "expected a mapping of length 1, but found %s" % subnode.id, + subnode.start_mark) + if len(subnode.value) != 1: + raise ConstructorError("while constructing an ordered map", node.start_mark, + "expected a single mapping item, but found %d items" % len(subnode.value), + subnode.start_mark) + key_node, value_node = subnode.value[0] + key = self.construct_object(key_node) + value = self.construct_object(value_node) + omap.append((key, value)) + + def construct_yaml_pairs(self, node): + # Note: the same code as `construct_yaml_omap`. + pairs = [] + yield pairs + if not isinstance(node, SequenceNode): + raise ConstructorError("while constructing pairs", node.start_mark, + "expected a sequence, but found %s" % node.id, node.start_mark) + for subnode in node.value: + if not isinstance(subnode, MappingNode): + raise ConstructorError("while constructing pairs", node.start_mark, + "expected a mapping of length 1, but found %s" % subnode.id, + subnode.start_mark) + if len(subnode.value) != 1: + raise ConstructorError("while constructing pairs", node.start_mark, + "expected a single mapping item, but found %d items" % len(subnode.value), + subnode.start_mark) + key_node, value_node = subnode.value[0] + key = self.construct_object(key_node) + value = self.construct_object(value_node) + pairs.append((key, value)) + + def construct_yaml_set(self, node): + data = set() + yield data + value = self.construct_mapping(node) + data.update(value) + + def construct_yaml_str(self, node): + return self.construct_scalar(node) + + def construct_yaml_seq(self, node): + data = [] + yield data + data.extend(self.construct_sequence(node)) + + def construct_yaml_map(self, node): + data = {} + yield data + value = self.construct_mapping(node) + data.update(value) + + def construct_yaml_object(self, node, cls): + data = cls.__new__(cls) + yield data + if hasattr(data, '__setstate__'): + state = self.construct_mapping(node, deep=True) + data.__setstate__(state) + else: + state = self.construct_mapping(node) + data.__dict__.update(state) + + def construct_undefined(self, node): + raise ConstructorError(None, None, + "could not determine a constructor for the tag %r" % node.tag, + node.start_mark) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:null', + SafeConstructor.construct_yaml_null) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:bool', + SafeConstructor.construct_yaml_bool) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:int', + SafeConstructor.construct_yaml_int) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:float', + SafeConstructor.construct_yaml_float) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:binary', + SafeConstructor.construct_yaml_binary) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:timestamp', + SafeConstructor.construct_yaml_timestamp) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:omap', + SafeConstructor.construct_yaml_omap) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:pairs', + SafeConstructor.construct_yaml_pairs) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:set', + SafeConstructor.construct_yaml_set) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:str', + SafeConstructor.construct_yaml_str) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:seq', + SafeConstructor.construct_yaml_seq) + +SafeConstructor.add_constructor( + 'tag:yaml.org,2002:map', + SafeConstructor.construct_yaml_map) + +SafeConstructor.add_constructor(None, + SafeConstructor.construct_undefined) + +class FullConstructor(SafeConstructor): + # 'extend' is blacklisted because it is used by + # construct_python_object_apply to add `listitems` to a newly generate + # python instance + def get_state_keys_blacklist(self): + return ['^extend$', '^__.*__$'] + + def get_state_keys_blacklist_regexp(self): + if not hasattr(self, 'state_keys_blacklist_regexp'): + self.state_keys_blacklist_regexp = re.compile('(' + '|'.join(self.get_state_keys_blacklist()) + ')') + return self.state_keys_blacklist_regexp + + def construct_python_str(self, node): + return self.construct_scalar(node) + + def construct_python_unicode(self, node): + return self.construct_scalar(node) + + def construct_python_bytes(self, node): + try: + value = self.construct_scalar(node).encode('ascii') + except UnicodeEncodeError as exc: + raise ConstructorError(None, None, + "failed to convert base64 data into ascii: %s" % exc, + node.start_mark) + try: + if hasattr(base64, 'decodebytes'): + return base64.decodebytes(value) + else: + return base64.decodestring(value) + except binascii.Error as exc: + raise ConstructorError(None, None, + "failed to decode base64 data: %s" % exc, node.start_mark) + + def construct_python_long(self, node): + return self.construct_yaml_int(node) + + def construct_python_complex(self, node): + return complex(self.construct_scalar(node)) + + def construct_python_tuple(self, node): + return tuple(self.construct_sequence(node)) + + def find_python_module(self, name, mark, unsafe=False): + if not name: + raise ConstructorError("while constructing a Python module", mark, + "expected non-empty name appended to the tag", mark) + if unsafe: + try: + __import__(name) + except ImportError as exc: + raise ConstructorError("while constructing a Python module", mark, + "cannot find module %r (%s)" % (name, exc), mark) + if name not in sys.modules: + raise ConstructorError("while constructing a Python module", mark, + "module %r is not imported" % name, mark) + return sys.modules[name] + + def find_python_name(self, name, mark, unsafe=False): + if not name: + raise ConstructorError("while constructing a Python object", mark, + "expected non-empty name appended to the tag", mark) + if '.' in name: + module_name, object_name = name.rsplit('.', 1) + else: + module_name = 'builtins' + object_name = name + if unsafe: + try: + __import__(module_name) + except ImportError as exc: + raise ConstructorError("while constructing a Python object", mark, + "cannot find module %r (%s)" % (module_name, exc), mark) + if module_name not in sys.modules: + raise ConstructorError("while constructing a Python object", mark, + "module %r is not imported" % module_name, mark) + module = sys.modules[module_name] + if not hasattr(module, object_name): + raise ConstructorError("while constructing a Python object", mark, + "cannot find %r in the module %r" + % (object_name, module.__name__), mark) + return getattr(module, object_name) + + def construct_python_name(self, suffix, node): + value = self.construct_scalar(node) + if value: + raise ConstructorError("while constructing a Python name", node.start_mark, + "expected the empty value, but found %r" % value, node.start_mark) + return self.find_python_name(suffix, node.start_mark) + + def construct_python_module(self, suffix, node): + value = self.construct_scalar(node) + if value: + raise ConstructorError("while constructing a Python module", node.start_mark, + "expected the empty value, but found %r" % value, node.start_mark) + return self.find_python_module(suffix, node.start_mark) + + def make_python_instance(self, suffix, node, + args=None, kwds=None, newobj=False, unsafe=False): + if not args: + args = [] + if not kwds: + kwds = {} + cls = self.find_python_name(suffix, node.start_mark) + if not (unsafe or isinstance(cls, type)): + raise ConstructorError("while constructing a Python instance", node.start_mark, + "expected a class, but found %r" % type(cls), + node.start_mark) + if newobj and isinstance(cls, type): + return cls.__new__(cls, *args, **kwds) + else: + return cls(*args, **kwds) + + def set_python_instance_state(self, instance, state, unsafe=False): + if hasattr(instance, '__setstate__'): + instance.__setstate__(state) + else: + slotstate = {} + if isinstance(state, tuple) and len(state) == 2: + state, slotstate = state + if hasattr(instance, '__dict__'): + if not unsafe and state: + for key in state.keys(): + self.check_state_key(key) + instance.__dict__.update(state) + elif state: + slotstate.update(state) + for key, value in slotstate.items(): + if not unsafe: + self.check_state_key(key) + setattr(instance, key, value) + + def construct_python_object(self, suffix, node): + # Format: + # !!python/object:module.name { ... state ... } + instance = self.make_python_instance(suffix, node, newobj=True) + yield instance + deep = hasattr(instance, '__setstate__') + state = self.construct_mapping(node, deep=deep) + self.set_python_instance_state(instance, state) + + def construct_python_object_apply(self, suffix, node, newobj=False): + # Format: + # !!python/object/apply # (or !!python/object/new) + # args: [ ... arguments ... ] + # kwds: { ... keywords ... } + # state: ... state ... + # listitems: [ ... listitems ... ] + # dictitems: { ... dictitems ... } + # or short format: + # !!python/object/apply [ ... arguments ... ] + # The difference between !!python/object/apply and !!python/object/new + # is how an object is created, check make_python_instance for details. + if isinstance(node, SequenceNode): + args = self.construct_sequence(node, deep=True) + kwds = {} + state = {} + listitems = [] + dictitems = {} + else: + value = self.construct_mapping(node, deep=True) + args = value.get('args', []) + kwds = value.get('kwds', {}) + state = value.get('state', {}) + listitems = value.get('listitems', []) + dictitems = value.get('dictitems', {}) + instance = self.make_python_instance(suffix, node, args, kwds, newobj) + if state: + self.set_python_instance_state(instance, state) + if listitems: + instance.extend(listitems) + if dictitems: + for key in dictitems: + instance[key] = dictitems[key] + return instance + + def construct_python_object_new(self, suffix, node): + return self.construct_python_object_apply(suffix, node, newobj=True) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/none', + FullConstructor.construct_yaml_null) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/bool', + FullConstructor.construct_yaml_bool) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/str', + FullConstructor.construct_python_str) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/unicode', + FullConstructor.construct_python_unicode) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/bytes', + FullConstructor.construct_python_bytes) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/int', + FullConstructor.construct_yaml_int) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/long', + FullConstructor.construct_python_long) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/float', + FullConstructor.construct_yaml_float) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/complex', + FullConstructor.construct_python_complex) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/list', + FullConstructor.construct_yaml_seq) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/tuple', + FullConstructor.construct_python_tuple) + +FullConstructor.add_constructor( + 'tag:yaml.org,2002:python/dict', + FullConstructor.construct_yaml_map) + +FullConstructor.add_multi_constructor( + 'tag:yaml.org,2002:python/name:', + FullConstructor.construct_python_name) + +class UnsafeConstructor(FullConstructor): + + def find_python_module(self, name, mark): + return super(UnsafeConstructor, self).find_python_module(name, mark, unsafe=True) + + def find_python_name(self, name, mark): + return super(UnsafeConstructor, self).find_python_name(name, mark, unsafe=True) + + def make_python_instance(self, suffix, node, args=None, kwds=None, newobj=False): + return super(UnsafeConstructor, self).make_python_instance( + suffix, node, args, kwds, newobj, unsafe=True) + + def set_python_instance_state(self, instance, state): + return super(UnsafeConstructor, self).set_python_instance_state( + instance, state, unsafe=True) + +UnsafeConstructor.add_multi_constructor( + 'tag:yaml.org,2002:python/module:', + UnsafeConstructor.construct_python_module) + +UnsafeConstructor.add_multi_constructor( + 'tag:yaml.org,2002:python/object:', + UnsafeConstructor.construct_python_object) + +UnsafeConstructor.add_multi_constructor( + 'tag:yaml.org,2002:python/object/new:', + UnsafeConstructor.construct_python_object_new) + +UnsafeConstructor.add_multi_constructor( + 'tag:yaml.org,2002:python/object/apply:', + UnsafeConstructor.construct_python_object_apply) + +# Constructor is same as UnsafeConstructor. Need to leave this in place in case +# people have extended it directly. +class Constructor(UnsafeConstructor): + pass diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/cyaml.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/cyaml.py new file mode 100644 index 000000000..0c2134587 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/cyaml.py @@ -0,0 +1,101 @@ + +__all__ = [ + 'CBaseLoader', 'CSafeLoader', 'CFullLoader', 'CUnsafeLoader', 'CLoader', + 'CBaseDumper', 'CSafeDumper', 'CDumper' +] + +from yaml._yaml import CParser, CEmitter + +from .constructor import * + +from .serializer import * +from .representer import * + +from .resolver import * + +class CBaseLoader(CParser, BaseConstructor, BaseResolver): + + def __init__(self, stream): + CParser.__init__(self, stream) + BaseConstructor.__init__(self) + BaseResolver.__init__(self) + +class CSafeLoader(CParser, SafeConstructor, Resolver): + + def __init__(self, stream): + CParser.__init__(self, stream) + SafeConstructor.__init__(self) + Resolver.__init__(self) + +class CFullLoader(CParser, FullConstructor, Resolver): + + def __init__(self, stream): + CParser.__init__(self, stream) + FullConstructor.__init__(self) + Resolver.__init__(self) + +class CUnsafeLoader(CParser, UnsafeConstructor, Resolver): + + def __init__(self, stream): + CParser.__init__(self, stream) + UnsafeConstructor.__init__(self) + Resolver.__init__(self) + +class CLoader(CParser, Constructor, Resolver): + + def __init__(self, stream): + CParser.__init__(self, stream) + Constructor.__init__(self) + Resolver.__init__(self) + +class CBaseDumper(CEmitter, BaseRepresenter, BaseResolver): + + def __init__(self, stream, + default_style=None, default_flow_style=False, + canonical=None, indent=None, width=None, + allow_unicode=None, line_break=None, + encoding=None, explicit_start=None, explicit_end=None, + version=None, tags=None, sort_keys=True): + CEmitter.__init__(self, stream, canonical=canonical, + indent=indent, width=width, encoding=encoding, + allow_unicode=allow_unicode, line_break=line_break, + explicit_start=explicit_start, explicit_end=explicit_end, + version=version, tags=tags) + Representer.__init__(self, default_style=default_style, + default_flow_style=default_flow_style, sort_keys=sort_keys) + Resolver.__init__(self) + +class CSafeDumper(CEmitter, SafeRepresenter, Resolver): + + def __init__(self, stream, + default_style=None, default_flow_style=False, + canonical=None, indent=None, width=None, + allow_unicode=None, line_break=None, + encoding=None, explicit_start=None, explicit_end=None, + version=None, tags=None, sort_keys=True): + CEmitter.__init__(self, stream, canonical=canonical, + indent=indent, width=width, encoding=encoding, + allow_unicode=allow_unicode, line_break=line_break, + explicit_start=explicit_start, explicit_end=explicit_end, + version=version, tags=tags) + SafeRepresenter.__init__(self, default_style=default_style, + default_flow_style=default_flow_style, sort_keys=sort_keys) + Resolver.__init__(self) + +class CDumper(CEmitter, Serializer, Representer, Resolver): + + def __init__(self, stream, + default_style=None, default_flow_style=False, + canonical=None, indent=None, width=None, + allow_unicode=None, line_break=None, + encoding=None, explicit_start=None, explicit_end=None, + version=None, tags=None, sort_keys=True): + CEmitter.__init__(self, stream, canonical=canonical, + indent=indent, width=width, encoding=encoding, + allow_unicode=allow_unicode, line_break=line_break, + explicit_start=explicit_start, explicit_end=explicit_end, + version=version, tags=tags) + Representer.__init__(self, default_style=default_style, + default_flow_style=default_flow_style, sort_keys=sort_keys) + Resolver.__init__(self) + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/dumper.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/dumper.py new file mode 100644 index 000000000..6aadba551 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/dumper.py @@ -0,0 +1,62 @@ + +__all__ = ['BaseDumper', 'SafeDumper', 'Dumper'] + +from .emitter import * +from .serializer import * +from .representer import * +from .resolver import * + +class BaseDumper(Emitter, Serializer, BaseRepresenter, BaseResolver): + + def __init__(self, stream, + default_style=None, default_flow_style=False, + canonical=None, indent=None, width=None, + allow_unicode=None, line_break=None, + encoding=None, explicit_start=None, explicit_end=None, + version=None, tags=None, sort_keys=True): + Emitter.__init__(self, stream, canonical=canonical, + indent=indent, width=width, + allow_unicode=allow_unicode, line_break=line_break) + Serializer.__init__(self, encoding=encoding, + explicit_start=explicit_start, explicit_end=explicit_end, + version=version, tags=tags) + Representer.__init__(self, default_style=default_style, + default_flow_style=default_flow_style, sort_keys=sort_keys) + Resolver.__init__(self) + +class SafeDumper(Emitter, Serializer, SafeRepresenter, Resolver): + + def __init__(self, stream, + default_style=None, default_flow_style=False, + canonical=None, indent=None, width=None, + allow_unicode=None, line_break=None, + encoding=None, explicit_start=None, explicit_end=None, + version=None, tags=None, sort_keys=True): + Emitter.__init__(self, stream, canonical=canonical, + indent=indent, width=width, + allow_unicode=allow_unicode, line_break=line_break) + Serializer.__init__(self, encoding=encoding, + explicit_start=explicit_start, explicit_end=explicit_end, + version=version, tags=tags) + SafeRepresenter.__init__(self, default_style=default_style, + default_flow_style=default_flow_style, sort_keys=sort_keys) + Resolver.__init__(self) + +class Dumper(Emitter, Serializer, Representer, Resolver): + + def __init__(self, stream, + default_style=None, default_flow_style=False, + canonical=None, indent=None, width=None, + allow_unicode=None, line_break=None, + encoding=None, explicit_start=None, explicit_end=None, + version=None, tags=None, sort_keys=True): + Emitter.__init__(self, stream, canonical=canonical, + indent=indent, width=width, + allow_unicode=allow_unicode, line_break=line_break) + Serializer.__init__(self, encoding=encoding, + explicit_start=explicit_start, explicit_end=explicit_end, + version=version, tags=tags) + Representer.__init__(self, default_style=default_style, + default_flow_style=default_flow_style, sort_keys=sort_keys) + Resolver.__init__(self) + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/emitter.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/emitter.py new file mode 100644 index 000000000..a664d0111 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/emitter.py @@ -0,0 +1,1137 @@ + +# Emitter expects events obeying the following grammar: +# stream ::= STREAM-START document* STREAM-END +# document ::= DOCUMENT-START node DOCUMENT-END +# node ::= SCALAR | sequence | mapping +# sequence ::= SEQUENCE-START node* SEQUENCE-END +# mapping ::= MAPPING-START (node node)* MAPPING-END + +__all__ = ['Emitter', 'EmitterError'] + +from .error import YAMLError +from .events import * + +class EmitterError(YAMLError): + pass + +class ScalarAnalysis: + def __init__(self, scalar, empty, multiline, + allow_flow_plain, allow_block_plain, + allow_single_quoted, allow_double_quoted, + allow_block): + self.scalar = scalar + self.empty = empty + self.multiline = multiline + self.allow_flow_plain = allow_flow_plain + self.allow_block_plain = allow_block_plain + self.allow_single_quoted = allow_single_quoted + self.allow_double_quoted = allow_double_quoted + self.allow_block = allow_block + +class Emitter: + + DEFAULT_TAG_PREFIXES = { + '!' : '!', + 'tag:yaml.org,2002:' : '!!', + } + + def __init__(self, stream, canonical=None, indent=None, width=None, + allow_unicode=None, line_break=None): + + # The stream should have the methods `write` and possibly `flush`. + self.stream = stream + + # Encoding can be overridden by STREAM-START. + self.encoding = None + + # Emitter is a state machine with a stack of states to handle nested + # structures. + self.states = [] + self.state = self.expect_stream_start + + # Current event and the event queue. + self.events = [] + self.event = None + + # The current indentation level and the stack of previous indents. + self.indents = [] + self.indent = None + + # Flow level. + self.flow_level = 0 + + # Contexts. + self.root_context = False + self.sequence_context = False + self.mapping_context = False + self.simple_key_context = False + + # Characteristics of the last emitted character: + # - current position. + # - is it a whitespace? + # - is it an indention character + # (indentation space, '-', '?', or ':')? + self.line = 0 + self.column = 0 + self.whitespace = True + self.indention = True + + # Whether the document requires an explicit document indicator + self.open_ended = False + + # Formatting details. + self.canonical = canonical + self.allow_unicode = allow_unicode + self.best_indent = 2 + if indent and 1 < indent < 10: + self.best_indent = indent + self.best_width = 80 + if width and width > self.best_indent*2: + self.best_width = width + self.best_line_break = '\n' + if line_break in ['\r', '\n', '\r\n']: + self.best_line_break = line_break + + # Tag prefixes. + self.tag_prefixes = None + + # Prepared anchor and tag. + self.prepared_anchor = None + self.prepared_tag = None + + # Scalar analysis and style. + self.analysis = None + self.style = None + + def dispose(self): + # Reset the state attributes (to clear self-references) + self.states = [] + self.state = None + + def emit(self, event): + self.events.append(event) + while not self.need_more_events(): + self.event = self.events.pop(0) + self.state() + self.event = None + + # In some cases, we wait for a few next events before emitting. + + def need_more_events(self): + if not self.events: + return True + event = self.events[0] + if isinstance(event, DocumentStartEvent): + return self.need_events(1) + elif isinstance(event, SequenceStartEvent): + return self.need_events(2) + elif isinstance(event, MappingStartEvent): + return self.need_events(3) + else: + return False + + def need_events(self, count): + level = 0 + for event in self.events[1:]: + if isinstance(event, (DocumentStartEvent, CollectionStartEvent)): + level += 1 + elif isinstance(event, (DocumentEndEvent, CollectionEndEvent)): + level -= 1 + elif isinstance(event, StreamEndEvent): + level = -1 + if level < 0: + return False + return (len(self.events) < count+1) + + def increase_indent(self, flow=False, indentless=False): + self.indents.append(self.indent) + if self.indent is None: + if flow: + self.indent = self.best_indent + else: + self.indent = 0 + elif not indentless: + self.indent += self.best_indent + + # States. + + # Stream handlers. + + def expect_stream_start(self): + if isinstance(self.event, StreamStartEvent): + if self.event.encoding and not hasattr(self.stream, 'encoding'): + self.encoding = self.event.encoding + self.write_stream_start() + self.state = self.expect_first_document_start + else: + raise EmitterError("expected StreamStartEvent, but got %s" + % self.event) + + def expect_nothing(self): + raise EmitterError("expected nothing, but got %s" % self.event) + + # Document handlers. + + def expect_first_document_start(self): + return self.expect_document_start(first=True) + + def expect_document_start(self, first=False): + if isinstance(self.event, DocumentStartEvent): + if (self.event.version or self.event.tags) and self.open_ended: + self.write_indicator('...', True) + self.write_indent() + if self.event.version: + version_text = self.prepare_version(self.event.version) + self.write_version_directive(version_text) + self.tag_prefixes = self.DEFAULT_TAG_PREFIXES.copy() + if self.event.tags: + handles = sorted(self.event.tags.keys()) + for handle in handles: + prefix = self.event.tags[handle] + self.tag_prefixes[prefix] = handle + handle_text = self.prepare_tag_handle(handle) + prefix_text = self.prepare_tag_prefix(prefix) + self.write_tag_directive(handle_text, prefix_text) + implicit = (first and not self.event.explicit and not self.canonical + and not self.event.version and not self.event.tags + and not self.check_empty_document()) + if not implicit: + self.write_indent() + self.write_indicator('---', True) + if self.canonical: + self.write_indent() + self.state = self.expect_document_root + elif isinstance(self.event, StreamEndEvent): + if self.open_ended: + self.write_indicator('...', True) + self.write_indent() + self.write_stream_end() + self.state = self.expect_nothing + else: + raise EmitterError("expected DocumentStartEvent, but got %s" + % self.event) + + def expect_document_end(self): + if isinstance(self.event, DocumentEndEvent): + self.write_indent() + if self.event.explicit: + self.write_indicator('...', True) + self.write_indent() + self.flush_stream() + self.state = self.expect_document_start + else: + raise EmitterError("expected DocumentEndEvent, but got %s" + % self.event) + + def expect_document_root(self): + self.states.append(self.expect_document_end) + self.expect_node(root=True) + + # Node handlers. + + def expect_node(self, root=False, sequence=False, mapping=False, + simple_key=False): + self.root_context = root + self.sequence_context = sequence + self.mapping_context = mapping + self.simple_key_context = simple_key + if isinstance(self.event, AliasEvent): + self.expect_alias() + elif isinstance(self.event, (ScalarEvent, CollectionStartEvent)): + self.process_anchor('&') + self.process_tag() + if isinstance(self.event, ScalarEvent): + self.expect_scalar() + elif isinstance(self.event, SequenceStartEvent): + if self.flow_level or self.canonical or self.event.flow_style \ + or self.check_empty_sequence(): + self.expect_flow_sequence() + else: + self.expect_block_sequence() + elif isinstance(self.event, MappingStartEvent): + if self.flow_level or self.canonical or self.event.flow_style \ + or self.check_empty_mapping(): + self.expect_flow_mapping() + else: + self.expect_block_mapping() + else: + raise EmitterError("expected NodeEvent, but got %s" % self.event) + + def expect_alias(self): + if self.event.anchor is None: + raise EmitterError("anchor is not specified for alias") + self.process_anchor('*') + self.state = self.states.pop() + + def expect_scalar(self): + self.increase_indent(flow=True) + self.process_scalar() + self.indent = self.indents.pop() + self.state = self.states.pop() + + # Flow sequence handlers. + + def expect_flow_sequence(self): + self.write_indicator('[', True, whitespace=True) + self.flow_level += 1 + self.increase_indent(flow=True) + self.state = self.expect_first_flow_sequence_item + + def expect_first_flow_sequence_item(self): + if isinstance(self.event, SequenceEndEvent): + self.indent = self.indents.pop() + self.flow_level -= 1 + self.write_indicator(']', False) + self.state = self.states.pop() + else: + if self.canonical or self.column > self.best_width: + self.write_indent() + self.states.append(self.expect_flow_sequence_item) + self.expect_node(sequence=True) + + def expect_flow_sequence_item(self): + if isinstance(self.event, SequenceEndEvent): + self.indent = self.indents.pop() + self.flow_level -= 1 + if self.canonical: + self.write_indicator(',', False) + self.write_indent() + self.write_indicator(']', False) + self.state = self.states.pop() + else: + self.write_indicator(',', False) + if self.canonical or self.column > self.best_width: + self.write_indent() + self.states.append(self.expect_flow_sequence_item) + self.expect_node(sequence=True) + + # Flow mapping handlers. + + def expect_flow_mapping(self): + self.write_indicator('{', True, whitespace=True) + self.flow_level += 1 + self.increase_indent(flow=True) + self.state = self.expect_first_flow_mapping_key + + def expect_first_flow_mapping_key(self): + if isinstance(self.event, MappingEndEvent): + self.indent = self.indents.pop() + self.flow_level -= 1 + self.write_indicator('}', False) + self.state = self.states.pop() + else: + if self.canonical or self.column > self.best_width: + self.write_indent() + if not self.canonical and self.check_simple_key(): + self.states.append(self.expect_flow_mapping_simple_value) + self.expect_node(mapping=True, simple_key=True) + else: + self.write_indicator('?', True) + self.states.append(self.expect_flow_mapping_value) + self.expect_node(mapping=True) + + def expect_flow_mapping_key(self): + if isinstance(self.event, MappingEndEvent): + self.indent = self.indents.pop() + self.flow_level -= 1 + if self.canonical: + self.write_indicator(',', False) + self.write_indent() + self.write_indicator('}', False) + self.state = self.states.pop() + else: + self.write_indicator(',', False) + if self.canonical or self.column > self.best_width: + self.write_indent() + if not self.canonical and self.check_simple_key(): + self.states.append(self.expect_flow_mapping_simple_value) + self.expect_node(mapping=True, simple_key=True) + else: + self.write_indicator('?', True) + self.states.append(self.expect_flow_mapping_value) + self.expect_node(mapping=True) + + def expect_flow_mapping_simple_value(self): + self.write_indicator(':', False) + self.states.append(self.expect_flow_mapping_key) + self.expect_node(mapping=True) + + def expect_flow_mapping_value(self): + if self.canonical or self.column > self.best_width: + self.write_indent() + self.write_indicator(':', True) + self.states.append(self.expect_flow_mapping_key) + self.expect_node(mapping=True) + + # Block sequence handlers. + + def expect_block_sequence(self): + indentless = (self.mapping_context and not self.indention) + self.increase_indent(flow=False, indentless=indentless) + self.state = self.expect_first_block_sequence_item + + def expect_first_block_sequence_item(self): + return self.expect_block_sequence_item(first=True) + + def expect_block_sequence_item(self, first=False): + if not first and isinstance(self.event, SequenceEndEvent): + self.indent = self.indents.pop() + self.state = self.states.pop() + else: + self.write_indent() + self.write_indicator('-', True, indention=True) + self.states.append(self.expect_block_sequence_item) + self.expect_node(sequence=True) + + # Block mapping handlers. + + def expect_block_mapping(self): + self.increase_indent(flow=False) + self.state = self.expect_first_block_mapping_key + + def expect_first_block_mapping_key(self): + return self.expect_block_mapping_key(first=True) + + def expect_block_mapping_key(self, first=False): + if not first and isinstance(self.event, MappingEndEvent): + self.indent = self.indents.pop() + self.state = self.states.pop() + else: + self.write_indent() + if self.check_simple_key(): + self.states.append(self.expect_block_mapping_simple_value) + self.expect_node(mapping=True, simple_key=True) + else: + self.write_indicator('?', True, indention=True) + self.states.append(self.expect_block_mapping_value) + self.expect_node(mapping=True) + + def expect_block_mapping_simple_value(self): + self.write_indicator(':', False) + self.states.append(self.expect_block_mapping_key) + self.expect_node(mapping=True) + + def expect_block_mapping_value(self): + self.write_indent() + self.write_indicator(':', True, indention=True) + self.states.append(self.expect_block_mapping_key) + self.expect_node(mapping=True) + + # Checkers. + + def check_empty_sequence(self): + return (isinstance(self.event, SequenceStartEvent) and self.events + and isinstance(self.events[0], SequenceEndEvent)) + + def check_empty_mapping(self): + return (isinstance(self.event, MappingStartEvent) and self.events + and isinstance(self.events[0], MappingEndEvent)) + + def check_empty_document(self): + if not isinstance(self.event, DocumentStartEvent) or not self.events: + return False + event = self.events[0] + return (isinstance(event, ScalarEvent) and event.anchor is None + and event.tag is None and event.implicit and event.value == '') + + def check_simple_key(self): + length = 0 + if isinstance(self.event, NodeEvent) and self.event.anchor is not None: + if self.prepared_anchor is None: + self.prepared_anchor = self.prepare_anchor(self.event.anchor) + length += len(self.prepared_anchor) + if isinstance(self.event, (ScalarEvent, CollectionStartEvent)) \ + and self.event.tag is not None: + if self.prepared_tag is None: + self.prepared_tag = self.prepare_tag(self.event.tag) + length += len(self.prepared_tag) + if isinstance(self.event, ScalarEvent): + if self.analysis is None: + self.analysis = self.analyze_scalar(self.event.value) + length += len(self.analysis.scalar) + return (length < 128 and (isinstance(self.event, AliasEvent) + or (isinstance(self.event, ScalarEvent) + and not self.analysis.empty and not self.analysis.multiline) + or self.check_empty_sequence() or self.check_empty_mapping())) + + # Anchor, Tag, and Scalar processors. + + def process_anchor(self, indicator): + if self.event.anchor is None: + self.prepared_anchor = None + return + if self.prepared_anchor is None: + self.prepared_anchor = self.prepare_anchor(self.event.anchor) + if self.prepared_anchor: + self.write_indicator(indicator+self.prepared_anchor, True) + self.prepared_anchor = None + + def process_tag(self): + tag = self.event.tag + if isinstance(self.event, ScalarEvent): + if self.style is None: + self.style = self.choose_scalar_style() + if ((not self.canonical or tag is None) and + ((self.style == '' and self.event.implicit[0]) + or (self.style != '' and self.event.implicit[1]))): + self.prepared_tag = None + return + if self.event.implicit[0] and tag is None: + tag = '!' + self.prepared_tag = None + else: + if (not self.canonical or tag is None) and self.event.implicit: + self.prepared_tag = None + return + if tag is None: + raise EmitterError("tag is not specified") + if self.prepared_tag is None: + self.prepared_tag = self.prepare_tag(tag) + if self.prepared_tag: + self.write_indicator(self.prepared_tag, True) + self.prepared_tag = None + + def choose_scalar_style(self): + if self.analysis is None: + self.analysis = self.analyze_scalar(self.event.value) + if self.event.style == '"' or self.canonical: + return '"' + if not self.event.style and self.event.implicit[0]: + if (not (self.simple_key_context and + (self.analysis.empty or self.analysis.multiline)) + and (self.flow_level and self.analysis.allow_flow_plain + or (not self.flow_level and self.analysis.allow_block_plain))): + return '' + if self.event.style and self.event.style in '|>': + if (not self.flow_level and not self.simple_key_context + and self.analysis.allow_block): + return self.event.style + if not self.event.style or self.event.style == '\'': + if (self.analysis.allow_single_quoted and + not (self.simple_key_context and self.analysis.multiline)): + return '\'' + return '"' + + def process_scalar(self): + if self.analysis is None: + self.analysis = self.analyze_scalar(self.event.value) + if self.style is None: + self.style = self.choose_scalar_style() + split = (not self.simple_key_context) + #if self.analysis.multiline and split \ + # and (not self.style or self.style in '\'\"'): + # self.write_indent() + if self.style == '"': + self.write_double_quoted(self.analysis.scalar, split) + elif self.style == '\'': + self.write_single_quoted(self.analysis.scalar, split) + elif self.style == '>': + self.write_folded(self.analysis.scalar) + elif self.style == '|': + self.write_literal(self.analysis.scalar) + else: + self.write_plain(self.analysis.scalar, split) + self.analysis = None + self.style = None + + # Analyzers. + + def prepare_version(self, version): + major, minor = version + if major != 1: + raise EmitterError("unsupported YAML version: %d.%d" % (major, minor)) + return '%d.%d' % (major, minor) + + def prepare_tag_handle(self, handle): + if not handle: + raise EmitterError("tag handle must not be empty") + if handle[0] != '!' or handle[-1] != '!': + raise EmitterError("tag handle must start and end with '!': %r" % handle) + for ch in handle[1:-1]: + if not ('0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ + or ch in '-_'): + raise EmitterError("invalid character %r in the tag handle: %r" + % (ch, handle)) + return handle + + def prepare_tag_prefix(self, prefix): + if not prefix: + raise EmitterError("tag prefix must not be empty") + chunks = [] + start = end = 0 + if prefix[0] == '!': + end = 1 + while end < len(prefix): + ch = prefix[end] + if '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ + or ch in '-;/?!:@&=+$,_.~*\'()[]': + end += 1 + else: + if start < end: + chunks.append(prefix[start:end]) + start = end = end+1 + data = ch.encode('utf-8') + for ch in data: + chunks.append('%%%02X' % ord(ch)) + if start < end: + chunks.append(prefix[start:end]) + return ''.join(chunks) + + def prepare_tag(self, tag): + if not tag: + raise EmitterError("tag must not be empty") + if tag == '!': + return tag + handle = None + suffix = tag + prefixes = sorted(self.tag_prefixes.keys()) + for prefix in prefixes: + if tag.startswith(prefix) \ + and (prefix == '!' or len(prefix) < len(tag)): + handle = self.tag_prefixes[prefix] + suffix = tag[len(prefix):] + chunks = [] + start = end = 0 + while end < len(suffix): + ch = suffix[end] + if '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ + or ch in '-;/?:@&=+$,_.~*\'()[]' \ + or (ch == '!' and handle != '!'): + end += 1 + else: + if start < end: + chunks.append(suffix[start:end]) + start = end = end+1 + data = ch.encode('utf-8') + for ch in data: + chunks.append('%%%02X' % ch) + if start < end: + chunks.append(suffix[start:end]) + suffix_text = ''.join(chunks) + if handle: + return '%s%s' % (handle, suffix_text) + else: + return '!<%s>' % suffix_text + + def prepare_anchor(self, anchor): + if not anchor: + raise EmitterError("anchor must not be empty") + for ch in anchor: + if not ('0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ + or ch in '-_'): + raise EmitterError("invalid character %r in the anchor: %r" + % (ch, anchor)) + return anchor + + def analyze_scalar(self, scalar): + + # Empty scalar is a special case. + if not scalar: + return ScalarAnalysis(scalar=scalar, empty=True, multiline=False, + allow_flow_plain=False, allow_block_plain=True, + allow_single_quoted=True, allow_double_quoted=True, + allow_block=False) + + # Indicators and special characters. + block_indicators = False + flow_indicators = False + line_breaks = False + special_characters = False + + # Important whitespace combinations. + leading_space = False + leading_break = False + trailing_space = False + trailing_break = False + break_space = False + space_break = False + + # Check document indicators. + if scalar.startswith('---') or scalar.startswith('...'): + block_indicators = True + flow_indicators = True + + # First character or preceded by a whitespace. + preceded_by_whitespace = True + + # Last character or followed by a whitespace. + followed_by_whitespace = (len(scalar) == 1 or + scalar[1] in '\0 \t\r\n\x85\u2028\u2029') + + # The previous character is a space. + previous_space = False + + # The previous character is a break. + previous_break = False + + index = 0 + while index < len(scalar): + ch = scalar[index] + + # Check for indicators. + if index == 0: + # Leading indicators are special characters. + if ch in '#,[]{}&*!|>\'\"%@`': + flow_indicators = True + block_indicators = True + if ch in '?:': + flow_indicators = True + if followed_by_whitespace: + block_indicators = True + if ch == '-' and followed_by_whitespace: + flow_indicators = True + block_indicators = True + else: + # Some indicators cannot appear within a scalar as well. + if ch in ',?[]{}': + flow_indicators = True + if ch == ':': + flow_indicators = True + if followed_by_whitespace: + block_indicators = True + if ch == '#' and preceded_by_whitespace: + flow_indicators = True + block_indicators = True + + # Check for line breaks, special, and unicode characters. + if ch in '\n\x85\u2028\u2029': + line_breaks = True + if not (ch == '\n' or '\x20' <= ch <= '\x7E'): + if (ch == '\x85' or '\xA0' <= ch <= '\uD7FF' + or '\uE000' <= ch <= '\uFFFD' + or '\U00010000' <= ch < '\U0010ffff') and ch != '\uFEFF': + unicode_characters = True + if not self.allow_unicode: + special_characters = True + else: + special_characters = True + + # Detect important whitespace combinations. + if ch == ' ': + if index == 0: + leading_space = True + if index == len(scalar)-1: + trailing_space = True + if previous_break: + break_space = True + previous_space = True + previous_break = False + elif ch in '\n\x85\u2028\u2029': + if index == 0: + leading_break = True + if index == len(scalar)-1: + trailing_break = True + if previous_space: + space_break = True + previous_space = False + previous_break = True + else: + previous_space = False + previous_break = False + + # Prepare for the next character. + index += 1 + preceded_by_whitespace = (ch in '\0 \t\r\n\x85\u2028\u2029') + followed_by_whitespace = (index+1 >= len(scalar) or + scalar[index+1] in '\0 \t\r\n\x85\u2028\u2029') + + # Let's decide what styles are allowed. + allow_flow_plain = True + allow_block_plain = True + allow_single_quoted = True + allow_double_quoted = True + allow_block = True + + # Leading and trailing whitespaces are bad for plain scalars. + if (leading_space or leading_break + or trailing_space or trailing_break): + allow_flow_plain = allow_block_plain = False + + # We do not permit trailing spaces for block scalars. + if trailing_space: + allow_block = False + + # Spaces at the beginning of a new line are only acceptable for block + # scalars. + if break_space: + allow_flow_plain = allow_block_plain = allow_single_quoted = False + + # Spaces followed by breaks, as well as special character are only + # allowed for double quoted scalars. + if space_break or special_characters: + allow_flow_plain = allow_block_plain = \ + allow_single_quoted = allow_block = False + + # Although the plain scalar writer supports breaks, we never emit + # multiline plain scalars. + if line_breaks: + allow_flow_plain = allow_block_plain = False + + # Flow indicators are forbidden for flow plain scalars. + if flow_indicators: + allow_flow_plain = False + + # Block indicators are forbidden for block plain scalars. + if block_indicators: + allow_block_plain = False + + return ScalarAnalysis(scalar=scalar, + empty=False, multiline=line_breaks, + allow_flow_plain=allow_flow_plain, + allow_block_plain=allow_block_plain, + allow_single_quoted=allow_single_quoted, + allow_double_quoted=allow_double_quoted, + allow_block=allow_block) + + # Writers. + + def flush_stream(self): + if hasattr(self.stream, 'flush'): + self.stream.flush() + + def write_stream_start(self): + # Write BOM if needed. + if self.encoding and self.encoding.startswith('utf-16'): + self.stream.write('\uFEFF'.encode(self.encoding)) + + def write_stream_end(self): + self.flush_stream() + + def write_indicator(self, indicator, need_whitespace, + whitespace=False, indention=False): + if self.whitespace or not need_whitespace: + data = indicator + else: + data = ' '+indicator + self.whitespace = whitespace + self.indention = self.indention and indention + self.column += len(data) + self.open_ended = False + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + + def write_indent(self): + indent = self.indent or 0 + if not self.indention or self.column > indent \ + or (self.column == indent and not self.whitespace): + self.write_line_break() + if self.column < indent: + self.whitespace = True + data = ' '*(indent-self.column) + self.column = indent + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + + def write_line_break(self, data=None): + if data is None: + data = self.best_line_break + self.whitespace = True + self.indention = True + self.line += 1 + self.column = 0 + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + + def write_version_directive(self, version_text): + data = '%%YAML %s' % version_text + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + self.write_line_break() + + def write_tag_directive(self, handle_text, prefix_text): + data = '%%TAG %s %s' % (handle_text, prefix_text) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + self.write_line_break() + + # Scalar streams. + + def write_single_quoted(self, text, split=True): + self.write_indicator('\'', True) + spaces = False + breaks = False + start = end = 0 + while end <= len(text): + ch = None + if end < len(text): + ch = text[end] + if spaces: + if ch is None or ch != ' ': + if start+1 == end and self.column > self.best_width and split \ + and start != 0 and end != len(text): + self.write_indent() + else: + data = text[start:end] + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + start = end + elif breaks: + if ch is None or ch not in '\n\x85\u2028\u2029': + if text[start] == '\n': + self.write_line_break() + for br in text[start:end]: + if br == '\n': + self.write_line_break() + else: + self.write_line_break(br) + self.write_indent() + start = end + else: + if ch is None or ch in ' \n\x85\u2028\u2029' or ch == '\'': + if start < end: + data = text[start:end] + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + start = end + if ch == '\'': + data = '\'\'' + self.column += 2 + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + start = end + 1 + if ch is not None: + spaces = (ch == ' ') + breaks = (ch in '\n\x85\u2028\u2029') + end += 1 + self.write_indicator('\'', False) + + ESCAPE_REPLACEMENTS = { + '\0': '0', + '\x07': 'a', + '\x08': 'b', + '\x09': 't', + '\x0A': 'n', + '\x0B': 'v', + '\x0C': 'f', + '\x0D': 'r', + '\x1B': 'e', + '\"': '\"', + '\\': '\\', + '\x85': 'N', + '\xA0': '_', + '\u2028': 'L', + '\u2029': 'P', + } + + def write_double_quoted(self, text, split=True): + self.write_indicator('"', True) + start = end = 0 + while end <= len(text): + ch = None + if end < len(text): + ch = text[end] + if ch is None or ch in '"\\\x85\u2028\u2029\uFEFF' \ + or not ('\x20' <= ch <= '\x7E' + or (self.allow_unicode + and ('\xA0' <= ch <= '\uD7FF' + or '\uE000' <= ch <= '\uFFFD'))): + if start < end: + data = text[start:end] + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + start = end + if ch is not None: + if ch in self.ESCAPE_REPLACEMENTS: + data = '\\'+self.ESCAPE_REPLACEMENTS[ch] + elif ch <= '\xFF': + data = '\\x%02X' % ord(ch) + elif ch <= '\uFFFF': + data = '\\u%04X' % ord(ch) + else: + data = '\\U%08X' % ord(ch) + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + start = end+1 + if 0 < end < len(text)-1 and (ch == ' ' or start >= end) \ + and self.column+(end-start) > self.best_width and split: + data = text[start:end]+'\\' + if start < end: + start = end + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + self.write_indent() + self.whitespace = False + self.indention = False + if text[start] == ' ': + data = '\\' + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + end += 1 + self.write_indicator('"', False) + + def determine_block_hints(self, text): + hints = '' + if text: + if text[0] in ' \n\x85\u2028\u2029': + hints += str(self.best_indent) + if text[-1] not in '\n\x85\u2028\u2029': + hints += '-' + elif len(text) == 1 or text[-2] in '\n\x85\u2028\u2029': + hints += '+' + return hints + + def write_folded(self, text): + hints = self.determine_block_hints(text) + self.write_indicator('>'+hints, True) + if hints[-1:] == '+': + self.open_ended = True + self.write_line_break() + leading_space = True + spaces = False + breaks = True + start = end = 0 + while end <= len(text): + ch = None + if end < len(text): + ch = text[end] + if breaks: + if ch is None or ch not in '\n\x85\u2028\u2029': + if not leading_space and ch is not None and ch != ' ' \ + and text[start] == '\n': + self.write_line_break() + leading_space = (ch == ' ') + for br in text[start:end]: + if br == '\n': + self.write_line_break() + else: + self.write_line_break(br) + if ch is not None: + self.write_indent() + start = end + elif spaces: + if ch != ' ': + if start+1 == end and self.column > self.best_width: + self.write_indent() + else: + data = text[start:end] + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + start = end + else: + if ch is None or ch in ' \n\x85\u2028\u2029': + data = text[start:end] + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + if ch is None: + self.write_line_break() + start = end + if ch is not None: + breaks = (ch in '\n\x85\u2028\u2029') + spaces = (ch == ' ') + end += 1 + + def write_literal(self, text): + hints = self.determine_block_hints(text) + self.write_indicator('|'+hints, True) + if hints[-1:] == '+': + self.open_ended = True + self.write_line_break() + breaks = True + start = end = 0 + while end <= len(text): + ch = None + if end < len(text): + ch = text[end] + if breaks: + if ch is None or ch not in '\n\x85\u2028\u2029': + for br in text[start:end]: + if br == '\n': + self.write_line_break() + else: + self.write_line_break(br) + if ch is not None: + self.write_indent() + start = end + else: + if ch is None or ch in '\n\x85\u2028\u2029': + data = text[start:end] + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + if ch is None: + self.write_line_break() + start = end + if ch is not None: + breaks = (ch in '\n\x85\u2028\u2029') + end += 1 + + def write_plain(self, text, split=True): + if self.root_context: + self.open_ended = True + if not text: + return + if not self.whitespace: + data = ' ' + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + self.whitespace = False + self.indention = False + spaces = False + breaks = False + start = end = 0 + while end <= len(text): + ch = None + if end < len(text): + ch = text[end] + if spaces: + if ch != ' ': + if start+1 == end and self.column > self.best_width and split: + self.write_indent() + self.whitespace = False + self.indention = False + else: + data = text[start:end] + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + start = end + elif breaks: + if ch not in '\n\x85\u2028\u2029': + if text[start] == '\n': + self.write_line_break() + for br in text[start:end]: + if br == '\n': + self.write_line_break() + else: + self.write_line_break(br) + self.write_indent() + self.whitespace = False + self.indention = False + start = end + else: + if ch is None or ch in ' \n\x85\u2028\u2029': + data = text[start:end] + self.column += len(data) + if self.encoding: + data = data.encode(self.encoding) + self.stream.write(data) + start = end + if ch is not None: + spaces = (ch == ' ') + breaks = (ch in '\n\x85\u2028\u2029') + end += 1 diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/error.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/error.py new file mode 100644 index 000000000..b796b4dc5 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/error.py @@ -0,0 +1,75 @@ + +__all__ = ['Mark', 'YAMLError', 'MarkedYAMLError'] + +class Mark: + + def __init__(self, name, index, line, column, buffer, pointer): + self.name = name + self.index = index + self.line = line + self.column = column + self.buffer = buffer + self.pointer = pointer + + def get_snippet(self, indent=4, max_length=75): + if self.buffer is None: + return None + head = '' + start = self.pointer + while start > 0 and self.buffer[start-1] not in '\0\r\n\x85\u2028\u2029': + start -= 1 + if self.pointer-start > max_length/2-1: + head = ' ... ' + start += 5 + break + tail = '' + end = self.pointer + while end < len(self.buffer) and self.buffer[end] not in '\0\r\n\x85\u2028\u2029': + end += 1 + if end-self.pointer > max_length/2-1: + tail = ' ... ' + end -= 5 + break + snippet = self.buffer[start:end] + return ' '*indent + head + snippet + tail + '\n' \ + + ' '*(indent+self.pointer-start+len(head)) + '^' + + def __str__(self): + snippet = self.get_snippet() + where = " in \"%s\", line %d, column %d" \ + % (self.name, self.line+1, self.column+1) + if snippet is not None: + where += ":\n"+snippet + return where + +class YAMLError(Exception): + pass + +class MarkedYAMLError(YAMLError): + + def __init__(self, context=None, context_mark=None, + problem=None, problem_mark=None, note=None): + self.context = context + self.context_mark = context_mark + self.problem = problem + self.problem_mark = problem_mark + self.note = note + + def __str__(self): + lines = [] + if self.context is not None: + lines.append(self.context) + if self.context_mark is not None \ + and (self.problem is None or self.problem_mark is None + or self.context_mark.name != self.problem_mark.name + or self.context_mark.line != self.problem_mark.line + or self.context_mark.column != self.problem_mark.column): + lines.append(str(self.context_mark)) + if self.problem is not None: + lines.append(self.problem) + if self.problem_mark is not None: + lines.append(str(self.problem_mark)) + if self.note is not None: + lines.append(self.note) + return '\n'.join(lines) + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/events.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/events.py new file mode 100644 index 000000000..f79ad389c --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/events.py @@ -0,0 +1,86 @@ + +# Abstract classes. + +class Event(object): + def __init__(self, start_mark=None, end_mark=None): + self.start_mark = start_mark + self.end_mark = end_mark + def __repr__(self): + attributes = [key for key in ['anchor', 'tag', 'implicit', 'value'] + if hasattr(self, key)] + arguments = ', '.join(['%s=%r' % (key, getattr(self, key)) + for key in attributes]) + return '%s(%s)' % (self.__class__.__name__, arguments) + +class NodeEvent(Event): + def __init__(self, anchor, start_mark=None, end_mark=None): + self.anchor = anchor + self.start_mark = start_mark + self.end_mark = end_mark + +class CollectionStartEvent(NodeEvent): + def __init__(self, anchor, tag, implicit, start_mark=None, end_mark=None, + flow_style=None): + self.anchor = anchor + self.tag = tag + self.implicit = implicit + self.start_mark = start_mark + self.end_mark = end_mark + self.flow_style = flow_style + +class CollectionEndEvent(Event): + pass + +# Implementations. + +class StreamStartEvent(Event): + def __init__(self, start_mark=None, end_mark=None, encoding=None): + self.start_mark = start_mark + self.end_mark = end_mark + self.encoding = encoding + +class StreamEndEvent(Event): + pass + +class DocumentStartEvent(Event): + def __init__(self, start_mark=None, end_mark=None, + explicit=None, version=None, tags=None): + self.start_mark = start_mark + self.end_mark = end_mark + self.explicit = explicit + self.version = version + self.tags = tags + +class DocumentEndEvent(Event): + def __init__(self, start_mark=None, end_mark=None, + explicit=None): + self.start_mark = start_mark + self.end_mark = end_mark + self.explicit = explicit + +class AliasEvent(NodeEvent): + pass + +class ScalarEvent(NodeEvent): + def __init__(self, anchor, tag, implicit, value, + start_mark=None, end_mark=None, style=None): + self.anchor = anchor + self.tag = tag + self.implicit = implicit + self.value = value + self.start_mark = start_mark + self.end_mark = end_mark + self.style = style + +class SequenceStartEvent(CollectionStartEvent): + pass + +class SequenceEndEvent(CollectionEndEvent): + pass + +class MappingStartEvent(CollectionStartEvent): + pass + +class MappingEndEvent(CollectionEndEvent): + pass + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/loader.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/loader.py new file mode 100644 index 000000000..e90c11224 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/loader.py @@ -0,0 +1,63 @@ + +__all__ = ['BaseLoader', 'FullLoader', 'SafeLoader', 'Loader', 'UnsafeLoader'] + +from .reader import * +from .scanner import * +from .parser import * +from .composer import * +from .constructor import * +from .resolver import * + +class BaseLoader(Reader, Scanner, Parser, Composer, BaseConstructor, BaseResolver): + + def __init__(self, stream): + Reader.__init__(self, stream) + Scanner.__init__(self) + Parser.__init__(self) + Composer.__init__(self) + BaseConstructor.__init__(self) + BaseResolver.__init__(self) + +class FullLoader(Reader, Scanner, Parser, Composer, FullConstructor, Resolver): + + def __init__(self, stream): + Reader.__init__(self, stream) + Scanner.__init__(self) + Parser.__init__(self) + Composer.__init__(self) + FullConstructor.__init__(self) + Resolver.__init__(self) + +class SafeLoader(Reader, Scanner, Parser, Composer, SafeConstructor, Resolver): + + def __init__(self, stream): + Reader.__init__(self, stream) + Scanner.__init__(self) + Parser.__init__(self) + Composer.__init__(self) + SafeConstructor.__init__(self) + Resolver.__init__(self) + +class Loader(Reader, Scanner, Parser, Composer, Constructor, Resolver): + + def __init__(self, stream): + Reader.__init__(self, stream) + Scanner.__init__(self) + Parser.__init__(self) + Composer.__init__(self) + Constructor.__init__(self) + Resolver.__init__(self) + +# UnsafeLoader is the same as Loader (which is and was always unsafe on +# untrusted input). Use of either Loader or UnsafeLoader should be rare, since +# FullLoad should be able to load almost all YAML safely. Loader is left intact +# to ensure backwards compatibility. +class UnsafeLoader(Reader, Scanner, Parser, Composer, Constructor, Resolver): + + def __init__(self, stream): + Reader.__init__(self, stream) + Scanner.__init__(self) + Parser.__init__(self) + Composer.__init__(self) + Constructor.__init__(self) + Resolver.__init__(self) diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/nodes.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/nodes.py new file mode 100644 index 000000000..c4f070c41 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/nodes.py @@ -0,0 +1,49 @@ + +class Node(object): + def __init__(self, tag, value, start_mark, end_mark): + self.tag = tag + self.value = value + self.start_mark = start_mark + self.end_mark = end_mark + def __repr__(self): + value = self.value + #if isinstance(value, list): + # if len(value) == 0: + # value = '' + # elif len(value) == 1: + # value = '<1 item>' + # else: + # value = '<%d items>' % len(value) + #else: + # if len(value) > 75: + # value = repr(value[:70]+u' ... ') + # else: + # value = repr(value) + value = repr(value) + return '%s(tag=%r, value=%s)' % (self.__class__.__name__, self.tag, value) + +class ScalarNode(Node): + id = 'scalar' + def __init__(self, tag, value, + start_mark=None, end_mark=None, style=None): + self.tag = tag + self.value = value + self.start_mark = start_mark + self.end_mark = end_mark + self.style = style + +class CollectionNode(Node): + def __init__(self, tag, value, + start_mark=None, end_mark=None, flow_style=None): + self.tag = tag + self.value = value + self.start_mark = start_mark + self.end_mark = end_mark + self.flow_style = flow_style + +class SequenceNode(CollectionNode): + id = 'sequence' + +class MappingNode(CollectionNode): + id = 'mapping' + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/parser.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/parser.py new file mode 100644 index 000000000..13a5995d2 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/parser.py @@ -0,0 +1,589 @@ + +# The following YAML grammar is LL(1) and is parsed by a recursive descent +# parser. +# +# stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +# implicit_document ::= block_node DOCUMENT-END* +# explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +# block_node_or_indentless_sequence ::= +# ALIAS +# | properties (block_content | indentless_block_sequence)? +# | block_content +# | indentless_block_sequence +# block_node ::= ALIAS +# | properties block_content? +# | block_content +# flow_node ::= ALIAS +# | properties flow_content? +# | flow_content +# properties ::= TAG ANCHOR? | ANCHOR TAG? +# block_content ::= block_collection | flow_collection | SCALAR +# flow_content ::= flow_collection | SCALAR +# block_collection ::= block_sequence | block_mapping +# flow_collection ::= flow_sequence | flow_mapping +# block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +# indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +# block_mapping ::= BLOCK-MAPPING_START +# ((KEY block_node_or_indentless_sequence?)? +# (VALUE block_node_or_indentless_sequence?)?)* +# BLOCK-END +# flow_sequence ::= FLOW-SEQUENCE-START +# (flow_sequence_entry FLOW-ENTRY)* +# flow_sequence_entry? +# FLOW-SEQUENCE-END +# flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +# flow_mapping ::= FLOW-MAPPING-START +# (flow_mapping_entry FLOW-ENTRY)* +# flow_mapping_entry? +# FLOW-MAPPING-END +# flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +# +# FIRST sets: +# +# stream: { STREAM-START } +# explicit_document: { DIRECTIVE DOCUMENT-START } +# implicit_document: FIRST(block_node) +# block_node: { ALIAS TAG ANCHOR SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START } +# flow_node: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START } +# block_content: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR } +# flow_content: { FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR } +# block_collection: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START } +# flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START } +# block_sequence: { BLOCK-SEQUENCE-START } +# block_mapping: { BLOCK-MAPPING-START } +# block_node_or_indentless_sequence: { ALIAS ANCHOR TAG SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START BLOCK-ENTRY } +# indentless_sequence: { ENTRY } +# flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START } +# flow_sequence: { FLOW-SEQUENCE-START } +# flow_mapping: { FLOW-MAPPING-START } +# flow_sequence_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY } +# flow_mapping_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY } + +__all__ = ['Parser', 'ParserError'] + +from .error import MarkedYAMLError +from .tokens import * +from .events import * +from .scanner import * + +class ParserError(MarkedYAMLError): + pass + +class Parser: + # Since writing a recursive-descendant parser is a straightforward task, we + # do not give many comments here. + + DEFAULT_TAGS = { + '!': '!', + '!!': 'tag:yaml.org,2002:', + } + + def __init__(self): + self.current_event = None + self.yaml_version = None + self.tag_handles = {} + self.states = [] + self.marks = [] + self.state = self.parse_stream_start + + def dispose(self): + # Reset the state attributes (to clear self-references) + self.states = [] + self.state = None + + def check_event(self, *choices): + # Check the type of the next event. + if self.current_event is None: + if self.state: + self.current_event = self.state() + if self.current_event is not None: + if not choices: + return True + for choice in choices: + if isinstance(self.current_event, choice): + return True + return False + + def peek_event(self): + # Get the next event. + if self.current_event is None: + if self.state: + self.current_event = self.state() + return self.current_event + + def get_event(self): + # Get the next event and proceed further. + if self.current_event is None: + if self.state: + self.current_event = self.state() + value = self.current_event + self.current_event = None + return value + + # stream ::= STREAM-START implicit_document? explicit_document* STREAM-END + # implicit_document ::= block_node DOCUMENT-END* + # explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* + + def parse_stream_start(self): + + # Parse the stream start. + token = self.get_token() + event = StreamStartEvent(token.start_mark, token.end_mark, + encoding=token.encoding) + + # Prepare the next state. + self.state = self.parse_implicit_document_start + + return event + + def parse_implicit_document_start(self): + + # Parse an implicit document. + if not self.check_token(DirectiveToken, DocumentStartToken, + StreamEndToken): + self.tag_handles = self.DEFAULT_TAGS + token = self.peek_token() + start_mark = end_mark = token.start_mark + event = DocumentStartEvent(start_mark, end_mark, + explicit=False) + + # Prepare the next state. + self.states.append(self.parse_document_end) + self.state = self.parse_block_node + + return event + + else: + return self.parse_document_start() + + def parse_document_start(self): + + # Parse any extra document end indicators. + while self.check_token(DocumentEndToken): + self.get_token() + + # Parse an explicit document. + if not self.check_token(StreamEndToken): + token = self.peek_token() + start_mark = token.start_mark + version, tags = self.process_directives() + if not self.check_token(DocumentStartToken): + raise ParserError(None, None, + "expected '', but found %r" + % self.peek_token().id, + self.peek_token().start_mark) + token = self.get_token() + end_mark = token.end_mark + event = DocumentStartEvent(start_mark, end_mark, + explicit=True, version=version, tags=tags) + self.states.append(self.parse_document_end) + self.state = self.parse_document_content + else: + # Parse the end of the stream. + token = self.get_token() + event = StreamEndEvent(token.start_mark, token.end_mark) + assert not self.states + assert not self.marks + self.state = None + return event + + def parse_document_end(self): + + # Parse the document end. + token = self.peek_token() + start_mark = end_mark = token.start_mark + explicit = False + if self.check_token(DocumentEndToken): + token = self.get_token() + end_mark = token.end_mark + explicit = True + event = DocumentEndEvent(start_mark, end_mark, + explicit=explicit) + + # Prepare the next state. + self.state = self.parse_document_start + + return event + + def parse_document_content(self): + if self.check_token(DirectiveToken, + DocumentStartToken, DocumentEndToken, StreamEndToken): + event = self.process_empty_scalar(self.peek_token().start_mark) + self.state = self.states.pop() + return event + else: + return self.parse_block_node() + + def process_directives(self): + self.yaml_version = None + self.tag_handles = {} + while self.check_token(DirectiveToken): + token = self.get_token() + if token.name == 'YAML': + if self.yaml_version is not None: + raise ParserError(None, None, + "found duplicate YAML directive", token.start_mark) + major, minor = token.value + if major != 1: + raise ParserError(None, None, + "found incompatible YAML document (version 1.* is required)", + token.start_mark) + self.yaml_version = token.value + elif token.name == 'TAG': + handle, prefix = token.value + if handle in self.tag_handles: + raise ParserError(None, None, + "duplicate tag handle %r" % handle, + token.start_mark) + self.tag_handles[handle] = prefix + if self.tag_handles: + value = self.yaml_version, self.tag_handles.copy() + else: + value = self.yaml_version, None + for key in self.DEFAULT_TAGS: + if key not in self.tag_handles: + self.tag_handles[key] = self.DEFAULT_TAGS[key] + return value + + # block_node_or_indentless_sequence ::= ALIAS + # | properties (block_content | indentless_block_sequence)? + # | block_content + # | indentless_block_sequence + # block_node ::= ALIAS + # | properties block_content? + # | block_content + # flow_node ::= ALIAS + # | properties flow_content? + # | flow_content + # properties ::= TAG ANCHOR? | ANCHOR TAG? + # block_content ::= block_collection | flow_collection | SCALAR + # flow_content ::= flow_collection | SCALAR + # block_collection ::= block_sequence | block_mapping + # flow_collection ::= flow_sequence | flow_mapping + + def parse_block_node(self): + return self.parse_node(block=True) + + def parse_flow_node(self): + return self.parse_node() + + def parse_block_node_or_indentless_sequence(self): + return self.parse_node(block=True, indentless_sequence=True) + + def parse_node(self, block=False, indentless_sequence=False): + if self.check_token(AliasToken): + token = self.get_token() + event = AliasEvent(token.value, token.start_mark, token.end_mark) + self.state = self.states.pop() + else: + anchor = None + tag = None + start_mark = end_mark = tag_mark = None + if self.check_token(AnchorToken): + token = self.get_token() + start_mark = token.start_mark + end_mark = token.end_mark + anchor = token.value + if self.check_token(TagToken): + token = self.get_token() + tag_mark = token.start_mark + end_mark = token.end_mark + tag = token.value + elif self.check_token(TagToken): + token = self.get_token() + start_mark = tag_mark = token.start_mark + end_mark = token.end_mark + tag = token.value + if self.check_token(AnchorToken): + token = self.get_token() + end_mark = token.end_mark + anchor = token.value + if tag is not None: + handle, suffix = tag + if handle is not None: + if handle not in self.tag_handles: + raise ParserError("while parsing a node", start_mark, + "found undefined tag handle %r" % handle, + tag_mark) + tag = self.tag_handles[handle]+suffix + else: + tag = suffix + #if tag == '!': + # raise ParserError("while parsing a node", start_mark, + # "found non-specific tag '!'", tag_mark, + # "Please check 'http://pyyaml.org/wiki/YAMLNonSpecificTag' and share your opinion.") + if start_mark is None: + start_mark = end_mark = self.peek_token().start_mark + event = None + implicit = (tag is None or tag == '!') + if indentless_sequence and self.check_token(BlockEntryToken): + end_mark = self.peek_token().end_mark + event = SequenceStartEvent(anchor, tag, implicit, + start_mark, end_mark) + self.state = self.parse_indentless_sequence_entry + else: + if self.check_token(ScalarToken): + token = self.get_token() + end_mark = token.end_mark + if (token.plain and tag is None) or tag == '!': + implicit = (True, False) + elif tag is None: + implicit = (False, True) + else: + implicit = (False, False) + event = ScalarEvent(anchor, tag, implicit, token.value, + start_mark, end_mark, style=token.style) + self.state = self.states.pop() + elif self.check_token(FlowSequenceStartToken): + end_mark = self.peek_token().end_mark + event = SequenceStartEvent(anchor, tag, implicit, + start_mark, end_mark, flow_style=True) + self.state = self.parse_flow_sequence_first_entry + elif self.check_token(FlowMappingStartToken): + end_mark = self.peek_token().end_mark + event = MappingStartEvent(anchor, tag, implicit, + start_mark, end_mark, flow_style=True) + self.state = self.parse_flow_mapping_first_key + elif block and self.check_token(BlockSequenceStartToken): + end_mark = self.peek_token().start_mark + event = SequenceStartEvent(anchor, tag, implicit, + start_mark, end_mark, flow_style=False) + self.state = self.parse_block_sequence_first_entry + elif block and self.check_token(BlockMappingStartToken): + end_mark = self.peek_token().start_mark + event = MappingStartEvent(anchor, tag, implicit, + start_mark, end_mark, flow_style=False) + self.state = self.parse_block_mapping_first_key + elif anchor is not None or tag is not None: + # Empty scalars are allowed even if a tag or an anchor is + # specified. + event = ScalarEvent(anchor, tag, (implicit, False), '', + start_mark, end_mark) + self.state = self.states.pop() + else: + if block: + node = 'block' + else: + node = 'flow' + token = self.peek_token() + raise ParserError("while parsing a %s node" % node, start_mark, + "expected the node content, but found %r" % token.id, + token.start_mark) + return event + + # block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END + + def parse_block_sequence_first_entry(self): + token = self.get_token() + self.marks.append(token.start_mark) + return self.parse_block_sequence_entry() + + def parse_block_sequence_entry(self): + if self.check_token(BlockEntryToken): + token = self.get_token() + if not self.check_token(BlockEntryToken, BlockEndToken): + self.states.append(self.parse_block_sequence_entry) + return self.parse_block_node() + else: + self.state = self.parse_block_sequence_entry + return self.process_empty_scalar(token.end_mark) + if not self.check_token(BlockEndToken): + token = self.peek_token() + raise ParserError("while parsing a block collection", self.marks[-1], + "expected , but found %r" % token.id, token.start_mark) + token = self.get_token() + event = SequenceEndEvent(token.start_mark, token.end_mark) + self.state = self.states.pop() + self.marks.pop() + return event + + # indentless_sequence ::= (BLOCK-ENTRY block_node?)+ + + def parse_indentless_sequence_entry(self): + if self.check_token(BlockEntryToken): + token = self.get_token() + if not self.check_token(BlockEntryToken, + KeyToken, ValueToken, BlockEndToken): + self.states.append(self.parse_indentless_sequence_entry) + return self.parse_block_node() + else: + self.state = self.parse_indentless_sequence_entry + return self.process_empty_scalar(token.end_mark) + token = self.peek_token() + event = SequenceEndEvent(token.start_mark, token.start_mark) + self.state = self.states.pop() + return event + + # block_mapping ::= BLOCK-MAPPING_START + # ((KEY block_node_or_indentless_sequence?)? + # (VALUE block_node_or_indentless_sequence?)?)* + # BLOCK-END + + def parse_block_mapping_first_key(self): + token = self.get_token() + self.marks.append(token.start_mark) + return self.parse_block_mapping_key() + + def parse_block_mapping_key(self): + if self.check_token(KeyToken): + token = self.get_token() + if not self.check_token(KeyToken, ValueToken, BlockEndToken): + self.states.append(self.parse_block_mapping_value) + return self.parse_block_node_or_indentless_sequence() + else: + self.state = self.parse_block_mapping_value + return self.process_empty_scalar(token.end_mark) + if not self.check_token(BlockEndToken): + token = self.peek_token() + raise ParserError("while parsing a block mapping", self.marks[-1], + "expected , but found %r" % token.id, token.start_mark) + token = self.get_token() + event = MappingEndEvent(token.start_mark, token.end_mark) + self.state = self.states.pop() + self.marks.pop() + return event + + def parse_block_mapping_value(self): + if self.check_token(ValueToken): + token = self.get_token() + if not self.check_token(KeyToken, ValueToken, BlockEndToken): + self.states.append(self.parse_block_mapping_key) + return self.parse_block_node_or_indentless_sequence() + else: + self.state = self.parse_block_mapping_key + return self.process_empty_scalar(token.end_mark) + else: + self.state = self.parse_block_mapping_key + token = self.peek_token() + return self.process_empty_scalar(token.start_mark) + + # flow_sequence ::= FLOW-SEQUENCE-START + # (flow_sequence_entry FLOW-ENTRY)* + # flow_sequence_entry? + # FLOW-SEQUENCE-END + # flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + # + # Note that while production rules for both flow_sequence_entry and + # flow_mapping_entry are equal, their interpretations are different. + # For `flow_sequence_entry`, the part `KEY flow_node? (VALUE flow_node?)?` + # generate an inline mapping (set syntax). + + def parse_flow_sequence_first_entry(self): + token = self.get_token() + self.marks.append(token.start_mark) + return self.parse_flow_sequence_entry(first=True) + + def parse_flow_sequence_entry(self, first=False): + if not self.check_token(FlowSequenceEndToken): + if not first: + if self.check_token(FlowEntryToken): + self.get_token() + else: + token = self.peek_token() + raise ParserError("while parsing a flow sequence", self.marks[-1], + "expected ',' or ']', but got %r" % token.id, token.start_mark) + + if self.check_token(KeyToken): + token = self.peek_token() + event = MappingStartEvent(None, None, True, + token.start_mark, token.end_mark, + flow_style=True) + self.state = self.parse_flow_sequence_entry_mapping_key + return event + elif not self.check_token(FlowSequenceEndToken): + self.states.append(self.parse_flow_sequence_entry) + return self.parse_flow_node() + token = self.get_token() + event = SequenceEndEvent(token.start_mark, token.end_mark) + self.state = self.states.pop() + self.marks.pop() + return event + + def parse_flow_sequence_entry_mapping_key(self): + token = self.get_token() + if not self.check_token(ValueToken, + FlowEntryToken, FlowSequenceEndToken): + self.states.append(self.parse_flow_sequence_entry_mapping_value) + return self.parse_flow_node() + else: + self.state = self.parse_flow_sequence_entry_mapping_value + return self.process_empty_scalar(token.end_mark) + + def parse_flow_sequence_entry_mapping_value(self): + if self.check_token(ValueToken): + token = self.get_token() + if not self.check_token(FlowEntryToken, FlowSequenceEndToken): + self.states.append(self.parse_flow_sequence_entry_mapping_end) + return self.parse_flow_node() + else: + self.state = self.parse_flow_sequence_entry_mapping_end + return self.process_empty_scalar(token.end_mark) + else: + self.state = self.parse_flow_sequence_entry_mapping_end + token = self.peek_token() + return self.process_empty_scalar(token.start_mark) + + def parse_flow_sequence_entry_mapping_end(self): + self.state = self.parse_flow_sequence_entry + token = self.peek_token() + return MappingEndEvent(token.start_mark, token.start_mark) + + # flow_mapping ::= FLOW-MAPPING-START + # (flow_mapping_entry FLOW-ENTRY)* + # flow_mapping_entry? + # FLOW-MAPPING-END + # flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + + def parse_flow_mapping_first_key(self): + token = self.get_token() + self.marks.append(token.start_mark) + return self.parse_flow_mapping_key(first=True) + + def parse_flow_mapping_key(self, first=False): + if not self.check_token(FlowMappingEndToken): + if not first: + if self.check_token(FlowEntryToken): + self.get_token() + else: + token = self.peek_token() + raise ParserError("while parsing a flow mapping", self.marks[-1], + "expected ',' or '}', but got %r" % token.id, token.start_mark) + if self.check_token(KeyToken): + token = self.get_token() + if not self.check_token(ValueToken, + FlowEntryToken, FlowMappingEndToken): + self.states.append(self.parse_flow_mapping_value) + return self.parse_flow_node() + else: + self.state = self.parse_flow_mapping_value + return self.process_empty_scalar(token.end_mark) + elif not self.check_token(FlowMappingEndToken): + self.states.append(self.parse_flow_mapping_empty_value) + return self.parse_flow_node() + token = self.get_token() + event = MappingEndEvent(token.start_mark, token.end_mark) + self.state = self.states.pop() + self.marks.pop() + return event + + def parse_flow_mapping_value(self): + if self.check_token(ValueToken): + token = self.get_token() + if not self.check_token(FlowEntryToken, FlowMappingEndToken): + self.states.append(self.parse_flow_mapping_key) + return self.parse_flow_node() + else: + self.state = self.parse_flow_mapping_key + return self.process_empty_scalar(token.end_mark) + else: + self.state = self.parse_flow_mapping_key + token = self.peek_token() + return self.process_empty_scalar(token.start_mark) + + def parse_flow_mapping_empty_value(self): + self.state = self.parse_flow_mapping_key + return self.process_empty_scalar(self.peek_token().start_mark) + + def process_empty_scalar(self, mark): + return ScalarEvent(None, None, (True, False), '', mark, mark) + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/reader.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/reader.py new file mode 100644 index 000000000..774b0219b --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/reader.py @@ -0,0 +1,185 @@ +# This module contains abstractions for the input stream. You don't have to +# looks further, there are no pretty code. +# +# We define two classes here. +# +# Mark(source, line, column) +# It's just a record and its only use is producing nice error messages. +# Parser does not use it for any other purposes. +# +# Reader(source, data) +# Reader determines the encoding of `data` and converts it to unicode. +# Reader provides the following methods and attributes: +# reader.peek(length=1) - return the next `length` characters +# reader.forward(length=1) - move the current position to `length` characters. +# reader.index - the number of the current character. +# reader.line, stream.column - the line and the column of the current character. + +__all__ = ['Reader', 'ReaderError'] + +from .error import YAMLError, Mark + +import codecs, re + +class ReaderError(YAMLError): + + def __init__(self, name, position, character, encoding, reason): + self.name = name + self.character = character + self.position = position + self.encoding = encoding + self.reason = reason + + def __str__(self): + if isinstance(self.character, bytes): + return "'%s' codec can't decode byte #x%02x: %s\n" \ + " in \"%s\", position %d" \ + % (self.encoding, ord(self.character), self.reason, + self.name, self.position) + else: + return "unacceptable character #x%04x: %s\n" \ + " in \"%s\", position %d" \ + % (self.character, self.reason, + self.name, self.position) + +class Reader(object): + # Reader: + # - determines the data encoding and converts it to a unicode string, + # - checks if characters are in allowed range, + # - adds '\0' to the end. + + # Reader accepts + # - a `bytes` object, + # - a `str` object, + # - a file-like object with its `read` method returning `str`, + # - a file-like object with its `read` method returning `unicode`. + + # Yeah, it's ugly and slow. + + def __init__(self, stream): + self.name = None + self.stream = None + self.stream_pointer = 0 + self.eof = True + self.buffer = '' + self.pointer = 0 + self.raw_buffer = None + self.raw_decode = None + self.encoding = None + self.index = 0 + self.line = 0 + self.column = 0 + if isinstance(stream, str): + self.name = "" + self.check_printable(stream) + self.buffer = stream+'\0' + elif isinstance(stream, bytes): + self.name = "" + self.raw_buffer = stream + self.determine_encoding() + else: + self.stream = stream + self.name = getattr(stream, 'name', "") + self.eof = False + self.raw_buffer = None + self.determine_encoding() + + def peek(self, index=0): + try: + return self.buffer[self.pointer+index] + except IndexError: + self.update(index+1) + return self.buffer[self.pointer+index] + + def prefix(self, length=1): + if self.pointer+length >= len(self.buffer): + self.update(length) + return self.buffer[self.pointer:self.pointer+length] + + def forward(self, length=1): + if self.pointer+length+1 >= len(self.buffer): + self.update(length+1) + while length: + ch = self.buffer[self.pointer] + self.pointer += 1 + self.index += 1 + if ch in '\n\x85\u2028\u2029' \ + or (ch == '\r' and self.buffer[self.pointer] != '\n'): + self.line += 1 + self.column = 0 + elif ch != '\uFEFF': + self.column += 1 + length -= 1 + + def get_mark(self): + if self.stream is None: + return Mark(self.name, self.index, self.line, self.column, + self.buffer, self.pointer) + else: + return Mark(self.name, self.index, self.line, self.column, + None, None) + + def determine_encoding(self): + while not self.eof and (self.raw_buffer is None or len(self.raw_buffer) < 2): + self.update_raw() + if isinstance(self.raw_buffer, bytes): + if self.raw_buffer.startswith(codecs.BOM_UTF16_LE): + self.raw_decode = codecs.utf_16_le_decode + self.encoding = 'utf-16-le' + elif self.raw_buffer.startswith(codecs.BOM_UTF16_BE): + self.raw_decode = codecs.utf_16_be_decode + self.encoding = 'utf-16-be' + else: + self.raw_decode = codecs.utf_8_decode + self.encoding = 'utf-8' + self.update(1) + + NON_PRINTABLE = re.compile('[^\x09\x0A\x0D\x20-\x7E\x85\xA0-\uD7FF\uE000-\uFFFD\U00010000-\U0010ffff]') + def check_printable(self, data): + match = self.NON_PRINTABLE.search(data) + if match: + character = match.group() + position = self.index+(len(self.buffer)-self.pointer)+match.start() + raise ReaderError(self.name, position, ord(character), + 'unicode', "special characters are not allowed") + + def update(self, length): + if self.raw_buffer is None: + return + self.buffer = self.buffer[self.pointer:] + self.pointer = 0 + while len(self.buffer) < length: + if not self.eof: + self.update_raw() + if self.raw_decode is not None: + try: + data, converted = self.raw_decode(self.raw_buffer, + 'strict', self.eof) + except UnicodeDecodeError as exc: + character = self.raw_buffer[exc.start] + if self.stream is not None: + position = self.stream_pointer-len(self.raw_buffer)+exc.start + else: + position = exc.start + raise ReaderError(self.name, position, character, + exc.encoding, exc.reason) + else: + data = self.raw_buffer + converted = len(data) + self.check_printable(data) + self.buffer += data + self.raw_buffer = self.raw_buffer[converted:] + if self.eof: + self.buffer += '\0' + self.raw_buffer = None + break + + def update_raw(self, size=4096): + data = self.stream.read(size) + if self.raw_buffer is None: + self.raw_buffer = data + else: + self.raw_buffer += data + self.stream_pointer += len(data) + if not data: + self.eof = True diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/representer.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/representer.py new file mode 100644 index 000000000..808ca06df --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/representer.py @@ -0,0 +1,389 @@ + +__all__ = ['BaseRepresenter', 'SafeRepresenter', 'Representer', + 'RepresenterError'] + +from .error import * +from .nodes import * + +import datetime, copyreg, types, base64, collections + +class RepresenterError(YAMLError): + pass + +class BaseRepresenter: + + yaml_representers = {} + yaml_multi_representers = {} + + def __init__(self, default_style=None, default_flow_style=False, sort_keys=True): + self.default_style = default_style + self.sort_keys = sort_keys + self.default_flow_style = default_flow_style + self.represented_objects = {} + self.object_keeper = [] + self.alias_key = None + + def represent(self, data): + node = self.represent_data(data) + self.serialize(node) + self.represented_objects = {} + self.object_keeper = [] + self.alias_key = None + + def represent_data(self, data): + if self.ignore_aliases(data): + self.alias_key = None + else: + self.alias_key = id(data) + if self.alias_key is not None: + if self.alias_key in self.represented_objects: + node = self.represented_objects[self.alias_key] + #if node is None: + # raise RepresenterError("recursive objects are not allowed: %r" % data) + return node + #self.represented_objects[alias_key] = None + self.object_keeper.append(data) + data_types = type(data).__mro__ + if data_types[0] in self.yaml_representers: + node = self.yaml_representers[data_types[0]](self, data) + else: + for data_type in data_types: + if data_type in self.yaml_multi_representers: + node = self.yaml_multi_representers[data_type](self, data) + break + else: + if None in self.yaml_multi_representers: + node = self.yaml_multi_representers[None](self, data) + elif None in self.yaml_representers: + node = self.yaml_representers[None](self, data) + else: + node = ScalarNode(None, str(data)) + #if alias_key is not None: + # self.represented_objects[alias_key] = node + return node + + @classmethod + def add_representer(cls, data_type, representer): + if not 'yaml_representers' in cls.__dict__: + cls.yaml_representers = cls.yaml_representers.copy() + cls.yaml_representers[data_type] = representer + + @classmethod + def add_multi_representer(cls, data_type, representer): + if not 'yaml_multi_representers' in cls.__dict__: + cls.yaml_multi_representers = cls.yaml_multi_representers.copy() + cls.yaml_multi_representers[data_type] = representer + + def represent_scalar(self, tag, value, style=None): + if style is None: + style = self.default_style + node = ScalarNode(tag, value, style=style) + if self.alias_key is not None: + self.represented_objects[self.alias_key] = node + return node + + def represent_sequence(self, tag, sequence, flow_style=None): + value = [] + node = SequenceNode(tag, value, flow_style=flow_style) + if self.alias_key is not None: + self.represented_objects[self.alias_key] = node + best_style = True + for item in sequence: + node_item = self.represent_data(item) + if not (isinstance(node_item, ScalarNode) and not node_item.style): + best_style = False + value.append(node_item) + if flow_style is None: + if self.default_flow_style is not None: + node.flow_style = self.default_flow_style + else: + node.flow_style = best_style + return node + + def represent_mapping(self, tag, mapping, flow_style=None): + value = [] + node = MappingNode(tag, value, flow_style=flow_style) + if self.alias_key is not None: + self.represented_objects[self.alias_key] = node + best_style = True + if hasattr(mapping, 'items'): + mapping = list(mapping.items()) + if self.sort_keys: + try: + mapping = sorted(mapping) + except TypeError: + pass + for item_key, item_value in mapping: + node_key = self.represent_data(item_key) + node_value = self.represent_data(item_value) + if not (isinstance(node_key, ScalarNode) and not node_key.style): + best_style = False + if not (isinstance(node_value, ScalarNode) and not node_value.style): + best_style = False + value.append((node_key, node_value)) + if flow_style is None: + if self.default_flow_style is not None: + node.flow_style = self.default_flow_style + else: + node.flow_style = best_style + return node + + def ignore_aliases(self, data): + return False + +class SafeRepresenter(BaseRepresenter): + + def ignore_aliases(self, data): + if data is None: + return True + if isinstance(data, tuple) and data == (): + return True + if isinstance(data, (str, bytes, bool, int, float)): + return True + + def represent_none(self, data): + return self.represent_scalar('tag:yaml.org,2002:null', 'null') + + def represent_str(self, data): + return self.represent_scalar('tag:yaml.org,2002:str', data) + + def represent_binary(self, data): + if hasattr(base64, 'encodebytes'): + data = base64.encodebytes(data).decode('ascii') + else: + data = base64.encodestring(data).decode('ascii') + return self.represent_scalar('tag:yaml.org,2002:binary', data, style='|') + + def represent_bool(self, data): + if data: + value = 'true' + else: + value = 'false' + return self.represent_scalar('tag:yaml.org,2002:bool', value) + + def represent_int(self, data): + return self.represent_scalar('tag:yaml.org,2002:int', str(data)) + + inf_value = 1e300 + while repr(inf_value) != repr(inf_value*inf_value): + inf_value *= inf_value + + def represent_float(self, data): + if data != data or (data == 0.0 and data == 1.0): + value = '.nan' + elif data == self.inf_value: + value = '.inf' + elif data == -self.inf_value: + value = '-.inf' + else: + value = repr(data).lower() + # Note that in some cases `repr(data)` represents a float number + # without the decimal parts. For instance: + # >>> repr(1e17) + # '1e17' + # Unfortunately, this is not a valid float representation according + # to the definition of the `!!float` tag. We fix this by adding + # '.0' before the 'e' symbol. + if '.' not in value and 'e' in value: + value = value.replace('e', '.0e', 1) + return self.represent_scalar('tag:yaml.org,2002:float', value) + + def represent_list(self, data): + #pairs = (len(data) > 0 and isinstance(data, list)) + #if pairs: + # for item in data: + # if not isinstance(item, tuple) or len(item) != 2: + # pairs = False + # break + #if not pairs: + return self.represent_sequence('tag:yaml.org,2002:seq', data) + #value = [] + #for item_key, item_value in data: + # value.append(self.represent_mapping(u'tag:yaml.org,2002:map', + # [(item_key, item_value)])) + #return SequenceNode(u'tag:yaml.org,2002:pairs', value) + + def represent_dict(self, data): + return self.represent_mapping('tag:yaml.org,2002:map', data) + + def represent_set(self, data): + value = {} + for key in data: + value[key] = None + return self.represent_mapping('tag:yaml.org,2002:set', value) + + def represent_date(self, data): + value = data.isoformat() + return self.represent_scalar('tag:yaml.org,2002:timestamp', value) + + def represent_datetime(self, data): + value = data.isoformat(' ') + return self.represent_scalar('tag:yaml.org,2002:timestamp', value) + + def represent_yaml_object(self, tag, data, cls, flow_style=None): + if hasattr(data, '__getstate__'): + state = data.__getstate__() + else: + state = data.__dict__.copy() + return self.represent_mapping(tag, state, flow_style=flow_style) + + def represent_undefined(self, data): + raise RepresenterError("cannot represent an object", data) + +SafeRepresenter.add_representer(type(None), + SafeRepresenter.represent_none) + +SafeRepresenter.add_representer(str, + SafeRepresenter.represent_str) + +SafeRepresenter.add_representer(bytes, + SafeRepresenter.represent_binary) + +SafeRepresenter.add_representer(bool, + SafeRepresenter.represent_bool) + +SafeRepresenter.add_representer(int, + SafeRepresenter.represent_int) + +SafeRepresenter.add_representer(float, + SafeRepresenter.represent_float) + +SafeRepresenter.add_representer(list, + SafeRepresenter.represent_list) + +SafeRepresenter.add_representer(tuple, + SafeRepresenter.represent_list) + +SafeRepresenter.add_representer(dict, + SafeRepresenter.represent_dict) + +SafeRepresenter.add_representer(set, + SafeRepresenter.represent_set) + +SafeRepresenter.add_representer(datetime.date, + SafeRepresenter.represent_date) + +SafeRepresenter.add_representer(datetime.datetime, + SafeRepresenter.represent_datetime) + +SafeRepresenter.add_representer(None, + SafeRepresenter.represent_undefined) + +class Representer(SafeRepresenter): + + def represent_complex(self, data): + if data.imag == 0.0: + data = '%r' % data.real + elif data.real == 0.0: + data = '%rj' % data.imag + elif data.imag > 0: + data = '%r+%rj' % (data.real, data.imag) + else: + data = '%r%rj' % (data.real, data.imag) + return self.represent_scalar('tag:yaml.org,2002:python/complex', data) + + def represent_tuple(self, data): + return self.represent_sequence('tag:yaml.org,2002:python/tuple', data) + + def represent_name(self, data): + name = '%s.%s' % (data.__module__, data.__name__) + return self.represent_scalar('tag:yaml.org,2002:python/name:'+name, '') + + def represent_module(self, data): + return self.represent_scalar( + 'tag:yaml.org,2002:python/module:'+data.__name__, '') + + def represent_object(self, data): + # We use __reduce__ API to save the data. data.__reduce__ returns + # a tuple of length 2-5: + # (function, args, state, listitems, dictitems) + + # For reconstructing, we calls function(*args), then set its state, + # listitems, and dictitems if they are not None. + + # A special case is when function.__name__ == '__newobj__'. In this + # case we create the object with args[0].__new__(*args). + + # Another special case is when __reduce__ returns a string - we don't + # support it. + + # We produce a !!python/object, !!python/object/new or + # !!python/object/apply node. + + cls = type(data) + if cls in copyreg.dispatch_table: + reduce = copyreg.dispatch_table[cls](data) + elif hasattr(data, '__reduce_ex__'): + reduce = data.__reduce_ex__(2) + elif hasattr(data, '__reduce__'): + reduce = data.__reduce__() + else: + raise RepresenterError("cannot represent an object", data) + reduce = (list(reduce)+[None]*5)[:5] + function, args, state, listitems, dictitems = reduce + args = list(args) + if state is None: + state = {} + if listitems is not None: + listitems = list(listitems) + if dictitems is not None: + dictitems = dict(dictitems) + if function.__name__ == '__newobj__': + function = args[0] + args = args[1:] + tag = 'tag:yaml.org,2002:python/object/new:' + newobj = True + else: + tag = 'tag:yaml.org,2002:python/object/apply:' + newobj = False + function_name = '%s.%s' % (function.__module__, function.__name__) + if not args and not listitems and not dictitems \ + and isinstance(state, dict) and newobj: + return self.represent_mapping( + 'tag:yaml.org,2002:python/object:'+function_name, state) + if not listitems and not dictitems \ + and isinstance(state, dict) and not state: + return self.represent_sequence(tag+function_name, args) + value = {} + if args: + value['args'] = args + if state or not isinstance(state, dict): + value['state'] = state + if listitems: + value['listitems'] = listitems + if dictitems: + value['dictitems'] = dictitems + return self.represent_mapping(tag+function_name, value) + + def represent_ordered_dict(self, data): + # Provide uniform representation across different Python versions. + data_type = type(data) + tag = 'tag:yaml.org,2002:python/object/apply:%s.%s' \ + % (data_type.__module__, data_type.__name__) + items = [[key, value] for key, value in data.items()] + return self.represent_sequence(tag, [items]) + +Representer.add_representer(complex, + Representer.represent_complex) + +Representer.add_representer(tuple, + Representer.represent_tuple) + +Representer.add_multi_representer(type, + Representer.represent_name) + +Representer.add_representer(collections.OrderedDict, + Representer.represent_ordered_dict) + +Representer.add_representer(types.FunctionType, + Representer.represent_name) + +Representer.add_representer(types.BuiltinFunctionType, + Representer.represent_name) + +Representer.add_representer(types.ModuleType, + Representer.represent_module) + +Representer.add_multi_representer(object, + Representer.represent_object) + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/resolver.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/resolver.py new file mode 100644 index 000000000..3522bdaaf --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/resolver.py @@ -0,0 +1,227 @@ + +__all__ = ['BaseResolver', 'Resolver'] + +from .error import * +from .nodes import * + +import re + +class ResolverError(YAMLError): + pass + +class BaseResolver: + + DEFAULT_SCALAR_TAG = 'tag:yaml.org,2002:str' + DEFAULT_SEQUENCE_TAG = 'tag:yaml.org,2002:seq' + DEFAULT_MAPPING_TAG = 'tag:yaml.org,2002:map' + + yaml_implicit_resolvers = {} + yaml_path_resolvers = {} + + def __init__(self): + self.resolver_exact_paths = [] + self.resolver_prefix_paths = [] + + @classmethod + def add_implicit_resolver(cls, tag, regexp, first): + if not 'yaml_implicit_resolvers' in cls.__dict__: + implicit_resolvers = {} + for key in cls.yaml_implicit_resolvers: + implicit_resolvers[key] = cls.yaml_implicit_resolvers[key][:] + cls.yaml_implicit_resolvers = implicit_resolvers + if first is None: + first = [None] + for ch in first: + cls.yaml_implicit_resolvers.setdefault(ch, []).append((tag, regexp)) + + @classmethod + def add_path_resolver(cls, tag, path, kind=None): + # Note: `add_path_resolver` is experimental. The API could be changed. + # `new_path` is a pattern that is matched against the path from the + # root to the node that is being considered. `node_path` elements are + # tuples `(node_check, index_check)`. `node_check` is a node class: + # `ScalarNode`, `SequenceNode`, `MappingNode` or `None`. `None` + # matches any kind of a node. `index_check` could be `None`, a boolean + # value, a string value, or a number. `None` and `False` match against + # any _value_ of sequence and mapping nodes. `True` matches against + # any _key_ of a mapping node. A string `index_check` matches against + # a mapping value that corresponds to a scalar key which content is + # equal to the `index_check` value. An integer `index_check` matches + # against a sequence value with the index equal to `index_check`. + if not 'yaml_path_resolvers' in cls.__dict__: + cls.yaml_path_resolvers = cls.yaml_path_resolvers.copy() + new_path = [] + for element in path: + if isinstance(element, (list, tuple)): + if len(element) == 2: + node_check, index_check = element + elif len(element) == 1: + node_check = element[0] + index_check = True + else: + raise ResolverError("Invalid path element: %s" % element) + else: + node_check = None + index_check = element + if node_check is str: + node_check = ScalarNode + elif node_check is list: + node_check = SequenceNode + elif node_check is dict: + node_check = MappingNode + elif node_check not in [ScalarNode, SequenceNode, MappingNode] \ + and not isinstance(node_check, str) \ + and node_check is not None: + raise ResolverError("Invalid node checker: %s" % node_check) + if not isinstance(index_check, (str, int)) \ + and index_check is not None: + raise ResolverError("Invalid index checker: %s" % index_check) + new_path.append((node_check, index_check)) + if kind is str: + kind = ScalarNode + elif kind is list: + kind = SequenceNode + elif kind is dict: + kind = MappingNode + elif kind not in [ScalarNode, SequenceNode, MappingNode] \ + and kind is not None: + raise ResolverError("Invalid node kind: %s" % kind) + cls.yaml_path_resolvers[tuple(new_path), kind] = tag + + def descend_resolver(self, current_node, current_index): + if not self.yaml_path_resolvers: + return + exact_paths = {} + prefix_paths = [] + if current_node: + depth = len(self.resolver_prefix_paths) + for path, kind in self.resolver_prefix_paths[-1]: + if self.check_resolver_prefix(depth, path, kind, + current_node, current_index): + if len(path) > depth: + prefix_paths.append((path, kind)) + else: + exact_paths[kind] = self.yaml_path_resolvers[path, kind] + else: + for path, kind in self.yaml_path_resolvers: + if not path: + exact_paths[kind] = self.yaml_path_resolvers[path, kind] + else: + prefix_paths.append((path, kind)) + self.resolver_exact_paths.append(exact_paths) + self.resolver_prefix_paths.append(prefix_paths) + + def ascend_resolver(self): + if not self.yaml_path_resolvers: + return + self.resolver_exact_paths.pop() + self.resolver_prefix_paths.pop() + + def check_resolver_prefix(self, depth, path, kind, + current_node, current_index): + node_check, index_check = path[depth-1] + if isinstance(node_check, str): + if current_node.tag != node_check: + return + elif node_check is not None: + if not isinstance(current_node, node_check): + return + if index_check is True and current_index is not None: + return + if (index_check is False or index_check is None) \ + and current_index is None: + return + if isinstance(index_check, str): + if not (isinstance(current_index, ScalarNode) + and index_check == current_index.value): + return + elif isinstance(index_check, int) and not isinstance(index_check, bool): + if index_check != current_index: + return + return True + + def resolve(self, kind, value, implicit): + if kind is ScalarNode and implicit[0]: + if value == '': + resolvers = self.yaml_implicit_resolvers.get('', []) + else: + resolvers = self.yaml_implicit_resolvers.get(value[0], []) + wildcard_resolvers = self.yaml_implicit_resolvers.get(None, []) + for tag, regexp in resolvers + wildcard_resolvers: + if regexp.match(value): + return tag + implicit = implicit[1] + if self.yaml_path_resolvers: + exact_paths = self.resolver_exact_paths[-1] + if kind in exact_paths: + return exact_paths[kind] + if None in exact_paths: + return exact_paths[None] + if kind is ScalarNode: + return self.DEFAULT_SCALAR_TAG + elif kind is SequenceNode: + return self.DEFAULT_SEQUENCE_TAG + elif kind is MappingNode: + return self.DEFAULT_MAPPING_TAG + +class Resolver(BaseResolver): + pass + +Resolver.add_implicit_resolver( + 'tag:yaml.org,2002:bool', + re.compile(r'''^(?:yes|Yes|YES|no|No|NO + |true|True|TRUE|false|False|FALSE + |on|On|ON|off|Off|OFF)$''', re.X), + list('yYnNtTfFoO')) + +Resolver.add_implicit_resolver( + 'tag:yaml.org,2002:float', + re.compile(r'''^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)? + |\.[0-9][0-9_]*(?:[eE][-+][0-9]+)? + |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]* + |[-+]?\.(?:inf|Inf|INF) + |\.(?:nan|NaN|NAN))$''', re.X), + list('-+0123456789.')) + +Resolver.add_implicit_resolver( + 'tag:yaml.org,2002:int', + re.compile(r'''^(?:[-+]?0b[0-1_]+ + |[-+]?0[0-7_]+ + |[-+]?(?:0|[1-9][0-9_]*) + |[-+]?0x[0-9a-fA-F_]+ + |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$''', re.X), + list('-+0123456789')) + +Resolver.add_implicit_resolver( + 'tag:yaml.org,2002:merge', + re.compile(r'^(?:<<)$'), + ['<']) + +Resolver.add_implicit_resolver( + 'tag:yaml.org,2002:null', + re.compile(r'''^(?: ~ + |null|Null|NULL + | )$''', re.X), + ['~', 'n', 'N', '']) + +Resolver.add_implicit_resolver( + 'tag:yaml.org,2002:timestamp', + re.compile(r'''^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] + |[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]? + (?:[Tt]|[ \t]+)[0-9][0-9]? + :[0-9][0-9] :[0-9][0-9] (?:\.[0-9]*)? + (?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$''', re.X), + list('0123456789')) + +Resolver.add_implicit_resolver( + 'tag:yaml.org,2002:value', + re.compile(r'^(?:=)$'), + ['=']) + +# The following resolver is only for documentation purposes. It cannot work +# because plain scalars cannot start with '!', '&', or '*'. +Resolver.add_implicit_resolver( + 'tag:yaml.org,2002:yaml', + re.compile(r'^(?:!|&|\*)$'), + list('!&*')) + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/scanner.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/scanner.py new file mode 100644 index 000000000..de925b07f --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/scanner.py @@ -0,0 +1,1435 @@ + +# Scanner produces tokens of the following types: +# STREAM-START +# STREAM-END +# DIRECTIVE(name, value) +# DOCUMENT-START +# DOCUMENT-END +# BLOCK-SEQUENCE-START +# BLOCK-MAPPING-START +# BLOCK-END +# FLOW-SEQUENCE-START +# FLOW-MAPPING-START +# FLOW-SEQUENCE-END +# FLOW-MAPPING-END +# BLOCK-ENTRY +# FLOW-ENTRY +# KEY +# VALUE +# ALIAS(value) +# ANCHOR(value) +# TAG(value) +# SCALAR(value, plain, style) +# +# Read comments in the Scanner code for more details. +# + +__all__ = ['Scanner', 'ScannerError'] + +from .error import MarkedYAMLError +from .tokens import * + +class ScannerError(MarkedYAMLError): + pass + +class SimpleKey: + # See below simple keys treatment. + + def __init__(self, token_number, required, index, line, column, mark): + self.token_number = token_number + self.required = required + self.index = index + self.line = line + self.column = column + self.mark = mark + +class Scanner: + + def __init__(self): + """Initialize the scanner.""" + # It is assumed that Scanner and Reader will have a common descendant. + # Reader do the dirty work of checking for BOM and converting the + # input data to Unicode. It also adds NUL to the end. + # + # Reader supports the following methods + # self.peek(i=0) # peek the next i-th character + # self.prefix(l=1) # peek the next l characters + # self.forward(l=1) # read the next l characters and move the pointer. + + # Had we reached the end of the stream? + self.done = False + + # The number of unclosed '{' and '['. `flow_level == 0` means block + # context. + self.flow_level = 0 + + # List of processed tokens that are not yet emitted. + self.tokens = [] + + # Add the STREAM-START token. + self.fetch_stream_start() + + # Number of tokens that were emitted through the `get_token` method. + self.tokens_taken = 0 + + # The current indentation level. + self.indent = -1 + + # Past indentation levels. + self.indents = [] + + # Variables related to simple keys treatment. + + # A simple key is a key that is not denoted by the '?' indicator. + # Example of simple keys: + # --- + # block simple key: value + # ? not a simple key: + # : { flow simple key: value } + # We emit the KEY token before all keys, so when we find a potential + # simple key, we try to locate the corresponding ':' indicator. + # Simple keys should be limited to a single line and 1024 characters. + + # Can a simple key start at the current position? A simple key may + # start: + # - at the beginning of the line, not counting indentation spaces + # (in block context), + # - after '{', '[', ',' (in the flow context), + # - after '?', ':', '-' (in the block context). + # In the block context, this flag also signifies if a block collection + # may start at the current position. + self.allow_simple_key = True + + # Keep track of possible simple keys. This is a dictionary. The key + # is `flow_level`; there can be no more that one possible simple key + # for each level. The value is a SimpleKey record: + # (token_number, required, index, line, column, mark) + # A simple key may start with ALIAS, ANCHOR, TAG, SCALAR(flow), + # '[', or '{' tokens. + self.possible_simple_keys = {} + + # Public methods. + + def check_token(self, *choices): + # Check if the next token is one of the given types. + while self.need_more_tokens(): + self.fetch_more_tokens() + if self.tokens: + if not choices: + return True + for choice in choices: + if isinstance(self.tokens[0], choice): + return True + return False + + def peek_token(self): + # Return the next token, but do not delete if from the queue. + # Return None if no more tokens. + while self.need_more_tokens(): + self.fetch_more_tokens() + if self.tokens: + return self.tokens[0] + else: + return None + + def get_token(self): + # Return the next token. + while self.need_more_tokens(): + self.fetch_more_tokens() + if self.tokens: + self.tokens_taken += 1 + return self.tokens.pop(0) + + # Private methods. + + def need_more_tokens(self): + if self.done: + return False + if not self.tokens: + return True + # The current token may be a potential simple key, so we + # need to look further. + self.stale_possible_simple_keys() + if self.next_possible_simple_key() == self.tokens_taken: + return True + + def fetch_more_tokens(self): + + # Eat whitespaces and comments until we reach the next token. + self.scan_to_next_token() + + # Remove obsolete possible simple keys. + self.stale_possible_simple_keys() + + # Compare the current indentation and column. It may add some tokens + # and decrease the current indentation level. + self.unwind_indent(self.column) + + # Peek the next character. + ch = self.peek() + + # Is it the end of stream? + if ch == '\0': + return self.fetch_stream_end() + + # Is it a directive? + if ch == '%' and self.check_directive(): + return self.fetch_directive() + + # Is it the document start? + if ch == '-' and self.check_document_start(): + return self.fetch_document_start() + + # Is it the document end? + if ch == '.' and self.check_document_end(): + return self.fetch_document_end() + + # TODO: support for BOM within a stream. + #if ch == '\uFEFF': + # return self.fetch_bom() <-- issue BOMToken + + # Note: the order of the following checks is NOT significant. + + # Is it the flow sequence start indicator? + if ch == '[': + return self.fetch_flow_sequence_start() + + # Is it the flow mapping start indicator? + if ch == '{': + return self.fetch_flow_mapping_start() + + # Is it the flow sequence end indicator? + if ch == ']': + return self.fetch_flow_sequence_end() + + # Is it the flow mapping end indicator? + if ch == '}': + return self.fetch_flow_mapping_end() + + # Is it the flow entry indicator? + if ch == ',': + return self.fetch_flow_entry() + + # Is it the block entry indicator? + if ch == '-' and self.check_block_entry(): + return self.fetch_block_entry() + + # Is it the key indicator? + if ch == '?' and self.check_key(): + return self.fetch_key() + + # Is it the value indicator? + if ch == ':' and self.check_value(): + return self.fetch_value() + + # Is it an alias? + if ch == '*': + return self.fetch_alias() + + # Is it an anchor? + if ch == '&': + return self.fetch_anchor() + + # Is it a tag? + if ch == '!': + return self.fetch_tag() + + # Is it a literal scalar? + if ch == '|' and not self.flow_level: + return self.fetch_literal() + + # Is it a folded scalar? + if ch == '>' and not self.flow_level: + return self.fetch_folded() + + # Is it a single quoted scalar? + if ch == '\'': + return self.fetch_single() + + # Is it a double quoted scalar? + if ch == '\"': + return self.fetch_double() + + # It must be a plain scalar then. + if self.check_plain(): + return self.fetch_plain() + + # No? It's an error. Let's produce a nice error message. + raise ScannerError("while scanning for the next token", None, + "found character %r that cannot start any token" % ch, + self.get_mark()) + + # Simple keys treatment. + + def next_possible_simple_key(self): + # Return the number of the nearest possible simple key. Actually we + # don't need to loop through the whole dictionary. We may replace it + # with the following code: + # if not self.possible_simple_keys: + # return None + # return self.possible_simple_keys[ + # min(self.possible_simple_keys.keys())].token_number + min_token_number = None + for level in self.possible_simple_keys: + key = self.possible_simple_keys[level] + if min_token_number is None or key.token_number < min_token_number: + min_token_number = key.token_number + return min_token_number + + def stale_possible_simple_keys(self): + # Remove entries that are no longer possible simple keys. According to + # the YAML specification, simple keys + # - should be limited to a single line, + # - should be no longer than 1024 characters. + # Disabling this procedure will allow simple keys of any length and + # height (may cause problems if indentation is broken though). + for level in list(self.possible_simple_keys): + key = self.possible_simple_keys[level] + if key.line != self.line \ + or self.index-key.index > 1024: + if key.required: + raise ScannerError("while scanning a simple key", key.mark, + "could not find expected ':'", self.get_mark()) + del self.possible_simple_keys[level] + + def save_possible_simple_key(self): + # The next token may start a simple key. We check if it's possible + # and save its position. This function is called for + # ALIAS, ANCHOR, TAG, SCALAR(flow), '[', and '{'. + + # Check if a simple key is required at the current position. + required = not self.flow_level and self.indent == self.column + + # The next token might be a simple key. Let's save it's number and + # position. + if self.allow_simple_key: + self.remove_possible_simple_key() + token_number = self.tokens_taken+len(self.tokens) + key = SimpleKey(token_number, required, + self.index, self.line, self.column, self.get_mark()) + self.possible_simple_keys[self.flow_level] = key + + def remove_possible_simple_key(self): + # Remove the saved possible key position at the current flow level. + if self.flow_level in self.possible_simple_keys: + key = self.possible_simple_keys[self.flow_level] + + if key.required: + raise ScannerError("while scanning a simple key", key.mark, + "could not find expected ':'", self.get_mark()) + + del self.possible_simple_keys[self.flow_level] + + # Indentation functions. + + def unwind_indent(self, column): + + ## In flow context, tokens should respect indentation. + ## Actually the condition should be `self.indent >= column` according to + ## the spec. But this condition will prohibit intuitively correct + ## constructions such as + ## key : { + ## } + #if self.flow_level and self.indent > column: + # raise ScannerError(None, None, + # "invalid indentation or unclosed '[' or '{'", + # self.get_mark()) + + # In the flow context, indentation is ignored. We make the scanner less + # restrictive then specification requires. + if self.flow_level: + return + + # In block context, we may need to issue the BLOCK-END tokens. + while self.indent > column: + mark = self.get_mark() + self.indent = self.indents.pop() + self.tokens.append(BlockEndToken(mark, mark)) + + def add_indent(self, column): + # Check if we need to increase indentation. + if self.indent < column: + self.indents.append(self.indent) + self.indent = column + return True + return False + + # Fetchers. + + def fetch_stream_start(self): + # We always add STREAM-START as the first token and STREAM-END as the + # last token. + + # Read the token. + mark = self.get_mark() + + # Add STREAM-START. + self.tokens.append(StreamStartToken(mark, mark, + encoding=self.encoding)) + + + def fetch_stream_end(self): + + # Set the current indentation to -1. + self.unwind_indent(-1) + + # Reset simple keys. + self.remove_possible_simple_key() + self.allow_simple_key = False + self.possible_simple_keys = {} + + # Read the token. + mark = self.get_mark() + + # Add STREAM-END. + self.tokens.append(StreamEndToken(mark, mark)) + + # The steam is finished. + self.done = True + + def fetch_directive(self): + + # Set the current indentation to -1. + self.unwind_indent(-1) + + # Reset simple keys. + self.remove_possible_simple_key() + self.allow_simple_key = False + + # Scan and add DIRECTIVE. + self.tokens.append(self.scan_directive()) + + def fetch_document_start(self): + self.fetch_document_indicator(DocumentStartToken) + + def fetch_document_end(self): + self.fetch_document_indicator(DocumentEndToken) + + def fetch_document_indicator(self, TokenClass): + + # Set the current indentation to -1. + self.unwind_indent(-1) + + # Reset simple keys. Note that there could not be a block collection + # after '---'. + self.remove_possible_simple_key() + self.allow_simple_key = False + + # Add DOCUMENT-START or DOCUMENT-END. + start_mark = self.get_mark() + self.forward(3) + end_mark = self.get_mark() + self.tokens.append(TokenClass(start_mark, end_mark)) + + def fetch_flow_sequence_start(self): + self.fetch_flow_collection_start(FlowSequenceStartToken) + + def fetch_flow_mapping_start(self): + self.fetch_flow_collection_start(FlowMappingStartToken) + + def fetch_flow_collection_start(self, TokenClass): + + # '[' and '{' may start a simple key. + self.save_possible_simple_key() + + # Increase the flow level. + self.flow_level += 1 + + # Simple keys are allowed after '[' and '{'. + self.allow_simple_key = True + + # Add FLOW-SEQUENCE-START or FLOW-MAPPING-START. + start_mark = self.get_mark() + self.forward() + end_mark = self.get_mark() + self.tokens.append(TokenClass(start_mark, end_mark)) + + def fetch_flow_sequence_end(self): + self.fetch_flow_collection_end(FlowSequenceEndToken) + + def fetch_flow_mapping_end(self): + self.fetch_flow_collection_end(FlowMappingEndToken) + + def fetch_flow_collection_end(self, TokenClass): + + # Reset possible simple key on the current level. + self.remove_possible_simple_key() + + # Decrease the flow level. + self.flow_level -= 1 + + # No simple keys after ']' or '}'. + self.allow_simple_key = False + + # Add FLOW-SEQUENCE-END or FLOW-MAPPING-END. + start_mark = self.get_mark() + self.forward() + end_mark = self.get_mark() + self.tokens.append(TokenClass(start_mark, end_mark)) + + def fetch_flow_entry(self): + + # Simple keys are allowed after ','. + self.allow_simple_key = True + + # Reset possible simple key on the current level. + self.remove_possible_simple_key() + + # Add FLOW-ENTRY. + start_mark = self.get_mark() + self.forward() + end_mark = self.get_mark() + self.tokens.append(FlowEntryToken(start_mark, end_mark)) + + def fetch_block_entry(self): + + # Block context needs additional checks. + if not self.flow_level: + + # Are we allowed to start a new entry? + if not self.allow_simple_key: + raise ScannerError(None, None, + "sequence entries are not allowed here", + self.get_mark()) + + # We may need to add BLOCK-SEQUENCE-START. + if self.add_indent(self.column): + mark = self.get_mark() + self.tokens.append(BlockSequenceStartToken(mark, mark)) + + # It's an error for the block entry to occur in the flow context, + # but we let the parser detect this. + else: + pass + + # Simple keys are allowed after '-'. + self.allow_simple_key = True + + # Reset possible simple key on the current level. + self.remove_possible_simple_key() + + # Add BLOCK-ENTRY. + start_mark = self.get_mark() + self.forward() + end_mark = self.get_mark() + self.tokens.append(BlockEntryToken(start_mark, end_mark)) + + def fetch_key(self): + + # Block context needs additional checks. + if not self.flow_level: + + # Are we allowed to start a key (not necessary a simple)? + if not self.allow_simple_key: + raise ScannerError(None, None, + "mapping keys are not allowed here", + self.get_mark()) + + # We may need to add BLOCK-MAPPING-START. + if self.add_indent(self.column): + mark = self.get_mark() + self.tokens.append(BlockMappingStartToken(mark, mark)) + + # Simple keys are allowed after '?' in the block context. + self.allow_simple_key = not self.flow_level + + # Reset possible simple key on the current level. + self.remove_possible_simple_key() + + # Add KEY. + start_mark = self.get_mark() + self.forward() + end_mark = self.get_mark() + self.tokens.append(KeyToken(start_mark, end_mark)) + + def fetch_value(self): + + # Do we determine a simple key? + if self.flow_level in self.possible_simple_keys: + + # Add KEY. + key = self.possible_simple_keys[self.flow_level] + del self.possible_simple_keys[self.flow_level] + self.tokens.insert(key.token_number-self.tokens_taken, + KeyToken(key.mark, key.mark)) + + # If this key starts a new block mapping, we need to add + # BLOCK-MAPPING-START. + if not self.flow_level: + if self.add_indent(key.column): + self.tokens.insert(key.token_number-self.tokens_taken, + BlockMappingStartToken(key.mark, key.mark)) + + # There cannot be two simple keys one after another. + self.allow_simple_key = False + + # It must be a part of a complex key. + else: + + # Block context needs additional checks. + # (Do we really need them? They will be caught by the parser + # anyway.) + if not self.flow_level: + + # We are allowed to start a complex value if and only if + # we can start a simple key. + if not self.allow_simple_key: + raise ScannerError(None, None, + "mapping values are not allowed here", + self.get_mark()) + + # If this value starts a new block mapping, we need to add + # BLOCK-MAPPING-START. It will be detected as an error later by + # the parser. + if not self.flow_level: + if self.add_indent(self.column): + mark = self.get_mark() + self.tokens.append(BlockMappingStartToken(mark, mark)) + + # Simple keys are allowed after ':' in the block context. + self.allow_simple_key = not self.flow_level + + # Reset possible simple key on the current level. + self.remove_possible_simple_key() + + # Add VALUE. + start_mark = self.get_mark() + self.forward() + end_mark = self.get_mark() + self.tokens.append(ValueToken(start_mark, end_mark)) + + def fetch_alias(self): + + # ALIAS could be a simple key. + self.save_possible_simple_key() + + # No simple keys after ALIAS. + self.allow_simple_key = False + + # Scan and add ALIAS. + self.tokens.append(self.scan_anchor(AliasToken)) + + def fetch_anchor(self): + + # ANCHOR could start a simple key. + self.save_possible_simple_key() + + # No simple keys after ANCHOR. + self.allow_simple_key = False + + # Scan and add ANCHOR. + self.tokens.append(self.scan_anchor(AnchorToken)) + + def fetch_tag(self): + + # TAG could start a simple key. + self.save_possible_simple_key() + + # No simple keys after TAG. + self.allow_simple_key = False + + # Scan and add TAG. + self.tokens.append(self.scan_tag()) + + def fetch_literal(self): + self.fetch_block_scalar(style='|') + + def fetch_folded(self): + self.fetch_block_scalar(style='>') + + def fetch_block_scalar(self, style): + + # A simple key may follow a block scalar. + self.allow_simple_key = True + + # Reset possible simple key on the current level. + self.remove_possible_simple_key() + + # Scan and add SCALAR. + self.tokens.append(self.scan_block_scalar(style)) + + def fetch_single(self): + self.fetch_flow_scalar(style='\'') + + def fetch_double(self): + self.fetch_flow_scalar(style='"') + + def fetch_flow_scalar(self, style): + + # A flow scalar could be a simple key. + self.save_possible_simple_key() + + # No simple keys after flow scalars. + self.allow_simple_key = False + + # Scan and add SCALAR. + self.tokens.append(self.scan_flow_scalar(style)) + + def fetch_plain(self): + + # A plain scalar could be a simple key. + self.save_possible_simple_key() + + # No simple keys after plain scalars. But note that `scan_plain` will + # change this flag if the scan is finished at the beginning of the + # line. + self.allow_simple_key = False + + # Scan and add SCALAR. May change `allow_simple_key`. + self.tokens.append(self.scan_plain()) + + # Checkers. + + def check_directive(self): + + # DIRECTIVE: ^ '%' ... + # The '%' indicator is already checked. + if self.column == 0: + return True + + def check_document_start(self): + + # DOCUMENT-START: ^ '---' (' '|'\n') + if self.column == 0: + if self.prefix(3) == '---' \ + and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029': + return True + + def check_document_end(self): + + # DOCUMENT-END: ^ '...' (' '|'\n') + if self.column == 0: + if self.prefix(3) == '...' \ + and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029': + return True + + def check_block_entry(self): + + # BLOCK-ENTRY: '-' (' '|'\n') + return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029' + + def check_key(self): + + # KEY(flow context): '?' + if self.flow_level: + return True + + # KEY(block context): '?' (' '|'\n') + else: + return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029' + + def check_value(self): + + # VALUE(flow context): ':' + if self.flow_level: + return True + + # VALUE(block context): ':' (' '|'\n') + else: + return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029' + + def check_plain(self): + + # A plain scalar may start with any non-space character except: + # '-', '?', ':', ',', '[', ']', '{', '}', + # '#', '&', '*', '!', '|', '>', '\'', '\"', + # '%', '@', '`'. + # + # It may also start with + # '-', '?', ':' + # if it is followed by a non-space character. + # + # Note that we limit the last rule to the block context (except the + # '-' character) because we want the flow context to be space + # independent. + ch = self.peek() + return ch not in '\0 \t\r\n\x85\u2028\u2029-?:,[]{}#&*!|>\'\"%@`' \ + or (self.peek(1) not in '\0 \t\r\n\x85\u2028\u2029' + and (ch == '-' or (not self.flow_level and ch in '?:'))) + + # Scanners. + + def scan_to_next_token(self): + # We ignore spaces, line breaks and comments. + # If we find a line break in the block context, we set the flag + # `allow_simple_key` on. + # The byte order mark is stripped if it's the first character in the + # stream. We do not yet support BOM inside the stream as the + # specification requires. Any such mark will be considered as a part + # of the document. + # + # TODO: We need to make tab handling rules more sane. A good rule is + # Tabs cannot precede tokens + # BLOCK-SEQUENCE-START, BLOCK-MAPPING-START, BLOCK-END, + # KEY(block), VALUE(block), BLOCK-ENTRY + # So the checking code is + # if : + # self.allow_simple_keys = False + # We also need to add the check for `allow_simple_keys == True` to + # `unwind_indent` before issuing BLOCK-END. + # Scanners for block, flow, and plain scalars need to be modified. + + if self.index == 0 and self.peek() == '\uFEFF': + self.forward() + found = False + while not found: + while self.peek() == ' ': + self.forward() + if self.peek() == '#': + while self.peek() not in '\0\r\n\x85\u2028\u2029': + self.forward() + if self.scan_line_break(): + if not self.flow_level: + self.allow_simple_key = True + else: + found = True + + def scan_directive(self): + # See the specification for details. + start_mark = self.get_mark() + self.forward() + name = self.scan_directive_name(start_mark) + value = None + if name == 'YAML': + value = self.scan_yaml_directive_value(start_mark) + end_mark = self.get_mark() + elif name == 'TAG': + value = self.scan_tag_directive_value(start_mark) + end_mark = self.get_mark() + else: + end_mark = self.get_mark() + while self.peek() not in '\0\r\n\x85\u2028\u2029': + self.forward() + self.scan_directive_ignored_line(start_mark) + return DirectiveToken(name, value, start_mark, end_mark) + + def scan_directive_name(self, start_mark): + # See the specification for details. + length = 0 + ch = self.peek(length) + while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ + or ch in '-_': + length += 1 + ch = self.peek(length) + if not length: + raise ScannerError("while scanning a directive", start_mark, + "expected alphabetic or numeric character, but found %r" + % ch, self.get_mark()) + value = self.prefix(length) + self.forward(length) + ch = self.peek() + if ch not in '\0 \r\n\x85\u2028\u2029': + raise ScannerError("while scanning a directive", start_mark, + "expected alphabetic or numeric character, but found %r" + % ch, self.get_mark()) + return value + + def scan_yaml_directive_value(self, start_mark): + # See the specification for details. + while self.peek() == ' ': + self.forward() + major = self.scan_yaml_directive_number(start_mark) + if self.peek() != '.': + raise ScannerError("while scanning a directive", start_mark, + "expected a digit or '.', but found %r" % self.peek(), + self.get_mark()) + self.forward() + minor = self.scan_yaml_directive_number(start_mark) + if self.peek() not in '\0 \r\n\x85\u2028\u2029': + raise ScannerError("while scanning a directive", start_mark, + "expected a digit or ' ', but found %r" % self.peek(), + self.get_mark()) + return (major, minor) + + def scan_yaml_directive_number(self, start_mark): + # See the specification for details. + ch = self.peek() + if not ('0' <= ch <= '9'): + raise ScannerError("while scanning a directive", start_mark, + "expected a digit, but found %r" % ch, self.get_mark()) + length = 0 + while '0' <= self.peek(length) <= '9': + length += 1 + value = int(self.prefix(length)) + self.forward(length) + return value + + def scan_tag_directive_value(self, start_mark): + # See the specification for details. + while self.peek() == ' ': + self.forward() + handle = self.scan_tag_directive_handle(start_mark) + while self.peek() == ' ': + self.forward() + prefix = self.scan_tag_directive_prefix(start_mark) + return (handle, prefix) + + def scan_tag_directive_handle(self, start_mark): + # See the specification for details. + value = self.scan_tag_handle('directive', start_mark) + ch = self.peek() + if ch != ' ': + raise ScannerError("while scanning a directive", start_mark, + "expected ' ', but found %r" % ch, self.get_mark()) + return value + + def scan_tag_directive_prefix(self, start_mark): + # See the specification for details. + value = self.scan_tag_uri('directive', start_mark) + ch = self.peek() + if ch not in '\0 \r\n\x85\u2028\u2029': + raise ScannerError("while scanning a directive", start_mark, + "expected ' ', but found %r" % ch, self.get_mark()) + return value + + def scan_directive_ignored_line(self, start_mark): + # See the specification for details. + while self.peek() == ' ': + self.forward() + if self.peek() == '#': + while self.peek() not in '\0\r\n\x85\u2028\u2029': + self.forward() + ch = self.peek() + if ch not in '\0\r\n\x85\u2028\u2029': + raise ScannerError("while scanning a directive", start_mark, + "expected a comment or a line break, but found %r" + % ch, self.get_mark()) + self.scan_line_break() + + def scan_anchor(self, TokenClass): + # The specification does not restrict characters for anchors and + # aliases. This may lead to problems, for instance, the document: + # [ *alias, value ] + # can be interpreted in two ways, as + # [ "value" ] + # and + # [ *alias , "value" ] + # Therefore we restrict aliases to numbers and ASCII letters. + start_mark = self.get_mark() + indicator = self.peek() + if indicator == '*': + name = 'alias' + else: + name = 'anchor' + self.forward() + length = 0 + ch = self.peek(length) + while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ + or ch in '-_': + length += 1 + ch = self.peek(length) + if not length: + raise ScannerError("while scanning an %s" % name, start_mark, + "expected alphabetic or numeric character, but found %r" + % ch, self.get_mark()) + value = self.prefix(length) + self.forward(length) + ch = self.peek() + if ch not in '\0 \t\r\n\x85\u2028\u2029?:,]}%@`': + raise ScannerError("while scanning an %s" % name, start_mark, + "expected alphabetic or numeric character, but found %r" + % ch, self.get_mark()) + end_mark = self.get_mark() + return TokenClass(value, start_mark, end_mark) + + def scan_tag(self): + # See the specification for details. + start_mark = self.get_mark() + ch = self.peek(1) + if ch == '<': + handle = None + self.forward(2) + suffix = self.scan_tag_uri('tag', start_mark) + if self.peek() != '>': + raise ScannerError("while parsing a tag", start_mark, + "expected '>', but found %r" % self.peek(), + self.get_mark()) + self.forward() + elif ch in '\0 \t\r\n\x85\u2028\u2029': + handle = None + suffix = '!' + self.forward() + else: + length = 1 + use_handle = False + while ch not in '\0 \r\n\x85\u2028\u2029': + if ch == '!': + use_handle = True + break + length += 1 + ch = self.peek(length) + handle = '!' + if use_handle: + handle = self.scan_tag_handle('tag', start_mark) + else: + handle = '!' + self.forward() + suffix = self.scan_tag_uri('tag', start_mark) + ch = self.peek() + if ch not in '\0 \r\n\x85\u2028\u2029': + raise ScannerError("while scanning a tag", start_mark, + "expected ' ', but found %r" % ch, self.get_mark()) + value = (handle, suffix) + end_mark = self.get_mark() + return TagToken(value, start_mark, end_mark) + + def scan_block_scalar(self, style): + # See the specification for details. + + if style == '>': + folded = True + else: + folded = False + + chunks = [] + start_mark = self.get_mark() + + # Scan the header. + self.forward() + chomping, increment = self.scan_block_scalar_indicators(start_mark) + self.scan_block_scalar_ignored_line(start_mark) + + # Determine the indentation level and go to the first non-empty line. + min_indent = self.indent+1 + if min_indent < 1: + min_indent = 1 + if increment is None: + breaks, max_indent, end_mark = self.scan_block_scalar_indentation() + indent = max(min_indent, max_indent) + else: + indent = min_indent+increment-1 + breaks, end_mark = self.scan_block_scalar_breaks(indent) + line_break = '' + + # Scan the inner part of the block scalar. + while self.column == indent and self.peek() != '\0': + chunks.extend(breaks) + leading_non_space = self.peek() not in ' \t' + length = 0 + while self.peek(length) not in '\0\r\n\x85\u2028\u2029': + length += 1 + chunks.append(self.prefix(length)) + self.forward(length) + line_break = self.scan_line_break() + breaks, end_mark = self.scan_block_scalar_breaks(indent) + if self.column == indent and self.peek() != '\0': + + # Unfortunately, folding rules are ambiguous. + # + # This is the folding according to the specification: + + if folded and line_break == '\n' \ + and leading_non_space and self.peek() not in ' \t': + if not breaks: + chunks.append(' ') + else: + chunks.append(line_break) + + # This is Clark Evans's interpretation (also in the spec + # examples): + # + #if folded and line_break == '\n': + # if not breaks: + # if self.peek() not in ' \t': + # chunks.append(' ') + # else: + # chunks.append(line_break) + #else: + # chunks.append(line_break) + else: + break + + # Chomp the tail. + if chomping is not False: + chunks.append(line_break) + if chomping is True: + chunks.extend(breaks) + + # We are done. + return ScalarToken(''.join(chunks), False, start_mark, end_mark, + style) + + def scan_block_scalar_indicators(self, start_mark): + # See the specification for details. + chomping = None + increment = None + ch = self.peek() + if ch in '+-': + if ch == '+': + chomping = True + else: + chomping = False + self.forward() + ch = self.peek() + if ch in '0123456789': + increment = int(ch) + if increment == 0: + raise ScannerError("while scanning a block scalar", start_mark, + "expected indentation indicator in the range 1-9, but found 0", + self.get_mark()) + self.forward() + elif ch in '0123456789': + increment = int(ch) + if increment == 0: + raise ScannerError("while scanning a block scalar", start_mark, + "expected indentation indicator in the range 1-9, but found 0", + self.get_mark()) + self.forward() + ch = self.peek() + if ch in '+-': + if ch == '+': + chomping = True + else: + chomping = False + self.forward() + ch = self.peek() + if ch not in '\0 \r\n\x85\u2028\u2029': + raise ScannerError("while scanning a block scalar", start_mark, + "expected chomping or indentation indicators, but found %r" + % ch, self.get_mark()) + return chomping, increment + + def scan_block_scalar_ignored_line(self, start_mark): + # See the specification for details. + while self.peek() == ' ': + self.forward() + if self.peek() == '#': + while self.peek() not in '\0\r\n\x85\u2028\u2029': + self.forward() + ch = self.peek() + if ch not in '\0\r\n\x85\u2028\u2029': + raise ScannerError("while scanning a block scalar", start_mark, + "expected a comment or a line break, but found %r" % ch, + self.get_mark()) + self.scan_line_break() + + def scan_block_scalar_indentation(self): + # See the specification for details. + chunks = [] + max_indent = 0 + end_mark = self.get_mark() + while self.peek() in ' \r\n\x85\u2028\u2029': + if self.peek() != ' ': + chunks.append(self.scan_line_break()) + end_mark = self.get_mark() + else: + self.forward() + if self.column > max_indent: + max_indent = self.column + return chunks, max_indent, end_mark + + def scan_block_scalar_breaks(self, indent): + # See the specification for details. + chunks = [] + end_mark = self.get_mark() + while self.column < indent and self.peek() == ' ': + self.forward() + while self.peek() in '\r\n\x85\u2028\u2029': + chunks.append(self.scan_line_break()) + end_mark = self.get_mark() + while self.column < indent and self.peek() == ' ': + self.forward() + return chunks, end_mark + + def scan_flow_scalar(self, style): + # See the specification for details. + # Note that we loose indentation rules for quoted scalars. Quoted + # scalars don't need to adhere indentation because " and ' clearly + # mark the beginning and the end of them. Therefore we are less + # restrictive then the specification requires. We only need to check + # that document separators are not included in scalars. + if style == '"': + double = True + else: + double = False + chunks = [] + start_mark = self.get_mark() + quote = self.peek() + self.forward() + chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark)) + while self.peek() != quote: + chunks.extend(self.scan_flow_scalar_spaces(double, start_mark)) + chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark)) + self.forward() + end_mark = self.get_mark() + return ScalarToken(''.join(chunks), False, start_mark, end_mark, + style) + + ESCAPE_REPLACEMENTS = { + '0': '\0', + 'a': '\x07', + 'b': '\x08', + 't': '\x09', + '\t': '\x09', + 'n': '\x0A', + 'v': '\x0B', + 'f': '\x0C', + 'r': '\x0D', + 'e': '\x1B', + ' ': '\x20', + '\"': '\"', + '\\': '\\', + '/': '/', + 'N': '\x85', + '_': '\xA0', + 'L': '\u2028', + 'P': '\u2029', + } + + ESCAPE_CODES = { + 'x': 2, + 'u': 4, + 'U': 8, + } + + def scan_flow_scalar_non_spaces(self, double, start_mark): + # See the specification for details. + chunks = [] + while True: + length = 0 + while self.peek(length) not in '\'\"\\\0 \t\r\n\x85\u2028\u2029': + length += 1 + if length: + chunks.append(self.prefix(length)) + self.forward(length) + ch = self.peek() + if not double and ch == '\'' and self.peek(1) == '\'': + chunks.append('\'') + self.forward(2) + elif (double and ch == '\'') or (not double and ch in '\"\\'): + chunks.append(ch) + self.forward() + elif double and ch == '\\': + self.forward() + ch = self.peek() + if ch in self.ESCAPE_REPLACEMENTS: + chunks.append(self.ESCAPE_REPLACEMENTS[ch]) + self.forward() + elif ch in self.ESCAPE_CODES: + length = self.ESCAPE_CODES[ch] + self.forward() + for k in range(length): + if self.peek(k) not in '0123456789ABCDEFabcdef': + raise ScannerError("while scanning a double-quoted scalar", start_mark, + "expected escape sequence of %d hexadecimal numbers, but found %r" % + (length, self.peek(k)), self.get_mark()) + code = int(self.prefix(length), 16) + chunks.append(chr(code)) + self.forward(length) + elif ch in '\r\n\x85\u2028\u2029': + self.scan_line_break() + chunks.extend(self.scan_flow_scalar_breaks(double, start_mark)) + else: + raise ScannerError("while scanning a double-quoted scalar", start_mark, + "found unknown escape character %r" % ch, self.get_mark()) + else: + return chunks + + def scan_flow_scalar_spaces(self, double, start_mark): + # See the specification for details. + chunks = [] + length = 0 + while self.peek(length) in ' \t': + length += 1 + whitespaces = self.prefix(length) + self.forward(length) + ch = self.peek() + if ch == '\0': + raise ScannerError("while scanning a quoted scalar", start_mark, + "found unexpected end of stream", self.get_mark()) + elif ch in '\r\n\x85\u2028\u2029': + line_break = self.scan_line_break() + breaks = self.scan_flow_scalar_breaks(double, start_mark) + if line_break != '\n': + chunks.append(line_break) + elif not breaks: + chunks.append(' ') + chunks.extend(breaks) + else: + chunks.append(whitespaces) + return chunks + + def scan_flow_scalar_breaks(self, double, start_mark): + # See the specification for details. + chunks = [] + while True: + # Instead of checking indentation, we check for document + # separators. + prefix = self.prefix(3) + if (prefix == '---' or prefix == '...') \ + and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029': + raise ScannerError("while scanning a quoted scalar", start_mark, + "found unexpected document separator", self.get_mark()) + while self.peek() in ' \t': + self.forward() + if self.peek() in '\r\n\x85\u2028\u2029': + chunks.append(self.scan_line_break()) + else: + return chunks + + def scan_plain(self): + # See the specification for details. + # We add an additional restriction for the flow context: + # plain scalars in the flow context cannot contain ',' or '?'. + # We also keep track of the `allow_simple_key` flag here. + # Indentation rules are loosed for the flow context. + chunks = [] + start_mark = self.get_mark() + end_mark = start_mark + indent = self.indent+1 + # We allow zero indentation for scalars, but then we need to check for + # document separators at the beginning of the line. + #if indent == 0: + # indent = 1 + spaces = [] + while True: + length = 0 + if self.peek() == '#': + break + while True: + ch = self.peek(length) + if ch in '\0 \t\r\n\x85\u2028\u2029' \ + or (ch == ':' and + self.peek(length+1) in '\0 \t\r\n\x85\u2028\u2029' + + (u',[]{}' if self.flow_level else u''))\ + or (self.flow_level and ch in ',?[]{}'): + break + length += 1 + if length == 0: + break + self.allow_simple_key = False + chunks.extend(spaces) + chunks.append(self.prefix(length)) + self.forward(length) + end_mark = self.get_mark() + spaces = self.scan_plain_spaces(indent, start_mark) + if not spaces or self.peek() == '#' \ + or (not self.flow_level and self.column < indent): + break + return ScalarToken(''.join(chunks), True, start_mark, end_mark) + + def scan_plain_spaces(self, indent, start_mark): + # See the specification for details. + # The specification is really confusing about tabs in plain scalars. + # We just forbid them completely. Do not use tabs in YAML! + chunks = [] + length = 0 + while self.peek(length) in ' ': + length += 1 + whitespaces = self.prefix(length) + self.forward(length) + ch = self.peek() + if ch in '\r\n\x85\u2028\u2029': + line_break = self.scan_line_break() + self.allow_simple_key = True + prefix = self.prefix(3) + if (prefix == '---' or prefix == '...') \ + and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029': + return + breaks = [] + while self.peek() in ' \r\n\x85\u2028\u2029': + if self.peek() == ' ': + self.forward() + else: + breaks.append(self.scan_line_break()) + prefix = self.prefix(3) + if (prefix == '---' or prefix == '...') \ + and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029': + return + if line_break != '\n': + chunks.append(line_break) + elif not breaks: + chunks.append(' ') + chunks.extend(breaks) + elif whitespaces: + chunks.append(whitespaces) + return chunks + + def scan_tag_handle(self, name, start_mark): + # See the specification for details. + # For some strange reasons, the specification does not allow '_' in + # tag handles. I have allowed it anyway. + ch = self.peek() + if ch != '!': + raise ScannerError("while scanning a %s" % name, start_mark, + "expected '!', but found %r" % ch, self.get_mark()) + length = 1 + ch = self.peek(length) + if ch != ' ': + while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ + or ch in '-_': + length += 1 + ch = self.peek(length) + if ch != '!': + self.forward(length) + raise ScannerError("while scanning a %s" % name, start_mark, + "expected '!', but found %r" % ch, self.get_mark()) + length += 1 + value = self.prefix(length) + self.forward(length) + return value + + def scan_tag_uri(self, name, start_mark): + # See the specification for details. + # Note: we do not check if URI is well-formed. + chunks = [] + length = 0 + ch = self.peek(length) + while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ + or ch in '-;/?:@&=+$,_.!~*\'()[]%': + if ch == '%': + chunks.append(self.prefix(length)) + self.forward(length) + length = 0 + chunks.append(self.scan_uri_escapes(name, start_mark)) + else: + length += 1 + ch = self.peek(length) + if length: + chunks.append(self.prefix(length)) + self.forward(length) + length = 0 + if not chunks: + raise ScannerError("while parsing a %s" % name, start_mark, + "expected URI, but found %r" % ch, self.get_mark()) + return ''.join(chunks) + + def scan_uri_escapes(self, name, start_mark): + # See the specification for details. + codes = [] + mark = self.get_mark() + while self.peek() == '%': + self.forward() + for k in range(2): + if self.peek(k) not in '0123456789ABCDEFabcdef': + raise ScannerError("while scanning a %s" % name, start_mark, + "expected URI escape sequence of 2 hexadecimal numbers, but found %r" + % self.peek(k), self.get_mark()) + codes.append(int(self.prefix(2), 16)) + self.forward(2) + try: + value = bytes(codes).decode('utf-8') + except UnicodeDecodeError as exc: + raise ScannerError("while scanning a %s" % name, start_mark, str(exc), mark) + return value + + def scan_line_break(self): + # Transforms: + # '\r\n' : '\n' + # '\r' : '\n' + # '\n' : '\n' + # '\x85' : '\n' + # '\u2028' : '\u2028' + # '\u2029 : '\u2029' + # default : '' + ch = self.peek() + if ch in '\r\n\x85': + if self.prefix(2) == '\r\n': + self.forward(2) + else: + self.forward() + return '\n' + elif ch in '\u2028\u2029': + self.forward() + return ch + return '' diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/serializer.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/serializer.py new file mode 100644 index 000000000..fe911e67a --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/serializer.py @@ -0,0 +1,111 @@ + +__all__ = ['Serializer', 'SerializerError'] + +from .error import YAMLError +from .events import * +from .nodes import * + +class SerializerError(YAMLError): + pass + +class Serializer: + + ANCHOR_TEMPLATE = 'id%03d' + + def __init__(self, encoding=None, + explicit_start=None, explicit_end=None, version=None, tags=None): + self.use_encoding = encoding + self.use_explicit_start = explicit_start + self.use_explicit_end = explicit_end + self.use_version = version + self.use_tags = tags + self.serialized_nodes = {} + self.anchors = {} + self.last_anchor_id = 0 + self.closed = None + + def open(self): + if self.closed is None: + self.emit(StreamStartEvent(encoding=self.use_encoding)) + self.closed = False + elif self.closed: + raise SerializerError("serializer is closed") + else: + raise SerializerError("serializer is already opened") + + def close(self): + if self.closed is None: + raise SerializerError("serializer is not opened") + elif not self.closed: + self.emit(StreamEndEvent()) + self.closed = True + + #def __del__(self): + # self.close() + + def serialize(self, node): + if self.closed is None: + raise SerializerError("serializer is not opened") + elif self.closed: + raise SerializerError("serializer is closed") + self.emit(DocumentStartEvent(explicit=self.use_explicit_start, + version=self.use_version, tags=self.use_tags)) + self.anchor_node(node) + self.serialize_node(node, None, None) + self.emit(DocumentEndEvent(explicit=self.use_explicit_end)) + self.serialized_nodes = {} + self.anchors = {} + self.last_anchor_id = 0 + + def anchor_node(self, node): + if node in self.anchors: + if self.anchors[node] is None: + self.anchors[node] = self.generate_anchor(node) + else: + self.anchors[node] = None + if isinstance(node, SequenceNode): + for item in node.value: + self.anchor_node(item) + elif isinstance(node, MappingNode): + for key, value in node.value: + self.anchor_node(key) + self.anchor_node(value) + + def generate_anchor(self, node): + self.last_anchor_id += 1 + return self.ANCHOR_TEMPLATE % self.last_anchor_id + + def serialize_node(self, node, parent, index): + alias = self.anchors[node] + if node in self.serialized_nodes: + self.emit(AliasEvent(alias)) + else: + self.serialized_nodes[node] = True + self.descend_resolver(parent, index) + if isinstance(node, ScalarNode): + detected_tag = self.resolve(ScalarNode, node.value, (True, False)) + default_tag = self.resolve(ScalarNode, node.value, (False, True)) + implicit = (node.tag == detected_tag), (node.tag == default_tag) + self.emit(ScalarEvent(alias, node.tag, implicit, node.value, + style=node.style)) + elif isinstance(node, SequenceNode): + implicit = (node.tag + == self.resolve(SequenceNode, node.value, True)) + self.emit(SequenceStartEvent(alias, node.tag, implicit, + flow_style=node.flow_style)) + index = 0 + for item in node.value: + self.serialize_node(item, node, index) + index += 1 + self.emit(SequenceEndEvent()) + elif isinstance(node, MappingNode): + implicit = (node.tag + == self.resolve(MappingNode, node.value, True)) + self.emit(MappingStartEvent(alias, node.tag, implicit, + flow_style=node.flow_style)) + for key, value in node.value: + self.serialize_node(key, node, None) + self.serialize_node(value, node, key) + self.emit(MappingEndEvent()) + self.ascend_resolver() + diff --git a/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/tokens.py b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/tokens.py new file mode 100644 index 000000000..4d0b48a39 --- /dev/null +++ b/ESP-IDF_Robot/tutorial/.tutorial/lib/python3.12/site-packages/yaml/tokens.py @@ -0,0 +1,104 @@ + +class Token(object): + def __init__(self, start_mark, end_mark): + self.start_mark = start_mark + self.end_mark = end_mark + def __repr__(self): + attributes = [key for key in self.__dict__ + if not key.endswith('_mark')] + attributes.sort() + arguments = ', '.join(['%s=%r' % (key, getattr(self, key)) + for key in attributes]) + return '%s(%s)' % (self.__class__.__name__, arguments) + +#class BOMToken(Token): +# id = '' + +class DirectiveToken(Token): + id = '' + def __init__(self, name, value, start_mark, end_mark): + self.name = name + self.value = value + self.start_mark = start_mark + self.end_mark = end_mark + +class DocumentStartToken(Token): + id = '' + +class DocumentEndToken(Token): + id = '' + +class StreamStartToken(Token): + id = '' + def __init__(self, start_mark=None, end_mark=None, + encoding=None): + self.start_mark = start_mark + self.end_mark = end_mark + self.encoding = encoding + +class StreamEndToken(Token): + id = '' + +class BlockSequenceStartToken(Token): + id = '' + +class BlockMappingStartToken(Token): + id = '' + +class BlockEndToken(Token): + id = '' + +class FlowSequenceStartToken(Token): + id = '[' + +class FlowMappingStartToken(Token): + id = '{' + +class FlowSequenceEndToken(Token): + id = ']' + +class FlowMappingEndToken(Token): + id = '}' + +class KeyToken(Token): + id = '?' + +class ValueToken(Token): + id = ':' + +class BlockEntryToken(Token): + id = '-' + +class FlowEntryToken(Token): + id = ',' + +class AliasToken(Token): + id = '' + def __init__(self, value, start_mark, end_mark): + self.value = value + self.start_mark = start_mark + self.end_mark = end_mark + +class AnchorToken(Token): + id = '' + def __init__(self, value, start_mark, end_mark): + self.value = value + self.start_mark = start_mark + self.end_mark = end_mark + +class TagToken(Token): + id = '' + def __init__(self, value, start_mark, end_mark): + self.value = value + self.start_mark = start_mark + self.end_mark = end_mark + +class ScalarToken(Token): + id = '' + def __init__(self, value, plain, start_mark, end_mark, style=None): + self.value = value + self.plain = plain + self.start_mark = start_mark + self.end_mark = end_mark + self.style = style + diff --git a/ESP-IDF_Robot/tutorial/docs/build/doctrees/environment.pickle b/ESP-IDF_Robot/tutorial/docs/build/doctrees/environment.pickle index b18e7443e..e29f4d54b 100644 Binary files a/ESP-IDF_Robot/tutorial/docs/build/doctrees/environment.pickle and b/ESP-IDF_Robot/tutorial/docs/build/doctrees/environment.pickle differ diff --git a/ESP-IDF_Robot/tutorial/docs/build/doctrees/overview.doctree b/ESP-IDF_Robot/tutorial/docs/build/doctrees/overview.doctree index 933a5db92..abd01abf0 100644 Binary files a/ESP-IDF_Robot/tutorial/docs/build/doctrees/overview.doctree and b/ESP-IDF_Robot/tutorial/docs/build/doctrees/overview.doctree differ diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/_sources/overview.rst.txt b/ESP-IDF_Robot/tutorial/docs/build/html/_sources/overview.rst.txt index 6a36b80fd..9fd8c86c5 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/_sources/overview.rst.txt +++ b/ESP-IDF_Robot/tutorial/docs/build/html/_sources/overview.rst.txt @@ -57,8 +57,6 @@ Changing PWM on each channel determines the speed and direction of the RC car. The table below summarizes the GPIO pins used for PWM to control the direction of the DC motors in the remote-controlled car. -:class: break - +-----------+-------+---------------------------------------+----------+ | GPIOs | State | Description | Function | +===========+=======+=======================================+==========+ diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/overview.html b/ESP-IDF_Robot/tutorial/docs/build/html/overview.html index bf15269e3..a9abe3eaf 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/overview.html +++ b/ESP-IDF_Robot/tutorial/docs/build/html/overview.html @@ -84,11 +84,6 @@ In particular, GPIO6 and GPIO5 provide PWM to Similarly, GPIO4 and GPIO7 provide PWM to the left- and right- side DC motors to rotate in a counter-clockwise direction. Changing PWM on each channel determines the speed and direction of the RC car.

The table below summarizes the GPIO pins used for PWM to control the direction of the DC motors in the remote-controlled car.

-
-
class:
-

break

-
-
diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js b/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js index 6b1e04b2c..b0c8eab52 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js +++ b/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles":{"ABSTRACT":[[2,"abstract"]],"ByteRider documentation":[[1,null]],"Chassis":[[4,"chassis"]],"Configuration Variables":[[5,"configuration-variables"],[7,"configuration-variables"]],"Controlling the Direction and Speed":[[3,"controlling-the-direction-and-speed"]],"DATA STRUCTS":[[0,null]],"Data Payload":[[0,"data-payload"]],"Finished Work":[[4,"finished-work"]],"Fusion of Software with Hardware":[[3,"fusion-of-software-with-hardware"]],"GitHub":[[6,"github"]],"HOW DOES IT WORK?":[[3,null]],"Main Function":[[5,"main-function"],[7,"main-function"]],"Motor Wires Harness":[[4,"motor-wires-harness"]],"OVERVIEW":[[2,null]],"RECEIVER":[[5,null]],"REFERENCES":[[6,null]],"Reading Joystick x- and y- Axis Values":[[7,"reading-joystick-x-and-y-axis-values"]],"Reading the Joystick x- and y- axis":[[3,"reading-the-joystick-x-and-y-axis"]],"Receiving & Extracting Data":[[5,"receiving-extracting-data"]],"Reserved Pins & GPIOs":[[3,"reserved-pins-gpios"]],"Schematic":[[3,"schematic"]],"Sending & Ecapsulating Data":[[7,"sending-ecapsulating-data"]],"TRANSMITTER":[[7,null]],"WORK-IN-PROGRESS WALK THROUGH":[[4,null]],"What is PWM?":[[3,null]],"What is struct?":[[0,null]],"Why use __attribute((packed))?":[[0,"why-use-attribute-packed"]],"Wiring":[[4,"wiring"]]},"docnames":["data","index","intro","overview","progress","receiver","references","transmitter"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["data.rst","index.rst","intro.rst","overview.rst","progress.rst","receiver.rst","references.rst","transmitter.rst"],"indexentries":{},"objects":{},"objnames":{},"objtypes":{},"terms":{"":[0,2],"0":[3,5],"02x":5,"04x":3,"0x":3,"0x14":5,"0x17":7,"0x44":7,"0x54":5,"0x63":7,"0x6e":5,"0x9c":5,"0x9e":[5,7],"0xb0":7,"0xb5":5,"0xe4":7,"1":[3,5],"100":3,"15":3,"16":3,"2":[3,5],"250":0,"3":[3,5],"4":[0,3,5],"47":3,"48":3,"5":[3,5],"50":[],"6":3,"7":3,"8":3,"90":3,"91":3,"95":[],"A":3,"As":0,"At":2,"IN":1,"IT":1,"If":3,"In":[0,3],"It":[0,3],"NOT":3,"ON":[0,5,7],"On":2,"The":[0,2,3],"These":2,"To":[2,3],"__attribut":1,"__attribute__":[0,5,7],"__gpio6__":[],"_gitbub":[],"_static":[],"abstract":1,"across":0,"ad":0,"adapt":[3,6],"adc":3,"adc1_ch0":3,"adc1_ch1":3,"add":0,"addit":[0,2],"address":[3,7],"adjust":2,"alexandrebobkov":[3,6],"align":0,"all":0,"alloc":3,"allow":[0,2,3],"an":[0,2],"analog":[0,3],"ani":[0,2,3],"app_main":[5,7],"appear":2,"appli":2,"ar":[0,2,3],"architectur":[],"arg":3,"assign":[],"attribut":0,"avail":[2,3],"axi":[1,2],"back":3,"bacl":3,"bandwidth":0,"base":[2,3],"baselin":2,"batteri":0,"behavior":[],"behaviour":2,"being":3,"belong":0,"below":3,"between":[0,2,3],"binari":0,"bitbyterid":3,"biterid":3,"bitrid":3,"blob":6,"board":[0,3],"bool":[0,5,7],"both":2,"breadboard":3,"break":3,"brief":3,"buf":[3,5],"buffer":[3,7],"button":[0,3,5,7],"byte":0,"c":0,"c3":[2,3],"c3_breadboard":[3,6],"call":[3,7],"can":[2,3],"capabl":2,"captur":0,"car":[2,3],"chang":[2,3],"channel":[3,5],"chassi":1,"chip_sensor_init":7,"class":3,"clockwis":3,"code":[2,3,6],"column":[],"com":[3,6],"command":0,"commun":[0,2],"compact":0,"compat":0,"compil":0,"complet":[4,6],"configur":[0,1],"connect":[2,3],"connectionless":2,"consequ":3,"consist":[],"const":5,"constraint":3,"contain":0,"content":[],"contin":3,"continu":2,"control":[0,1,2,4],"convert":2,"coordin":2,"core":2,"correspond":3,"counter":3,"counterclockwis":3,"crc":3,"creativ":2,"current":5,"custom":2,"customiz":2,"cycl":3,"d":5,"data":[1,2,3],"data_len":[3,5],"dc":[0,2,3,4,5,7],"ddiscret":[],"de":[],"deal":0,"declar":3,"decod":0,"decreas":3,"dedic":[],"defin":[0,2,3],"deletep":3,"deliv":3,"demonstr":2,"depend":2,"descript":3,"design":[2,3,6],"desir":3,"detail":[],"determin":[0,3],"devboard":3,"develop":[2,3],"developmemt":3,"devic":[0,2,3],"diagon":3,"differ":0,"differenti":0,"digit":3,"direct":[0,1,2],"directli":2,"discret":3,"displai":3,"doe":1,"dr":3,"drive":0,"due":3,"duti":3,"e":[0,3],"each":[3,7],"easili":2,"ecapsul":1,"effect":3,"effici":2,"elegantli":2,"els":3,"embed":0,"emploi":2,"enabl":[0,2],"encapsul":0,"encod":0,"encrypt":5,"end":0,"endless":2,"ensur":0,"error":3,"esp":[0,2,3,6,7],"esp32":[2,3,6],"esp_err":[5,7],"esp_err_nvs_new_version_found":[5,7],"esp_err_nvs_no_free_pag":[5,7],"esp_err_t":[5,7],"esp_error_check":[5,7],"esp_if_wifi_sta":5,"esp_log":3,"esp_logi":[3,5],"esp_logw":3,"esp_now_add_p":5,"esp_now_eth_alen":[5,7],"esp_now_init":5,"esp_now_is_peer_exist":3,"esp_now_peer_info_t":5,"esp_now_register_recv_cb":5,"esp_now_send":[3,7],"esp_now_send_status_t":3,"especi":0,"espressif":2,"etc":0,"even":[0,2],"event":3,"everi":3,"evok":3,"evolv":[],"exact":0,"exchang":[],"exist":[],"expand":2,"expect":0,"extend":2,"extract":[1,2],"facilit":2,"fals":5,"fast":2,"featur":2,"fi":2,"field":0,"file":6,"final":0,"fine":[0,3],"finish":1,"fix":[0,3],"flow":2,"focus":2,"follow":3,"form":2,"forward":3,"foundat":2,"four":[0,3],"free":2,"freedom":2,"freerto":[5,7],"frequenc":3,"from":[0,5],"front":3,"function":[1,2,3],"fusion":1,"g":0,"get":3,"github":[1,3],"github_":[],"give":2,"gpio":1,"gpio0":3,"gpio1":3,"gpio4":3,"gpio5":3,"gpio6":3,"gpio7":3,"grain":[0,3],"group":0,"guid":2,"h":[5,7],"handl":2,"har":1,"hardwar":[0,1,2],"harn":4,"heart":2,"hexadecim":3,"high":3,"higher":3,"hold":[0,3,7],"hood":2,"how":1,"http":[3,6],"i":2,"idea":[],"ideal":[0,2],"idf_robot":6,"idf_robot_schemat":[],"ifidx":5,"igit":[],"illustr":3,"imag":3,"implement":2,"includ":[5,7],"incom":2,"increas":3,"indic":0,"individu":0,"inform":0,"initi":[5,7],"input":[0,2],"insid":4,"instal":4,"instantli":2,"int":[0,3,5,7],"integr":2,"intend":0,"intern":7,"interpret":0,"interv":0,"introduct":[],"itself":2,"joystic":3,"joystick":[0,1,2,5],"joystick_adc_init":7,"khz":3,"kicad":[3,6],"lastli":[],"latenc":[0,2],"layout":0,"led":[0,5,7],"ledc_channel_0":3,"ledc_channel_1":3,"ledc_channel_2":3,"ledc_channel_3":3,"left":3,"len":5,"length":[3,7],"let":0,"level":3,"li":[],"light":2,"lightweight":2,"like":[0,2],"limit":3,"listen":2,"logic":0,"loop":2,"low":[0,2,3],"lower":3,"mac":[3,7],"mac_addr":[3,5],"mai":0,"main":[1,6],"maintain":[],"make":0,"manag":2,"maneuv":0,"master":[],"maxim":0,"md":6,"mean":3,"measur":3,"memcpi":5,"memori":[0,3,7],"messag":3,"microcontrol":[0,2,3],"minim":0,"modul":[2,3],"modular":2,"monitor":2,"motor":[0,1,2,3,5,7],"motor1_rpm_pcm":[],"motor1_rpm_pwm":[0,3,5,7],"motor2_rpm_pcm":[],"motor2_rpm_pwm":[0,3,5,7],"motor3_rpm_pcm":[],"motor3_rpm_pwm":[0,3,5,7],"motor4_rpm_pcm":[],"motor4_rpm_pwm":[0,3,5,7],"motors_rpm":[0,3,5],"move":3,"movement":[2,3],"multi":0,"multipl":0,"name":0,"nav_btn":7,"nav_bttn":[0,3,5],"need":[2,3],"network":2,"node":6,"nor":[],"note":3,"now":[0,2,3,7],"num":[],"number":3,"nv":[5,7],"nvs_flash":[5,7],"nvs_flash_eras":[5,7],"nvs_flash_init":[5,7],"off":[0,3,5,7],"often":3,"ok":3,"omni":0,"onboard":0,"ondatareceiv":[3,5],"ondatas":3,"one":3,"onli":[3,4],"oper":[0,2,3],"organ":0,"oscilloscop":3,"other":3,"over":0,"overview":1,"pack":[1,2,5,7],"packet":[0,2,3],"pad":0,"pair":[0,2,3],"paramet":2,"pars":0,"particular":3,"payload":1,"pcb":[3,6],"peer_addr":5,"per":3,"percentag":3,"perfect":0,"period":3,"physic":2,"pin":1,"platform":0,"png":[],"pointer":[3,7],"porttick_period_m":3,"posit":[0,3,5,7],"possibl":[2,3],"potentionomet":3,"power":[0,3],"precis":0,"predefin":2,"predict":0,"program":0,"progress":1,"project":[0,2],"protocol":[0,2],"provid":[0,2,3],"puls":[2,3],"purpos":3,"push":[0,3,5,7],"pwm":[0,2,5,7],"pwm_":[],"rapidli":3,"raw":0,"rc":[2,3],"rc_send_data_task":3,"read":1,"readm":6,"real":2,"receiv":[0,1,2,3,7],"receiver_mac":[3,7],"record":[],"refer":1,"regist":3,"regul":3,"regular":0,"relat":0,"relev":0,"remain":2,"remot":[0,2,3],"remov":0,"repres":0,"requir":3,"reserv":1,"resp":3,"respond":2,"respons":0,"restructuredtext":[],"result":[2,3,7],"ret":[5,7],"revers":3,"right":3,"robot":0,"rotat":3,"router":2,"row":[],"run":3,"same":[],"schemat":[1,6],"seamless":[],"second":3,"secur":4,"see":[],"send":[0,1,2,3],"senddata":[3,7],"sensor":[0,2,7],"sensors_data_t":[0,3,5,7],"sent":[0,2,3],"serial":0,"serv":0,"set":3,"setup":2,"share":[],"short":0,"side":[2,3],"sidewai":3,"signal":[0,2,3],"similarli":3,"simul":3,"singl":0,"size":0,"sizeof":[3,5,7],"softwar":1,"sourc":[2,6],"specif":[],"speed":[0,1,2],"spin":3,"spotlight":2,"stand":3,"state":[0,3,5,7],"static":3,"statu":[0,3],"store":[2,3],"straight":3,"stream":0,"string":5,"struct":[1,3,5,7],"structur":[0,2],"sub":[],"suffici":[],"summar":3,"summari":3,"support":0,"switch":3,"synchron":[],"syntax":[],"system":[0,2],"system_led_init":[5,7],"tabl":3,"tag":[3,5],"task":3,"techniqu":3,"telemetri":[0,2],"tell":0,"temperatur":7,"thi":[0,2,3],"those":3,"though":2,"through":1,"time":[2,3],"togeth":0,"toggl":0,"translat":2,"transmiss":[0,2],"transmission_init":7,"transmit":[0,2,3],"transmitt":[0,1,2],"transmitter_mac":5,"transmitterinfo":5,"true":3,"turn":3,"tutori":2,"two":3,"type":0,"typedef":[0,5,7],"uart":0,"uint8_t":[0,3,5,7],"under":[0,2],"understand":[],"up":0,"updat":3,"us":[1,2,3],"user":[0,2],"valu":[1,2,3],"vari":2,"variabl":[0,1],"variou":3,"vehicl":0,"via":2,"void":[3,5,7],"voltag":3,"vtaskdelai":3,"wa":3,"walk":1,"walkthrough":[],"warn":0,"well":[],"what":[],"wheel":0,"when":[0,3],"where":2,"which":2,"while":[2,3],"why":1,"wi":2,"width":[2,3],"wifi":5,"wifi_init":[5,7],"wildli":2,"wire":1,"wireless":2,"wirelessli":2,"without":[2,3],"work":1,"wroom":3,"x":[0,1,2,5],"x_axi":[0,3,5,7],"y":[0,1,2,5],"y_axi":[0,3,5,7],"you":[0,2],"your":2},"titles":["3. DATA STRUCTS","ByteRider documentation","1. OVERVIEW","2. HOW DOES IT WORK?","6. WORK-IN-PROGRESS WALK THROUGH","5. RECEIVER","7. REFERENCES","4. TRANSMITTER"],"titleterms":{"IN":4,"IT":3,"__attribut":0,"abstract":2,"axi":[3,7],"byterid":1,"chassi":4,"configur":[5,7],"control":3,"data":[0,5,7],"de":[],"direct":3,"document":1,"doe":3,"ecapsul":7,"encapsul":[],"extract":5,"finish":4,"function":[5,7],"fusion":3,"github":6,"gpio":3,"har":4,"hardwar":3,"how":3,"i":[0,3],"introduct":[],"joystick":[3,7],"main":[5,7],"motor":4,"overview":2,"pack":0,"payload":0,"pin":3,"progress":4,"pwm":3,"read":[3,7],"receiv":5,"refer":6,"reserv":3,"schemat":3,"send":7,"softwar":3,"speed":3,"struct":0,"through":4,"transmitt":7,"us":0,"valu":7,"variabl":[5,7],"walk":4,"walkthrough":[],"what":[0,3],"why":0,"wire":4,"work":[3,4],"x":[3,7],"y":[3,7]}}) \ No newline at end of file +Search.setIndex({"alltitles":{"ABSTRACT":[[2,"abstract"]],"ByteRider documentation":[[1,null]],"Chassis":[[4,"chassis"]],"Configuration Variables":[[5,"configuration-variables"],[7,"configuration-variables"]],"Controlling the Direction and Speed":[[3,"controlling-the-direction-and-speed"]],"DATA STRUCTS":[[0,null]],"Data Payload":[[0,"data-payload"]],"Finished Work":[[4,"finished-work"]],"Fusion of Software with Hardware":[[3,"fusion-of-software-with-hardware"]],"GitHub":[[6,"github"]],"HOW DOES IT WORK?":[[3,null]],"Main Function":[[5,"main-function"],[7,"main-function"]],"Motor Wires Harness":[[4,"motor-wires-harness"]],"OVERVIEW":[[2,null]],"RECEIVER":[[5,null]],"REFERENCES":[[6,null]],"Reading Joystick x- and y- Axis Values":[[7,"reading-joystick-x-and-y-axis-values"]],"Reading the Joystick x- and y- axis":[[3,"reading-the-joystick-x-and-y-axis"]],"Receiving & Extracting Data":[[5,"receiving-extracting-data"]],"Reserved Pins & GPIOs":[[3,"reserved-pins-gpios"]],"Schematic":[[3,"schematic"]],"Sending & Ecapsulating Data":[[7,"sending-ecapsulating-data"]],"TRANSMITTER":[[7,null]],"WORK-IN-PROGRESS WALK THROUGH":[[4,null]],"What is PWM?":[[3,null]],"What is struct?":[[0,null]],"Why use __attribute((packed))?":[[0,"why-use-attribute-packed"]],"Wiring":[[4,"wiring"]]},"docnames":["data","index","intro","overview","progress","receiver","references","transmitter"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["data.rst","index.rst","intro.rst","overview.rst","progress.rst","receiver.rst","references.rst","transmitter.rst"],"indexentries":{},"objects":{},"objnames":{},"objtypes":{},"terms":{"":[0,2],"0":[3,5],"02x":5,"04x":3,"0x":3,"0x14":5,"0x17":7,"0x44":7,"0x54":5,"0x63":7,"0x6e":5,"0x9c":5,"0x9e":[5,7],"0xb0":7,"0xb5":5,"0xe4":7,"1":[3,5],"100":3,"15":3,"16":3,"2":[3,5],"250":0,"3":[3,5],"4":[0,3,5],"47":3,"48":3,"5":[3,5],"50":[],"6":3,"7":3,"8":3,"90":3,"91":3,"95":[],"A":3,"As":0,"At":2,"IN":1,"IT":1,"If":3,"In":[0,3],"It":[0,3],"NOT":3,"ON":[0,5,7],"On":2,"The":[0,2,3],"These":2,"To":[2,3],"__attribut":1,"__attribute__":[0,5,7],"__gpio6__":[],"_gitbub":[],"_static":[],"abstract":1,"across":0,"ad":0,"adapt":[3,6],"adc":3,"adc1_ch0":3,"adc1_ch1":3,"add":0,"addit":[0,2],"address":[3,7],"adjust":2,"alexandrebobkov":[3,6],"align":0,"all":0,"alloc":3,"allow":[0,2,3],"an":[0,2],"analog":[0,3],"ani":[0,2,3],"app_main":[5,7],"appear":2,"appli":2,"ar":[0,2,3],"architectur":[],"arg":3,"assign":[],"attribut":0,"avail":[2,3],"axi":[1,2],"back":3,"bacl":3,"bandwidth":0,"base":[2,3],"baselin":2,"batteri":0,"behavior":[],"behaviour":2,"being":3,"belong":0,"below":3,"between":[0,2,3],"binari":0,"bitbyterid":3,"biterid":3,"bitrid":3,"blob":6,"board":[0,3],"bool":[0,5,7],"both":2,"breadboard":3,"break":[],"brief":3,"buf":[3,5],"buffer":[3,7],"button":[0,3,5,7],"byte":0,"c":0,"c3":[2,3],"c3_breadboard":[3,6],"call":[3,7],"can":[2,3],"capabl":2,"captur":0,"car":[2,3],"chang":[2,3],"channel":[3,5],"chassi":1,"chip_sensor_init":7,"class":[],"clockwis":3,"code":[2,3,6],"column":[],"com":[3,6],"command":0,"commun":[0,2],"compact":0,"compat":0,"compil":0,"complet":[4,6],"configur":[0,1],"connect":[2,3],"connectionless":2,"consequ":3,"consist":[],"const":5,"constraint":3,"contain":0,"content":[],"contin":3,"continu":2,"control":[0,1,2,4],"convert":2,"coordin":2,"core":2,"correspond":3,"counter":3,"counterclockwis":3,"crc":3,"creativ":2,"current":5,"custom":2,"customiz":2,"cycl":3,"d":5,"data":[1,2,3],"data_len":[3,5],"dc":[0,2,3,4,5,7],"ddiscret":[],"de":[],"deal":0,"declar":3,"decod":0,"decreas":3,"dedic":[],"defin":[0,2,3],"deletep":3,"deliv":3,"demonstr":2,"depend":2,"descript":3,"design":[2,3,6],"desir":3,"detail":[],"determin":[0,3],"devboard":3,"develop":[2,3],"developmemt":3,"devic":[0,2,3],"diagon":3,"differ":0,"differenti":0,"digit":3,"direct":[0,1,2],"directli":2,"discret":3,"displai":3,"doe":1,"dr":3,"drive":0,"due":3,"duti":3,"e":[0,3],"each":[3,7],"easili":2,"ecapsul":1,"effect":3,"effici":2,"elegantli":2,"els":3,"embed":0,"emploi":2,"enabl":[0,2],"encapsul":0,"encod":0,"encrypt":5,"end":0,"endless":2,"ensur":0,"error":3,"esp":[0,2,3,6,7],"esp32":[2,3,6],"esp_err":[5,7],"esp_err_nvs_new_version_found":[5,7],"esp_err_nvs_no_free_pag":[5,7],"esp_err_t":[5,7],"esp_error_check":[5,7],"esp_if_wifi_sta":5,"esp_log":3,"esp_logi":[3,5],"esp_logw":3,"esp_now_add_p":5,"esp_now_eth_alen":[5,7],"esp_now_init":5,"esp_now_is_peer_exist":3,"esp_now_peer_info_t":5,"esp_now_register_recv_cb":5,"esp_now_send":[3,7],"esp_now_send_status_t":3,"especi":0,"espressif":2,"etc":0,"even":[0,2],"event":3,"everi":3,"evok":3,"evolv":[],"exact":0,"exchang":[],"exist":[],"expand":2,"expect":0,"extend":2,"extract":[1,2],"facilit":2,"fals":5,"fast":2,"featur":2,"fi":2,"field":0,"file":6,"final":0,"fine":[0,3],"finish":1,"fix":[0,3],"flow":2,"focus":2,"follow":3,"form":2,"forward":3,"foundat":2,"four":[0,3],"free":2,"freedom":2,"freerto":[5,7],"frequenc":3,"from":[0,5],"front":3,"function":[1,2,3],"fusion":1,"g":0,"get":3,"github":[1,3],"github_":[],"give":2,"gpio":1,"gpio0":3,"gpio1":3,"gpio4":3,"gpio5":3,"gpio6":3,"gpio7":3,"grain":[0,3],"group":0,"guid":2,"h":[5,7],"handl":2,"har":1,"hardwar":[0,1,2],"harn":4,"heart":2,"hexadecim":3,"high":3,"higher":3,"hold":[0,3,7],"hood":2,"how":1,"http":[3,6],"i":2,"idea":[],"ideal":[0,2],"idf_robot":6,"idf_robot_schemat":[],"ifidx":5,"igit":[],"illustr":3,"imag":3,"implement":2,"includ":[5,7],"incom":2,"increas":3,"indic":0,"individu":0,"inform":0,"initi":[5,7],"input":[0,2],"insid":4,"instal":4,"instantli":2,"int":[0,3,5,7],"integr":2,"intend":0,"intern":7,"interpret":0,"interv":0,"introduct":[],"itself":2,"joystic":3,"joystick":[0,1,2,5],"joystick_adc_init":7,"khz":3,"kicad":[3,6],"lastli":[],"latenc":[0,2],"layout":0,"led":[0,5,7],"ledc_channel_0":3,"ledc_channel_1":3,"ledc_channel_2":3,"ledc_channel_3":3,"left":3,"len":5,"length":[3,7],"let":0,"level":3,"li":[],"light":2,"lightweight":2,"like":[0,2],"limit":3,"listen":2,"logic":0,"loop":2,"low":[0,2,3],"lower":3,"mac":[3,7],"mac_addr":[3,5],"mai":0,"main":[1,6],"maintain":[],"make":0,"manag":2,"maneuv":0,"master":[],"maxim":0,"md":6,"mean":3,"measur":3,"memcpi":5,"memori":[0,3,7],"messag":3,"microcontrol":[0,2,3],"minim":0,"modul":[2,3],"modular":2,"monitor":2,"motor":[0,1,2,3,5,7],"motor1_rpm_pcm":[],"motor1_rpm_pwm":[0,3,5,7],"motor2_rpm_pcm":[],"motor2_rpm_pwm":[0,3,5,7],"motor3_rpm_pcm":[],"motor3_rpm_pwm":[0,3,5,7],"motor4_rpm_pcm":[],"motor4_rpm_pwm":[0,3,5,7],"motors_rpm":[0,3,5],"move":3,"movement":[2,3],"multi":0,"multipl":0,"name":0,"nav_btn":7,"nav_bttn":[0,3,5],"need":[2,3],"network":2,"node":6,"nor":[],"note":3,"now":[0,2,3,7],"num":[],"number":3,"nv":[5,7],"nvs_flash":[5,7],"nvs_flash_eras":[5,7],"nvs_flash_init":[5,7],"off":[0,3,5,7],"often":3,"ok":3,"omni":0,"onboard":0,"ondatareceiv":[3,5],"ondatas":3,"one":3,"onli":[3,4],"oper":[0,2,3],"organ":0,"oscilloscop":3,"other":3,"over":0,"overview":1,"pack":[1,2,5,7],"packet":[0,2,3],"pad":0,"pair":[0,2,3],"paramet":2,"pars":0,"particular":3,"payload":1,"pcb":[3,6],"peer_addr":5,"per":3,"percentag":3,"perfect":0,"period":3,"physic":2,"pin":1,"platform":0,"png":[],"pointer":[3,7],"porttick_period_m":3,"posit":[0,3,5,7],"possibl":[2,3],"potentionomet":3,"power":[0,3],"precis":0,"predefin":2,"predict":0,"program":0,"progress":1,"project":[0,2],"protocol":[0,2],"provid":[0,2,3],"puls":[2,3],"purpos":3,"push":[0,3,5,7],"pwm":[0,2,5,7],"pwm_":[],"rapidli":3,"raw":0,"rc":[2,3],"rc_send_data_task":3,"read":1,"readm":6,"real":2,"receiv":[0,1,2,3,7],"receiver_mac":[3,7],"record":[],"refer":1,"regist":3,"regul":3,"regular":0,"relat":0,"relev":0,"remain":2,"remot":[0,2,3],"remov":0,"repres":0,"requir":3,"reserv":1,"resp":3,"respond":2,"respons":0,"restructuredtext":[],"result":[2,3,7],"ret":[5,7],"revers":3,"right":3,"robot":0,"rotat":3,"router":2,"row":[],"run":3,"same":[],"schemat":[1,6],"seamless":[],"second":3,"secur":4,"see":[],"send":[0,1,2,3],"senddata":[3,7],"sensor":[0,2,7],"sensors_data_t":[0,3,5,7],"sent":[0,2,3],"serial":0,"serv":0,"set":3,"setup":2,"share":[],"short":0,"side":[2,3],"sidewai":3,"signal":[0,2,3],"similarli":3,"simul":3,"singl":0,"size":0,"sizeof":[3,5,7],"softwar":1,"sourc":[2,6],"specif":[],"speed":[0,1,2],"spin":3,"spotlight":2,"stand":3,"state":[0,3,5,7],"static":3,"statu":[0,3],"store":[2,3],"straight":3,"stream":0,"string":5,"struct":[1,3,5,7],"structur":[0,2],"sub":[],"suffici":[],"summar":3,"summari":3,"support":0,"switch":3,"synchron":[],"syntax":[],"system":[0,2],"system_led_init":[5,7],"tabl":3,"tag":[3,5],"task":3,"techniqu":3,"telemetri":[0,2],"tell":0,"temperatur":7,"thi":[0,2,3],"those":3,"though":2,"through":1,"time":[2,3],"togeth":0,"toggl":0,"translat":2,"transmiss":[0,2],"transmission_init":7,"transmit":[0,2,3],"transmitt":[0,1,2],"transmitter_mac":5,"transmitterinfo":5,"true":3,"turn":3,"tutori":2,"two":3,"type":0,"typedef":[0,5,7],"uart":0,"uint8_t":[0,3,5,7],"under":[0,2],"understand":[],"up":0,"updat":3,"us":[1,2,3],"user":[0,2],"valu":[1,2,3],"vari":2,"variabl":[0,1],"variou":3,"vehicl":0,"via":2,"void":[3,5,7],"voltag":3,"vtaskdelai":3,"wa":3,"walk":1,"walkthrough":[],"warn":0,"well":[],"what":[],"wheel":0,"when":[0,3],"where":2,"which":2,"while":[2,3],"why":1,"wi":2,"width":[2,3],"wifi":5,"wifi_init":[5,7],"wildli":2,"wire":1,"wireless":2,"wirelessli":2,"without":[2,3],"work":1,"wroom":3,"x":[0,1,2,5],"x_axi":[0,3,5,7],"y":[0,1,2,5],"y_axi":[0,3,5,7],"you":[0,2],"your":2},"titles":["3. DATA STRUCTS","ByteRider documentation","1. OVERVIEW","2. HOW DOES IT WORK?","6. WORK-IN-PROGRESS WALK THROUGH","5. RECEIVER","7. REFERENCES","4. TRANSMITTER"],"titleterms":{"IN":4,"IT":3,"__attribut":0,"abstract":2,"axi":[3,7],"byterid":1,"chassi":4,"configur":[5,7],"control":3,"data":[0,5,7],"de":[],"direct":3,"document":1,"doe":3,"ecapsul":7,"encapsul":[],"extract":5,"finish":4,"function":[5,7],"fusion":3,"github":6,"gpio":3,"har":4,"hardwar":3,"how":3,"i":[0,3],"introduct":[],"joystick":[3,7],"main":[5,7],"motor":4,"overview":2,"pack":0,"payload":0,"pin":3,"progress":4,"pwm":3,"read":[3,7],"receiv":5,"refer":6,"reserv":3,"schemat":3,"send":7,"softwar":3,"speed":3,"struct":0,"through":4,"transmitt":7,"us":0,"valu":7,"variabl":[5,7],"walk":4,"walkthrough":[],"what":[0,3],"why":0,"wire":4,"work":[3,4],"x":[3,7],"y":[3,7]}}) \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.aux b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.aux index e9959c0ab..5e9e33a34 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.aux +++ b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.aux @@ -20,77 +20,7 @@ \newlabel{overview::doc}{{2}{5}{HOW DOES IT WORK?}{chapter.2}{}} \@writefile{toc}{\contentsline {section}{\numberline {2.1}Reserved Pins \& GPIOs}{5}{section.2.1}\protected@file@percent } \newlabel{overview:reserved-pins-gpios}{{2.1}{5}{Reserved Pins \& GPIOs}{section.2.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1}x\sphinxhyphen {} and y\sphinxhyphen {} axis}{5}{subsection.2.1.1}\protected@file@percent } -\newlabel{overview:x-and-y-axis}{{2.1.1}{5}{x\sphinxhyphen {} and y\sphinxhyphen {} axis}{subsection.2.1.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.2}Direction and Speed}{5}{subsection.2.1.2}\protected@file@percent } -\newlabel{overview:direction-and-speed}{{2.1.2}{5}{Direction and Speed}{subsection.2.1.2}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces DC Motor PWM duty cycle 0\%}}{6}{figure.2.1}\protected@file@percent } -\newlabel{overview:id1}{{1}{6}{DC Motor PWM duty cycle 0\%}{figure.2.1}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces DC Motor PWM duty cycle 47.6\%}}{6}{figure.2.2}\protected@file@percent } -\newlabel{overview:id2}{{2}{6}{DC Motor PWM duty cycle 47.6\%}{figure.2.2}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces DC Motor PWM duty cycle 90.8\%}}{6}{figure.2.3}\protected@file@percent } -\newlabel{overview:id3}{{3}{6}{DC Motor PWM duty cycle 90.8\%}{figure.2.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {2.2}Fusion of Software with Hardware}{6}{section.2.2}\protected@file@percent } -\newlabel{overview:fusion-of-software-with-hardware}{{2.2}{6}{Fusion of Software with Hardware}{section.2.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {2.3}Schematic}{8}{section.2.3}\protected@file@percent } -\newlabel{overview:schematic}{{2.3}{8}{Schematic}{section.2.3}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {3}DATA STRUCTS}{9}{chapter.3}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{data:data-structs}{{3}{9}{DATA STRUCTS}{chapter.3}{}} -\newlabel{data::doc}{{3}{9}{DATA STRUCTS}{chapter.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {3.1}Data Payload}{9}{section.3.1}\protected@file@percent } -\newlabel{data:data-payload}{{3.1}{9}{Data Payload}{section.3.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}Why use \_\_attribute((packed))?}{10}{subsection.3.1.1}\protected@file@percent } -\newlabel{data:why-use-attribute-packed}{{3.1.1}{10}{Why use \_\_attribute((packed))?}{subsection.3.1.1}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {4}TRANSMITTER}{11}{chapter.4}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{transmitter:transmitter}{{4}{11}{TRANSMITTER}{chapter.4}{}} -\newlabel{transmitter::doc}{{4}{11}{TRANSMITTER}{chapter.4}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.1}Configuration Variables}{11}{section.4.1}\protected@file@percent } -\newlabel{transmitter:configuration-variables}{{4.1}{11}{Configuration Variables}{section.4.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.2}Reading Joystick x\sphinxhyphen {} and y\sphinxhyphen {} Axis Values}{11}{section.4.2}\protected@file@percent } -\newlabel{transmitter:reading-joystick-x-and-y-axis-values}{{4.2}{11}{Reading Joystick x\sphinxhyphen {} and y\sphinxhyphen {} Axis Values}{section.4.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.3}Sending \& Ecapsulating Data}{11}{section.4.3}\protected@file@percent } -\newlabel{transmitter:sending-ecapsulating-data}{{4.3}{11}{Sending \& Ecapsulating Data}{section.4.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.4}Main Function}{12}{section.4.4}\protected@file@percent } -\newlabel{transmitter:main-function}{{4.4}{12}{Main Function}{section.4.4}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {5}RECEIVER}{13}{chapter.5}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{receiver:receiver}{{5}{13}{RECEIVER}{chapter.5}{}} -\newlabel{receiver::doc}{{5}{13}{RECEIVER}{chapter.5}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5.1}Configuration Variables}{13}{section.5.1}\protected@file@percent } -\newlabel{receiver:configuration-variables}{{5.1}{13}{Configuration Variables}{section.5.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5.2}Receiving \& Extracting Data}{13}{section.5.2}\protected@file@percent } -\newlabel{receiver:receiving-extracting-data}{{5.2}{13}{Receiving \& Extracting Data}{section.5.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5.3}Main Function}{14}{section.5.3}\protected@file@percent } -\newlabel{receiver:main-function}{{5.3}{14}{Main Function}{section.5.3}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {6}WORK\sphinxhyphen {}IN\sphinxhyphen {}PROGRESS WALK THROUGH}{15}{chapter.6}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{progress:work-in-progress-walk-through}{{6}{15}{WORK\sphinxhyphen {}IN\sphinxhyphen {}PROGRESS WALK THROUGH}{chapter.6}{}} -\newlabel{progress::doc}{{6}{15}{WORK\sphinxhyphen {}IN\sphinxhyphen {}PROGRESS WALK THROUGH}{chapter.6}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.1}Finished Work}{15}{section.6.1}\protected@file@percent } -\newlabel{progress:finished-work}{{6.1}{15}{Finished Work}{section.6.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.2}Chassis}{15}{section.6.2}\protected@file@percent } -\newlabel{progress:chassis}{{6.2}{15}{Chassis}{section.6.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.3}Wiring}{15}{section.6.3}\protected@file@percent } -\newlabel{progress:wiring}{{6.3}{15}{Wiring}{section.6.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.4}Motor Wires Harness}{15}{section.6.4}\protected@file@percent } -\newlabel{progress:motor-wires-harness}{{6.4}{15}{Motor Wires Harness}{section.6.4}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Completed chassis with only DC motor controllers installed.}}{16}{figure.6.1}\protected@file@percent } -\newlabel{progress:id1}{{1}{16}{Completed chassis with only DC motor controllers installed}{figure.6.1}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Completed wiring.}}{16}{figure.6.2}\protected@file@percent } -\newlabel{progress:id2}{{2}{16}{Completed wiring}{figure.6.2}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces DC Motors wires secured inside harnes.}}{17}{figure.6.3}\protected@file@percent } -\newlabel{progress:id3}{{3}{17}{DC Motors wires secured inside harnes}{figure.6.3}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {7}REFERENCES}{19}{chapter.7}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{references:references}{{7}{19}{REFERENCES}{chapter.7}{}} -\newlabel{references::doc}{{7}{19}{REFERENCES}{chapter.7}{}} -\@writefile{toc}{\contentsline {section}{\numberline {7.1}GitHub}{19}{section.7.1}\protected@file@percent } -\newlabel{references:github}{{7.1}{19}{GitHub}{section.7.1}{}} -\gdef \@abspage@last{23} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1}Reading the Joystick x\sphinxhyphen {} and y\sphinxhyphen {} axis}{5}{subsection.2.1.1}\protected@file@percent } +\newlabel{overview:reading-the-joystick-x-and-y-axis}{{2.1.1}{5}{Reading the Joystick x\sphinxhyphen {} and y\sphinxhyphen {} axis}{subsection.2.1.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.2}Controlling the Direction and Speed}{5}{subsection.2.1.2}\protected@file@percent } +\newlabel{overview:controlling-the-direction-and-speed}{{2.1.2}{5}{Controlling the Direction and Speed}{subsection.2.1.2}{}} diff --git a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.fdb_latexmk b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.fdb_latexmk index 3d4fcaf05..ab8661147 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.fdb_latexmk +++ b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.fdb_latexmk @@ -1,11 +1,11 @@ # Fdb version 4 -["makeindex byterider.idx"] 1751345040.24934 "byterider.idx" "byterider.ind" "byterider" 1752903606.94038 0 - "byterider.idx" 1752903306.84987 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex" +["makeindex byterider.idx"] 1751345040.24934 "byterider.idx" "byterider.ind" "byterider" 1752905695.15137 0 + "byterider.idx" 1752905690.46315 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex" (generated) "byterider.ilg" "byterider.ind" (rewritten before read) -["pdflatex"] 1752903306.32584 "byterider.tex" "byterider.pdf" "byterider" 1752903606.94051 2 +["pdflatex"] 1752905690.03968 "byterider.tex" "byterider.pdf" "byterider" 1752905695.15158 2 "/etc/texmf/web2c/texmf.cnf" 1729307187.57985 475 c0e671620eb5563b2130f56340a5fde8 "" "/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 "" "/usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm" 1136768653 3584 adb004a0c8e7c46ee66cad73671f37b4 "" @@ -21,13 +21,7 @@ "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr12.tfm" 1136768653 1288 655e228510b4c2a1abe905c368440826 "" "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr17.tfm" 1136768653 1292 296a67155bdbfc32aa9c636f21e91433 "" "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm" 1136768653 1124 6c73e740cf17375f03eec0ee63599741 "" - "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xbtt.tfm" 1136768653 1436 f00b2a275be56a8355f5c3b07a5a7a4c "" "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xtt.tfm" 1136768653 1384 8943063000d26272532f74ca134dfecd "" - "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xttsl.tfm" 1136768653 1624 fb8f48c6308ace0a799f9278aba03e18 "" - "/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb" 1248133631 37912 77d683123f92148345f3fc36a38d9ab1 "" - "/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb" 1248133631 32915 7bf7720c61a5b3a7ff25b0964421c9b6 "" - "/usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/t1xbtt.pfb" 1136849748 26580 8886cc7827569e05fd10df25f221aef6 "" - "/usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/t1xtt.pfb" 1136849748 26301 f08b3c26ea42c3177a262c2ac37d6a91 "" "/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1461363279 71627 94eb9990bed73c364d7f53f960cc8c5b "" "/usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty" 1575674566 24708 5584a51a7101caf7e6bbf1fc27d8f7b1 "" "/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf" 1496785618 7008 9ff5fdcc865b01beca2b0fe4a46231d4 "" @@ -126,43 +120,28 @@ "/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty" 1700082560 55487 80a65caedd3722f4c20a14a69e785d8f "" "/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1707919699 40399 f2c302f7d2af602abb742093540a5834 "" "/usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ec.enc" 1529098226 2457 aaabbccba4df2a7f7371410ee4e075a3 "" - "/usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ts1.enc" 1529098226 3124 3813fd4c981d99822890a2861b0d274c "" "/usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm" 1480098718 11796 b7bc3db132e822d2872ea50ba8fa7cc0 "" "/usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvbi.tfm" 1480098718 12396 e65c2800bb94ee6ae6e4fdf18f68fa2e "" "/usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvr.tfm" 1480098718 12084 374c5b7e91efcc10472ab8e61f66d36b "" "/usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmb.tfm" 1480098718 11484 431d8013ae6931f9326b9a0f492d2a5e "" "/usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmr.tfm" 1480098718 11504 0b76b46eb90907e684139293e03c466a "" "/usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmri.tfm" 1480098718 11356 da1519f442d8a49b81c86cbaf25ef79f "" - "/usr/share/texmf/fonts/tfm/public/tex-gyre/ts1-qtmr.tfm" 1480098718 1600 20cdf11dab97d5d39e847571f9314407 "" - "/usr/share/texmf/fonts/type1/public/tex-gyre/qhvb.pfb" 1480098745 112164 176018dd42fcc60204173fa10e357da5 "" - "/usr/share/texmf/fonts/type1/public/tex-gyre/qhvbi.pfb" 1480098745 104926 77ce2f0433ac7fd33dbe9968d127e4fb "" - "/usr/share/texmf/fonts/type1/public/tex-gyre/qhvr.pfb" 1480098745 110045 c159829aa6d7d99f1777bb40c90b8157 "" - "/usr/share/texmf/fonts/type1/public/tex-gyre/qtmb.pfb" 1480098745 131776 4be3e220f990dc716f91bb7965c09237 "" - "/usr/share/texmf/fonts/type1/public/tex-gyre/qtmr.pfb" 1480098745 133302 8dca243a80ecf4cfe00077d4bd995bd7 "" - "/usr/share/texmf/fonts/type1/public/tex-gyre/qtmri.pfb" 1480098745 129669 aaf12ebd0b807d452087fc34bde5bd7d "" "/usr/share/texmf/tex/latex/tex-gyre/t1qhv.fd" 1480098840 2378 01e898189bf06467f2f6fe33decbff09 "" "/usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd" 1480098840 1638 7cc855d1dc7c12c1858f209a4ef88c4a "" "/usr/share/texmf/tex/latex/tex-gyre/tgheros.sty" 1480098840 2130 2b41e80713f78d339e74c19d96fe70a1 "" "/usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty" 1480098840 2211 af9b7d12507105a58a3e8e926996b827 "" - "/usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd" 1480098840 1160 de7b1cf70edab73c9f1704df2a9fdbbd "" "/usr/share/texmf/web2c/texmf.cnf" 1707919699 40399 f2c302f7d2af602abb742093540a5834 "" "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1729307339.56668 164740 5f02460f8e29b549a9ea60117f5f46e4 "" "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1729307374 6831204 5735eed681e2db0697903be4f74d0da4 "" "ESP-IDF_Robot.jpg" 1751237797.86757 845089 b7dde8dd48ddf8277f1bc042faa25f59 "" "ESP-IDF_Robot_PWM_Duty-0.bmp" 1751508136.52355 1152054 93a4b759893a497ee74e9e9714d5dc59 "" - "ESP-IDF_Robot_PWM_Duty-50.bmp" 1751508136.52555 1152054 0cbe44a2e214c15e99f128e032161d16 "" - "ESP-IDF_Robot_PWM_Duty-95.bmp" 1751508136.52655 1152054 8e19f451fb1aca148395c1d76f5212c2 "" - "ESP-IDF_Robot_schematic.png" 1751346569.16358 436775 46ddf55184eb526c148ac8082e88d1af "" - "byterider.aux" 1752903606.31344 8245 4c64ff9b4f02f8c67e8c4885a1e8ae14 "pdflatex" + "byterider.aux" 1752905695.09419 1868 d91cd6a77ea7b9dc322d42ea296425c1 "pdflatex" "byterider.ind" 1751345040.25776 0 d41d8cd98f00b204e9800998ecf8427e "makeindex byterider.idx" - "byterider.out" 1752903606.31344 3842 d3ff78e7a4a15d308747eead6ce779e5 "pdflatex" - "byterider.tex" 1752903305.42786 43390 2c04bcbd92f95d76e3baddac9f057bcb "" - "byterider.toc" 1752903606.31444 2219 5d9af4597f4b6dff30a19469a8f375dd "pdflatex" - "chassi-progress_002d.jpg" 1751339438.86554 2480685 e170c01124e754edd60ae7184f432f3e "" - "chassi-progress_003a.jpg" 1751339438.87354 2954152 c38b12e2db111eda815b179f731bad03 "" - "motors-wiring-harness-001.jpg" 1751336371.03224 2077267 87bd5878e4bae78f2b2421139eba6205 "" + "byterider.out" 1752905695.09419 987 bdb949a4c2e4aba34cda6d508be1c167 "pdflatex" + "byterider.tex" 1752905689.78714 44491 bd4f9a50d905e0ca81b1e4100d806380 "" + "byterider.toc" 1752905690.54215 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex" "sphinx.sty" 1751241561.05477 54203 ee7fe875437470f5328ee20661bb9f1d "" - "sphinxhighlight.sty" 1752903305.08185 7553 83fb52292c17957d9f4aadcb28c57a87 "" + "sphinxhighlight.sty" 1752905689.69314 7553 83fb52292c17957d9f4aadcb28c57a87 "" "sphinxlatexadmonitions.sty" 1751241561.05477 19111 5e67a0f91439018bceb7cadf319345e6 "" "sphinxlatexcontainers.sty" 1751241561.05477 900 d61f923db071a7b54d3cee8a1e6935d3 "" "sphinxlatexgraphics.sty" 1751241561.05477 4918 c9266041d02bc615d54b890e96e3acd3 "" @@ -177,7 +156,7 @@ "sphinxlatexstyletext.sty" 1751241561.05677 6759 9e932c65374cfb62686485d331bc975c "" "sphinxlatextables.sty" 1751241561.05677 57643 7f1013c2fa11942370d867527bdda568 "" "sphinxmanual.cls" 1751241561.05677 4241 7b0d7a37df7b5715fb0dbd585c52ecdb "" - "sphinxmessages.sty" 1752903305.68086 745 3f5fcd6cdd7964ed608767954a8ced6f "" + "sphinxmessages.sty" 1752905689.88914 745 3f5fcd6cdd7964ed608767954a8ced6f "" "sphinxoptionsgeometry.sty" 1751241561.05677 2060 6c27b3eba37bde592ae8908ab2c1ac0f "" "sphinxoptionshyperref.sty" 1751241561.05677 1093 e468489bae7631a7f387b4b0f7bc15d4 "" "sphinxpackageboxes.sty" 1751241561.05777 36106 1be2053eb1cb9b083b3a75e3657bcb24 "" diff --git a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.fls b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.fls index 30bdff610..4243d348b 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.fls +++ b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.fls @@ -337,88 +337,3 @@ INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmri.tfm INPUT ./ESP-IDF_Robot_PWM_Duty-0.bmp INPUT ./ESP-IDF_Robot_PWM_Duty-0.bmp INPUT ./ESP-IDF_Robot_PWM_Duty-0.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-0.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-0.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-0.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-50.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-50.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-50.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-50.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-50.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-50.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-95.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-95.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-95.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-95.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-95.bmp -INPUT ./ESP-IDF_Robot_PWM_Duty-95.bmp -INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xtt.tfm -INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xbtt.tfm -INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xttsl.tfm -INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmr.tfm -INPUT ./ESP-IDF_Robot_schematic.png -INPUT ./ESP-IDF_Robot_schematic.png -INPUT ./ESP-IDF_Robot_schematic.png -INPUT ./ESP-IDF_Robot_schematic.png -INPUT ./ESP-IDF_Robot_schematic.png -INPUT ./ESP-IDF_Robot_schematic.png -INPUT ./ESP-IDF_Robot_schematic.png -INPUT ./ESP-IDF_Robot_schematic.png -INPUT ./ESP-IDF_Robot_schematic.png -INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd -INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd -INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd -INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ts1-qtmr.tfm -INPUT /usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ts1.enc -INPUT ./ESP-IDF_Robot.jpg -INPUT ./ESP-IDF_Robot.jpg -INPUT ./ESP-IDF_Robot.jpg -INPUT ./ESP-IDF_Robot.jpg -INPUT ./ESP-IDF_Robot.jpg -INPUT ./ESP-IDF_Robot.jpg -INPUT ./ESP-IDF_Robot.jpg -INPUT ./ESP-IDF_Robot.jpg -INPUT ./chassi-progress_002d.jpg -INPUT ./chassi-progress_002d.jpg -INPUT ./chassi-progress_002d.jpg -INPUT ./chassi-progress_002d.jpg -INPUT ./chassi-progress_002d.jpg -INPUT ./chassi-progress_002d.jpg -INPUT ./chassi-progress_002d.jpg -INPUT ./chassi-progress_002d.jpg -INPUT ./chassi-progress_002d.jpg -INPUT ./chassi-progress_003a.jpg -INPUT ./chassi-progress_003a.jpg -INPUT ./chassi-progress_003a.jpg -INPUT ./chassi-progress_003a.jpg -INPUT ./chassi-progress_003a.jpg -INPUT ./chassi-progress_003a.jpg -INPUT ./chassi-progress_003a.jpg -INPUT ./chassi-progress_003a.jpg -INPUT ./chassi-progress_003a.jpg -INPUT ./motors-wiring-harness-001.jpg -INPUT ./motors-wiring-harness-001.jpg -INPUT ./motors-wiring-harness-001.jpg -INPUT ./motors-wiring-harness-001.jpg -INPUT ./motors-wiring-harness-001.jpg -INPUT ./motors-wiring-harness-001.jpg -INPUT ./motors-wiring-harness-001.jpg -INPUT ./motors-wiring-harness-001.jpg -INPUT ./motors-wiring-harness-001.jpg -INPUT ./byterider.ind -INPUT ./byterider.ind -INPUT byterider.ind -INPUT byterider.aux -INPUT ./byterider.out -INPUT ./byterider.out -INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb -INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb -INPUT /usr/share/texmf/fonts/type1/public/tex-gyre/qhvb.pfb -INPUT /usr/share/texmf/fonts/type1/public/tex-gyre/qhvbi.pfb -INPUT /usr/share/texmf/fonts/type1/public/tex-gyre/qhvr.pfb -INPUT /usr/share/texmf/fonts/type1/public/tex-gyre/qtmb.pfb -INPUT /usr/share/texmf/fonts/type1/public/tex-gyre/qtmr.pfb -INPUT /usr/share/texmf/fonts/type1/public/tex-gyre/qtmri.pfb -INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/t1xbtt.pfb -INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/t1xtt.pfb -INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/t1xtt.pfb diff --git a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.log b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.log index 5e35a37e7..d9e031c6f 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.log +++ b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2024.10.18) 19 JUL 2025 01:35 +This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2024.10.18) 19 JUL 2025 02:14 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -855,7 +855,7 @@ dvips/tex-gyre/q-ec.enc}] [2 ] [2 ] - + LaTeX Font Info: Trying to load font information for T1+txtt on input line 8 7. @@ -882,174 +882,30 @@ See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... -l.268 ...egraphics{{ESP-IDF_Robot_PWM_Duty-0}.bmp} +l.322 ...egraphics{{ESP-IDF_Robot_PWM_Duty-0}.bmp} +? ^^[[A +Type to proceed, S to scroll future error messages, +R to run without stopping, Q to run quietly, +I to insert something, E to edit your file, +1 or ... or 9 to ignore the next 1 to 9 tokens of input, +H for help, X to quit. ? - -! LaTeX Error: Unknown graphics extension: .bmp. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. +! Emergency stop. ... -l.268 ...egraphics{{ESP-IDF_Robot_PWM_Duty-0}.bmp} - -? q -OK, entering \batchmode... - -! LaTeX Error: Unknown graphics extension: .bmp. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.275 ...graphics{{ESP-IDF_Robot_PWM_Duty-50}.bmp} +l.322 ...egraphics{{ESP-IDF_Robot_PWM_Duty-0}.bmp} Try typing to proceed. If that doesn't work, type X to quit. - -! LaTeX Error: Unknown graphics extension: .bmp. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.275 ...graphics{{ESP-IDF_Robot_PWM_Duty-50}.bmp} - -Try typing to proceed. -If that doesn't work, type X to quit. - - -! LaTeX Error: Unknown graphics extension: .bmp. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.282 ...graphics{{ESP-IDF_Robot_PWM_Duty-95}.bmp} - -Try typing to proceed. -If that doesn't work, type X to quit. - - -! LaTeX Error: Unknown graphics extension: .bmp. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.282 ...graphics{{ESP-IDF_Robot_PWM_Duty-95}.bmp} - -Try typing to proceed. -If that doesn't work, type X to quit. - -LaTeX Font Info: Font shape `T1/txtt/b/n' in size <10> not available -(Font) Font shape `T1/txtt/bx/n' tried instead on input line 407. -LaTeX Font Info: Font shape `T1/txtt/m/it' in size <10> not available -(Font) Font shape `T1/txtt/m/sl' tried instead on input line 419. - [6] [7] - -File: ESP-IDF_Robot_schematic.png Graphic file (type png) - -Package pdftex.def Info: ESP-IDF_Robot_schematic.png used on input line 488. -(pdftex.def) Requested size: 469.74393pt x 362.98395pt. - [8 <./ESP-IDF_Robot_schematic.png>] -Chapter 3. - [9 - -] -LaTeX Font Info: Trying to load font information for TS1+qtm on input line 5 -60. - (/usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd -File: ts1qtm.fd 2009/09/25 v1.2 font definition file for TS1/qtm -) [10{/usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ts1.enc}] -Chapter 4. - [11 - -] [12] -Chapter 5. - [13 - -] [14] -Chapter 6. -File: ESP-IDF_Robot.jpg Graphic file (type jpg) - -Package pdftex.def Info: ESP-IDF_Robot.jpg used on input line 764. -(pdftex.def) Requested size: 469.73097pt x 329.24193pt. - -File: chassi-progress_002d.jpg Graphic file (type jpg) - -Package pdftex.def Info: chassi-progress_002d.jpg used on input line 773. -(pdftex.def) Requested size: 469.71024pt x 206.6725pt. - -File: chassi-progress_003a.jpg Graphic file (type jpg) - -Package pdftex.def Info: chassi-progress_003a.jpg used on input line 783. -(pdftex.def) Requested size: 469.71024pt x 206.6725pt. - -File: motors-wiring-harness-001.jpg Graphic file (type jpg) - -Package pdftex.def Info: motors-wiring-harness-001.jpg used on input line 793. - -(pdftex.def) Requested size: 469.71024pt x 206.6725pt. - [15 - -] [16 <./chassi-progress_002d.jpg> <./chassi-progress_003a.jpg>] [17 <./motors- -wiring-harness-001.jpg>] [18 - -] -Chapter 7. - (./byterider.ind) [19] (./byterider.aux) - *********** -LaTeX2e <2023-11-01> patch level 1 -L3 programming layer <2024-01-22> - *********** - -LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. - - -Package rerunfilecheck Warning: File `byterider.out' has changed. -(rerunfilecheck) Rerun to get outlines right -(rerunfilecheck) or use package `bookmark'. - -Package rerunfilecheck Info: Checksums for `byterider.out': -(rerunfilecheck) Before: BA10C88BFEF44AA801FEFDF165A68594;1154 -(rerunfilecheck) After: D3FF78E7A4A15D308747EEAD6CE779E5;3842. - ) + Here is how much of TeX's memory you used: - 16972 strings out of 476106 - 290050 string characters out of 5793932 - 2016975 words of memory out of 5000000 - 38544 multiletter control sequences out of 15000+600000 - 612195 words of font info for 78 fonts, out of 8000000 for 9000 + 16805 strings out of 476106 + 285632 string characters out of 5793932 + 1935975 words of memory out of 5000000 + 38415 multiletter control sequences out of 15000+600000 + 607928 words of font info for 73 fonts, out of 8000000 for 9000 60 hyphenation exceptions out of 8191 - 72i,12n,83p,1198b,661s stack positions out of 10000i,1000n,20000p,200000b,200000s - -pdfTeX warning (dest): name{section.3.4} has been referenced but does not exist -, replaced by a fixed one - - -pdfTeX warning (dest): name{section.3.3} has been referenced but does not exist -, replaced by a fixed one - - -pdfTeX warning (dest): name{section.3.2} has been referenced but does not exist -, replaced by a fixed one - - -Output written on byterider.pdf (23 pages, 8892893 bytes). -PDF statistics: - 260 PDF objects out of 1000 (max. 8388607) - 209 compressed objects within 3 object streams - 60 named destinations out of 1000 (max. 500000) - 118 words of extra memory for PDF output out of 10000 (max. 10000000) - + 72i,11n,83p,1198b,625s stack positions out of 10000i,1000n,20000p,200000b,200000s +! ==> Fatal error occurred, no output PDF file produced! diff --git a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.out b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.out index 18ceda097..40ea8d78a 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.out +++ b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.out @@ -2,26 +2,5 @@ \BOOKMARK [1][-]{section.1.1}{\376\377\000A\000B\000S\000T\000R\000A\000C\000T}{chapter.1}% 2 \BOOKMARK [0][-]{chapter.2}{\376\377\000H\000O\000W\000\040\000D\000O\000E\000S\000\040\000I\000T\000\040\000W\000O\000R\000K\000?}{}% 3 \BOOKMARK [1][-]{section.2.1}{\376\377\000R\000e\000s\000e\000r\000v\000e\000d\000\040\000P\000i\000n\000s\000\040\000\046\000\040\000G\000P\000I\000O\000s}{chapter.2}% 4 -\BOOKMARK [2][-]{subsection.2.1.1}{\376\377\000x\000-\000\040\000a\000n\000d\000\040\000y\000-\000\040\000a\000x\000i\000s}{section.2.1}% 5 -\BOOKMARK [2][-]{subsection.2.1.2}{\376\377\000D\000i\000r\000e\000c\000t\000i\000o\000n\000\040\000a\000n\000d\000\040\000S\000p\000e\000e\000d}{section.2.1}% 6 -\BOOKMARK [1][-]{section.2.2}{\376\377\000F\000u\000s\000i\000o\000n\000\040\000o\000f\000\040\000S\000o\000f\000t\000w\000a\000r\000e\000\040\000w\000i\000t\000h\000\040\000H\000a\000r\000d\000w\000a\000r\000e}{chapter.2}% 7 -\BOOKMARK [1][-]{section.2.3}{\376\377\000S\000c\000h\000e\000m\000a\000t\000i\000c}{chapter.2}% 8 -\BOOKMARK [0][-]{chapter.3}{\376\377\000D\000A\000T\000A\000\040\000S\000T\000R\000U\000C\000T\000S}{}% 9 -\BOOKMARK [1][-]{section.3.1}{\376\377\000D\000a\000t\000a\000\040\000P\000a\000y\000l\000o\000a\000d}{chapter.3}% 10 -\BOOKMARK [2][-]{subsection.3.1.1}{\376\377\000W\000h\000y\000\040\000u\000s\000e\000\040\000\137\000\137\000a\000t\000t\000r\000i\000b\000u\000t\000e\000\050\000\050\000p\000a\000c\000k\000e\000d\000\051\000\051\000?}{section.3.1}% 11 -\BOOKMARK [0][-]{chapter.4}{\376\377\000T\000R\000A\000N\000S\000M\000I\000T\000T\000E\000R}{}% 12 -\BOOKMARK [1][-]{section.4.1}{\376\377\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000V\000a\000r\000i\000a\000b\000l\000e\000s}{chapter.4}% 13 -\BOOKMARK [1][-]{section.4.2}{\376\377\000R\000e\000a\000d\000i\000n\000g\000\040\000J\000o\000y\000s\000t\000i\000c\000k\000\040\000x\000-\000\040\000a\000n\000d\000\040\000y\000-\000\040\000A\000x\000i\000s\000\040\000V\000a\000l\000u\000e\000s}{chapter.4}% 14 -\BOOKMARK [1][-]{section.4.3}{\376\377\000S\000e\000n\000d\000i\000n\000g\000\040\000\046\000\040\000E\000c\000a\000p\000s\000u\000l\000a\000t\000i\000n\000g\000\040\000D\000a\000t\000a}{chapter.4}% 15 -\BOOKMARK [1][-]{section.4.4}{\376\377\000M\000a\000i\000n\000\040\000F\000u\000n\000c\000t\000i\000o\000n}{chapter.4}% 16 -\BOOKMARK [0][-]{chapter.5}{\376\377\000R\000E\000C\000E\000I\000V\000E\000R}{}% 17 -\BOOKMARK [1][-]{section.5.1}{\376\377\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000V\000a\000r\000i\000a\000b\000l\000e\000s}{chapter.5}% 18 -\BOOKMARK [1][-]{section.5.2}{\376\377\000R\000e\000c\000e\000i\000v\000i\000n\000g\000\040\000\046\000\040\000E\000x\000t\000r\000a\000c\000t\000i\000n\000g\000\040\000D\000a\000t\000a}{chapter.5}% 19 -\BOOKMARK [1][-]{section.5.3}{\376\377\000M\000a\000i\000n\000\040\000F\000u\000n\000c\000t\000i\000o\000n}{chapter.5}% 20 -\BOOKMARK [0][-]{chapter.6}{\376\377\000W\000O\000R\000K\000-\000I\000N\000-\000P\000R\000O\000G\000R\000E\000S\000S\000\040\000W\000A\000L\000K\000\040\000T\000H\000R\000O\000U\000G\000H}{}% 21 -\BOOKMARK [1][-]{section.6.1}{\376\377\000F\000i\000n\000i\000s\000h\000e\000d\000\040\000W\000o\000r\000k}{chapter.6}% 22 -\BOOKMARK [1][-]{section.6.2}{\376\377\000C\000h\000a\000s\000s\000i\000s}{chapter.6}% 23 -\BOOKMARK [1][-]{section.6.3}{\376\377\000W\000i\000r\000i\000n\000g}{chapter.6}% 24 -\BOOKMARK [1][-]{section.6.4}{\376\377\000M\000o\000t\000o\000r\000\040\000W\000i\000r\000e\000s\000\040\000H\000a\000r\000n\000e\000s\000s}{chapter.6}% 25 -\BOOKMARK [0][-]{chapter.7}{\376\377\000R\000E\000F\000E\000R\000E\000N\000C\000E\000S}{}% 26 -\BOOKMARK [1][-]{section.7.1}{\376\377\000G\000i\000t\000H\000u\000b}{chapter.7}% 27 +\BOOKMARK [2][-]{subsection.2.1.1}{\376\377\000R\000e\000a\000d\000i\000n\000g\000\040\000t\000h\000e\000\040\000J\000o\000y\000s\000t\000i\000c\000k\000\040\000x\000-\000\040\000a\000n\000d\000\040\000y\000-\000\040\000a\000x\000i\000s}{section.2.1}% 5 +\BOOKMARK [2][-]{subsection.2.1.2}{\376\377\000C\000o\000n\000t\000r\000o\000l\000l\000i\000n\000g\000\040\000t\000h\000e\000\040\000D\000i\000r\000e\000c\000t\000i\000o\000n\000\040\000a\000n\000d\000\040\000S\000p\000e\000e\000d}{section.2.1}% 6 diff --git a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.tex b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.tex index 47e3d4d35..d9380934d 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.tex +++ b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.tex @@ -141,18 +141,66 @@ The following table summarizes GPIOs and pins reserved for operations purposes. The GPIO numbers correspond to those on the ESP32\sphinxhyphen{}C3 WROOM microcontroller. The Pin number corresponds to the pin on the Breadboard and Power adapter development board. -\subsection{x\sphinxhyphen{} and y\sphinxhyphen{} axis} -\label{\detokenize{overview:x-and-y-axis}} +\subsection{Reading the Joystick x\sphinxhyphen{} and y\sphinxhyphen{} axis} +\label{\detokenize{overview:reading-the-joystick-x-and-y-axis}} \sphinxAtStartPar -The \sphinxstylestrong{GPIO0} and \sphinxstylestrong{GPIO1} assigned to measuring the voltage of x\sphinxhyphen{} and y\sphinxhyphen{} axis of the Joystick. Lastly, there is a group of GPIO pairs responsible for PWM for DC motors. +To determine the position of the Joystick, the BitRider RC car uses ADC to measure voltage on two GPIOs connected to the joystic +x\sphinxhyphen{} and y\sphinxhyphen{} axis potentionometers (\sphinxstylestrong{GPIO0} and \sphinxstylestrong{GPIO1}). -\subsection{Direction and Speed} -\label{\detokenize{overview:direction-and-speed}} +\subsection{Controlling the Direction and Speed} +\label{\detokenize{overview:controlling-the-direction-and-speed}} \sphinxAtStartPar -The pairs of DC motors on the left side are wired to the dedicated PWM channels. This means that \sphinxstyleemphasis{ESP32\sphinxhyphen{}C3 Breadboard DevBoard} can control rotation speed and direction of DC motors in pairs only (i.e. left and right side). -Consequently, only four PWM channels are sufficient for controlling the direction of the RC car. -Based on this constraint, the RC car can only move front, back, and turn/rotate left and right. Any other movements are not possible (i.e. diagonal or sideways). +To set any desired speed of BiteRider RC car, the \sphinxstyleemphasis{ESP32\sphinxhyphen{}C3 Breadboard Adapter DevBoard} uses PWM to control the rotation speed +of DR motors. Similarly, to set the direction of the RC car, the rotation speed of corresponding DC motors is changed as required. + +\sphinxAtStartPar +Due to the design and limited number of available GPIOs, the \sphinxstyleemphasis{ESP32\sphinxhyphen{}C3 Breadboard DevBoard} can control rotation speed and direction +of DC motors in pairs only (i.e. left and right side). Consequently, this means that the four PWM channels used for controlling the +direction of the RC car. + +\sphinxAtStartPar +Based on this constraint, the RC car can only move front, back, and turn/rotate left and right. Any other movements are not +possible (i.e. diagonal or sideways). + + +\begin{savenotes}\sphinxattablestart +\sphinxthistablewithglobalstyle +\centering +\begin{tabulary}{\linewidth}[t]{TT} +\sphinxtoprule +\sphinxtableatstartofbodyhook +\sphinxAtStartPar +PWM of DC Motors +& +\sphinxAtStartPar +Direction +\\ +\sphinxhline +\sphinxAtStartPar +PWM(left) = PWM(right) +& +\sphinxAtStartPar +Straight +\\ +\sphinxhline +\sphinxAtStartPar +PWM(left) \textgreater{} PWM(right) +& +\sphinxAtStartPar +Left +\\ +\sphinxhline +\sphinxAtStartPar +PWM(left) \textless{} PWM(right) +& +\sphinxAtStartPar +Right +\\ +\sphinxbottomrule +\end{tabulary} +\sphinxtableafterendhook\par +\sphinxattableend\end{savenotes} \begin{sphinxadmonition}{note}{What is PWM?} @@ -172,6 +220,12 @@ Changing PWM on each channel determines the speed and direction of the RC car. \sphinxAtStartPar The table below summarizes the GPIO pins used for PWM to control the direction of the DC motors in the remote\sphinxhyphen{}controlled car. +\begin{quote}\begin{description} +\sphinxlineitem{class} +\sphinxAtStartPar +break + +\end{description}\end{quote} \begin{savenotes}\sphinxattablestart diff --git a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.toc b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.toc index 306d151c1..e69de29bb 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.toc +++ b/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.toc @@ -1,28 +0,0 @@ -\babel@toc {english}{}\relax -\contentsline {chapter}{\numberline {1}OVERVIEW}{3}{chapter.1}% -\contentsline {section}{\numberline {1.1}ABSTRACT}{3}{section.1.1}% -\contentsline {chapter}{\numberline {2}HOW DOES IT WORK?}{5}{chapter.2}% -\contentsline {section}{\numberline {2.1}Reserved Pins \& GPIOs}{5}{section.2.1}% -\contentsline {subsection}{\numberline {2.1.1}x\sphinxhyphen {} and y\sphinxhyphen {} axis}{5}{subsection.2.1.1}% -\contentsline {subsection}{\numberline {2.1.2}Direction and Speed}{5}{subsection.2.1.2}% -\contentsline {section}{\numberline {2.2}Fusion of Software with Hardware}{6}{section.2.2}% -\contentsline {section}{\numberline {2.3}Schematic}{8}{section.2.3}% -\contentsline {chapter}{\numberline {3}DATA STRUCTS}{9}{chapter.3}% -\contentsline {section}{\numberline {3.1}Data Payload}{9}{section.3.1}% -\contentsline {subsection}{\numberline {3.1.1}Why use \_\_attribute((packed))?}{10}{subsection.3.1.1}% -\contentsline {chapter}{\numberline {4}TRANSMITTER}{11}{chapter.4}% -\contentsline {section}{\numberline {4.1}Configuration Variables}{11}{section.4.1}% -\contentsline {section}{\numberline {4.2}Reading Joystick x\sphinxhyphen {} and y\sphinxhyphen {} Axis Values}{11}{section.4.2}% -\contentsline {section}{\numberline {4.3}Sending \& Ecapsulating Data}{11}{section.4.3}% -\contentsline {section}{\numberline {4.4}Main Function}{12}{section.4.4}% -\contentsline {chapter}{\numberline {5}RECEIVER}{13}{chapter.5}% -\contentsline {section}{\numberline {5.1}Configuration Variables}{13}{section.5.1}% -\contentsline {section}{\numberline {5.2}Receiving \& Extracting Data}{13}{section.5.2}% -\contentsline {section}{\numberline {5.3}Main Function}{14}{section.5.3}% -\contentsline {chapter}{\numberline {6}WORK\sphinxhyphen {}IN\sphinxhyphen {}PROGRESS WALK THROUGH}{15}{chapter.6}% -\contentsline {section}{\numberline {6.1}Finished Work}{15}{section.6.1}% -\contentsline {section}{\numberline {6.2}Chassis}{15}{section.6.2}% -\contentsline {section}{\numberline {6.3}Wiring}{15}{section.6.3}% -\contentsline {section}{\numberline {6.4}Motor Wires Harness}{15}{section.6.4}% -\contentsline {chapter}{\numberline {7}REFERENCES}{19}{chapter.7}% -\contentsline {section}{\numberline {7.1}GitHub}{19}{section.7.1}% diff --git a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.pdf b/ESP-IDF_Robot/tutorial/docs/build/rinoh/byterider.pdf similarity index 82% rename from ESP-IDF_Robot/tutorial/docs/build/latex/byterider.pdf rename to ESP-IDF_Robot/tutorial/docs/build/rinoh/byterider.pdf index f0a3aba74..923918fb8 100644 Binary files a/ESP-IDF_Robot/tutorial/docs/build/latex/byterider.pdf and b/ESP-IDF_Robot/tutorial/docs/build/rinoh/byterider.pdf differ diff --git a/ESP-IDF_Robot/tutorial/docs/build/rinoh/byterider.rtc b/ESP-IDF_Robot/tutorial/docs/build/rinoh/byterider.rtc new file mode 100644 index 000000000..cb7e4cbd7 Binary files /dev/null and b/ESP-IDF_Robot/tutorial/docs/build/rinoh/byterider.rtc differ diff --git a/ESP-IDF_Robot/tutorial/docs/build/rinoh/byterider.stylelog b/ESP-IDF_Robot/tutorial/docs/build/rinoh/byterider.stylelog new file mode 100644 index 000000000..5b65cc4ca --- /dev/null +++ b/ESP-IDF_Robot/tutorial/docs/build/rinoh/byterider.stylelog @@ -0,0 +1,8463 @@ +---------------------------------- page 1 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### DownExpandingContainer('title') + StaticGroupedFlowables() + Paragraph('Byte Rider', style='title page title') + > (0,0,1,0,2) title page title [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + SingleStyledText('Byte Rider') + Paragraph('Release 06-2025', style='title page subtitle') + > (0,0,1,0,2) title page subtitle [Sphinx] > title page title + (0,0,0,0,2) body [Sphinx] > default + SingleStyledText('Release 06-2025') + Paragraph('Alexander B', style='title page author') + > (0,0,1,0,2) title page author [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + SingleStyledText('Alexander B') + Paragraph('Jul 19, 2025', style='title page date') + > (0,0,1,0,2) title page date [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + SingleStyledText('Jul 19, 2025') +---------------------------------- page i ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### FlowablesContainer('chapter title') + Paragraph('Table of Contents', style='front matter section title') + > (0,0,1,0,2) front matter section title [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + Field('Table of Contents') + StringField('Table of Contents') + SingleStyledText('Table of Contents') +#### ChainedContainer('column1') + StaticGroupedFlowables() + TableOfContentsSection(style='table of contents') + > (0,0,1,0,1) table of contents section [Sphinx] > DEFAULT + (0,0,0,1,1) chapter [Sphinx] > DEFAULT + TableOfContents() table of contents + > (0,0,0,0,2) table of contents [Sphinx] > default + TableOfContentsEntry(' List of Figures iii') + > (0,0,0,1,2) toc level 1 [Sphinx] > table of contents + ReferenceField('') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('') + Tab(' ') + ReferenceField('List of Figures') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + StringField('List of Figures') + SingleStyledText('List of Figures') + Tab(' ') + ReferenceField('iii') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('iii') + TableOfContentsEntry('1 OVERVIEW 3') + > (0,0,0,1,2) toc level 1 [Sphinx] > table of contents + ReferenceField('1') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('1') + Tab(' ') + ReferenceField('OVERVIEW') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('OVERVIEW') + MixedStyledText('OVERVIEW') + SingleStyledText('OVERVIEW') + Tab(' ') + ReferenceField('3') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('3') + TableOfContentsEntry('1.1 ABSTRACT 3') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('1.1') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('1.1') + Tab(' ') + ReferenceField('ABSTRACT') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('ABSTRACT') + MixedStyledText('ABSTRACT') + SingleStyledText('ABSTRACT') + Tab(' ') + ReferenceField('3') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('3') + TableOfContentsEntry('2 HOW DOES IT WORK? 5') + > (0,0,0,1,2) toc level 1 [Sphinx] > table of contents + ReferenceField('2') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('2') + Tab(' ') + ReferenceField('HOW DOES IT WORK?') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('HOW DOES IT WORK?') + MixedStyledText('HOW DOES IT WORK?') + SingleStyledText('HOW DOES IT WORK?') + Tab(' ') + ReferenceField('5') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('5') + TableOfContentsEntry('2.1 Reserved Pins & GPIOs 5') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('2.1') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('2.1') + Tab(' ') + ReferenceField('Reserved Pins & GPIOs') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Reserved Pins & GPIOs') + MixedStyledText('Reserved Pins & GPIOs') + SingleStyledText('Reserved Pins & GPIOs') + Tab(' ') + ReferenceField('5') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('5') + TableOfContentsEntry('2.2 Fusion of Software with Hard...') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('2.2') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('2.2') + Tab(' ') + ReferenceField('Fusion of Software with Hardware') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Fusion of Software with Hardware') + MixedStyledText('Fusion of Software with Hardware') + SingleStyledText('Fusion of Software with Hardware') + Tab(' ') + ReferenceField('8') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('8') + TableOfContentsEntry('2.3 Schematic 9') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('2.3') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('2.3') + Tab(' ') + ReferenceField('Schematic') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Schematic') + MixedStyledText('Schematic') + SingleStyledText('Schematic') + Tab(' ') + ReferenceField('9') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('9') + TableOfContentsEntry('3 DATA STRUCTS 11') + > (0,0,0,1,2) toc level 1 [Sphinx] > table of contents + ReferenceField('3') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('3') + Tab(' ') + ReferenceField('DATA STRUCTS') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('DATA STRUCTS') + MixedStyledText('DATA STRUCTS') + SingleStyledText('DATA STRUCTS') + Tab(' ') + ReferenceField('11') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('11') + TableOfContentsEntry('3.1 Data Payload 11') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('3.1') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('3.1') + Tab(' ') + ReferenceField('Data Payload') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Data Payload') + MixedStyledText('Data Payload') + SingleStyledText('Data Payload') + Tab(' ') + ReferenceField('11') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('11') + TableOfContentsEntry('4 TRANSMITTER 13') + > (0,0,0,1,2) toc level 1 [Sphinx] > table of contents + ReferenceField('4') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('4') + Tab(' ') + ReferenceField('TRANSMITTER') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('TRANSMITTER') + MixedStyledText('TRANSMITTER') + SingleStyledText('TRANSMITTER') + Tab(' ') + ReferenceField('13') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('13') + TableOfContentsEntry('4.1 Configuration Variables 13') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('4.1') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('4.1') + Tab(' ') + ReferenceField('Configuration Variables') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Configuration Variables') + MixedStyledText('Configuration Variables') + SingleStyledText('Configuration Variables') + Tab(' ') + ReferenceField('13') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('13') + TableOfContentsEntry('4.2 Reading Joystick x- and y- A...') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('4.2') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('4.2') + Tab(' ') + ReferenceField('Reading Joystick x- and y- Axis ...') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Reading Joystick x- and y- Axis ...') + MixedStyledText('Reading Joystick x- and y- Axis ...') + SingleStyledText('Reading Joystick x- and y- Axis ...') + Tab(' ') + ReferenceField('13') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('13') + TableOfContentsEntry('4.3 Sending & Ecapsulating Data ...') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('4.3') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('4.3') + Tab(' ') + ReferenceField('Sending & Ecapsulating Data') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Sending & Ecapsulating Data') + MixedStyledText('Sending & Ecapsulating Data') + SingleStyledText('Sending & Ecapsulating Data') + Tab(' ') + ReferenceField('13') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('13') + TableOfContentsEntry('4.4 Main Function 14') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('4.4') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('4.4') + Tab(' ') + ReferenceField('Main Function') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Main Function') + MixedStyledText('Main Function') + SingleStyledText('Main Function') + Tab(' ') + ReferenceField('14') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('14') + TableOfContentsEntry('5 RECEIVER 15') + > (0,0,0,1,2) toc level 1 [Sphinx] > table of contents + ReferenceField('5') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('5') + Tab(' ') + ReferenceField('RECEIVER') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('RECEIVER') + MixedStyledText('RECEIVER') + SingleStyledText('RECEIVER') + Tab(' ') + ReferenceField('15') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('15') + TableOfContentsEntry('5.1 Configuration Variables 15') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('5.1') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('5.1') + Tab(' ') + ReferenceField('Configuration Variables') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Configuration Variables') + MixedStyledText('Configuration Variables') + SingleStyledText('Configuration Variables') + Tab(' ') + ReferenceField('15') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('15') + TableOfContentsEntry('5.2 Receiving & Extracting Data ...') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('5.2') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('5.2') + Tab(' ') + ReferenceField('Receiving & Extracting Data') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Receiving & Extracting Data') + MixedStyledText('Receiving & Extracting Data') + SingleStyledText('Receiving & Extracting Data') + Tab(' ') + ReferenceField('15') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('15') + TableOfContentsEntry('5.3 Main Function 16') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('5.3') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('5.3') + Tab(' ') + ReferenceField('Main Function') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Main Function') + MixedStyledText('Main Function') + SingleStyledText('Main Function') + Tab(' ') + ReferenceField('16') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('16') + TableOfContentsEntry('6 WORK-IN-PROGRESS WALK THROUGH ...') + > (0,0,0,1,2) toc level 1 [Sphinx] > table of contents + ReferenceField('6') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('6') + Tab(' ') + ReferenceField('WORK-IN-PROGRESS WALK THROUGH') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('WORK-IN-PROGRESS WALK THROUGH') + MixedStyledText('WORK-IN-PROGRESS WALK THROUGH') + SingleStyledText('WORK-IN-PROGRESS WALK THROUGH') + Tab(' ') + ReferenceField('17') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('17') + TableOfContentsEntry('6.1 Finished Work 17') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('6.1') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('6.1') + Tab(' ') + ReferenceField('Finished Work') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Finished Work') + MixedStyledText('Finished Work') + SingleStyledText('Finished Work') + Tab(' ') + ReferenceField('17') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('17') + TableOfContentsEntry('6.2 Chassis 18') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('6.2') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('6.2') + Tab(' ') + ReferenceField('Chassis') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Chassis') + MixedStyledText('Chassis') + SingleStyledText('Chassis') + Tab(' ') + ReferenceField('18') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('18') + TableOfContentsEntry('6.3 Wiring 19') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('6.3') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('6.3') + Tab(' ') + ReferenceField('Wiring') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Wiring') + MixedStyledText('Wiring') + SingleStyledText('Wiring') + Tab(' ') + ReferenceField('19') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('19') + TableOfContentsEntry('6.4 Motor Wires Harness 20') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('6.4') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('6.4') + Tab(' ') + ReferenceField('Motor Wires Harness') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Motor Wires Harness') + MixedStyledText('Motor Wires Harness') + SingleStyledText('Motor Wires Harness') + Tab(' ') + ReferenceField('20') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('20') + TableOfContentsEntry('7 REFERENCES 21') + > (0,0,0,1,2) toc level 1 [Sphinx] > table of contents + ReferenceField('7') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('7') + Tab(' ') + ReferenceField('REFERENCES') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('REFERENCES') + MixedStyledText('REFERENCES') + SingleStyledText('REFERENCES') + Tab(' ') + ReferenceField('21') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('21') + TableOfContentsEntry('7.1 GitHub 21') + > (0,0,0,1,2) toc level 2 [Sphinx] > table of contents + ReferenceField('7.1') + > (0,0,0,1,4) toc entry number reference field [Sphinx] > linked reference + (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('7.1') + Tab(' ') + ReferenceField('GitHub') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('GitHub') + MixedStyledText('GitHub') + SingleStyledText('GitHub') + Tab(' ') + ReferenceField('21') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('21') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' i') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' i') + MixedStyledText(' i') + Tab(' ') + Tab(' ') + Field('i') + SingleStyledText('i') +---------------------------------- page ii ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('ii') + > (0,0,0,0,2) footer [Sphinx] > header_footer + Field('ii') + SingleStyledText('ii') +---------------------------------- page iii ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### FlowablesContainer('chapter title') + Paragraph('List of Figures', style='front matter section title') + > (0,0,1,0,2) front matter section title [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + Field('List of Figures') + StringField('List of Figures') + SingleStyledText('List of Figures') +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + ListOfFiguresSection(style='list of chapter') + > (0,0,0,1,1) chapter [Sphinx] > DEFAULT + (0,0,0,0,2) list of figures section [Sphinx] > table of contents section + ListOfFigures() List of figures + > (0,0,0,0,2) list of figures [Sphinx] > table of contents + ListOfEntry('Figure 2.1: DC Motor PWM duty cy...') + > (0,0,0,0,4) list of figures entry [Sphinx] > list of figures + ReferenceField('Figure 2.1') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Figure 2.1') + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + SingleStyledText('2.1') + SingleStyledText(': ') + ReferenceField('DC Motor PWM duty cycle 0%') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('DC Motor PWM duty cycle 0%') + MixedStyledText('DC Motor PWM duty cycle 0%') + SingleStyledText('DC Motor PWM duty cycle 0%') + Tab(' ') + ReferenceField('6') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('6') + ListOfEntry('Figure 2.2: DC Motor PWM duty cy...') + > (0,0,0,0,4) list of figures entry [Sphinx] > list of figures + ReferenceField('Figure 2.2') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Figure 2.2') + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + SingleStyledText('2.2') + SingleStyledText(': ') + ReferenceField('DC Motor PWM duty cycle 47.6%') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('DC Motor PWM duty cycle 47.6%') + MixedStyledText('DC Motor PWM duty cycle 47.6%') + SingleStyledText('DC Motor PWM duty cycle 47.6%') + Tab(' ') + ReferenceField('7') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('7') + ListOfEntry('Figure 2.3: DC Motor PWM duty cy...') + > (0,0,0,0,4) list of figures entry [Sphinx] > list of figures + ReferenceField('Figure 2.3') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Figure 2.3') + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + SingleStyledText('2.3') + SingleStyledText(': ') + ReferenceField('DC Motor PWM duty cycle 90.8%') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('DC Motor PWM duty cycle 90.8%') + MixedStyledText('DC Motor PWM duty cycle 90.8%') + SingleStyledText('DC Motor PWM duty cycle 90.8%') + Tab(' ') + ReferenceField('7') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('7') + ListOfEntry('Figure 6.1: Completed chassis wi...') + > (0,0,0,0,4) list of figures entry [Sphinx] > list of figures + ReferenceField('Figure 6.1') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Figure 6.1') + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + SingleStyledText('6.1') + SingleStyledText(': ') + ReferenceField('Completed chassis with only DC m...') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Completed chassis with only DC m...') + MixedStyledText('Completed chassis with only DC m...') + SingleStyledText('Completed chassis with only DC m...') + Tab(' ') + ReferenceField('18') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('18') + ListOfEntry('Figure 6.2: Completed wiring. 19') + > (0,0,0,0,4) list of figures entry [Sphinx] > list of figures + ReferenceField('Figure 6.2') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Figure 6.2') + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + SingleStyledText('6.2') + SingleStyledText(': ') + ReferenceField('Completed wiring.') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Completed wiring.') + MixedStyledText('Completed wiring.') + SingleStyledText('Completed wiring.') + Tab(' ') + ReferenceField('19') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('19') + ListOfEntry('Figure 6.3: DC Motors wires secu...') + > (0,0,0,0,4) list of figures entry [Sphinx] > list of figures + ReferenceField('Figure 6.3') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('Figure 6.3') + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + SingleStyledText('6.3') + SingleStyledText(': ') + ReferenceField('DC Motors wires secured inside h...') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + MixedStyledText('DC Motors wires secured inside h...') + MixedStyledText('DC Motors wires secured inside h...') + SingleStyledText('DC Motors wires secured inside h...') + Tab(' ') + ReferenceField('20') + > (0,0,0,0,1) linked reference [Sphinx] > DEFAULT + SingleStyledText('20') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' iii') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' iii') + MixedStyledText(' iii') + Tab(' ') + Tab(' ') + Field('iii') + SingleStyledText('iii') +---------------------------------- page 1 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### ChainedContainer('column1') + StaticGroupedFlowables() + DocumentTree() index.rst + Image('_static/ESP-IDF_Robot.jpg') index.rst:9 + > (0,0,0,0,2) image [Sphinx] > DEFAULT +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' 1') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' 1') + MixedStyledText(' 1') + Tab(' ') + Tab(' ') + Field('1') + SingleStyledText('1') +---------------------------------- page 2 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header('Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText('Byte Rider, Release 06-2025') + MixedStyledText('Byte Rider, Release 06-2025') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('2 Chapter ​. ​') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('2 Chapter ​. ​') + MixedStyledText('2 Chapter ​. ​') + Field('2') + SingleStyledText('2') + Tab(' ') + Tab(' ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('​') + SingleStyledText('​') + SingleStyledText('. ') + Field('​') + SingleStyledText('​') +---------------------------------- page 3 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### FlowablesContainer('chapter title') + Paragraph('Chapter 1', style='body matter chapter label') + > (0,0,1,0,2) body matter chapter label [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Chapter 1') + MixedStyledText('Chapter 1') + MixedStyledText('Chapter ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('1', style='number') + > (0,0,2,0,3) body matter chapter number [Sphinx] > DEFAULT + SingleStyledText('1') + Paragraph('OVERVIEW', style='body matter chapter title') + > (0,0,1,0,2) body matter chapter title [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + Field('OVERVIEW') + MixedStyledText('OVERVIEW') + MixedStyledText('OVERVIEW') + SingleStyledText('OVERVIEW') +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst + StaticGroupedFlowables() index.rst + StaticGroupedFlowables(id='%intro') index.rst + Section(id='%intro#overview') intro.rst:2
+ > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Paragraph('At the heart of this project is ...') intro.rst:4 + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + SingleStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + SingleStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + SingleStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + SingleStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + SingleStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + SingleStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + SingleStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + MixedStyledText('At the heart of this project is ...') + SingleStyledText('At the heart of this project is ...') + Paragraph('An ESP-NOW-based remote controll...') intro.rst:11 + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + SingleStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + SingleStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + SingleStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + SingleStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + SingleStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + SingleStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + MixedStyledText('An ESP-NOW-based remote controll...') + SingleStyledText('An ESP-NOW-based remote controll...') + Section(id='%intro#abstract') intro.rst:18
+ Heading('1.1 ABSTRACT') intro.rst:18 + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('1.1 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('1.1') + SingleStyledText(' ') + MixedStyledText('ABSTRACT') + MixedStyledText('ABSTRACT') + SingleStyledText('ABSTRACT') + Paragraph('To enable real-time remote opera...') intro.rst:20 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('To enable real-time remote opera...') + MixedStyledText('To enable real-time remote opera...') + SingleStyledText('To enable real-time remote opera...') + MixedStyledText('To enable real-time remote opera...') + MixedStyledText('To enable real-time remote opera...') + SingleStyledText('To enable real-time remote opera...') + MixedStyledText('To enable real-time remote opera...') + MixedStyledText('To enable real-time remote opera...') + SingleStyledText('To enable real-time remote opera...') + MixedStyledText('To enable real-time remote opera...') + MixedStyledText('To enable real-time remote opera...') + SingleStyledText('To enable real-time remote opera...') + MixedStyledText('To enable real-time remote opera...') + MixedStyledText('To enable real-time remote opera...') + SingleStyledText('To enable real-time remote opera...') + Paragraph('On the transmitter side, the joy...') intro.rst:24 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('On the transmitter side, the joy...') + MixedStyledText('On the transmitter side, the joy...') + SingleStyledText('On the transmitter side, the joy...') + MixedStyledText('On the transmitter side, the joy...') + MixedStyledText('On the transmitter side, the joy...') + SingleStyledText('On the transmitter side, the joy...') + MixedStyledText('On the transmitter side, the joy...') + MixedStyledText('On the transmitter side, the joy...') + SingleStyledText('On the transmitter side, the joy...') + Paragraph('The receiver module listens for ...') intro.rst:27 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The receiver module listens for ...') + MixedStyledText('The receiver module listens for ...') + SingleStyledText('The receiver module listens for ...') + MixedStyledText('The receiver module listens for ...') + MixedStyledText('The receiver module listens for ...') + SingleStyledText('The receiver module listens for ...') + MixedStyledText('The receiver module listens for ...') + MixedStyledText('The receiver module listens for ...') + SingleStyledText('The receiver module listens for ...') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' 3') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' 3') + MixedStyledText(' 3') + Tab(' ') + Tab(' ') + Field('3') + SingleStyledText('3') +---------------------------------- page 4 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header('Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText('Byte Rider, Release 06-2025') + MixedStyledText('Byte Rider, Release 06-2025') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('4 Chapter 1. OVERVIEW') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('4 Chapter 1. OVERVIEW') + MixedStyledText('4 Chapter 1. OVERVIEW') + Field('4') + SingleStyledText('4') + Tab(' ') + Tab(' ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('1') + SingleStyledText('1') + SingleStyledText('. ') + Field('OVERVIEW') + MixedStyledText('OVERVIEW') + MixedStyledText('OVERVIEW') + SingleStyledText('OVERVIEW') +---------------------------------- page 5 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### FlowablesContainer('chapter title') + Paragraph('Chapter 2', style='body matter chapter label') + > (0,0,1,0,2) body matter chapter label [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Chapter 2') + MixedStyledText('Chapter 2') + MixedStyledText('Chapter ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('2', style='number') + > (0,0,2,0,3) body matter chapter number [Sphinx] > DEFAULT + SingleStyledText('2') + Paragraph('HOW DOES IT WORK?', style='body matter chapter title') + > (0,0,1,0,2) body matter chapter title [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + Field('HOW DOES IT WORK?') + MixedStyledText('HOW DOES IT WORK?') + MixedStyledText('HOW DOES IT WORK?') + SingleStyledText('HOW DOES IT WORK?') +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + StaticGroupedFlowables(id='%overview') index.rst <start_of_file> + Section(id='%overview#how-does-it-work') overview.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Paragraph('The BitByteRider RC car is power...') overview.rst:4 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The BitByteRider RC car is power...') + MixedStyledText('The BitByteRider RC car is power...') + SingleStyledText('The BitByteRider RC car is power...') + MixedStyledText('The BitByteRider RC car is power...') + MixedStyledText('The BitByteRider RC car is power...') + SingleStyledText('The BitByteRider RC car is power...') + MixedStyledText('GitHub', style='external link') <reference> + > (0,0,1,0,1) external hyperlink [Sphinx] > DEFAULT + SingleStyledText('GitHub') + SingleStyledText(': ') + MixedStyledText('https://github.com/alexandrebobk...', style='external link') <reference> + > (0,0,1,0,1) external hyperlink [Sphinx] > DEFAULT + SingleStyledText('https://github.com/alexandrebobk...') + MixedStyledText('The BitByteRider RC car is power...') + MixedStyledText('The BitByteRider RC car is power...') + SingleStyledText('The BitByteRider RC car is power...') + MixedStyledText('GitHub', style='external link') <reference> + > (0,0,1,0,1) external hyperlink [Sphinx] > DEFAULT + SingleStyledText('GitHub') + SingleStyledText(': ') + MixedStyledText('https://github.com/alexandrebobk...', style='external link') <reference> + > (0,0,1,0,1) external hyperlink [Sphinx] > DEFAULT + SingleStyledText('https://github.com/alexandrebobk...') + Section(id='%overview#reserved-pins-gpios') overview.rst:10 <section> + Heading('2.1 Reserved Pins & GPIOs') overview.rst:10 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('2.1 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('2.1') + SingleStyledText(' ') + MixedStyledText('Reserved Pins & GPIOs') + MixedStyledText('Reserved Pins & GPIOs') + SingleStyledText('Reserved Pins & GPIOs') + Paragraph('The following table summarizes G...') overview.rst:12 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The following table summarizes G...') + MixedStyledText('The following table summarizes G...') + SingleStyledText('The following table summarizes G...') + Paragraph('The GPIO numbers correspond to t...') overview.rst:14 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The GPIO numbers correspond to t...') + MixedStyledText('The GPIO numbers correspond to t...') + SingleStyledText('The GPIO numbers correspond to t...') + MixedStyledText('The GPIO numbers correspond to t...') + MixedStyledText('The GPIO numbers correspond to t...') + SingleStyledText('The GPIO numbers correspond to t...') + Section(id='%overview#reading-the-joystick-x-and-y-axis') overview.rst:17 <section> + Heading('2.1.1 Reading the Joystick x- an...') overview.rst:17 <title> + > (0,0,0,1,2) heading level 3 [Sphinx] > heading level 2 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('2.1.1 ', style='label') + x (0,0,1,1,3) heading level 3 label + SingleStyledText('') + SingleStyledText('2.1.1') + SingleStyledText(' ') + MixedStyledText('Reading the Joystick x- and y- a...') + MixedStyledText('Reading the Joystick x- and y- a...') + SingleStyledText('Reading the Joystick x- and y- a...') + Paragraph('To determine the position of the...') overview.rst:19 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('To determine the position of the...') + MixedStyledText('To determine the position of the...') + SingleStyledText('To determine the position of the...') + MixedStyledText('To determine the position of the...') + MixedStyledText('To determine the position of the...') + SingleStyledText('To determine the position of the...') + MixedStyledText('GPIO0', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO0') + SingleStyledText(' and ') + MixedStyledText('GPIO1', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO1') + SingleStyledText(').') + Section(id='%overview#controlling-the-direction-and-speed') overview.rst:23 <section> + Heading('2.1.2 Controlling the Direction ...') overview.rst:23 <title> + > (0,0,0,1,2) heading level 3 [Sphinx] > heading level 2 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('2.1.2 ', style='label') + x (0,0,1,1,3) heading level 3 label + SingleStyledText('') + SingleStyledText('2.1.2') + SingleStyledText(' ') + MixedStyledText('Controlling the Direction and Sp...') + MixedStyledText('Controlling the Direction and Sp...') + SingleStyledText('Controlling the Direction and Sp...') + Paragraph('To set any desired speed of Bite...') overview.rst:25 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('To set any desired speed of Bite...') + MixedStyledText('To set any desired speed of Bite...') + SingleStyledText('To set any desired speed of Bite...') + MixedStyledText('ESP32-C3 Breadboard Adapter DevB...', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('ESP32-C3 Breadboard Adapter DevB...') + SingleStyledText(' uses PWM to control the rotatio...') + MixedStyledText('To set any desired speed of Bite...') + MixedStyledText('To set any desired speed of Bite...') + SingleStyledText('To set any desired speed of Bite...') + MixedStyledText('ESP32-C3 Breadboard Adapter DevB...', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('ESP32-C3 Breadboard Adapter DevB...') + SingleStyledText(' uses PWM to control the rotatio...') + MixedStyledText('To set any desired speed of Bite...') + MixedStyledText('To set any desired speed of Bite...') + SingleStyledText('To set any desired speed of Bite...') + MixedStyledText('ESP32-C3 Breadboard Adapter DevB...', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('ESP32-C3 Breadboard Adapter DevB...') + SingleStyledText(' uses PWM to control the rotatio...') + Paragraph('Due to the design and limited nu...') overview.rst:28 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Due to the design and limited nu...') + MixedStyledText('Due to the design and limited nu...') + SingleStyledText('Due to the design and limited nu...') + MixedStyledText('ESP32-C3 Breadboard DevBoard', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('ESP32-C3 Breadboard DevBoard') + SingleStyledText(' can control rotation speed and ...') + MixedStyledText('Due to the design and limited nu...') + MixedStyledText('Due to the design and limited nu...') + SingleStyledText('Due to the design and limited nu...') + MixedStyledText('ESP32-C3 Breadboard DevBoard', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('ESP32-C3 Breadboard DevBoard') + SingleStyledText(' can control rotation speed and ...') + MixedStyledText('Due to the design and limited nu...') + MixedStyledText('Due to the design and limited nu...') + SingleStyledText('Due to the design and limited nu...') + MixedStyledText('ESP32-C3 Breadboard DevBoard', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('ESP32-C3 Breadboard DevBoard') + SingleStyledText(' can control rotation speed and ...') + Paragraph('Based on this constraint, the RC...') overview.rst:32 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Based on this constraint, the RC...') + MixedStyledText('Based on this constraint, the RC...') + SingleStyledText('Based on this constraint, the RC...') + MixedStyledText('Based on this constraint, the RC...') + MixedStyledText('Based on this constraint, the RC...') + SingleStyledText('Based on this constraint, the RC...') + Table() overview.rst <table> + > (0,0,0,0,2) table [Sphinx] > DEFAULT + TableBody() + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,2,8) table body top border [Sphinx] > table head bottom border + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM of DC Motors') overview.rst:36 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM of DC Motors') + MixedStyledText('PWM of DC Motors') + SingleStyledText('PWM of DC Motors') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,2,8) table body top border [Sphinx] > table head bottom border + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Direction') overview.rst:36 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Direction') + MixedStyledText('Direction') + SingleStyledText('Direction') + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM(left) = PWM(right)') overview.rst:38 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM(left) = PWM(right)') + MixedStyledText('PWM(left) = PWM(right)') + SingleStyledText('PWM(left) = PWM(right)') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Straight') overview.rst:38 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Straight') + MixedStyledText('Straight') + SingleStyledText('Straight') + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM(left) > PWM(right)') overview.rst:40 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM(left) > PWM(right)') + MixedStyledText('PWM(left) > PWM(right)') + SingleStyledText('PWM(left) > PWM(right)') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Left') overview.rst:40 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Left') + MixedStyledText('Left') + SingleStyledText('Left') + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM(left) < PWM(right)') overview.rst:42 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM(left) < PWM(right)') + MixedStyledText('PWM(left) < PWM(right)') + SingleStyledText('PWM(left) < PWM(right)') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Right') overview.rst:42 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Right') + MixedStyledText('Right') + SingleStyledText('Right') + Admonition() overview.rst:45 <admonition> + > (0,0,0,0,2) admonition [Sphinx] > DEFAULT + Paragraph('What is PWM?', style='title') + > (0,0,1,0,4) admonition title [Sphinx] > body + (0,0,1,0,2) title [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('What is PWM?') + MixedStyledText('What is PWM?') overview.rst:45 <title> + SingleStyledText('What is PWM?') + Paragraph('PWM stands for Pulse Width Modul...') overview.rst:47 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('PWM') + SingleStyledText(' stands for Pulse Width Modulati...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('PWM') + SingleStyledText(' stands for Pulse Width Modulati...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('PWM') + SingleStyledText(' stands for Pulse Width Modulati...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('PWM') + SingleStyledText(' stands for Pulse Width Modulati...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('PWM') + SingleStyledText(' stands for Pulse Width Modulati...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM stands for Pulse Width Modul...') + MixedStyledText('PWM', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('PWM') + SingleStyledText(' stands for Pulse Width Modulati...') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' 5') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' 5') + MixedStyledText(' 5') + Tab(' ') + Tab(' ') + Field('5') + SingleStyledText('5') +---------------------------------- page 6 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + (continued) StaticGroupedFlowables(id='%overview') index.rst <start_of_file> + (continued) Section(id='%overview#how-does-it-work') overview.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + (continued) Section(id='%overview#reserved-pins-gpios') overview.rst:10 <section> + (continued) Section(id='%overview#controlling-the-direction-and-speed') overview.rst:23 <section> + Paragraph('A pair of PWM channels are used ...') overview.rst:53 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('A pair of PWM channels are used ...') + MixedStyledText('A pair of PWM channels are used ...') + SingleStyledText('A pair of PWM channels are used ...') + MixedStyledText('A pair of PWM channels are used ...') + MixedStyledText('A pair of PWM channels are used ...') + SingleStyledText('A pair of PWM channels are used ...') + MixedStyledText('GPIO6', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO6') + SingleStyledText(' and ') + MixedStyledText('GPIO5', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO5') + SingleStyledText(' provide PWM to the left- and ri...') + MixedStyledText('A pair of PWM channels are used ...') + MixedStyledText('A pair of PWM channels are used ...') + SingleStyledText('A pair of PWM channels are used ...') + MixedStyledText('GPIO6', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO6') + SingleStyledText(' and ') + MixedStyledText('GPIO5', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO5') + SingleStyledText(' provide PWM to the left- and ri...') + MixedStyledText('clockwise', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('clockwise') + SingleStyledText(' direction. Similarly, ') + MixedStyledText('GPIO4', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO4') + SingleStyledText(' and ') + MixedStyledText('GPIO7', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO7') + SingleStyledText(' provide PWM to the left- and ri...') + MixedStyledText('A pair of PWM channels are used ...') + MixedStyledText('A pair of PWM channels are used ...') + SingleStyledText('A pair of PWM channels are used ...') + MixedStyledText('GPIO6', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO6') + SingleStyledText(' and ') + MixedStyledText('GPIO5', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO5') + SingleStyledText(' provide PWM to the left- and ri...') + MixedStyledText('clockwise', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('clockwise') + SingleStyledText(' direction. Similarly, ') + MixedStyledText('GPIO4', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO4') + SingleStyledText(' and ') + MixedStyledText('GPIO7', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO7') + SingleStyledText(' provide PWM to the left- and ri...') + MixedStyledText('counter-clockwise', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('counter-clockwise') + SingleStyledText(' direction. Changing PWM on each...') + MixedStyledText('A pair of PWM channels are used ...') + MixedStyledText('A pair of PWM channels are used ...') + SingleStyledText('A pair of PWM channels are used ...') + MixedStyledText('GPIO6', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO6') + SingleStyledText(' and ') + MixedStyledText('GPIO5', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO5') + SingleStyledText(' provide PWM to the left- and ri...') + MixedStyledText('clockwise', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('clockwise') + SingleStyledText(' direction. Similarly, ') + MixedStyledText('GPIO4', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO4') + SingleStyledText(' and ') + MixedStyledText('GPIO7', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('GPIO7') + SingleStyledText(' provide PWM to the left- and ri...') + MixedStyledText('counter-clockwise', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('counter-clockwise') + SingleStyledText(' direction. Changing PWM on each...') + Paragraph('The table below summarizes the G...') overview.rst:58 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The table below summarizes the G...') + MixedStyledText('The table below summarizes the G...') + SingleStyledText('The table below summarizes the G...') + MixedStyledText('The table below summarizes the G...') + MixedStyledText('The table below summarizes the G...') + SingleStyledText('The table below summarizes the G...') + DefinitionList(style='field list') overview.rst:60 <field_list> + > (0,0,1,0,2) field list [Sphinx] > DEFAULT + (0,0,0,0,2) definition list [Sphinx] > DEFAULT + LabeledFlowable() overview.rst:60 <field> + > (0,0,1,0,4) field list item [Sphinx] > DEFAULT + (0,0,0,0,4) definition list item [Sphinx] > DEFAULT + Paragraph('class', style='field name') + > (0,0,2,0,6) field name [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('class') + MixedStyledText('class') overview.rst <field_name> + SingleStyledText('class') + StaticGroupedFlowables() <field_body> + Paragraph('break') overview.rst:60 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('break') + MixedStyledText('break') + SingleStyledText('break') + Table() overview.rst <table> + > (0,0,0,0,2) table [Sphinx] > DEFAULT + TableHead() + TableRow() + TableCellBackground() + x (0,0,0,0,10) table head cell background + TableCellBorder('top') + > (0,0,0,2,8) table top border [Sphinx] > DEFAULT + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,1,8) table head cell right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table head bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table head left border + x (0,0,0,2,4) table left border + x (0,0,0,1,8) table head cell left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + x (0,0,0,0,8) table head cell + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('GPIOs') overview.rst:63 <paragraph> + > (0,0,0,0,10) table head cell paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('GPIOs') + MixedStyledText('GPIOs') + SingleStyledText('GPIOs') + TableCellBackground() + x (0,0,0,0,10) table head cell background + TableCellBorder('top') + > (0,0,0,2,8) table top border [Sphinx] > DEFAULT + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,1,8) table head cell right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table head bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,1,8) table head cell left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + x (0,0,0,0,8) table head cell + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('State') overview.rst:63 <paragraph> + > (0,0,0,0,10) table head cell paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('State') + MixedStyledText('State') + SingleStyledText('State') + TableCellBackground() + x (0,0,0,0,10) table head cell background + TableCellBorder('top') + > (0,0,0,2,8) table top border [Sphinx] > DEFAULT + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,1,8) table head cell right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table head bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,1,8) table head cell left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + x (0,0,0,0,8) table head cell + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Description') overview.rst:63 <paragraph> + > (0,0,0,0,10) table head cell paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Description') + MixedStyledText('Description') + SingleStyledText('Description') + TableCellBackground() + x (0,0,0,0,10) table head cell background + TableCellBorder('top') + > (0,0,0,2,8) table top border [Sphinx] > DEFAULT + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table head right border + x (0,0,0,2,4) table right border + x (0,0,0,1,8) table head cell right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table head bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,1,8) table head cell left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + x (0,0,0,0,8) table head cell + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Function') overview.rst:63 <paragraph> + > (0,0,0,0,10) table head cell paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Function') + MixedStyledText('Function') + SingleStyledText('Function') + TableBody() + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,2,8) table body top border [Sphinx] > table head bottom border + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('GPIO6, GPIO4') overview.rst:65 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('GPIO6, GPIO4') + MixedStyledText('GPIO6, GPIO4') + SingleStyledText('GPIO6, GPIO4') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,2,8) table body top border [Sphinx] > table head bottom border + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM') overview.rst:65 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM') + MixedStyledText('PWM') + SingleStyledText('PWM') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,2,8) table body top border [Sphinx] > table head bottom border + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Left & Right DC Motors spin cloc...') overview.rst:65 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Left & Right DC Motors spin cloc...') + MixedStyledText('Left & Right DC Motors spin cloc...') + SingleStyledText('Left & Right DC Motors spin cloc...') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,2,8) table body top border [Sphinx] > table head bottom border + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Forward') overview.rst:65 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Forward') + MixedStyledText('Forward') + SingleStyledText('Forward') + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('GPIO5, GPIO7') overview.rst:68 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('GPIO5, GPIO7') + MixedStyledText('GPIO5, GPIO7') + SingleStyledText('GPIO5, GPIO7') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM') overview.rst:68 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM') + MixedStyledText('PWM') + SingleStyledText('PWM') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Left & Right DC Motors spin coun...') overview.rst:68 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Left & Right DC Motors spin coun...') + MixedStyledText('Left & Right DC Motors spin coun...') + SingleStyledText('Left & Right DC Motors spin coun...') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Reverse') overview.rst:68 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Reverse') + MixedStyledText('Reverse') + SingleStyledText('Reverse') + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('GPIO6, GPIO7') overview.rst:71 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('GPIO6, GPIO7') + MixedStyledText('GPIO6, GPIO7') + SingleStyledText('GPIO6, GPIO7') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM') overview.rst:71 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM') + MixedStyledText('PWM') + SingleStyledText('PWM') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Left DC Motors spin clockwise. R...') overview.rst:71 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Left DC Motors spin clockwise. R...') + MixedStyledText('Left DC Motors spin clockwise. R...') + SingleStyledText('Left DC Motors spin clockwise. R...') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Left') overview.rst:71 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Left') + MixedStyledText('Left') + SingleStyledText('Left') + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('GPIO4, GPIO5') overview.rst:74 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('GPIO4, GPIO5') + MixedStyledText('GPIO4, GPIO5') + SingleStyledText('GPIO4, GPIO5') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM') overview.rst:74 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM') + MixedStyledText('PWM') + SingleStyledText('PWM') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Left DC Motors spin counterclock...') overview.rst:74 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Left DC Motors spin counterclock...') + MixedStyledText('Left DC Motors spin counterclock...') + SingleStyledText('Left DC Motors spin counterclock...') + MixedStyledText('Left DC Motors spin counterclock...') + MixedStyledText('Left DC Motors spin counterclock...') + SingleStyledText('Left DC Motors spin counterclock...') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Right') overview.rst:74 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Right') + MixedStyledText('Right') + SingleStyledText('Right') + Paragraph('The following images illustrate ...') overview.rst:78 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The following images illustrate ...') + MixedStyledText('The following images illustrate ...') + SingleStyledText('The following images illustrate ...') + MixedStyledText('The following images illustrate ...') + MixedStyledText('The following images illustrate ...') + SingleStyledText('The following images illustrate ...') + Figure(id='%overview#id1') overview.rst:80 <figure> + > (0,0,0,0,2) figure [Sphinx] > DEFAULT + Image('_static/ESP-IDF_Robot_PWM_Duty-0.bmp') overview.rst:80 <image> + > (0,0,0,0,4) figure image [Sphinx] > image + (0,0,0,0,2) image [Sphinx] > DEFAULT + Caption('Figure 2.1. DC Motor PWM duty cy...') overview.rst:82 <caption> + > (0,0,0,0,4) figure caption [Sphinx] > caption + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + MixedStyledText('2.1. ', style='label') + SingleStyledText('') + SingleStyledText('2.1') + SingleStyledText('. ') + MixedStyledText('DC Motor PWM duty cycle 0%') + MixedStyledText('DC Motor PWM duty cycle 0%') + SingleStyledText('DC Motor PWM duty cycle 0%') +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header('Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText('Byte Rider, Release 06-2025') + MixedStyledText('Byte Rider, Release 06-2025') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('6 Chapter 2. HOW DOES IT WORK?') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('6 Chapter 2. HOW DOES IT WORK?') + MixedStyledText('6 Chapter 2. HOW DOES IT WORK?') + Field('6') + SingleStyledText('6') + Tab(' ') + Tab(' ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('2') + SingleStyledText('2') + SingleStyledText('. ') + Field('HOW DOES IT WORK?') + MixedStyledText('HOW DOES IT WORK?') + MixedStyledText('HOW DOES IT WORK?') + SingleStyledText('HOW DOES IT WORK?') +---------------------------------- page 7 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + (continued) StaticGroupedFlowables(id='%overview') index.rst <start_of_file> + (continued) Section(id='%overview#how-does-it-work') overview.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + (continued) Section(id='%overview#reserved-pins-gpios') overview.rst:10 <section> + (continued) Section(id='%overview#controlling-the-direction-and-speed') overview.rst:23 <section> + Figure(id='%overview#id2') overview.rst:84 <figure> + > (0,0,0,0,2) figure [Sphinx] > DEFAULT + Image('_static/ESP-IDF_Robot_PWM_Duty-50.bmp') overview.rst:84 <image> + > (0,0,0,0,4) figure image [Sphinx] > image + (0,0,0,0,2) image [Sphinx] > DEFAULT + Caption('Figure 2.2. DC Motor PWM duty cy...') overview.rst:86 <caption> + > (0,0,0,0,4) figure caption [Sphinx] > caption + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + MixedStyledText('2.2. ', style='label') + SingleStyledText('') + SingleStyledText('2.2') + SingleStyledText('. ') + MixedStyledText('DC Motor PWM duty cycle 47.6%') + MixedStyledText('DC Motor PWM duty cycle 47.6%') + SingleStyledText('DC Motor PWM duty cycle 47.6%') + Figure(id='%overview#id3') overview.rst:88 <figure> + > (0,0,0,0,2) figure [Sphinx] > DEFAULT + Image('_static/ESP-IDF_Robot_PWM_Duty-95.bmp') overview.rst:88 <image> + > (0,0,0,0,4) figure image [Sphinx] > image + (0,0,0,0,2) image [Sphinx] > DEFAULT + Caption('Figure 2.3. DC Motor PWM duty cy...') overview.rst:90 <caption> + > (0,0,0,0,4) figure caption [Sphinx] > caption + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + MixedStyledText('2.3. ', style='label') + SingleStyledText('') + SingleStyledText('2.3') + SingleStyledText('. ') + MixedStyledText('DC Motor PWM duty cycle 90.8%') + MixedStyledText('DC Motor PWM duty cycle 90.8%') + SingleStyledText('DC Motor PWM duty cycle 90.8%') + Table() overview.rst <table> + > (0,0,0,0,2) table [Sphinx] > DEFAULT + TableHead() + TableRow() + TableCellBackground() + x (0,0,0,0,10) table head cell background + TableCellBorder('top') + > (0,0,0,2,8) table top border [Sphinx] > DEFAULT + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,1,8) table head cell right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table head bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table head left border + x (0,0,0,2,4) table left border + x (0,0,0,1,8) table head cell left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + x (0,0,0,0,8) table head cell + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('GPIO') overview.rst:97 <paragraph> + > (0,0,0,0,10) table head cell paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('GPIO') + MixedStyledText('GPIO') + SingleStyledText('GPIO') + TableCellBackground() + x (0,0,0,0,10) table head cell background + TableCellBorder('top') + > (0,0,0,2,8) table top border [Sphinx] > DEFAULT + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,1,8) table head cell right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table head bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,1,8) table head cell left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + x (0,0,0,0,8) table head cell + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Pin') overview.rst:97 <paragraph> + > (0,0,0,0,10) table head cell paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Pin') + MixedStyledText('Pin') + SingleStyledText('Pin') + TableCellBackground() + x (0,0,0,0,10) table head cell background + TableCellBorder('top') + > (0,0,0,2,8) table top border [Sphinx] > DEFAULT + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,1,8) table head cell right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table head bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,1,8) table head cell left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + x (0,0,0,0,8) table head cell + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Function') overview.rst:97 <paragraph> + > (0,0,0,0,10) table head cell paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Function') + MixedStyledText('Function') + SingleStyledText('Function') + TableCellBackground() + x (0,0,0,0,10) table head cell background + TableCellBorder('top') + > (0,0,0,2,8) table top border [Sphinx] > DEFAULT + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table head right border + x (0,0,0,2,4) table right border + x (0,0,0,1,8) table head cell right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table head bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,1,8) table head cell left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + x (0,0,0,0,8) table head cell + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Notes') overview.rst:97 <paragraph> + > (0,0,0,0,10) table head cell paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Notes') + MixedStyledText('Notes') + SingleStyledText('Notes') + TableBody() + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,2,8) table body top border [Sphinx] > table head bottom border + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('0') overview.rst:99 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('0') + MixedStyledText('0') + SingleStyledText('0') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,2,8) table body top border [Sphinx] > table head bottom border + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('16') overview.rst:99 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('16') + MixedStyledText('16') + SingleStyledText('16') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,2,8) table body top border [Sphinx] > table head bottom border + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Joystick x-axis') overview.rst:99 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Joystick x-axis') + MixedStyledText('Joystick x-axis') + SingleStyledText('Joystick x-axis') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,2,8) table body top border [Sphinx] > table head bottom border + (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('ADC1_CH0') overview.rst:99 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('ADC1_CH0') + MixedStyledText('ADC1_CH0') + SingleStyledText('ADC1_CH0') + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('1') overview.rst:101 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('1') + MixedStyledText('1') + SingleStyledText('1') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('15') overview.rst:101 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('15') + MixedStyledText('15') + SingleStyledText('15') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Joystick y-axis') overview.rst:101 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Joystick y-axis') + MixedStyledText('Joystick y-axis') + SingleStyledText('Joystick y-axis') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('ADC1_CH1') overview.rst:101 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('ADC1_CH1') + MixedStyledText('ADC1_CH1') + SingleStyledText('ADC1_CH1') +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header(' Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText(' Byte Rider, Release 06-2025') + MixedStyledText(' Byte Rider, Release 06-2025') + Tab(' ') + Tab(' ') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('2.1. Reserved Pins & GPIOs 7') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('2.1. Reserved Pins & GPIOs 7') + MixedStyledText('2.1. Reserved Pins & GPIOs 7') + Field('2.1') + SingleStyledText('2.1') + SingleStyledText('. ') + Field('Reserved Pins & GPIOs') + MixedStyledText('Reserved Pins & GPIOs') + MixedStyledText('Reserved Pins & GPIOs') + SingleStyledText('Reserved Pins & GPIOs') + Tab(' ') + Tab(' ') + Field('7') + SingleStyledText('7') +---------------------------------- page 8 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + (continued) StaticGroupedFlowables(id='%overview') index.rst <start_of_file> + (continued) Section(id='%overview#how-does-it-work') overview.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + (continued) Section(id='%overview#reserved-pins-gpios') overview.rst:10 <section> + (continued) Section(id='%overview#controlling-the-direction-and-speed') overview.rst:23 <section> + (continued) Table() overview.rst <table> + > (0,0,0,0,2) table [Sphinx] > DEFAULT + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('8') overview.rst:103 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('8') + MixedStyledText('8') + SingleStyledText('8') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('5') overview.rst:103 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('5') + MixedStyledText('5') + SingleStyledText('5') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('Joystick push button') overview.rst:103 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Joystick push button') + MixedStyledText('Joystick push button') + SingleStyledText('Joystick push button') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('6') overview.rst:105 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('6') + MixedStyledText('6') + SingleStyledText('6') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('4') overview.rst:105 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('4') + MixedStyledText('4') + SingleStyledText('4') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM for clockwise rotation of le...') overview.rst:105 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM for clockwise rotation of le...') + MixedStyledText('PWM for clockwise rotation of le...') + SingleStyledText('PWM for clockwise rotation of le...') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('LEDC_CHANNEL_1') overview.rst:105 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('LEDC_CHANNEL_1') + MixedStyledText('LEDC_CHANNEL_1') + SingleStyledText('LEDC_CHANNEL_1') + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('5') overview.rst:107 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('5') + MixedStyledText('5') + SingleStyledText('5') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('3') overview.rst:107 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('3') + MixedStyledText('3') + SingleStyledText('3') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM for clockwise rotation of ri...') overview.rst:107 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM for clockwise rotation of ri...') + MixedStyledText('PWM for clockwise rotation of ri...') + SingleStyledText('PWM for clockwise rotation of ri...') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('LEDC_CHANNEL_0') overview.rst:107 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('LEDC_CHANNEL_0') + MixedStyledText('LEDC_CHANNEL_0') + SingleStyledText('LEDC_CHANNEL_0') + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('4') overview.rst:109 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('4') + MixedStyledText('4') + SingleStyledText('4') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('2') overview.rst:109 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('2') + MixedStyledText('2') + SingleStyledText('2') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM for counter-clockwise rotati...') overview.rst:109 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM for counter-clockwise rotati...') + MixedStyledText('PWM for counter-clockwise rotati...') + SingleStyledText('PWM for counter-clockwise rotati...') + TableCellBackground() + x (0,0,0,2,8) table body cell background on even row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('LEDC_CHANNEL_2') overview.rst:109 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('LEDC_CHANNEL_2') + MixedStyledText('LEDC_CHANNEL_2') + SingleStyledText('LEDC_CHANNEL_2') + TableRow() + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + x (0,0,0,2,8) table body left border + x (0,0,0,2,4) table left border + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('7') overview.rst:111 <paragraph> + > (0,0,0,1,8) table first column paragraph [Sphinx] > table body cell paragraph + (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('7') + MixedStyledText('7') + SingleStyledText('7') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('6') overview.rst:111 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('6') + MixedStyledText('6') + SingleStyledText('6') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('PWM for counter-clockwise rotati...') overview.rst:111 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('PWM for counter-clockwise rotati...') + MixedStyledText('PWM for counter-clockwise rotati...') + SingleStyledText('PWM for counter-clockwise rotati...') + TableCellBackground() + x (0,0,0,2,8) table body cell background on odd row + TableCellBorder('top') + > (0,0,0,1,2) table cell top border [Sphinx] > table cell border + TableCellBorder('right') + x (0,0,0,2,8) table body right border + x (0,0,0,2,4) table right border + > (0,0,0,1,2) table cell right border [Sphinx] > table cell border + TableCellBorder('bottom') + > (0,0,0,2,8) table bottom border [Sphinx] > table top border + (0,0,0,1,2) table cell bottom border [Sphinx] > table cell border + TableCellBorder('left') + > (0,0,0,1,2) table cell left border [Sphinx] > table cell border + TableCell() <entry> + > (0,0,0,0,7) table cell [Sphinx] > DEFAULT + Paragraph('LEDC_CHANNEL_3') overview.rst:111 <paragraph> + > (0,0,0,0,9) table body cell paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('LEDC_CHANNEL_3') + MixedStyledText('LEDC_CHANNEL_3') + SingleStyledText('LEDC_CHANNEL_3') + Section(id='%overview#fusion-of-software-with-hardware') overview.rst:115 <section> + Heading('2.2 Fusion of Software with Hard...') overview.rst:115 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('2.2 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('2.2') + SingleStyledText(' ') + MixedStyledText('Fusion of Software with Hardware') + MixedStyledText('Fusion of Software with Hardware') + SingleStyledText('Fusion of Software with Hardware') + Paragraph('The struct for storing motors PW...') overview.rst:117 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The struct for storing motors PW...') + MixedStyledText('The struct for storing motors PW...') + SingleStyledText('The ') + MixedStyledText('struct', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('struct') + SingleStyledText(' for storing motors PWM values.') + CodeBlock('struct motors_rpm {\n int moto...') overview.rst:119 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('struct motors_rpm {\n int moto...') + MixedStyledText('struct motors_rpm {\n int moto...') + Token('struct', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motors_rpm', type=Token.Name.Class) + > (0,0,0,1,2) (pygments)Token.Name.Class [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('};', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Paragraph('The function for updating motors...') overview.rst:128 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The function for updating motors...') + MixedStyledText('The function for updating motors...') + SingleStyledText('The function for updating motors...') + CodeBlock('// Function to send data to the ...') overview.rst:130 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('// Function to send data to the ...') + MixedStyledText('// Function to send data to the ...') + Token('// Function to send data to the ...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sendData', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Declare data struct\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('crc', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('nav_bttn', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Display brief summary of data...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Joystick (x,y) position ( 0x%04...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('// Function to send data to the ...') + MixedStyledText('// Function to send data to the ...') + Token('// Function to send data to the ...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sendData', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Declare data struct\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('crc', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('nav_bttn', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Display brief summary of data...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Joystick (x,y) position ( 0x%04...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"pwm 1, pwm 2 [ 0x%04X, 0x%04X ]...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('// Function to send data to the ...') + MixedStyledText('// Function to send data to the ...') + Token('// Function to send data to the ...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sendData', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Declare data struct\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('crc', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('nav_bttn', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Display brief summary of data...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Joystick (x,y) position ( 0x%04...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"pwm 1, pwm 2 [ 0x%04X, 0x%04X ]...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"pwm 3, pwm 4 [ 0x%04X, 0x%04X ]...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('// Function to send data to the ...') + MixedStyledText('// Function to send data to the ...') + Token('// Function to send data to the ...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sendData', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Declare data struct\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('crc', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('nav_bttn', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Display brief summary of data...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Joystick (x,y) position ( 0x%04...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"pwm 1, pwm 2 [ 0x%04X, 0x%04X ]...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"pwm 3, pwm 4 [ 0x%04X, 0x%04X ]...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Call ESP-NOW function to send...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('// Function to send data to the ...') + MixedStyledText('// Function to send data to the ...') + Token('// Function to send data to the ...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sendData', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Declare data struct\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('crc', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('nav_bttn', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Display brief summary of data...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Joystick (x,y) position ( 0x%04...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"pwm 1, pwm 2 [ 0x%04X, 0x%04X ]...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"pwm 3, pwm 4 [ 0x%04X, 0x%04X ]...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Call ESP-NOW function to send...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('result', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('esp_now_send', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('receiver_mac', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('&', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sizeof', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('));', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// If status is NOT OK, display ...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('if', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('result', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('!=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGE', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('"ESP-NOW"', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Error sending data! Error code:...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('result', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('deletePeer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('else', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGW', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('"ESP-NOW"', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Data was sent."', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Paragraph('The onDataReceived() and onDataS...') overview.rst:162 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The onDataReceived() and onDataS...') + MixedStyledText('The onDataReceived() and onDataS...') + SingleStyledText('The onDataReceived() and onDataS...') + CodeBlock('// Call-back for the event when ...') overview.rst:164 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('// Call-back for the event when ...') + MixedStyledText('// Call-back for the event when ...') + Token('// Call-back for the event when ...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('onDataReceived', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('data_len', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buf', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Allocate memory for buffer to...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('// Call-back for the event when ...') + MixedStyledText('// Call-back for the event when ...') + Token('// Call-back for the event when ...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('onDataReceived', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('data_len', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buf', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Allocate memory for buffer to...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header('Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText('Byte Rider, Release 06-2025') + MixedStyledText('Byte Rider, Release 06-2025') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('8 Chapter 2. HOW DOES IT WORK?') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('8 Chapter 2. HOW DOES IT WORK?') + MixedStyledText('8 Chapter 2. HOW DOES IT WORK?') + Field('8') + SingleStyledText('8') + Tab(' ') + Tab(' ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('2') + SingleStyledText('2') + SingleStyledText('. ') + Field('HOW DOES IT WORK?') + MixedStyledText('HOW DOES IT WORK?') + MixedStyledText('HOW DOES IT WORK?') + SingleStyledText('HOW DOES IT WORK?') +---------------------------------- page 9 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + (continued) StaticGroupedFlowables(id='%overview') index.rst <start_of_file> + (continued) Section(id='%overview#how-does-it-work') overview.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + (continued) Section(id='%overview#fusion-of-software-with-hardware') overview.rst:115 <section> + (continued) CodeBlock('// Call-back for the event when ...') overview.rst:164 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('// Call-back for the event when ...') + MixedStyledText('// Call-back for the event when ...') + Token('// Call-back for the event when ...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('onDataReceived', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('data_len', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buf', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Allocate memory for buffer to...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGW', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Data was received"', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"x-axis: 0x%04x"', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buf', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('->', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"x-axis: 0x%04x"', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buf', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('->', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"PWM 1: 0x%04x"', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buf', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('->', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Call-back for the event when ...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('onDataSent', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('esp_now_send_status_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('status', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGW', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Packet send status: 0x%04X"', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('status', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Paragraph('The rc_send_data_task() function...') overview.rst:181 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The rc_send_data_task() function...') + MixedStyledText('The rc_send_data_task() function...') + SingleStyledText('The rc_send_data_task() function...') + CodeBlock('// Continous, periodic task that...') overview.rst:183 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('// Continous, periodic task that...') + MixedStyledText('// Continous, periodic task that...') + Token('// Continous, periodic task that...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token('static', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('rc_send_data_task', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('arg', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('while', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('true', type=Token.Name.Builtin) + > (0,0,0,1,2) (pygments)Token.Name.Builtin [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('if', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('esp_now_is_peer_exist', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('receiver_mac', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('))', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sendData', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('vTaskDelay', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('100', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('/', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('portTICK_PERIOD_MS', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Section(id='%overview#schematic') overview.rst:196 <section> + Heading('2.3 Schematic') overview.rst:196 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('2.3 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('2.3') + SingleStyledText(' ') + MixedStyledText('Schematic') + MixedStyledText('Schematic') + SingleStyledText('Schematic') + Image('_static/ESP-IDF_Robot_schematic.png') overview.rst:198 <image> + > (0,0,0,0,2) image [Sphinx] > DEFAULT +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header(' Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText(' Byte Rider, Release 06-2025') + MixedStyledText(' Byte Rider, Release 06-2025') + Tab(' ') + Tab(' ') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('2.3. Schematic 9') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('2.3. Schematic 9') + MixedStyledText('2.3. Schematic 9') + Field('2.3') + SingleStyledText('2.3') + SingleStyledText('. ') + Field('Schematic') + MixedStyledText('Schematic') + MixedStyledText('Schematic') + SingleStyledText('Schematic') + Tab(' ') + Tab(' ') + Field('9') + SingleStyledText('9') +---------------------------------- page 10 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header('Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText('Byte Rider, Release 06-2025') + MixedStyledText('Byte Rider, Release 06-2025') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('10 Chapter 2. HOW DOES IT WORK...') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('10 Chapter 2. HOW DOES IT WORK...') + MixedStyledText('10 Chapter 2. HOW DOES IT WORK...') + Field('10') + SingleStyledText('10') + Tab(' ') + Tab(' ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('2') + SingleStyledText('2') + SingleStyledText('. ') + Field('HOW DOES IT WORK?') + MixedStyledText('HOW DOES IT WORK?') + MixedStyledText('HOW DOES IT WORK?') + SingleStyledText('HOW DOES IT WORK?') +---------------------------------- page 11 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### FlowablesContainer('chapter title') + Paragraph('Chapter 3', style='body matter chapter label') + > (0,0,1,0,2) body matter chapter label [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Chapter 3') + MixedStyledText('Chapter 3') + MixedStyledText('Chapter ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('3', style='number') + > (0,0,2,0,3) body matter chapter number [Sphinx] > DEFAULT + SingleStyledText('3') + Paragraph('DATA STRUCTS', style='body matter chapter title') + > (0,0,1,0,2) body matter chapter title [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + Field('DATA STRUCTS') + MixedStyledText('DATA STRUCTS') + MixedStyledText('DATA STRUCTS') + SingleStyledText('DATA STRUCTS') +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + StaticGroupedFlowables(id='%data') index.rst <start_of_file> + Section(id='%data#data-structs') data.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Paragraph('The struct serves as the data pa...') data.rst:4 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('The struct serves as the data pa...') + MixedStyledText('The struct serves as the data pa...') + SingleStyledText('The struct serves as the data pa...') + MixedStyledText('The struct serves as the data pa...') + MixedStyledText('The struct serves as the data pa...') + SingleStyledText('The struct serves as the data pa...') + MixedStyledText('The struct serves as the data pa...') + MixedStyledText('The struct serves as the data pa...') + SingleStyledText('The struct serves as the data pa...') + MixedStyledText('sensors_data_t', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('sensors_data_t') + SingleStyledText(' struct encapsulates all control...') + MixedStyledText('The struct serves as the data pa...') + MixedStyledText('The struct serves as the data pa...') + SingleStyledText('The struct serves as the data pa...') + MixedStyledText('sensors_data_t', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('sensors_data_t') + SingleStyledText(' struct encapsulates all control...') + MixedStyledText('The struct serves as the data pa...') + MixedStyledText('The struct serves as the data pa...') + SingleStyledText('The struct serves as the data pa...') + MixedStyledText('sensors_data_t', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('sensors_data_t') + SingleStyledText(' struct encapsulates all control...') + CodeBlock('typedef struct {\n int ...') data.rst:9 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('typedef struct {\n int ...') + MixedStyledText('typedef struct {\n int ...') + Token('typedef', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('struct', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Joystick x-position\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Joystick y-position\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('bool', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('nav_bttn', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Joystick push button\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('bool', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('led', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// LED ON/OFF state\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// PWMs for 4 DC motors\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('__attribute__', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('((', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('packed', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('))', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + CodeBlock('struct motors_rpm {\n int moto...') data.rst:22 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('struct motors_rpm {\n int moto...') + MixedStyledText('struct motors_rpm {\n int moto...') + Token('struct', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motors_rpm', type=Token.Name.Class) + > (0,0,0,1,2) (pygments)Token.Name.Class [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('};', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Paragraph('When used with communication pro...') data.rst:31 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('When used with communication pro...') + MixedStyledText('When used with communication pro...') + SingleStyledText('When used with communication pro...') + MixedStyledText('encoded', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('encoded') + SingleStyledText(' into a byte stream, then ') + MixedStyledText('When used with communication pro...') + MixedStyledText('When used with communication pro...') + SingleStyledText('When used with communication pro...') + MixedStyledText('encoded', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('encoded') + SingleStyledText(' into a byte stream, then ') + MixedStyledText('transmitted', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('transmitted') + SingleStyledText(' at regular intervals or in resp...') + MixedStyledText('decoded', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('decoded') + SingleStyledText(' on the receiving end to control...') + MixedStyledText('When used with communication pro...') + MixedStyledText('When used with communication pro...') + SingleStyledText('When used with communication pro...') + MixedStyledText('encoded', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('encoded') + SingleStyledText(' into a byte stream, then ') + MixedStyledText('transmitted', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('transmitted') + SingleStyledText(' at regular intervals or in resp...') + MixedStyledText('decoded', style='strong') <strong> + > (0,0,1,0,1) strong [Sphinx] > DEFAULT + SingleStyledText('decoded') + SingleStyledText(' on the receiving end to control...') + Admonition() data.rst:35 <admonition> + > (0,0,0,0,2) admonition [Sphinx] > DEFAULT + Paragraph('What is struct?', style='title') + > (0,0,1,0,4) admonition title [Sphinx] > body + (0,0,1,0,2) title [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('What is struct?') + MixedStyledText('What is struct?') data.rst:35 <title> + SingleStyledText('What is struct?') + Paragraph('In C programming, a struct (shor...') data.rst:37 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('In C programming, a struct (shor...') + MixedStyledText('In C programming, a struct (shor...') + SingleStyledText('In C programming, a struct (shor...') + MixedStyledText('In C programming, a struct (shor...') + MixedStyledText('In C programming, a struct (shor...') + SingleStyledText('In C programming, a struct (shor...') + MixedStyledText('In C programming, a struct (shor...') + MixedStyledText('In C programming, a struct (shor...') + SingleStyledText('In C programming, a struct (shor...') + MixedStyledText('In C programming, a struct (shor...') + MixedStyledText('In C programming, a struct (shor...') + SingleStyledText('In C programming, a struct (shor...') + Section(id='%data#data-payload') data.rst:43 <section> + Heading('3.1 Data Payload') data.rst:43 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('3.1 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('3.1') + SingleStyledText(' ') + MixedStyledText('Data Payload') + MixedStyledText('Data Payload') + SingleStyledText('Data Payload') + Paragraph('x_axis and y_axis fields capture...') data.rst:45 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('x_axis and y_axis fields capture...') + MixedStyledText('x_axis and y_axis fields capture...') + MixedStyledText('x_axis', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('x_axis') + SingleStyledText(' and ') + MixedStyledText('y_axis', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('y_axis') + SingleStyledText(' fields capture analog input fro...') + MixedStyledText('nav_bttn', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('nav_bttn') + SingleStyledText(' represents a joystick push-butt...') + MixedStyledText('x_axis and y_axis fields capture...') + MixedStyledText('x_axis and y_axis fields capture...') + MixedStyledText('x_axis', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('x_axis') + SingleStyledText(' and ') + MixedStyledText('y_axis', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('y_axis') + SingleStyledText(' fields capture analog input fro...') + MixedStyledText('nav_bttn', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('nav_bttn') + SingleStyledText(' represents a joystick push-butt...') + Paragraph('led allows the transmitter to to...') data.rst:48 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('led allows the transmitter to to...') + MixedStyledText('led allows the transmitter to to...') + MixedStyledText('led', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('led') + SingleStyledText(' allows the transmitter to toggl...') + MixedStyledText('led allows the transmitter to to...') + MixedStyledText('led allows the transmitter to to...') + MixedStyledText('led', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('led') + SingleStyledText(' allows the transmitter to toggl...') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' 11') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' 11') + MixedStyledText(' 11') + Tab(' ') + Tab(' ') + Field('11') + SingleStyledText('11') +---------------------------------- page 12 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + (continued) StaticGroupedFlowables(id='%data') index.rst <start_of_file> + (continued) Section(id='%data#data-structs') data.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + (continued) Section(id='%data#data-payload') data.rst:43 <section> + Paragraph('motor1_rpm_pwm to motor4_rpm_pwm...') data.rst:50 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('motor1_rpm_pwm to motor4_rpm_pwm...') + MixedStyledText('motor1_rpm_pwm to motor4_rpm_pwm...') + MixedStyledText('motor1_rpm_pwm', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('motor1_rpm_pwm') + SingleStyledText(' to ') + MixedStyledText('motor4_rpm_pwm', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('motor4_rpm_pwm') + SingleStyledText(' provide individual PWM signals ...') + MixedStyledText('motor1_rpm_pwm to motor4_rpm_pwm...') + MixedStyledText('motor1_rpm_pwm to motor4_rpm_pwm...') + MixedStyledText('motor1_rpm_pwm', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('motor1_rpm_pwm') + SingleStyledText(' to ') + MixedStyledText('motor4_rpm_pwm', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('motor4_rpm_pwm') + SingleStyledText(' provide individual PWM signals ...') + MixedStyledText('motor1_rpm_pwm to motor4_rpm_pwm...') + MixedStyledText('motor1_rpm_pwm to motor4_rpm_pwm...') + MixedStyledText('motor1_rpm_pwm', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('motor1_rpm_pwm') + SingleStyledText(' to ') + MixedStyledText('motor4_rpm_pwm', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('motor4_rpm_pwm') + SingleStyledText(' provide individual PWM signals ...') + Section(id='%data#why-use-attribute-packed') data.rst:54 <section> + Heading('3.1.1 Why use __attribute((packe...') data.rst:54 <title> + > (0,0,0,1,2) heading level 3 [Sphinx] > heading level 2 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('3.1.1 ', style='label') + x (0,0,1,1,3) heading level 3 label + SingleStyledText('') + SingleStyledText('3.1.1') + SingleStyledText(' ') + MixedStyledText('Why use __attribute((packed))?') + MixedStyledText('Why use __attribute((packed))?') + SingleStyledText('Why use __attribute((packed))?') + Paragraph('ESP-NOW uses fixed-size data pac...') data.rst:56 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('ESP-NOW uses fixed-size data pac...') + MixedStyledText('ESP-NOW uses fixed-size data pac...') + SingleStyledText('ESP-NOW uses fixed-size data pac...') + MixedStyledText('__attribute__((packed))', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('__attribute__((packed))') + SingleStyledText(' removes compiler-added padding ...') + Paragraph('As packed attribute tells the co...') data.rst:58 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('As packed attribute tells the co...') + MixedStyledText('As packed attribute tells the co...') + SingleStyledText('As ') + MixedStyledText('packed', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('packed') + SingleStyledText(' attribute tells the compiler no...') + MixedStyledText('As packed attribute tells the co...') + MixedStyledText('As packed attribute tells the co...') + SingleStyledText('As ') + MixedStyledText('packed', style='emphasis') <emphasis> + > (0,0,1,0,1) emphasis [Sphinx] > DEFAULT + SingleStyledText('packed') + SingleStyledText(' attribute tells the compiler no...') + StaticGroupedFlowables(style='block quote') data.rst:60 <block_quote> + > (0,0,1,0,1) block quote [Sphinx] > DEFAULT + List(style='bulleted') data.rst:60 <bullet_list> + > (0,0,1,0,2) bulleted list [Sphinx] > enumerated list + ListItem() data.rst:60 <list_item> + x (0,0,1,0,4) bulleted list item + ListItemLabel('•') + > (0,0,1,0,6) bulleted list item label [Sphinx] > list item label + (0,0,0,0,2) list item label [Sphinx] > default + MixedStyledText('•') + SingleStyledText('') + SingleStyledText('•') + SingleStyledText('') + StaticGroupedFlowables() + > (0,0,0,0,3) list item body [Sphinx] > DEFAULT + Paragraph('Compact') data.rst:60 <paragraph> + > (0,0,0,0,5) list item paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Compact') + MixedStyledText('Compact') + SingleStyledText('Compact') + ListItem() data.rst:61 <list_item> + x (0,0,1,0,4) bulleted list item + ListItemLabel('•') + > (0,0,1,0,6) bulleted list item label [Sphinx] > list item label + (0,0,0,0,2) list item label [Sphinx] > default + MixedStyledText('•') + SingleStyledText('') + SingleStyledText('•') + SingleStyledText('') + StaticGroupedFlowables() + > (0,0,0,0,3) list item body [Sphinx] > DEFAULT + Paragraph('Predictable for serialization ov...') data.rst:61 <paragraph> + > (0,0,0,0,5) list item paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Predictable for serialization ov...') + MixedStyledText('Predictable for serialization ov...') + SingleStyledText('Predictable for serialization ov...') + ListItem() data.rst:62 <list_item> + x (0,0,1,0,4) bulleted list item + ListItemLabel('•') + > (0,0,1,0,6) bulleted list item label [Sphinx] > list item label + (0,0,0,0,2) list item label [Sphinx] > default + MixedStyledText('•') + SingleStyledText('') + SingleStyledText('•') + SingleStyledText('') + StaticGroupedFlowables() + > (0,0,0,0,3) list item body [Sphinx] > DEFAULT + Paragraph('Ideal for low-latency transmissi...') data.rst:62 <paragraph> + > (0,0,0,0,5) list item paragraph [Sphinx] > default + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Ideal for low-latency transmissi...') + MixedStyledText('Ideal for low-latency transmissi...') + SingleStyledText('Ideal for low-latency transmissi...') + Paragraph('This ensures the receiver interp...') data.rst:64 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('This ensures the receiver interp...') + MixedStyledText('This ensures the receiver interp...') + SingleStyledText('This ensures the receiver interp...') + MixedStyledText('This ensures the receiver interp...') + MixedStyledText('This ensures the receiver interp...') + SingleStyledText('This ensures the receiver interp...') +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header('Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText('Byte Rider, Release 06-2025') + MixedStyledText('Byte Rider, Release 06-2025') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('12 Chapter 3. DATA STRUCTS') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('12 Chapter 3. DATA STRUCTS') + MixedStyledText('12 Chapter 3. DATA STRUCTS') + Field('12') + SingleStyledText('12') + Tab(' ') + Tab(' ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('3') + SingleStyledText('3') + SingleStyledText('. ') + Field('DATA STRUCTS') + MixedStyledText('DATA STRUCTS') + MixedStyledText('DATA STRUCTS') + SingleStyledText('DATA STRUCTS') +---------------------------------- page 13 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### FlowablesContainer('chapter title') + Paragraph('Chapter 4', style='body matter chapter label') + > (0,0,1,0,2) body matter chapter label [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Chapter 4') + MixedStyledText('Chapter 4') + MixedStyledText('Chapter ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('4', style='number') + > (0,0,2,0,3) body matter chapter number [Sphinx] > DEFAULT + SingleStyledText('4') + Paragraph('TRANSMITTER', style='body matter chapter title') + > (0,0,1,0,2) body matter chapter title [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + Field('TRANSMITTER') + MixedStyledText('TRANSMITTER') + MixedStyledText('TRANSMITTER') + SingleStyledText('TRANSMITTER') +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + StaticGroupedFlowables(id='%transmitter') index.rst <start_of_file> + Section(id='%transmitter#transmitter') transmitter.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Section(id='%transmitter#configuration-variables') transmitter.rst:5 <section> + Heading('4.1 Configuration Variables') transmitter.rst:5 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('4.1 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('4.1') + SingleStyledText(' ') + MixedStyledText('Configuration Variables') + MixedStyledText('Configuration Variables') + SingleStyledText('Configuration Variables') + CodeBlock('uint8_t receiver_mac[ESP_NOW_ETH...') transmitter.rst:7 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('uint8_t receiver_mac[ESP_NOW_ETH...') + MixedStyledText('uint8_t receiver_mac[ESP_NOW_ETH...') + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('receiver_mac', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_NOW_ETH_ALEN', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(']', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('0xe4', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0xb0', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0x63', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0x17', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0x9e', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0x44', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token('};', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('typedef', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('struct', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Joystick x-position\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Joystick y-position\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('bool', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('nav_btn', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Joystick push button\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('bool', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('led', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// LED ON/OFF state\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// PWMs for each DC motor\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('__attribute__', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('((', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('packed', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('))', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Section(id='%transmitter#reading-joystick-x-and-y-axis-values') transmitter.rst:23 <section> + Heading('4.2 Reading Joystick x- and y- A...') transmitter.rst:23 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('4.2 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('4.2') + SingleStyledText(' ') + MixedStyledText('Reading Joystick x- and y- Axis ...') + MixedStyledText('Reading Joystick x- and y- Axis ...') + SingleStyledText('Reading Joystick x- and y- Axis ...') + Section(id='%transmitter#sending-ecapsulating-data') transmitter.rst:26 <section> + Heading('4.3 Sending & Ecapsulating Data') transmitter.rst:26 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('4.3 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('4.3') + SingleStyledText(' ') + MixedStyledText('Sending & Ecapsulating Data') + MixedStyledText('Sending & Ecapsulating Data') + SingleStyledText('Sending & Ecapsulating Data') + CodeBlock('void sendData (void) {\n\n ... ...') transmitter.rst:28 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('void sendData (void) {\n\n ... ...') + MixedStyledText('void sendData (void) {\n\n ... ...') + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sendData', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Call ESP-NOW function to send...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('void sendData (void) {\n\n ... ...') + MixedStyledText('void sendData (void) {\n\n ... ...') + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sendData', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Call ESP-NOW function to send...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('result', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('esp_now_send', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('((', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('receiver_mac', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('&', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sizeof', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('));', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('void sendData (void) {\n\n ... ...') + MixedStyledText('void sendData (void) {\n\n ... ...') + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sendData', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Call ESP-NOW function to send...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('result', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('esp_now_send', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('((', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('receiver_mac', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('&', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sizeof', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buffer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('));', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' 13') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' 13') + MixedStyledText(' 13') + Tab(' ') + Tab(' ') + Field('13') + SingleStyledText('13') +---------------------------------- page 14 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + (continued) StaticGroupedFlowables(id='%transmitter') index.rst <start_of_file> + (continued) Section(id='%transmitter#transmitter') transmitter.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Section(id='%transmitter#main-function') transmitter.rst:46 <section> + Heading('4.4 Main Function') transmitter.rst:46 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('4.4 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('4.4') + SingleStyledText(' ') + MixedStyledText('Main Function') + MixedStyledText('Main Function') + SingleStyledText('Main Function') + CodeBlock('#include "freertos/FreeRTOS.h"\n#...') transmitter.rst:48 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('#include "freertos/FreeRTOS.h"\n#...') + MixedStyledText('#include "freertos/FreeRTOS.h"\n#...') + Token('#include', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"freertos/FreeRTOS.h"', type=Token.Comment.PreprocFile) + > (0,0,0,1,2) (pygments)Token.Comment.PreprocFile [FriendlyStyle (pygments)] > DEFAULT + Token('\n#include', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"nvs_flash.h"', type=Token.Comment.PreprocFile) + > (0,0,0,1,2) (pygments)Token.Comment.PreprocFile [FriendlyStyle (pygments)] > DEFAULT + Token('\n#include', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"esp_err.h"', type=Token.Comment.PreprocFile) + > (0,0,0,1,2) (pygments)Token.Comment.PreprocFile [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('app_main', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Initialize internal temperatu...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('chip_sensor_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Initialize NVS\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('esp_err_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('nvs_flash_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('if', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('==', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERR_NVS_NO_FREE_PAGES', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('||', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('==', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERR_NVS_NEW_VERSION_FOUND', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('#include "freertos/FreeRTOS.h"\n#...') + MixedStyledText('#include "freertos/FreeRTOS.h"\n#...') + Token('#include', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"freertos/FreeRTOS.h"', type=Token.Comment.PreprocFile) + > (0,0,0,1,2) (pygments)Token.Comment.PreprocFile [FriendlyStyle (pygments)] > DEFAULT + Token('\n#include', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"nvs_flash.h"', type=Token.Comment.PreprocFile) + > (0,0,0,1,2) (pygments)Token.Comment.PreprocFile [FriendlyStyle (pygments)] > DEFAULT + Token('\n#include', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"esp_err.h"', type=Token.Comment.PreprocFile) + > (0,0,0,1,2) (pygments)Token.Comment.PreprocFile [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('app_main', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Initialize internal temperatu...', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('chip_sensor_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Initialize NVS\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('esp_err_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('nvs_flash_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('if', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('==', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERR_NVS_NO_FREE_PAGES', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('||', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('==', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERR_NVS_NEW_VERSION_FOUND', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERROR_CHECK', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('nvs_flash_erase', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('()', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('nvs_flash_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERROR_CHECK', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('wifi_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('joystick_adc_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('transmission_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('system_led_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header('Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText('Byte Rider, Release 06-2025') + MixedStyledText('Byte Rider, Release 06-2025') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('14 Chapter 4. TRANSMITTER') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('14 Chapter 4. TRANSMITTER') + MixedStyledText('14 Chapter 4. TRANSMITTER') + Field('14') + SingleStyledText('14') + Tab(' ') + Tab(' ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('4') + SingleStyledText('4') + SingleStyledText('. ') + Field('TRANSMITTER') + MixedStyledText('TRANSMITTER') + MixedStyledText('TRANSMITTER') + SingleStyledText('TRANSMITTER') +---------------------------------- page 15 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### FlowablesContainer('chapter title') + Paragraph('Chapter 5', style='body matter chapter label') + > (0,0,1,0,2) body matter chapter label [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Chapter 5') + MixedStyledText('Chapter 5') + MixedStyledText('Chapter ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('5', style='number') + > (0,0,2,0,3) body matter chapter number [Sphinx] > DEFAULT + SingleStyledText('5') + Paragraph('RECEIVER', style='body matter chapter title') + > (0,0,1,0,2) body matter chapter title [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + Field('RECEIVER') + MixedStyledText('RECEIVER') + MixedStyledText('RECEIVER') + SingleStyledText('RECEIVER') +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + StaticGroupedFlowables(id='%receiver') index.rst <start_of_file> + Section(id='%receiver#receiver') receiver.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Section(id='%receiver#configuration-variables') receiver.rst:5 <section> + Heading('5.1 Configuration Variables') receiver.rst:5 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('5.1 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('5.1') + SingleStyledText(' ') + MixedStyledText('Configuration Variables') + MixedStyledText('Configuration Variables') + SingleStyledText('Configuration Variables') + CodeBlock('uint8_t transmitter_mac[ESP_NOW_...') receiver.rst:7 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('uint8_t transmitter_mac[ESP_NOW_...') + MixedStyledText('uint8_t transmitter_mac[ESP_NOW_...') + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('transmitter_mac', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_NOW_ETH_ALEN', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(']', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('0x9C', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0x9E', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0x6E', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0x14', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0xB5', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0x54', type=Token.Literal.Number.Hex) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Hex [FriendlyStyle (pygments)] > DEFAULT + Token('};', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('typedef', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('struct', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Joystick x-position\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Joystick y-position\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('bool', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('nav_bttn', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Joystick push button\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('bool', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('led', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// LED ON/OFF state\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// PWMs for 4 DC motors\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('__attribute__', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('((', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('packed', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('))', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sensors_data_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + CodeBlock('struct motors_rpm {\n int moto...') receiver.rst:22 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('struct motors_rpm {\n int moto...') + MixedStyledText('struct motors_rpm {\n int moto...') + Token('struct', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motors_rpm', type=Token.Name.Class) + > (0,0,0,1,2) (pygments)Token.Name.Class [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor1_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor2_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor3_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('int', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('motor4_rpm_pwm', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('};', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Section(id='%receiver#receiving-extracting-data') receiver.rst:32 <section> + Heading('5.2 Receiving & Extracting Data') receiver.rst:32 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('5.2 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('5.2') + SingleStyledText(' ') + MixedStyledText('Receiving & Extracting Data') + MixedStyledText('Receiving & Extracting Data') + SingleStyledText('Receiving & Extracting Data') + CodeBlock('void onDataReceived (const uint8...') receiver.rst:34 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('void onDataReceived (const uint8...') + MixedStyledText('void onDataReceived (const uint8...') + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('onDataReceived', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('const', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('const', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('data_len', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('void onDataReceived (const uint8...') + MixedStyledText('void onDataReceived (const uint8...') + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('onDataReceived', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('const', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('const', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('data_len', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Data received from: %02x:%02x:%...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('void onDataReceived (const uint8...') + MixedStyledText('void onDataReceived (const uint8...') + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('onDataReceived', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('const', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('const', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('data_len', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Data received from: %02x:%02x:%...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('1', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('2', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('3', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('4', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('5', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('data_len', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + MixedStyledText('void onDataReceived (const uint8...') + MixedStyledText('void onDataReceived (const uint8...') + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('onDataReceived', type=Token.Name.Function) + > (0,0,0,1,2) (pygments)Token.Name.Function [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('const', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('const', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('uint8_t', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('data_len', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_LOGI', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('TAG', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"Data received from: %02x:%02x:%...', type=Token.Literal.String) + > (0,0,0,1,2) (pygments)Token.Literal.String [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('1', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('2', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('3', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('4', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('mac_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('[', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('5', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('],', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('data_len', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('memcpy', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('&', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('buf', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('data', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('sizeof', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('buf', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('));', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buf', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('x_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('buf', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('y_axis', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' 15') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' 15') + MixedStyledText(' 15') + Tab(' ') + Tab(' ') + Field('15') + SingleStyledText('15') +---------------------------------- page 16 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + (continued) StaticGroupedFlowables(id='%receiver') index.rst <start_of_file> + (continued) Section(id='%receiver#receiver') receiver.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Section(id='%receiver#main-function') receiver.rst:52 <section> + Heading('5.3 Main Function') receiver.rst:52 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('5.3 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('5.3') + SingleStyledText(' ') + MixedStyledText('Main Function') + MixedStyledText('Main Function') + SingleStyledText('Main Function') + CodeBlock('#include <string.h>\n#include "fr...') receiver.rst:54 <literal_block> + > (1,0,0,0,2) code block [Sphinx] > DEFAULT + (0,0,0,0,1) body [Sphinx] > default + MixedStyledText('#include <string.h>\n#include "fr...') + MixedStyledText('#include <string.h>\n#include "fr...') + Token('#include', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('<string.h>', type=Token.Comment.PreprocFile) + > (0,0,0,1,2) (pygments)Token.Comment.PreprocFile [FriendlyStyle (pygments)] > DEFAULT + Token('\n#include', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"freertos/FreeRTOS.h"', type=Token.Comment.PreprocFile) + > (0,0,0,1,2) (pygments)Token.Comment.PreprocFile [FriendlyStyle (pygments)] > DEFAULT + Token('\n#include', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"nvs_flash.h"', type=Token.Comment.PreprocFile) + > (0,0,0,1,2) (pygments)Token.Comment.PreprocFile [FriendlyStyle (pygments)] > DEFAULT + Token('\n#include', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('"esp_err.h"', type=Token.Comment.PreprocFile) + > (0,0,0,1,2) (pygments)Token.Comment.PreprocFile [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Comment.Preproc) + > (0,0,0,1,2) (pygments)Token.Comment.Preproc [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('app_main', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Initialize NVS\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('esp_err_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('nvs_flash_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('if', type=Token.Keyword) + > (0,0,0,1,2) (pygments)Token.Keyword [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('==', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERR_NVS_NO_FREE_PAGES', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('||', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('==', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERR_NVS_NEW_VERSION_FOUND', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERROR_CHECK', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('nvs_flash_erase', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('()', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('nvs_flash_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERROR_CHECK', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ret', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('wifi_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERROR_CHECK', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('esp_now_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('());', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('esp_now_peer_info_t', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('transmitterInfo', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('{', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token('};', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('memcpy', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('transmitterInfo', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('peer_addr', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('transmitter_mac', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(',', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_NOW_ETH_ALEN', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(');', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('transmitterInfo', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('channel', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('0', type=Token.Literal.Number.Integer) + > (0,0,0,1,2) (pygments)Token.Literal.Number.Integer [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('// Current WiFi channel\n', type=Token.Comment.Single) + > (0,0,0,1,2) (pygments)Token.Comment.Single [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('transmitterInfo', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('ifidx', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_IF_WIFI_STA', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('transmitterInfo', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('.', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('encrypt', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('=', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('false', type=Token.Name.Builtin) + > (0,0,0,1,2) (pygments)Token.Name.Builtin [FriendlyStyle (pygments)] > DEFAULT + Token(';', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERROR_CHECK', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('esp_now_add_peer', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('&', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token('transmitterInfo', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('));', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('ESP_ERROR_CHECK', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('(', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('esp_now_register_recv_cb', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('((', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('void', type=Token.Keyword.Type) + > (0,0,0,1,2) (pygments)Token.Keyword.Type [FriendlyStyle (pygments)] > DEFAULT + Token('*', type=Token.Operator) + > (0,0,0,1,2) (pygments)Token.Operator [FriendlyStyle (pygments)] > DEFAULT + Token(')', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('onDataReceived', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('));', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('system_led_init', type=Token.Name) + > (0,0,0,1,2) (pygments)Token.Name [FriendlyStyle (pygments)] > DEFAULT + Token('();', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token(' ', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('...', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT + Token('}', type=Token.Punctuation) + > (0,0,0,1,2) (pygments)Token.Punctuation [FriendlyStyle (pygments)] > DEFAULT + Token('\n', type=Token.Text.Whitespace) + > (0,0,0,1,2) (pygments)Token.Text.Whitespace [FriendlyStyle (pygments)] > DEFAULT +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header('Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText('Byte Rider, Release 06-2025') + MixedStyledText('Byte Rider, Release 06-2025') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('16 Chapter 5. RECEIVER') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('16 Chapter 5. RECEIVER') + MixedStyledText('16 Chapter 5. RECEIVER') + Field('16') + SingleStyledText('16') + Tab(' ') + Tab(' ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('5') + SingleStyledText('5') + SingleStyledText('. ') + Field('RECEIVER') + MixedStyledText('RECEIVER') + MixedStyledText('RECEIVER') + SingleStyledText('RECEIVER') +---------------------------------- page 17 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### FlowablesContainer('chapter title') + Paragraph('Chapter 6', style='body matter chapter label') + > (0,0,1,0,2) body matter chapter label [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Chapter 6') + MixedStyledText('Chapter 6') + MixedStyledText('Chapter ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('6', style='number') + > (0,0,2,0,3) body matter chapter number [Sphinx] > DEFAULT + SingleStyledText('6') + Paragraph('WORK-IN-PROGRESS WALK THROUGH', style='body matter chapter title') + > (0,0,1,0,2) body matter chapter title [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + Field('WORK-IN-PROGRESS WALK THROUGH') + MixedStyledText('WORK-IN-PROGRESS WALK THROUGH') + MixedStyledText('WORK-IN-PROGRESS WALK THROUGH') + SingleStyledText('WORK-IN-PROGRESS WALK THROUGH') +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + StaticGroupedFlowables(id='%progress') index.rst <start_of_file> + Section(id='%progress#work-in-progress-walk-through') progress.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Section(id='%progress#finished-work') progress.rst:5 <section> + Heading('6.1 Finished Work') progress.rst:5 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('6.1 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('6.1') + SingleStyledText(' ') + MixedStyledText('Finished Work') + MixedStyledText('Finished Work') + SingleStyledText('Finished Work') + Image('_static/ESP-IDF_Robot.jpg') progress.rst:7 <image> + > (0,0,0,0,2) image [Sphinx] > DEFAULT +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' 17') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' 17') + MixedStyledText(' 17') + Tab(' ') + Tab(' ') + Field('17') + SingleStyledText('17') +---------------------------------- page 18 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + (continued) StaticGroupedFlowables(id='%progress') index.rst <start_of_file> + (continued) Section(id='%progress#work-in-progress-walk-through') progress.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Section(id='%progress#chassis') progress.rst:10 <section> + Heading('6.2 Chassis') progress.rst:10 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('6.2 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('6.2') + SingleStyledText(' ') + MixedStyledText('Chassis') + MixedStyledText('Chassis') + SingleStyledText('Chassis') + Figure(id='%progress#id1') progress.rst:12 <figure> + > (0,0,0,0,2) figure [Sphinx] > DEFAULT + Image('_static/chassi-progress_002d.jpg') progress.rst:12 <image> + > (0,0,0,0,4) figure image [Sphinx] > image + (0,0,0,0,2) image [Sphinx] > DEFAULT + Caption('Figure 6.1. Completed chassis wi...') progress.rst:16 <caption> + > (0,0,0,0,4) figure caption [Sphinx] > caption + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + MixedStyledText('6.1. ', style='label') + SingleStyledText('') + SingleStyledText('6.1') + SingleStyledText('. ') + MixedStyledText('Completed chassis with only DC m...') + MixedStyledText('Completed chassis with only DC m...') + SingleStyledText('Completed chassis with only DC m...') +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header('Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText('Byte Rider, Release 06-2025') + MixedStyledText('Byte Rider, Release 06-2025') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('18 Chapter 6. WORK-IN-PROGRESS...') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('18 Chapter 6. WORK-IN-PROGRESS...') + MixedStyledText('18 Chapter 6. WORK-IN-PROGRESS...') + Field('18') + SingleStyledText('18') + Tab(' ') + Tab(' ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('6') + SingleStyledText('6') + SingleStyledText('. ') + Field('WORK-IN-PROGRESS WALK THROUGH') + MixedStyledText('WORK-IN-PROGRESS WALK THROUGH') + MixedStyledText('WORK-IN-PROGRESS WALK THROUGH') + SingleStyledText('WORK-IN-PROGRESS WALK THROUGH') +---------------------------------- page 19 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + (continued) StaticGroupedFlowables(id='%progress') index.rst <start_of_file> + (continued) Section(id='%progress#work-in-progress-walk-through') progress.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Section(id='%progress#wiring') progress.rst:19 <section> + Heading('6.3 Wiring') progress.rst:19 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('6.3 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('6.3') + SingleStyledText(' ') + MixedStyledText('Wiring') + MixedStyledText('Wiring') + SingleStyledText('Wiring') + Figure(id='%progress#id2') progress.rst:21 <figure> + > (0,0,0,0,2) figure [Sphinx] > DEFAULT + Image('_static/chassi-progress_003a.jpg') progress.rst:21 <image> + > (0,0,0,0,4) figure image [Sphinx] > image + (0,0,0,0,2) image [Sphinx] > DEFAULT + Caption('Figure 6.2. Completed wiring.') progress.rst:25 <caption> + > (0,0,0,0,4) figure caption [Sphinx] > caption + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + MixedStyledText('6.2. ', style='label') + SingleStyledText('') + SingleStyledText('6.2') + SingleStyledText('. ') + MixedStyledText('Completed wiring.') + MixedStyledText('Completed wiring.') + SingleStyledText('Completed wiring.') +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header(' Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText(' Byte Rider, Release 06-2025') + MixedStyledText(' Byte Rider, Release 06-2025') + Tab(' ') + Tab(' ') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('6.3. Wiring 19') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('6.3. Wiring 19') + MixedStyledText('6.3. Wiring 19') + Field('6.3') + SingleStyledText('6.3') + SingleStyledText('. ') + Field('Wiring') + MixedStyledText('Wiring') + MixedStyledText('Wiring') + SingleStyledText('Wiring') + Tab(' ') + Tab(' ') + Field('19') + SingleStyledText('19') +---------------------------------- page 20 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### DownExpandingContainer('floats') + StaticGroupedFlowables() +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + (continued) StaticGroupedFlowables(id='%progress') index.rst <start_of_file> + (continued) Section(id='%progress#work-in-progress-walk-through') progress.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Section(id='%progress#motor-wires-harness') progress.rst:28 <section> + Heading('6.4 Motor Wires Harness') progress.rst:28 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('6.4 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('6.4') + SingleStyledText(' ') + MixedStyledText('Motor Wires Harness') + MixedStyledText('Motor Wires Harness') + SingleStyledText('Motor Wires Harness') + Figure(id='%progress#id3') progress.rst:30 <figure> + > (0,0,0,0,2) figure [Sphinx] > DEFAULT + Image('_static/motors-wiring-harness-001.jpg') progress.rst:30 <image> + > (0,0,0,0,4) figure image [Sphinx] > image + (0,0,0,0,2) image [Sphinx] > DEFAULT + Caption('Figure 6.3. DC Motors wires secu...') progress.rst:33 <caption> + > (0,0,0,0,4) figure caption [Sphinx] > caption + StringField('Figure') + SingleStyledText('Figure') + SingleStyledText(' ') + MixedStyledText('6.3. ', style='label') + SingleStyledText('') + SingleStyledText('6.3') + SingleStyledText('. ') + MixedStyledText('DC Motors wires secured inside h...') + MixedStyledText('DC Motors wires secured inside h...') + SingleStyledText('DC Motors wires secured inside h...') +#### UpExpandingContainer('header') + StaticGroupedFlowables() + Header('Byte Rider, Release 06-2025') + > (0,0,0,0,2) header [Sphinx] > header_footer + MixedStyledText('Byte Rider, Release 06-2025') + MixedStyledText('Byte Rider, Release 06-2025') + Field('Byte Rider') + SingleStyledText('Byte Rider') + SingleStyledText(', ') + Field('Release 06-2025') + SingleStyledText('Release 06-2025') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer('20 Chapter 6. WORK-IN-PROGRESS...') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText('20 Chapter 6. WORK-IN-PROGRESS...') + MixedStyledText('20 Chapter 6. WORK-IN-PROGRESS...') + Field('20') + SingleStyledText('20') + Tab(' ') + Tab(' ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('6') + SingleStyledText('6') + SingleStyledText('. ') + Field('WORK-IN-PROGRESS WALK THROUGH') + MixedStyledText('WORK-IN-PROGRESS WALK THROUGH') + MixedStyledText('WORK-IN-PROGRESS WALK THROUGH') + SingleStyledText('WORK-IN-PROGRESS WALK THROUGH') +---------------------------------- page 21 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### FlowablesContainer('chapter title') + Paragraph('Chapter 7', style='body matter chapter label') + > (0,0,1,0,2) body matter chapter label [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Chapter 7') + MixedStyledText('Chapter 7') + MixedStyledText('Chapter ') + StringField('Chapter') + SingleStyledText('Chapter') + SingleStyledText(' ') + Field('7', style='number') + > (0,0,2,0,3) body matter chapter number [Sphinx] > DEFAULT + SingleStyledText('7') + Paragraph('REFERENCES', style='body matter chapter title') + > (0,0,1,0,2) body matter chapter title [Sphinx] > DEFAULT + (0,0,0,0,2) body [Sphinx] > default + Field('REFERENCES') + MixedStyledText('REFERENCES') + MixedStyledText('REFERENCES') + SingleStyledText('REFERENCES') +#### ChainedContainer('column1') + (continued) StaticGroupedFlowables() + (continued) DocumentTree() index.rst <document> + (continued) StaticGroupedFlowables() index.rst <compound> + StaticGroupedFlowables(id='%references') index.rst <start_of_file> + Section(id='%references#references') references.rst:2 <section> + > (0,0,0,1,4) content chapter [Sphinx] > chapter + (0,0,0,1,2) chapter [Sphinx] > DEFAULT + Section(id='%references#github') references.rst:5 <section> + Heading('7.1 GitHub') references.rst:5 <title> + > (0,0,0,1,2) heading level 2 [Sphinx] > heading level 1 + (0,0,0,0,2) other heading levels [Sphinx] > heading level 5 + MixedStyledText('7.1 ', style='label') + x (0,0,1,1,3) heading level 2 label + SingleStyledText('') + SingleStyledText('7.1') + SingleStyledText(' ') + MixedStyledText('GitHub') + MixedStyledText('GitHub') + SingleStyledText('GitHub') + Paragraph('Complete source code with README...') references.rst:7 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('Complete source code with README...') + MixedStyledText('Complete source code with README...') + SingleStyledText('Complete source ') + MixedStyledText('code', style='external link') <reference> + > (0,0,1,0,1) external hyperlink [Sphinx] > DEFAULT + SingleStyledText('code') + SingleStyledText(' with README.md file: ') + MixedStyledText('https://github.com/alexandrebobk...', style='external link') <reference> + > (0,0,1,0,1) external hyperlink [Sphinx] > DEFAULT + SingleStyledText('https://github.com/alexandrebobk...') + MixedStyledText('Complete source code with README...') + MixedStyledText('Complete source code with README...') + SingleStyledText('Complete source ') + MixedStyledText('code', style='external link') <reference> + > (0,0,1,0,1) external hyperlink [Sphinx] > DEFAULT + SingleStyledText('code') + SingleStyledText(' with README.md file: ') + MixedStyledText('https://github.com/alexandrebobk...', style='external link') <reference> + > (0,0,1,0,1) external hyperlink [Sphinx] > DEFAULT + SingleStyledText('https://github.com/alexandrebobk...') + Paragraph('KiCAd Schematic and PCB design: ...') references.rst:11 <paragraph> + > (0,0,0,0,2) body [Sphinx] > default + MixedStyledText('KiCAd Schematic and PCB design: ...') + MixedStyledText('KiCAd Schematic and PCB design: ...') + SingleStyledText('KiCAd ') + MixedStyledText('Schematic', style='external link') <reference> + > (0,0,1,0,1) external hyperlink [Sphinx] > DEFAULT + SingleStyledText('Schematic') + SingleStyledText(' and PCB design: ') + MixedStyledText('https://github.com/alexandrebobk...', style='external link') <reference> + > (0,0,1,0,1) external hyperlink [Sphinx] > DEFAULT + SingleStyledText('https://github.com/alexandrebobk...') +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' 21') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' 21') + MixedStyledText(' 21') + Tab(' ') + Tab(' ') + Field('21') + SingleStyledText('21') +---------------------------------- page 23 ---------------------------------- +#### FlowablesContainer('background') + StaticGroupedFlowables() +#### FootnoteContainer('footnotes') + StaticGroupedFlowables() +#### ChainedContainer('column1') + StaticGroupedFlowables() + StaticGroupedFlowables() +#### ChainedContainer('column2') + StaticGroupedFlowables() +#### DownExpandingContainer('footer') + StaticGroupedFlowables() + Footer(' 23') + > (0,0,0,0,2) footer [Sphinx] > header_footer + MixedStyledText(' 23') + MixedStyledText(' 23') + Tab(' ') + Tab(' ') + Field('23') + SingleStyledText('23') diff --git a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/.buildinfo b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/.buildinfo index 2086b1f00..a60a30020 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/.buildinfo +++ b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 00c35e78a8d78c18c724312c8c470c71 +config: a9b7137a0a42ab0ffd1d3b1ac6a282c7 tags: 62a1e7829a13fc7881b6498c52484ec0 diff --git a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/esp-idf_espnow_rc-car.pdf b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/esp-idf_espnow_rc-car.pdf index 42167950d..ba3d8c531 100644 Binary files a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/esp-idf_espnow_rc-car.pdf and b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/esp-idf_espnow_rc-car.pdf differ diff --git a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html index 9c71ab450..91210eadc 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html +++ b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html @@ -457,19 +457,6 @@ Changing PWM on each channel determines the speed and direction of the RC car. <p> The table below summarizes the GPIO pins used for PWM to control the direction of the DC motors in the remote-controlled car. </p> - <dl class="field-list simple"> - <dt class="field-odd"> - class - <span class="colon"> - : - </span> - </dt> - <dd class="field-odd"> - <p> - break - </p> - </dd> - </dl> <table class="docutils align-default"> <thead> <tr class="row-odd"> diff --git a/ESP-IDF_Robot/tutorial/docs/source/overview.rst b/ESP-IDF_Robot/tutorial/docs/source/overview.rst index 6a36b80fd..9fd8c86c5 100644 --- a/ESP-IDF_Robot/tutorial/docs/source/overview.rst +++ b/ESP-IDF_Robot/tutorial/docs/source/overview.rst @@ -57,8 +57,6 @@ Changing PWM on each channel determines the speed and direction of the RC car. The table below summarizes the GPIO pins used for PWM to control the direction of the DC motors in the remote-controlled car. -:class: break - +-----------+-------+---------------------------------------+----------+ | GPIOs | State | Description | Function | +===========+=======+=======================================+==========+

GPIOs