Commit Graph

11550 Commits

Author SHA1 Message Date
Behdad Esfahbod 59f8afa73e [avar2] Remove XXX item 2022-07-22 15:29:57 -06:00
Behdad Esfahbod d6c4f757a4 [avar2] Clamp out values 2022-07-22 15:29:57 -06:00
Behdad Esfahbod d0e2ad9297 [avar] Pre-alloc vector 2022-07-22 15:29:57 -06:00
Behdad Esfahbod 2a877b554a [avar2] First stab at mapping v2 values 2022-07-22 15:29:57 -06:00
Behdad Esfahbod c3eb6713e9 [avar2] Add v2 structure and sanitize 2022-07-22 15:29:57 -06:00
Behdad Esfahbod c9e843942e [min/max] Don't forward argument 2022-07-22 09:01:28 -06:00
Behdad Esfahbod cb5ca6be29 [ft] Actually call check_changed() from _changed()
Ouch!

Fixes https://github.com/harfbuzz/harfbuzz/issues/3746
2022-07-22 05:48:27 -06:00
Behdad Esfahbod fd535a240b [ft] Remove check_changed from get_glyph_shape()
Leftover.
2022-07-22 05:48:12 -06:00
Behdad Esfahbod 7cdde6a241 [ClassDef] Write a loop as range for 2022-07-21 17:18:45 -06:00
Behdad Esfahbod 0cc2f3c218 [algs] Remove hb_pair_t() 2022-07-21 16:46:45 -06:00
Behdad Esfahbod 9eab3ac72d [CoverageFormat2] Remove hand-written loop
While on a fuzzer-found test case (added) that loop was faster,
on real fonts, including NotoNastaliq in our benchmark, it was
actually slower, which intuitively I would have expected.

Still no idea why on that fuzzer case it's faster though. :(
2022-07-21 12:36:53 -06:00
Behdad Esfahbod bbb4db90dd [Coverage/SingleSubst] Move hand-written loop to Coverage 2022-07-21 12:34:46 -06:00
Behdad Esfahbod 7b95783efb [Coverage] Internal rename 2022-07-21 12:18:51 -06:00
Behdad Esfahbod afa65f2903 [Coverage] Minor type change 2022-07-21 12:17:08 -06:00
Behdad Esfahbod b38587aa0b [Coverage] Internal renames 2022-07-21 12:14:06 -06:00
Behdad Esfahbod 84d38df828 [Coverage] Minor use range-based loop 2022-07-21 12:12:04 -06:00
Behdad Esfahbod b017b73ffe [Coverage] Minor remove a couple unnecessary as_array()'s 2022-07-21 12:06:55 -06:00
Behdad Esfahbod 9e650b4e0c [Coverage] Speedup intersect_set 2022-07-21 12:01:52 -06:00
Behdad Esfahbod efa388074d [subset/SingleSubsetFormat1] Use Coverage.intersect_set 2022-07-21 11:52:36 -06:00
Behdad Esfahbod 00dfbbce1c [Coverage] Rename and templatize intersected_coverage_glyphs 2022-07-21 11:45:05 -06:00
Behdad Esfahbod d0eb273791 [subset/GSUB/GPOS] Use more intersected_coverage_glyphs() 2022-07-21 11:24:56 -06:00
Behdad Esfahbod 450d834679 [subset/PairPosFormat1] Speed up significantly 2022-07-21 11:05:35 -06:00
Behdad Esfahbod 5d7556e184 Revert "[subst/SingleSubstFormat1] Rewrite nicer"
This reverts commit bababe1072.

