Commit Graph

10168 Commits

Author SHA1 Message Date
Behdad Esfahbod fc7f51aece [cff-common] Reduce iterator calls 2022-05-06 13:33:13 -06:00
Behdad Esfahbod c857b8e3c6 [cff-common] Set INDEX min_size to 2
That is what it is, for an empty INDEX.
2022-05-06 13:33:13 -06:00
Behdad Esfahbod dd71d2c1c3 [gvar] Protect against offset underflow 2022-05-06 13:02:26 -06:00
Behdad Esfahbod 9a6dabd61a [gvar] Remove sanitize check for data array
We are not checking in sanitize that offset array is ascending,
so this check was bogus.
2022-05-06 12:43:45 -06:00
Behdad Esfahbod 38478d1061 [gvar] DEFINE_SIZE_ARRAY instead of DEFINE_SIZE_MIN 2022-05-06 12:43:45 -06:00
Behdad Esfahbod 90d278c92e [gvar] Remove requirement that num_glyphs matches the font's 2022-05-06 12:43:45 -06:00
Behdad Esfahbod ca8a0f3ea3 [gvar] Protect against out-of-range access
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47281
Fixes https://oss-fuzz.com/testcase-detail/5508865908670464
2022-05-06 11:54:38 -06:00
Behdad Esfahbod f10ddb8dd8 [cmap] Use -1 as Unicode sentinel, not U+FFFF in Format12 serialize 2022-05-05 11:21:24 -06:00
Behdad Esfahbod 8a19968c8b [cmap] Use iterator bool operator 2022-05-05 11:17:23 -06:00
Behdad Esfahbod 8bfeea4828 [subset] Compute set max using previous() 2022-05-05 11:13:57 -06:00
Behdad Esfahbod 00cb8c629d [subset] Don't go into glyf table if it's empty 2022-05-05 11:13:57 -06:00
Behdad Esfahbod 4fe69bc413 [subset] Use del_range in _remove_invalid_gids 2022-05-05 11:13:57 -06:00
Behdad Esfahbod 2a42edccbe [subset] Cosmetic; use set bulk array population instead of for loop 2022-05-05 10:35:54 -06:00
Behdad Esfahbod 43938ecdc2 [subset] Remove outdated comment
I tried something like that. It was slower because of the allocations.
2022-05-04 16:59:28 -06:00
Behdad Esfahbod 50db78ba83 [subset] In cmap planning, remove a qsort() 2022-05-04 16:18:27 -06:00
Behdad Esfahbod 052812b6ba
Merge pull request #3561 from googlefonts/cmap_opt
[subset] Further cmap subsetting speed optimizations
2022-05-04 15:38:30 -06:00
Garret Rieger 7cb36e4222 [subset] Re-introduce size threshold in choosing unicode collection method.
Threshold is needed since the unicodes set might be an inverted set.
2022-05-04 21:22:26 +00:00
Garret Rieger 42c54eba83 [subset] Presize unicode to gid list to unicodes + glyphs size. 2022-05-04 20:21:43 +00:00
Garret Rieger 7c7c01d28c [subset] Remove switch to alternate unicode collection at large subset sizes.
Benchmarks show that the first path is always faster even at large subset sizes:

