Commit Graph

314 Commits

Author SHA1 Message Date
Behdad Esfahbod 6a7d6d4b64 [unsafe-to-concat] More annotations for MarkLigaturePos 2022-01-22 11:53:18 -07:00
Behdad Esfahbod b443898cce [unsafe-to-concat] Adjust MarkBasePos
A couple more aots tests down. Four failing:

209/401 harfbuzz:shaping+aots / gpos6                            FAIL             0.06s   exit status 1
261/401 harfbuzz:shaping+aots / gsub4_1_multiple_ligatures       FAIL             0.07s   exit status 1
265/401 harfbuzz:shaping+aots / lookupflag_ignore_attach         FAIL             0.07s   exit status 1
267/401 harfbuzz:shaping+aots / lookupflag_ignore_combination    FAIL             0.07s   exit status 1
2022-01-22 11:53:18 -07:00
Behdad Esfahbod 95d052a791 [unsafe-to-concat] Adjust GPOS lookbacks
Fixes Cursive aots test, fails a couple new aots ones.
2022-01-22 11:53:18 -07:00
Behdad Esfahbod 11bdd7a020 [unsafe-to-concat] Adjust CursivePos
Doesn't fix the test yet.
2022-01-22 11:53:18 -07:00
Behdad Esfahbod 48c5f26199 [unsafe-to-concat] Fix PairPos2 logic
Test failures down from 8 to 6:

113/400 harfbuzz:shaping+in-house / mongolian-variation-selector FAIL             0.06s   exit status 1
203/400 harfbuzz:shaping+aots / gpos3                            FAIL             0.06s   exit status 1
204/400 harfbuzz:shaping+aots / gpos4_lookupflag                 FAIL             0.06s   exit status 1
260/400 harfbuzz:shaping+aots / gsub4_1_multiple_ligatures       FAIL             0.06s   exit status 1
264/400 harfbuzz:shaping+aots / lookupflag_ignore_attach         FAIL             0.06s   exit status 1
266/400 harfbuzz:shaping+aots / lookupflag_ignore_combination    FAIL             0.06s   exit status 1
2022-01-22 11:53:18 -07:00
Behdad Esfahbod 78481b32c0 [gsubgpos] Combine input/backtrack/lookahead unsafe-to-concat
I feel like this is correct logic. Still have to prove.

