diff options
| author | robot-piglet <[email protected]> | 2025-12-14 18:35:40 +0300 |
|---|---|---|
| committer | robot-piglet <[email protected]> | 2025-12-14 18:48:25 +0300 |
| commit | 3ae9a886fda4eaa33ce9705d02e411c3849f6c95 (patch) | |
| tree | 54ecfedbf0983e35ff2a86b63e7ec4c62d5a8447 /contrib/python/fonttools | |
| parent | 34a864439685a2837e01e2691dcb6a05289a9504 (diff) | |
Intermediate changes
commit_hash:d62d722c1bd4c78bfe57486241b6a85eb7703dbd
Diffstat (limited to 'contrib/python/fonttools')
19 files changed, 367 insertions, 249 deletions
diff --git a/contrib/python/fonttools/.dist-info/METADATA b/contrib/python/fonttools/.dist-info/METADATA index 5a5dff2816e..49fac2b52f5 100644 --- a/contrib/python/fonttools/.dist-info/METADATA +++ b/contrib/python/fonttools/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: fonttools -Version: 4.60.1 +Version: 4.61.0 Summary: Tools to manipulate font files Home-page: http://github.com/fonttools/fonttools Author: Just van Rossum @@ -17,7 +17,6 @@ Classifier: Intended Audience :: End Users/Desktop Classifier: Natural Language :: English Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 @@ -26,7 +25,7 @@ Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Text Processing :: Fonts Classifier: Topic :: Multimedia :: Graphics Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion -Requires-Python: >=3.9 +Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: LICENSE License-File: LICENSE.external @@ -38,7 +37,7 @@ Requires-Dist: brotli>=1.0.1; platform_python_implementation == "CPython" and ex Requires-Dist: brotlicffi>=0.8.0; platform_python_implementation != "CPython" and extra == "woff" Requires-Dist: zopfli>=0.1.4; extra == "woff" Provides-Extra: unicode -Requires-Dist: unicodedata2>=15.1.0; python_version <= "3.12" and extra == "unicode" +Requires-Dist: unicodedata2>=17.0.0; python_version <= "3.14" and extra == "unicode" Provides-Extra: graphite Requires-Dist: lz4>=1.7.4.2; extra == "graphite" Provides-Extra: interpolatable @@ -54,13 +53,13 @@ Requires-Dist: xattr; sys_platform == "darwin" and extra == "type1" Provides-Extra: pathops Requires-Dist: skia-pathops>=0.5.0; extra == "pathops" Provides-Extra: repacker -Requires-Dist: uharfbuzz>=0.23.0; extra == "repacker" +Requires-Dist: uharfbuzz>=0.45.0; extra == "repacker" Provides-Extra: all Requires-Dist: lxml>=4.0; extra == "all" Requires-Dist: brotli>=1.0.1; platform_python_implementation == "CPython" and extra == "all" Requires-Dist: brotlicffi>=0.8.0; platform_python_implementation != "CPython" and extra == "all" Requires-Dist: zopfli>=0.1.4; extra == "all" -Requires-Dist: unicodedata2>=15.1.0; python_version <= "3.12" and extra == "all" +Requires-Dist: unicodedata2>=17.0.0; python_version <= "3.14" and extra == "all" Requires-Dist: lz4>=1.7.4.2; extra == "all" Requires-Dist: scipy; platform_python_implementation != "PyPy" and extra == "all" Requires-Dist: munkres; platform_python_implementation == "PyPy" and extra == "all" @@ -69,7 +68,7 @@ Requires-Dist: matplotlib; extra == "all" Requires-Dist: sympy; extra == "all" Requires-Dist: xattr; sys_platform == "darwin" and extra == "all" Requires-Dist: skia-pathops>=0.5.0; extra == "all" -Requires-Dist: uharfbuzz>=0.23.0; extra == "all" +Requires-Dist: uharfbuzz>=0.45.0; extra == "all" Dynamic: author Dynamic: author-email Dynamic: classifier @@ -105,7 +104,7 @@ are available at `Read the Docs <https://fonttools.readthedocs.io/>`_. Installation ~~~~~~~~~~~~ -FontTools requires `Python <http://www.python.org/download/>`__ 3.9 +FontTools requires `Python <http://www.python.org/download/>`__ 3.10 or later. We try to follow the same schedule of minimum Python version support as NumPy (see `NEP 29 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__). @@ -196,7 +195,7 @@ are required to unlock the extra features named "ufo", etc. * `unicodedata2 <https://pypi.python.org/pypi/unicodedata2>`__: ``unicodedata`` backport for Python 3.x updated to the latest Unicode - version 15.0. + version 17.0. *Extra:* ``unicode`` @@ -392,6 +391,22 @@ Have fun! Changelog ~~~~~~~~~ +4.61.0 (released 2025-11-28) +---------------------------- + +- [varLib.main]: **SECURITY** Only use basename(vf.filename) to prevent path traversal attacks when + running `fonttools varLib` command. Fixes CVE-2025-66034, see: + https://github.com/fonttools/fonttools/security/advisories/GHSA-768j-98cg-p3fv. +- [feaLib] Sort BaseLangSysRecords by tag (#3986). +- Drop support for EOL Python 3.9 (#3982). +- [instancer] Support --remove-overlaps for fonts with CFF2 table (#3975). +- [CFF2ToCFF] Add --remove-overlaps option (#3976). +- [feaLib] Raise an error for rsub with NULL target (#3979). +- [bezierTools] Fix logic bug in curveCurveIntersections (#3963). +- [feaLib] Error when condition sets have the same name (#3958). +- [cu2qu.ufo] skip processing empty glyphs to support sparse kerning masters (#3956). +- [unicodedata] Update to Unicode 17. Require ``unicodedata2 >= 17.0.0`` when installed with 'unicode' extra. + 4.60.1 (released 2025-09-29) ---------------------------- diff --git a/contrib/python/fonttools/README.rst b/contrib/python/fonttools/README.rst index 8a4dfc4b232..2c0af437467 100644 --- a/contrib/python/fonttools/README.rst +++ b/contrib/python/fonttools/README.rst @@ -18,7 +18,7 @@ are available at `Read the Docs <https://fonttools.readthedocs.io/>`_. Installation ~~~~~~~~~~~~ -FontTools requires `Python <http://www.python.org/download/>`__ 3.9 +FontTools requires `Python <http://www.python.org/download/>`__ 3.10 or later. We try to follow the same schedule of minimum Python version support as NumPy (see `NEP 29 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__). @@ -109,7 +109,7 @@ are required to unlock the extra features named "ufo", etc. * `unicodedata2 <https://pypi.python.org/pypi/unicodedata2>`__: ``unicodedata`` backport for Python 3.x updated to the latest Unicode - version 15.0. + version 17.0. *Extra:* ``unicode`` diff --git a/contrib/python/fonttools/fontTools/__init__.py b/contrib/python/fonttools/fontTools/__init__.py index 7d2f5af5ae4..19dc53b5b65 100644 --- a/contrib/python/fonttools/fontTools/__init__.py +++ b/contrib/python/fonttools/fontTools/__init__.py @@ -3,6 +3,6 @@ from fontTools.misc.loggingTools import configLogger log = logging.getLogger(__name__) -version = __version__ = "4.60.1" +version = __version__ = "4.61.0" __all__ = ["version", "log", "configLogger"] diff --git a/contrib/python/fonttools/fontTools/cffLib/CFF2ToCFF.py b/contrib/python/fonttools/fontTools/cffLib/CFF2ToCFF.py index e0ec956b60d..f33e48cc4c0 100644 --- a/contrib/python/fonttools/fontTools/cffLib/CFF2ToCFF.py +++ b/contrib/python/fonttools/fontTools/cffLib/CFF2ToCFF.py @@ -189,6 +189,16 @@ def main(args=None): action="store_false", help="Don't set the output font's timestamp to the current time.", ) + parser.add_argument( + "--remove-overlaps", + action="store_true", + help="Merge overlapping contours and components. Requires skia-pathops", + ) + parser.add_argument( + "--ignore-overlap-errors", + action="store_true", + help="Don't crash if the remove-overlaps operation fails for some glyphs.", + ) loggingGroup = parser.add_mutually_exclusive_group(required=False) loggingGroup.add_argument( "-v", "--verbose", action="store_true", help="Run more verbosely." @@ -220,6 +230,21 @@ def main(args=None): convertCFF2ToCFF(font) + if options.remove_overlaps: + from fontTools.ttLib.removeOverlaps import removeOverlaps + from io import BytesIO + + log.debug("Removing overlaps") + + stream = BytesIO() + font.save(stream) + stream.seek(0) + font = TTFont(stream, recalcTimestamp=False, recalcBBoxes=False) + removeOverlaps( + font, + ignoreErrors=options.ignore_overlap_errors, + ) + log.info( "Saving %s", outfile, diff --git a/contrib/python/fonttools/fontTools/cu2qu/ufo.py b/contrib/python/fonttools/fontTools/cu2qu/ufo.py index 7a6dbc67f8a..db9a1b0384b 100644 --- a/contrib/python/fonttools/fontTools/cu2qu/ufo.py +++ b/contrib/python/fonttools/fontTools/cu2qu/ufo.py @@ -165,9 +165,19 @@ def _glyphs_to_quadratic(glyphs, max_err, reverse_direction, stats, all_quadrati """Do the actual conversion of a set of compatible glyphs, after arguments have been set up. + Empty glyphs (without contours) are ignored and passed through unchanged. + Return True if the glyphs were modified, else return False. """ + # Skip empty glyphs (with zero contours) + non_empty_indices = [i for i, g in enumerate(glyphs) if len(g) > 0] + if not non_empty_indices: + return False + + glyphs = [glyphs[i] for i in non_empty_indices] + max_err = [max_err[i] for i in non_empty_indices] + try: segments_by_location = zip(*[_get_segments(g) for g in glyphs]) except UnequalZipLengthsError: @@ -212,6 +222,8 @@ def glyphs_to_quadratic( compatibility. If this is not required, calling glyphs_to_quadratic with one glyph at a time may yield slightly more optimized results. + Empty glyphs (without contours) are ignored and passed through unchanged. + Return True if glyphs were modified, else return False. Raises IncompatibleGlyphsError if glyphs have non-interpolatable outlines. @@ -250,6 +262,8 @@ def fonts_to_quadratic( compatibility. If this is not required, calling fonts_to_quadratic with one font at a time may yield slightly more optimized results. + Empty glyphs (without contours) are ignored and passed through unchanged. + Return the set of modified glyph names if any, else return an empty set. By default, cu2qu stores the curve type in the fonts' lib, under a private diff --git a/contrib/python/fonttools/fontTools/designspaceLib/__init__.py b/contrib/python/fonttools/fontTools/designspaceLib/__init__.py index 661f3405da1..0996e7b69e9 100644 --- a/contrib/python/fonttools/fontTools/designspaceLib/__init__.py +++ b/contrib/python/fonttools/fontTools/designspaceLib/__init__.py @@ -1323,6 +1323,11 @@ class VariableFontDescriptor(SimpleDescriptor): in the document**. The file may or may not exist. If not specified, the :attr:`name` will be used as a basename for the file. + + .. note:: + This is intended to be a simple filename (basename or stem) only. + Build tools will only use the basename component and ignore any + directory separators for security reasons. """ self.axisSubsets: List[ Union[RangeAxisSubsetDescriptor, ValueAxisSubsetDescriptor] diff --git a/contrib/python/fonttools/fontTools/feaLib/builder.py b/contrib/python/fonttools/fontTools/feaLib/builder.py index 9c665f8e5f6..21b7f5bdf26 100644 --- a/contrib/python/fonttools/fontTools/feaLib/builder.py +++ b/contrib/python/fonttools/fontTools/feaLib/builder.py @@ -767,7 +767,7 @@ class Builder(object): for c in script[2]: record.BaseScript.BaseValues.BaseCoord.append(self.buildBASECoord(c)) - for language, min_coord, max_coord in minmax_for_script: + for language, min_coord, max_coord in sorted(minmax_for_script): minmax_record = otTables.MinMax() minmax_record.MinCoord = self.buildBASECoord(min_coord) minmax_record.MaxCoord = self.buildBASECoord(max_coord) @@ -1690,6 +1690,12 @@ class Builder(object): location, ) + if key in self.conditionsets_: + raise FeatureLibError( + f"Condition set '{key}' has the same name as a previous condition set", + location, + ) + # Normalize axisMap = { axis.axisTag: (axis.minValue, axis.defaultValue, axis.maxValue) diff --git a/contrib/python/fonttools/fontTools/feaLib/parser.py b/contrib/python/fonttools/fontTools/feaLib/parser.py index 38d9610e2f7..0e211e0032a 100644 --- a/contrib/python/fonttools/fontTools/feaLib/parser.py +++ b/contrib/python/fonttools/fontTools/feaLib/parser.py @@ -887,6 +887,11 @@ class Parser(object): is_deletion = False if len(new) == 1 and isinstance(new[0], ast.NullGlyph): + if reverse: + raise FeatureLibError( + "Reverse chaining substitutions do not support glyph deletion", + location, + ) new = [] # Deletion is_deletion = True diff --git a/contrib/python/fonttools/fontTools/misc/bezierTools.py b/contrib/python/fonttools/fontTools/misc/bezierTools.py index 2021f244370..efdbdaaeaf3 100644 --- a/contrib/python/fonttools/fontTools/misc/bezierTools.py +++ b/contrib/python/fonttools/fontTools/misc/bezierTools.py @@ -1409,7 +1409,10 @@ def curveCurveIntersections(curve1, curve2): line2 = curve2[0], curve2[-1] return lineLineIntersections(*line1, *line2) else: - return curveLineIntersections(curve2, line1) + hits = curveLineIntersections(curve2, line1) + # curve is passed first to this fn but is the second segment, so + # we need to swap t1/t2 in the result + return [Intersection(pt=x.pt, t1=x.t2, t2=x.t1) for x in hits] elif _is_linelike(curve2): line2 = curve2[0], curve2[-1] return curveLineIntersections(curve1, line2) diff --git a/contrib/python/fonttools/fontTools/subset/svg.py b/contrib/python/fonttools/fontTools/subset/svg.py index 329c68fb0ad..a4d6d09e17e 100644 --- a/contrib/python/fonttools/fontTools/subset/svg.py +++ b/contrib/python/fonttools/fontTools/subset/svg.py @@ -1,7 +1,7 @@ from __future__ import annotations import re -from functools import lru_cache +from functools import cache from itertools import chain, count from typing import Dict, Iterable, Iterator, List, Optional, Set, Tuple @@ -29,8 +29,7 @@ NAMESPACES = { XLINK_HREF = f'{{{NAMESPACES["xlink"]}}}href' -# TODO(antrotype): Replace with functools.cache once we are 3.9+ -@lru_cache(maxsize=None) +@cache def xpath(path): # compile XPath upfront, caching result to reuse on multiple elements return etree.XPath(path, namespaces=NAMESPACES) diff --git a/contrib/python/fonttools/fontTools/ttLib/removeOverlaps.py b/contrib/python/fonttools/fontTools/ttLib/removeOverlaps.py index 6dadf4aa528..f3246292644 100644 --- a/contrib/python/fonttools/fontTools/ttLib/removeOverlaps.py +++ b/contrib/python/fonttools/fontTools/ttLib/removeOverlaps.py @@ -1,4 +1,4 @@ -""" Simplify TrueType glyphs by merging overlapping contours/components. +"""Simplify TrueType glyphs by merging overlapping contours/components. Requires https://github.com/fonttools/skia-pathops """ @@ -250,9 +250,10 @@ def _remove_cff_overlaps( glyphSet: _TTGlyphMapping, removeHinting: bool, ignoreErrors: bool, + table_tag: str, removeUnusedSubroutines: bool = True, ) -> None: - cffFontSet = font["CFF "].cff + cffFontSet = font[table_tag].cff modified = set() for glyphName in glyphNames: try: @@ -311,9 +312,9 @@ def removeOverlaps( any glyphs are modified. """ - if "glyf" not in font and "CFF " not in font: + if "glyf" not in font and "CFF " not in font and "CFF2" not in font: raise NotImplementedError( - "No outline data found in the font: missing 'glyf' or 'CFF ' table" + "No outline data found in the font: missing 'glyf', 'CFF ', or 'CFF2' table" ) if glyphNames is None: @@ -331,13 +332,14 @@ def removeOverlaps( ignoreErrors=ignoreErrors, ) - if "CFF " in font: + if "CFF " in font or "CFF2" in font: _remove_cff_overlaps( font=font, glyphNames=glyphNames, glyphSet=glyphSet, removeHinting=removeHinting, ignoreErrors=ignoreErrors, + table_tag="CFF " if "CFF " in font else "CFF2", removeUnusedSubroutines=removeUnusedSubroutines, ) diff --git a/contrib/python/fonttools/fontTools/ttLib/tables/otBase.py b/contrib/python/fonttools/fontTools/ttLib/tables/otBase.py index 46828178182..41557cfa4b4 100644 --- a/contrib/python/fonttools/fontTools/ttLib/tables/otBase.py +++ b/contrib/python/fonttools/fontTools/ttLib/tables/otBase.py @@ -15,10 +15,7 @@ have_uharfbuzz = False try: import uharfbuzz as hb - # repack method added in uharfbuzz >= 0.23; if uharfbuzz *can* be - # imported but repack method is missing, behave as if uharfbuzz - # is not available (fallback to the slower Python implementation) - have_uharfbuzz = callable(getattr(hb, "repack", None)) + have_uharfbuzz = True except ImportError: pass @@ -668,10 +665,7 @@ class OTTableWriter(object): tableData = table.getDataForHarfbuzz() data.append(tableData) - if hasattr(hb, "repack_with_tag"): - return hb.repack_with_tag(str(tableTag), data, obj_list) - else: - return hb.repack(data, obj_list) + return hb.serialize_with_tag(str(tableTag), data, obj_list) def getAllData(self, remove_duplicate=True): """Assemble all data, including all subtables.""" diff --git a/contrib/python/fonttools/fontTools/unicodedata/Blocks.py b/contrib/python/fonttools/fontTools/unicodedata/Blocks.py index c0e771842b8..c333c4ee3bf 100644 --- a/contrib/python/fonttools/fontTools/unicodedata/Blocks.py +++ b/contrib/python/fonttools/fontTools/unicodedata/Blocks.py @@ -4,9 +4,9 @@ # Source: https://unicode.org/Public/UNIDATA/Blocks.txt # License: http://unicode.org/copyright.html#License # -# Blocks-16.0.0.txt -# Date: 2024-02-02 -# © 2024 Unicode®, Inc. +# Blocks-17.0.0.txt +# Date: 2025-08-01 +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -217,7 +217,8 @@ RANGES = [ 0x108E0, # .. 0x108FF ; Hatran 0x10900, # .. 0x1091F ; Phoenician 0x10920, # .. 0x1093F ; Lydian - 0x10940, # .. 0x1097F ; No_Block + 0x10940, # .. 0x1095F ; Sidetic + 0x10960, # .. 0x1097F ; No_Block 0x10980, # .. 0x1099F ; Meroitic Hieroglyphs 0x109A0, # .. 0x109FF ; Meroitic Cursive 0x10A00, # .. 0x10A5F ; Kharoshthi @@ -278,14 +279,16 @@ RANGES = [ 0x11AB0, # .. 0x11ABF ; Unified Canadian Aboriginal Syllabics Extended-A 0x11AC0, # .. 0x11AFF ; Pau Cin Hau 0x11B00, # .. 0x11B5F ; Devanagari Extended-A - 0x11B60, # .. 0x11BBF ; No_Block + 0x11B60, # .. 0x11B7F ; Sharada Supplement + 0x11B80, # .. 0x11BBF ; No_Block 0x11BC0, # .. 0x11BFF ; Sunuwar 0x11C00, # .. 0x11C6F ; Bhaiksuki 0x11C70, # .. 0x11CBF ; Marchen 0x11CC0, # .. 0x11CFF ; No_Block 0x11D00, # .. 0x11D5F ; Masaram Gondi 0x11D60, # .. 0x11DAF ; Gunjala Gondi - 0x11DB0, # .. 0x11EDF ; No_Block + 0x11DB0, # .. 0x11DEF ; Tolong Siki + 0x11DF0, # .. 0x11EDF ; No_Block 0x11EE0, # .. 0x11EFF ; Makasar 0x11F00, # .. 0x11F5F ; Kawi 0x11F60, # .. 0x11FAF ; No_Block @@ -312,7 +315,8 @@ RANGES = [ 0x16D40, # .. 0x16D7F ; Kirat Rai 0x16D80, # .. 0x16E3F ; No_Block 0x16E40, # .. 0x16E9F ; Medefaidrin - 0x16EA0, # .. 0x16EFF ; No_Block + 0x16EA0, # .. 0x16EDF ; Beria Erfe + 0x16EE0, # .. 0x16EFF ; No_Block 0x16F00, # .. 0x16F9F ; Miao 0x16FA0, # .. 0x16FDF ; No_Block 0x16FE0, # .. 0x16FFF ; Ideographic Symbols and Punctuation @@ -320,7 +324,8 @@ RANGES = [ 0x18800, # .. 0x18AFF ; Tangut Components 0x18B00, # .. 0x18CFF ; Khitan Small Script 0x18D00, # .. 0x18D7F ; Tangut Supplement - 0x18D80, # .. 0x1AFEF ; No_Block + 0x18D80, # .. 0x18DFF ; Tangut Components Supplement + 0x18E00, # .. 0x1AFEF ; No_Block 0x1AFF0, # .. 0x1AFFF ; Kana Extended-B 0x1B000, # .. 0x1B0FF ; Kana Supplement 0x1B100, # .. 0x1B12F ; Kana Extended-A @@ -331,7 +336,7 @@ RANGES = [ 0x1BCA0, # .. 0x1BCAF ; Shorthand Format Controls 0x1BCB0, # .. 0x1CBFF ; No_Block 0x1CC00, # .. 0x1CEBF ; Symbols for Legacy Computing Supplement - 0x1CEC0, # .. 0x1CEFF ; No_Block + 0x1CEC0, # .. 0x1CEFF ; Miscellaneous Symbols Supplement 0x1CF00, # .. 0x1CFCF ; Znamenny Musical Notation 0x1CFD0, # .. 0x1CFFF ; No_Block 0x1D000, # .. 0x1D0FF ; Byzantine Musical Symbols @@ -358,7 +363,9 @@ RANGES = [ 0x1E4D0, # .. 0x1E4FF ; Nag Mundari 0x1E500, # .. 0x1E5CF ; No_Block 0x1E5D0, # .. 0x1E5FF ; Ol Onal - 0x1E600, # .. 0x1E7DF ; No_Block + 0x1E600, # .. 0x1E6BF ; No_Block + 0x1E6C0, # .. 0x1E6FF ; Tai Yo + 0x1E700, # .. 0x1E7DF ; No_Block 0x1E7E0, # .. 0x1E7FF ; Ethiopic Extended-B 0x1E800, # .. 0x1E8DF ; Mende Kikakui 0x1E8E0, # .. 0x1E8FF ; No_Block @@ -399,7 +406,8 @@ RANGES = [ 0x2FA20, # .. 0x2FFFF ; No_Block 0x30000, # .. 0x3134F ; CJK Unified Ideographs Extension G 0x31350, # .. 0x323AF ; CJK Unified Ideographs Extension H - 0x323B0, # .. 0xDFFFF ; No_Block + 0x323B0, # .. 0x3347F ; CJK Unified Ideographs Extension J + 0x33480, # .. 0xDFFFF ; No_Block 0xE0000, # .. 0xE007F ; Tags 0xE0080, # .. 0xE00FF ; No_Block 0xE0100, # .. 0xE01EF ; Variation Selectors Supplement @@ -609,7 +617,8 @@ VALUES = [ "Hatran", # 108E0..108FF "Phoenician", # 10900..1091F "Lydian", # 10920..1093F - "No_Block", # 10940..1097F + "Sidetic", # 10940..1095F + "No_Block", # 10960..1097F "Meroitic Hieroglyphs", # 10980..1099F "Meroitic Cursive", # 109A0..109FF "Kharoshthi", # 10A00..10A5F @@ -670,14 +679,16 @@ VALUES = [ "Unified Canadian Aboriginal Syllabics Extended-A", # 11AB0..11ABF "Pau Cin Hau", # 11AC0..11AFF "Devanagari Extended-A", # 11B00..11B5F - "No_Block", # 11B60..11BBF + "Sharada Supplement", # 11B60..11B7F + "No_Block", # 11B80..11BBF "Sunuwar", # 11BC0..11BFF "Bhaiksuki", # 11C00..11C6F "Marchen", # 11C70..11CBF "No_Block", # 11CC0..11CFF "Masaram Gondi", # 11D00..11D5F "Gunjala Gondi", # 11D60..11DAF - "No_Block", # 11DB0..11EDF + "Tolong Siki", # 11DB0..11DEF + "No_Block", # 11DF0..11EDF "Makasar", # 11EE0..11EFF "Kawi", # 11F00..11F5F "No_Block", # 11F60..11FAF @@ -704,7 +715,8 @@ VALUES = [ "Kirat Rai", # 16D40..16D7F "No_Block", # 16D80..16E3F "Medefaidrin", # 16E40..16E9F - "No_Block", # 16EA0..16EFF + "Beria Erfe", # 16EA0..16EDF + "No_Block", # 16EE0..16EFF "Miao", # 16F00..16F9F "No_Block", # 16FA0..16FDF "Ideographic Symbols and Punctuation", # 16FE0..16FFF @@ -712,7 +724,8 @@ VALUES = [ "Tangut Components", # 18800..18AFF "Khitan Small Script", # 18B00..18CFF "Tangut Supplement", # 18D00..18D7F - "No_Block", # 18D80..1AFEF + "Tangut Components Supplement", # 18D80..18DFF + "No_Block", # 18E00..1AFEF "Kana Extended-B", # 1AFF0..1AFFF "Kana Supplement", # 1B000..1B0FF "Kana Extended-A", # 1B100..1B12F @@ -723,7 +736,7 @@ VALUES = [ "Shorthand Format Controls", # 1BCA0..1BCAF "No_Block", # 1BCB0..1CBFF "Symbols for Legacy Computing Supplement", # 1CC00..1CEBF - "No_Block", # 1CEC0..1CEFF + "Miscellaneous Symbols Supplement", # 1CEC0..1CEFF "Znamenny Musical Notation", # 1CF00..1CFCF "No_Block", # 1CFD0..1CFFF "Byzantine Musical Symbols", # 1D000..1D0FF @@ -750,7 +763,9 @@ VALUES = [ "Nag Mundari", # 1E4D0..1E4FF "No_Block", # 1E500..1E5CF "Ol Onal", # 1E5D0..1E5FF - "No_Block", # 1E600..1E7DF + "No_Block", # 1E600..1E6BF + "Tai Yo", # 1E6C0..1E6FF + "No_Block", # 1E700..1E7DF "Ethiopic Extended-B", # 1E7E0..1E7FF "Mende Kikakui", # 1E800..1E8DF "No_Block", # 1E8E0..1E8FF @@ -791,7 +806,8 @@ VALUES = [ "No_Block", # 2FA20..2FFFF "CJK Unified Ideographs Extension G", # 30000..3134F "CJK Unified Ideographs Extension H", # 31350..323AF - "No_Block", # 323B0..DFFFF + "CJK Unified Ideographs Extension J", # 323B0..3347F + "No_Block", # 33480..DFFFF "Tags", # E0000..E007F "No_Block", # E0080..E00FF "Variation Selectors Supplement", # E0100..E01EF diff --git a/contrib/python/fonttools/fontTools/unicodedata/ScriptExtensions.py b/contrib/python/fonttools/fontTools/unicodedata/ScriptExtensions.py index d6fe68fd2c0..ec2dbac16fa 100644 --- a/contrib/python/fonttools/fontTools/unicodedata/ScriptExtensions.py +++ b/contrib/python/fonttools/fontTools/unicodedata/ScriptExtensions.py @@ -4,9 +4,9 @@ # Source: https://unicode.org/Public/UNIDATA/ScriptExtensions.txt # License: http://unicode.org/copyright.html#License # -# ScriptExtensions-16.0.0.txt -# Date: 2024-07-30, 19:38:00 GMT -# © 2024 Unicode®, Inc. +# ScriptExtensions-17.0.0.txt +# Date: 2025-08-01, 21:42:00 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -54,9 +54,9 @@ RANGES = [ 0x0303, # .. 0x0303 ; {'Glag', 'Latn', 'Sunu', 'Syrc', 'Thai'} 0x0304, # .. 0x0304 ; {'Aghb', 'Cher', 'Copt', 'Cyrl', 'Goth', 'Grek', 'Latn', 'Osge', 'Syrc', 'Tfng', 'Todr'} 0x0305, # .. 0x0305 ; {'Copt', 'Elba', 'Glag', 'Goth', 'Kana', 'Latn'} - 0x0306, # .. 0x0306 ; {'Cyrl', 'Grek', 'Latn', 'Perm'} + 0x0306, # .. 0x0306 ; {'Cyrl', 'Grek', 'Latn', 'Perm', 'Tfng'} 0x0307, # .. 0x0307 ; {'Copt', 'Dupl', 'Hebr', 'Latn', 'Perm', 'Syrc', 'Tale', 'Tfng', 'Todr'} - 0x0308, # .. 0x0308 ; {'Armn', 'Cyrl', 'Dupl', 'Goth', 'Grek', 'Hebr', 'Latn', 'Perm', 'Syrc', 'Tale'} + 0x0308, # .. 0x0308 ; {'Armn', 'Cyrl', 'Dupl', 'Goth', 'Grek', 'Hebr', 'Latn', 'Perm', 'Syrc', 'Tale', 'Tfng'} 0x0309, # .. 0x0309 ; {'Latn', 'Tfng'} 0x030A, # .. 0x030A ; {'Dupl', 'Latn', 'Syrc'} 0x030B, # .. 0x030B ; {'Cher', 'Cyrl', 'Latn', 'Osge'} @@ -68,10 +68,8 @@ RANGES = [ 0x0311, # .. 0x0311 ; {'Cyrl', 'Latn', 'Todr'} 0x0312, # .. 0x0312 ; None 0x0313, # .. 0x0313 ; {'Grek', 'Latn', 'Perm', 'Todr'} - 0x0314, # .. 0x031F ; None - 0x0320, # .. 0x0320 ; {'Latn', 'Syrc'} - 0x0321, # .. 0x0322 ; None - 0x0323, # .. 0x0323 ; {'Cher', 'Dupl', 'Kana', 'Latn', 'Syrc'} + 0x0314, # .. 0x0322 ; None + 0x0323, # .. 0x0323 ; {'Cher', 'Dupl', 'Kana', 'Latn', 'Syrc', 'Tfng'} 0x0324, # .. 0x0324 ; {'Cher', 'Dupl', 'Latn', 'Syrc'} 0x0325, # .. 0x0325 ; {'Latn', 'Syrc'} 0x0326, # .. 0x032C ; None @@ -79,7 +77,7 @@ RANGES = [ 0x032E, # .. 0x032E ; {'Latn', 'Syrc'} 0x032F, # .. 0x032F ; None 0x0330, # .. 0x0330 ; {'Cher', 'Latn', 'Syrc'} - 0x0331, # .. 0x0331 ; {'Aghb', 'Cher', 'Goth', 'Latn', 'Sunu', 'Thai'} + 0x0331, # .. 0x0331 ; {'Aghb', 'Cher', 'Goth', 'Latn', 'Sunu', 'Syrc', 'Thai'} 0x0332, # .. 0x0341 ; None 0x0342, # .. 0x0342 ; {'Grek'} 0x0343, # .. 0x0344 ; None @@ -117,8 +115,8 @@ RANGES = [ 0x0671, # .. 0x06D3 ; None 0x06D4, # .. 0x06D4 ; {'Arab', 'Rohg'} 0x06D5, # .. 0x0950 ; None - 0x0951, # .. 0x0951 ; {'Beng', 'Deva', 'Gran', 'Gujr', 'Guru', 'Knda', 'Latn', 'Mlym', 'Orya', 'Shrd', 'Taml', 'Telu', 'Tirh'} - 0x0952, # .. 0x0952 ; {'Beng', 'Deva', 'Gran', 'Gujr', 'Guru', 'Knda', 'Latn', 'Mlym', 'Orya', 'Taml', 'Telu', 'Tirh'} + 0x0951, # .. 0x0951 ; {'Beng', 'Deva', 'Gran', 'Gujr', 'Guru', 'Knda', 'Latn', 'Mlym', 'Nand', 'Newa', 'Orya', 'Shrd', 'Taml', 'Telu', 'Tirh'} + 0x0952, # .. 0x0952 ; {'Beng', 'Deva', 'Gran', 'Gujr', 'Guru', 'Knda', 'Latn', 'Mlym', 'Newa', 'Orya', 'Taml', 'Telu', 'Tirh'} 0x0953, # .. 0x0963 ; None 0x0964, # .. 0x0964 ; {'Beng', 'Deva', 'Dogr', 'Gong', 'Gonm', 'Gran', 'Gujr', 'Guru', 'Knda', 'Mahj', 'Mlym', 'Nand', 'Onao', 'Orya', 'Sind', 'Sinh', 'Sylo', 'Takr', 'Taml', 'Telu', 'Tirh'} 0x0965, # .. 0x0965 ; {'Beng', 'Deva', 'Dogr', 'Gong', 'Gonm', 'Gran', 'Gujr', 'Gukh', 'Guru', 'Knda', 'Limb', 'Mahj', 'Mlym', 'Nand', 'Onao', 'Orya', 'Sind', 'Sinh', 'Sylo', 'Takr', 'Taml', 'Telu', 'Tirh'} @@ -151,9 +149,10 @@ RANGES = [ 0x1CD2, # .. 0x1CD2 ; {'Beng', 'Deva', 'Gran', 'Knda'} 0x1CD3, # .. 0x1CD3 ; {'Deva', 'Gran', 'Knda'} 0x1CD4, # .. 0x1CD4 ; {'Deva'} - 0x1CD5, # .. 0x1CD6 ; {'Beng', 'Deva'} - 0x1CD7, # .. 0x1CD7 ; {'Deva', 'Shrd'} - 0x1CD8, # .. 0x1CD8 ; {'Beng', 'Deva'} + 0x1CD5, # .. 0x1CD5 ; {'Beng', 'Deva', 'Newa', 'Telu', 'Tirh'} + 0x1CD6, # .. 0x1CD6 ; {'Beng', 'Deva', 'Telu'} + 0x1CD7, # .. 0x1CD7 ; {'Deva', 'Newa', 'Shrd'} + 0x1CD8, # .. 0x1CD8 ; {'Beng', 'Deva', 'Newa', 'Telu'} 0x1CD9, # .. 0x1CD9 ; {'Deva', 'Shrd'} 0x1CDA, # .. 0x1CDA ; {'Deva', 'Knda', 'Mlym', 'Orya', 'Taml', 'Telu'} 0x1CDB, # .. 0x1CDB ; {'Deva'} @@ -161,11 +160,13 @@ RANGES = [ 0x1CDE, # .. 0x1CDF ; {'Deva'} 0x1CE0, # .. 0x1CE0 ; {'Deva', 'Shrd'} 0x1CE1, # .. 0x1CE1 ; {'Beng', 'Deva'} - 0x1CE2, # .. 0x1CE8 ; {'Deva'} - 0x1CE9, # .. 0x1CE9 ; {'Deva', 'Nand'} - 0x1CEA, # .. 0x1CEA ; {'Beng', 'Deva'} - 0x1CEB, # .. 0x1CEC ; {'Deva'} - 0x1CED, # .. 0x1CED ; {'Beng', 'Deva'} + 0x1CE2, # .. 0x1CE2 ; {'Deva', 'Newa', 'Tirh'} + 0x1CE3, # .. 0x1CE8 ; {'Deva'} + 0x1CE9, # .. 0x1CE9 ; {'Deva', 'Nand', 'Newa'} + 0x1CEA, # .. 0x1CEA ; {'Beng', 'Deva', 'Shrd'} + 0x1CEB, # .. 0x1CEB ; {'Deva', 'Newa'} + 0x1CEC, # .. 0x1CEC ; {'Deva'} + 0x1CED, # .. 0x1CED ; {'Beng', 'Deva', 'Newa', 'Shrd'} 0x1CEE, # .. 0x1CF1 ; {'Deva'} 0x1CF2, # .. 0x1CF2 ; {'Beng', 'Deva', 'Gran', 'Knda', 'Mlym', 'Nand', 'Orya', 'Sinh', 'Telu', 'Tirh', 'Tutg'} 0x1CF3, # .. 0x1CF3 ; {'Deva', 'Gran'} @@ -367,7 +368,7 @@ VALUES = [ "Todr", }, # 0304..0304 {"Copt", "Elba", "Glag", "Goth", "Kana", "Latn"}, # 0305..0305 - {"Cyrl", "Grek", "Latn", "Perm"}, # 0306..0306 + {"Cyrl", "Grek", "Latn", "Perm", "Tfng"}, # 0306..0306 { "Copt", "Dupl", @@ -390,6 +391,7 @@ VALUES = [ "Perm", "Syrc", "Tale", + "Tfng", }, # 0308..0308 {"Latn", "Tfng"}, # 0309..0309 {"Dupl", "Latn", "Syrc"}, # 030A..030A @@ -402,10 +404,8 @@ VALUES = [ {"Cyrl", "Latn", "Todr"}, # 0311..0311 None, # 0312..0312 {"Grek", "Latn", "Perm", "Todr"}, # 0313..0313 - None, # 0314..031F - {"Latn", "Syrc"}, # 0320..0320 - None, # 0321..0322 - {"Cher", "Dupl", "Kana", "Latn", "Syrc"}, # 0323..0323 + None, # 0314..0322 + {"Cher", "Dupl", "Kana", "Latn", "Syrc", "Tfng"}, # 0323..0323 {"Cher", "Dupl", "Latn", "Syrc"}, # 0324..0324 {"Latn", "Syrc"}, # 0325..0325 None, # 0326..032C @@ -413,7 +413,7 @@ VALUES = [ {"Latn", "Syrc"}, # 032E..032E None, # 032F..032F {"Cher", "Latn", "Syrc"}, # 0330..0330 - {"Aghb", "Cher", "Goth", "Latn", "Sunu", "Thai"}, # 0331..0331 + {"Aghb", "Cher", "Goth", "Latn", "Sunu", "Syrc", "Thai"}, # 0331..0331 None, # 0332..0341 {"Grek"}, # 0342..0342 None, # 0343..0344 @@ -470,6 +470,8 @@ VALUES = [ "Knda", "Latn", "Mlym", + "Nand", + "Newa", "Orya", "Shrd", "Taml", @@ -485,6 +487,7 @@ VALUES = [ "Knda", "Latn", "Mlym", + "Newa", "Orya", "Taml", "Telu", @@ -568,9 +571,10 @@ VALUES = [ {"Beng", "Deva", "Gran", "Knda"}, # 1CD2..1CD2 {"Deva", "Gran", "Knda"}, # 1CD3..1CD3 {"Deva"}, # 1CD4..1CD4 - {"Beng", "Deva"}, # 1CD5..1CD6 - {"Deva", "Shrd"}, # 1CD7..1CD7 - {"Beng", "Deva"}, # 1CD8..1CD8 + {"Beng", "Deva", "Newa", "Telu", "Tirh"}, # 1CD5..1CD5 + {"Beng", "Deva", "Telu"}, # 1CD6..1CD6 + {"Deva", "Newa", "Shrd"}, # 1CD7..1CD7 + {"Beng", "Deva", "Newa", "Telu"}, # 1CD8..1CD8 {"Deva", "Shrd"}, # 1CD9..1CD9 {"Deva", "Knda", "Mlym", "Orya", "Taml", "Telu"}, # 1CDA..1CDA {"Deva"}, # 1CDB..1CDB @@ -578,11 +582,13 @@ VALUES = [ {"Deva"}, # 1CDE..1CDF {"Deva", "Shrd"}, # 1CE0..1CE0 {"Beng", "Deva"}, # 1CE1..1CE1 - {"Deva"}, # 1CE2..1CE8 - {"Deva", "Nand"}, # 1CE9..1CE9 - {"Beng", "Deva"}, # 1CEA..1CEA - {"Deva"}, # 1CEB..1CEC - {"Beng", "Deva"}, # 1CED..1CED + {"Deva", "Newa", "Tirh"}, # 1CE2..1CE2 + {"Deva"}, # 1CE3..1CE8 + {"Deva", "Nand", "Newa"}, # 1CE9..1CE9 + {"Beng", "Deva", "Shrd"}, # 1CEA..1CEA + {"Deva", "Newa"}, # 1CEB..1CEB + {"Deva"}, # 1CEC..1CEC + {"Beng", "Deva", "Newa", "Shrd"}, # 1CED..1CED {"Deva"}, # 1CEE..1CF1 { "Beng", diff --git a/contrib/python/fonttools/fontTools/unicodedata/Scripts.py b/contrib/python/fonttools/fontTools/unicodedata/Scripts.py index 3282cc69b72..dac10667b42 100644 --- a/contrib/python/fonttools/fontTools/unicodedata/Scripts.py +++ b/contrib/python/fonttools/fontTools/unicodedata/Scripts.py @@ -4,9 +4,9 @@ # Source: https://unicode.org/Public/UNIDATA/Scripts.txt # License: http://unicode.org/copyright.html#License # -# Scripts-16.0.0.txt -# Date: 2024-04-30, 21:48:40 GMT -# © 2024 Unicode®, Inc. +# Scripts-17.0.0.txt +# Date: 2025-07-24, 13:28:55 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -115,9 +115,7 @@ RANGES = [ 0x085F, # .. 0x085F ; Unknown 0x0860, # .. 0x086A ; Syriac 0x086B, # .. 0x086F ; Unknown - 0x0870, # .. 0x088E ; Arabic - 0x088F, # .. 0x088F ; Unknown - 0x0890, # .. 0x0891 ; Arabic + 0x0870, # .. 0x0891 ; Arabic 0x0892, # .. 0x0896 ; Unknown 0x0897, # .. 0x08E1 ; Arabic 0x08E2, # .. 0x08E2 ; Common @@ -292,8 +290,8 @@ RANGES = [ 0x0C55, # .. 0x0C56 ; Telugu 0x0C57, # .. 0x0C57 ; Unknown 0x0C58, # .. 0x0C5A ; Telugu - 0x0C5B, # .. 0x0C5C ; Unknown - 0x0C5D, # .. 0x0C5D ; Telugu + 0x0C5B, # .. 0x0C5B ; Unknown + 0x0C5C, # .. 0x0C5D ; Telugu 0x0C5E, # .. 0x0C5F ; Unknown 0x0C60, # .. 0x0C63 ; Telugu 0x0C64, # .. 0x0C65 ; Unknown @@ -317,8 +315,8 @@ RANGES = [ 0x0CCA, # .. 0x0CCD ; Kannada 0x0CCE, # .. 0x0CD4 ; Unknown 0x0CD5, # .. 0x0CD6 ; Kannada - 0x0CD7, # .. 0x0CDC ; Unknown - 0x0CDD, # .. 0x0CDE ; Kannada + 0x0CD7, # .. 0x0CDB ; Unknown + 0x0CDC, # .. 0x0CDE ; Kannada 0x0CDF, # .. 0x0CDF ; Unknown 0x0CE0, # .. 0x0CE3 ; Kannada 0x0CE4, # .. 0x0CE5 ; Unknown @@ -529,8 +527,10 @@ RANGES = [ 0x1A9A, # .. 0x1A9F ; Unknown 0x1AA0, # .. 0x1AAD ; Tai_Tham 0x1AAE, # .. 0x1AAF ; Unknown - 0x1AB0, # .. 0x1ACE ; Inherited - 0x1ACF, # .. 0x1AFF ; Unknown + 0x1AB0, # .. 0x1ADD ; Inherited + 0x1ADE, # .. 0x1ADF ; Unknown + 0x1AE0, # .. 0x1AEB ; Inherited + 0x1AEC, # .. 0x1AFF ; Unknown 0x1B00, # .. 0x1B4C ; Balinese 0x1B4D, # .. 0x1B4D ; Unknown 0x1B4E, # .. 0x1B7F ; Balinese @@ -622,8 +622,8 @@ RANGES = [ 0x208F, # .. 0x208F ; Unknown 0x2090, # .. 0x209C ; Latin 0x209D, # .. 0x209F ; Unknown - 0x20A0, # .. 0x20C0 ; Common - 0x20C1, # .. 0x20CF ; Unknown + 0x20A0, # .. 0x20C1 ; Common + 0x20C2, # .. 0x20CF ; Unknown 0x20D0, # .. 0x20F0 ; Inherited 0x20F1, # .. 0x20FF ; Unknown 0x2100, # .. 0x2125 ; Common @@ -646,9 +646,7 @@ RANGES = [ 0x2800, # .. 0x28FF ; Braille 0x2900, # .. 0x2B73 ; Common 0x2B74, # .. 0x2B75 ; Unknown - 0x2B76, # .. 0x2B95 ; Common - 0x2B96, # .. 0x2B96 ; Unknown - 0x2B97, # .. 0x2BFF ; Common + 0x2B76, # .. 0x2BFF ; Common 0x2C00, # .. 0x2C5F ; Glagolitic 0x2C60, # .. 0x2C7F ; Latin 0x2C80, # .. 0x2CF3 ; Coptic @@ -749,15 +747,9 @@ RANGES = [ 0xA700, # .. 0xA721 ; Common 0xA722, # .. 0xA787 ; Latin 0xA788, # .. 0xA78A ; Common - 0xA78B, # .. 0xA7CD ; Latin - 0xA7CE, # .. 0xA7CF ; Unknown - 0xA7D0, # .. 0xA7D1 ; Latin - 0xA7D2, # .. 0xA7D2 ; Unknown - 0xA7D3, # .. 0xA7D3 ; Latin - 0xA7D4, # .. 0xA7D4 ; Unknown - 0xA7D5, # .. 0xA7DC ; Latin - 0xA7DD, # .. 0xA7F1 ; Unknown - 0xA7F2, # .. 0xA7FF ; Latin + 0xA78B, # .. 0xA7DC ; Latin + 0xA7DD, # .. 0xA7F0 ; Unknown + 0xA7F1, # .. 0xA7FF ; Latin 0xA800, # .. 0xA82C ; Syloti_Nagri 0xA82D, # .. 0xA82F ; Unknown 0xA830, # .. 0xA839 ; Common @@ -845,15 +837,9 @@ RANGES = [ 0xFB43, # .. 0xFB44 ; Hebrew 0xFB45, # .. 0xFB45 ; Unknown 0xFB46, # .. 0xFB4F ; Hebrew - 0xFB50, # .. 0xFBC2 ; Arabic - 0xFBC3, # .. 0xFBD2 ; Unknown - 0xFBD3, # .. 0xFD3D ; Arabic + 0xFB50, # .. 0xFD3D ; Arabic 0xFD3E, # .. 0xFD3F ; Common - 0xFD40, # .. 0xFD8F ; Arabic - 0xFD90, # .. 0xFD91 ; Unknown - 0xFD92, # .. 0xFDC7 ; Arabic - 0xFDC8, # .. 0xFDCE ; Unknown - 0xFDCF, # .. 0xFDCF ; Arabic + 0xFD40, # .. 0xFDCF ; Arabic 0xFDD0, # .. 0xFDEF ; Unknown 0xFDF0, # .. 0xFDFF ; Arabic 0xFE00, # .. 0xFE0F ; Inherited @@ -1022,7 +1008,8 @@ RANGES = [ 0x10920, # .. 0x10939 ; Lydian 0x1093A, # .. 0x1093E ; Unknown 0x1093F, # .. 0x1093F ; Lydian - 0x10940, # .. 0x1097F ; Unknown + 0x10940, # .. 0x10959 ; Sidetic + 0x1095A, # .. 0x1097F ; Unknown 0x10980, # .. 0x1099F ; Meroitic_Hieroglyphs 0x109A0, # .. 0x109B7 ; Meroitic_Cursive 0x109B8, # .. 0x109BB ; Unknown @@ -1092,9 +1079,11 @@ RANGES = [ 0x10EAE, # .. 0x10EAF ; Unknown 0x10EB0, # .. 0x10EB1 ; Yezidi 0x10EB2, # .. 0x10EC1 ; Unknown - 0x10EC2, # .. 0x10EC4 ; Arabic - 0x10EC5, # .. 0x10EFB ; Unknown - 0x10EFC, # .. 0x10EFF ; Arabic + 0x10EC2, # .. 0x10EC7 ; Arabic + 0x10EC8, # .. 0x10ECF ; Unknown + 0x10ED0, # .. 0x10ED8 ; Arabic + 0x10ED9, # .. 0x10EF9 ; Unknown + 0x10EFA, # .. 0x10EFF ; Arabic 0x10F00, # .. 0x10F27 ; Old_Sogdian 0x10F28, # .. 0x10F2F ; Unknown 0x10F30, # .. 0x10F59 ; Sogdian @@ -1264,7 +1253,9 @@ RANGES = [ 0x11AC0, # .. 0x11AF8 ; Pau_Cin_Hau 0x11AF9, # .. 0x11AFF ; Unknown 0x11B00, # .. 0x11B09 ; Devanagari - 0x11B0A, # .. 0x11BBF ; Unknown + 0x11B0A, # .. 0x11B5F ; Unknown + 0x11B60, # .. 0x11B67 ; Sharada + 0x11B68, # .. 0x11BBF ; Unknown 0x11BC0, # .. 0x11BE1 ; Sunuwar 0x11BE2, # .. 0x11BEF ; Unknown 0x11BF0, # .. 0x11BF9 ; Sunuwar @@ -1308,7 +1299,11 @@ RANGES = [ 0x11D93, # .. 0x11D98 ; Gunjala_Gondi 0x11D99, # .. 0x11D9F ; Unknown 0x11DA0, # .. 0x11DA9 ; Gunjala_Gondi - 0x11DAA, # .. 0x11EDF ; Unknown + 0x11DAA, # .. 0x11DAF ; Unknown + 0x11DB0, # .. 0x11DDB ; Tolong_Siki + 0x11DDC, # .. 0x11DDF ; Unknown + 0x11DE0, # .. 0x11DE9 ; Tolong_Siki + 0x11DEA, # .. 0x11EDF ; Unknown 0x11EE0, # .. 0x11EF8 ; Makasar 0x11EF9, # .. 0x11EFF ; Unknown 0x11F00, # .. 0x11F10 ; Kawi @@ -1368,7 +1363,11 @@ RANGES = [ 0x16D40, # .. 0x16D79 ; Kirat_Rai 0x16D7A, # .. 0x16E3F ; Unknown 0x16E40, # .. 0x16E9A ; Medefaidrin - 0x16E9B, # .. 0x16EFF ; Unknown + 0x16E9B, # .. 0x16E9F ; Unknown + 0x16EA0, # .. 0x16EB8 ; Beria_Erfe + 0x16EB9, # .. 0x16EBA ; Unknown + 0x16EBB, # .. 0x16ED3 ; Beria_Erfe + 0x16ED4, # .. 0x16EFF ; Unknown 0x16F00, # .. 0x16F4A ; Miao 0x16F4B, # .. 0x16F4E ; Unknown 0x16F4F, # .. 0x16F87 ; Miao @@ -1380,16 +1379,16 @@ RANGES = [ 0x16FE2, # .. 0x16FE3 ; Han 0x16FE4, # .. 0x16FE4 ; Khitan_Small_Script 0x16FE5, # .. 0x16FEF ; Unknown - 0x16FF0, # .. 0x16FF1 ; Han - 0x16FF2, # .. 0x16FFF ; Unknown - 0x17000, # .. 0x187F7 ; Tangut - 0x187F8, # .. 0x187FF ; Unknown - 0x18800, # .. 0x18AFF ; Tangut + 0x16FF0, # .. 0x16FF6 ; Han + 0x16FF7, # .. 0x16FFF ; Unknown + 0x17000, # .. 0x18AFF ; Tangut 0x18B00, # .. 0x18CD5 ; Khitan_Small_Script 0x18CD6, # .. 0x18CFE ; Unknown 0x18CFF, # .. 0x18CFF ; Khitan_Small_Script - 0x18D00, # .. 0x18D08 ; Tangut - 0x18D09, # .. 0x1AFEF ; Unknown + 0x18D00, # .. 0x18D1E ; Tangut + 0x18D1F, # .. 0x18D7F ; Unknown + 0x18D80, # .. 0x18DF2 ; Tangut + 0x18DF3, # .. 0x1AFEF ; Unknown 0x1AFF0, # .. 0x1AFF3 ; Katakana 0x1AFF4, # .. 0x1AFF4 ; Unknown 0x1AFF5, # .. 0x1AFFB ; Katakana @@ -1421,10 +1420,14 @@ RANGES = [ 0x1BC9C, # .. 0x1BC9F ; Duployan 0x1BCA0, # .. 0x1BCA3 ; Common 0x1BCA4, # .. 0x1CBFF ; Unknown - 0x1CC00, # .. 0x1CCF9 ; Common - 0x1CCFA, # .. 0x1CCFF ; Unknown + 0x1CC00, # .. 0x1CCFC ; Common + 0x1CCFD, # .. 0x1CCFF ; Unknown 0x1CD00, # .. 0x1CEB3 ; Common - 0x1CEB4, # .. 0x1CEFF ; Unknown + 0x1CEB4, # .. 0x1CEB9 ; Unknown + 0x1CEBA, # .. 0x1CED0 ; Common + 0x1CED1, # .. 0x1CEDF ; Unknown + 0x1CEE0, # .. 0x1CEF0 ; Common + 0x1CEF1, # .. 0x1CEFF ; Unknown 0x1CF00, # .. 0x1CF2D ; Inherited 0x1CF2E, # .. 0x1CF2F ; Unknown 0x1CF30, # .. 0x1CF46 ; Inherited @@ -1539,7 +1542,13 @@ RANGES = [ 0x1E5D0, # .. 0x1E5FA ; Ol_Onal 0x1E5FB, # .. 0x1E5FE ; Unknown 0x1E5FF, # .. 0x1E5FF ; Ol_Onal - 0x1E600, # .. 0x1E7DF ; Unknown + 0x1E600, # .. 0x1E6BF ; Unknown + 0x1E6C0, # .. 0x1E6DE ; Tai_Yo + 0x1E6DF, # .. 0x1E6DF ; Unknown + 0x1E6E0, # .. 0x1E6F5 ; Tai_Yo + 0x1E6F6, # .. 0x1E6FD ; Unknown + 0x1E6FE, # .. 0x1E6FF ; Tai_Yo + 0x1E700, # .. 0x1E7DF ; Unknown 0x1E7E0, # .. 0x1E7E6 ; Ethiopic 0x1E7E7, # .. 0x1E7E7 ; Unknown 0x1E7E8, # .. 0x1E7EB ; Ethiopic @@ -1656,15 +1665,13 @@ RANGES = [ 0x1F252, # .. 0x1F25F ; Unknown 0x1F260, # .. 0x1F265 ; Common 0x1F266, # .. 0x1F2FF ; Unknown - 0x1F300, # .. 0x1F6D7 ; Common - 0x1F6D8, # .. 0x1F6DB ; Unknown + 0x1F300, # .. 0x1F6D8 ; Common + 0x1F6D9, # .. 0x1F6DB ; Unknown 0x1F6DC, # .. 0x1F6EC ; Common 0x1F6ED, # .. 0x1F6EF ; Unknown 0x1F6F0, # .. 0x1F6FC ; Common 0x1F6FD, # .. 0x1F6FF ; Unknown - 0x1F700, # .. 0x1F776 ; Common - 0x1F777, # .. 0x1F77A ; Unknown - 0x1F77B, # .. 0x1F7D9 ; Common + 0x1F700, # .. 0x1F7D9 ; Common 0x1F7DA, # .. 0x1F7DF ; Unknown 0x1F7E0, # .. 0x1F7EB ; Common 0x1F7EC, # .. 0x1F7EF ; Unknown @@ -1683,35 +1690,37 @@ RANGES = [ 0x1F8B0, # .. 0x1F8BB ; Common 0x1F8BC, # .. 0x1F8BF ; Unknown 0x1F8C0, # .. 0x1F8C1 ; Common - 0x1F8C2, # .. 0x1F8FF ; Unknown - 0x1F900, # .. 0x1FA53 ; Common - 0x1FA54, # .. 0x1FA5F ; Unknown + 0x1F8C2, # .. 0x1F8CF ; Unknown + 0x1F8D0, # .. 0x1F8D8 ; Common + 0x1F8D9, # .. 0x1F8FF ; Unknown + 0x1F900, # .. 0x1FA57 ; Common + 0x1FA58, # .. 0x1FA5F ; Unknown 0x1FA60, # .. 0x1FA6D ; Common 0x1FA6E, # .. 0x1FA6F ; Unknown 0x1FA70, # .. 0x1FA7C ; Common 0x1FA7D, # .. 0x1FA7F ; Unknown - 0x1FA80, # .. 0x1FA89 ; Common - 0x1FA8A, # .. 0x1FA8E ; Unknown - 0x1FA8F, # .. 0x1FAC6 ; Common - 0x1FAC7, # .. 0x1FACD ; Unknown - 0x1FACE, # .. 0x1FADC ; Common + 0x1FA80, # .. 0x1FA8A ; Common + 0x1FA8B, # .. 0x1FA8D ; Unknown + 0x1FA8E, # .. 0x1FAC6 ; Common + 0x1FAC7, # .. 0x1FAC7 ; Unknown + 0x1FAC8, # .. 0x1FAC8 ; Common + 0x1FAC9, # .. 0x1FACC ; Unknown + 0x1FACD, # .. 0x1FADC ; Common 0x1FADD, # .. 0x1FADE ; Unknown - 0x1FADF, # .. 0x1FAE9 ; Common - 0x1FAEA, # .. 0x1FAEF ; Unknown - 0x1FAF0, # .. 0x1FAF8 ; Common + 0x1FADF, # .. 0x1FAEA ; Common + 0x1FAEB, # .. 0x1FAEE ; Unknown + 0x1FAEF, # .. 0x1FAF8 ; Common 0x1FAF9, # .. 0x1FAFF ; Unknown 0x1FB00, # .. 0x1FB92 ; Common 0x1FB93, # .. 0x1FB93 ; Unknown - 0x1FB94, # .. 0x1FBF9 ; Common - 0x1FBFA, # .. 0x1FFFF ; Unknown + 0x1FB94, # .. 0x1FBFA ; Common + 0x1FBFB, # .. 0x1FFFF ; Unknown 0x20000, # .. 0x2A6DF ; Han 0x2A6E0, # .. 0x2A6FF ; Unknown - 0x2A700, # .. 0x2B739 ; Han - 0x2B73A, # .. 0x2B73F ; Unknown - 0x2B740, # .. 0x2B81D ; Han + 0x2A700, # .. 0x2B81D ; Han 0x2B81E, # .. 0x2B81F ; Unknown - 0x2B820, # .. 0x2CEA1 ; Han - 0x2CEA2, # .. 0x2CEAF ; Unknown + 0x2B820, # .. 0x2CEAD ; Han + 0x2CEAE, # .. 0x2CEAF ; Unknown 0x2CEB0, # .. 0x2EBE0 ; Han 0x2EBE1, # .. 0x2EBEF ; Unknown 0x2EBF0, # .. 0x2EE5D ; Han @@ -1720,8 +1729,8 @@ RANGES = [ 0x2FA1E, # .. 0x2FFFF ; Unknown 0x30000, # .. 0x3134A ; Han 0x3134B, # .. 0x3134F ; Unknown - 0x31350, # .. 0x323AF ; Han - 0x323B0, # .. 0xE0000 ; Unknown + 0x31350, # .. 0x33479 ; Han + 0x3347A, # .. 0xE0000 ; Unknown 0xE0001, # .. 0xE0001 ; Common 0xE0002, # .. 0xE001F ; Unknown 0xE0020, # .. 0xE007F ; Common @@ -1826,9 +1835,7 @@ VALUES = [ "Zzzz", # 085F..085F ; Unknown "Syrc", # 0860..086A ; Syriac "Zzzz", # 086B..086F ; Unknown - "Arab", # 0870..088E ; Arabic - "Zzzz", # 088F..088F ; Unknown - "Arab", # 0890..0891 ; Arabic + "Arab", # 0870..0891 ; Arabic "Zzzz", # 0892..0896 ; Unknown "Arab", # 0897..08E1 ; Arabic "Zyyy", # 08E2..08E2 ; Common @@ -2003,8 +2010,8 @@ VALUES = [ "Telu", # 0C55..0C56 ; Telugu "Zzzz", # 0C57..0C57 ; Unknown "Telu", # 0C58..0C5A ; Telugu - "Zzzz", # 0C5B..0C5C ; Unknown - "Telu", # 0C5D..0C5D ; Telugu + "Zzzz", # 0C5B..0C5B ; Unknown + "Telu", # 0C5C..0C5D ; Telugu "Zzzz", # 0C5E..0C5F ; Unknown "Telu", # 0C60..0C63 ; Telugu "Zzzz", # 0C64..0C65 ; Unknown @@ -2028,8 +2035,8 @@ VALUES = [ "Knda", # 0CCA..0CCD ; Kannada "Zzzz", # 0CCE..0CD4 ; Unknown "Knda", # 0CD5..0CD6 ; Kannada - "Zzzz", # 0CD7..0CDC ; Unknown - "Knda", # 0CDD..0CDE ; Kannada + "Zzzz", # 0CD7..0CDB ; Unknown + "Knda", # 0CDC..0CDE ; Kannada "Zzzz", # 0CDF..0CDF ; Unknown "Knda", # 0CE0..0CE3 ; Kannada "Zzzz", # 0CE4..0CE5 ; Unknown @@ -2240,8 +2247,10 @@ VALUES = [ "Zzzz", # 1A9A..1A9F ; Unknown "Lana", # 1AA0..1AAD ; Tai_Tham "Zzzz", # 1AAE..1AAF ; Unknown - "Zinh", # 1AB0..1ACE ; Inherited - "Zzzz", # 1ACF..1AFF ; Unknown + "Zinh", # 1AB0..1ADD ; Inherited + "Zzzz", # 1ADE..1ADF ; Unknown + "Zinh", # 1AE0..1AEB ; Inherited + "Zzzz", # 1AEC..1AFF ; Unknown "Bali", # 1B00..1B4C ; Balinese "Zzzz", # 1B4D..1B4D ; Unknown "Bali", # 1B4E..1B7F ; Balinese @@ -2333,8 +2342,8 @@ VALUES = [ "Zzzz", # 208F..208F ; Unknown "Latn", # 2090..209C ; Latin "Zzzz", # 209D..209F ; Unknown - "Zyyy", # 20A0..20C0 ; Common - "Zzzz", # 20C1..20CF ; Unknown + "Zyyy", # 20A0..20C1 ; Common + "Zzzz", # 20C2..20CF ; Unknown "Zinh", # 20D0..20F0 ; Inherited "Zzzz", # 20F1..20FF ; Unknown "Zyyy", # 2100..2125 ; Common @@ -2357,9 +2366,7 @@ VALUES = [ "Brai", # 2800..28FF ; Braille "Zyyy", # 2900..2B73 ; Common "Zzzz", # 2B74..2B75 ; Unknown - "Zyyy", # 2B76..2B95 ; Common - "Zzzz", # 2B96..2B96 ; Unknown - "Zyyy", # 2B97..2BFF ; Common + "Zyyy", # 2B76..2BFF ; Common "Glag", # 2C00..2C5F ; Glagolitic "Latn", # 2C60..2C7F ; Latin "Copt", # 2C80..2CF3 ; Coptic @@ -2460,15 +2467,9 @@ VALUES = [ "Zyyy", # A700..A721 ; Common "Latn", # A722..A787 ; Latin "Zyyy", # A788..A78A ; Common - "Latn", # A78B..A7CD ; Latin - "Zzzz", # A7CE..A7CF ; Unknown - "Latn", # A7D0..A7D1 ; Latin - "Zzzz", # A7D2..A7D2 ; Unknown - "Latn", # A7D3..A7D3 ; Latin - "Zzzz", # A7D4..A7D4 ; Unknown - "Latn", # A7D5..A7DC ; Latin - "Zzzz", # A7DD..A7F1 ; Unknown - "Latn", # A7F2..A7FF ; Latin + "Latn", # A78B..A7DC ; Latin + "Zzzz", # A7DD..A7F0 ; Unknown + "Latn", # A7F1..A7FF ; Latin "Sylo", # A800..A82C ; Syloti_Nagri "Zzzz", # A82D..A82F ; Unknown "Zyyy", # A830..A839 ; Common @@ -2556,15 +2557,9 @@ VALUES = [ "Hebr", # FB43..FB44 ; Hebrew "Zzzz", # FB45..FB45 ; Unknown "Hebr", # FB46..FB4F ; Hebrew - "Arab", # FB50..FBC2 ; Arabic - "Zzzz", # FBC3..FBD2 ; Unknown - "Arab", # FBD3..FD3D ; Arabic + "Arab", # FB50..FD3D ; Arabic "Zyyy", # FD3E..FD3F ; Common - "Arab", # FD40..FD8F ; Arabic - "Zzzz", # FD90..FD91 ; Unknown - "Arab", # FD92..FDC7 ; Arabic - "Zzzz", # FDC8..FDCE ; Unknown - "Arab", # FDCF..FDCF ; Arabic + "Arab", # FD40..FDCF ; Arabic "Zzzz", # FDD0..FDEF ; Unknown "Arab", # FDF0..FDFF ; Arabic "Zinh", # FE00..FE0F ; Inherited @@ -2733,7 +2728,8 @@ VALUES = [ "Lydi", # 10920..10939 ; Lydian "Zzzz", # 1093A..1093E ; Unknown "Lydi", # 1093F..1093F ; Lydian - "Zzzz", # 10940..1097F ; Unknown + "Sidt", # 10940..10959 ; Sidetic + "Zzzz", # 1095A..1097F ; Unknown "Mero", # 10980..1099F ; Meroitic_Hieroglyphs "Merc", # 109A0..109B7 ; Meroitic_Cursive "Zzzz", # 109B8..109BB ; Unknown @@ -2803,9 +2799,11 @@ VALUES = [ "Zzzz", # 10EAE..10EAF ; Unknown "Yezi", # 10EB0..10EB1 ; Yezidi "Zzzz", # 10EB2..10EC1 ; Unknown - "Arab", # 10EC2..10EC4 ; Arabic - "Zzzz", # 10EC5..10EFB ; Unknown - "Arab", # 10EFC..10EFF ; Arabic + "Arab", # 10EC2..10EC7 ; Arabic + "Zzzz", # 10EC8..10ECF ; Unknown + "Arab", # 10ED0..10ED8 ; Arabic + "Zzzz", # 10ED9..10EF9 ; Unknown + "Arab", # 10EFA..10EFF ; Arabic "Sogo", # 10F00..10F27 ; Old_Sogdian "Zzzz", # 10F28..10F2F ; Unknown "Sogd", # 10F30..10F59 ; Sogdian @@ -2975,7 +2973,9 @@ VALUES = [ "Pauc", # 11AC0..11AF8 ; Pau_Cin_Hau "Zzzz", # 11AF9..11AFF ; Unknown "Deva", # 11B00..11B09 ; Devanagari - "Zzzz", # 11B0A..11BBF ; Unknown + "Zzzz", # 11B0A..11B5F ; Unknown + "Shrd", # 11B60..11B67 ; Sharada + "Zzzz", # 11B68..11BBF ; Unknown "Sunu", # 11BC0..11BE1 ; Sunuwar "Zzzz", # 11BE2..11BEF ; Unknown "Sunu", # 11BF0..11BF9 ; Sunuwar @@ -3019,7 +3019,11 @@ VALUES = [ "Gong", # 11D93..11D98 ; Gunjala_Gondi "Zzzz", # 11D99..11D9F ; Unknown "Gong", # 11DA0..11DA9 ; Gunjala_Gondi - "Zzzz", # 11DAA..11EDF ; Unknown + "Zzzz", # 11DAA..11DAF ; Unknown + "Tols", # 11DB0..11DDB ; Tolong_Siki + "Zzzz", # 11DDC..11DDF ; Unknown + "Tols", # 11DE0..11DE9 ; Tolong_Siki + "Zzzz", # 11DEA..11EDF ; Unknown "Maka", # 11EE0..11EF8 ; Makasar "Zzzz", # 11EF9..11EFF ; Unknown "Kawi", # 11F00..11F10 ; Kawi @@ -3079,7 +3083,11 @@ VALUES = [ "Krai", # 16D40..16D79 ; Kirat_Rai "Zzzz", # 16D7A..16E3F ; Unknown "Medf", # 16E40..16E9A ; Medefaidrin - "Zzzz", # 16E9B..16EFF ; Unknown + "Zzzz", # 16E9B..16E9F ; Unknown + "Berf", # 16EA0..16EB8 ; Beria_Erfe + "Zzzz", # 16EB9..16EBA ; Unknown + "Berf", # 16EBB..16ED3 ; Beria_Erfe + "Zzzz", # 16ED4..16EFF ; Unknown "Plrd", # 16F00..16F4A ; Miao "Zzzz", # 16F4B..16F4E ; Unknown "Plrd", # 16F4F..16F87 ; Miao @@ -3091,16 +3099,16 @@ VALUES = [ "Hani", # 16FE2..16FE3 ; Han "Kits", # 16FE4..16FE4 ; Khitan_Small_Script "Zzzz", # 16FE5..16FEF ; Unknown - "Hani", # 16FF0..16FF1 ; Han - "Zzzz", # 16FF2..16FFF ; Unknown - "Tang", # 17000..187F7 ; Tangut - "Zzzz", # 187F8..187FF ; Unknown - "Tang", # 18800..18AFF ; Tangut + "Hani", # 16FF0..16FF6 ; Han + "Zzzz", # 16FF7..16FFF ; Unknown + "Tang", # 17000..18AFF ; Tangut "Kits", # 18B00..18CD5 ; Khitan_Small_Script "Zzzz", # 18CD6..18CFE ; Unknown "Kits", # 18CFF..18CFF ; Khitan_Small_Script - "Tang", # 18D00..18D08 ; Tangut - "Zzzz", # 18D09..1AFEF ; Unknown + "Tang", # 18D00..18D1E ; Tangut + "Zzzz", # 18D1F..18D7F ; Unknown + "Tang", # 18D80..18DF2 ; Tangut + "Zzzz", # 18DF3..1AFEF ; Unknown "Kana", # 1AFF0..1AFF3 ; Katakana "Zzzz", # 1AFF4..1AFF4 ; Unknown "Kana", # 1AFF5..1AFFB ; Katakana @@ -3132,10 +3140,14 @@ VALUES = [ "Dupl", # 1BC9C..1BC9F ; Duployan "Zyyy", # 1BCA0..1BCA3 ; Common "Zzzz", # 1BCA4..1CBFF ; Unknown - "Zyyy", # 1CC00..1CCF9 ; Common - "Zzzz", # 1CCFA..1CCFF ; Unknown + "Zyyy", # 1CC00..1CCFC ; Common + "Zzzz", # 1CCFD..1CCFF ; Unknown "Zyyy", # 1CD00..1CEB3 ; Common - "Zzzz", # 1CEB4..1CEFF ; Unknown + "Zzzz", # 1CEB4..1CEB9 ; Unknown + "Zyyy", # 1CEBA..1CED0 ; Common + "Zzzz", # 1CED1..1CEDF ; Unknown + "Zyyy", # 1CEE0..1CEF0 ; Common + "Zzzz", # 1CEF1..1CEFF ; Unknown "Zinh", # 1CF00..1CF2D ; Inherited "Zzzz", # 1CF2E..1CF2F ; Unknown "Zinh", # 1CF30..1CF46 ; Inherited @@ -3250,7 +3262,13 @@ VALUES = [ "Onao", # 1E5D0..1E5FA ; Ol_Onal "Zzzz", # 1E5FB..1E5FE ; Unknown "Onao", # 1E5FF..1E5FF ; Ol_Onal - "Zzzz", # 1E600..1E7DF ; Unknown + "Zzzz", # 1E600..1E6BF ; Unknown + "Tayo", # 1E6C0..1E6DE ; Tai_Yo + "Zzzz", # 1E6DF..1E6DF ; Unknown + "Tayo", # 1E6E0..1E6F5 ; Tai_Yo + "Zzzz", # 1E6F6..1E6FD ; Unknown + "Tayo", # 1E6FE..1E6FF ; Tai_Yo + "Zzzz", # 1E700..1E7DF ; Unknown "Ethi", # 1E7E0..1E7E6 ; Ethiopic "Zzzz", # 1E7E7..1E7E7 ; Unknown "Ethi", # 1E7E8..1E7EB ; Ethiopic @@ -3367,15 +3385,13 @@ VALUES = [ "Zzzz", # 1F252..1F25F ; Unknown "Zyyy", # 1F260..1F265 ; Common "Zzzz", # 1F266..1F2FF ; Unknown - "Zyyy", # 1F300..1F6D7 ; Common - "Zzzz", # 1F6D8..1F6DB ; Unknown + "Zyyy", # 1F300..1F6D8 ; Common + "Zzzz", # 1F6D9..1F6DB ; Unknown "Zyyy", # 1F6DC..1F6EC ; Common "Zzzz", # 1F6ED..1F6EF ; Unknown "Zyyy", # 1F6F0..1F6FC ; Common "Zzzz", # 1F6FD..1F6FF ; Unknown - "Zyyy", # 1F700..1F776 ; Common - "Zzzz", # 1F777..1F77A ; Unknown - "Zyyy", # 1F77B..1F7D9 ; Common + "Zyyy", # 1F700..1F7D9 ; Common "Zzzz", # 1F7DA..1F7DF ; Unknown "Zyyy", # 1F7E0..1F7EB ; Common "Zzzz", # 1F7EC..1F7EF ; Unknown @@ -3394,35 +3410,37 @@ VALUES = [ "Zyyy", # 1F8B0..1F8BB ; Common "Zzzz", # 1F8BC..1F8BF ; Unknown "Zyyy", # 1F8C0..1F8C1 ; Common - "Zzzz", # 1F8C2..1F8FF ; Unknown - "Zyyy", # 1F900..1FA53 ; Common - "Zzzz", # 1FA54..1FA5F ; Unknown + "Zzzz", # 1F8C2..1F8CF ; Unknown + "Zyyy", # 1F8D0..1F8D8 ; Common + "Zzzz", # 1F8D9..1F8FF ; Unknown + "Zyyy", # 1F900..1FA57 ; Common + "Zzzz", # 1FA58..1FA5F ; Unknown "Zyyy", # 1FA60..1FA6D ; Common "Zzzz", # 1FA6E..1FA6F ; Unknown "Zyyy", # 1FA70..1FA7C ; Common "Zzzz", # 1FA7D..1FA7F ; Unknown - "Zyyy", # 1FA80..1FA89 ; Common - "Zzzz", # 1FA8A..1FA8E ; Unknown - "Zyyy", # 1FA8F..1FAC6 ; Common - "Zzzz", # 1FAC7..1FACD ; Unknown - "Zyyy", # 1FACE..1FADC ; Common + "Zyyy", # 1FA80..1FA8A ; Common + "Zzzz", # 1FA8B..1FA8D ; Unknown + "Zyyy", # 1FA8E..1FAC6 ; Common + "Zzzz", # 1FAC7..1FAC7 ; Unknown + "Zyyy", # 1FAC8..1FAC8 ; Common + "Zzzz", # 1FAC9..1FACC ; Unknown + "Zyyy", # 1FACD..1FADC ; Common "Zzzz", # 1FADD..1FADE ; Unknown - "Zyyy", # 1FADF..1FAE9 ; Common - "Zzzz", # 1FAEA..1FAEF ; Unknown - "Zyyy", # 1FAF0..1FAF8 ; Common + "Zyyy", # 1FADF..1FAEA ; Common + "Zzzz", # 1FAEB..1FAEE ; Unknown + "Zyyy", # 1FAEF..1FAF8 ; Common "Zzzz", # 1FAF9..1FAFF ; Unknown "Zyyy", # 1FB00..1FB92 ; Common "Zzzz", # 1FB93..1FB93 ; Unknown - "Zyyy", # 1FB94..1FBF9 ; Common - "Zzzz", # 1FBFA..1FFFF ; Unknown + "Zyyy", # 1FB94..1FBFA ; Common + "Zzzz", # 1FBFB..1FFFF ; Unknown "Hani", # 20000..2A6DF ; Han "Zzzz", # 2A6E0..2A6FF ; Unknown - "Hani", # 2A700..2B739 ; Han - "Zzzz", # 2B73A..2B73F ; Unknown - "Hani", # 2B740..2B81D ; Han + "Hani", # 2A700..2B81D ; Han "Zzzz", # 2B81E..2B81F ; Unknown - "Hani", # 2B820..2CEA1 ; Han - "Zzzz", # 2CEA2..2CEAF ; Unknown + "Hani", # 2B820..2CEAD ; Han + "Zzzz", # 2CEAE..2CEAF ; Unknown "Hani", # 2CEB0..2EBE0 ; Han "Zzzz", # 2EBE1..2EBEF ; Unknown "Hani", # 2EBF0..2EE5D ; Han @@ -3431,8 +3449,8 @@ VALUES = [ "Zzzz", # 2FA1E..2FFFF ; Unknown "Hani", # 30000..3134A ; Han "Zzzz", # 3134B..3134F ; Unknown - "Hani", # 31350..323AF ; Han - "Zzzz", # 323B0..E0000 ; Unknown + "Hani", # 31350..33479 ; Han + "Zzzz", # 3347A..E0000 ; Unknown "Zyyy", # E0001..E0001 ; Common "Zzzz", # E0002..E001F ; Unknown "Zyyy", # E0020..E007F ; Common @@ -3454,6 +3472,7 @@ NAMES = { "Bass": "Bassa_Vah", "Batk": "Batak", "Beng": "Bengali", + "Berf": "Beria_Erfe", "Bhks": "Bhaiksuki", "Bopo": "Bopomofo", "Brah": "Brahmi", @@ -3573,6 +3592,7 @@ NAMES = { "Shaw": "Shavian", "Shrd": "Sharada", "Sidd": "Siddham", + "Sidt": "Sidetic", "Sind": "Khudawadi", "Sinh": "Sinhala", "Sogd": "Sogdian", @@ -3590,6 +3610,7 @@ NAMES = { "Taml": "Tamil", "Tang": "Tangut", "Tavt": "Tai_Viet", + "Tayo": "Tai_Yo", "Telu": "Telugu", "Tfng": "Tifinagh", "Tglg": "Tagalog", @@ -3599,6 +3620,7 @@ NAMES = { "Tirh": "Tirhuta", "Tnsa": "Tangsa", "Todr": "Todhri", + "Tols": "Tolong_Siki", "Toto": "Toto", "Tutg": "Tulu_Tigalari", "Ugar": "Ugaritic", diff --git a/contrib/python/fonttools/fontTools/unicodedata/__init__.py b/contrib/python/fonttools/fontTools/unicodedata/__init__.py index fb95af0a2f0..0919e793ea1 100644 --- a/contrib/python/fonttools/fontTools/unicodedata/__init__.py +++ b/contrib/python/fonttools/fontTools/unicodedata/__init__.py @@ -199,6 +199,8 @@ RTL_SCRIPTS = { "Ougr", # Old Uyghur # Unicode-16.0 additions "Gara", # Garay + # Unicode-17.0 additions + "Sidt", # Sidetic } diff --git a/contrib/python/fonttools/fontTools/varLib/__init__.py b/contrib/python/fonttools/fontTools/varLib/__init__.py index fd0875567c9..c19bd151588 100644 --- a/contrib/python/fonttools/fontTools/varLib/__init__.py +++ b/contrib/python/fonttools/fontTools/varLib/__init__.py @@ -1562,7 +1562,11 @@ def main(args=None): vf_name_to_output_path[vfs_to_build[0].name] = options.outfile else: for vf in vfs_to_build: - filename = vf.filename if vf.filename is not None else vf.name + ".{ext}" + if vf.filename is not None: + # Only use basename to prevent path traversal attacks + filename = os.path.basename(vf.filename) + else: + filename = vf.name + ".{ext}" vf_name_to_output_path[vf.name] = os.path.join(output_dir, filename) finder = MasterFinder(options.master_finder) diff --git a/contrib/python/fonttools/fontTools/varLib/instancer/__init__.py b/contrib/python/fonttools/fontTools/varLib/instancer/__init__.py index f369e404067..fa84e3a57e5 100644 --- a/contrib/python/fonttools/fontTools/varLib/instancer/__init__.py +++ b/contrib/python/fonttools/fontTools/varLib/instancer/__init__.py @@ -1780,19 +1780,6 @@ def instantiateVariableFont( instantiateFvar(varfont, axisLimits) - if "fvar" not in varfont: - if "glyf" in varfont: - if overlap == OverlapMode.KEEP_AND_SET_FLAGS: - setMacOverlapFlags(varfont["glyf"]) - elif overlap in (OverlapMode.REMOVE, OverlapMode.REMOVE_AND_IGNORE_ERRORS): - from fontTools.ttLib.removeOverlaps import removeOverlaps - - log.info("Removing overlaps from glyf table") - removeOverlaps( - varfont, - ignoreErrors=(overlap == OverlapMode.REMOVE_AND_IGNORE_ERRORS), - ) - if "OS/2" in varfont: varfont["OS/2"].recalcAvgCharWidth(varfont) @@ -1811,6 +1798,19 @@ def instantiateVariableFont( if inplace: origVarfont.__dict__ = varfont.__dict__.copy() + if "fvar" not in varfont: + if overlap == OverlapMode.KEEP_AND_SET_FLAGS: + if "glyf" in varfont: + setMacOverlapFlags(varfont["glyf"]) + elif overlap in (OverlapMode.REMOVE, OverlapMode.REMOVE_AND_IGNORE_ERRORS): + from fontTools.ttLib.removeOverlaps import removeOverlaps + + log.info("Removing glyph outlines overlaps") + removeOverlaps( + varfont, + ignoreErrors=(overlap == OverlapMode.REMOVE_AND_IGNORE_ERRORS), + ) + return varfont diff --git a/contrib/python/fonttools/ya.make b/contrib/python/fonttools/ya.make index d9d73eb7aff..d34ce34755c 100644 --- a/contrib/python/fonttools/ya.make +++ b/contrib/python/fonttools/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(4.60.1) +VERSION(4.61.0) LICENSE(MIT) |
