Commit Graph

11166 Commits

Author SHA1 Message Date
Qunxin Liu 58dbc00162 [instance] Fix compiling Composite glyph bytes
The x/y offset encoded with int8 originally might overflow after deltas
are applied. So we cannot just copy and update old values.
2022-09-01 09:44:28 -07:00
Qunxin Liu 8b7e2a1373 [instance] we need to update hmtx/vmtx values even for empty glyphs
Update metrics using the 4 phantom points
2022-09-01 09:44:28 -07:00
Qunxin Liu 7d7b492344 [instance] move _normalize_axes_location to the beginning of
subset_plan_create

pinned_at_default flag decides whether delta will be collected as well
when collecting layout variation indices
2022-09-01 09:44:28 -07:00
Qunxin Liu 6de0a6f0b7 [instance] update GPOS ValueRecord table 2022-09-01 09:43:46 -07:00
Qunxin Liu 61636d4efe [instance] update GPOS AnchorFormat3 table 2022-09-01 09:37:00 -07:00
Qunxin Liu 9ab6605f20 [instance] update GDEF table 2022-09-01 09:35:22 -07:00
Qunxin Liu b72995ff16 [instance] GDEF table: collect both varidxes and deltas 2022-09-01 09:33:02 -07:00
Qunxin Liu e03043bd0b [subset] don't let VariationStore subset() produce inner_maps
Make it a subset-planning object so VariationStore can subset to
specified inner_maps.

Also add a layout_variation_idx_delta_map in subset_plan
2022-09-01 09:32:41 -07:00
Matthias Clasen 29d5c7f67a docs: Improve docs for some apis
Various functions take hb_tag_t arrays. Those
arrays are expected to be 0-terminated. Document
that.
2022-08-31 14:54:12 -06:00
Behdad Esfahbod c96bfca380 [get-alternates] Minor simplify 2022-08-31 08:05:14 -06:00
Behdad Esfahbod 41aa02ae72 [layout] Improve get_feature_tags documentation
Fixes https://github.com/harfbuzz/harfbuzz/issues/3798
2022-08-29 11:17:22 -06:00
David Corbett 14e754cd2c [Unicode 15] Update the Arabic joining script list 2022-08-27 19:11:19 -04:00
David Corbett 29386d963c [Unicode 15] Send the new scripts to USE 2022-08-27 19:11:19 -04:00
David Corbett cc0e0f7056 [Unicode 15] Update the USE table 2022-08-27 19:11:19 -04:00
David Corbett e93c2d1309 [Unicode 15] Update the emoji table & cluster test 2022-08-27 19:11:19 -04:00
David Corbett f0da4a587a [Unicode 15] Update the vowel constraint table 2022-08-27 19:11:19 -04:00
David Corbett a223a61209 [Unicode 15] Update the Indic table 2022-08-27 19:11:19 -04:00
David Corbett 8467e12a74 [Unicode 15] Update the Arabic table 2022-08-27 19:11:19 -04:00
David Corbett d0c32c5a0e [Unicode 15] Update the UCD table 2022-08-27 19:11:16 -04:00
David Corbett 893512219e Add a target to download Blocks.txt 2022-08-27 19:08:02 -04:00
David Corbett b68d0af889 [Unicode 15] Add new `hb_script_t` values 2022-08-27 15:41:07 -04:00
David Corbett f9d48150e1 Regenerate files using Ragel 2022-08-27 15:39:39 -04:00
Khaled Hosny 371c88678f Add few missing since tags 2022-08-23 22:30:39 +02:00
Behdad Esfahbod 84d33a1ed8 [glyf] Fix compiler warning 2022-08-23 13:13:13 -06:00
Qunxin Liu f887ee0c67 [instance] update post.italicAngle
Add tests for instancing glyf/hmtx
2022-08-22 09:30:09 -07:00
Qunxin Liu 4882c717b5 [instance] update OS/2.usWeightClass and OS/2.usWidthClass 2022-08-22 09:30:09 -07:00
Qunxin Liu ac0e22fa8e [instance] update glyf/hmtx/vmtx tables 2022-08-22 09:29:37 -07:00
Behdad Esfahbod 23461b7502 [hb-ft] Only apply FT_Face's transform if we created FT_Face
Fixes https://github.com/harfbuzz/harfbuzz/issues/3788

