From 42d11cfd3ef7d4456b225768bd9ca3c55b2bd368 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Mon, 27 Nov 2017 19:37:19 +0000 Subject: [PATCH 1/4] [subset] delete empty SubrsIndex after subsetting Fixes https://github.com/fonttools/fonttools/issues/994 --- Lib/fontTools/subset/__init__.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Lib/fontTools/subset/__init__.py b/Lib/fontTools/subset/__init__.py index 14af6797b..656a038fe 100644 --- a/Lib/fontTools/subset/__init__.py +++ b/Lib/fontTools/subset/__init__.py @@ -2407,12 +2407,27 @@ def prune_post_subset(self, options): for subr in subrs.items: subr.subset_subroutines (local_subrs, font.GlobalSubrs) + # Delete local SubrsIndex if empty + if hasattr(font, 'FDSelect'): + for fd in font.FDArray: + _delete_empty_subrs(fd) + else: + _delete_empty_subrs(font) + # Cleanup for subrs in all_subrs: del subrs._used, subrs._old_bias, subrs._new_bias return True + +def _delete_empty_subrs(font): + if hasattr(font.Private, 'Subrs') and not font.Private.Subrs: + if 'Subrs' in font.Private.rawDict: + del font.Private.rawDict['Subrs'] + delattr(font.Private, 'Subrs') + + @_add_method(ttLib.getTableClass('cmap')) def closure_glyphs(self, s): tables = [t for t in self.tables if t.isUnicode()] From bbcb3776ac941f1159f9df58cf87689362f9cd25 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Mon, 27 Nov 2017 19:37:56 +0000 Subject: [PATCH 2/4] [Tests/subset] adjust expected test results --- Tests/subset/data/expect_desubroutinize_CFF.ttx | 3 --- Tests/subset/data/expect_no_hinting_desubroutinize_CFF.ttx | 3 --- Tests/subset/data/expect_no_notdef_outline_cid.ttx | 3 --- Tests/subset/data/expect_no_notdef_outline_otf.ttx | 3 --- Tests/subset/data/expect_notdef_width_cid.ttx | 6 ------ 5 files changed, 18 deletions(-) diff --git a/Tests/subset/data/expect_desubroutinize_CFF.ttx b/Tests/subset/data/expect_desubroutinize_CFF.ttx index ab08088b1..81b536904 100644 --- a/Tests/subset/data/expect_desubroutinize_CFF.ttx +++ b/Tests/subset/data/expect_desubroutinize_CFF.ttx @@ -33,9 +33,6 @@ - - - diff --git a/Tests/subset/data/expect_no_hinting_desubroutinize_CFF.ttx b/Tests/subset/data/expect_no_hinting_desubroutinize_CFF.ttx index 149f09594..7f44c90fa 100644 --- a/Tests/subset/data/expect_no_hinting_desubroutinize_CFF.ttx +++ b/Tests/subset/data/expect_no_hinting_desubroutinize_CFF.ttx @@ -32,9 +32,6 @@ - - - diff --git a/Tests/subset/data/expect_no_notdef_outline_cid.ttx b/Tests/subset/data/expect_no_notdef_outline_cid.ttx index 4e87cc126..5167c2cf1 100644 --- a/Tests/subset/data/expect_no_notdef_outline_cid.ttx +++ b/Tests/subset/data/expect_no_notdef_outline_cid.ttx @@ -43,9 +43,6 @@ - - - diff --git a/Tests/subset/data/expect_no_notdef_outline_otf.ttx b/Tests/subset/data/expect_no_notdef_outline_otf.ttx index 498a44b4e..22273c7c4 100644 --- a/Tests/subset/data/expect_no_notdef_outline_otf.ttx +++ b/Tests/subset/data/expect_no_notdef_outline_otf.ttx @@ -33,9 +33,6 @@ - - - diff --git a/Tests/subset/data/expect_notdef_width_cid.ttx b/Tests/subset/data/expect_notdef_width_cid.ttx index c0bab754f..ccd0f65fc 100644 --- a/Tests/subset/data/expect_notdef_width_cid.ttx +++ b/Tests/subset/data/expect_notdef_width_cid.ttx @@ -38,9 +38,6 @@ - - - @@ -56,9 +53,6 @@ - - - From cad8a8c072990207ee9c126eb9c9c2c6672cd34c Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Mon, 27 Nov 2017 20:24:32 +0000 Subject: [PATCH 3/4] minor --- Lib/fontTools/subset/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/fontTools/subset/__init__.py b/Lib/fontTools/subset/__init__.py index 656a038fe..46e52f72f 100644 --- a/Lib/fontTools/subset/__init__.py +++ b/Lib/fontTools/subset/__init__.py @@ -2425,7 +2425,7 @@ def _delete_empty_subrs(font): if hasattr(font.Private, 'Subrs') and not font.Private.Subrs: if 'Subrs' in font.Private.rawDict: del font.Private.rawDict['Subrs'] - delattr(font.Private, 'Subrs') + del font.Private.Subrs @_add_method(ttLib.getTableClass('cmap')) From ca8963e527c0cc5d243e174218f191ea6731069c Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Mon, 27 Nov 2017 20:29:11 +0000 Subject: [PATCH 4/4] [subset] pass a PrivateDict instance to _delete_empty_subrs func --- Lib/fontTools/subset/__init__.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Lib/fontTools/subset/__init__.py b/Lib/fontTools/subset/__init__.py index 46e52f72f..e5857dd79 100644 --- a/Lib/fontTools/subset/__init__.py +++ b/Lib/fontTools/subset/__init__.py @@ -2410,9 +2410,9 @@ def prune_post_subset(self, options): # Delete local SubrsIndex if empty if hasattr(font, 'FDSelect'): for fd in font.FDArray: - _delete_empty_subrs(fd) + _delete_empty_subrs(fd.Private) else: - _delete_empty_subrs(font) + _delete_empty_subrs(font.Private) # Cleanup for subrs in all_subrs: @@ -2421,11 +2421,11 @@ def prune_post_subset(self, options): return True -def _delete_empty_subrs(font): - if hasattr(font.Private, 'Subrs') and not font.Private.Subrs: - if 'Subrs' in font.Private.rawDict: - del font.Private.rawDict['Subrs'] - del font.Private.Subrs +def _delete_empty_subrs(private_dict): + if hasattr(private_dict, 'Subrs') and not private_dict.Subrs: + if 'Subrs' in private_dict.rawDict: + del private_dict.rawDict['Subrs'] + del private_dict.Subrs @_add_method(ttLib.getTableClass('cmap'))