Errors unchanged at 10.
2022-01-22 11:53:18 -07:00
Behdad Esfahbod 596bc7e939 [unsafe-to-concat] Add to GPOS kerning 2022-01-22 11:53:18 -07:00
Behdad Esfahbod e1cbd4539f [unsafe-to-concat] Add annotations to GPOS and kern
Failures from 13 to 14.
2022-01-22 11:53:18 -07:00
Behdad Esfahbod cce37a6f10 [gpos] Fix conditional 2022-01-21 07:31:21 -07:00
Behdad Esfahbod 84aa1a836c
[PairPos] Split GPOS kerning to both sides (#3235) 2022-01-20 14:18:19 -07:00
Behdad Esfahbod ac1bb3e39e [machinery] Move accelerators to constructor/destructor 2022-01-20 12:10:05 -07:00
Behdad Esfahbod 7e160dc347 [gpos] Fix unsafe-to-break of mark-attachment
This was undetected because most of the time marks were in same
cluster of their base already.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3093
2022-01-19 09:27:55 -07:00
Behdad Esfahbod ff697debd8 [GPOS] Apply font synthetic slant
Part of fixing https://github.com/harfbuzz/harfbuzz/issues/3196
2021-12-19 21:20:25 -08:00
Behdad Esfahbod ef14cad736 [GPOS] Disable vertical advance if HB_NO_VERTICAL 2021-12-08 10:43:52 -08:00
Behdad Esfahbod 6d555ce82e [meta] Use std::forward instead of hb_forward() 2021-11-02 00:18:22 -06:00
Nico Weber 96299d70ed Fix Wbitwise-instead-of-logical warnings
`a || b` only evaluates b if a is false. `a | b` always evaluates
both a and b. If a and b are of type bool, || is usually what you
want, so clang now warns on `|` where both arguments are of type bool.

This warning fires twice in harfbuzz. In both cases, `|` is used
intentionally, with a comment explaining this.

Slightly reorder the code a bit to make the compiler happy, and to
make it obvious even without a comment that both calls should be evaluated.

No intended behavior change.
2021-10-12 08:56:54 -06:00
Garret Rieger c2cc566c9d [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.
2021-09-22 16:07:18 -06:00
Behdad Esfahbod c852b86841 Rename HBGlyphID to HBGlyphID16 2021-09-19 16:30:12 -04:00
Garret Rieger 46d4a5e673 [subset] Convert subset plan to use a flags bit set. 2021-07-29 18:02:34 -07:00
Behdad Esfahbod f0a1892ff9 [serialize] Remove unnecessary pointer indirection 2021-07-28 17:36:22 -06:00
Behdad Esfahbod bb48bf52a4 Rename misc uses of "free"
In preparation for fixing https://github.com/harfbuzz/harfbuzz/issues/3044
2021-07-08 10:54:09 -07:00
Garret Rieger 8443cc85cb [subset] Correct OffsetTo serialization in GPOS to use serialize_serialize (). 2021-06-14 12:18:06 -07:00
Garret Rieger e25efb31f2 [subset] consider all value formats when computing effective format. 2021-04-23 19:09:37 -07:00
Qunxin Liu 84dbfacfec [subset] fix collect_variation_idx in PairPosFormat2 2021-04-23 18:52:24 -07:00
Garret Rieger d356d0f79c [subset] optimize ValueRecord's for PairPosFormat1. 2021-04-23 18:50:34 -07:00
Garret Rieger f9fbe4817e [subset] implement value record optimization for PairPosFormat2. 2021-04-23 18:50:34 -07:00
Garret Rieger badb8e409b [subset] use copy_values for PairPos serialize. 2021-04-23 18:50:33 -07:00
Garret Rieger 2f50283cd3 [subset] Begin implementing ValueRecord optimization:
remove value records which have a zero value.
2021-04-23 18:50:33 -07:00
Garret Rieger 5df7c668ba [subset] In SinglePosFormat1 serialize only 1 value record.
Previously one record per glyph in the subset was serialized.
2021-04-23 18:50:33 -07:00
Garret Rieger 92757f6809 [subset] Don't drop anchor device tables when dropping hints. These may contain variation data.
Update subseting expected files to match latest version of fontTools.
2021-04-23 18:50:33 -07:00
Qunxin Liu 9dc9f0385d [subset] fix for fuzzer testcase: https://oss-fuzz.com/testcase-detail/5858518134554624 2021-04-09 11:07:28 -06:00
Qunxin Liu 553ffaf682 [subset] fix for fuzzer testcase: https://oss-fuzz.com/testcase-detail/6382598554255360
avoid writing to null pointer
2021-04-08 09:54:48 -06:00
Garret Rieger 6f98a8ed46 [subset] Anchor should only use format 1 when hints are dropped.
Refactor Anchor to have a subset method instead of copy. This also allows
use to use serialize_subset in several places which simplifies calculating
offset bases.
2021-04-06 11:50:44 -06:00
Behdad Esfahbod 5639e253f9 Add Array16Of<> 2021-03-31 16:04:43 -06:00
Behdad Esfahbod 5efe360986 Rename (Unsized)OffsetListOf 2021-03-31 15:33:22 -06:00
Behdad Esfahbod 6c4e0491d7 s/OffsetArrayOf/Array16OfOffset16To/g 2021-03-31 15:31:32 -06:00
Behdad Esfahbod ad28f973f3 Rename offset types to be explicit about their size
Add Offset16To<>, Offset24To<>, and Offset32To<> for most use-cases.
2021-03-31 13:00:07 -06:00
Garret Rieger b14475d2ae [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.
2021-03-18 10:51:26 -07:00
Garret Rieger 73ed59f7a6 [subset] store errors in the serializer as a flag set.
Make check_assign/check_equal specify the type of error to set.
2021-03-17 15:58:34 -07:00
Qunxin Liu 56ca435787 [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.
2021-03-17 14:24:04 -07:00
Garret Rieger 2df39bcae7 [subset] don't allocate a set to use as a glyph filter for PairPosFormat2. 2021-03-16 14:49:35 -07:00
Garret Rieger bb54e1047d [subset] Also filter class1 by coverage when collecting variation indices for PairPosFormat2. 2021-03-16 14:49:35 -07:00
Garret Rieger 190b7a98f8 [subset] Update PairPosFormat2 subsetting to match fontTools updated subsetting (https://github.com/fonttools/fonttools/pull/2221)
- subset class def 1 against the coverage table.
- Don't re-use class 0 in class def 2.
- Ignore class 0 glyphs for the purposes of determing format 1 vs format 2 encoding for ClassDef.

Add an additional test case which demonstrates these issues.
2021-03-16 14:49:35 -07:00
Behdad Esfahbod 103ed7da83 [subset] Use dagger
Better fix for https://github.com/harfbuzz/harfbuzz/pull/2858
2021-02-19 16:48:30 -07:00
Garret Rieger 5ca353a2d0 [subset] fix heap buffer overflow found by fuzzer. 2021-02-16 12:43:02 -07:00
Behdad Esfahbod c7d232ce4e
Merge pull request #2701 from googlefonts/Mark-To-Ligature_grieger
[subset] GPOS 5 MarkToLigature subsetting support
2021-02-10 18:13:38 -07:00
Garret Rieger 1d9801e012 [subset] In AnchorMatrix::subset eliminate the use of dynamically allocated vector. 2020-10-05 14:43:29 -07:00
Garret Rieger 093909b2ff [subset] Fix wrong offset base for subsetting LigatureArray.
Offsets from LigatureArray must be relative to the beginning of the LigatureArray table. For the serialization mechanism to use the correct beginning point the LigatureArray must be created using the push()/pop() mechanism. So convert LigatureArray subsetting to use serialize_subset() instead of a manually called serialize and subset.
2020-10-05 13:14:53 -07:00
Garret Rieger 147e93b910 [subset] Fixes to get GPOS 5 subsetting code compiling. 2020-10-01 16:45:57 -07:00
Qunxin Liu 3a0b05faf1 [subset] GPOS 5 MarkToLigature subsetting support 2020-10-01 15:59:16 -07:00