https://github.com/harfbuzz/harfbuzz/issues/3790
2022-08-19 10:28:30 -06:00
Behdad Esfahbod 4f59211762
Merge pull request #3787 from harfbuzz/split_mark_base_bos
[repacker] Add support for splitting MarkBasePosFormat1 in the packer.
2022-08-18 16:33:44 -06:00
Behdad Esfahbod 2eda2ab3bb [object] Forward hb_object_create() arguments to constructor 2022-08-18 16:15:54 -06:00
Behdad Esfahbod df040de9b4 [array] Add a std::forward 2022-08-18 16:15:00 -06:00
Behdad Esfahbod c606978ee0 [array] Remove unused type pack 2022-08-18 16:13:56 -06:00
Garret Rieger 37d61afd5e [subset] add destructor to subset plan.
This ensures that it's members get destructed before the plan itself is destructed, as hb_object_destroy calls the destructor for plan.
2022-08-18 16:09:36 -06:00
Garret Rieger a91bfeeda5 [repacker] comment cleanup. 2022-08-18 22:01:48 +00:00
Garret Rieger 015ca5bc3c [repacker] fix compiler alignment warning. 2022-08-18 21:52:55 +00:00
Behdad Esfahbod de37b2650d [object] Only destruct object if it's not trivially-destructible
Such that we're legally free to access the object to destruct its
(pointer) fields ourselves afterwards.  For things like hb_font_t,
hb_face_t, etc.
2022-08-18 15:21:48 -06:00
Garret Rieger 683c5dd21e [repacker] further reduce base count. 2022-08-18 20:57:04 +00:00
Garret Rieger 5ddf41fc9c [repacker] speed up MarkBasePos test case by using a smaller basecount. 2022-08-18 20:28:05 +00:00
Garret Rieger bf28b84ae8 [repacker] cleanup unused base_array_id. 2022-08-18 01:51:37 +00:00
Garret Rieger 31976bfb50 [repacker] cleanup unused base_array_links. 2022-08-18 01:50:35 +00:00
Garret Rieger 6f5c52b604 [repacker] optimize AnchorMatrix::clone.
Previous runtime is O(n^2) reduced to O(n).
2022-08-18 01:48:10 +00:00
Garret Rieger 29e3b2467e [repacker] optimzie remove_real_links as it's a hot method. 2022-08-18 01:19:54 +00:00
Garret Rieger 46b5dbd7ce [repacker] optimize index_for_offset. 2022-08-18 01:18:16 +00:00
Garret Rieger 52303638b9 [repacker] correct size calculation for MarkBasePosFormat1. 2022-08-18 01:10:42 +00:00
Garret Rieger ac1a853abc [repacker] implement sanitize methods for MarkBasePos. 2022-08-18 00:55:47 +00:00
Garret Rieger a3ed9f9099 [repacker] fix graph comparison, and mark base pos generation for the tests. 2022-08-17 23:39:11 +00:00
Garret Rieger 19c51ed35c [repacker] Get mark base pos test working. 2022-08-17 19:15:55 +00:00
Garret Rieger b46ced9562 [repacker] correct MarkArray size calculation. 2022-08-17 17:51:29 +00:00
Garret Rieger 36c76c27c6 [repacker] when clearing links in MarkArray, also clear parents of the children. 2022-08-17 17:30:21 +00:00
Garret Rieger 8c3db8bdfd [repacker] more progress on MarkBasePos tests. 2022-08-17 00:36:23 +00:00
Garret Rieger 1405f96b6f [repacker] change run_resolve_overflow_test to check for graph equivalence.
Replaces a check for an exact match on the final serialized bytes. The previous check enforced equivalent topological sorting between result and expected, but we only really care that the graph's are equivalent and don't overflow.
2022-08-15 23:48:00 +00:00
Garret Rieger 07fd0528c0 [repacker] add graph equality check.
Does not compare topological sorting, but looks for equivalence of the two graphs.
2022-08-15 23:16:51 +00:00
Garret Rieger 5cf2a25a60 [repacker] Expose on internal method in the repacker that allows the caller to pass in/out a graph.
Will be used in testing so we can compare graphs instead of packed result.
2022-08-15 22:49:24 +00:00
Garret Rieger c414ef292b [repacker] Implement MarkArray::shrink. 2022-08-15 22:10:37 +00:00
Behdad Esfahbod 4ab7e579cb Make HB_BORING_EXPANSION opt-in instead of opt-out
Fixes https://github.com/harfbuzz/harfbuzz/issues/3757
2022-08-12 12:23:48 -06:00
Garret Rieger f8b5520556 [repacker] Add AnchorMatrix::shrink. 2022-08-11 23:09:36 +00:00
Garret Rieger bbe14417ad [repacker] Begin implementing MarkBasePosFormat1::shrink. 2022-08-11 22:53:30 +00:00
Garret Rieger c9ddf0815a [repacker] Implement AnchorMatrix::clone. 2022-08-11 22:34:59 +00:00
Garret Rieger 5ea3c0be8f [repacker] Implement MarkArray::clone. 2022-08-11 22:21:28 +00:00
Garret Rieger 0083fd109c [repacker] add as_table() helper to graph. 2022-08-11 22:09:46 +00:00
Garret Rieger b00eb77682 [repack] Add add_link helper to graph. 2022-08-11 20:33:21 +00:00
Garret Rieger 1acd2a8bf9 [repacker] implement MarkBasePosFormat1::clone_range. 2022-08-11 20:22:31 +00:00
Garret Rieger cf817f3d99 [repacker] Hook up MarkBasePos splitting. 2022-08-11 19:26:59 +00:00
Garret Rieger 4418beac93 [repacker] start implmenting MarkBasePos splitting. 2022-08-11 19:08:04 +00:00
Behdad Esfahbod f4f7d691af
Merge pull request #3779 from harfbuzz/split_pair_pos_2
[repacker] Add PairPosFormat2 table splitting in the repacker.
2022-08-09 22:23:23 -06:00
Garret Rieger fa46dbca9d [repacker] Make actuate_subtable_split internal. 2022-08-08 17:07:14 +00:00
Garret Rieger fe15f2559f [repacker] use position instead of memory address as key in device_tables map. 2022-08-08 16:57:28 +00:00
Garret Rieger 163fbf0be1 [repacker] Check for nullptr's before sanitizing. 2022-08-05 23:37:11 +00:00
Garret Rieger 13253233f7 [repacker] in PairPosFormat2 splitting use the max estimated coverage/classdef size for sizing serialization buffers. 2022-08-05 23:15:10 +00:00
Garret Rieger dde0a2b071 [repacker] track estimated coverage size during PairPosFormat1 split point analysis. 2022-08-05 22:30:37 +00:00
Garret Rieger b37e8bef0e [repacker] count size of the current class at the split point in the next segment. 2022-08-05 22:16:20 +00:00
Qunxin Liu 7fde6ab025 fuzzer fix: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49790 2022-08-05 15:10:31 -06:00
Behdad Esfahbod a4e0fd1685 [MultipleSubst] Rewrite serialize signature as single iterator 2022-08-05 15:05:51 -06:00
Behdad Esfahbod 65d28bc5a7 [MultipleSubst] Rewrite serialize() in terms of iterators
Unused still, and hence untested
2022-08-05 14:56:07 -06:00
Behdad Esfahbod b57ea3b053 Revert "[iter] Use && in uses of is_source_of"
This reverts commit ccbba667a9.
2022-08-05 14:29:27 -06:00
Garret Rieger 0e48a65d32 [repacker] estimate size of classDef1 and coverage during PairPos2 split point analysis. 2022-08-05 20:19:11 +00:00
Garret Rieger 2264df6da3 [repacker] add utility that can calculate the size of Coverage+ClassDef via incremental class inclusion. 2022-08-05 18:33:03 +00:00
Behdad Esfahbod ccbba667a9 [iter] Use && in uses of is_source_of 2022-08-05 11:51:51 -06:00
Behdad Esfahbod 8fb7cc1c63 [iter] Use && in is_sink_of uses 2022-08-05 11:49:29 -06:00
Garret Rieger 5d824c09c0 [repacker] during table splits don't mutate shared coverage/classdef in place.
If other subtables are sharing coverage with a subtable being split we have to duplicate the coverage/classdef tables before they are modified during the shrink operation.
2022-08-05 01:37:14 +00:00
Garret Rieger e1ab355056 [repacker] correct lookup link insertion. 2022-08-05 01:25:16 +00:00
Garret Rieger a733a9afa5 [repacker] insert new subtables immediately after the subtable they split from in the lookup. 2022-08-05 00:32:47 +00:00
Garret Rieger 506547c958 [repacker] Use hb_pair_t constructor instead of hb_pair ().
hb_pair was causing corrupted gid values.
2022-08-04 21:36:21 +00:00
Garret Rieger fdd1952c75 [repacker] PairPosFormat2 splitting - fix coverage and classdef splitting.
The old code was splitting based on coverage index, but should have been splitting on class value.
2022-08-04 19:21:16 +00:00
Behdad Esfahbod c67c1b745b VarStore: simplify again 2022-08-04 11:42:22 -06:00
Behdad Esfahbod 914542bd18 Whitespace 2022-08-04 11:40:54 -06:00
Behdad Esfahbod d7adc55e18 [ot-font] Allow 24bit glyphs in advance cache 2022-08-04 11:40:54 -06:00
Behdad Esfahbod 99070a734a [cache] Use short instead of int if fits 2022-08-04 11:40:54 -06:00
Qunxin Liu d831e935df bug fix in VarData get_delta ()
when LONG_WORDS flag is set, item row is not computed correctly
lcursor should be interpreted as INT32
2022-08-04 11:40:42 -06:00
Garret Rieger b154b1e4c3 [repacker] pull out PairPosFormat1,2::do_split() into a common helper method. 2022-08-04 01:37:21 +00:00
Garret Rieger 88e0dd02cb [repacker] add sanitization for PairPosFormat2. 2022-08-04 01:03:07 +00:00
Garret Rieger 51a5060273 [repacker] add test for splitting a PairPos2 w/ device tables. 2022-08-03 22:30:42 +00:00
Garret Rieger 54fab21cb1 [repacker] get basic pair pos 2 split test working. 2022-08-03 21:57:37 +00:00
Garret Rieger 60d6ffb375 [repacker] always duplicate classDef2 when splitting a PairPos2.
Splits are done in a way that it shouldn't be possible to share the classDef2 between split PairPos2's so pre-emptively duplicate it.
2022-08-03 21:01:23 +00:00
Garret Rieger 6be152420f [repacker] add basic test for PairPos2 splitting. 2022-08-03 19:02:20 +00:00
Behdad Esfahbod b78546b1d2 [cache] Residual 2022-08-03 13:02:18 -06:00
Behdad Esfahbod ec90d1e161 [cache] Add a non-threadsafe version
Use in hb-ft, since already mutex'ed.
2022-08-03 13:01:04 -06:00
Behdad Esfahbod f73c15ca6c [atomic-int] Add operators for relaxed ops 2022-08-03 13:01:04 -06:00
Behdad Esfahbod 86d1e22d4f [atomic-ptr] Rename get 2022-08-03 13:01:04 -06:00
Behdad Esfahbod d3f2287e0b [atomic-int] Rename get/set 2022-08-03 13:01:04 -06:00
Behdad Esfahbod c80e32972f [mvar] Use VarIdx 2022-08-03 11:31:34 -06:00
Khaled Hosny 52bdc750c1 Revert "[meson] Use pathlib in gen-harfbuzzcc.py"
This reverts commit eaf7e5686c.

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

