Commit Graph

285 Commits

Author SHA1 Message Date
Garret Rieger 14b9d8d534 [subset] add --no-layout-closure flag.
Disables layout glyph closure. Fixes #4192.
2023-04-14 15:12:41 -06:00
Qunxin Liu 96ed20725c [instancer] update bound metrics for CFF2 instancing 2023-04-05 17:27:11 -06:00
Qunxin Liu c1acfe9966 [instancer] bug fix in TupleVariationData get_size ()
We need to iterate TupleVariationHeader when calculating the total size
2023-03-27 15:37:06 -06:00
Qunxin Liu ab87d7d225 [instance] add tests for colrv1 full instancing 2023-03-21 11:51:58 -06:00
Garret Rieger a84cae424d [subset] Don't add invalid gids (-1) to the glyphset when loading glyph map from the accelerator. 2023-03-15 12:10:18 -06:00
Qunxin Liu 204e155acb [subset] Add tests for collecting name_ids from STAT and FeatureParams 2023-03-14 10:25:31 -07:00
Qunxin Liu a975ec4842 [instancer] apply cvar deltas 2023-02-27 17:05:23 -07:00
Qunxin Liu 605aed0544 [instancer] bug fix in post table applying mvar deltas 2023-02-24 13:19:37 -07:00
Garret Rieger ddd0f7f40b [subset] Add a test for CFF2 instancing.
Adds option to disable the fonttools comparison check in the test. This is needed since CFF2 instancing is not yet supported in fonttools.
2023-02-22 14:12:55 -07:00
Qunxin Liu af1e605be2 [instancer] bug fix
It's possible that length of all_points equals to 4 for non-empty
glyphs: a composite glyph which contains only one child glyph that is
empty.
2023-02-10 12:51:27 -07:00
Qunxin Liu 615595689c [subset/COLR] add tests for copying varStore 2023-01-27 12:21:52 -07:00
Qunxin Liu 5e86870378 [instancer] compute head/maxp values using only non-empty glyphs 2023-01-25 14:53:19 -07:00
Qunxin Liu 73e6f6cc88 [instancer] enable the missing test 2023-01-24 17:28:51 -07:00
Qunxin Liu 27f72f0deb [instancer] avoid double free for compiled glyph bytes
also increase the HB_GLYF_MAX_POINTS limit to 20000 cause the test file has a
.notdef glyph which is a composite glyph and has 10176 points after
get_points() call
2023-01-24 17:28:51 -07:00
Qunxin Liu 89d332559e [instancer] add tests 2023-01-20 14:50:03 -08:00
Garret Rieger ea1ee0d4b6 [instance] drop and don't collect lookups from feature variations when fully instancing.
This previously incorrectly collected lookups that could be reached via feature variations that are dropped and not activated by the current instance position.
2023-01-14 18:04:24 -07:00
Garret Rieger c324d99952 [instancing] Add tests for MVAR instancing. 2023-01-12 18:15:07 +00:00
Garret Rieger 9fbe52b88d [subset] enable instancing tests by default. 2022-12-12 20:24:24 +00:00
Garret Rieger eda02c2ebd [subset] Move hb_subset_preprocess to be non-experimental. 2022-12-08 16:32:24 -07:00
Garret Rieger 64e8707eca [subset] don't use hb repacker when generating test files from fonttools. 2022-11-24 18:24:50 +00:00
Garret Rieger ff3cac0ccd [subset] Fix unecessary trailing 0 bytes left by ContextFormat2 pruning.
Uneeded rules where beind removed from the count by the bytes for them was being left in the font.
2022-11-23 23:50:49 +00:00
Garret Rieger 2822b589bc [subset] Include instancing tests in distribution.
Automatically enable them when the experimental api is enabled.
2022-11-03 14:24:15 -06:00
Qunxin Liu 8a5524833c [instance] update OS2/.usWeightClass and .usWidthClass when
no-prune-unicode-ranges option is enabled
2022-10-27 11:59:31 -06:00
Garret Rieger db22bfb3cc [subset] Remove Franklin from the tests which is not an open source font. 2022-10-17 13:15:47 -06:00
Garret Rieger 3394ec7048 [subset] use subset accelerator in tests.
This ensures it produces equivalent subsets as without the accelerator.
2022-10-13 23:02:54 +00:00
Qunxin Liu d5fc4a73c0 [instance] add tests for featureVariations
Also updated the script that is used to generate tests.With fonttools,
we now do instancing first and then subsetting.

With different order of subsetting and instancing operations on the same
VF file, fonttools seems to generate 2 different font files with different
glyph set.
1. do subsetting and then instancing: this seems result in a larger glyph
   set in the font file. Lookups are collected from both retained features
   and all possible alternate featurevariations, this leads to a larger
   glyph set after glyph closurei. And instancer doesn't redo glyph
   closure, it does lookups pruning only.

2. do instancing and then subsetting: lookups are collected from
   features that are replaced already and possible alternate feature
   variations
