[subset] GDEF MarkGlyphSets subsetting support
diff --git a/src/hb-ot-layout-gdef-table.hh b/src/hb-ot-layout-gdef-table.hh
index dc751d8..9cfdc61 100644
--- a/src/hb-ot-layout-gdef-table.hh
+++ b/src/hb-ot-layout-gdef-table.hh
@@ -288,6 +288,34 @@
bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const
{ return (this+coverage[set_index]).get_coverage (glyph_id) != NOT_COVERED; }
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->start_embed (*this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+ out->format = format;
+
+ bool ret = true;
+ for (const LOffsetTo<Coverage>& offset : coverage.iter ())
+ {
+ auto *o = out->coverage.serialize_append (c->serializer);
+ if (unlikely (!o))
+ {
+ ret = false;
+ break;
+ }
+
+ //not using o->serialize_subset (c, offset, this, out) here because
+ //OTS doesn't allow null offset.
+ //See issue: https://github.com/khaledhosny/ots/issues/172
+ c->serializer->push ();
+ c->dispatch (this+offset);
+ c->serializer->add_link (*o, c->serializer->pop_pack (), out);
+ }
+
+ return_trace (ret && out->coverage.len);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -313,6 +341,15 @@
}
}
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ switch (u.format) {
+ case 1: return_trace (u.format1.subset (c));
+ default:return_trace (false);
+ }
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -448,7 +485,11 @@
out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this, out);
if (version.to_int () >= 0x00010002u)
- out->markGlyphSetsDef = 0;// TODO(subset) serialize_subset (c, markGlyphSetsDef, this, out);
+ {
+ if (!out->markGlyphSetsDef.serialize_subset (c, markGlyphSetsDef, this, out) &&
+ version.to_int () == 0x00010002u)
+ out->version.minor = 0;
+ }
if (version.to_int () >= 0x00010003u)
out->varStore = 0;// TODO(subset) serialize_subset (c, varStore, this, out);
diff --git a/test/subset/data/Makefile.am b/test/subset/data/Makefile.am
index 15f0811..32efc0b 100644
--- a/test/subset/data/Makefile.am
+++ b/test/subset/data/Makefile.am
@@ -20,6 +20,7 @@
expected/layout.gpos6 \
expected/layout.gsub3 \
expected/layout.gsub6 \
+ expected/layout.gdef \
expected/cmap \
expected/cmap14 \
expected/sbix \
diff --git a/test/subset/data/Makefile.sources b/test/subset/data/Makefile.sources
index dd4fff8..597ab7e 100644
--- a/test/subset/data/Makefile.sources
+++ b/test/subset/data/Makefile.sources
@@ -12,6 +12,7 @@
tests/layout.gpos6.tests \
tests/layout.gsub3.tests \
tests/layout.gsub6.tests \
+ tests/layout.gdef.tests \
tests/cmap.tests \
tests/cmap14.tests \
tests/sbix.tests \
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.default.1E00,303.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.1E00,303.ttf
new file mode 100644
index 0000000..d505524
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.1E00,303.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.default.303.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.303.ttf
new file mode 100644
index 0000000..c710e19
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.303.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.default.309,20,30F.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.309,20,30F.ttf
new file mode 100644
index 0000000..c4f5e02
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.309,20,30F.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.default.323.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.323.ttf
new file mode 100644
index 0000000..134a7dd
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.323.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.default.41,42,43.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.41,42,43.ttf
new file mode 100644
index 0000000..b037840
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.41,42,43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.1E00,303.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.1E00,303.ttf
new file mode 100644
index 0000000..5b1077f
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.1E00,303.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.303.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.303.ttf
new file mode 100644
index 0000000..665a3ec
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.303.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.309,20,30F.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.309,20,30F.ttf
new file mode 100644
index 0000000..cb041bd
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.309,20,30F.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.323.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.323.ttf
new file mode 100644
index 0000000..eea77c1
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.323.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.41,42,43.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.41,42,43.ttf
new file mode 100644
index 0000000..dcf5653
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.41,42,43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.1E00,303.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.1E00,303.ttf
new file mode 100644
index 0000000..35b7212
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.1E00,303.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.303.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.303.ttf
new file mode 100644
index 0000000..7f7c39d
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.303.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.309,20,30F.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.309,20,30F.ttf
new file mode 100644
index 0000000..83b02bc
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.309,20,30F.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.323.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.323.ttf
new file mode 100644
index 0000000..928bb5f
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.323.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.41,42,43.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.41,42,43.ttf
new file mode 100644
index 0000000..717fe21
--- /dev/null
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef.41,42,43.ttf
Binary files differ
diff --git a/test/subset/data/tests/layout.gdef.tests b/test/subset/data/tests/layout.gdef.tests
new file mode 100644
index 0000000..e71e8ac
--- /dev/null
+++ b/test/subset/data/tests/layout.gdef.tests
@@ -0,0 +1,14 @@
+FONTS:
+Roboto-Regular.ttf
+
+PROFILES:
+default.txt
+drop-hints.txt
+keep-gdef.txt
+
+SUBSETS:
+Ḁ̃
+̣
+̃
+̉ ̏
+ABC