No idea what is going on, but lets restore the old code.
2022-08-03 10:40:57 +02:00
Garret Rieger 65ed82fde5 [repacker] PairPosFormat2::do_split. 2022-08-02 22:22:42 +00:00
Garret Rieger f43055f35a [repacker] Implement PairPosFormat2::shrink. 2022-08-02 22:16:29 +00:00
Khaled Hosny 16bfe6536b [meson] use cpp.get_argument_syntax not cpp.get_id
To account for both MSVC and clang-cl.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3756
2022-08-03 00:07:40 +02:00
Garret Rieger 9f2a44640c [repack] implement device table transfer for PairPosFormat2. 2022-08-02 21:47:53 +00:00
Garret Rieger 22eae32b3b [repacker] add classDef1 clone_range to PairPosFormat2 split. 2022-08-02 21:04:38 +00:00
Garret Rieger 68b90153ea [repacker] Add class def sanitize and range cloning. 2022-08-02 20:58:35 +00:00
Garret Rieger ca0df565f7 [repacker] extract coverage cloning into helper. 2022-08-02 20:04:46 +00:00
Behdad Esfahbod ee18ae3b76 [avar] Minor move code around 2022-08-02 12:56:06 -06:00
Garret Rieger 7f4b2037a5 [repacker] include size of device tables when determining PairPos2 split points. 2022-08-02 18:43:25 +00:00
Behdad Esfahbod 826639fab2 [src] Add test-use-table
Fixes https://github.com/harfbuzz/harfbuzz/issues/3758
2022-08-02 12:18:18 -06:00
Garret Rieger 58fdbd8e5d [repacker] begin adding PairPosFormat2 splitting support. 2022-08-02 17:32:13 +00:00
Behdad Esfahbod e387b3acd3 [ft] Try harder 2022-08-02 10:02:48 -06:00
Khaled Hosny 40a3468906 hb-ft: cast to float to help windows sqrtf 2022-08-02 10:02:48 -06:00
Behdad Esfahbod 6549aec89d [SingleSubstFormat1] Help avoid timeouts in closure() some more
For https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49712
2022-08-01 13:11:14 -06:00
Behdad Esfahbod ba9b20534c [ft] Try working around fonts with transform set
Fixes https://github.com/harfbuzz/harfbuzz/issues/3772
2022-08-01 12:42:05 -06:00
psykose 04d28d94e5 [repacker] fix signedness of char in tests 2022-08-01 11:48:57 -06:00
Khaled Hosny f1f2be776b 5.1.0 2022-07-31 15:48:32 +02:00
Khaled Hosny d6e55f1baf [automake] Use LANG=C when generating harfbuzz*.cc
Since `sort` is locale-dependent.
2022-07-30 23:35:47 +02:00
Behdad Esfahbod a722b3e666 [shape] Only add any unsafe-to-concat flag if requested
Previously it was confusing as random incorrect flags were produced.
2022-07-30 14:33:33 -06:00
Behdad Esfahbod 0a31cfb225 [buffer] Fix produce-tatweel enum value 2022-07-30 14:32:58 -06:00
Behdad Esfahbod a0111e4fab [graph] Fix warning
Fixes https://github.com/harfbuzz/harfbuzz/issues/3766
2022-07-30 12:09:45 -06:00
Behdad Esfahbod 083d4ef5c4 [harfbuzz-subset.cc] Revert back the sort order
Generator seems unstable.
2022-07-30 11:53:56 -06:00
Behdad Esfahbod 065f1e33c8
Merge pull request #3763 from harfbuzz/split_pair_pos
[repacker] Add ability for repacker to pre split PairPosFormat1 subtables.
2022-07-30 11:09:33 -06:00
Behdad Esfahbod 7c9e1ffa7c
Merge pull request #3762 from harfbuzz/safe-to-kashida
Prototype glyph flag safe-to-kashida
2022-07-30 10:33:27 -06:00
Behdad Esfahbod f43dadb8ee Rename kashida -> tatweel 2022-07-30 10:23:03 -06:00
Behdad Esfahbod 73c3ac9172 Document kashida stuff 2022-07-30 10:21:34 -06:00
Behdad Esfahbod d277addb2f [buffer] Add HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_KASHIDA 2022-07-30 10:10:21 -06:00
Behdad Esfahbod 915e12ccbb Prototype glyph flag safe-to-kashida
Fixes https://github.com/harfbuzz/harfbuzz/issues/3721
2022-07-30 10:05:36 -06:00
Behdad Esfahbod 5e31a582c9 [emoji] Bump compression level 2022-07-30 00:09:33 -06:00
Behdad Esfahbod 56a5bc3bd0 [emoji] Regenerate test data
Fix generator.
2022-07-30 00:08:44 -06:00
Behdad Esfahbod 90a3355e66 [ucd-table] Use more compact compression numbers
Doesn't show any slowdown in benchmarks.
2022-07-30 00:01:50 -06:00
Behdad Esfahbod 23dbd35ca3
Merge branch 'main' into split_pair_pos 2022-07-29 19:51:57 -06:00
Behdad Esfahbod a5d9012e94 Revert "[ot-font] Minor simplification"
This reverts commit 28c02b3768.