BM_subset_codepoints/subset_roboto/10_median                              +0.0324         +0.0325             0             0             0             0
BM_subset_codepoints/subset_roboto/64_median                              +0.0253         +0.0255             0             1             0             1
BM_subset_codepoints/subset_roboto/512_median                             +0.0126         +0.0128             1             1             1             1
BM_subset_codepoints/subset_roboto/4000_median                            +0.0500         +0.0491             6             7             6             7
BM_subset_codepoints/subset_amiri/10_median                               +0.0338         +0.0332             1             1             1             1
BM_subset_codepoints/subset_amiri/64_median                               +0.0238         +0.0234             1             1             1             1
BM_subset_codepoints/subset_amiri/512_median                              +0.0066         +0.0063             8             8             8             8
BM_subset_codepoints/subset_amiri/4000_median                             -0.0011         -0.0012            13            13            13            13
BM_subset_codepoints/subset_noto_nastaliq_urdu/10_median                  +0.0226         +0.0226             0             0             0             0
BM_subset_codepoints/subset_noto_nastaliq_urdu/64_median                  +0.0047         +0.0044            20            20            20            20
BM_subset_codepoints/subset_noto_nastaliq_urdu/512_median                 +0.0022         +0.0021           165           166           165           166
BM_subset_codepoints/subset_noto_nastaliq_urdu/1000_median                -0.0021         -0.0023           166           166           166           165
BM_subset_codepoints/subset_noto_devangari/10_median                      +0.0054         +0.0054             0             0             0             0
BM_subset_codepoints/subset_noto_devangari/64_median                      +0.0024         +0.0019             0             0             0             0
BM_subset_codepoints/subset_noto_devangari/512_median                     +0.0089         +0.0090             5             5             5             5
BM_subset_codepoints/subset_noto_devangari/1000_median                    -0.0028         -0.0019             5             5             5             5
BM_subset_codepoints/subset_mplus1p/10_median                             +0.0001         +0.0002             0             0             0             0
BM_subset_codepoints/subset_mplus1p/64_median                             +0.0073         +0.0075             1             1             1             1
BM_subset_codepoints/subset_mplus1p/512_median                            +0.0034         +0.0034             1             1             1             1
BM_subset_codepoints/subset_mplus1p/4096_median                           -0.1248         -0.1248             7             6             7             6
BM_subset_codepoints/subset_mplus1p/10000_median                          -0.0885         -0.0885            13            12            13            12
BM_subset_codepoints/subset_notocjk/10_median                             +0.0031         +0.0032             2             2             2             2
BM_subset_codepoints/subset_notocjk/64_median                             -0.0010         -0.0010             2             2             2             2
BM_subset_codepoints/subset_notocjk/512_median                            -0.0023         -0.0023             9             9             9             9
BM_subset_codepoints/subset_notocjk/4096_median                           -0.1725         -0.1726            28            23            28            23
BM_subset_codepoints/subset_notocjk/32768_median                          -0.0277         -0.0287           140           137           140           136
BM_subset_codepoints/subset_notocjk/100000_median                         -0.0929         -0.0926           162           147           162           147
2022-05-03 22:45:39 +00:00
Garret Rieger f0c04114bc [subset] Embed unicode to gid list vector in subset plan. 2022-05-03 22:02:59 +00:00
Behdad Esfahbod 15fa8afb21 Add fast-path for big-endian 32-bit byteswap
Speeds up cmap format-12 decoding by some 40% as measured by
the newly added test in perf/benchmark-font!
2022-05-02 16:46:41 -06:00
Behdad Esfahbod 3fff2e9182 [perf/benchmark-font] Cosmetic 2022-05-02 16:42:10 -06:00
Behdad Esfahbod 307d2d8bb6 [cmap] Sprinkle some 'unlikely's 2022-05-02 16:30:22 -06:00
Garret Rieger 85ec5cbcef [subset] In _populate_unicodes_to_retain populate unicodes in order.
Allows the set insert to take advantage of page lookup cache.
2022-05-02 22:29:43 +00:00
Garret Rieger 088133d939 [subset] cache cp to new gid list in subset plan.
This avoids having to recompute the ordered list multiple times during cmap generation.
2022-05-02 21:29:16 +00:00
Garret Rieger 6922a2561f [subset] Change serialize_rangeoffset_glyid back to using iterator. 2022-04-29 23:30:32 +00:00
Garret Rieger c66fd50c26 [subset] in cmap4 serialization save cp to gid iter to memory.
Iterator accesses are slow and it's iterated multiple times.
2022-04-29 23:18:53 +00:00
Garret Rieger 17b98563dc [subset] In cmap4 serialization reduce unnessecary calls into the iterator.
Gives ~20% speedup for large subsets.
2022-04-29 22:49:02 +00:00
Garret Rieger 5e241094bf [subset] In unicodes cache cleanup if set insert fails. 2022-04-29 22:45:16 +00:00
Garret Rieger a424a92ce5 [subset] s/void */intptr_t. 2022-04-29 22:14:03 +00:00
Garret Rieger aad67f5629 [subset] cache results of collect_unicodes. 2022-04-29 22:05:34 +00:00
Garret Rieger b4236b7de6 [subset] Optimize Cmap4 collect_unicodes.
Use set add_range() instead of individual add() calls.
2022-04-29 19:22:00 +00:00
Behdad Esfahbod 067225a86d [set] Optimize const page_for() using last_page_lookup caching
Similar to previous commit.

