From 4efc7b1f73583cf9c3adab5f368f8fa2961a78a0 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Thu, 20 May 2021 17:32:46 +0100 Subject: [PATCH 01/14] README: add instructions on how to make a release to reduce the bus factor -- or maybe I should call it the 'new baby factor' --- README.rst | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/README.rst b/README.rst index 97d23e4bf..f9664b0a2 100644 --- a/README.rst +++ b/README.rst @@ -205,6 +205,31 @@ are required to unlock the extra features named "ufo", etc. * `reportlab `__: Python toolkit for generating PDFs and graphics. +How to make a new release +~~~~~~~~~~~~~~~~~~~~~ + +1) Update ``NEWS.rst`` with all the changes since the last release. Write a + changelog entry for each PR, with one or two short sentences summarizing it, + as well as links to the PR and relevant issues addressed by the PR. +2) Use semantic versioning to decide whether the new release will be a 'major', + 'minor' or 'patch' release. It's usually one of the latter two, depending on + whether new backward compatible APIs were added, or simply some bugs were fixed. +3) Run ``python setup.py release`` command from the tip of the ``main`` branch. + This bumps the package version string, extracts the changes since the latest + version from ``NEWS.rst``, and uses that text to create an annotated git tag. + It also commits an additional version bump which opens the main branch for + the subsequent developmental cycle +4) Push both the tag and commit to the upstream repository, by running the command + ``git push --follow-tags``. +5) Let the CI build the wheel and source distribution packages and verify both + get uploaded to the Python Package Index (PyPI). +6) [Optional] Go to fonttools `Github Releases `__ + page and create a new release, copy-pasting the content of the git tag + message. This way, the release notes are nicely formatted as markdown, and + users watching the repo will get an email notification. One day we shall + automate that too. + + Acknowledgements ~~~~~~~~~~~~~~~~ From 6d8a82c35803a50066aeeea97b72aa7d78dd0e1e Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Thu, 20 May 2021 17:42:38 +0100 Subject: [PATCH 02/14] make title underline long enough nice that twine catches issues with RST as well --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index f9664b0a2..645c18fb2 100644 --- a/README.rst +++ b/README.rst @@ -206,7 +206,7 @@ are required to unlock the extra features named "ufo", etc. for generating PDFs and graphics. How to make a new release -~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~ 1) Update ``NEWS.rst`` with all the changes since the last release. Write a changelog entry for each PR, with one or two short sentences summarizing it, From 61daa4519b8a5fffbd4f2ba8023f0af730ed77d9 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Thu, 20 May 2021 17:49:35 +0100 Subject: [PATCH 03/14] mention release --minor, --major and --sign options --- README.rst | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 645c18fb2..78f422ef2 100644 --- a/README.rst +++ b/README.rst @@ -215,8 +215,13 @@ How to make a new release 'minor' or 'patch' release. It's usually one of the latter two, depending on whether new backward compatible APIs were added, or simply some bugs were fixed. 3) Run ``python setup.py release`` command from the tip of the ``main`` branch. + By default this bumps the third or 'patch' digit only, unless you pass ``--major`` + or ``--minor`` to bump respectively the first or second digit. This bumps the package version string, extracts the changes since the latest - version from ``NEWS.rst``, and uses that text to create an annotated git tag. + version from ``NEWS.rst``, and uses that text to create an annotated git tag + (or a signed git tag if you pass the ``--sign`` option and your git and Github + account are configured for `signing commits `__ + using a GPG key). It also commits an additional version bump which opens the main branch for the subsequent developmental cycle 4) Push both the tag and commit to the upstream repository, by running the command From d1e2e0e3814f6f98be9dc46053ecd01d7aa13d2e Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Thu, 20 May 2021 19:19:37 +0100 Subject: [PATCH 04/14] otTables: ignore Format attribute in split.*Subst overflow-fixing methods Fixes https://github.com/fonttools/fonttools/issues/2319 --- Lib/fontTools/ttLib/tables/otTables.py | 3 --- Tests/ttLib/tables/otTables_test.py | 2 -- 2 files changed, 5 deletions(-) diff --git a/Lib/fontTools/ttLib/tables/otTables.py b/Lib/fontTools/ttLib/tables/otTables.py index b62227cc0..4c8ef04d1 100644 --- a/Lib/fontTools/ttLib/tables/otTables.py +++ b/Lib/fontTools/ttLib/tables/otTables.py @@ -1503,7 +1503,6 @@ def fixLookupOverFlows(ttf, overflowRecord): def splitMultipleSubst(oldSubTable, newSubTable, overflowRecord): ok = 1 - newSubTable.Format = oldSubTable.Format oldMapping = sorted(oldSubTable.mapping.items()) oldLen = len(oldMapping) @@ -1529,7 +1528,6 @@ def splitMultipleSubst(oldSubTable, newSubTable, overflowRecord): def splitAlternateSubst(oldSubTable, newSubTable, overflowRecord): ok = 1 - newSubTable.Format = oldSubTable.Format if hasattr(oldSubTable, 'sortCoverageLast'): newSubTable.sortCoverageLast = oldSubTable.sortCoverageLast @@ -1559,7 +1557,6 @@ def splitAlternateSubst(oldSubTable, newSubTable, overflowRecord): def splitLigatureSubst(oldSubTable, newSubTable, overflowRecord): ok = 1 - newSubTable.Format = oldSubTable.Format oldLigs = sorted(oldSubTable.ligatures.items()) oldLen = len(oldLigs) diff --git a/Tests/ttLib/tables/otTables_test.py b/Tests/ttLib/tables/otTables_test.py index 9202aa557..b5e65b2ca 100644 --- a/Tests/ttLib/tables/otTables_test.py +++ b/Tests/ttLib/tables/otTables_test.py @@ -551,13 +551,11 @@ class SplitMultipleSubstTest: from fontTools.ttLib.tables.otBase import OverflowErrorRecord oldSubTable = buildMultipleSubstSubtable({'e': 1, 'a': 2, 'b': 3, 'c': 4, 'd': 5}) - oldSubTable.Format = 1 newSubTable = otTables.MultipleSubst() ok = otTables.splitMultipleSubst(oldSubTable, newSubTable, OverflowErrorRecord((None, None, None, itemName, itemRecord))) assert ok - assert oldSubTable.Format == newSubTable.Format return oldSubTable.mapping, newSubTable.mapping def test_Coverage(self): From adbe4c3de79fc093c14af1659fe7e37ef097e780 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Thu, 20 May 2021 19:22:16 +0100 Subject: [PATCH 05/14] otTables_test: mixed tabs and spaces --- Tests/ttLib/tables/otTables_test.py | 209 ++++++++++++++-------------- 1 file changed, 106 insertions(+), 103 deletions(-) diff --git a/Tests/ttLib/tables/otTables_test.py b/Tests/ttLib/tables/otTables_test.py index b5e65b2ca..b1697761b 100644 --- a/Tests/ttLib/tables/otTables_test.py +++ b/Tests/ttLib/tables/otTables_test.py @@ -512,8 +512,11 @@ class InsertionMorphActionTest(unittest.TestCase): for name, attrs, content in parseXML(self.MORPH_ACTION_XML): a.fromXML(name, attrs, content, self.font) writer = OTTableWriter() - a.compile(writer, self.font, - actionIndex={('B', 'C'): 9, ('B', 'A', 'D'): 7}) + a.compile( + writer, + self.font, + actionIndex={('B', 'C'): 9, ('B', 'A', 'D'): 7}, + ) self.assertEqual(hexStr(writer.getAllData()), "1234fc4300090007") def testCompileActions_empty(self): @@ -575,113 +578,113 @@ class SplitMultipleSubstTest: def test_splitMarkBasePos(): - from fontTools.otlLib.builder import buildAnchor, buildMarkBasePosSubtable + from fontTools.otlLib.builder import buildAnchor, buildMarkBasePosSubtable - marks = { - "acutecomb": (0, buildAnchor(0, 600)), - "gravecomb": (0, buildAnchor(0, 590)), - "cedillacomb": (1, buildAnchor(0, 0)), - } - bases = { - "a": { - 0: buildAnchor(350, 500), - 1: None, - }, - "c": { - 0: buildAnchor(300, 700), - 1: buildAnchor(300, 0), - }, - } - glyphOrder = ["a", "c", "acutecomb", "gravecomb", "cedillacomb"] - glyphMap = {g: i for i, g in enumerate(glyphOrder)} + marks = { + "acutecomb": (0, buildAnchor(0, 600)), + "gravecomb": (0, buildAnchor(0, 590)), + "cedillacomb": (1, buildAnchor(0, 0)), + } + bases = { + "a": { + 0: buildAnchor(350, 500), + 1: None, + }, + "c": { + 0: buildAnchor(300, 700), + 1: buildAnchor(300, 0), + }, + } + glyphOrder = ["a", "c", "acutecomb", "gravecomb", "cedillacomb"] + glyphMap = {g: i for i, g in enumerate(glyphOrder)} - oldSubTable = buildMarkBasePosSubtable(marks, bases, glyphMap) - newSubTable = otTables.MarkBasePos() + oldSubTable = buildMarkBasePosSubtable(marks, bases, glyphMap) + newSubTable = otTables.MarkBasePos() - ok = otTables.splitMarkBasePos(oldSubTable, newSubTable, overflowRecord=None) + ok = otTables.splitMarkBasePos(oldSubTable, newSubTable, overflowRecord=None) - assert ok + assert ok - assert getXML(oldSubTable.toXML) == [ - '', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - '', - ] + assert getXML(oldSubTable.toXML) == [ + '', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + '', + ] - assert getXML(newSubTable.toXML) == [ - '', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - '', - ] + assert getXML(newSubTable.toXML) == [ + '', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + '', + ] if __name__ == "__main__": From 862c61eb5ae4b2eb8a0eef2780d4a8da5ac93a5b Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Thu, 20 May 2021 19:33:08 +0100 Subject: [PATCH 06/14] Update changelog [skip ci] --- NEWS.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS.rst b/NEWS.rst index 02ce5cf39..c0bd5471d 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -1,3 +1,7 @@ +- [otTables] Fixed ``AttributeError`` in methods that split LigatureSubst, + MultipleSubst and AlternateSubst subtables when an offset overflow occurs. + The ``Format`` attribute was removed in v4.22.0 (#2319). + 4.24.2 (released 2021-05-20) ---------------------------- From 9d5c3adc7cd9fb411ac7eededc8e3172cd49612d Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Thu, 20 May 2021 19:33:34 +0100 Subject: [PATCH 07/14] Release 4.24.3 --- Lib/fontTools/__init__.py | 2 +- NEWS.rst | 3 +++ setup.cfg | 2 +- setup.py | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Lib/fontTools/__init__.py b/Lib/fontTools/__init__.py index c2dd8463d..95f8f91ca 100644 --- a/Lib/fontTools/__init__.py +++ b/Lib/fontTools/__init__.py @@ -3,6 +3,6 @@ from fontTools.misc.loggingTools import configLogger log = logging.getLogger(__name__) -version = __version__ = "4.24.3.dev0" +version = __version__ = "4.24.3" __all__ = ["version", "log", "configLogger"] diff --git a/NEWS.rst b/NEWS.rst index c0bd5471d..1d466e77f 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -1,3 +1,6 @@ +4.24.3 (released 2021-05-20) +---------------------------- + - [otTables] Fixed ``AttributeError`` in methods that split LigatureSubst, MultipleSubst and AlternateSubst subtables when an offset overflow occurs. The ``Format`` attribute was removed in v4.22.0 (#2319). diff --git a/setup.cfg b/setup.cfg index 08b1a3836..e3e06780b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 4.24.3.dev0 +current_version = 4.24.3 commit = True tag = False tag_name = {new_version} diff --git a/setup.py b/setup.py index 5a183c368..9e53da7ec 100755 --- a/setup.py +++ b/setup.py @@ -441,7 +441,7 @@ if ext_modules: setup_params = dict( name="fonttools", - version="4.24.3.dev0", + version="4.24.3", description="Tools to manipulate font files", author="Just van Rossum", author_email="just@letterror.com", From 96f0169d9d39972f80ebd1b245fc902fa1435722 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Thu, 20 May 2021 19:33:34 +0100 Subject: [PATCH 08/14] =?UTF-8?q?Bump=20version:=204.24.3=20=E2=86=92=204.?= =?UTF-8?q?24.4.dev0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/fontTools/__init__.py | 2 +- setup.cfg | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Lib/fontTools/__init__.py b/Lib/fontTools/__init__.py index 95f8f91ca..b5110fac9 100644 --- a/Lib/fontTools/__init__.py +++ b/Lib/fontTools/__init__.py @@ -3,6 +3,6 @@ from fontTools.misc.loggingTools import configLogger log = logging.getLogger(__name__) -version = __version__ = "4.24.3" +version = __version__ = "4.24.4.dev0" __all__ = ["version", "log", "configLogger"] diff --git a/setup.cfg b/setup.cfg index e3e06780b..d1981c39c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 4.24.3 +current_version = 4.24.4.dev0 commit = True tag = False tag_name = {new_version} diff --git a/setup.py b/setup.py index 9e53da7ec..0029dbd81 100755 --- a/setup.py +++ b/setup.py @@ -441,7 +441,7 @@ if ext_modules: setup_params = dict( name="fonttools", - version="4.24.3", + version="4.24.4.dev0", description="Tools to manipulate font files", author="Just van Rossum", author_email="just@letterror.com", From 7af43123d49c188fcef4e540fa94796b3b44e858 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 24 May 2021 14:52:34 -0600 Subject: [PATCH 09/14] [otBase] Tiniest cleanup --- Lib/fontTools/ttLib/tables/otBase.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py index 06d5cde54..0e748124a 100644 --- a/Lib/fontTools/ttLib/tables/otBase.py +++ b/Lib/fontTools/ttLib/tables/otBase.py @@ -358,13 +358,13 @@ class OTTableWriter(object): tables, extTables, done = extTables, None, {} # add Coverage table if it is sorted last. - sortCoverageLast = 0 + sortCoverageLast = False if hasattr(self, "sortCoverageLast"): # Find coverage table for i in range(numItems): item = self.items[i] - if hasattr(item, "name") and (item.name == "Coverage"): - sortCoverageLast = 1 + if getattr(item, 'name', None) == "Coverage": + sortCoverageLast = True break if id(item) not in done: item._gatherTables(tables, extTables, done) @@ -377,7 +377,7 @@ class OTTableWriter(object): if not hasattr(item, "getData"): continue - if sortCoverageLast and (i==1) and item.name == 'Coverage': + if sortCoverageLast and (i==1) and getattr(item, 'name', None) == 'Coverage': # we've already 'gathered' it above continue From dafce3ff4676ee2e7bbacb26d0f1ddabd90db5fd Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Tue, 25 May 2021 12:30:35 +0100 Subject: [PATCH 10/14] instancer_test: add test with PairPos ValueRecord with XAdvDevice but no XAdvance this currently raises AttributeError in MutatorMerger.merge for ValueRecord table, because the latter assumes that whenever one of the Device tables are present the respective non-device values are also present, but they may be omitted (and it should default to 0 when missing) --- .../data/PartialInstancerTest4-VF.ttx | 463 ++++++++++++++++++ Tests/varLib/instancer/instancer_test.py | 24 + 2 files changed, 487 insertions(+) create mode 100644 Tests/varLib/instancer/data/PartialInstancerTest4-VF.ttx diff --git a/Tests/varLib/instancer/data/PartialInstancerTest4-VF.ttx b/Tests/varLib/instancer/data/PartialInstancerTest4-VF.ttx new file mode 100644 index 000000000..8d445b019 --- /dev/null +++ b/Tests/varLib/instancer/data/PartialInstancerTest4-VF.ttx @@ -0,0 +1,463 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Weight + + + Regular + + + Bold + + + New Font + + + Regular + + + 1.000;NONE;NewFont-Regular + + + New Font Regular + + + Version 1.000 + + + NewFont-Regular + + + Weight + + + Regular + + + Bold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wght + 0x0 + 400.0 + 400.0 + 700.0 + 256 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/varLib/instancer/instancer_test.py b/Tests/varLib/instancer/instancer_test.py index cb7e8547a..90048c181 100644 --- a/Tests/varLib/instancer/instancer_test.py +++ b/Tests/varLib/instancer/instancer_test.py @@ -936,6 +936,30 @@ class InstantiateOTLTest(object): assert not hasattr(valueRec1, "XAdvDevice") assert valueRec1.XAdvance == v2 + def test_GPOS_ValueRecord_XAdvDevice_wtihout_XAdvance(self): + # Test VF contains a PairPos adjustment in which the default instance + # has no XAdvance but there are deltas in XAdvDevice (VariationIndex). + vf = ttLib.TTFont() + vf.importXML(os.path.join(TESTDATA, "PartialInstancerTest4-VF.ttx")) + pairPos = vf["GPOS"].table.LookupList.Lookup[0].SubTable[0] + assert pairPos.ValueFormat1 == 0x40 + valueRec1 = pairPos.PairSet[0].PairValueRecord[0].Value1 + assert not hasattr(valueRec1, "XAdvance") + assert valueRec1.XAdvDevice.DeltaFormat == 0x8000 + outer = valueRec1.XAdvDevice.StartSize + inner = valueRec1.XAdvDevice.EndSize + assert vf["GDEF"].table.VarStore.VarData[outer].Item[inner] == [-50] + + # check that MutatorMerger for ValueRecord doesn't raise AttributeError + # when XAdvDevice is present but there's no corresponding XAdvance. + instancer.instantiateOTL(vf, {"wght": 0.5}) + + pairPos = vf["GPOS"].table.LookupList.Lookup[0].SubTable[0] + assert pairPos.ValueFormat1 == 0x4 + valueRec1 = pairPos.PairSet[0].PairValueRecord[0].Value1 + assert not hasattr(valueRec1, "XAdvDevice") + assert valueRec1.XAdvance == -25 + class InstantiateAvarTest(object): @pytest.mark.parametrize("location", [{"wght": 0.0}, {"wdth": 0.0}]) From b8ce99962c96a5cbe2fa319e92cb4889f8045162 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Tue, 25 May 2021 12:36:17 +0100 Subject: [PATCH 11/14] [merger] make getattr(valueRecord, *) default to 0 if it has Device tables but corresponding value is not set Fixes https://github.com/fonttools/fonttools/pull/2323 --- Lib/fontTools/varLib/merger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/fontTools/varLib/merger.py b/Lib/fontTools/varLib/merger.py index 77d2ea7ef..888b52c26 100644 --- a/Lib/fontTools/varLib/merger.py +++ b/Lib/fontTools/varLib/merger.py @@ -993,7 +993,7 @@ def merge(merger, self, lst): varidx = (dev.StartSize << 16) + dev.EndSize delta = otRound(instancer[varidx]) - setattr(self, name, getattr(self, name) + delta) + setattr(self, name, getattr(self, name, 0) + delta) # From b59c4f5252754014742fe5aa232c21166adf0d07 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Tue, 25 May 2021 14:31:57 +0100 Subject: [PATCH 12/14] Update changelog [skip ci] --- NEWS.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NEWS.rst b/NEWS.rst index 1d466e77f..2aec2be15 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -1,3 +1,8 @@ +- [subset/instancer] Fixed ``AttributeError`` when instantiating a VF that + contains GPOS ValueRecords with ``Device`` tables but without the respective + non-Device values (e.g. ``XAdvDevice`` without ``XAdvance``). When not + explicitly set, the latter are assumed to be 0 (#2323). + 4.24.3 (released 2021-05-20) ---------------------------- From b3acb8b984aaa78732d869c356ebd6fa126b000b Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Tue, 25 May 2021 14:33:29 +0100 Subject: [PATCH 13/14] Release 4.24.4 --- Lib/fontTools/__init__.py | 2 +- NEWS.rst | 3 +++ setup.cfg | 2 +- setup.py | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Lib/fontTools/__init__.py b/Lib/fontTools/__init__.py index b5110fac9..98a201a35 100644 --- a/Lib/fontTools/__init__.py +++ b/Lib/fontTools/__init__.py @@ -3,6 +3,6 @@ from fontTools.misc.loggingTools import configLogger log = logging.getLogger(__name__) -version = __version__ = "4.24.4.dev0" +version = __version__ = "4.24.4" __all__ = ["version", "log", "configLogger"] diff --git a/NEWS.rst b/NEWS.rst index 2aec2be15..fd3b9907c 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -1,3 +1,6 @@ +4.24.4 (released 2021-05-25) +---------------------------- + - [subset/instancer] Fixed ``AttributeError`` when instantiating a VF that contains GPOS ValueRecords with ``Device`` tables but without the respective non-Device values (e.g. ``XAdvDevice`` without ``XAdvance``). When not diff --git a/setup.cfg b/setup.cfg index d1981c39c..8ef6b0d69 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 4.24.4.dev0 +current_version = 4.24.4 commit = True tag = False tag_name = {new_version} diff --git a/setup.py b/setup.py index 0029dbd81..d482bd82e 100755 --- a/setup.py +++ b/setup.py @@ -441,7 +441,7 @@ if ext_modules: setup_params = dict( name="fonttools", - version="4.24.4.dev0", + version="4.24.4", description="Tools to manipulate font files", author="Just van Rossum", author_email="just@letterror.com", From ee2aa264d5e99158d71dc6a279e38ba6021e557a Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Tue, 25 May 2021 14:33:29 +0100 Subject: [PATCH 14/14] =?UTF-8?q?Bump=20version:=204.24.4=20=E2=86=92=204.?= =?UTF-8?q?24.5.dev0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/fontTools/__init__.py | 2 +- setup.cfg | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Lib/fontTools/__init__.py b/Lib/fontTools/__init__.py index 98a201a35..dece1501c 100644 --- a/Lib/fontTools/__init__.py +++ b/Lib/fontTools/__init__.py @@ -3,6 +3,6 @@ from fontTools.misc.loggingTools import configLogger log = logging.getLogger(__name__) -version = __version__ = "4.24.4" +version = __version__ = "4.24.5.dev0" __all__ = ["version", "log", "configLogger"] diff --git a/setup.cfg b/setup.cfg index 8ef6b0d69..784ba7139 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 4.24.4 +current_version = 4.24.5.dev0 commit = True tag = False tag_name = {new_version} diff --git a/setup.py b/setup.py index d482bd82e..d90ca14a8 100755 --- a/setup.py +++ b/setup.py @@ -441,7 +441,7 @@ if ext_modules: setup_params = dict( name="fonttools", - version="4.24.4", + version="4.24.5.dev0", description="Tools to manipulate font files", author="Just van Rossum", author_email="just@letterror.com",