2022-09-29 12:14:43 -06:00
Qunxin Liu 470944901f [instance] add benchmarks for instancing 2022-09-01 13:22:05 -06:00
Qunxin Liu 88c02e0024 [instance] add tests for full instancing
Also update previous tests with GDEF/GPOS tables
2022-09-01 09:44:28 -07:00
Qunxin Liu f887ee0c67 [instance] update post.italicAngle
Add tests for instancing glyf/hmtx
2022-08-22 09:30:09 -07:00
Qunxin Liu f1a69ff1b9 [instance] update scripts for testing instancing 2022-07-18 14:59:07 -06:00
Garret Rieger d6f579e96a [subset] add tests that exercise script filtering. 2022-06-30 22:22:03 +00:00
Garret Rieger 858570b1d9 [subset] add some additional 32bit var store cases.
Test the path where the 32 bit delta is not included.
2022-06-01 19:31:55 +01:00
Garret Rieger 209d6aa2b7 [subset] Update make files for 32bit_var_store test. 2022-06-01 19:31:55 +01:00
Garret Rieger 9c41bfe1a6 [subset] Add subset test of font with 32 bit delta in a var store. 2022-06-01 19:31:55 +01:00
Garret Rieger 52d59bf150 [perf] Make subset benchmark data driven. 2022-05-10 14:30:08 -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 a003fc0df1 Remove accidental files 2022-03-25 09:37:50 -06:00
Andrew John 0182988229
[set] Add call to export set contents to an array. (#3500)
[set] Add hb_set_next_many.
2022-03-25 09:36:44 -06:00
Qunxin Liu 7cb002cb58 [subset] bug fix in prune_langsys
we should not cache visited langsys cause 2 different Record<Langsys>
could have different Tag while pointing to the same Langsys, a langsys
is redundant in Record<Langsys> A does not mean it's redundant in Record
B. Same thing for visited_script.
Also adding the number of features in the LangSys's feature list to the
visited langsys count so it's more accurate.
Plus some improvement in langsys compare()
2022-03-16 13:08:13 -06:00
Behdad Esfahbod b3f8288cca [test/subset] Don't hash files without reason
Fixes https://github.com/harfbuzz/harfbuzz/issues/3118#issuecomment-894021518
2022-02-12 14:52:42 -06:00
Garret Rieger bc899650c7 [subset] Fix for issue #3397.
cur_intersected_glyphs gets modified during recursion leading to incorrect filtering of sub tables in some cases. So don't use cur_intersected_glyphs. Instead just add an additional entry onto the parent_active_glyphs () stack.

Additionaly expands NotoNastaliqUrdu tests to include coverage of the issue from #3397.
2022-01-28 14:20:33 -08:00
Qunxin Liu 706014f69d [subset] (Chain)ContextSubst glyph_closure fix
- When pos_glyphs is empty, use current full glyphs set as input for
subsequent recursive closure process
- Also increase max_lookup_visit_count to 35000 cause a real font file hit
previous limit 20000 and some lookups are dropped unexpectedly
2021-12-10 11:08:36 -07:00
Qunxin Liu 51655a078e [subset] COLR : only include glyphs after COLR closure 2021-12-06 13:29:21 -07:00
Qunxin Liu 74b46b29e7 [subset] MATH: don't serialize coverage table when iterator is empty
when iterator is empty, just set coverage offset to 0.
serialize() in coverage will at lease write out a 16-bit format header.
2021-12-03 08:00:33 -07:00
Garret Rieger 9121ed0cec [subset] Improve sharing of Ligature subtables.
Ligature subtables use virtual links to enforce an ordering constraint between the subtables and the coverage table. Unfortunately this has the sideeffect of prevent the subtables from being shared by another Ligature with a different coverage table since object equality compares all links real and virtual. This change makes virtual links stored separately from real links and updates the equality check to only check real links. If an object is de-duped any virtual links it has are merged into the object that replaces it.
2021-12-01 08:37:04 -07:00
Garret Rieger 95329081c2 [subset] further optimize cmap4 packing. 2021-11-28 07:47:49 -07:00
Garret Rieger 599143824c [subset] Don't pad glyphs when using long loca. 2021-11-26 18:01:04 -07:00
Garret Rieger d9660fd58a [subset] Make cmap4 packing more optimal.
The current CMAP4 implementation uses whatever the current codepoint ranges are and then encodes them as indivudal glyph ids or as a delta if possible. However, it's often possible to save bytes by splitting up existing ranges and encoding parts of them using deltas where the cost of splitting the range is less than encoding each glyph individual.
2021-11-26 13:21:50 -07:00
Qunxin Liu 903a6baece [subset] layout_features filtering fix
we should not use get_size (), which returns length * item_size
2021-11-25 11:24:41 -07:00
Khaled Hosny 69d8f27c69 [meson] Require 0.55.0
We implicitly require it for building ragel subproject. This new version
requirement should satisfied in both Fedora 33 and Debian bullseye, and
not be too cutting edge for us.
2021-11-22 03:11:36 +02:00