src/hb-ot-layout-gsubgpos.hh


Log

Author Commit Date CI Message
Behdad Esfahbod 6695bf05 2022-04-22T13:48:41 [gsubgpos] Remove wrong condition in Context application Fixes https://github.com/harfbuzz/harfbuzz/issues/3545
Behdad Esfahbod a85461b9 2022-04-20T12:13:16 Add link to Context LookupFlag discussion https://github.com/harfbuzz/harfbuzz/discussions/3538
Behdad Esfahbod 044d7a06 2022-03-28T12:38:56 [indic-like] Add per-lookup per-syllable flag This allows mix-and-matching per-syllable and other lookups. In fact, removes the clear-syllables call completely. Fixes https://github.com/harfbuzz/harfbuzz/issues/3513
Behdad Esfahbod e8f3397f 2022-03-28T12:07:05 [matcher] Simplify syllable initialization
Behdad Esfahbod ccd9161b 2022-03-24T13:10:48 [apply-lookup] Try to fix the logic for contextual lookups Fixes https://github.com/harfbuzz/harfbuzz/issues/1611 Notably, this fixes Myles's AdditionFont: https://litherum.blogspot.com/2019/03/addition-font.html Test with AdditionFont, eg.: $ util/hb-view AdditionFont.otf =1112112+1113134=
Behdad Esfahbod bf2a845a 2022-03-24T13:09:53 [ot-layout] Comment
Garret Rieger 4e2f409b 2022-01-31T12:20:32 [subset] Don't hold references to members of the active_glyph_stack. These references may get invalidated after the vector for the stack is resized. Fixes: https://oss-fuzz.com/testcase-detail/5422577634377728
Garret Rieger bc899650 2022-01-28T13:54:10 [subset] Fix for issue #3397. cur_intersected_glyphs gets modified during recursion leading to incorrect filtering of sub tables in some cases. So don't use cur_intersected_glyphs. Instead just add an additional entry onto the parent_active_glyphs () stack. Additionaly expands NotoNastaliqUrdu tests to include coverage of the issue from #3397.
Garret Rieger f3c1f4f0 2022-01-28T11:50:22 [subset] convert active_glyphs_stack to be a vector of hb_set_t instead of hb_set_t*.
Behdad Esfahbod 60006d36 2022-01-20T15:29:28 [gsubgpos] Adjust chaining unsafe-to-concat application Fixes three tests.
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 3122c2cd 2021-12-04T19:50:33 [buffer] Add HB_GLYPH_FLAG_UNSAFE_TO_CONCAT Fixes https://github.com/harfbuzz/harfbuzz/issues/1463
Behdad Esfahbod ac1bb3e3 2022-01-20T11:47:17 [machinery] Move accelerators to constructor/destructor
Behdad Esfahbod e062376e 2022-01-19T17:09:34 [machinery] Make accelerator lazy-loader call Xinit/Xfini Instead of init/fini. To isolate those functions. To be turned into constructor/destructors, ideally one per commit (after some SFINAE foo.)
Behdad Esfahbod c8195dbc 2022-01-19T06:56:05 Merge pull request #3365 from harfbuzz/gdef-fix GDEF fix
Behdad Esfahbod 5a91db11 2022-01-13T12:44:48 [map] Remove constexpr invalid items These were non-workable in the general case, eg std::string.
Behdad Esfahbod fa12f1ae 2022-01-12T15:08:34 Rename method
Behdad Esfahbod 9408e0d6 2022-01-12T15:07:34 Rename variable
Behdad Esfahbod 96c969c8 2022-01-12T15:06:40 Preserve glyph props
Garret Rieger 77507a1d 2021-12-10T14:10:04 [subset] Don't double count visit lookups in closure_lookups Each recursed lookup was getting counted once in closure_lookups() and then again in hb_closure_lookups_context_t::recurse.
Garret Rieger d6702570 2021-12-10T13:52:05 [subset] reset the visited lookup count before each closure iteration.
Qunxin Liu 706014f6 2021-12-01T20:20:12 [subset] (Chain)ContextSubst glyph_closure fix - When pos_glyphs is empty, use current full glyphs set as input for subsequent recursive closure process - Also increase max_lookup_visit_count to 35000 cause a real font file hit previous limit 20000 and some lookups are dropped unexpectedly
Behdad Esfahbod 98fefd5d 2021-11-19T13:34:53 Merge pull request #3301 from harfbuzz/hashmap-classes Hashmap classes
Qunxin Liu ca418cac 2021-11-17T16:42:08 [subset] keep features that have FeatureParams and the tag is "size"
Qunxin Liu e88fc41e 2021-11-18T16:53:36 [subset] inputSequence could be empty, change the sanity check
Behdad Esfahbod 394f7729 2021-11-19T11:49:23 [map] Allow storing classes in the hashmap Fixes https://github.com/harfbuzz/harfbuzz/issues/3293 The trick was to change the type of the invalid key/value to be non-class.
Garret Rieger f51b48c8 2021-11-02T16:16:52 [subset] Fix fuzzer found memory leak. Happens because an insert into a map with an invalid key reports successful, but this causes the set being inserted to be lost.
Qunxin Liu 540f19b6 2021-10-29T17:11:53 [subset] fix bug in (Chain)ContextFormat2 Only keep rulesets for glyphs class numbers that survived in coverage
Qunxin Liu 364b6b39 2021-10-31T14:38:20 [subset] Don't assume FeatureList is sorted Though the spec said FeatureRecords are sorted alphabetically by feature tag, there're font files with unsorted FeatureList. And harfbuzz is not able to subset these files correctly because we use binary search in finding featureRecords when collecting lookups. Also find_duplicate_features needs to be updated to handle this.
Behdad Esfahbod 6d555ce8 2021-11-02T00:18:22 [meta] Use std::forward instead of hb_forward()
Qunxin Liu 36ed56b6 2021-09-23T10:51:21 [subset] code cleanup - rename copy() method if it takes extra parameter - get rid of same code blocks
Garret Rieger c2cc566c 2021-09-22T14:15:55 [subset] Fix subset_offset_array adding unused space to serializer. ArrayOf.serialize_append allocates space for the new item, but ArrayOf.pop() does not recover the allocated space. So in the case where the revert path was entered the extra space added by serialize_append gets left in the serialization buffer. This moves the snapshot to before ArrayOf.serialize_append is called so that revert cleans up the buffer extend.
Qunxin Liu 8c5c8174 2021-09-12T20:16:30 [subset] fix find_duplicate_features We should check each feature against all other features with the same tag for duplicates.
Qunxin Liu 37379f8f 2021-09-02T11:54:37 [subset] fox for (Chain)ContextFormat3: subset lookupRecord skip copying a lookupRecord if lookup referenced in the lookupRecord is not retained after subset
Behdad Esfahbod fad452bf 2021-08-16T20:48:24 [set] Move main functionality into hb_bit_set_t To add inversion on top in hb_invertible_set_t and use that as hb_set_t.
Behdad Esfahbod 30579f5a 2021-07-29T11:19:13 [set] Document & use open-ended del_range()
Behdad Esfahbod 2337f0d0 2021-07-08T10:58:50 Internally use hb_malloc/.../hb_free instead of malloc/.../free Redefining those stock names as macros was conflicting with gcc 10 headers. Fixes https://github.com/harfbuzz/harfbuzz/issues/3044
Garret Rieger 085aa65e 2021-06-14T16:47:45 [subset] Convert offset serialization in gsubgpos and gdef to serialize_serialize().
Behdad Esfahbod bc33b87f 2021-06-09T11:51:32 [set] Use references, not pointers, in internal C++ API
Garret Rieger 8b686afe 2021-04-06T11:33:38 [subset] add unlikely().
Garret Rieger 64122b5a 2021-04-05T12:53:08 [subset] don't visit lookup if covered glyph set has failed. If covered glyph set is in error then the same lookup can be recursed into repeatedly potentially causing a fuzzer timeout. Fixes: https://oss-fuzz.com/testcase-detail/5416421032067072.
Garret Rieger c35d7863 2021-04-01T14:32:38 [subset] never drop the 'pref' feature. Never ever drop feature 'pref', even if it's empty. Harfbuzz uses it to choose the shaper for Khmer.
Garret Rieger b10741ca 2021-03-25T19:14:48 [subset] when closing glyphs in context lookups don't use a current glyph set if a lookup is already applied.
Behdad Esfahbod 5639e253 2021-03-31T16:04:43 Add Array16Of<>
Behdad Esfahbod 5efe3609 2021-03-31T15:33:22 Rename (Unsized)OffsetListOf
Behdad Esfahbod 6c4e0491 2021-03-31T15:31:32 s/OffsetArrayOf/Array16OfOffset16To/g
Behdad Esfahbod 9b4b5849 2021-03-31T13:27:21 Fixup for recent OffsetTo<> changes
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.
Garret Rieger adca4ce0 2021-03-30T13:20:50 [subset] fixes https://oss-fuzz.com/testcase-detail/6173520787800064. Caused by incorrect bounds check in glyph closure for context lookups.
Garret Rieger 9f77a0c1 2021-03-30T14:10:45 [subset] use hb_set_clear to avoid calling clear() on null pool set.
Garret Rieger 752e393a 2021-03-29T17:23:33 [subset] avoid calling clear on null pool set.
Behdad Esfahbod 9ed5f04a 2021-03-29T18:14:30 [subset] Simplify recent out-of-memory fixes By checking return status of map->set().
Garret Rieger 52df6b9f 2021-03-29T16:17:27 [subset] check for set insertion success.
Garret Rieger c6adb90a 2021-03-29T16:08:44 [subset] fix nullptr deref.
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
Behdad Esfahbod 8450f43a 2021-03-15T15:18:06 [buffer] HB_NODISCARD next_glyph()
Behdad Esfahbod 34a1204f 2021-03-15T14:39:06 [buffer] HB_NODISCARD output_glyph() Also, generalize and use replace_glyphs() in morx where output_glyph() was used in a loop.
Behdad Esfahbod cac6c86d 2021-03-15T13:46:54 [buffer] HB_NODISCARD move_to()
Behdad Esfahbod 3f1998a0 2021-03-15T13:33:44 [buffer] HB_NODISCARD replace_glyph()
Behdad Esfahbod 2902529b 2021-03-02T15:05:22 [subset] Fix HB_TINY build Fixes https://github.com/harfbuzz/harfbuzzjs/issues/34#issuecomment-789247723
Behdad Esfahbod 83b66bfb 2021-02-23T13:04:25 Another try to fix narrowing error ../src/hb-ot-layout-gsubgpos.hh: In instantiation of ‘void OT::ChainRule::serialize_array(hb_serialize_context_t*, OT::HBUINT16, Iterator) const [with Iterator = hb_map_iter_t<hb_array_t<const OT::IntType<short unsigned int> >, const hb_map_t*&, (hb_function_sortedness_t)0, 0>; typename hb_enable_if<hb_is_iterator_of<Lhs, typename Lhs::item_t>::value>::type* <anonymous> = 0; OT::HBUINT16 = OT::IntType<short unsigned int>]’: ../src/hb-ot-layout-gsubgpos.hh:2341:30: required from here ../src/hb-ot-layout-gsubgpos.hh:2326:15: error: narrowing conversion of ‘(unsigned int)g’ from ‘unsigned int’ to ‘short unsigned int’ inside { } [-Werror=narrowing] c->copy (HBUINT16 {g}); ~~~~~~~~^~~~~~~~~~~~~~ https://github.com/harfbuzz/harfbuzz/pull/2875
Behdad Esfahbod f4f35a4d 2021-02-22T22:28:32 [constexpr] Use initializer instead of assignment
Behdad Esfahbod 6d941944 2021-02-19T17:08:10 Use auto in range-for-loop more
Garret Rieger 08a4997f 2020-10-06T13:02:12 [subset] Add subset support for Extension lookups (GPOS 9, GSUB 7).
Behdad Esfahbod dfa9d7ac 2021-02-11T11:08:52 [minor] Use serializer->propagate_error() to simplify code
Behdad Esfahbod d7e2a51d 2021-02-11T10:55:03 [minor] Add unlikely() when checking for error
Behdad Esfahbod 1da75afb 2021-02-10T00:03:30 [minor] Add unlikely()
Behdad Esfahbod 6a3fd94f 2021-02-09T20:49:04 Merge pull request #2699 from googlefonts/gpos_8 [subset] Add a more complex layout subsetting test case and fix the issues it exposed.
Behdad Esfahbod 6e1afac6 2021-02-09T18:48:46 [minor] Rename internal variable To address review comment: https://github.com/harfbuzz/harfbuzz/pull/2699#discussion_r573370781
Garret Rieger 8f47dd57 2020-11-04T11:05:22 [subset] don't set lookup visited in closure_lookups_context_t::recurse. - Lookup::closure_lookups also checks if the lookups visited and sets the lookup to visited. If we set visited in 'recurse' then Lookup::closure_lookups will fail to recurse into the children of the lookup. - Also when copying ChainRule's skip LookupRecord's that point to lookups which aren't retained. This matches FontTool's behaviour.
Behdad Esfahbod 53806e5b 2020-11-25T11:51:37 Tiny improvement on previous commit Functionally the same.
Dominik Röttsches a5f6f869 2020-10-23T14:25:05 Drop layout table if layout lookup accelerator allocation failed If the table is kept, when the table is present but only the accelerator allocation failed, then we run into nullptr dereferences downstream in hb_ot_map_t::apply when trying to access proxy.accels[i]. To fix this, instead of only setting lookup_count of accelerator_t itself, drop the whole table to avoid hb-ot-map construction assuming that the lookups will work correctly despite accelerator allocation having failed. Fixes: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=24490 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=24490
Garret Rieger 718bf5aa 2020-09-29T13:16:01 [subset] only keep features reachable from script in the final subset. Matches fontTools behaviour.
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.
Garret Rieger 940e1c6f 2020-09-28T17:22:01 [subset] ChainContextFormat3 - don't subset glyph sequences. The backtrack, input, and lookahead sequence must be matched in their entirety so these sequences should not be subset. If any of the coverage tables in a sequence subsets to empty then the whole subtable should be dropped since it's not possible for this lookup to be activated.
Garret Rieger e31c2690 2020-09-28T16:51:25 [subset] remove unnecessary returns.
Garret Rieger ad241f99 2020-09-28T15:26:13 [subset] check that sub rules in ChainContextFormat 1 and 2 intersect the glyphs set before recursing during closure lookups.
Garret Rieger 9fad5402 2020-09-28T13:24:25 [subset] check that sub rules in ContextFormat 1 and 2 intersect the glyphs set before recursing during closure lookups.
Garret Rieger a5c0ec75 2020-09-25T14:57:20 [subset] For [Chain]ContextFormat3 make sure the sub table intersects the retained glyphset before recursing to its lookups. Otherwise the lookup closure will potentially pull in lookups which cannot be accessed via the retained glyph set.
Garret Rieger dc375559 2020-09-25T13:08:46 [subset] shrink the serialize buffer when pruning empty offsets in ChainContextFormat2. Currently the code reduces the array length, but does not trim back the space allocated in the serializer for those empty offsets.
Garret Rieger 90eb1a40 2020-09-25T12:36:32 [subset] In ChainContextFormat3 don't skip subsetting if backtrack or lookahead are empty. It's valid to have a ChainContextFormat3 with either an empty backtrack or lookahead. Only drop the lookup if the input sequence is empty.
Garret Rieger 8c3d4de7 2020-09-09T12:38:34 [subset] Fix integer underflow in ContextFormat2.
Garret Rieger 1e4fe10b 2020-08-12T13:06:37 [ENOMEM] check for error in visited map during closure features.
Garret Rieger 9562239f 2020-08-12T13:01:22 [ENOMEM] check for error in lookup visited set.
Ebrahim Byagowi 9748ae72 2020-08-11T17:52:48 Revert "Reordering fails when GDEF table is absent #2140" This reverts commit f4cd99f28eefe695b86876736166fd119e22e04e. As requested in https://github.com/harfbuzz/harfbuzz/issues/2516#issuecomment-670969185
Garret Rieger 06dbb6ac 2020-07-31T15:56:14 [ENOMEM] in GSUB ChainContext subsetting check maps for allocation errors.
Ebrahim Byagowi 5a7cc7fd 2020-07-29T08:33:32 minor spacing tweak
Ebrahim Byagowi d0e2addd 2020-07-18T22:14:52 minor
Behdad Esfahbod 26111a11 2020-06-28T02:59:47 [dagger] Minor cleanup using hb_enumerate
Behdad Esfahbod 1535440b 2020-06-19T08:30:59 [dispatch] Fix debug builds
Behdad Esfahbod 70d6696c 2020-06-18T17:09:39 [dispatch] Don't require debug_depth for untraced objects
Behdad Esfahbod dc492d7c 2020-06-18T17:03:05 [dispatch] Comment
Behdad Esfahbod 25aec026 2020-06-18T16:58:01 [dispatch] Default return type to hb_empty_t
Behdad Esfahbod 8d0a90ac 2020-06-18T16:53:54 [dispatch] Default debug level to 0
Behdad Esfahbod d7d8604e 2020-06-18T16:51:01 Remove excessive trace routes
Behdad Esfahbod e47a2ab8 2020-06-18T16:48:07 Remove unused dispatcher names
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).