src/hb-aat-layout-common.hh


Log

Author Commit Date CI Message
Behdad Esfahbod 6a449756 2025-08-18T18:52:02 [aat] Comment
Behdad Esfahbod 04f1a435 2025-08-18T16:57:46 Add a typedef
Behdad Esfahbod ca66c646 2025-04-01T03:25:41 [aat] Better handle deleted-glyphs 1. Set their GDEF property. Probably irrelevant to morx shaping. 2. Add them to buffer contents, since that can trigger a state machine start action too.
Behdad Esfahbod c2f8066b 2025-03-13T11:40:53 [aat] Fix another malloc-fail crasher
Behdad Esfahbod b57d2a20 2025-03-13T11:19:48 [aat] Fix a leak
Behdad Esfahbod d6f5cbdd 2025-03-13T10:59:41 [aat] Fix a compiler warning
Behdad Esfahbod 64240602 2025-03-13T10:56:39 [aat] Fix memfail crash
Behdad Esfahbod 7b8ae3d0 2025-03-13T10:44:40 [kern/kerx] Make zero-malloc
Behdad Esfahbod 43d421d3 2025-03-12T23:36:09 [aat] Speed up deleted-glyph removal
Behdad Esfahbod c38d5187 2025-03-12T22:39:33 [aat/kerx] Fix initial-glyph collection logic Test: $ hb-shape GeezaPro.ttc --unicodes U+064A,U+064E,U+0651,U+0629
Behdad Esfahbod 2449eb08 2025-03-12T21:03:24 [aat] Adjust filtering to match collect_glyphs()
Behdad Esfahbod 45b2d28d 2025-03-12T19:18:12 Revert "[aat] Clear buffer glyph set" This reverts commit b1a9219ac5ad1c159aecd9b2e3ffbc942433ba6d. Was unnecessary. collect_codepoints() clears the set.
Behdad Esfahbod d76a23a3 2025-03-12T19:16:59 [aat] Micro-optimize
Behdad Esfahbod b1a9219a 2025-03-12T19:13:14 [aat] Clear buffer glyph set Should be clear already but no harm.
Behdad Esfahbod 0b62666e 2025-03-09T19:38:32 [aat/morx] Use a separate bit for deleted-glyphs Should address: https://github.com/harfbuzz/harfbuzz/pull/5119#issuecomment-2709170388
Behdad Esfahbod dc048b7c 2025-03-07T16:16:51 [aat/morx] Set glyph props consistently
Behdad Esfahbod 4ec560dd 2025-03-07T16:14:24 [aat/morx] Refactor all glyph replacements into the context
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 942a30b7 2025-02-05T14:21:49 [aat] Remove now-unused code
Behdad Esfahbod 44281b28 2025-02-05T14:19:01 [aat] Back to simplified heuristic Performs overall better.
Behdad Esfahbod b857b21a 2025-02-05T13:15:15 [morx] Try using buffer-glyph-set adaptive to number of chains
Behdad Esfahbod 491c8c4e 2025-02-05T13:00:09 Revert "[aat] Change threshold from 4 to 16" This reverts commit 624d6edfe4a4b854cf5e66c3fdeb6fc2e1916e14. Some other benchmarks see better results for 4. Let's leave at that.
Behdad Esfahbod 624d6edf 2025-02-05T12:45:57 [aat] Change threshold from 4 to 16 Still worth it it seems.
Behdad Esfahbod a26cf0f4 2025-02-05T12:41:40 [aat] Fix regression in performance of shaping tiny strings
Behdad Esfahbod cec5c571 2025-02-05T12:37:50 [aat] Refactor a method
Behdad Esfahbod cd5dfc6d 2025-02-05T12:32:02 [kerx] Use hb_bit_set_t instead of hb_set_t
Behdad Esfahbod d40c079f 2025-02-05T12:30:56 [morx] Use hb_bit_set_t instead of hb_set_t directly
Behdad Esfahbod fc825168 2025-02-05T11:17:18 [aat] Remove idempotent check Not necessary after the recent filtering. Another 10% speedup with LucidaGrande.
Behdad Esfahbod 849b1735 2025-02-05T11:05:29 [aat] Divide the logic of is_actionable() into two The two different uses require different logic. I had combined the two logic into one in 37bfdf79c66ffbe4a5f02dbbc13756865ca11c1e
Behdad Esfahbod b4787838 2025-02-05T10:52:26 [aat] Speed up per-machine initial-glyph-set calculation Use a bit-page instead of a full hb-set.
Behdad Esfahbod 6215d68b 2025-02-05T10:43:24 [aat] Minor tweak to logic DELETED_GLYPH can also initiate action.
Behdad Esfahbod 37bfdf79 2025-02-05T02:08:19 [morx] Only collect glyphs that can initiate action in the machine And match them against the buffer glyph_set. 4% speedup in LucidaGrande.
Behdad Esfahbod d9e99baa 2025-02-05T02:06:59 [aat] Move is_actionable outside of the driver_context
Behdad Esfahbod 5ade5bab 2025-02-05T01:53:09 [aat] Move Flags out of driver_context_t
Behdad Esfahbod 9f38690e 2025-02-05T01:39:28 [aat] Remove another unused parameter One logic change, but should be fine.
Behdad Esfahbod d9058c64 2025-02-05T01:38:06 [aat] Remove an unused parameter
Behdad Esfahbod e5bdba0b 2025-02-04T23:03:23 [aat] Rename a variable
Behdad Esfahbod 474bef1c 2025-02-04T19:17:13 [aat] Use exact set for buffer intersection versus subchains
Behdad Esfahbod 3a1d7ee7 2025-02-04T17:33:42 [aat] Remove the buffer-digest threshold This can help us skip entire subchains, eg. when they are for different scripts. Speeds up LucidaGrande with ASCII text by 20%.
Behdad Esfahbod e1cb3b15 2025-02-04T17:28:29 Revert "[aat] Remove set-digest" This reverts commit 832f199607292a41b4621b87a646c30cddc00124.
Behdad Esfahbod 359d163d 2025-02-04T17:11:46 Revert "[aat] Remove buffer-digest stuff" This reverts commit 7642366593826c0e04ad58df83fa63ec53960486.
Behdad Esfahbod 7d23e642 2025-02-04T17:11:13 Revert "[aat] Remove dead code" This reverts commit bf36f5c3a4ff0003d330e2c2fc410c0cde911cba.
Behdad Esfahbod d1099476 2025-02-04T17:12:23 Revert "[aat] Remove unused macro" This reverts commit 2ddcccd26ea4962a97ba6858952a5a71d032e6c1.
Behdad Esfahbod 2ddcccd2 2025-02-04T17:05:45 [aat] Remove unused macro
Behdad Esfahbod 9cf2ea3e 2025-02-04T13:34:31 Merge branch 'kern-set'
Behdad Esfahbod bf36f5c3 2025-02-04T13:32:31 [aat] Remove dead code
Behdad Esfahbod 76423665 2025-02-04T13:19:43 [aat] Remove buffer-digest stuff With both morx & kerx sped up now using cache / set, this is not beneficial anymore. Remove it.
Behdad Esfahbod 9a4601b0 2025-02-04T13:14:04 [kern/kerx] Use hb-set-t for left/right, to guard bsearch Use a set of all left glyphs participating in kerning, and all right glyphs participating in kerning, and use these two to weed out non-kerning pairs before bsearching into the kerns. Speeds up shaping of HelveticaNeue by ~10%.
Behdad Esfahbod ee4ca63b 2025-02-03T13:23:08 [aat] Micro-optimize
Behdad Esfahbod ed37725e 2025-02-03T12:59:58 [aat] Micro-optimize get_class
Behdad Esfahbod 91572945 2025-02-02T18:25:45 [aat] More delambda Again, this was costly.
Behdad Esfahbod 556eb029 2025-02-02T18:19:32 [aat] Remove a lambda This lambda was added to "simplify" the logic. But has a lot of overhead.
Behdad Esfahbod 7b44a94a 2025-02-02T17:33:46 [aat] Shrink cache to 256 bytes per subtable
Behdad Esfahbod b89ab7d0 2025-02-02T17:08:20 [aat] Shrink the class cache to be 512 bytes instead of 1kb
Behdad Esfahbod 4fb0ac77 2025-02-02T17:06:45 [aat] Minor simplify
Behdad Esfahbod 832f1996 2025-02-02T17:04:06 [aat] Remove set-digest Now that we have a class cache, this was just speeding things down.
Behdad Esfahbod 0e13e781 2025-02-02T16:50:04 [aat] Add a class-cache to the machine Speeds up Times.ttc benchmark by 20%.
Behdad Esfahbod 13844848 2025-02-02T11:56:01 [aat] Typo
Behdad Esfahbod 7a890c2e 2024-09-22T13:19:02 Add hb_barrier() to switches of unions https://github.com/harfbuzz/harfbuzz/pull/4864#issuecomment-2366923736
Behdad Esfahbod 1da053e8 2024-05-13T16:44:50 [aat] Remove unused template parameter
Behdad Esfahbod fbcfc198 2024-05-13T15:49:00 [aat] Change buffer-digest threshold to 32
Behdad Esfahbod 3ff9ebc8 2024-05-13T14:46:55 [aat] For short words, use buffer digest to skip morx subtables Shows 3 / 4% speedup in en-words test case with Helvetica Neue.
Behdad Esfahbod c9d6bbcf 2024-05-13T14:54:11 [aat] Minor don't copy variable
Behdad Esfahbod 9ea29789 2024-05-13T14:43:47 [aat] Minor
Behdad Esfahbod e2ab6c7b 2024-05-12T15:25:13 [kern/kerx] Add accelerator and set-digest filtering
Behdad Esfahbod 23e4a3cf 2024-05-12T10:49:46 [aat/morx] Add an accelerator
Behdad Esfahbod 0828ccc5 2024-05-12T10:06:06 [aat] Move buffer out of StateTableDriver
Behdad Esfahbod 5a405b31 2024-05-11T10:03:47 [aat] First sketch at using hb_set_digest_t They are not cached in an accelerator yet.
Behdad Esfahbod c053e8f2 2024-04-11T08:58:49 [aat] Simplify (or not?) SubtableGlyphCoverage.sanitize()
Behdad Esfahbod d137d557 2024-04-11T08:53:17 [aat] Add (unused) SubtableGlyphCoverage
Behdad Esfahbod d8d2a98b 2024-04-11T07:45:41 [aat] Whitespace
Behdad Esfahbod 3a9262cc 2023-11-04T12:52:46 [sanitize] More hb_barrier() annotations
Behdad Esfahbod 978918c3 2023-09-11T11:04:08 [aat] Simplify complex condition Based on https://github.com/RazrFalcon/rustybuzz/discussions/79#discussioncomment-6960324
Behdad Esfahbod 4353192d 2023-04-21T11:59:15 [aat] Tweak a couple sanitize calls that are never called
Behdad Esfahbod dd42939e 2023-01-10T13:23:19 [aat] Reduce unsafe_to_concat calls
Behdad Esfahbod 8b17c6ca 2023-01-10T12:17:38 [aat] Comment
Behdad Esfahbod 0e11d317 2023-01-10T12:16:04 [aat] Optimize feature application
Behdad Esfahbod a70543da 2023-01-10T11:49:48 [aat] Always unsafe-to-concat in state machine
Behdad Esfahbod e28c158c 2023-01-10T11:03:38 [aat] Run subtable across ranges if flags match
Behdad Esfahbod 2c9c49fd 2023-01-10T10:53:21 [aat] Support ranges in NonContextual subtable as well
Behdad Esfahbod db4c8747 2023-01-09T21:32:15 Revert "Revert "[aat] Support feature ranges"" This reverts commit 6a7a38521f940216f1e9e2fa2bf22f7b45ce2aef.
Behdad Esfahbod 6a7a3852 2023-01-09T21:29:19 Revert "[aat] Support feature ranges" This reverts commit 1b7994cb3a3c35f3618d7f40c7289496bdab6f06. Broke Zapfino with partial ligature disabling. Debugging.
Behdad Esfahbod 1b7994cb 2023-01-09T19:38:50 [aat] Support feature ranges The hard way... A bit uglier than I liked it to be, but is proper at least. Fixes https://github.com/harfbuzz/harfbuzz/issues/4020
Behdad Esfahbod 622a6869 2023-01-09T18:14:40 Revert "Revert "Revert "[aat] Allow disable feature ranges""" This reverts commit 5202053c2c5fb2c8af9704e690b25a26bf2a0295.
Behdad Esfahbod 5202053c 2023-01-09T17:29:43 Revert "Revert "[aat] Allow disable feature ranges"" This reverts commit 82b3e8af69b09fd908d1cd27b669234328d4a500. Another try. Fixes https://github.com/harfbuzz/harfbuzz/issues/4020
Behdad Esfahbod 82b3e8af 2023-01-09T17:28:52 Revert "[aat] Allow disable feature ranges" This reverts commit 24a4d397bae6b614215086c85a714dc789af3e7f. This was broken.
Behdad Esfahbod 24a4d397 2023-01-09T17:26:08 [aat] Allow disable feature ranges Fixes https://github.com/harfbuzz/harfbuzz/issues/4020 This is a hack. To implement this properly we need to treat runs with different features as independent runs for running the state machine, as the subtable flags might be different. That would be a significant change to our internal implementation.
Behdad Esfahbod 1e503f58 2022-07-05T15:44:58 [null] Add DECLARE_NULL_NAMESPACE_BYTES_TEMPLATE1
Behdad Esfahbod 534b0911 2022-07-01T16:20:31 [aat-layout] Add an unlikely()
Behdad Esfahbod c69ec6f5 2022-06-29T16:32:30 [kern2] Fix sanitize issue on 32bit systems Fixes https://github.com/harfbuzz/harfbuzz/issues/3483
Behdad Esfahbod bea5369c 2022-01-04T10:52:05 [buffer] Rename swap_buffers() to sync()
Behdad Esfahbod 6d555ce8 2021-11-02T00:18:22 [meta] Use std::forward instead of hb_forward()
Behdad Esfahbod c852b868 2021-09-19T16:30:12 Rename HBGlyphID to HBGlyphID16
Jonathan Kew 4f1e8d2b 2021-05-05T11:11:43 [aat] Update glyph properties from GDEF if available when doing a replacement.
Behdad Esfahbod 5639e253 2021-03-31T16:04:43 Add Array16Of<>
Behdad Esfahbod ad28f973 2021-03-31T12:49:14 Rename offset types to be explicit about their size Add Offset16To<>, Offset24To<>, and Offset32To<> for most use-cases.
Behdad Esfahbod 29708e95 2021-03-22T15:22:15 [aat] Fix offsetToIndex math for out-of-bounds values Previously, some bad font data was accidentally being interpretted as legit if it happened to not fall out of memory bounds. The intention of the code was what this commit does. I'm surprised we weren't getting a "arithmetic between signed and unsigned values" warning / error before.
Behdad Esfahbod 8450f43a 2021-03-15T15:18:06 [buffer] HB_NODISCARD next_glyph()
Behdad Esfahbod 567cedcc 2021-02-22T22:09:15 Narrow down cast operators on IntType Say for USHORT, we were implementing casts from and to unsigned. With this change, we cast from and to uint16_t only. This allows compiler more opportunities to catch possible narrowing issues in the code. It needed a couple of fixes in the codebase though, because previously, if a USHORT was participating in arithmetic with signed numbers, eg. "u + 1", the result would have been unsigned. With this change, it would be signed. The correct fix is to update the code to read "u + 1u". That said, I think about conditionally adding back the cast out to signed/unsigned, to facilitate better type deduction. But I couldn't think of a real situation where that would help with anything. So I didn't add. Here's what it was: template <typename Type2 = hb_conditional<hb_is_signed (Type), signed, unsigned>, hb_enable_if (sizeof (Type) < sizeof (Type2))> operator hb_type_identity_t<Type2> () const { return v; } https://github.com/harfbuzz/harfbuzz/pull/2875