The hand-written code is still much faster :(.
2022-07-21 10:58:36 -06:00
Behdad Esfahbod 71ce931e6d [PairPos] Don't compute newFormat
It was wrong, because it would be writing wrong values.

Test suite doesn't seem to catch any.
2022-07-21 10:41:29 -06:00
Behdad Esfahbod 02ca025443 [layout] Add large_int to Types 2022-07-21 10:30:23 -06:00
Behdad Esfahbod bababe1072 [subst/SingleSubstFormat1] Rewrite nicer 2022-07-21 10:25:27 -06:00
Behdad Esfahbod cf123e6a0d [Coverage] Add get_population () 2022-07-21 10:24:04 -06:00
Behdad Esfahbod 2ad3c0c770 Fix uninitialized variable 2022-07-21 09:46:25 -06:00
Behdad Esfahbod fa471043fc [subset] Fix previous commit 2022-07-20 22:42:18 -06:00
Behdad Esfahbod c4d2ef9004 [subset] Speed up subsetting of SingleSubstFormat1_3 2022-07-20 22:36:35 -06:00
Behdad Esfahbod d01e6babe6 [subset] Speed up SingleSubstFormat1_3 closure 2022-07-20 22:17:33 -06:00
Qunxin Liu 0f80076937 [subset] Do not repeat COLR table closure 2022-07-20 19:17:34 -06:00
Behdad Esfahbod 9fc31db6fa [blob] Initialize members if ever on the stack 2022-07-20 16:03:02 -06:00
Behdad Esfahbod 60a9175f2c [blob] Remove fini_shallow() 2022-07-20 15:59:46 -06:00
Behdad Esfahbod bcd59b5142 [set/map] Remove init_shallow/fini_shallow() 2022-07-20 15:58:28 -06:00
Behdad Esfahbod 79b23cc25d Fix another leak 2022-07-20 15:38:34 -06:00
Behdad Esfahbod 3fad942ee2 Try fix leak 2022-07-20 15:26:32 -06:00
Behdad Esfahbod e1b5f2f806 [object] Call destructor in hb_object_destroy() 2022-07-20 15:07:55 -06:00
Behdad Esfahbod 9ea4ab6051 [object] Call constructor 2022-07-20 14:57:32 -06:00
Behdad Esfahbod 61c0438425 [map] Allow geting non-const value pointer out with has() 2022-07-20 14:43:58 -06:00
Behdad Esfahbod 00cfc5c17d [map] Don't set out value in has() if not found 2022-07-20 14:38:28 -06:00
Behdad Esfahbod 485f043211 [map] Enable using hashmap with unique_ptr 2022-07-20 14:34:55 -06:00
Behdad Esfahbod 53fd4c9236 [set] A variable rename 2022-07-20 13:33:49 -06:00
Behdad Esfahbod 6826b2c3fd [gsubgpos/closure] Minor condition use bool operator 2022-07-20 13:25:34 -06:00
Behdad Esfahbod 55a1e0bb11 [ot-map] Use hb_array for a return value 2022-07-20 13:15:55 -06:00
Behdad Esfahbod 8d923363db [layout] Reduce number of closure rounds 2022-07-20 12:09:00 -06:00
Behdad Esfahbod aae8c74e05 [>64k:layout:SingleSubstFormat3] Fix masking
https://github.com/be-fonts/boring-expansion-spec/issues/31
2022-07-20 11:51:27 -06:00
Behdad Esfahbod 3c137ef041 [GPOS/CursivePos] Fix unsafe-to-break marking
Fixes test.
2022-07-20 11:29:30 -06:00
Behdad Esfahbod 5998cd00c8 [hebrew] Break out of reordering loop when pattern found 2022-07-20 11:16:32 -06:00
Behdad Esfahbod d861303797 [hebrew] Comment 2022-07-20 10:57:12 -06:00
Behdad Esfahbod c60d810d50 [hebrew] Implement Jerusalem mark reordering
Fixes https://github.com/harfbuzz/harfbuzz/issues/2947
2022-07-20 10:25:31 -06:00
Khaled Hosny 605bb1ee3d [subset] Add amalgam harfbuzz-subset.cc
Fixes https://github.com/harfbuzz/harfbuzz/issues/3733
2022-07-19 17:15:35 -06:00
Qunxin Liu 712bfa8872 build fix for HB_NO_VAR 2022-07-19 15:16:37 -06:00
Behdad Esfahbod 798a0c8a58 Fix build 2022-07-19 14:40:47 -06:00
Behdad Esfahbod 8737dea4d9 [>64k:layout:GDEF] Implement version 2
Implements https://github.com/be-fonts/boring-expansion-spec/issues/36

Subset does NOT lower format.
2022-07-19 14:39:47 -06:00
Behdad Esfahbod 8080e01afc [>64k:layout] Templatize GDEFVersion1 2022-07-19 14:35:58 -06:00
Behdad Esfahbod 1665cf6bc4 [>64k:layout] Split GDEFVersion1
https://github.com/be-fonts/boring-expansion-spec/issues/36
2022-07-19 14:21:48 -06:00
Behdad Esfahbod 1de5591cf7 [>64k:layout] Prepare GDEF for templatizing
https://github.com/be-fonts/boring-expansion-spec/issues/36
2022-07-19 14:21:48 -06:00
Khaled Hosny c0d60bd496 [meta] Fix warning with emscripten
For whatever reason, em++ takes the first branch and spouts a gazillion
warnings like:

./harfbuzz/src/hb-vector.hh:229:20: warning: builtin __has_trivial_assign is deprecated; use __is_trivially_assignable instead [-Wdeprecated-builtins]
            hb_enable_if (hb_is_trivially_copy_assignable(T))>
                          ^
./harfbuzz/src/hb-meta.hh:193:44: note: expanded from macro 'hb_is_trivially_copy_assignable'
2022-07-19 11:33:54 -06:00
Behdad Esfahbod 91c60802e6 [open-type] Fix overflow check
Without the cast, the compiler is within its rights to reason that
overflow didn't happen and optimize away the check, as clang was.
2022-07-18 22:24:28 -06:00
Behdad Esfahbod 4279304a62 [stat] Fix double-promotion warnings 2022-07-18 22:20:06 -06:00
Behdad Esfahbod 54e9ab4a91 [GPOS/Cursive] Fix breaking of parent-child attachment
Mostly fixes https://github.com/harfbuzz/harfbuzz/issues/2469
2022-07-18 18:57:14 -06:00
Behdad Esfahbod c2baf2796c [arabic] Make more features F_MANUAL_ZWJ
The change to `ccmp` fixes shaping of certain sequences with
Calibri on Windows 11.  Addition of `liga` and `clig` is
speculative.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3530
2022-07-18 15:41:20 -06:00
Behdad Esfahbod ddeef8c875 [test-ot-glyphname] Fix return value 2022-07-18 15:13:47 -06:00
Qunxin Liu be8e8e8c80 [instance] prune name tables after axes pinned at fixed locations
Restricting axes to ranges is not supported yet.
2022-07-18 14:59:07 -06:00
Qunxin Liu df55f840cb [instance] instantiate STAT table when axes are pinned at fixed locations
restricting ranges is not supported yet.
2022-07-18 14:59:07 -06:00
Qunxin Liu 2a4773e43d add option "--instance", store axes_location in subset_plan and drop all
variation tables when all axes are pinned at default
2022-07-18 14:59:07 -06:00
Behdad Esfahbod 5744e951fc [gir] Skip graphite API
Fixes https://github.com/harfbuzz/harfbuzz/issues/2557
2022-07-18 14:54:44 -06:00
Behdad Esfahbod 3723b8544b [cff] Better max op counting 2022-07-18 14:00:14 -06:00
Behdad Esfahbod 3c84aa8416 [cff] Add a max work counter
Set to 10,000 per interpretation right now.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3700
Fixes https://oss-fuzz.com/testcase-detail/5667125715927040
2022-07-18 13:57:59 -06:00
Behdad Esfahbod 89de8c700f [CoverageFormat2] Another fix for broken tables
Fixes https://oss-fuzz.com/testcase-detail/6005342714068992
2022-07-18 13:07:29 -06:00
Behdad Esfahbod 4f22397f05 [ft] A couple of introspection fixes 2022-07-18 11:03:54 -06:00
Behdad Esfahbod f7f6d278bb Add hb_language_matches()
New API:
+ hb_language_matches()
2022-07-17 22:15:42 -06:00
Behdad Esfahbod d57ce30054 [ot-shape] Pass reference to props instead of pointer
Since cannot be nullptr.
2022-07-17 21:56:56 -06:00
Behdad Esfahbod a972d05d7e [aat] Fix build 2022-07-17 21:42:04 -06:00
Behdad Esfahbod 2124ad8906 [aat/morx] Implement language-specific forms
Test on Mac with, eg.

$ hb-view /Library/Fonts/BigCaslon.ttf -u 107
vs
$ hb-view /Library/Fonts/BigCaslon.ttf -u 107 --language pl

Fixes https://github.com/harfbuzz/harfbuzz/issues/1373
2022-07-17 21:32:27 -06:00
Behdad Esfahbod d8574b44cc [CoverageFormat2] Fix iterator to avoid infinite loop
on invalid data.

Fixes https://oss-fuzz.com/testcase-detail/5304497047470080
2022-07-17 18:44:27 -06:00
Behdad Esfahbod b475a2ab29 [array] Adjust operator != 2022-07-17 18:44:11 -06:00
Behdad Esfahbod 9518d602f3 [atomic] Disable compiler memory barrier on MSVC
It keeps giving me internal compiler error.

https://github.com/harfbuzz/harfbuzz/issues/3728
2022-07-17 17:03:40 -06:00
Behdad Esfahbod f0707e2348 [atomic] Add compiler memory_r_barrier
https://github.com/harfbuzz/harfbuzz/issues/3728
2022-07-17 16:47:16 -06:00
Behdad Esfahbod f3151b6582 [ArrayOf family] Use memory barrier before accessing array
Without it, the compiler was reordering and batching the read
of array length and array[0] if the 0'th member was accessed
constantly and function was inlined.  This felt safe to the
compiler because HB_VAR_ARRAY is 1, but could be unsafe actually.
The memory barrier disallows that.

This was found by afl/honggfuzz address sanitizers.
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49187
2022-07-17 16:22:29 -06:00
Behdad Esfahbod 90e40f24fe [algs] Tweak attribute(packed) usage
Allow disabling it. Also don't cast this pointer.
2022-07-17 15:01:04 -06:00
Behdad Esfahbod af84680f23 [GSUB] Remove a reinterpret_cast 2022-07-17 12:00:04 -06:00
Behdad Esfahbod 9843f07658 [OffsetTo] Try catching nullable offsets to unbounded types
Doesn't catch all cases; if type is not fully defined at
OffsetTo time, we can't know.

Fixes https://github.com/harfbuzz/harfbuzz/issues/1300
to the best we can do.
2022-07-15 16:04:40 -06:00
Behdad Esfahbod 1327d8e3df [layout-common] Reshuffle code so Feature is defined before it's used 2022-07-15 16:03:38 -06:00
Behdad Esfahbod f7147835eb [colr] Add MIN_SIZE to Paint 2022-07-15 16:03:25 -06:00
Behdad Esfahbod e1d2facd53 [null] Add hb_has_null_size() and hb_has_min_size() 2022-07-15 16:02:58 -06:00
Behdad Esfahbod 6ed57de15c [ft] Fix negative font sizes for bitmaps 2022-07-15 15:09:28 -06:00
Behdad Esfahbod 307ee9baff [ft] Fix bitmap-only vertical metrics 2022-07-15 14:48:29 -06:00
Behdad Esfahbod 87d338eb61 [ft] Fix test 2022-07-15 14:26:47 -06:00
Khaled Hosny e294200dac [ft] Check for FT_Get_Transform at build time 2022-07-15 21:59:33 +02:00
Behdad Esfahbod 901236f721 [ft] Implement loading (color) bitmap fonts
Fixes https://github.com/harfbuzz/harfbuzz/issues/489

Something about the vertical metrics is still off, not matching
hb-ot.  I cannot figure out what.
2022-07-15 13:35:14 -06:00
Behdad Esfahbod 3ac110560d [ft] Fix scale when font-sizes are negative 2022-07-15 12:48:11 -06:00
Behdad Esfahbod d68507d062 [arabic] Pause after calt only if no rclt
Fixes https://github.com/harfbuzz/harfbuzz/issues/1573
2022-07-15 12:27:46 -06:00
Behdad Esfahbod 8b379ddc76 [test-iter] Add back test of OT namespace iteration 2022-07-14 16:20:04 -06:00
Garret Rieger 5363e40de1 [reorg] update build files. 2022-07-13 20:25:13 -06:00
Garret Rieger d82ace5c6f [reorg] add TODO to RangeRecord. 2022-07-13 20:25:13 -06:00
Garret Rieger c1e280ea78 [reorg] Move Coverage, RangeRecord into new namespace layout. 2022-07-13 20:25:13 -06:00
Garret Rieger 9c2518988d [repack] Don't count space isolation against round limit.
Restore max rounds to 20 but don't count space isolation against the limit. The number of iterations space isolation can make changes for is already bounded to a reasonable max (the number of lookups in the font) so no need to cap the number of iterations.
2022-07-13 20:24:59 -06:00
Behdad Esfahbod a2f0723148 [GPOS] Adjust mark attachment on multiple substitution some more
Fixes https://github.com/harfbuzz/harfbuzz/issues/1545
2022-07-13 16:02:39 -06:00
Behdad Esfahbod ac216972ab [subset] Add table size blowup bound
Fixes https://github.com/harfbuzz/harfbuzz/issues/3091
2022-07-13 15:32:19 -06:00
Behdad Esfahbod 4b3afafb00 [array] Use hb_swap() in reverse() 2022-07-13 15:13:07 -06:00
Behdad Esfahbod 87167acfe3
Merge pull request #3704 from harfbuzz/64k
Towards breaking the 64k in GSUB/GPOS
2022-07-13 14:58:09 -06:00
Garret Rieger a369ab133b [repacker] Increase max_rounds when called via public api. 2022-07-13 14:01:42 -06:00
Behdad Esfahbod 4ee471922d More -Wcomma fixes
Fixes https://github.com/harfbuzz/harfbuzz/issues/3716
2022-07-13 13:59:35 -06:00
Behdad Esfahbod c2712ff4f5 Reorder hb_ot_shaper_t members to save 8 bytes of data per shaper 2022-07-13 13:34:11 -06:00
Behdad Esfahbod e5f0bc8f0a [set] Save a few kilobytes via type erasure of process() 2022-07-13 13:22:34 -06:00
Behdad Esfahbod 42da7da5ef Fix HB_NO_SHAPER HB_NO_OT_SHAPE build 2022-07-13 12:46:36 -06:00
Behdad Esfahbod 015aecfcdd [use-table] Port to using packtab
Saves around 9kb.
2022-07-13 12:24:46 -06:00
Behdad Esfahbod 0fcd1decb7 Fix file permissions 2022-07-13 12:17:35 -06:00
Behdad Esfahbod 7549d447ba [>64k:glyf] Implement composites for >64k
Implements https://github.com/be-fonts/boring-expansion-spec/issues/42
2022-07-12 13:42:52 -06:00
Behdad Esfahbod 09de94788b [>64k:glyf] Hid composite glyphIndex 2022-07-12 13:42:52 -06:00
Behdad Esfahbod df7eebf40a [>64k:layout] Fix layout of RangeRecord
https://github.com/be-fonts/boring-expansion-spec/issues/30
2022-07-12 13:42:52 -06:00
Behdad Esfahbod 99f017f41d [>64k:layout:GSUBGPOS] Implement format 2
Implements https://github.com/be-fonts/boring-expansion-spec/issues/58

Subset does NOT lower format.
2022-07-12 13:42:52 -06:00
Behdad Esfahbod 9ef9fc0114 [>64k:layout] Templatize GSUBGPOSFormat1 2022-07-12 13:42:52 -06:00
Behdad Esfahbod 5fd0a3f0b9 [>64k:layout] Templatize GSUBGPOSFormat1 2022-07-12 13:42:52 -06:00
Behdad Esfahbod f6c2aaeea4 [>64k:layout] Add List16OfOffsetTo 2022-07-12 13:42:52 -06:00
Behdad Esfahbod 6d0e3e677b [>64k:layout] Split GSUBGPOSVersion1 into own struct 2022-07-12 13:42:52 -06:00
Behdad Esfahbod 04c5cd4085 [subset/layout] Move find_duplicate_features to subset from layout 2022-07-12 13:42:52 -06:00
Behdad Esfahbod 1bf8fa2f1f [>64k:layout:(Chain)Context] Implement format 4
Implements rest of https://github.com/be-fonts/boring-expansion-spec/issues/34

Subset does NOT lower format.
2022-07-12 13:42:52 -06:00
Behdad Esfahbod 0f13eb1f5c [>64k:layout] Templatize (Chain)ContextFormat1 2022-07-12 13:42:52 -06:00
Behdad Esfahbod d1f58e5979 [>64k:layout:(Chain)Context] Implement format 5
Implements part of https://github.com/be-fonts/boring-expansion-spec/issues/34

Subset does NOT lower format.
2022-07-12 13:42:52 -06:00
Behdad Esfahbod a90c5af9d2 [>64k:layout] Templatize (Chain)ContextFormat2 2022-07-12 13:42:52 -06:00
Behdad Esfahbod cc83b0b8fd [>64k:layout:MarkBasePos/MarkMarkPos/MarkLigPos] Implement format 2
Implements https://github.com/be-fonts/boring-expansion-spec/issues/40

Subset does NOT lower format.
2022-07-12 13:42:52 -06:00
Behdad Esfahbod 4b43070e2f [>64k:layout] Templatize MarkBasePos/MarkMarkPos/MarkLigPos 2022-07-12 13:42:52 -06:00
Behdad Esfahbod f0d6dda5a6 [>64k:layout:PairPos] Implement format 3
Implements rest of https://github.com/be-fonts/boring-expansion-spec/issues/38

Subset does NOT lower format.
2022-07-12 13:42:52 -06:00
Behdad Esfahbod 298ee47c55 [>64k:layout] Templatize PairPosFormat1 2022-07-12 13:42:52 -06:00
Behdad Esfahbod e9f8010fd0 [>64k:layout:PairPos] Templatize & implement format 4
Implements part of https://github.com/be-fonts/boring-expansion-spec/issues/38

Subset does NOT lower format.
2022-07-12 13:42:52 -06:00
Behdad Esfahbod ecd8bc5a9c [>64k:layout:LigatureSubst] Implement format 2
Implements https://github.com/be-fonts/boring-expansion-spec/issues/33

Subset does NOT lower format.
2022-07-12 13:42:52 -06:00
Behdad Esfahbod 9d0e9faa43 [>64k:layout] Templatable bunch of GSUBGPOS internal functions 2022-07-12 13:42:52 -06:00
Behdad Esfahbod 429b387a6f [>64k:layout] Support HBUINT24 in skippy_iter 2022-07-12 13:42:52 -06:00
Behdad Esfahbod 1ef67a6d66 [gsubgpos] Remove HBUINT16 from matcher 2022-07-12 13:42:52 -06:00
Behdad Esfahbod 704e696ad0 [>64k:layout] Templatize LigatureSubst 2022-07-12 13:42:52 -06:00
Behdad Esfahbod 27d24212db [>64k:layout:AlternateSubst] Implement format 2
Implements rest of https://github.com/be-fonts/boring-expansion-spec/issues/32

Subset does NOT lower format.
2022-07-12 13:42:52 -06:00
Behdad Esfahbod c53d3ad51e [>64k:layout] Templatize AlternateSet 2022-07-12 13:42:52 -06:00
Behdad Esfahbod a58a48622a [>64k:layout:MultipleSubst] Implement format 2
Implements part of https://github.com/be-fonts/boring-expansion-spec/issues/32

Subset is NOT updated to lower format.
2022-07-12 13:42:52 -06:00
Behdad Esfahbod 684c8fcea7 [>64k:layout] Templatize MultipleSubst 2022-07-12 13:42:52 -06:00
Behdad Esfahbod 8775e9b4a4 [>64k:layout:SingleSubst] Implement format 3/4
Implements https://github.com/be-fonts/boring-expansion-spec/issues/31
2022-07-12 13:42:52 -06:00
Behdad Esfahbod e3caf8d50a [>64k:layout] Templatize SingleSubst 2022-07-12 13:42:52 -06:00
Behdad Esfahbod ca5c8a6419 [>64k:layout:Coverage] Implement format 3/4
Implements rest of https://github.com/be-fonts/boring-expansion-spec/issues/30
2022-07-12 13:42:52 -06:00
Behdad Esfahbod 25de6fb4e7 [>64k:layout:ClassDef] Implement format 3/4
This implements part of https://github.com/be-fonts/boring-expansion-spec/issues/30
2022-07-12 13:42:52 -06:00
Behdad Esfahbod 9286526f37 [>64k:layout] Templatize Coverage & ClassDef
Have not added new formats yet.
2022-07-12 13:42:52 -06:00
Behdad Esfahbod e8cce9d1b3 [>64k:layout] Add SmallTypes & MediumTypes 2022-07-12 13:42:52 -06:00
Behdad Esfahbod d8f9d51780 [hashmap] Add keys_ref() and values_ref() 2022-07-12 13:19:31 -06:00
Behdad Esfahbod cddcb31065 [vector] Remove residual nullptr_t from when hashmap needed it 2022-07-12 13:15:38 -06:00
Behdad Esfahbod 46a36771f4 [draw] Fix leak from e0a5231657 2022-07-12 12:03:00 -06:00
Behdad Esfahbod f8544cbfc0 [draw] Fix regression from e0a5231657 2022-07-12 11:52:33 -06:00
Behdad Esfahbod d15041be7d [GSUB/GPOS] Trace toplevel sanitize 2022-07-12 11:11:22 -06:00
Behdad Esfahbod 7c4e9080c0 [sanitize] Minor trace format fixup
This likely() is unlikely to make a difference, and obscures
the return_trace() message by writing out "something" instead
of the true/false value.
2022-07-11 21:52:41 -06:00
Matthias Clasen d826a5920c docs: Clarify 0xFFFF as palette index
Mention that a palette index of 0xFFFF
means to use the foreground color.
2022-07-10 11:08:52 -06:00
Behdad Esfahbod 6d051f4018 [layout] Simplify StructAfter<> usage 2022-07-08 14:09:04 -06:00
Behdad Esfahbod 5192294f83 . 2022-07-08 14:09:04 -06:00
Garret Rieger 29f149c16c [subset] cache sanitized tables in subset plan to avoid sanitizing tables multiple times. 2022-07-08 13:42:38 -06:00
Behdad Esfahbod 8b349e1139 [gsubgpos] Remove HBUINT16 from match functions signatures 2022-07-08 12:05:01 -06:00
Behdad Esfahbod f114b18c58 [gsubgpos] Break skippy_iter set_match_func into two 2022-07-08 12:04:14 -06:00
Behdad Esfahbod 8a107125a5 [layout] Make SubstLookup:serialize_single take iterators 2022-07-08 12:02:11 -06:00
Behdad Esfahbod 8a971d01e9 [layout] Use is_source_of instead of is_iterator 2022-07-08 12:01:48 -06:00
Behdad Esfahbod 0dc0da054d [iter] Add hb_is_sorted_iterator(_of) 2022-07-08 12:01:38 -06:00
Behdad Esfahbod 2c67261723 [open-type] Add HBGlyph24 2022-07-08 12:01:26 -06:00
Behdad Esfahbod 7cfe7fe651 [null] Change null bytes for RangeRecord
Should be harmless.
2022-07-08 12:01:18 -06:00
Behdad Esfahbod 486555c691 [open-type] Add Array24Of<> and SortedArray24Of<> 2022-07-08 12:01:07 -06:00
Behdad Esfahbod 1e503f587b [null] Add DECLARE_NULL_NAMESPACE_BYTES_TEMPLATE1 2022-07-08 12:00:53 -06:00
Behdad Esfahbod ea11029a6e [GPOS] Split LigatureArray.hh 2022-07-08 11:58:43 -06:00
Behdad Esfahbod 68b2742fe4 [GPOS] Move code around 2022-07-07 16:11:15 -06:00
Behdad Esfahbod 6a3043a0c1 Fix tests 2022-07-07 14:51:37 -06:00
Behdad Esfahbod aa68657434 [Makefile.sources/meson.build] Sort file names 2022-07-07 14:07:45 -06:00
Behdad Esfahbod 0b0e3b30ce [GPOS] Break down PairPosFormat1 into new layout 2022-07-07 14:06:44 -06:00
Garret Rieger 6fad6b4113 [repacker] add tests for special casing of 24bit offsets. 2022-07-06 19:18:27 +00:00
Garret Rieger b4f561dbbf [subset] Add some comments to find_space_roots/find_32_bit_roots methods. 2022-07-06 18:49:23 +00:00
Garret Rieger 401066bf3d [subset] Prepare the repacker for handling 24bit offsets in GSUB/GPOS.
The boring expansion (https://github.com/be-fonts/boring-expansion-spec) plans to introduce 24bit offsets into GSUB/GPOS. This changes the repacker to treat 24 bit offsets similar to 32 bit offsets and assign the top level 24 bit offsets into spaces to improve packing.
2022-07-06 18:44:40 +00:00
Behdad Esfahbod c091d029c2
Merge pull request #3706 from lb90/dwrite-dll
Load DirectWrite dynamically
2022-07-06 10:51:04 -06:00
Luca Bacci 1abc14b463 Do not link with the DWrite lib
It's loaded dynamically now
2022-07-06 17:55:39 +02:00
Luca Bacci c22acfa8bd Fix function pointer typedef 2022-07-06 17:55:24 +02:00
Kleis Auke Wolthuizen 79eb0f7486 [GSUB] Fix build on GCC < 7 2022-07-06 14:00:16 +02:00
Kleis Auke Wolthuizen 3238cb744b [GPOS] Fix build on GCC < 7 2022-07-06 14:00:16 +02:00
Luca Bacci 3e881efbe4 Revert "Revert "Revert "[hb-directwrite] Don't load dwrit.dll dynamically"""
This reverts commit 361a438658.
2022-07-06 13:51:56 +02:00
Kleis Auke Wolthuizen 7b51bc95d9 [cplusplus] Fix build on GCC < 7 2022-07-06 13:12:00 +02:00
Behdad Esfahbod 386e1bbad8
Merge pull request #3699 from googlefonts/filter_scripts
[subset] Add support for --layout-scripts
2022-07-05 12:46:05 -06:00
Garret Rieger 30309ec8d3 [subset] add null element in _filter_tag_list. 2022-07-05 18:33:19 +00:00
Garret Rieger 216cf5946b [subset] Allocate space for null entry in script/feature list. 2022-07-05 17:49:12 +00:00
Behdad Esfahbod d9ab805e61 Fix LookupFlag negation
Fixes https://github.com/harfbuzz/harfbuzz/issues/3703
2022-07-05 11:45:10 -06:00
Behdad Esfahbod b0cb9a1a63 Make get_leading_bearing return bool
Fixes https://github.com/harfbuzz/harfbuzz/issues/3496

Part of supporting >64k glyphs correctly.
2022-07-03 15:32:32 -06:00
Behdad Esfahbod 115e1a03e7 [glyf] Relax condition for matching number of coords 2022-07-03 14:45:12 -06:00
Behdad Esfahbod 800760c5bd [glyf] Rename get_extents functions for clarity 2022-07-03 13:21:06 -06:00
Behdad Esfahbod ab327f93b7 [glyf] Fix another bug with scaling
Of advances this time.

That codepath is never exercised though, if font has HVAR table.
2022-07-03 13:17:03 -06:00
Behdad Esfahbod f46ddeba48 [hmtx/glyf] Rename side-bearing functions for clarity 2022-07-03 13:12:49 -06:00
Behdad Esfahbod 23435d5285 [hvar] Rename advance function for clarity 2022-07-03 13:04:27 -06:00
Behdad Esfahbod 9f974cae4a [hvar] Rename lsb function for clarity 2022-07-03 13:03:12 -06:00
Behdad Esfahbod ab5ce64313 [VVAR] Rename vorg function for clarity 2022-07-03 13:00:22 -06:00
Behdad Esfahbod b2d60cbd6e [glyf] Rename advance functions for clarity 2022-07-03 12:56:48 -06:00
Behdad Esfahbod 35c00c1216 [hmtx] Rename advance functions for clarity 2022-07-03 12:54:17 -06:00
Behdad Esfahbod 6b82d4faa1 [glyf] Make an optional argument non-optional 2022-07-03 12:45:27 -06:00
Behdad Esfahbod 3ef590808f [glyf] Internal flip a variable 2022-07-03 12:44:24 -06:00
Behdad Esfahbod b07fa2bb1a [ot-font] Respect VORG even if it has no variations 2022-07-03 12:39:55 -06:00
Behdad Esfahbod 71d52e10aa [var] Fix getting side-bearing variations
In HVAR/VVAR, if the side-bearing mappings are null, it means the
table does not have them and they should be loaded from glyf table.
Previous logic was returning zer0.

Part of fixing https://github.com/harfbuzz/harfbuzz/issues/1694
2022-07-03 12:39:55 -06:00
Behdad Esfahbod 78b4f39821 [glyf] Fix confusion between scaled vs unscaled lsb
Was always broken.
2022-07-03 12:39:55 -06:00
Behdad Esfahbod 6665881c7d [glyf] Change side-bearing rounding 2022-07-03 12:39:55 -06:00
Behdad Esfahbod 0a295fcde6 [var] Fix DeltaSetIndexMapFormat1
Fixes https://github.com/harfbuzz/harfbuzz/issues/3692
2022-07-01 17:16:24 -06:00
Behdad Esfahbod 351cccdb75 [buffer-deserialize] Deserialize glyph flags
Fixes https://github.com/harfbuzz/harfbuzz/issues/1482
2022-07-01 16:52:49 -06:00
Behdad Esfahbod 5134041f21 [deserialize-json] Make it actually work!
Was not correctly deserializing glyph names as it was not dropping
double-quotes from glyph name before parsing.
2022-07-01 16:48:47 -06:00
Behdad Esfahbod 534b0911f7 [aat-layout] Add an unlikely() 2022-07-01 16:20:31 -06:00
Stephan Bergmann 14b018124c hb_graphite2_cluster_t::advance can apparently be negative
...as seen with HarfBuzz used by LibreOffice, with `instdir/program/soffice
--headless --convert-to pdf` of doc/abi6073-2.doc from the LibreOffice crash-
testing corpus when run under UBSan,

> hb-graphite2.cc:361:15: runtime error: -1024 is outside the range of representable values of type 'unsigned int'
>  #0 in _hb_graphite2_shape at workdir/UnpackedTarball/harfbuzz/src/hb-graphite2.cc:361:15
>  #1 in _hb_shape_plan_execute_internal(hb_shape_plan_t*, hb_font_t*, hb_buffer_t*, hb_feature_t const*, unsigned int) at workdir/UnpackedTarball/harfbuzz/src/./hb-shaper-list.hh:38:1
>  #2 in hb_shape_plan_execute at workdir/UnpackedTarball/harfbuzz/src/hb-shape-plan.cc:453:14
>  #3 in hb_shape_full at workdir/UnpackedTarball/harfbuzz/src/hb-shape.cc:139:19
>  #4 in GenericSalLayout::LayoutText(ImplLayoutArgs&, SalLayoutGlyphsImpl const*) at vcl/source/gdi/CommonSalLayout.cxx:495:23
>  #5 in OutputDevice::getFallbackLayout(LogicalFontInstance*, int, ImplLayoutArgs&, SalLayoutGlyphs const*) const at vcl/source/outdev/font.cxx:1232:21
>  #6 in OutputDevice::ImplGlyphFallbackLayout(std::unique_ptr<SalLayout, std::default_delete<SalLayout> >, ImplLayoutArgs&, SalLayoutGlyphs const*) const at vcl/source/outdev/font.cxx:1300:48
>  #7 in OutputDevice::ImplLayout(rtl::OUString const&, int, int, Point const&, long, long const*, SalLayoutFlags, vcl::TextLayoutCache const*, SalLayoutGlyphs const*) const at vcl/source/outdev/text.cxx:1332:22
>  #8 in lcl_CreateLayout(SwTextGlyphsKey const&, __gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<SwTextGlyphsKey const, SwTextGlyphsData> >, std::__debug::map<SwTextGlyphsKey, SwTextGlyphsData, std::less<SwTextGlyphsKey>, std::allocator<std::pair<SwTextGlyphsKey const, SwTextGlyphsData> > >, std::bidirectional_iterator_tag>) at sw/source/core/txtnode/fntcache.cxx:233:33
>  #9 in SwFntObj::GetCachedSalLayoutGlyphs(SwTextGlyphsKey const&) at sw/source/core/txtnode/fntcache.cxx:257:12
>  #10 in SwFont::GetTextBreak(SwDrawTextInfo const&, long) at sw/source/core/txtnode/fntcache.cxx:2551:58
>  #11 in SwTextSizeInfo::GetTextBreak(long, o3tl::strong_int<int, Tag_TextFrameIndex>, unsigned short, vcl::TextLayoutCache const*) const at sw/source/core/text/inftxt.cxx:450:20
>  #12 in SwTextGuess::Guess(SwTextPortion const&, SwTextFormatInfo&, unsigned short) at sw/source/core/text/guess.cxx:205:26
>  #13 in SwTextPortion::Format_(SwTextFormatInfo&) at sw/source/core/text/portxt.cxx:305:32
>  #14 in SwTextPortion::Format(SwTextFormatInfo&) at sw/source/core/text/portxt.cxx:456:12
>  #15 in SwLineLayout::Format(SwTextFormatInfo&) at sw/source/core/text/porlay.cxx:260:31

(where in frame #4 GenericSalLayout::LayoutText, pHbBuffer->props.direction is
HB_DIRECTION_RTL, in case that is relevant).

It is unclear to me whether it is sufficient to only change
hb_graphite2_cluster_t::advance from signed to unsigned int, as there are other
unsigned int variables (like curradv in _hb_graphite2_shape) whose value depend
on hb_graphite2_cluster_t::advance, and which thus might also become negative.
But unlike the float -> unsigned int conversion that UBSan warned about here
(where gr_slot_origin_X() and xscale are float), those are signed int ->
unsigned int conversions that do not cause undefined behavior.  At least, with
this change, the above --convert-to pdf and a full `make check screenshot`
succeeded for me under without further UBSan warnings.

(For the version of HarfBuzz optionally built as part of the LibreOffice build,
this has been addressed with
<https://git.libreoffice.org/core/+/6e53e03f752c2f85283c4d47efaaf0683299783c%5E!/>
"external/harfbuzz: hb_graphite2_cluster_t::advance can apparently be
negative.")
2022-07-01 12:00:09 -06:00
Garret Rieger dbfd2bf327 minor. 2022-06-30 23:04:35 +00:00
Garret Rieger 79bdcbef0d [subset] Fix GDEF version downgrade logic. 2022-06-30 22:20:32 +00:00
Garret Rieger 587969af42 [subset] Drop scripts that are not in the layout_scripts list. 2022-06-30 21:37:42 +00:00
Garret Rieger 900476c635 Move GSUB.hh GPOS.hh back into the GPOS/GSUB sub directories. 2022-06-30 15:33:20 -06:00
Garret Rieger 5fdae68481 [reorg] Move GSUB.hh up one level and change GSUB namespace to GSUB_impl. 2022-06-30 15:33:20 -06:00
Garret Rieger 70e32a662f [subset] Add layout_scripts to subset input. 2022-06-30 21:00:48 +00:00
Behdad Esfahbod 13c499cb26 [hvar] Minor internal rewiring
Not passing font to functions makes it more clear that they don't
scale values.
2022-06-30 14:25:09 -06:00
Garret Rieger 41d2c335bc [subset] Apply script list filter when doing layout collection. 2022-06-30 20:24:42 +00:00
Garret Rieger e5c8a2f4e1 [subset] Pass plan through to collect methods.
Allows to more easily access the filtering sets as they are added and enables propagating errors to the plan.
2022-06-30 20:14:29 +00:00
Behdad Esfahbod aba4a4957a [ot-font] Disable VORG variation code in HB_NO_VAR 2022-06-30 14:13:44 -06:00
Behdad Esfahbod d5921b379b [tt-font] Apply VVAR.vOrg variation to VORG origin
Mostly fixes https://github.com/harfbuzz/harfbuzz/issues/1694
2022-06-30 14:09:09 -06:00
Behdad Esfahbod eee29f7327 [hmtx] Specialize var_table 2022-06-30 14:09:09 -06:00
Garret Rieger 1bf051ef3b [subset] refactor feature tag filtering so it can be used for scripts as well. 2022-06-30 20:03:33 +00:00
Khaled Hosny f6f93c30f3 [docs] Fix warning
These comment blocks don’t use gtk-doc syntax.
2022-06-30 08:50:59 +02:00
Khaled Hosny 98e90cc67c [docs] Reduce warnings
Use markdown syntax for inline code blocks instead of %true, %false, and
%NULL.
2022-06-30 08:44:40 +02:00
Behdad Esfahbod c69ec6f5bb [kern2] Fix sanitize issue on 32bit systems
Fixes https://github.com/harfbuzz/harfbuzz/issues/3483
2022-06-29 16:32:59 -06:00
Khaled Hosny 34d3d49e78 [docs] Fix Since annotation 2022-06-29 07:46:21 +02:00
Khaled Hosny 096aaa62a6 4.4.1 2022-06-29 07:30:05 +02:00
Behdad Esfahbod 050f169078 [GPOS/kerx] Call into impl namespace from kerx 2022-06-28 18:52:27 -06:00
Garret Rieger 910a137f4e [reorg] Fix propagate_attachment_offsets definition. 2022-06-28 18:47:50 -06:00
Garret Rieger 3fbf2dece7 [reorg] Move OT::Layout::GPOS_impl::GPOS to OT::Layout::GPOS. 2022-06-28 18:47:50 -06:00
Garret Rieger 88ef3c5a9a [reorg] Change OT::Layout::GPOS to OT::Layout::GPOS_impl. 2022-06-28 18:47:50 -06:00
Garret Rieger 49ddf069e0 [reorg] Move GPOS reverse_cursive_minor_offset implementation into new directory layout. 2022-06-28 18:47:50 -06:00
Garret Rieger 74f45f7c2a [reorg] Move remaining GPOS lookup types to new directory. 2022-06-28 18:47:50 -06:00
Garret Rieger 197d9a5c99 [reorg] Move more GPOS lookups to new directory. 2022-06-28 18:47:50 -06:00
Garret Rieger c7307ca06a [reorg] Begin moving GPOS into the new directory layout. 2022-06-28 18:47:50 -06:00
Behdad Esfahbod 9909d11f6f [indic generator] Fix regression
Fixes https://github.com/harfbuzz/harfbuzz/issues/3690
2022-06-28 16:02:51 -06:00
Behdad Esfahbod 4499ae0225 [coretext] Fix positioning of out-of-order glyphs
Unfortunately this now generates negative advances. To be fixed...
2022-06-28 15:44:34 -06:00
Behdad Esfahbod 58d2e93099 [coretext] Fix up clusters only if needed 2022-06-28 15:44:34 -06:00
Behdad Esfahbod eaba5e74a9 [directwrite] Simplify 2022-06-28 13:51:50 -06:00
Behdad Esfahbod 33e3bf2d79 [font] Drop caches on variation changes 2022-06-28 13:51:50 -06:00
Behdad Esfahbod c90130e625 [coretext] Remove old hack now that font layer takes care...
of invalidating font data when font settings change.
2022-06-28 13:30:44 -06:00
Behdad Esfahbod c1c78ade71 [font] When font changes, drop font shaper data
https://github.com/harfbuzz/harfbuzz/issues/3683#issuecomment-1168016509
2022-06-28 13:19:30 -06:00
Behdad Esfahbod 34c6c0193c [glyf] Fix byterange check again 2022-06-27 20:26:57 -06:00
Behdad Esfahbod 20572f914c [glyf] Move read_flags into a function 2022-06-27 20:22:09 -06:00
Behdad Esfahbod 31e985d7d1 [buffer] Likely that not messaging 2022-06-27 16:32:02 -06:00
Behdad Esfahbod 4be074e2cb [gvar] Whitespace 2022-06-27 16:12:42 -06:00
Behdad Esfahbod a96647841a [gvar] Optimize apply_deltas_to_points 2022-06-27 15:41:02 -06:00
Behdad Esfahbod e9af9062c0 [gvar] Optimize unpack_deltas 2022-06-27 15:38:42 -06:00
Behdad Esfahbod 573e77280b [gvar] Optimize unpack_deltas 2022-06-27 15:35:28 -06:00
Behdad Esfahbod 698f51464c [gvar] Share vector allocation across delta-sets 2022-06-27 15:30:19 -06:00
Behdad Esfahbod 39e280c256 [gvar] Handle a couple of error conditions 2022-06-27 15:28:30 -06:00
Behdad Esfahbod 5be6e5dd57 [gvar] Rewrite linear interpolation 2022-06-27 15:22:16 -06:00
Behdad Esfahbod 57519b532d [gvar] Use pointer-to-member instead of function 2022-06-27 15:18:56 -06:00
Behdad Esfahbod ab15fe082a [gvar] Handle a couple of error conditions 2022-06-27 15:13:10 -06:00
Behdad Esfahbod b7e9e8785c [gvar] Optimize deltas and points loading 2022-06-27 15:09:25 -06:00
Behdad Esfahbod 6e72c2e3fa [glyf] Add an assertion 2022-06-27 15:09:25 -06:00
Behdad Esfahbod 5da341ce92 [map] Another try at hiding minus1
To fix https://github.com/harfbuzz/harfbuzz/issues/3684
2022-06-27 14:00:34 -06:00
Behdad Esfahbod c72d3104ed [map] Return const reference in operator[] 2022-06-27 13:31:05 -06:00
Behdad Esfahbod 69d53f3e7f [map] Make default_value() inline
See if it make fix https://github.com/harfbuzz/harfbuzz/issues/3684
2022-06-27 13:17:10 -06:00
Behdad Esfahbod 3a0e27e794 [glyf] Move comment 2022-06-27 13:07:39 -06:00
Behdad Esfahbod d0836dee7a [glyf] Minor typo change 2022-06-27 13:05:58 -06:00
Behdad Esfahbod 5cca25e5d0 [glyf] Accumulate points as int
Everything is int at this stage.
Doesn't seem to matter for performance though.
2022-06-27 13:03:06 -06:00
Behdad Esfahbod d6f60b3c19 [glyf] Minor optimization 2022-06-27 13:00:08 -06:00
Behdad Esfahbod b30a3dcba3 [glyf] Another bounds check
Very unlikely that is needed but technically possible.
2022-06-27 12:56:54 -06:00
Behdad Esfahbod 2e9dbdcbbe [glyf] Protect against an unlikely overflow 2022-06-27 12:55:13 -06:00
Khaled Hosny 8537d68172 4.4.0 2022-06-27 20:51:16 +02:00
Behdad Esfahbod f1fb8c4489 [glyf] Optimize Glyph layout 2022-06-27 12:41:46 -06:00
Behdad Esfahbod 34e3f561b5 [glyf] Fix a bug I introduced recently
Pass gid to Glyph in trim_padding codepath.
2022-06-27 12:39:35 -06:00
Behdad Esfahbod 97cbc2d40a [gvar] Remove condition that font num_coords should match gvar's 2022-06-27 12:37:11 -06:00
Behdad Esfahbod 19cbfb9ce9 [glyf] Relax a condition that font num_coords be equal to gvar's
gvar itself still checks the same.
2022-06-27 12:32:18 -06:00
Behdad Esfahbod d5cfbaa068 [glyf] Optimize composite points loading 2022-06-27 12:24:20 -06:00
Behdad Esfahbod 32dc0641e1 [glyf] Remove an unnecessary condition 2022-06-27 12:22:06 -06:00
Behdad Esfahbod 95bfa0913d [gvar] Optimize translate() 2022-06-27 12:10:16 -06:00
Behdad Esfahbod 9f067582b8 [gvar] Optimize transform() 2022-06-27 12:10:16 -06:00
Behdad Esfahbod cfc57ef862 [glyf] Optimize contour_point_t layout 2022-06-27 12:10:16 -06:00
Behdad Esfahbod 75ca78a6bb [glyf] Optimize hb_contour_points_t::extend 2022-06-27 12:10:16 -06:00
David Corbett 04c4767150 [lao] Decompose and reorder U+0EB3 around U+0EBB 2022-06-27 11:31:32 -06:00
Behdad Esfahbod d3308f4713 [font] Optimize font scaling further 2022-06-27 11:28:57 -06:00
Matthias Clasen e72506d085 Fix the annotation for hb_blob_get_data
This function will return NULL for the the
empty blob. That is important information for
bindings that treat nullability as a type trait.
2022-06-27 10:59:02 -06:00
Behdad Esfahbod 3c49a6a60a [glyf] Fix an allocation error
Try fixing assertion failure found by fuzzers:

hb-draw-fuzzer: ../../src/harfbuzz/src/OT/glyf/glyf.hh:175: bool OT::glyf_accelerator_t::get_points(hb_font_t *, hb_codepoint_t, T) const [T = OT::glyf_impl::path_builder_t]: Assertion `count >= glyf_impl::PHANTOM_COUNT' failed.
2022-06-27 10:57:51 -06:00
Behdad Esfahbod 556e7078f0 [font] Optimize glyph scaling 2022-06-26 17:48:43 -06:00
Behdad Esfahbod a1c45bbb55 [glyf] Minor simplify 2022-06-26 17:30:16 -06:00
Behdad Esfahbod a21a9bb855 [glyf] Optimize flags decoding byte range checking 2022-06-26 17:24:29 -06:00
Behdad Esfahbod 0f1fdf461c [glyf] Optimize points decoding byte range checking 2022-06-26 17:22:45 -06:00
Behdad Esfahbod 51cfcf2957 [glyf] Optimize points decoding 2022-06-26 17:04:47 -06:00
Behdad Esfahbod 86b7022503 [glyf] Optimize flag decoding 2022-06-26 17:02:32 -06:00
Behdad Esfahbod 30d58bfd0f [glyf] Don't translate/transform components if has no effect 2022-06-26 16:49:40 -06:00
Behdad Esfahbod 2bb0fa878a [glyf] Remove unneeded point init() 2022-06-26 16:43:05 -06:00
Behdad Esfahbod fc72a1d22d [glyf] Add a pre-allocation for phantom points 2022-06-26 16:42:01 -06:00
Behdad Esfahbod 8d242aaa8b [glyf] Rewrite a loop harmlessly
I hope...
2022-06-26 16:36:08 -06:00
Behdad Esfahbod cf57f04ddb [glyf/path-builder] Optimize scaling code
Scale each point once upon entry to function.

This makes our shape fetching code as fast as FreeType for all
benchmark cases now.
2022-06-26 16:26:17 -06:00
Behdad Esfahbod 36dd5d32fb [draw] Use multiplication instead of division in quadratic conversion 2022-06-26 16:16:43 -06:00
Behdad Esfahbod b095df1343 [glyf/path-builder] Use operator bool for style 2022-06-26 16:12:50 -06:00
Behdad Esfahbod abb433d0f4 [glyf] Avoid a copy of points in shape fetching for simple glyphs
Matches performance with freetype now.
2022-06-26 16:09:32 -06:00
Behdad Esfahbod 7eac779abf Revert "Revert "[glyf] Optimize shape loading""
This reverts commit 164bd288cf.
2022-06-26 16:02:27 -06:00
Behdad Esfahbod 164bd288cf Revert "[glyf] Optimize shape loading"
This reverts commit f0819301b7.

Broke tests. To be debugged and redone.
2022-06-26 16:01:15 -06:00
Behdad Esfahbod f0819301b7 [glyf] Optimize shape loading
Do away with a copy for simple glyph load.
2022-06-26 15:52:54 -06:00
Behdad Esfahbod 65b066f18e [glyf/path-builder] Simplify initialization 2022-06-26 13:18:00 -06:00
David Corbett b2abd5c7e8 [thai] Reword to include all relevant marks 2022-06-26 13:12:12 -06:00
Behdad Esfahbod 2d4557fe04 [glyf/SimpleGlyph] Use member pointer instead of lambda 2022-06-26 13:08:37 -06:00
Behdad Esfahbod 9ce9773040 [glyf/SimpleGlyph] Minor use constructor for contour_point_t 2022-06-26 13:08:37 -06:00
Behdad Esfahbod f897978f21 [glyf] Adjust a check-range 2022-06-26 13:08:37 -06:00
Behdad Esfahbod db039d97ff [glyf/Composite] Make glyphIndex public 2022-06-26 13:08:37 -06:00
Behdad Esfahbod 1b14bf8aa8 [glyf] Rename CompositeGlyphChain to CompositeGlyphRecord 2022-06-26 13:08:37 -06:00
Behdad Esfahbod a5ac7f2ea6 [glyf/composite_iter_t] Renames 2022-06-26 13:08:37 -06:00
Behdad Esfahbod d15260ca95 [gpos] Limit recursion depth in propagate_attachment_offsets()
Fixes https://github.com/harfbuzz/harfbuzz/issues/2927
2022-06-25 19:53:11 -06:00
Behdad Esfahbod 449bdeed5f [glyf] Rename get_iterator() to iter()
That's the standard name.
2022-06-25 18:32:30 -06:00
Behdad Esfahbod 11d2670676 [glyf] Split off glyf-helpers.hh 2022-06-25 18:19:09 -06:00
Behdad Esfahbod 7c4b8c9bf4 [glyf] path-builder minor header guards fix test 2022-06-25 18:14:42 -06:00
Behdad Esfahbod 499c637922 [glyf] Split off path-builder.hh 2022-06-25 18:07:49 -06:00
Behdad Esfahbod 13aadc8961 [glyf] Split off CompositeGlyph.hh 2022-06-25 18:03:15 -06:00
Behdad Esfahbod f0ec2b728e [glyf] Split off SimpleGlyph.hh 2022-06-25 17:55:16 -06:00
Behdad Esfahbod 8ed78627f0 [glyf] Split off GlyphHeader.hh 2022-06-25 17:53:13 -06:00
Behdad Esfahbod 81315a3016 [glyf] Namespace implementation in glyf_impl
Part of https://github.com/harfbuzz/harfbuzz/issues/3677
2022-06-25 17:50:44 -06:00
Behdad Esfahbod be1d4bcf29 [glyf] Add fast __end__ to composite iterator 2022-06-25 17:45:21 -06:00
Behdad Esfahbod ef250eea7e [glyf] Move a few structs out of Glyph{} 2022-06-25 17:37:59 -06:00
Behdad Esfahbod ae75f066b5 [glyf] Split SubsetGlyph 2022-06-25 17:12:10 -06:00
Behdad Esfahbod 0031069f47 [glyf] Fix includes 2022-06-25 17:05:18 -06:00
Behdad Esfahbod b4a0c30d98 [glyf] Remove hardcoded HB_MAX_COMPOSITE_OPERATIONS 2022-06-25 17:01:11 -06:00
Behdad Esfahbod 36373ee15c [glyf] Move add_gid_and_children to subset-plan where it belongs 2022-06-25 16:55:26 -06:00
Behdad Esfahbod ba1c9eda38 [glyf] Use a range for loop 2022-06-25 16:51:33 -06:00
Behdad Esfahbod e4f2bc9342 [glyf] Split Glyph.hh 2022-06-25 16:47:06 -06:00
Behdad Esfahbod 3f9c6bf3fc [glyf] Minor in _write_loca() 2022-06-25 14:46:26 -06:00
Behdad Esfahbod 852985da0f [glyf] Split loca.hh 2022-06-25 14:41:51 -06:00
Behdad Esfahbod 100576b7b7 [glyf] Start splitting file 2022-06-25 14:38:43 -06:00
Behdad Esfahbod e867ac3aef
Merge pull request #3674 from harfbuzz/use-sinhala-no-hacks
[use] Switch Sinhala to USE
2022-06-25 12:43:04 -06:00
Behdad Esfahbod b1629b0ce0 [gdef] Minor harmless use of HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED 2022-06-25 12:00:25 -06:00
David Corbett 78c5ae3979 [indic] Remove remnants of Sinhala 2022-06-25 13:49:18 -04:00
Behdad Esfahbod 0cc948b96c [use] Switch Sinhala to USE
https://github.com/harfbuzz/harfbuzz/issues/1044
2022-06-25 13:48:43 -04:00
David Corbett 6059828769 [use] Reintroduce the HVM class for U+0DCA 2022-06-25 13:48:43 -04:00
David Corbett 1555b30081 Add U+25CC to lone Robatic but not after U+17D9 2022-06-25 11:02:39 -06:00
David Corbett 0f15cb12de [indic-table] Fix block headers 2022-06-25 11:02:39 -06:00
Garret Rieger 2674962cf5 [repacker] Add comment to graph class. 2022-06-24 17:16:50 -06:00
Garret Rieger 81a2dd0e80 [repacker] Update Makefile for repacker re-org. 2022-06-24 17:16:50 -06:00
Garret Rieger 7078560e33 [repacker] extract graph serialization code into a seperate file. 2022-06-24 17:16:50 -06:00
Garret Rieger 20b02a672d [repacker] Begin splitting up the repacker implementation into several files. 2022-06-24 17:16:50 -06:00
Behdad Esfahbod ad2ab1ddb4 [indic] Clear syllables at the end of GSUB 2022-06-24 11:08:35 -06:00
Behdad Esfahbod 8bfb3e9df2 [indic] Disable vowel-constraints under uniscribe-bug-compatible 2022-06-23 13:28:07 -06:00
Behdad Esfahbod a5cf1a8738 Another null adjustment 2022-06-20 18:01:39 -06:00
Behdad Esfahbod a7960bdfb0 [config] Add HB_NO_LANGUAGE_LONG and enable in TINY profile
Disables 3letter language tags and more complex ones.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3664
2022-06-20 17:55:28 -06:00
Behdad Esfahbod 0d03123350 Mark a null variable as const 2022-06-20 16:51:35 -06:00
Behdad Esfahbod 91d00ab722 [ucd] Update 2022-06-20 13:36:01 -06:00
Khaled Hosny a15ad778fe [arabic-fallback] Generate PUA table from data
Uses packtab for more compact arrays.
2022-06-19 12:29:10 -06:00
Behdad Esfahbod abc0685749
Merge pull request #3063 from harfbuzz/arabic-pua
Arabic PUA shaping
2022-06-19 11:05:17 -06:00
Behdad Esfahbod 7ec4a556d9 [normalize] Cosmetic
I didn't know this syntax is allowed in old C++.
2022-06-19 11:01:45 -06:00
Behdad Esfahbod 8c27c51c27 [arabic-pua] Rename symbols 2022-06-19 10:47:38 -06:00
Behdad Esfahbod 7698962911 [arabic-fallback] Disable PUA shaping under HB_NO_OT_SHAPER_ARABIC_FALLBACK 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 4520911429 [arabic-fallback] Fix warning 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 55350377b0 [cmap/ft] Only map 0xF000 range if font_page is NONE 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 41a079bdec [arabic-fallback] Make win1256 code build again
Humm. Untested.
2022-06-19 10:42:06 -06:00
Behdad Esfahbod 1db6fddb24 [arabic-fallback.hh] Hook up 3-letter ligatures 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 20e9f0b1d2 [arabic-fallback] Add the component loop
Should be able to support 3-letter ligatures now.  Hooking up next.
2022-06-19 10:42:06 -06:00
Behdad Esfahbod 9684d2d8aa [arabic-fallback] More baby steps 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 08715d75e0 [arabic-fallback] Another baby-step 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 15dd34b515 [arabic-fallback] Another minor rename towards supporting 3-letter ligatures 2022-06-19 10:42:06 -06:00
Behdad Esfahbod d86effa4a6 [arabic-fallback] Rename; towards supporting 3-letter ligatures 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 16c2371352 [arabick-fallback] Apply mark ligatures 2022-06-19 10:42:06 -06:00
Khaled Hosny 7f362196c5 [arabic] Split ligature array
Generate marks and 3-component ligatures in separate arrays. The new
arrays are unused currently.
2022-06-19 10:42:06 -06:00
Khaled Hosny 6e29060af2 [arabic] Add mapping files for the PUA encoding
Unused right now.
2022-06-19 10:42:06 -06:00
Khaled Hosny 189e8c326e [ft] Remap legacy Arabic PUA codepoints
Similar to what ot font finctions does, to support Support legacy
pre-OpenType Windows 3.1-era fonts.
2022-06-19 10:42:05 -06:00
Khaled Hosny 69cbd365cc WIP: manually add data entries for PUA ligatures
Just a test, I’m not entirely convinced we should do this.
2022-06-19 10:42:05 -06:00
Khaled Hosny c3f590bb1e [arabic] Support legacy PUA shaping
Support legacy pre-OpenType Windows 3.1-era fonts, by remapping PUA code
points in cmap table and letting our fallback shaper build the GSUB
table.

Uniscribe applies also mset-like substitution, but our fallback mark
positioning gives better results, so this is not implemented.
2022-06-19 10:42:05 -06:00
Behdad Esfahbod b172f88c7d Fix a warning
D:\a\harfbuzz\harfbuzz\src\hb-bit-set-invertible.hh(83): warning C4805: '^': unsafe mix of type 'uint32_t' and type 'const bool' in operation
[870/1075] Compiling C++ object src/harfbuzz.dll.p/hb-face.cc.obj
cl : Command line warning D9025 : overriding '/EHs' with '/EHs-'
cl : Command line warning D9025 : overriding '/EHc' with '/EHc-'
2022-06-18 14:00:59 -06:00
Garret Rieger af74ab452f [repack] always run the sort in repack.
This is needed to ensure virtual link ordering constraints are respected when repack is being called from fontTools. For subset usage, repack won't be called if the graph doesn't already overflow so this change doesn't cause any extra work.
2022-06-16 15:17:58 -06:00
Behdad Esfahbod 29811a720c Fix typo 2022-06-16 14:04:08 -06:00
Behdad Esfahbod c859cbfb88 Mark an array as static
Not sure how this wasn't flagged before.
2022-06-16 13:55:12 -06:00
Behdad Esfahbod 19802dfdf0 Minor rename of static symbols to namespace them 2022-06-16 13:52:47 -06:00
Behdad Esfahbod e0a5231657 [draw] Lazy-allocate user-data/destroy callback vector 2022-06-16 13:40:44 -06:00
Garret Rieger 823f32a0e2 [subset] Fix potential out of bounds write setting overlap flag on composite glyphs. 2022-06-16 12:30:59 -06:00
Behdad Esfahbod 3f9226da37 [meta] Fix typo 2022-06-16 09:28:47 -06:00
Ryan VanderMeulen 1c0eeb7cb3 Don't try to set _USE_MATH_DEFINES if already defined 2022-06-16 09:28:33 -06:00
Ryan VanderMeulen 25917c780f Fix build warning when __GNUG__ isn't defined 2022-06-16 09:28:33 -06:00
Behdad Esfahbod e9c0a74063 Fix clang -Wcomma warnings
Fixes https://github.com/harfbuzz/harfbuzz/issues/3656
2022-06-15 17:28:36 -06:00
Behdad Esfahbod d9c18cc2f0 [indic-table] Update 2022-06-15 16:50:34 -06:00
Behdad Esfahbod 99a26bc19d [indic-generator] Fix typo 2022-06-15 16:15:21 -06:00
Behdad Esfahbod 2cbb775866 [myanmar] Fold category P into GB
Fixes https://github.com/harfbuzz/harfbuzz/issues/3649

This actually now allows Asat after the Myanmar punctuation marks;
something I see in Wikipedia data.
2022-06-15 16:15:21 -06:00
Behdad Esfahbod b350e30186 [myanmar] Remove category D completely
Fixes https://github.com/harfbuzz/harfbuzz/issues/3651
2022-06-15 16:15:21 -06:00
Behdad Esfahbod 8533214ac5 [khmer] Fold category Coeng completely into category H 2022-06-15 16:15:21 -06:00
Behdad Esfahbod 607a9fe793 [indic-like] Remove category duplication 2022-06-15 16:15:21 -06:00
Behdad Esfahbod 0485192195 [indic-like] Remove dependence on ot_category_t 2022-06-15 16:15:21 -06:00
Behdad Esfahbod 14049003ac [indic-like] Reduce indic-dependency of khmer/myanmar even more 2022-06-15 16:15:21 -06:00
Garret Rieger f9f0969cb6 [subset] switch to hb_memcpy. 2022-06-14 17:49:13 +01:00
Garret Rieger 1e34852f07 [subset] Fix undefined behaviour.
Don't memcpy if there's nothing to copy.
2022-06-14 17:49:13 +01:00
Garret Rieger 311413f16b [subset] Fix fuzzer issue.
Fixes https://oss-fuzz.com/testcase-detail/5693568490012672. new_index should be set from new_index2 when the entry is present in the map.
2022-06-14 17:49:13 +01:00
Matthias Clasen 4ba7980b8e Fix the generated gobject headers
These headers are not acceptable to modern compilers.
gcc says things like:

/usr/include/harfbuzz/hb-gobject-enums.h💯1: warning:
  function declaration isn’t a prototype [-Wstrict-prototypes]
  100 | hb_gobject_ot_metrics_tag_get_type () G_GNUC_CONST;
2022-06-11 23:47:00 +01:00
Ali Chraghi 79bb3b5278 [docs] fix typo 2022-06-11 13:04:55 +01:00
Behdad Esfahbod 98116e5cf5 [myanmar] Fix comments on categories
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894955430
2022-06-11 03:42:36 -06:00
Behdad Esfahbod 02016914b3 [indic-generator] Remove unnecessary Myanmar category=D overrides
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894685106
2022-06-10 17:24:19 -06:00
Behdad Esfahbod 937c878078 [indic-generator] Remove unnecessary override for Myanmar U+1039
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894762535
2022-06-10 17:20:15 -06:00
Behdad Esfahbod 9504037ccb [indic-generator] Remove three unneeded Myanmar overrides U+AA74-6
These three characters have Indic_Syllabic_Category=Consonant_Placeholder. The
original evidence that prompted these overrides says they can take tone marks.
They are not subjoined: Khamti Shan apparently does not use subjoined
characters at all. Therefore, PLACEHOLDER is good enough and these need not be
overridden to C.

https://www.unicode.org/L2/L2008/08276-khamti-proposal.pdf

https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894640713
2022-06-10 17:13:16 -06:00
Behdad Esfahbod 02eb6606d7 [indic-generator] Remove redundant PLACEHODER characters overrides
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894631922
2022-06-10 17:10:42 -06:00
Behdad Esfahbod e16669ceac [indic-generator] Remove redundant override of U+2010 / U+2011
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894630596
2022-06-10 17:05:35 -06:00
Behdad Esfahbod bb255cd9a6 [indic-generator] Remove redundant override of U+0980
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894627064
2022-06-10 17:03:52 -06:00
Behdad Esfahbod 30d8c87d01 [myanmar] Document Medials
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894532676
2022-06-10 16:56:15 -06:00
Behdad Esfahbod e1826c3714 [khmer] Reuse OT_H for OT_Coeng
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894517417
2022-06-10 16:53:11 -06:00
Behdad Esfahbod eb2f2e318a [indic-generator] Update comment re U+104E
https://github.com/harfbuzz/harfbuzz/pull/3648#pullrequestreview-1002150048
2022-06-10 16:47:59 -06:00
Behdad Esfahbod 0daafefdd1 Merge branch 'main' into indic-cleanup 2022-06-10 10:55:49 -06:00
Behdad Esfahbod 148283d0e0 [syllabic] Use a buffer scratch-flag for has-broken-syllable 2022-06-10 07:48:39 -06:00
Behdad Esfahbod 6997d10bc0 [arabic] Remove a couple TODO items 2022-06-10 07:43:33 -06:00
Behdad Esfahbod e1575f2347 [iter] Remove a few TODO items 2022-06-10 07:41:39 -06:00
Behdad Esfahbod 689c77530a [buffer] Actually remove TODO item
In reality, one side is smaller and one side is larger. The existing code
handles that just fine.
2022-06-10 07:37:45 -06:00
Behdad Esfahbod d09e962b9f [buffer] Update a TODO item 2022-06-10 07:36:43 -06:00
Behdad Esfahbod b3f689e7e5 [serializer] Remove TODO that's not gonna happen 2022-06-10 07:31:47 -06:00
Behdad Esfahbod 10a8cc28fc [normalizer] Remove a TODO that's not going to happen 2022-06-10 07:31:06 -06:00
Behdad Esfahbod 7635568f29 [font] Remove a TODO item that's not gonna happen 2022-06-10 07:29:15 -06:00
Behdad Esfahbod bd453de757 [unicode] Accept a couple hacks as permanent 2022-06-10 07:25:48 -06:00
Behdad Esfahbod 39c132a62d [indic/myanmar] Simplify compare functions 2022-06-10 07:12:39 -06:00
Behdad Esfahbod a5bcd8567f [indic] Update comment re category listing 2022-06-10 07:03:02 -06:00
Behdad Esfahbod 10a5485136 [indic/myanmar] Move is_consonant to .cc files 2022-06-10 06:34:56 -06:00
Behdad Esfahbod 1c657460ef [indic] Expand MEDIAL_FLAGS 2022-06-10 06:29:45 -06:00
Behdad Esfahbod 9e3917f6d6 [indic] Move a couple of functions to .cc file 2022-06-10 06:26:26 -06:00
Behdad Esfahbod 165ef55e57 [indic-generator] Move INDIC_COMBINE_CATEGORIES here 2022-06-10 06:20:10 -06:00
Behdad Esfahbod b030dd9e88 [indic-table] Minor rename 2022-06-10 06:12:13 -06:00
Behdad Esfahbod d414fb3328 [indic/khmer/myanmar] Add static_assert that categories match OT_* 2022-06-10 00:50:47 -06:00
Behdad Esfahbod 15ea4ccb04 [indic-like] Add note about replicated values 2022-06-09 17:47:46 -06:00
Behdad Esfahbod 3289e81532 [indic] Use categories from the machine 2022-06-09 17:46:15 -06:00
Behdad Esfahbod 37217fc9be [indic-generator/myanmar] Move most Myanmar category overrides to generator 2022-06-09 17:27:43 -06:00
Behdad Esfahbod c136227f57 [indic-generator/khmer] Move Khmer overrides to generator 2022-06-09 13:38:34 -06:00
Behdad Esfahbod 40aa4e8320 [indic/khmer/myanmar] Add Khmer/Myanmar categories to indic_category_t 2022-06-09 13:30:00 -06:00
Behdad Esfahbod 25793075e2 [indic-generator] Move Khmer/Myanmar vowel categories to the generator 2022-06-09 13:11:46 -06:00
Behdad Esfahbod a6c82d4b8c [myanmar] Simplify to not use position info from the indic table for shaping 2022-06-09 13:04:28 -06:00
Behdad Esfahbod 10cd8ac0e5 [indic-generator] Move matra category overrides to generator 2022-06-09 12:27:31 -06:00
Behdad Esfahbod c4e4f1d387 [indic-generator] Move SMVD position overrides to generator 2022-06-09 11:58:37 -06:00
Behdad Esfahbod 2963154c15 [indic-generator] Add a couple comments 2022-06-09 11:53:24 -06:00
Behdad Esfahbod 91d6f45bc9 [indic-generator] Move some position overrides to the generator 2022-06-09 11:52:56 -06:00
Behdad Esfahbod 0ec4dcb93d [indic-generator] Ouch
Not sure how this was passing tests still.
2022-06-09 11:52:25 -06:00
Behdad Esfahbod f0269e0f1b [indic-generator] Move Ra handling to the generator 2022-06-09 11:52:03 -06:00
Behdad Esfahbod 419d2146c2 [indic-generator] Cap off what categories have positions
This was left off of the commit moving Indic categories to the generator.
It didn't fail any tests, but adding it back because it has implications
possibly.
2022-06-09 11:51:38 -06:00
Behdad Esfahbod e1d965d527 [indic-generator] Move position mapping to generator 2022-06-09 11:51:15 -06:00
Behdad Esfahbod 4907514026 [indic-generator] Move category overrides to generator 2022-06-09 11:50:30 -06:00
Behdad Esfahbod 58eeb3a180 [indic-generator] Move category mapping to generator 2022-06-09 11:49:57 -06:00
Behdad Esfahbod 899ca24387 [myanmar] Remove duplication of categories in the Myanmar shaper 2022-06-09 07:02:54 -06:00
Behdad Esfahbod ce0528c0ff [khmer] Remove duplication of categories in the Khmer shaper 2022-06-09 07:02:54 -06:00
Behdad Esfahbod 17c80035ad Revert "[cplusplus] Internally allow using hb_unique_ptr with hb_free()"
This reverts commit b5f621b08d.

A build was failing with clang 14 for Firefox apparently, sigh.

https://github.com/harfbuzz/harfbuzz/issues/3647
2022-06-09 04:17:38 -06:00
Behdad Esfahbod 9fc9b1ece4 [layout] Minor, add using Lookup to GSUB/GPOS 2022-06-08 12:37:31 -06:00
Behdad Esfahbod d4ddb3acf8 Comments typos 2022-06-08 11:45:33 -06:00
Behdad Esfahbod 4119f73c21 [subset/layout] Rename dispatch_closure_lookups_recurse_func to dispatch_recurse_func<> 2022-06-08 18:42:09 +01:00
Behdad Esfahbod c13ff39520 [layout] Rename apply_recurse_func to specialization of dispatch_recurse_func 2022-06-08 18:42:09 +01:00
Behdad Esfahbod 6a1edb8c97 [set-digest] One more rename 2022-06-08 11:38:17 -06:00
Behdad Esfahbod 6453737b0e [set-digest] Rename lowest_bits to bits_pattern 2022-06-08 11:37:12 -06:00
Behdad Esfahbod 2a061cb9cc [set-digest] Improve documentation 2022-06-08 11:35:50 -06:00
Behdad Esfahbod 42051fe18a [layout] s/inplace/always_inplace/g 2022-06-08 04:00:21 -06:00
Behdad Esfahbod 21346af01d [layout-cache] Adjust cost-function for recent change 2022-06-07 14:41:39 -06:00
Behdad Esfahbod bfee6839b0 [layout-cache] Cache lookahead, not input, classdef in ChainContextFormat2
From the commit:

+    /* For ChainContextFormat2 we cache the LookaheadClassDef instead of InputClassDef.
+     * The reason is that most heavy fonts want to identify a glyph in context and apply
+     * a lookup to it. In this scenario, the length of the input sequence is one, whereas
+     * the lookahead / backtrack are typically longer.  The one glyph in input sequence is
+     * looked-up below and no input glyph is looked up in individual rules, whereas the
+     * lookahead and backtrack glyphs are tried.  Since we match lookahead before backtrack,
+     * we should cache lookahead.  This decisions showed a 20% improvement in shaping of
+     * the Gulzar font.

https://github.com/harfbuzz/harfbuzz/pull/3636
2022-06-07 11:41:05 -06:00
Behdad Esfahbod 39820af72f [layout] Add HB_NO_OT_LAYOUT_LOOKUP_CACHE to disable caching lookups
Enabled when optimize-size profile is enabled.
2022-06-07 10:27:55 -06:00
Behdad Esfahbod 845279c34c
Merge pull request #3636 from harfbuzz/classdef-cache
Classdef cache
2022-06-07 16:40:22 +01:00
Behdad Esfahbod b59e25f25e [cff] Try fixing Heap-buffer-overflow in CFF::Charset::collect_glyph_to_sid_map
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47790
2022-06-07 09:27:44 -06:00
Behdad Esfahbod c8fb048f79 [gsubgpos] Document caching 2022-06-07 09:20:27 -06:00
Behdad Esfahbod 5963cf4469 [gsubgpos] Merge cache_enter and cache_leave entry points
Saves a pointer per subtable
2022-06-07 09:17:14 -06:00
Behdad Esfahbod d4c09e9a87 [gsubgpos] Remove apply_cached() entry point
Just use a bool to apply()
2022-06-07 09:17:14 -06:00
Behdad Esfahbod b96622d15c [layout] Use a cache for main input ClassDef of (Chain)ContextLookupFormat2
This commit adds a per-lookup caching infrastructure to GSUB/GPOS, and
uses it to cache input ClassDef.get_class value for (Chain)ContextLookupFormat2.

For fonts heavy on use of heave class-based2 context matching, this shows
a good speedup. For NotoNastaliqUrdu for example, I observe 17% speedup.

Unfortunately not many other lookups can use a cache like this :(.

https://github.com/harfbuzz/harfbuzz/pull/3636
2022-06-07 09:14:38 -06:00
Xavier Claessens 4266f4e29a Fix check-* scripts when harfbuzz is a subproject
When harfbuzz is a subproject paths are in the form
"subprojects/harfbuzz/src/...". Instead of removing "src/" prefix, take
the absolute path and make it relative to current source dir.

This fix regression introduced in
https://github.com/harfbuzz/harfbuzz/pull/3394.
2022-06-06 16:53:29 +01:00
Behdad Esfahbod 15543f70e0 [indic-like] Move allocation of syllable() buffer var to shapers that use it
In indic, we don't have a pause location release the var.
2022-06-05 08:15:47 -06:00
Behdad Esfahbod 104dc85a22 [buffer] Add try_allocate for buffer variables 2022-06-05 08:15:46 -06:00
Behdad Esfahbod b5f621b08d [cplusplus] Internally allow using hb_unique_ptr with hb_free()
...for arbitrary types.
2022-06-05 08:15:31 -06:00
Behdad Esfahbod f18eb000d3 [buffer] Mark a variable as unused
Weird. Somehow our HB_TINY bot started erring as this var being unused
in non-debug builds. Not sure why now...

    In file included from src/hb-ot-map.hh:32:0,
                     from src/hb-ot-shape.hh:32,
                     from src/hb-aat-layout.hh:32,
                     from src/hb-aat-layout.cc:30,
                     from src/harfbuzz.cc:1:
    src/hb-buffer.hh: In member function ‘void hb_buffer_t::assert_var(unsigned int, unsigned int)’:
    src/hb-buffer.hh:192:18: error: unused variable ‘bits’ [-Werror=unused-variable]
         unsigned int bits = (1u<<end) - (1u<<start);
                      ^~~~
cc1plus: some warnings being treated as errors
Error: Process completed with exit code 1.
2022-06-05 07:06:07 -06:00
Behdad Esfahbod e6409d3905 Revert "[layout] Use a cache for main input ClassDef of (Chain)ContextLookups"
This reverts commit 57d1c08739.

Err. This was an accident.
2022-06-05 06:57:37 -06:00
Behdad Esfahbod 57d1c08739 [layout] Use a cache for main input ClassDef of (Chain)ContextLookups 2022-06-05 06:54:19 -06:00
Behdad Esfahbod 92e81ab1df [indic/khmer/myanmar] Shift category numbers around to avoid overlap
Fixes https://github.com/harfbuzz/harfbuzz/issues/3632
2022-06-05 01:14:32 -06:00
Behdad Esfahbod d6dbc0d175 [gi/ft] Silence warnings
gi doesn't understand that FT_Face is a pointer, and not bare struct.
So it skips these APIs anyway. Mark skip to silense the warning.

../src/hb-ft.cc:242: Warning: HarfBuzz: hb_ft_font_get_face: return value: Invalid non-constant return of bare structure or union; register as boxed type or (skip)
../src/hb-ft.cc:264: Warning: HarfBuzz: hb_ft_font_lock_face: return value: Invalid non-constant return of bare structure or union; register as boxed type or (skip)
2022-06-05 00:58:53 -06:00
Behdad Esfahbod f78a25098a [gi] Remove Xconstructor annotations 2022-06-05 00:55:35 -06:00
Behdad Esfahbod cb961eac5c [configs] Fix builds with HB_NO_BUFFER_SERIALIZE but not HB_NO_BUFFER_VERIFY
e986c12075 (commitcomment-75339317)
2022-06-05 00:45:29 -06:00
Behdad Esfahbod 67852504f6 [indic/myanmar] No-op update to machines 2022-06-04 09:27:45 -06:00
Behdad Esfahbod 20a61ca447 [myanmar] Fold D category into GB
Trying to free a byte the buffer vars, for caching of lookups.

Part of https://github.com/harfbuzz/harfbuzz/issues/3633
2022-06-04 09:27:37 -06:00
Behdad Esfahbod f9b643f6b2 [layout] s/hb_get_subtables_context_t/hb_accelerate_subtables_context_t/g 2022-06-04 09:27:31 -06:00
Behdad Esfahbod d4dfb8c1f1 [arabic] Free up buffer variable earlier 2022-06-04 09:27:23 -06:00
Behdad Esfahbod cc7ebb0ffa Remove remaining mention to complex shapers in the code
https://github.com/harfbuzz/harfbuzz/pull/3628#issuecomment-1146248037
2022-06-04 05:42:58 -06:00
Behdad Esfahbod b39b5f2f31 [name] Implement approximate language matching
Very rudimentary.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3354
2022-06-03 13:00:33 +01:00
Behdad Esfahbod 40d7d56e53 [subset-input] Minor move 2022-06-03 05:40:18 -06:00
Behdad Esfahbod 40193adbfc [subset] Update default features list 2022-06-03 05:35:19 -06:00
Behdad Esfahbod 5bfb0b721c Rename s/shape-complex/shaper/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod 44be1e5dfb s/SHAPE_COMPLEX/SHAPER/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod 6fbb552156 s/FLAG_COMPLEX/FLAG_SHAPER/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod 6d9e94d2b8 s/hb_ot_shape_complex_categorize/hb_ot_shaper_categorize/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod a560182cb3 s/complex_var/ot_shaper_var/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod 13fbed29e4 s/HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS/HB_OT_SHAPE_MAX_COMBINING_MARKS/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod 44a7b3b773 s/ot_complex_shaper/ot_shaper/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod e5161977a4 s/COMPLEX_SHAPER/OT_SHAPER/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod f3a8b7f36b [algs] Test hb_hash() 2022-06-03 02:21:46 -06:00
Behdad Esfahbod 215a0afad1 [algs] Remove unused hb_coerce() 2022-06-03 01:48:46 -06:00
Behdad Esfahbod 5dc12d7d8d [cmap] Rewrite set_for() slightly 2022-06-03 01:37:02 -06:00
Behdad Esfahbod 9552955e08 Add an unlikely 2022-06-03 01:33:01 -06:00
Behdad Esfahbod 88f00ecb84 [map] Fix iter_ref () and test it 2022-06-03 01:30:27 -06:00
Behdad Esfahbod a42c624fca Convert one final use of hashmap to unique_ptr 2022-06-03 01:22:34 -06:00
Behdad Esfahbod f13a79548f [subset] Convert another use of hashmap to unique_ptr 2022-06-03 01:17:20 -06:00
Behdad Esfahbod 25f57230d5 [map] Return references from new iter_ref() 2022-06-03 01:14:35 -06:00
Behdad Esfahbod a7a688616a [cmap] Convert another map use to unique_ptr 2022-06-02 18:59:15 -06:00
Behdad Esfahbod 997d9cc466 [map] Make unique_ptr hashable 2022-06-02 18:47:42 -06:00
Behdad Esfahbod 8bb2a3326e [map] Remove unneeded assignment 2022-06-02 15:18:23 -06:00
Behdad Esfahbod d7785a6da0 [cplusplus] Add unique_ptr 2022-06-02 12:43:04 -06:00
Behdad Esfahbod bca710e8ad [gsubgpos] Use map has() instead of get() when appropriate 2022-06-02 12:06:25 -06:00
Behdad Esfahbod e9407a2bd2 Use shared_ptr<hb_set_t> in one place
See if valgrind is happy...
2022-06-02 12:00:43 -06:00
Behdad Esfahbod a42a703cb6 [shared_ptr] Clear p in destructor 2022-06-02 12:00:43 -06:00
Behdad Esfahbod f0a0dcad70 [test-map] Test hashing shared_ptr 2022-06-02 11:25:56 -06:00
Behdad Esfahbod 4c1b5d9ece Whitespace 2022-06-02 11:25:11 -06:00
Behdad Esfahbod b9230c5425 [map] Fix has() 2022-06-02 11:23:38 -06:00
Behdad Esfahbod 97ea10a63a Remove old nullptr_t hacks
Were used for hashmap before.
2022-06-02 11:23:38 -06:00
Behdad Esfahbod 3f78a71ca0 [map] Finally! Just can usd hb_hashmap_t<obj_t, obj_t>
Yay!
2022-06-02 11:23:37 -06:00
Behdad Esfahbod 0ccab339f9 [map] Remove invalid-key template arguments since unused 2022-06-02 11:23:37 -06:00
Behdad Esfahbod 3f6a8f69a0 [map] Remove invalid-key special-casing
Can override invalid-key value now.
2022-06-02 11:23:37 -06:00
Behdad Esfahbod 5328b73fba [map] Reduce map item size again 2022-06-02 11:23:37 -06:00
Behdad Esfahbod 4f58ae60eb [map] Keep is_used, is_tombstone as booleans 2022-06-02 11:23:37 -06:00
Behdad Esfahbod 7ec3aad20f [shared_ptr] Fix hb_hash() crash on nullptr 2022-06-02 18:22:05 +01:00
Behdad Esfahbod 4d646773cf [cplusplus] Make .reference() return T* 2022-06-02 18:22:05 +01:00
Behdad Esfahbod 7e7a4a8f05 [cplusplus] Fix build 2022-06-02 18:22:05 +01:00
Behdad Esfahbod a089d91fda [hash] Adjust hash for shared_ptr, implement it for std::hash 2022-06-02 18:22:05 +01:00
Behdad Esfahbod e037325efb [hash] Remove custom hash, rely on std::hash 2022-06-02 18:22:05 +01:00
Behdad Esfahbod 0d3d5b62ae [cplusplus] Adjustments 2022-06-02 18:22:05 +01:00
Behdad Esfahbod 0b35940a72 Make hb::shared_ptr hashable 2022-06-02 18:22:05 +01:00
Behdad Esfahbod 3817bdfd7f [hb.hh] Include hb-cplusplus.hh 2022-06-02 18:22:05 +01:00
Behdad Esfahbod e0f3cab246 [cplusplus] Add hb-cplusplus.hh
Fixes https://github.com/harfbuzz/harfbuzz/issues/2152
2022-06-02 18:22:05 +01:00
Garret Rieger 98aaecd397 [subset] fix data race touching Crap() in cff subsetting. 2022-06-01 22:50:35 +01:00
Behdad Esfahbod c88a6a9ec3 [face] Remove const from get_user_data prototype
This was done by mistake.

Since the returned user_data can be changed, face should not be marked
const. Other object types follow this parttern.
2022-06-01 09:46:41 -06:00
Behdad Esfahbod bc6ecaa262 [font-funcs] Handle case of null func but non-null destroy or user-data 2022-06-01 16:38:12 +01:00
Behdad Esfahbod 88ccbd2c43 [font-funcs] Optimize user-data/destroy storage
Fixes https://github.com/harfbuzz/harfbuzz/issues/2427
2022-06-01 16:38:12 +01:00
Behdad Esfahbod e421613e8f [sbix] Fix conditional 2022-06-01 09:07:57 -06:00
Behdad Esfahbod 55b911d863 [buffer] Mark getter functions as taking const buffer
Fixes https://github.com/harfbuzz/harfbuzz/issues/2873
2022-06-01 08:13:06 -06:00
Behdad Esfahbod 9e1479b5f0 [morx] Limit context length
Fixes https://github.com/harfbuzz/harfbuzz/issues/3097
2022-06-01 07:54:45 -06:00
Behdad Esfahbod 62e803b361 [sbix] Limit glyph extents
Fixes https://github.com/harfbuzz/harfbuzz/issues/3557
2022-06-01 07:39:20 -06:00
Behdad Esfahbod cd05d187c8 [font] Fix undefined-behavior when scales are negative
Fixes https://github.com/harfbuzz/harfbuzz/issues/3555
2022-06-01 07:27:53 -06:00
Behdad Esfahbod fc4d42ff99 [ft] Add API to notify that hb_font_t changed
New API:
- hb_ft_hb_font_changed()

Mostly reverts 56e0ff9ea1

Related https://github.com/harfbuzz/harfbuzz/issues/2270

Fixes https://github.com/harfbuzz/harfbuzz/issues/3619
2022-06-01 14:12:38 +01:00
Behdad Esfahbod e246723f0c [shape] Fail shaping internally if buffer ops exceeded 2022-06-01 05:00:06 -06:00
Behdad Esfahbod 9c0c31dfaa [buffer] When deleting glyphs, check cluster backwards as well 2022-06-01 04:52:10 -06:00
Behdad Esfahbod 0384f80e78 [buffer-verify] If shaping buffers failed during verification, pass the test 2022-06-01 04:50:15 -06:00
Behdad Esfahbod eba626ff6a [shape-plan] Return empty plan if buffer direction is invalid
Happens if buffer creation failed.
2022-06-01 04:49:46 -06:00
Behdad Esfahbod a441c6c16b [shape] Only verify if text_buffer is successful 2022-06-01 04:49:39 -06:00
Behdad Esfahbod f7f61aeb6f [buffer] Add TODO item 2022-06-01 04:48:59 -06:00
Behdad Esfahbod d72d37008d [shape] Allow null buffer
Ouch!
2022-06-01 04:48:40 -06:00
Behdad Esfahbod 45a2252607 [flags] Fix undefined-behavior
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../src/hb-buffer.hh:60:1 in
failure on clusterfuzz-testcase-minimized-hb-subset-get-codepoints-fuzzer-5736539338833920
2022-05-31 06:35:42 -06:00
Behdad Esfahbod f3f9fc1544 [buffer] Mark glyph_flags_t as flags 2022-05-31 06:35:42 -06:00
Behdad Esfahbod ab143e85c3 [buffer] Add HB_BUFFER_FLAG_DEFINED and HB_BUFFER_SERIALIZE_FLAG_DEFINED
New API:
+ HB_BUFFER_FLAG_DEFINED
+ HB_BUFFER_SERIALIZE_FLAG_DEFINED
2022-05-31 06:35:42 -06:00
Behdad Esfahbod 9a2a857043 [ot-shape] Don't verify buffer if shaping failed
Fixes all of fuzzing verify failures, which were result of buffer failure
on super-long results, which fails unsafe-to-break because shorter strings
don't fail shaping.
2022-05-31 06:35:42 -06:00
Behdad Esfahbod f8b26f43ec
Merge pull request #3606 from harfbuzz/32bit-varstore
32bit varstore
2022-05-31 11:22:32 +01:00
Behdad Esfahbod 5af5a56593 [VarStore] Implement writing 32bit var-store
Untested.

Finishes fixing https://github.com/harfbuzz/harfbuzz/issues/2965
2022-05-31 03:58:35 -06:00
Behdad Esfahbod 75112098ac [VarStore] Implement reading 32bit var-store
Untested.

Part of https://github.com/harfbuzz/harfbuzz/issues/2965

Serializing is incomplete.
2022-05-31 03:58:29 -06:00
Xavier Claessens 334bd013d9 Skip warning when building as subproject and ragel is missing
It is unlikely to be a developer build in that case.
2022-05-30 18:27:33 +02:00
Behdad Esfahbod e5d6da7905 [varStore] rename shortCount to wordCount 2022-05-30 07:48:58 -06:00
Behdad Esfahbod d11455f285 [blob] Fix strncpy() use in Mac resource opening code
Fixes https://github.com/harfbuzz/harfbuzz/issues/3616
2022-05-30 06:59:03 -06:00
Behdad Esfahbod ea2dd54b68 [map] Place item hash between key and value, not after them
This way if only one of key and value is 64bit (eg. pointer), and other is 32bit,
the whole item will fit in 128bit, whereas before it would have been bumped up to
196 if only value was 64bit (a common use-case for us.)
2022-05-30 05:54:20 -06:00
Behdad Esfahbod ec6cefc46a [repacker] Simplify map types 2022-05-30 05:54:20 -06:00
Behdad Esfahbod cbcdf442c5 [map] Speed up map's own hash() 2022-05-30 05:54:20 -06:00
Behdad Esfahbod de33ef61b7 [map] Add TODO item 2022-05-30 05:54:20 -06:00
Behdad Esfahbod fc5739ea90 [test-map] Whitespace 2022-05-30 05:54:20 -06:00
Behdad Esfahbod 3e64abd5d6
Merge pull request #3613 from harfbuzz/threads-test
Threads test
2022-05-30 05:52:21 -06:00
Behdad Esfahbod efa4385b16
Merge pull request #3615 from harfbuzz/gir-freetype
[gi] Add freetype2-2.0 for g-i-r includes
2022-05-30 05:40:56 -06:00
Behdad Esfahbod f4a8b70016 More member initialization 2022-05-30 05:30:37 -06:00
Behdad Esfahbod 484cc18732 [test-shape-threads] Set language 2022-05-30 05:09:53 -06:00
Behdad Esfahbod 315ef83b4e Revert "Revert "[ot-lang] Use atomic int for cache""
This reverts commit c56ce8681c.

The revert was not intentional. Ouch!
2022-05-30 05:09:26 -06:00
Khaled Hosny 3427511988 [gi] Add freetype2-2.0 for g-i-r includes
Fixes the warnings:
../src/hb-ft.cc:810: Warning: HarfBuzz: hb_ft_face_create: argument ft_face: Unresolved type: 'FT_Face'
../src/hb-ft.cc:886: Warning: HarfBuzz: hb_ft_face_create_cached: argument ft_face: Unresolved type: 'FT_Face'
../src/hb-ft.cc:855: Warning: HarfBuzz: hb_ft_face_create_referenced: argument ft_face: Unresolved type: 'FT_Face'
../src/hb-ft.cc:920: Warning: HarfBuzz: hb_ft_font_create: argument ft_face: Unresolved type: 'FT_Face'
../src/hb-ft.cc:1029: Warning: HarfBuzz: hb_ft_font_create_referenced: argument ft_face: Unresolved type: 'FT_Face'
../src/hb-ft.cc:240: Warning: HarfBuzz: hb_ft_font_get_face: return value: Unresolved type: 'FT_Face'
../src/hb-ft.cc:262: Warning: HarfBuzz: hb_ft_font_lock_face: return value: Unresolved type: 'FT_Face'
2022-05-30 04:48:22 +02:00
Behdad Esfahbod 97aa1ce6ba [gsubgpos] Move some member initialization 2022-05-29 10:56:41 -06:00
Behdad Esfahbod 0bb4c1f021 [cache] Set default values for cache template parameters 2022-05-29 10:23:19 -06:00
Behdad Esfahbod 3957d2927d [layout] Remove stale comment 2022-05-29 07:30:58 -06:00
Behdad Esfahbod b6fed6f711 [set-digest] Minor don't use !! when auto bool conversion happens 2022-05-29 06:33:34 -06:00
Behdad Esfahbod 371e14d99c Combine uses of map has() then get() with has(.., &..) 2022-05-28 13:40:30 -06:00
Behdad Esfahbod b99efa6c8d [map] Minor: use const reference in has() 2022-05-28 05:16:34 -06:00
Behdad Esfahbod 24d5a11dcb [bimap] Add unlikely and minor optimization in is_empty() 2022-05-28 05:14:16 -06:00
Behdad Esfahbod c56ce8681c Revert "[ot-lang] Use atomic int for cache"
This reverts commit d61b207491.
2022-05-28 04:25:51 -06:00
Behdad Esfahbod 63bc6be0cf
Merge pull request #3603 from harfbuzz/font-serial
Add font serial API
2022-05-27 08:25:22 -06:00
Behdad Esfahbod e2aa29907d [set] Use relaxed atomic ops for last_page_index
Since iterating a set from multiple threads is supported.
2022-05-27 07:06:02 -06:00
Behdad Esfahbod d61b207491 [ot-lang] Use atomic int for cache
Fixes(?) https://github.com/harfbuzz/harfbuzz/issues/3612
2022-05-26 18:24:43 -06:00
Behdad Esfahbod 67bd147c73
Merge pull request #3610 from googlefonts/subset_create_tables_face
[subset] fix subsetting of faces created via hb_face_create_for_tables.
2022-05-26 05:16:07 -06:00
Behdad Esfahbod a719e67887 [ot-font] Use atomic ops for cache serial number
This guarantees the cache is coherent.
2022-05-26 05:02:50 -06:00
Behdad Esfahbod 5248b2567b [ot-font/h-advance] Adjust varStore cache condition
This gives best performance for short strings, now that we have a h-advance cache as well.
The en-words benchmark in particular, now ot-font is faster than ft.

Second to last line is of interest:

Before:
-----------------------------------------------------------------------------------------------------
Benchmark                                                           Time             CPU   Iterations
-----------------------------------------------------------------------------------------------------
BM_Shape/en-words.txt/Roboto-Regular.ttf/hb                      29.8 ms         29.8 ms           23
BM_Shape/en-words.txt/Roboto-Regular.ttf/ft                      30.4 ms         30.4 ms           23
BM_Shape/en-words.txt/SourceSerifVariable-Roman.ttf/hb           16.3 ms         16.3 ms           43
BM_Shape/en-words.txt/SourceSerifVariable-Roman.ttf/ft           16.5 ms         16.5 ms           42
BM_Shape/en-words.txt/SourceSerifVariable-Roman.ttf/var/hb       18.0 ms         18.0 ms           39
BM_Shape/en-words.txt/SourceSerifVariable-Roman.ttf/var/ft       17.8 ms         17.8 ms           39

After:
behdad@Behdads-MacBook-Pro harfbuzz % ninja -Cbuild && build/perf/benchmark-shape --benchmark_filter=en-words
-----------------------------------------------------------------------------------------------------
Benchmark                                                           Time             CPU   Iterations
-----------------------------------------------------------------------------------------------------
BM_Shape/en-words.txt/Roboto-Regular.ttf/hb                      30.0 ms         30.0 ms           23
BM_Shape/en-words.txt/Roboto-Regular.ttf/ft                      30.3 ms         30.3 ms           23
BM_Shape/en-words.txt/SourceSerifVariable-Roman.ttf/hb           16.3 ms         16.3 ms           43
BM_Shape/en-words.txt/SourceSerifVariable-Roman.ttf/ft           16.4 ms         16.4 ms           43
BM_Shape/en-words.txt/SourceSerifVariable-Roman.ttf/var/hb       17.6 ms         17.6 ms           40
BM_Shape/en-words.txt/SourceSerifVariable-Roman.ttf/var/ft       17.8 ms         17.8 ms           39
2022-05-26 05:02:50 -06:00
Behdad Esfahbod 12fff976b6 [ot-var] Use atomic int for cached-serial 2022-05-26 05:02:50 -06:00
Behdad Esfahbod 0919eaa6e8 [ot-font] Remove lock around cache
Not needed.
2022-05-26 05:02:50 -06:00
Behdad Esfahbod 3548b6025f [ot-font] Cache h-advances for variable fonts 2022-05-26 05:02:50 -06:00
Behdad Esfahbod 39a07bf3eb [ot-font] Rename cache to varStore_cache 2022-05-26 05:02:50 -06:00
Behdad Esfahbod 970e03ecae [ot-font] Add a hb_ot_font_t struct 2022-05-26 05:02:50 -06:00
Behdad Esfahbod 80c49933c6 [hb-ft] Adjust serial signature 2022-05-26 05:02:50 -06:00
Behdad Esfahbod 56e0ff9ea1 [ft] If hb_font changed, update FT_Face
Fixes https://github.com/harfbuzz/harfbuzz/issues/2270

Rather untested.
2022-05-26 05:02:50 -06:00
Behdad Esfahbod d0de389de8 [font] Fix test 2022-05-26 05:02:50 -06:00
Behdad Esfahbod a2015cd300 [font] Add a separate serial_coords 2022-05-26 05:02:50 -06:00
Behdad Esfahbod 8629df188a [ft] Discard advance cache if font changed
Uses newly added font serial API.

Part of https://github.com/harfbuzz/harfbuzz/issues/2270

But doesn't set new coords on the FT_Face. That's a lot more
work :(.
2022-05-26 05:02:50 -06:00
Behdad Esfahbod 48db1c9583 [font] Add serial API
New API:
+ hb_font_get_serial()
+ hb_font_changed()

Fixes https://github.com/harfbuzz/harfbuzz/issues/2426

Unused internally as of now.
2022-05-26 05:02:50 -06:00
Behdad Esfahbod efa2a5796e [map] Add hb_map_copy()
New API:
+ hb_map_copy()
2022-05-26 05:01:57 -06:00
Behdad Esfahbod 3b28cff9c0 [cff1] Fix null dereference on memory alloc failure 2022-05-26 04:42:17 -06:00
Behdad Esfahbod 8df9aba997 Actually try to fix null-size undefined behavior
Related to:
https://github.com/harfbuzz/harfbuzz/pull/2067
https://bugzilla.mozilla.org/show_bug.cgi?id=1577584
2022-05-26 03:59:21 -06:00
Garret Rieger e00c7358a0 [subset] special case table presence check for hb_face_create_from_tables faces. 2022-05-25 22:39:00 +00:00
Garret Rieger 6a149a09e7 [subset] fix use of lazy static constructor. 2022-05-25 22:22:35 +00:00
Garret Rieger d4c7939eb7 [subset] use a list of known tables instead of handled tables. 2022-05-25 22:11:32 +00:00
Garret Rieger 3472f73b79 [subset] also include no subset tables when guessing which tables are present. 2022-05-25 21:52:48 +00:00
Garret Rieger 9564d98739 [subset] fix subsetting of faces created via hb_face_create_for_tables.
Fixes #3609.
2022-05-25 21:16:37 +00:00
Behdad Esfahbod 6010feeeb5 [varStore] Rename variable as per review
https://github.com/harfbuzz/harfbuzz/pull/3605
2022-05-24 09:01:02 -06:00
Behdad Esfahbod 3eb7eff487 Remove varstore cache use if HB_NO_VAR 2022-05-21 15:25:53 -06:00
Behdad Esfahbod 099482a37a [ot-font] Cache v_advance varstore as well 2022-05-21 15:24:23 -06:00
Behdad Esfahbod d9acc045f1 [VarStore] Sprinkle cache_t type around
It's available so no need to use void*.
2022-05-21 15:12:14 -06:00
Behdad Esfahbod da38312e42 [VarStore] Pepper cache with likely() 2022-05-21 15:12:14 -06:00
Behdad Esfahbod cf8f00e354 [VarStore] Don't use NAN
Is faster.

With this, I'm seeing 25 to 28% speedup in glyph_h_advances benchmark
of benchmark-font for var/hb tests.
2022-05-21 15:12:14 -06:00
Behdad Esfahbod 5336ba70f6 [HVAR] Cache VarStore region scalars 2022-05-21 15:12:14 -06:00
Behdad Esfahbod 880f50f7e4 Refactor varstore cache 2022-05-21 15:12:14 -06:00
Behdad Esfahbod f2a2fb91a3 [GPOS] Cache VarStore region scalars 2022-05-21 15:12:14 -06:00
Behdad Esfahbod 5fbc70c59b [VarStore] Add cache API 2022-05-21 15:12:14 -06:00
Behdad Esfahbod 05e82aa12e [ft] Add missing lock to kerning function 2022-05-20 17:36:59 -06:00
Behdad Esfahbod 4ea2725704 [set/map] Expose hash API publicly
New API:
+ hb_set_hash()
+ hb_map_hash()
2022-05-20 13:19:48 -06:00
Behdad Esfahbod 2e186d9f24 [buffer] Improve hash function of segment_properties_t 2022-05-20 13:19:48 -06:00
Khaled Hosny aee123fc83 4.3.0 2022-05-20 21:07:25 +02:00
Behdad Esfahbod 975a5f9194 [array] Use hb_memcmp instead of memcmp
Fixes ubsan error.
2022-05-20 12:34:49 -06:00
Behdad Esfahbod 55804e8d68 [hb-ft] Minor rearrange of struct members
To make clear what members the lock protects.
2022-05-20 11:40:44 -06:00
Garret Rieger cbf8f44c9b [subset-perf] swap instead of copying vertice's when reordering during sort. 2022-05-20 09:41:18 -06:00
Garret Rieger b32ca2a292 [subset-perf] remove sort_kahn from repacker.
Without an optimized FIFO queue implementation it's nearly as slow as the now optimized sort_shortest_distance.
2022-05-20 09:41:18 -06:00
Behdad Esfahbod 4266cf3be2 [array] Specialize operator== for bytes_t and ubytes_t 2022-05-19 18:16:54 -06:00
Behdad Esfahbod 6eaa22e9d7 [serialize] Reduce link_t size from 16 to 12 2022-05-19 18:16:54 -06:00
Behdad Esfahbod 30ba9a39e2 [vector] Add emplacing push implementation 2022-05-19 18:16:48 -06:00
Garret Rieger 73b8360dcf [subset] fix fuzzer found underflow when heap push fails.
Fixes https://oss-fuzz.com/testcase-detail/5148625505746944.
2022-05-19 17:02:34 -06:00
Behdad Esfahbod f1bf14ea89 Revert "[set] Cache hash value"
This reverts commit 44952bcc25.

While we investivate https://github.com/harfbuzz/harfbuzz/issues/3599
2022-05-19 16:49:27 -06:00
Behdad Esfahbod b4d1ec310c [algs] Declare coerce() as constexpr 2022-05-19 16:06:21 -06:00
Behdad Esfahbod 2fdb7616f5 [map Further adjust hash function 2022-05-19 16:00:43 -06:00
Behdad Esfahbod 01fc90b68c [map] Adjust hash function 2022-05-19 16:00:06 -06:00
Behdad Esfahbod a47b0aebf5 [vector] Fix remove() implementation
test-vector under valgrind happy now.
2022-05-19 15:52:16 -06:00
Behdad Esfahbod 3bd755c32d [test-vector] Test remove()
Currently buggy. Valgrind confirms.
2022-05-19 15:51:18 -06:00
Behdad Esfahbod 58f848daa8 [set/map] Adjust hash function return type 2022-05-19 15:43:19 -06:00
Behdad Esfahbod 6544fc284f [vector] Add further copy implementation 2022-05-19 15:43:15 -06:00
Behdad Esfahbod c19f116952 [meta] Remove non-existing gcc4 trait implementation 2022-05-19 15:43:15 -06:00
Behdad Esfahbod 679b900e9b [meta] Fix gcc4 trait implementation 2022-05-19 15:43:15 -06:00
Behdad Esfahbod fb77f48ffd [vector] Optimize vector copy 2022-05-19 15:43:15 -06:00
Behdad Esfahbod 28b44ac46a [set] Switch set copy to vector operator =
Slows it down currently.
2022-05-19 15:43:15 -06:00
Behdad Esfahbod 37d3275dec [test-vector] Enable disabled test
This seems to work already.
2022-05-19 15:43:15 -06:00
Behdad Esfahbod 544ffb913e [set] Adjust grow_vector condition 2022-05-19 15:43:15 -06:00
Behdad Esfahbod 0623aa598b [benchmark-set] Add benchmark for set copy 2022-05-19 15:43:15 -06:00
Behdad Esfahbod 44952bcc25 [set] Cache hash value 2022-05-19 14:02:48 -06:00
Behdad Esfahbod 844ac328e4 [set] Fix hb_set_t hash stability 2022-05-19 13:54:31 -06:00
Behdad Esfahbod 2d0b1248b2 [test-map] Test hb_set_t hash stability
Fails currently.
2022-05-19 13:53:53 -06:00
Behdad Esfahbod 561e02fefb [map] Make hb_map_t hashable 2022-05-19 13:41:53 -06:00
Behdad Esfahbod ad17699089 [map] Add is_equal() / towards making hb_map_t hashable
New API:
+ hb_map_is_equal()
2022-05-19 13:36:12 -06:00
Behdad Esfahbod 14a24d8e3f [vector] Make hb_vector_t hashable 2022-05-19 13:04:06 -06:00
Behdad Esfahbod 124f9aeb9b [set] Make hb_set_t hashable 2022-05-19 12:58:02 -06:00
Garret Rieger 3ab2c7935f [subset-perf] Signficiantly speed up ClassDef*::subset.
Eliminates the usage of a glyph -> klass hash map and replaces it with a vector storing the mapping. This allows us to use the vector directly as the iterator driving the serialize. Approximately 1% speedup for Noto Nastaliq.
2022-05-19 12:37:28 -06:00
David Corbett e3e685e5ee [ot-tags] Fix `min_subtag_len` calculations 2022-05-18 18:30:01 -06:00
Garret Rieger 0b1c2ff96a [subset-perf] Remove extra map lookup in ClassDef subset methods. 2022-05-18 18:25:36 -06:00
Garret Rieger 13ace77f1d [subset-perf] Use glyph_map instead of set in ClassDefFormat. 2022-05-18 18:25:36 -06:00
Garret Rieger adae2f2272 [subset-perf] Cache a glyph map for gsub.
This allows us in some cases to avoid using glyph_set_gsub as a filter.
2022-05-18 18:25:36 -06:00
Behdad Esfahbod 202e6c4699 [subset] Remove unnecessary test 2022-05-18 17:12:43 -06:00
Behdad Esfahbod cedf739646 Add some commented-out code 2022-05-18 16:53:26 -06:00
Behdad Esfahbod 6b62c10f02 [priority-queue] Remove old init/fini 2022-05-18 16:27:54 -06:00
Behdad Esfahbod bff8248a9d [repacker] Pre-alloc vertices 2022-05-18 16:25:03 -06:00
Behdad Esfahbod 39a424caf0 [priority-queue] Optimize heap access 2022-05-18 16:19:44 -06:00
Behdad Esfahbod 9308659fd7 [priority-queue] Optimize swap() 2022-05-18 16:14:25 -06:00
Behdad Esfahbod c7317ef761 [repacker] Avoid destroying and recreating objects 2022-05-18 16:03:41 -06:00
Behdad Esfahbod 864e09a0c4 [repacker] Reuse allocated vector 2022-05-18 15:59:29 -06:00
Behdad Esfahbod ca77f16470 [repacker] Remove unnecessary vector .fini() calls 2022-05-18 15:55:49 -06:00
Behdad Esfahbod 4cfc2d668e [subset] Use a std::move on set_t when feasible 2022-05-18 15:32:19 -06:00
Behdad Esfahbod 1f578b5a32 [set] Add pre-allocation internal API 2022-05-18 15:25:00 -06:00
Garret Rieger 48dfbd54a3 [subset] minor cleanup. 2022-05-18 15:24:54 -06:00
Garret Rieger 482c6e5dc4 [subset-perf] Speed up Coverage::serialize by caching iterator. 2022-05-18 15:24:54 -06:00
Behdad Esfahbod 14b18725f0 In Coverage::iter_t, assume iterators are from same Coverage object
No need to support otherwise.
2022-05-18 15:14:32 -06:00
Behdad Esfahbod 27141735c3 [subset] Add Coverage::__end__ implementation 2022-05-18 15:12:49 -06:00
Behdad Esfahbod c476f58adb [subset] Write CoverageFormat2::intersects_coverage() as bsearch() 2022-05-18 14:20:23 -06:00
Behdad Esfahbod 63c6695108 [ot-layout] Cosmetic
The implementation of HBUINT16 operator == is slower than just
comparing to ints.
2022-05-18 13:53:52 -06:00
Behdad Esfahbod 777debd748 [subset] Rewrite CoverageFormat2::intersects as dagger 2022-05-18 13:46:06 -06:00
Behdad Esfahbod cf5001fac7 [subset] Optimize CoverageFormat2::intersected_coverage_glyphs 2022-05-18 13:38:29 -06:00
Behdad Esfahbod 6f37c20798 [subset] Minor rewrite in CoverageFormat2::serialize() 2022-05-18 13:25:42 -06:00
Behdad Esfahbod e91863b717 [subset-cff] Pre-size map in subr_remap_t::create() 2022-05-18 12:39:55 -06:00
Behdad Esfahbod ce60462173 [subset-plan] Pre-size maps in _create_old_gid_to_new_gid_map() 2022-05-18 12:34:27 -06:00
Behdad Esfahbod f82ee17a75 [map] Pre-size map in constructor if we can 2022-05-18 12:19:49 -06:00
Behdad Esfahbod b5aa8a27ea [subset-cff] Cosmetic 2022-05-18 11:58:58 -06:00
Behdad Esfahbod 0b201623f5 [subset-cff] Fix previous commit
Oops!
2022-05-18 11:58:22 -06:00
Behdad Esfahbod 4792309265 [subset-cff] Access vector directly 2022-05-18 11:54:08 -06:00
Behdad Esfahbod 7c86f2e763 [subset-cff] Pre-alloc out buffer 2022-05-18 11:45:27 -06:00
Behdad Esfahbod 0761e7cdfd [subset-cff] Avoid resetting buffer as encoder does 2022-05-18 11:38:25 -06:00
Behdad Esfahbod 71aa10a394 [subset-cff] Manually grow vector to avoid memset overhead 2022-05-18 11:37:24 -06:00
Behdad Esfahbod f455cc53fd [subset-cff] Reuse buffer allocation 2022-05-18 11:31:55 -06:00
Behdad Esfahbod e24797aeac [ot-tags] Follow-up to previous commit
Part of https://github.com/harfbuzz/harfbuzz/issues/3591
2022-05-18 11:10:10 -06:00
Behdad Esfahbod f5d619be79 [ot-tags] Further gate the slow complex case, and add more tests
Part of https://github.com/harfbuzz/harfbuzz/issues/3591

Still 'zh-trad' is the slowest case.

--------------------------------------------------------------------------------------------------
Benchmark                                                        Time             CPU   Iterations
--------------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON zh_trad          136 ns          136 ns      5107838
BM_hb_ot_tags_from_script_and_language/COMMON ab_abcd          115 ns          115 ns      6103104
BM_hb_ot_tags_from_script_and_language/COMMON ab_abc          25.4 ns         25.3 ns     27674482
BM_hb_ot_tags_from_script_and_language/COMMON abcdef_XY       20.2 ns         20.1 ns     34795719
BM_hb_ot_tags_from_script_and_language/COMMON abcd_XY         19.4 ns         19.3 ns     36390401
BM_hb_ot_tags_from_script_and_language/COMMON cxy_CN          33.5 ns         33.4 ns     20998939
BM_hb_ot_tags_from_script_and_language/COMMON exy_CN          25.1 ns         25.0 ns     27705832
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN           34.2 ns         34.1 ns     20564356
BM_hb_ot_tags_from_script_and_language/COMMON en_US           15.5 ns         15.5 ns     45032204
BM_hb_ot_tags_from_script_and_language/LATIN en_US            15.9 ns         15.8 ns     44412379
BM_hb_ot_tags_from_script_and_language/COMMON none            4.72 ns         4.71 ns    149101665
BM_hb_ot_tags_from_script_and_language/LATIN none             4.72 ns         4.70 ns    149254498
2022-05-18 11:04:52 -06:00
Behdad Esfahbod 9c64bda21d [ot-tag] Whitespace 2022-05-17 17:31:18 -06:00
Behdad Esfahbod 3df8017e9b [ot-tag] Optimize subtag_matches() more 2022-05-17 17:29:39 -06:00
Behdad Esfahbod 7f6e8c5536 [ot-tags] Optimize subtag_matches() further
Part of https://github.com/harfbuzz/harfbuzz/issues/3591

Comparing before to after
Benchmark                                                               Time             CPU      Time Old      Time New       CPU Old       CPU New
----------------------------------------------------------------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON abcd_XY                -0.3371         -0.3371            71            47            71            47
2022-05-17 16:58:35 -06:00
Behdad Esfahbod 27c11405a2 [ot-tag] Optimize subtag_matches
Part of https://github.com/harfbuzz/harfbuzz/issues/3591
2022-05-17 16:51:51 -06:00
Behdad Esfahbod a07d818597 [ot-tag] Add a likely() to the cache hit case 2022-05-17 16:46:10 -06:00
Behdad Esfahbod dfca47f419 [ot-tag] Cache last bsearch result
Part of https://github.com/harfbuzz/harfbuzz/issues/3591

Humm. Looks like not all of the fat is bsearch overhead now. I cached
the last bsearch result, but most of the time is still there. I'm
baffled.

Before:
------------------------------------------------------------------------------------------------
Benchmark                                                      Time             CPU   Iterations
------------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON abcd_XY       8.08 ns         8.05 ns     84500482
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN         42.2 ns         42.1 ns     16722006
BM_hb_ot_tags_from_script_and_language/COMMON en_US         16.1 ns         16.0 ns     43461527
BM_hb_ot_tags_from_script_and_language/LATIN en_US          16.5 ns         16.5 ns     42448505
BM_hb_ot_tags_from_script_and_language/COMMON none          4.34 ns         4.33 ns    161290530
BM_hb_ot_tags_from_script_and_language/LATIN none           4.34 ns         4.33 ns    162339799

After:
------------------------------------------------------------------------------------------------
Benchmark                                                      Time             CPU   Iterations
------------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON abcd_XY       8.13 ns         8.11 ns     80438134
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN         40.0 ns         39.9 ns     17487939
BM_hb_ot_tags_from_script_and_language/COMMON en_US         12.7 ns         12.7 ns     55124394
BM_hb_ot_tags_from_script_and_language/LATIN en_US          13.1 ns         13.0 ns     53660125
BM_hb_ot_tags_from_script_and_language/COMMON none          4.61 ns         4.60 ns    151394104
BM_hb_ot_tags_from_script_and_language/LATIN none           4.70 ns         4.68 ns    150402847
2022-05-17 16:21:02 -06:00
Behdad Esfahbod 909f00ac6e [ot-tags] Further speed up language bsearch()
Using an integer tag to bsearch, instead of string.

Part of: https://github.com/harfbuzz/harfbuzz/issues/3591

Before:
------------------------------------------------------------------------------------------------
Benchmark                                                      Time             CPU   Iterations
------------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON abcd_XY       8.11 ns         8.08 ns     87067795
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN         53.6 ns         53.5 ns     13042418
BM_hb_ot_tags_from_script_and_language/COMMON en_US         24.2 ns         24.1 ns     29052731
BM_hb_ot_tags_from_script_and_language/LATIN en_US          24.4 ns         24.3 ns     28736769
BM_hb_ot_tags_from_script_and_language/COMMON none          4.43 ns         4.41 ns    160370413
BM_hb_ot_tags_from_script_and_language/LATIN none           4.35 ns         4.34 ns    160578191

After:
------------------------------------------------------------------------------------------------
Benchmark                                                      Time             CPU   Iterations
------------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON abcd_XY       7.97 ns         7.95 ns     85208363
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN         41.7 ns         41.6 ns     16945817
BM_hb_ot_tags_from_script_and_language/COMMON en_US         16.1 ns         16.0 ns     43613523
BM_hb_ot_tags_from_script_and_language/LATIN en_US          16.5 ns         16.4 ns     42568107
BM_hb_ot_tags_from_script_and_language/COMMON none          4.30 ns         4.29 ns    164055469
BM_hb_ot_tags_from_script_and_language/LATIN none           4.29 ns         4.27 ns    163793591
2022-05-17 15:51:41 -06:00
Behdad Esfahbod c460cf74ce [ot-tags] Cosmetic 2022-05-17 15:30:11 -06:00
Behdad Esfahbod 1c8226ed14 Fix compiler warning
On Mac compiler:

FAILED: src/libharfbuzz.0.dylib.p/hb-ot-tag.cc.o
c++ -Isrc/libharfbuzz.0.dylib.p -Isrc -I../src -I. -I.. -I/usr/local/opt/freetype/include/freetype2 -I/usr/local/Cellar/graphite2/1.3.14/include -I/usr/local/Cellar/glib/2.72.1/include/glib-2.0 -I/usr/local/Cellar/glib/2.72.1/lib/glib-2.0/include -I/usr/local/opt/gettext/include -I/usr/local/Cellar/pcre/8.45/include -Xclang -fcolor-diagnostics --coverage -pipe -Wall -Winvalid-pch -Wnon-virtual-dtor -std=c++11 -fno-rtti -O2 -g -fno-exceptions -fno-rtti -fno-threadsafe-statics -fvisibility-inlines-hidden -DHAVE_CONFIG_H -Wno-non-virtual-dtor -MD -MQ src/libharfbuzz.0.dylib.p/hb-ot-tag.cc.o -MF src/libharfbuzz.0.dylib.p/hb-ot-tag.cc.o.d -o src/libharfbuzz.0.dylib.p/hb-ot-tag.cc.o -c ../src/hb-ot-tag.cc
In file included from ../src/hb-ot-tag.cc:29:
In file included from ../src/hb.hh:481:
../src/hb-array.hh:359:14: error: missing default argument on parameter 'ds'
              Ts... ds) const
                    ^
../src/hb-ot-tag.cc:292:58: note: in instantiation of function template specialization 'hb_sorted_array_t<const LangTag>::bfind<const char *, unsigned int>' requested here
    if (hb_sorted_array (ot_languages, ot_languages_len).bfind (lang_str, &tag_idx,
                                                         ^
1 error generated.
2022-05-17 15:28:50 -06:00
Behdad Esfahbod c1f4b57c06 [ot-tags] Optimize language comparison
Now that we know both strings are of equal len of 2 or 3, optimize.

Part of https://github.com/harfbuzz/harfbuzz/issues/3591

Before:
------------------------------------------------------------------------------------------------
Benchmark                                                      Time             CPU   Iterations
------------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON abcd_XY       8.50 ns         8.47 ns     81221549
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN         79.6 ns         79.3 ns      8785804
BM_hb_ot_tags_from_script_and_language/COMMON en_US         40.0 ns         39.9 ns     17462768
BM_hb_ot_tags_from_script_and_language/LATIN en_US          39.2 ns         39.1 ns     17886793
BM_hb_ot_tags_from_script_and_language/COMMON none          4.31 ns         4.30 ns    162805417
BM_hb_ot_tags_from_script_and_language/LATIN none           4.32 ns         4.31 ns    162656688

After:
------------------------------------------------------------------------------------------------
Benchmark                                                      Time             CPU   Iterations
------------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON abcd_XY       8.27 ns         8.24 ns     81868701
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN         56.1 ns         56.0 ns     12353284
BM_hb_ot_tags_from_script_and_language/COMMON en_US         24.3 ns         24.2 ns     28955030
BM_hb_ot_tags_from_script_and_language/LATIN en_US          24.5 ns         24.4 ns     28664868
BM_hb_ot_tags_from_script_and_language/COMMON none          4.35 ns         4.34 ns    161190014
BM_hb_ot_tags_from_script_and_language/LATIN none           4.36 ns         4.34 ns    161319000
2022-05-17 15:19:40 -06:00
Behdad Esfahbod dde48d78c1 Fix compiler warning 2022-05-17 15:07:49 -06:00
Behdad Esfahbod 15be0deda0 [ot-tags] Optimize lang_matches()
Part of https://github.com/harfbuzz/harfbuzz/issues/3591

Before:
------------------------------------------------------------------------------------------------
Benchmark                                                      Time             CPU   Iterations
------------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON abcd_XY       8.67 ns         8.64 ns     80324382
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN         91.2 ns         90.9 ns      7674131
BM_hb_ot_tags_from_script_and_language/COMMON en_US         41.1 ns         41.0 ns     17174093
BM_hb_ot_tags_from_script_and_language/LATIN en_US          41.3 ns         41.2 ns     17000876
BM_hb_ot_tags_from_script_and_language/COMMON none          4.56 ns         4.55 ns    153914130
BM_hb_ot_tags_from_script_and_language/LATIN none           4.53 ns         4.52 ns    153830303

After:
------------------------------------------------------------------------------------------------
Benchmark                                                      Time             CPU   Iterations
------------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON abcd_XY       8.24 ns         8.21 ns     84078465
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN         77.5 ns         77.2 ns      9059230
BM_hb_ot_tags_from_script_and_language/COMMON en_US         38.8 ns         38.7 ns     17790692
BM_hb_ot_tags_from_script_and_language/LATIN en_US          37.6 ns         37.5 ns     18648293
BM_hb_ot_tags_from_script_and_language/COMMON none          4.50 ns         4.49 ns    155573267
BM_hb_ot_tags_from_script_and_language/LATIN none           4.49 ns         4.47 ns    156456653
2022-05-17 14:57:08 -06:00
Behdad Esfahbod dd3c858f84 [ot-tags] Speed up hb_ot_tags_from_language()
Part of https://github.com/harfbuzz/harfbuzz/issues/3591

"After that, bulk of the time I suppose is spent in binary-searching the
language table. I suggest we split the language table in 2-letter and
3-letter tags, to speed-up the vast majority of cases that are
2-letter."

benchmark-ot, before:

----------------------------------------------------------------------------------------------
Benchmark                                                    Time             CPU   Iterations
----------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN        112 ns          111 ns      6286271
BM_hb_ot_tags_from_script_and_language/COMMON en_US       60.6 ns         60.4 ns     11671176
BM_hb_ot_tags_from_script_and_language/LATIN en_US        61.3 ns         61.1 ns     11442645
BM_hb_ot_tags_from_script_and_language/COMMON none        4.75 ns         4.74 ns    146997235
BM_hb_ot_tags_from_script_and_language/LATIN none         4.65 ns         4.64 ns    150938747

After:

----------------------------------------------------------------------------------------------
Benchmark                                                    Time             CPU   Iterations
----------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN       89.5 ns         89.2 ns      7747649
BM_hb_ot_tags_from_script_and_language/COMMON en_US       38.5 ns         38.4 ns     18199432
BM_hb_ot_tags_from_script_and_language/LATIN en_US        39.0 ns         38.9 ns     18049238
BM_hb_ot_tags_from_script_and_language/COMMON none        4.53 ns         4.52 ns    154895110
BM_hb_ot_tags_from_script_and_language/LATIN none         4.54 ns         4.52 ns    154762105
2022-05-17 14:28:28 -06:00
Behdad Esfahbod 9baccb9860 [ot-tags] Speed up hb_ot_tags_from_complex_language()
Part of https://github.com/harfbuzz/harfbuzz/issues/3591

2. All the subtag_matches outside the switch match long strings (>= 6 or so).
   As such, check the tag for such length before going into any of them.

benchmark-ot, before:

----------------------------------------------------------------------------------------------
Benchmark                                                    Time             CPU   Iterations
----------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN        172 ns          171 ns      4083155
BM_hb_ot_tags_from_script_and_language/COMMON en_US        120 ns          119 ns      5849947
BM_hb_ot_tags_from_script_and_language/LATIN en_US         113 ns          112 ns      5840326
BM_hb_ot_tags_from_script_and_language/COMMON none        4.66 ns         4.64 ns    151396224
BM_hb_ot_tags_from_script_and_language/LATIN none         4.66 ns         4.64 ns    149019593

After:

----------------------------------------------------------------------------------------------
Benchmark                                                    Time             CPU   Iterations
----------------------------------------------------------------------------------------------
BM_hb_ot_tags_from_script_and_language/COMMON zh_CN        112 ns          112 ns      6357763
BM_hb_ot_tags_from_script_and_language/COMMON en_US       60.5 ns         60.3 ns     11475091
BM_hb_ot_tags_from_script_and_language/LATIN en_US        54.9 ns         54.8 ns     12575690
BM_hb_ot_tags_from_script_and_language/COMMON none        4.61 ns         4.59 ns    152388450
BM_hb_ot_tags_from_script_and_language/LATIN none         4.66 ns         4.64 ns    151497600
2022-05-17 13:34:34 -06:00
Behdad Esfahbod fb413f5202 [subset/cff] Don't use bitfields for hot bools
The struct has room because of alignment, and these bools are hot.
2022-05-16 17:38:18 -06:00
Behdad Esfahbod a4d98b63ea [subset/cff1] Collect glyph-to-sid map to avoid an O(n^2) algorithm
Saves 13 for largest benchmark:

BM_subset/subset_glyphs/SourceHanSans-Regular_subset.otf/10000                    -0.1313         -0.1308            75            65            75            65

BM_subset/subset_codepoints/SourceHanSans-Regular_subset.otf/4096                 -0.1009         -0.1004            54            48            54            48
BM_subset/subset_codepoints/SourceHanSans-Regular_subset.otf/10000                -0.1067         -0.1066            70            62            69            62
2022-05-16 17:38:18 -06:00
Behdad Esfahbod b87f48e948 [cff1] get_sid() move bounds check into each implementation 2022-05-16 17:38:18 -06:00
Behdad Esfahbod e1e359b4da [cff1] Tighten up range_list_t a bit 2022-05-16 16:36:28 -06:00
Behdad Esfahbod 3fbac0942d [cff1] Lazy-load & sort glyph names
Improves subset benchmarks by up to 70% for small CFF1 subset of
non-CID fonts!

BM_subset/subset_glyphs/SourceSansPro-Regular.otf/10                              -0.7067         -0.7071             1             0             1             0
BM_subset/subset_glyphs/SourceSansPro-Regular.otf/64                              -0.4817         -0.4824             1             0             1             0
BM_subset/subset_glyphs/SourceSansPro-Regular.otf/512                             -0.1948         -0.1956             2             2             2             2
BM_subset/subset_glyphs/SourceSansPro-Regular.otf/2000                            -0.0767         -0.0761             6             6             6             6
2022-05-16 16:36:28 -06:00
Behdad Esfahbod b58bfd9818 [font] Minor move of code to silence gcc-12 warning
See mailing list discussion.
2022-05-16 11:21:45 -06:00
Behdad Esfahbod 602e0ca79d [cff] Minor restructure of struct
Surprisingly this shows tiny benchmark improvement consistently.
2022-05-16 10:14:34 -06:00
Behdad Esfahbod acdab17ed3 [cff] Cosmetic in parsed_values_t 2022-05-13 14:14:36 -06:00
Behdad Esfahbod b46c7faa9c [cff] Check buf_len, not buf
Ouch!
2022-05-13 14:02:54 -06:00
Garret Rieger 19a8db8545 [subset] fix potential integer overflow in gname_t::cmp. 2022-05-13 13:55:39 -06:00
Behdad Esfahbod 2d2f66e1a3 [cff-common] In INDEX, return empty bytes if length is zero
Before it was possible to return non-null arrayZ.
2022-05-13 13:53:17 -06:00
Behdad Esfahbod a2f132f1fc [cff] Check glyph-name's length, not arrayZ
As the latter can be non-null while still zero-length.
2022-05-13 13:49:39 -06:00
Thomas Devoogdt c657c4e1f8 [meta] fix type traits on gcc 4.9 #3526
Signed-off-by: Thomas Devoogdt <thomas.devoogdt@barco.com>
2022-05-13 11:26:12 -06:00
Behdad Esfahbod e61234c5f7 [vector] Add tests for move constructor/assignment 2022-05-12 13:20:10 -06:00
Behdad Esfahbod 7fa580bc4f [map] Fix map copy/move constructors to actually work
Ouch!
2022-05-12 13:05:32 -06:00
Behdad Esfahbod a09dd87ca3 [set] Fix set copy/move constructors to actually work
Ouch!
2022-05-12 12:58:07 -06:00
Behdad Esfahbod 76fc27713f [vector] Remove explicit std::move
Was confusing compilers. Let them figure it out themselves.

Makes NotoNastaliqu subsetting/1000 benchmark more than twice faster:

Benchmark                                                                       Time             CPU      Time Old      Time New       CPU Old       CPU New
------------------------------------------------------------------------------------------------------------------------------------------------------------
BM_subset/subset_glyphs/NotoNastaliqUrdu-Regular.ttf/1000                    -0.5064         -0.5065           111            55           110            55
BM_subset/subset_codepoints/NotoNastaliqUrdu-Regular.ttf/1000                -0.5494         -0.5493           132            59           131            59
2022-05-12 12:14:07 -06:00
Behdad Esfahbod c81198b5bc [set] Tweak move operators a bit
Should be equivalent.
2022-05-12 12:14:02 -06:00
Behdad Esfahbod 175319cd89 [gsubgpos] Clean up OT::ClassDefFormat2::intersected_class_glyphs 0 case 2022-05-11 13:47:17 -06:00
Behdad Esfahbod 137af3612b [gsubgpos] Simplify OT::ClassDefFormat2::intersected_class_glyphs() 2022-05-11 13:39:30 -06:00
Behdad Esfahbod 3261e05bdb [subset] Optimize ClassDef1::intersected_class_glyphs() for class0 2022-05-11 13:16:31 -06:00
Behdad Esfahbod c78d8ba60b [subset] Allocate same size as source table for GSUB/GPOS/name 2022-05-11 13:05:41 -06:00
Behdad Esfahbod 2e7f1ae48f [subset] Use vector.allocated size instead of tracking buf_size 2022-05-11 12:52:27 -06:00
Behdad Esfahbod f08537963b [cff-subset] Pre-alloc vector for operator decoding 2022-05-11 12:14:49 -06:00
Behdad Esfahbod aeb50b8942 [subset] Retain buffer across table subset operations 2022-05-11 12:14:49 -06:00
Behdad Esfahbod bff78e6515 [cff] Convert interpretation environment to use constructor 2022-05-10 16:50:38 -06:00
Behdad Esfahbod de053e2efb [cff] Convert subr_subset_param_t to use constructor 2022-05-10 16:17:20 -06:00
Behdad Esfahbod 96140db485 [cff] Convert cff2_extents_param_t to use constructor 2022-05-10 16:17:20 -06:00
Behdad Esfahbod 54544f2a57 [cff] Convert cff1_extents_param_t to use constructor 2022-05-10 16:17:20 -06:00
Behdad Esfahbod 377befd0c7 [cff] Convert get_seac_param_t to use constructor 2022-05-10 16:17:20 -06:00
Behdad Esfahbod 8fd70362fa [cff] Use hb_ubytes_t() instead of Null(hb_ubytes_t) 2022-05-10 16:17:20 -06:00
Behdad Esfahbod 9033c7f99d [cff-common] Optimize INDEX::operator[]
Previous try showed slowdown in benchmarks, suprisingly.

Rewrite it keeping the function, hopefully allowing better optimization.
2022-05-10 14:58:53 -06:00
Behdad Esfahbod 3aace2431b Revert "[cff-common] Optimize INDEX::operator[]"
This reverts commit 9edb03ac7a.
2022-05-10 14:54:04 -06:00
Behdad Esfahbod b31ef081db Revert "[cff] Add an unlikely()"
This reverts commit 9ba9adb7ed.

This shows slowdown in benchmarks.
2022-05-10 14:52:40 -06:00
Behdad Esfahbod 9ba9adb7ed [cff] Add an unlikely() 2022-05-10 14:43:00 -06:00
Behdad Esfahbod 9edb03ac7a [cff-common] Optimize INDEX::operator[] 2022-05-10 14:43:00 -06:00
Behdad Esfahbod 0a42410dc8 [cff2] Change extents/shape stack to be just a number
Do the blending immediately.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3559

Benchmark on AdobeVFPrototype shows 35% speedup. Now we're faster
than FreeType:

Benchmark                                                           Time             CPU      Time Old      Time New       CPU Old       CPU New
------------------------------------------------------------------------------------------------------------------------------------------------
BM_Font/glyph_extents/AdobeVFPrototype.otf/hb                    -0.3792         -0.3792          1584           983          1581           982
BM_Font/glyph_extents/AdobeVFPrototype.otf/ft                    +0.0228         +0.0224          1220          1248          1218          1245
BM_Font/glyph_extents/AdobeVFPrototype.otf/var/hb                -0.3513         -0.3518          1616          1048          1613          1046
BM_Font/glyph_extents/AdobeVFPrototype.otf/var/ft                +0.0172         +0.0169          1232          1254          1230          1251
2022-05-10 13:41:12 -06:00
Garret Rieger 8f9f0c494b [subset] Enforce cmap12 group ordering constraints in collect_mapping.
Fixes fuzzer issue: https://oss-fuzz.com/testcase-detail/6365271012540416
2022-05-10 12:15:09 -06:00
Behdad Esfahbod 1b14d2ff13 [cff] Fix arg-stack peek() impl 2022-05-09 18:15:31 -06:00
Behdad Esfahbod 6106ef8c0f [cff] Tighten up arg-stack access 2022-05-09 18:15:11 -06:00
Behdad Esfahbod 8c616a6efe [cff] Allocate stack inline instead of using hb_vector_t
Speeds up glyph_extents and glyph_shape benchmarks for CFF by 10
to 16 percent!
2022-05-09 17:50:59 -06:00
Behdad Esfahbod c941ece60f [cff] Use using instead of typedef 2022-05-09 17:34:58 -06:00
Behdad Esfahbod 64d63cebe2 [cff-common] Use existing types for str_buff_vec_t 2022-05-09 17:34:58 -06:00
Behdad Esfahbod e1838ec1f8 [cff-common] Remove unused method 2022-05-09 17:34:58 -06:00
Behdad Esfahbod 8aa54aaca2 [cff] Replace byte_str_t with hb_bytes_t use 2022-05-09 17:34:58 -06:00
Behdad Esfahbod fe1d85a55a [cff] Remove custom byte_str_t impl 2022-05-09 17:34:58 -06:00
Behdad Esfahbod c8a5f1e3c0 [cff-common] Indent 2022-05-09 17:34:58 -06:00
Behdad Esfahbod be7b2905cb [cff-common] Remove unused INDEX::serialize() method 2022-05-09 17:34:58 -06:00
Behdad Esfahbod 60390169b6 [cff-common] Write str_buf_t::total_size() as dagger 2022-05-09 17:34:58 -06:00
Behdad Esfahbod 258afb45b7 [cff-common] Use range-based loop in str_buff_vec_t 2022-05-09 17:34:58 -06:00
Behdad Esfahbod 8bb1a3ce9a [cff-common] Write INDEX offset-size calc using hb_bit_storage() 2022-05-09 17:34:58 -06:00
Behdad Esfahbod 2ccfe84eff [cff-common] Add assert to INDEX::set_offset_at() 2022-05-09 17:34:58 -06:00
Behdad Esfahbod 4bcab9e99a [cff-common] Use byte_str_t() instead of Null(byte_str_t) 2022-05-09 17:34:58 -06:00
Behdad Esfahbod 94f7a26322 [cff-common] Fix get_size() for Null object
The special-casing didn't make sense.
2022-05-09 17:34:58 -06:00
Behdad Esfahbod c9cc7d5d21 [cff-common] Inline once-used method in INDEX 2022-05-09 17:34:58 -06:00
Behdad Esfahbod 11482a3a39 [cff-common] Remove unused method from INDEX 2022-05-09 17:34:58 -06:00
Behdad Esfahbod d1bb3b08f6 [cff-common] Hide more INDEX internals 2022-05-09 17:34:58 -06:00
Behdad Esfahbod d3b21387fd [cff-common] Remove redundant operator implementation 2022-05-09 17:34:58 -06:00
Behdad Esfahbod a96b408d80 [cff-common] Hide INDEX internals 2022-05-09 17:34:58 -06:00
Behdad Esfahbod 335b1d83cf [cff-common] No need to check max-offset in INDEX
The length_at() function makes sure out-of-range offsets
are discarded. We just need to check the last offset.
2022-05-09 17:34:58 -06:00
Garret Rieger b051f3fa83 [subset] Fix cpal subsetting when there are partial palette overlaps.
The existing code doesn't correctly handle the case where palettes partially overlap in the color record array. This changes the subsetting to only share entries in the color record array when palettes have the same first color index. Partially overlapping palettes will be converted to disjoint segments in the color record array.

Updates one of the color tests to use multiple palettes.

Also fixes fuzzer: https://oss-fuzz.com/testcase-detail/5568200165687296.
2022-05-09 12:25:05 -06:00
Behdad Esfahbod 2884eb97bf [cff-common] Remove special-casing of count=0 in INDEX serialize
The generic code-path now can handle count=0.
2022-05-06 13:33:13 -06:00
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