From 16a40019010ecf92ade20e3ca9c3432556a51f18 Mon Sep 17 00:00:00 2001 From: Sascha Brawer Date: Fri, 25 Aug 2017 15:35:33 +0200 Subject: [PATCH] [AAT] Implement subsetting of `lcar` ligature carets table --- Lib/fontTools/subset/__init__.py | 10 + Tests/subset/data/TestLCAR-0.ttx | 320 ++++++++++++++++++++++++++++ Tests/subset/data/TestLCAR-1.ttx | 320 ++++++++++++++++++++++++++++ Tests/subset/data/expect_lcar_0.ttx | 16 ++ Tests/subset/data/expect_lcar_1.ttx | 16 ++ Tests/subset/subset_test.py | 23 ++ 6 files changed, 705 insertions(+) create mode 100644 Tests/subset/data/TestLCAR-0.ttx create mode 100644 Tests/subset/data/TestLCAR-1.ttx create mode 100644 Tests/subset/data/expect_lcar_0.ttx create mode 100644 Tests/subset/data/expect_lcar_1.ttx diff --git a/Lib/fontTools/subset/__init__.py b/Lib/fontTools/subset/__init__.py index a41c48a4a..b4ff4063a 100644 --- a/Lib/fontTools/subset/__init__.py +++ b/Lib/fontTools/subset/__init__.py @@ -1675,6 +1675,16 @@ def subset_glyphs(self, s): self.hdmx = {sz:_dict_subset(l, s.glyphs) for sz,l in self.hdmx.items()} return bool(self.hdmx) +@_add_method(ttLib.getTableClass('lcar')) +def subset_glyphs(self, s): + table = self.table.LigatureCarets + if table.Format in (0, 1): + table.Carets = {glyph: table.Carets[glyph] for glyph in s.glyphs + if glyph in table.Carets} + return len(table.Carets) > 0 + else: + assert False, "unknown 'lcar' format %s" % table.Format + @_add_method(ttLib.getTableClass('gvar')) def prune_pre_subset(self, font, options): if options.notdef_glyph and not options.notdef_outline: diff --git a/Tests/subset/data/TestLCAR-0.ttx b/Tests/subset/data/TestLCAR-0.ttx new file mode 100644 index 000000000..b9d6fc036 --- /dev/null +++ b/Tests/subset/data/TestLCAR-0.ttx @@ -0,0 +1,320 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TestLCAR + + + Regular + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/subset/data/TestLCAR-1.ttx b/Tests/subset/data/TestLCAR-1.ttx new file mode 100644 index 000000000..6e8d85b64 --- /dev/null +++ b/Tests/subset/data/TestLCAR-1.ttx @@ -0,0 +1,320 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TestLCAR + + + Regular + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/subset/data/expect_lcar_0.ttx b/Tests/subset/data/expect_lcar_0.ttx new file mode 100644 index 000000000..feb866d7f --- /dev/null +++ b/Tests/subset/data/expect_lcar_0.ttx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Tests/subset/data/expect_lcar_1.ttx b/Tests/subset/data/expect_lcar_1.ttx new file mode 100644 index 000000000..26b500823 --- /dev/null +++ b/Tests/subset/data/expect_lcar_1.ttx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Tests/subset/subset_test.py b/Tests/subset/subset_test.py index c7818af54..82673bb29 100644 --- a/Tests/subset/subset_test.py +++ b/Tests/subset/subset_test.py @@ -116,6 +116,29 @@ class SubsetTest(unittest.TestCase): subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_keep_gvar_notdef_outline.ttx"), ["GlyphOrder", "avar", "fvar", "gvar", "name"]) + def test_subset_lcar_remove(self): + _, fontpath = self.compile_font(self.getpath("TestLCAR-0.ttx"), ".ttf") + subsetpath = self.temp_path(".ttf") + subset.main([fontpath, "--glyphs=one", "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.assertNotIn("lcar", subsetfont) + + def test_subset_lcar_format_0(self): + _, fontpath = self.compile_font(self.getpath("TestLCAR-0.ttx"), ".ttf") + subsetpath = self.temp_path(".ttf") + subset.main([fontpath, "--unicodes=U+FB01", + "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath("expect_lcar_0.ttx"), ["lcar"]) + + def test_subset_lcar_format_1(self): + _, fontpath = self.compile_font(self.getpath("TestLCAR-1.ttx"), ".ttf") + subsetpath = self.temp_path(".ttf") + subset.main([fontpath, "--unicodes=U+FB01", + "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath("expect_lcar_1.ttx"), ["lcar"]) + def test_subset_math(self): _, fontpath = self.compile_font(self.getpath("TestMATH-Regular.ttx"), ".ttf") subsetpath = self.temp_path(".ttf")