src/hb-ot-layout-gsub-table.hh


Log

Author Commit Date CI Message
Behdad Esfahbod d00b8873 2023-07-14T11:26:51 Revert "[subset/closure] Batch recursions in scheduled stages" This reverts commit f2aaeeb3016e10bf91c251296391a381d5fc6385.
Behdad Esfahbod f2aaeeb3 2023-07-14T11:17:37 [subset/closure] Batch recursions in scheduled stages Going to revert. Doesn't pass tests and savings are minor.
Behdad Esfahbod 7a4bd97e 2023-01-31T14:59:39 [layout] Build lookup accelerators lazily on-demand Reduces memory consumption for large multi-script fonts drastically.
Behdad Esfahbod 83353f13 2023-01-31T14:32:14 [layout] Reduce memory use slightly By using raw pointer instead of vector for subtable accelerator. To be used for more memory saving by making subtable accelerators lazy-loaded by shape-plans for large fonts.
Behdad Esfahbod 950c7ab3 2023-01-26T15:26:05 [gsubgpos] Use accelerator when recursing
Kleis Auke Wolthuizen 79eb0f74 2022-07-06T13:29:55 [GSUB] Fix build on GCC < 7
Garret Rieger 900476c6 2022-06-30T19:21:23 Move GSUB.hh GPOS.hh back into the GPOS/GSUB sub directories.
Garret Rieger 5fdae684 2022-06-29T23:52:08 [reorg] Move GSUB.hh up one level and change GSUB namespace to GSUB_impl.
Behdad Esfahbod 4119f73c 2022-06-08T06:34:48 [subset/layout] Rename dispatch_closure_lookups_recurse_func to dispatch_recurse_func<>
Behdad Esfahbod c13ff395 2022-06-08T06:25:23 [layout] Rename apply_recurse_func to specialization of dispatch_recurse_func
Garret Rieger a9910e25 2022-03-23T16:09:41 [reorg] Move SubstLookup and GSUB into the new layout.
Garret Rieger 90af2143 2022-03-23T15:28:29 [reorg] Move ReverseChainSingleSubst to new layout.
Garret Rieger 403feb38 2022-03-23T15:19:04 [reorg] Move LigatureSubst to new layout.
Garret Rieger 6a369389 2022-03-23T15:04:11 [reorg] Move AlternateSubst to new layout.
Garret Rieger dea0681d 2022-03-23T14:48:58 [reorg] Move MultipleSubst into new layout.
Garret Rieger 7dfd9e70 2022-01-13T14:17:51 [reorganization] WIP move single substitution into separate files.
Behdad Esfahbod a5759920 2022-01-22T10:30:39 [unsafe-to-concat] Mark LigatureSubst Failures down to two: 209/401 harfbuzz:shaping+aots / gpos6 FAIL 0.06s exit status 1 265/401 harfbuzz:shaping+aots / lookupflag_ignore_attach FAIL 0.06s exit status 1
Behdad Esfahbod 78481b32 2021-11-21T16:50:34 [gsubgpos] Combine input/backtrack/lookahead unsafe-to-concat I feel like this is correct logic. Still have to prove. Errors unchanged at 10.
Behdad Esfahbod ac1bb3e3 2022-01-20T11:47:17 [machinery] Move accelerators to constructor/destructor
Behdad Esfahbod 94d43c00 2021-12-04T16:56:39 [buffer] Merge and rename clear_glyph_flags()
Garret Rieger 49c93924 2021-09-24T09:28:10 [subset] During LigatureSubstFormat1 subsetting always place Coverage last. In Windows 7 on Chrome if the coverage table comes before any of the LigatureSet or Ligature subtables the font won't load. This changes the packing order to always place the Coverage table last. Virtual links are used to ensure the repacker maintains the desired ordering. Coincidentally fontTools also does the same thing (https://github.com/fonttools/fonttools/blob/a3f988fbf621142d7d9b3e68a69725b88f358869/Lib/fontTools/ttLib/tables/otTables.py#L1137) to reduce overflows during packing.
Behdad Esfahbod 6d555ce8 2021-11-02T00:18:22 [meta] Use std::forward instead of hb_forward()
Behdad Esfahbod c852b868 2021-09-19T16:30:12 Rename HBGlyphID to HBGlyphID16
Behdad Esfahbod f0a1892f 2021-07-28T17:36:22 [serialize] Remove unnecessary pointer indirection
Behdad Esfahbod 6fe0d7d6 2021-07-28T12:06:49 [GSUB] If MultipleSubst is applied to a ligature-component, preserve lig-id Fixes https://github.com/harfbuzz/harfbuzz/issues/3069
Behdad Esfahbod b926fb9b 2021-07-28T11:58:10 Whitespace
Behdad Esfahbod 40884af1 2021-07-09T17:17:05 [ot-layout] Narrow down random feature logic vs safe-to-break
Garret Rieger cc96c4e8 2021-06-14T16:43:23 [shaping] Update shaping substituion lookup serialization to use serializer pop()/pack().
Garret Rieger 5ba46ed0 2021-06-11T13:34:00 [subset] Correct OffsetTo serialization in GSUB to use serialize_serialize ().
Garret Rieger 35458b6b 2021-06-11T13:14:51 [subset] Add serialize_serialize to OffsetTo. Similar to serialize_subset() this will serialize the new object and then link it to the offset.
Behdad Esfahbod 5639e253 2021-03-31T16:04:43 Add Array16Of<>
Behdad Esfahbod 6c4e0491 2021-03-31T15:31:32 s/OffsetArrayOf/Array16OfOffset16To/g
Behdad Esfahbod ad28f973 2021-03-31T12:49:14 Rename offset types to be explicit about their size Add Offset16To<>, Offset24To<>, and Offset32To<> for most use-cases.
Qunxin Liu 95230e29 2021-03-18T17:41:25 [subset] support subsetting GSUB8
Garret Rieger b14475d2 2021-03-18T10:51:26 [subset] further changes to serializer error handling. - Rename enum type and enum members. - in_errors() now returns true for any error having been set. hb-subset now looks for offset overflow only errors to divert to repacker. - Added INT_OVERFLOW and ARRAY_OVERFLOW enum values.
Garret Rieger 73ed59f7 2021-03-17T15:53:10 [subset] store errors in the serializer as a flag set. Make check_assign/check_equal specify the type of error to set.
Qunxin Liu 56ca4357 2021-01-28T15:21:26 [subset] fix for collect_features and remove_redundant_lamngsys previously remove_redundant_sys () is missing in harfbuzz, after redundant langsys removal, some features are removed as well in prune_features() in fonttools. This change is trying to get the same result between harfbuzz and fonttools.
Qunxin Liu 0e1c0fa4 2021-01-12T10:17:14 [subset] optimize glyph closure method: step 5 add testcase and some fixes
Qunxin Liu b8a58a0c 2021-01-10T15:50:04 [subset] optimize glyph closure method: step 4 optimize recurse_lookups in Context/ChainContext glyph closure, only the glyphs that the parent lookup can apply the recursion to can participate in recursing the lookup.
Qunxin Liu b4fc593c 2020-12-09T10:44:18 [subset] optimize glyph closure method: step1 Previous GSUB glyph closure is done by recursively visiting all reachable lookup tables that apply to any glyphs in the current/input glyph set, but actually only the glyphs that the parent lookup can apply the recursion to can participate in recursing the lookup. This is step 1 for glyph closure optimization: 1. Add stack of currently active glyph set pointers into hb_closure_context_t 2. Update closure() method in simple GSUB tables to use this stack in order not to change current glyph set at different stages of recursion 3. Add function may_have_non_1to1() to GSUB tables
Garret Rieger e5835053 2020-09-29T11:05:08 [subset] Use plan->glyphset_gsub instead of plan->glyphset for GSUB/GPOS This matches fontTools behaviour. glyphset_gsub does not contain gids added from closing over composite glyphs in glyf, since these cannot particpate in GSUB/GPOS processing.
Ebrahim Byagowi 5a7cc7fd 2020-07-29T08:33:32 minor spacing tweak
Ebrahim Byagowi d0e2addd 2020-07-18T22:14:52 minor
Behdad Esfahbod b2a1accc 2020-06-18T16:41:31 Simplify get_glyph_alternates() dispatcher Trying to make it **very simple** to add a specialized dispatcher for one API to be routed to just a few objects (one in this case).
Behdad Esfahbod ffe8d3f3 2020-06-18T16:31:39 Use dispatch for get_glyph_alternates_t First time we do this in a way that if target object doesn't have the matching function we basically "ignore". Risky but I feel like is the right decision for this case. I'm going to put back the template varargs and use those, which would make the dispatcher be just that: "dispatcher", and wouldn't need to carry the call context. That would be a refreshing change I think.
Behdad Esfahbod bedf4171 2020-06-18T15:49:01 Push get_glyph_alternates() work all the way down
Ebrahim Byagowi 1bac8582 2020-06-18T22:56:07 [layout] Rename _get_alternates to _get_glyph_alternates
Ebrahim Byagowi d3c16979 2020-06-18T08:37:21 [layout] move alternate buffer iteration logic to AlternateSet
Ebrahim Byagowi 1348a2c8 2020-06-16T21:05:16 [layout] hb_ot_layout_lookup_get_alternates, a new API An API to retrieve one-to-one alternates from a given GSUB lookup index.
Behdad Esfahbod 41ef75f6 2020-06-17T16:29:09 [gsub] Don't substitute in ReverseChainSingleSubstFormat1 if missing substitute Fixes https://github.com/harfbuzz/harfbuzz/issues/2467
Qunxin Liu 973c47f6 2020-06-11T11:27:57 [subset] Move 2 experimental public api methods to be private methods in GSUB/GPOS. 2 methods are: hb_ot_layout_closure_lookups and hb_ot_layout_closure_features
Behdad Esfahbod 56719474 2020-06-05T12:57:23 s/blacklist/blocklist/g
Behdad Esfahbod 5cf53c06 2020-04-23T10:55:41 Rename add_coverage to collect_coverage
ariza 188a0a47 2020-03-07T11:02:36 removed default base; replaced w/ bias if required
Ebrahim Byagowi 07504569 2020-02-21T13:05:44 [gsub] minor format
Garret Rieger 41122542 2020-02-20T13:43:06 Fix glyph closure for alternate substitution. It was not filtering on the glyphs to be retained.
ariza 72cbfb90 2020-01-18T16:35:52 remove empty lookup subtables Added a variant of subset_offset_array which takes an extra arg passed to serialize_subset for this impl. Added a new api test "test-subset-gpos" for this.
Qunxin Liu e565d1f9 2019-11-01T10:21:36 [subset] subset lookup/feature/script lists for GSUB/GPOS
Qunxin Liu 0b39c480 2019-10-22T16:00:43 [subset] closure lookups for GSUB/GPOS
Behdad Esfahbod a061e47f 2019-12-10T13:31:50 Change a few HB_INTERNAL static methods to static inline
Behdad Esfahbod dd3972a3 2019-12-10T13:21:26 [GSUB] Simplify Extension is_reverse() We don't allow extension lookups to chain to another extension lookup. Simplify code for that.
Behdad Esfahbod 858b6279 2019-12-10T13:18:32 [machinery] Remove CastR<>()
Garret Rieger e17e7443 2019-10-09T11:45:42 Convert existing uses of serialize_append in gsub subsetting to use subset_offset_array.
Garret Rieger 36f18cec 2019-10-07T14:02:31 Add subset_offset_array helper function which simplifies subsetting offset arrays during stream operations.
Ebrahim Byagowi d512087e 2019-09-14T10:36:29 Rename GlyphID to HBGlyphID Avoid collision with macOS's ATSUnicodeTypes.h GlyphID
Behdad Esfahbod 38f95baf 2019-08-29T13:40:46 [subset] in SingleSubst subsetting, check for substitute in glyphset That matches what fonttools does and allows for specifying exact glyphset for subset.
Ebrahim Byagowi 49902964 2019-08-29T15:09:39 [gsub] Fix clang's semicolon complains
Behdad Esfahbod dc9222b1 2019-08-28T15:38:46 [subset] Implement AlternateSubst subsetting
Behdad Esfahbod 23681b6d 2019-08-28T15:30:37 Minor
Behdad Esfahbod 33c8e230 2019-08-28T15:25:55 [subset] Implement MultipleSubst subsetting
Behdad Esfahbod 5c43a7ba 2019-08-28T15:09:58 [GSUB] Use dagger in Ligature::intersects()
Behdad Esfahbod b8c642c1 2019-08-28T15:06:45 Minor
Behdad Esfahbod bc5ef765 2019-08-28T14:51:28 [subset] Subset ligature substitutes! Test with: $ ./hb-subset -o out.ttf NotoSansArabic-Regular.ttf --drop-tables= سلام && ./hb-view out.ttf سلام
Behdad Esfahbod 0a18efd7 2019-07-26T14:34:26 Minor
Behdad Esfahbod 7dcf8e12 2019-06-26T13:44:10 [config] Fix build with HB_NO_OT_LAYOUT
Behdad Esfahbod 2ad4ba7b 2019-05-31T15:48:54 [gsub] Minor
Behdad Esfahbod 2dbdec66 2019-05-31T15:38:11 [gsub] Porting serialize to iterators
Garret Rieger 0af9de13 2019-05-20T15:04:20 [subset] For gsub subsetting only consider glyphs reachable via gsub closure.
Behdad Esfahbod bcd3ffc9 2019-05-16T13:22:09 Whitespace
Behdad Esfahbod 05bc5f96 2019-05-16T13:05:58 [subset] Remove extra iteration
Behdad Esfahbod 23768676 2019-05-15T21:57:26 Use hb_map(hb_add(this)) to dereference OffsetTo<>'s
Behdad Esfahbod d214b078 2019-05-15T19:07:39 Fix clang build Ugh. In file included from hb-ot-face.cc:41: ./hb-ot-layout-gsub-table.hh:293:7: error: template parameter redefines default argument hb_requires (hb_is_sorted_source_of (Iterator, ^ ./hb-meta.hh:59:27: note: expanded from macro 'hb_requires' define hb_requires(Cond) hb_enable_if((Cond)) ^ ./hb-meta.hh:57:67: note: expanded from macro 'hb_enable_if' define hb_enable_if(Cond) typename hb_enable_if<(Cond)>::type* = nullptr ^ ./hb-ot-layout-gsub-table.hh:40:5: note: previous default template argument defined here hb_requires (hb_is_sorted_source_of (Iterator, ^ ./hb-meta.hh:59:27: note: expanded from macro 'hb_requires' define hb_requires(Cond) hb_enable_if((Cond)) ^ ./hb-meta.hh:57:67: note: expanded from macro 'hb_enable_if' define hb_enable_if(Cond) typename hb_enable_if<(Cond)>::type* = nullptr ^
Behdad Esfahbod 371b55c7 2019-05-15T18:54:07 Fix clang build In file included from hb-ot-face.cc:41: ./hb-ot-layout-gsub-table.hh:293:7: error: template parameter redefines default argument hb_requires (hb_is_sorted_source_of (Iterator, ^ ./hb-meta.hh:59:27: note: expanded from macro 'hb_requires' define hb_requires(Cond) hb_enable_if((Cond)) ^ ./hb-meta.hh:57:67: note: expanded from macro 'hb_enable_if' define hb_enable_if(Cond) typename hb_enable_if<(Cond)>::type* = nullptr ^ ./hb-ot-layout-gsub-table.hh:40:5: note: previous default template argument defined here hb_requires (hb_is_sorted_source_of (Iterator, ^ ./hb-meta.hh:59:27: note: expanded from macro 'hb_requires' define hb_requires(Cond) hb_enable_if((Cond)) ^ ./hb-meta.hh:57:67: note: expanded from macro 'hb_enable_if' define hb_enable_if(Cond) typename hb_enable_if<(Cond)>::type* = nullptr ^ 1 error generated.
Behdad Esfahbod f92d188d 2019-05-15T18:52:57 Whitespace
Garret Rieger 962f95cf 2019-05-09T13:04:11 [subset] Switch SingleSubst to use iterators in serialize.
Behdad Esfahbod 78d35f0e 2019-05-15T18:15:05 Reduce captures of lambdas
Behdad Esfahbod d0df996c 2019-05-15T00:32:41 Use implicit lambda return type
Behdad Esfahbod 7df3ecfb 2019-05-10T20:43:26 [meta] hb_void_t -> hb_empty_t
Behdad Esfahbod 83e3eabd 2019-05-07T20:58:43 Whitespace
Behdad Esfahbod 41248cce 2019-05-07T20:54:31 Remove MIN/MAX in favor of hb_min/hb_max
Behdad Esfahbod 36bb24f7 2019-05-05T10:14:17 [dispatch] Forward arguments in all dispatch multiplexers
Behdad Esfahbod b10f6593 2019-05-05T09:23:35 [dispatch] Use functionality from previous commit To remove a couple of unwanted wrapper methods
Behdad Esfahbod 88a41472 2019-05-02T14:22:31 [serializer] Accept exact type in serialize_subset/copy()
Ebrahim Byagowi 92588782 2019-04-30T13:05:10 Remove space between right angle brackets now that we have C++11 (#1689)
Behdad Esfahbod 42526d16 2019-04-24T10:24:33 [serialize] Fix SingleSubstFormat1 failure
Behdad Esfahbod 915b9ea5 2019-04-24T10:07:19 [serialize] Add c->check_assign() To check for assignment overflows.
Behdad Esfahbod 00a00bc1 2019-04-24T10:01:30 Fix two TODOs
Behdad Esfahbod 95df00ae 2019-04-12T17:50:03 Hide a few static methods Looks like static methods that do not get inlined end up exported. We have a lot more. Need to protect all at some point. Wish there was an easier way, like the visibility flag we pass that automatically hides all inline methods. Was exposed by check-symbols.sh when compiling on OS X 10.14 with: $ make CPPFLAGS=-Oz CXXFLAGS=-flto=thin LDFLAGS=-lc++
Behdad Esfahbod 688069bb 2019-03-29T22:17:31 [iter] One more dagger
Behdad Esfahbod 90b60bd6 2019-03-29T22:12:42 Remove HB_DEBUG_WOULD_APPLY Not that useful.