This speeds up SetLookup benchmark by 50%, but that's because that
lookup always hits the same page...
2022-04-29 13:04:36 -06:00
Behdad Esfahbod c283e41ce3 [set] Optimize non-const page_for() using last_page_lookup caching
This speeds up SetOrderedInsert tests by 15 to 40 percent, and the
subset_mplus1p benchmarks by 9 to 27 percent.
2022-04-29 12:45:48 -06:00
Behdad Esfahbod d8292b8446 [CFF] Fix parsing of empty Index
https://github.com/harfbuzz/harfbuzz/issues/3545#issuecomment-1111047941
2022-04-27 12:38:35 -06:00
David Corbett 6454cec085 [USE] Classify U+10A38 as CONS_MOD_BELOW 2022-04-24 11:41:32 -06:00
Khaled Hosny f7aee78e90 4.2.1 2022-04-24 05:47:57 +02:00
Behdad Esfahbod 6695bf0560 [gsubgpos] Remove wrong condition in Context application
Fixes https://github.com/harfbuzz/harfbuzz/issues/3545
2022-04-22 13:48:41 -06:00
Behdad Esfahbod 8575a8f50c Add _hb_codepoint_is_regional_indicator() 2022-04-21 11:15:34 -06:00
Behdad Esfahbod c1ee7d28f3 Typo
Co-authored-by: Khaled Hosny <khaled@aliftype.com>
2022-04-21 11:15:34 -06:00
Behdad Esfahbod 4d48fae4f2 Enforce Regional_Indicators native direction to LTR
And undo the morx direction reversal change introduced in
https://github.com/harfbuzz/harfbuzz/pull/3315
23159084b4

This fixes original bug https://github.com/harfbuzz/harfbuzz/issues/3314

And the reversion in morx code fixes regressions:
https://github.com/harfbuzz/harfbuzz/issues/3528
https://github.com/harfbuzz/harfbuzz/issues/3535

Supersedes:
https://github.com/harfbuzz/harfbuzz/pull/3529
2022-04-21 11:15:34 -06:00
Behdad Esfahbod a85461b9b6 Add link to Context LookupFlag discussion
https://github.com/harfbuzz/harfbuzz/discussions/3538
2022-04-20 12:13:40 -06:00
Simon Cozens 9e59c401e0 [myanmar] Reword confusing comment about masks 2022-04-20 11:25:15 -06:00
Behdad Esfahbod 903cf8cfce [check-static-inits] Unbreak test 2022-04-13 15:31:51 -06:00
Behdad Esfahbod ec925ece05 [khmer] Reinstate a pause after basic features
This was removed as part of 044d7a06db,
which caused the regression.  Just adding a pause fixes the shaping.
Debugged by just tracing the good/bad shaping and observing the
lookup orders intermingling in the bad shaping.

Test:
hb-shape LeelawUI.ttf --unicodes U+1780,U+17D2,U+179A,U+17BB

