src/hb-ot-layout.cc

Branch


Log

Author Commit Date CI Message
Khaled Hosny cb59b347 2025-10-01T08:24:34 12.1.0
Behdad Esfahbod 4a26e289 2025-09-30T15:31:04 Add `hb_ot_layout_lookup_collect_glyph_alternates()` (#5367) * [map] Massage operator << overloads * [ot-layout] Add +hb_ot_layout_lookup_collect_glyph_alternates To collect all glyph mapping from SingleSubst or AlternateSubst lookups in one call. Needed by FreeType autohinter for performance. New API: +hb_ot_layout_lookup_collect_glyph_alternates() * [layout] Change hb_ot_layout_lookup_collect_glyph_alternates() API https://github.com/harfbuzz/harfbuzz/pull/5367#discussion_r2149019638
Behdad Esfahbod 3ce3853a 2025-09-22T17:17:28 Merge pull request #5575 from harfbuzz/apply-forward-speedup [apply-forward] Speed up glyph skipping
Behdad Esfahbod eeb16bd4 2025-09-22T16:33:52 [apply-forward] Speed up glyph skipping 6% speedup in Roboto-Regular benchmark.
Behdad Esfahbod ccfd1ae2 2025-09-22T16:48:32 [buffer] Retain digest in the buffer We don't have to reinitialize it for GPOS now, showing some 1.5% speedup on Roboto-Regular benchmark. Over time we can change the various gsub_pauses to update the digest in-place instead of returning true.
Behdad Esfahbod 724ae78d 2025-08-25T13:14:43 Revert "[check-glyph-properties] Cache current lookup-prop's matching result." (#5497) This reverts commit 5b6836e10802266b4c216208e517d617c0a75693. This broke some shaping, namely, "j̣̈́J̣J̈́" with Google Sans, and is quite tricky to debug. Since this slowed down everything other than Duployan, and we also decided NOT to port it to HarfRust, just revert and keep the simpler and more reasonable code logic.
Behdad Esfahbod 0e6e18e7 2025-08-15T14:27:33 Rename a method
Behdad Esfahbod a9a78e1b 2025-08-14T02:04:06 [main-loop] Hypothetically remove a branch (#5458) Don't rely on the compiler.
Behdad Esfahbod 7d1ef008 2025-08-14T01:03:18 Remove an unneeded parameter (#5457)
Behdad Esfahbod 0f6323e1 2025-08-10T15:15:08 [layout] Rename a variable
Behdad Esfahbod 3c18f60d 2025-07-25T05:41:07 [check-glyph-property] Move the cache check to MarkFilteringSets only
Behdad Esfahbod 5b6836e1 2025-07-25T04:42:49 [check-glyph-properties] Cache current lookup-prop's matching result. Slows down everything other than speeding up Duployan.
Behdad Esfahbod 3e93786c 2025-05-21T14:50:35 [ot-layout] More (nullable) instead of (optional) Honestly I don't know why we should ever use (optional). Looks like (nullable) applies to all (optional) and some more places. https://gi.readthedocs.io/en/latest/annotations/giannotations.html
Behdad Esfahbod 4a8a3e12 2025-05-21T14:45:42 [ot-layout] Docs Fixes https://github.com/harfbuzz/harfbuzz/issues/5335
Behdad Esfahbod f50490d6 2025-05-15T18:28:44 Add hb_scalar_cache_t
Behdad Esfahbod 8f413a53 2025-04-15T10:03:16 [layout] Docs
Behdad Esfahbod 810fbedf 2025-04-03T20:59:23 [shape] Use font-data for GDEF varStore cache Last remaining alloc during shaping is gone! Fixes https://github.com/harfbuzz/harfbuzz/issues/5237
Behdad Esfahbod 7b8ae3d0 2025-03-13T10:44:40 [kern/kerx] Make zero-malloc
Behdad Esfahbod 7cf63429 2025-02-20T12:05:17 [ot-layout] Use a variable Doesn't make a diff in the generated code I believe, but is nice.
Behdad Esfahbod 6091abcc 2025-02-06T02:40:24 [buffer] Avoid a copy in collect_codepoints()
Behdad Esfahbod e5e3bc40 2025-02-06T02:36:26 [buffer] Merge two functions into a template
Behdad Esfahbod 7862c7c5 2025-02-04T21:37:27 Rename a method again
Behdad Esfahbod 80bbb0b2 2025-02-04T18:42:33 [set-digest] Rename a method
Khaled Hosny 773fe850 2024-11-20T17:20:49 [layout] Blocklist the GDEF table of various Courier New versions These files have incorrectly give several base glyphs GDEF mark glyph class leading in zeroing there advance widths. Fixes https://github.com/harfbuzz/harfbuzz/issues/4936
Behdad Esfahbod 0037ee28 2024-05-24T08:10:15 Merge pull request #4578 from harfbuzz/varc-table `VARC` table
Behdad Esfahbod e2ab6c7b 2024-05-12T15:25:13 [kern/kerx] Add accelerator and set-digest filtering
Behdad Esfahbod ebbec771 2024-05-12T15:10:21 [kern] Use the sanitized version from face I'm not sure why kern/kerx/morx were written this way before.
Behdad Esfahbod ac411f26 2024-04-23T13:26:53 [Condition] Finish evaluation of ConditionValue https://github.com/adobe-type-tools/opentype-spec-drafts/blob/main/condvalue_spec.md
Behdad Esfahbod 2f41d54b 2024-01-07T13:43:50 Fix old-compiler warning
Qunxin Liu aca55dbe 2023-11-03T10:51:37 [instancer] fix feature variations collect lookups We already know which record to keep, so just collect lookups and no need to check the substitutes_map
Qunxin Liu 091e538d 2023-10-26T12:52:08 [instancer] support partial instancing for FeatureVariations
Behdad Esfahbod 6190bb0b 2023-10-16T14:08:31 [layout] Change order of feature collection See comments for rationale. Fixes https://github.com/harfbuzz/harfbuzz/issues/4445
Khaled Hosny fcb9e591 2023-08-01T00:57:06 8.1.0
Behdad Esfahbod 29ad9304 2023-07-30T17:06:25 [layout] Minor add prealloc
Behdad Esfahbod dc35a0fb 2023-07-30T16:32:11 [ot-map] Speed up feature finding New API: - hb_ot_layout_collect_feature_map()
Khaled Hosny b4305532 2023-07-09T02:54:30 8.0.0
Behdad Esfahbod 690af7aa 2023-06-30T10:36:01 [GPOS] Sanitize Device tables lazily This speeds up face loading for variable fonts by 80%! Comparing before to after Benchmark Time CPU Time Old Time New CPU Old CPU New --------------------------------------------------------------------------------------------------------------------------------------------------------------- BM_Font/load_face_and_shape/Roboto-Regular.ttf/hb -0.0368 -0.0366 20 20 20 19 BM_Font/load_face_and_shape/RobotoFlex-Variable.ttf/hb -0.7149 -0.7162 77 22 77 22 BM_Font/load_face_and_shape/RobotoFlex-Variable.ttf/var/hb -0.7241 -0.7255 80 22 79 22 BM_Font/load_face_and_shape/SourceSansPro-Regular.otf/hb -0.1441 -0.1445 28 24 28 24 BM_Font/load_face_and_shape/AdobeVFPrototype.otf/hb -0.7893 -0.7910 66 14 66 14 BM_Font/load_face_and_shape/AdobeVFPrototype.otf/var/hb -0.7865 -0.7882 67 14 66 14 BM_Font/load_face_and_shape/SourceSerifVariable-Roman.ttf/hb -0.8895 -0.8900 227 25 226 25 BM_Font/load_face_and_shape/SourceSerifVariable-Roman.ttf/var/hb -0.8895 -0.8900 226 25 225 25 BM_Font/load_face_and_shape/Comfortaa-Regular-new.ttf/hb -0.5512 -0.5531 42 19 42 19 BM_Font/load_face_and_shape/NotoNastaliqUrdu-Regular.ttf/hb -0.1511 -0.1510 227 192 225 191 BM_Font/load_face_and_shape/NotoSerifMyanmar-Regular.otf/hb -0.1494 -0.1498 41 35 40 34 OVERALL_GEOMEAN -0.6443 -0.6456 0 0 0 0
Behdad Esfahbod f0f6f6a8 2023-06-22T10:58:44 [layout] More message massaging
Behdad Esfahbod 37555f84 2023-06-22T10:21:19 [layout] Trace chosen script tag
Behdad Esfahbod 67b16247 2023-06-07T16:15:48 [set] Simplify a few set iterations as range loop
Behdad Esfahbod e047b1ab 2023-05-20T10:27:31 [layout] Improve docs
Behdad Esfahbod 02e0e939 2023-05-19T13:18:06 [layout] Fetch default font extents if localized extents not found
Behdad Esfahbod 8ccc1ff2 2023-05-19T13:14:57 [layout] Mark language as nullable GI needs it apparently.
Behdad Esfahbod 792ca22c 2023-05-19T11:42:20 [layout] Document new API
Behdad Esfahbod 0894813a 2023-05-19T11:30:03 [layout] Add "2" version of BASE table API ...that do the script/language resolution. Part of https://github.com/harfbuzz/harfbuzz/pull/4237 Ref https://github.com/harfbuzz/harfbuzz/issues/3439
Behdad Esfahbod 3e110c69 2023-05-19T11:06:26 [layout] Add hb_ot_layout_get_font_extents() Untested. Fixes https://github.com/harfbuzz/harfbuzz/issues/3290
Behdad Esfahbod 3f2401e2 2023-05-03T16:56:52 [layout] Don't init iters successively multiple times
Behdad Esfahbod 8a8fc37c 2023-05-03T14:57:00 [GDEF] Use a cache for glyph classes Shows 5% speedup for Roboto shaping.
Behdad Esfahbod 577bc8a2 2023-05-01T14:01:08 [layout] Micro-optimize
Behdad Esfahbod 5b78e9a9 2023-05-01T13:45:42 [layout] Whitespace
Khaled Hosny 7c9ed76d 2023-04-27T03:26:57 [doc] Use simpler markdown link syntax
Behdad Esfahbod 48f8ed7e 2023-04-22T10:11:22 Docs
Khaled Hosny 8bdaeddf 2023-02-11T23:44:58 7.0.0
Khaled Hosny 0ea8bbd9 2023-02-11T20:01:06 [doc] Use XSince for REPLACEME/EXPERIMENTAL To hide them from gtk-doc so that we can finally enable gtkdoc-check.
Behdad Esfahbod 7a4bd97e 2023-01-31T14:59:39 [layout] Build lookup accelerators lazily on-demand Reduces memory consumption for large multi-script fonts drastically.
Behdad Esfahbod 83353f13 2023-01-31T14:32:14 [layout] Reduce memory use slightly By using raw pointer instead of vector for subtable accelerator. To be used for more memory saving by making subtable accelerators lazy-loaded by shape-plans for large fonts.
Matthias Clasen 04056d44 2023-01-28T22:52:25 [layout] Optimize more buffer message calls Continuation of da7b66c1f8bbf7147f8113.
Behdad Esfahbod da7b66c1 2023-01-27T16:39:06 [layout] Optimize buffer message calls Those aren't exactly free. They were showing up in profiles.
Behdad Esfahbod edec8946 2023-01-20T09:28:59 New API: hb_ot_layout_script_select_language2() Variant that outputs chosen_language. Not sure why the original API didn't have this. The script counterpart has.
Behdad Esfahbod 2fd8e36e 2023-01-20T09:09:14 [layout] Fix return value of chosen_script when matching fails
Behdad Esfahbod ed023f66 2023-01-12T17:04:24 Enable -Wformat-signedness And fix the codebase.
Behdad Esfahbod a81dd105 2022-11-26T13:43:15 [layout] Adjust printing feature tags For required-feature, print spaces, not nul bytes.
Behdad Esfahbod 56e3868b 2022-11-26T13:14:23 [layout/buffer-message] Print feature name in lookup buffer messages
Behdad Esfahbod ed43bc51 2022-11-20T13:10:19 [buffer] Move delete_glyphs_inplace() here
Behdad Esfahbod 561946c7 2022-11-16T17:58:59 [layout] Comment
Behdad Esfahbod 27a8fe7d 2022-11-16T17:49:44 [layout] Only update buffer digest if buffer changed by a pause
Behdad Esfahbod 8b2a2111 2022-11-16T16:57:44 [layout] Keep digest updated in the context Don't recompute digest after every (applied) GSUB lookup.
Behdad Esfahbod a5964a2d 2022-11-16T16:45:23 [layout] Minor simplify
Behdad Esfahbod 80b87588 2022-11-16T16:26:41 [layout] Add a buffer message for digest-skipped lookups
Behdad Esfahbod dff1b809 2022-11-16T16:19:05 [buffer] Add .digest() and use
Behdad Esfahbod 654a2eaf 2022-11-16T16:09:04 [layout] Use buffer-digest for GSUB as well Combined with previous commit, this shows up to 12% speed up with Roboto and the en-words (ie. short strings) benchmark, about 5% for longer English tests, and no adverse effect on heavier fonts.
Behdad Esfahbod 15b6c325 2022-11-16T15:59:13 [layout] Use a buffer digest for GPOS to skip whole lookups
Khaled Hosny 3ce4b8f5 2022-10-08T19:10:07 5.3.0
Qunxin Liu f4813e3b 2022-09-09T10:34:09 [instance] update collect_lookups/prune_features()/closure_features() with variations Some features will be substituted with variations, so we do not collect lookups from the original feature tables.
Behdad Esfahbod b70032ed 2022-09-22T15:59:16 [layout] Fix typo in docs
Behdad Esfahbod 752060a4 2022-09-01T13:47:12 [layout] Document hb_ot_layout_lookup_get_optical_bound()
Behdad Esfahbod 71c6cba0 2022-09-01T13:43:19 [layout] Rename API: -hb_ot_layout_get_optical_bound() +hb_ot_layout_lookup_get_optical_bound()
Behdad Esfahbod 3892128a 2022-09-01T13:40:53 [layout] Add HB_NO_LAYOUT_RARELY_USED
Behdad Esfahbod 8e88653f 2022-09-01T13:39:26 [layout] Move code around
Behdad Esfahbod 4bf96211 2022-08-31T09:18:18 [optical-bounds] Optimize
Behdad Esfahbod 5d6f1a88 2022-08-31T08:31:24 [layout] Add hb_ot_layout_get_optical_bound()
Behdad Esfahbod 14eb3d37 2022-09-01T13:18:42 [layout] Improve annotations
Matthias Clasen 29d5c7f6 2022-08-31T15:03:09 docs: Improve docs for some apis Various functions take hb_tag_t arrays. Those arrays are expected to be 0-terminated. Document that.
Behdad Esfahbod c96bfca3 2022-08-31T08:05:14 [get-alternates] Minor simplify
Behdad Esfahbod 41aa02ae 2022-08-29T11:17:22 [layout] Improve get_feature_tags documentation Fixes https://github.com/harfbuzz/harfbuzz/issues/3798
Khaled Hosny 371c8867 2022-08-23T22:28:58 Add few missing since tags
Garret Rieger 5fdae684 2022-06-29T23:52:08 [reorg] Move GSUB.hh up one level and change GSUB namespace to GSUB_impl.
Khaled Hosny 98e90cc6 2022-06-30T08:43:57 [docs] Reduce warnings Use markdown syntax for inline code blocks instead of %true, %false, and %NULL.
Garret Rieger 3fbf2dec 2022-06-28T23:55:32 [reorg] Move OT::Layout::GPOS_impl::GPOS to OT::Layout::GPOS.
Garret Rieger 88ef3c5a 2022-06-28T23:26:49 [reorg] Change OT::Layout::GPOS to OT::Layout::GPOS_impl.
Garret Rieger 74f45f7c 2022-06-24T23:14:30 [reorg] Move remaining GPOS lookup types to new directory.
Behdad Esfahbod c13ff395 2022-06-08T06:25:23 [layout] Rename apply_recurse_func to specialization of dispatch_recurse_func
Behdad Esfahbod 42051fe1 2022-06-08T04:00:21 [layout] s/inplace/always_inplace/g
Behdad Esfahbod b96622d1 2022-06-05T02:45:41 [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
Behdad Esfahbod 15543f70 2022-06-04T10:55:50 [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.
Behdad Esfahbod e6409d39 2022-06-05T06:57:37 Revert "[layout] Use a cache for main input ClassDef of (Chain)ContextLookups" This reverts commit 57d1c08739d0acd94b96da2f9d5dd6c0ff3b3722. Err. This was an accident.
Behdad Esfahbod 57d1c087 2022-06-05T02:45:41 [layout] Use a cache for main input ClassDef of (Chain)ContextLookups
Behdad Esfahbod 997d9cc4 2022-06-02T18:04:12 [map] Make unique_ptr hashable
Behdad Esfahbod e9407a2b 2022-06-02T11:29:44 Use shared_ptr<hb_set_t> in one place See if valgrind is happy...
Behdad Esfahbod 3957d292 2022-05-29T07:30:58 [layout] Remove stale comment