Old code was used in case of memory allocation failure (as shown
by fuzzers...)
2022-07-29 19:51:00 -06:00
Garret Rieger 9578c44ea2 [repacker] add HB_FALLTRHOUGH. 2022-07-29 22:21:32 +00:00
Garret Rieger 6a5e2cb2f8 [repacker] add todo. 2022-07-29 22:21:32 +00:00
Garret Rieger 14f95ee0cf [repacker] re-count shared node sizes in split PairPos segments. 2022-07-29 22:21:32 +00:00
Garret Rieger 3b91fb2a9f [repacker] cleanup todo. 2022-07-29 22:21:31 +00:00
Garret Rieger a0b8893e46 [repacker] add Coverage sanitize. 2022-07-29 22:21:31 +00:00
Garret Rieger 38846f41d3 [repacker] more TODO cleanup. 2022-07-29 22:21:31 +00:00
Garret Rieger 46c1fa7d1b [repacker] sanitize PairPos during subtable extension. 2022-07-29 22:21:31 +00:00
Garret Rieger 2a5902ee50 [repacker] cleanup. 2022-07-29 22:21:31 +00:00
Garret Rieger 674f0194a3 [repacker] add extension pairpos split test. 2022-07-29 22:21:31 +00:00
Garret Rieger 1d2516f037 [repack] get basic pairpos split test working. 2022-07-29 22:21:31 +00:00
Garret Rieger fb3f6ad7c0 [repacker] ensure lookup map is updated when lookup memory location changes. 2022-07-29 22:21:31 +00:00
Garret Rieger 4e7360f78d [repacker] begin adding tests for PairPosFormat1 splitting. 2022-07-29 22:21:31 +00:00
Garret Rieger f1bfb6585f [repacker] cleanup debug prints. 2022-07-29 22:21:31 +00:00
Garret Rieger 65afed047d [repacker] more bug fixes. 2022-07-29 22:21:31 +00:00
Garret Rieger 1002a3dcd3 [repacker] bug fixes. 2022-07-29 22:21:31 +00:00