Fixes https://github.com/harfbuzz/harfbuzz/issues/3531
2022-04-13 11:54:08 -06:00
Khaled Hosny 88bb746b42 [blob] Return nullptr from create_from_file_or_fail
Fix a couple of cases where it would return empty blob, possibly
missed in bdfed8f113.
2022-04-01 02:38:23 +02:00
Behdad Esfahbod b179d357a9 [main] Fix unused-variable warnings 2022-03-30 12:59:52 -06:00
Khaled Hosny 9d5730b958 4.2.0 2022-03-30 15:08:34 +02:00
Behdad Esfahbod 044d7a06db [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
2022-03-28 17:39:54 -06:00
Behdad Esfahbod 61486746d3 Revert "[indic] Clear syllables before presentation features"
This reverts commit 90f09b1e87.

This regressed Indic shaping. See:
https://github.com/harfbuzz/harfbuzz/issues/3513
2022-03-28 15:57:07 -06:00
Behdad Esfahbod e8f3397f4e [matcher] Simplify syllable initialization 2022-03-28 13:23:37 -06:00
Behdad Esfahbod 94f5c630fc [aat] Remove morx deleted-glyphs before GPOS processing
Fixes new Apple Color Emoji glyphs sequences rendering.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3512
2022-03-28 13:10:56 -06:00
David Corbett 0dcbdbde9c [indic] Categorize U+0D04 as Consonant_Placeholder 2022-03-26 21:02:08 -06:00
Behdad Esfahbod a665e29ed7 [use] Avoid O(n^2) in the machine
Fixes https://github.com/harfbuzz/harfbuzz/issues/3502
2022-03-25 15:17:55 -06:00
Behdad Esfahbod ccd9161bfd [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=
2022-03-25 15:14:40 -06:00
Behdad Esfahbod fa15fc44bb [subset] Require exact harfbuzz version in .pc file
Fixes https://github.com/harfbuzz/harfbuzz/issues/1446
2022-03-25 15:00:36 -06:00
Behdad Esfahbod b619b05f39 [subset] Adjust name in .pc file 2022-03-25 15:00:36 -06:00
Khaled Hosny 1229078660 [set] Fix annotation 2022-03-25 22:41:25 +02:00
Behdad Esfahbod 3a78cf92c8 [gvar] Fix decoding of private vs shared points
Fixes https://github.com/harfbuzz/harfbuzz/issues/3506
2022-03-25 13:25:28 -06:00
Behdad Esfahbod a02fb4a0dc [glyf] Don't bail rendering glyf even if gvar failed
Part of https://github.com/harfbuzz/harfbuzz/issues/3506
2022-03-25 13:25:28 -06:00
Behdad Esfahbod 0a38878549 [set] Minor touch-up on the previous commit 2022-03-25 09:42:36 -06:00
Andrew John 0182988229
[set] Add call to export set contents to an array. (#3500)
[set] Add hb_set_next_many.
2022-03-25 09:36:44 -06:00
aneejit1 a55a42444d
Meson build writes to the source directory (issue #3507 ) (#3508)
Don't write to source directory if files did not change

Remove writes to the source directory which cause a meson build failure
if the source directory is read-only.

https://github.com/harfbuzz/harfbuzz/pull/3508
2022-03-24 14:16:41 -06:00
Behdad Esfahbod bf2a845a17 [ot-layout] Comment 2022-03-24 13:09:53 -06:00
Behdad Esfahbod a792e16e48 [ot-layout] Change max nesting level of lookups from 6 to 64 2022-03-24 13:08:51 -06:00
Garret Rieger 444c2375a1 [reorg] Use relative includes for hb-ot-layout-gsubgpos.hh 2022-03-23 18:05:24 -06:00
Garret Rieger b342adeb96 [reorg] Move GSUB into OT::Layout::GSUB namespace. 2022-03-23 18:05:24 -06:00
Garret Rieger a9910e258f [reorg] Move SubstLookup and GSUB into the new layout. 2022-03-23 18:05:24 -06:00
Garret Rieger 90af2143d5 [reorg] Move ReverseChainSingleSubst to new layout. 2022-03-23 18:05:24 -06:00
Garret Rieger 403feb3804 [reorg] Move LigatureSubst to new layout. 2022-03-23 18:05:24 -06:00
Garret Rieger 6a369389d6 [reorg] Move AlternateSubst to new layout. 2022-03-23 18:05:24 -06:00
Garret Rieger dea0681db2 [reorg] Move MultipleSubst into new layout. 2022-03-23 18:05:24 -06:00
Behdad Esfahbod 7243bf3e41 [reorg] Use relative include 2022-03-23 18:05:24 -06:00
Behdad Esfahbod c180f93766 [reorg] Move sanitize/dispatch and size macros to top 2022-03-23 18:05:24 -06:00
Garret Rieger f577d02f4a [reorg] Fix check-* scripts to work with sources files in directories. 2022-03-23 18:05:24 -06:00
Garret Rieger 3ef180db44 [reorg] Move SingleSubst opentype fields to top of the classes. 2022-03-23 18:05:24 -06:00
Garret Rieger 7dfd9e7001 [reorganization] WIP move single substitution into separate files. 2022-03-23 18:05:24 -06:00
Khaled Hosny c36844d6d9 4.1.0 2022-03-23 07:20:59 +02:00
Behdad Esfahbod d35c73cd37 [buffer] Whitespace 2022-03-22 13:09:50 -06:00
Behdad Esfahbod 1449498e1d [ot-font] Vertically center glyph in vertical writing fallback
Fixes https://github.com/harfbuzz/harfbuzz/issues/537
2022-03-21 21:40:07 -06:00
Behdad Esfahbod bf03d7e962 [ot-font] Use ascent+descent for fallback vertical advance
This matches what FreeType does.

Part of fixing https://github.com/harfbuzz/harfbuzz/issues/537
2022-03-21 21:27:31 -06:00
Behdad Esfahbod df42d28d18 [hmtx] Change default advance for horizontal direction to upem/2 again 2022-03-21 21:17:15 -06:00
Behdad Esfahbod 6d0e67dee0 [ot-font] Only use vmtx side-bearing if table exists
Part of fixing https://github.com/harfbuzz/harfbuzz/issues/537
2022-03-21 21:07:28 -06:00
Behdad Esfahbod f41945e313 [cmap] In collect_unicodes() of format 12/13, limit to max Unicode
Fixes fuzzer timeout:
https://oss-fuzz.com/testcase-detail/5062368881672192
2022-03-21 18:24:30 -06:00
Behdad Esfahbod 03085132ba [buffer] Fix out-buffer under memory-alloc failure
This was broken in July refactoring of the buffer, and exposed to
ReverseChainSingleSubstFormat1 in 3807061d63

Fixes:
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=38800
https://bugs.chromium.org/p/chromium/issues/detail?id=1303552
2022-03-21 18:09:06 -06:00
Khaled Hosny 116cc69236 [set] Fix documentation 2022-03-22 00:15:23 +02:00
Behdad Esfahbod 90f09b1e87 [indic] Clear syllables before presentation features
Fixes https://github.com/harfbuzz/harfbuzz/issues/3488
2022-03-21 15:42:08 -06:00
Behdad Esfahbod 4289684cdb [set] Fix-up previous commits 2022-03-21 15:37:05 -06:00
Andy John 1176620ba4 Move fn, fix doc. 2022-03-21 15:32:59 -06:00
Andy John 7d802994be Remove null checks. 2022-03-21 15:32:59 -06:00
Andy John ef588ea97b Add option to insert a sorted arrays of values to sets. 2022-03-21 15:32:59 -06:00
Andy John 7a1e79c3ba Fix typo. 2022-03-21 14:34:22 -06:00
Andy John 4ee00f943f Use bit shifting instead of multiplying and dividing. 2022-03-21 14:34:22 -06:00
Andy John 3125f5ae33 Add log base 2 versions of constants. 2022-03-21 14:34:22 -06:00
Behdad Esfahbod 1ffe637a0e [coretext] Remove dead code
Fixes https://github.com/harfbuzz/harfbuzz/issues/3484
2022-03-21 10:37:42 -06:00
TheBluuDot 7bdc20ec81 restores unintended addition in 43be5ba
restores two lines in restore in _hb_allocate_lig_id function that were unintentionally deleted in 43be5ba
2022-03-19 15:12:25 -04:00
Qunxin Liu 7cb002cb58 [subset] bug fix in prune_langsys
we should not cache visited langsys cause 2 different Record<Langsys>
could have different Tag while pointing to the same Langsys, a langsys
is redundant in Record<Langsys> A does not mean it's redundant in Record
B. Same thing for visited_script.
Also adding the number of features in the LangSys's feature list to the
visited langsys count so it's more accurate.
Plus some improvement in langsys compare()
2022-03-16 13:08:13 -06:00
Behdad Esfahbod cad2fe8e63 [baseline] Fix HB_NO_METRICS build
Fixes https://github.com/harfbuzz/harfbuzz/issues/3482
2022-03-15 10:49:29 -06:00
Behdad Esfahbod a8a89b80b4 [layout] Whitespace 2022-03-15 10:48:03 -06:00
Behdad Esfahbod 21f5ef56f5 [metrics] Simplify x-height fallback 2022-03-15 10:45:50 -06:00