Commit Graph

10325 Commits

Author SHA1 Message Date
Behdad Esfahbod c3dd21f110 [cff] Remove unneeded init/fini 2022-01-18 09:11:08 -07:00
Behdad Esfahbod 15cceff3d7 [repacker] Replace fini_deep() with fini()
Vector calls destructor now.
2022-01-17 16:46:45 -07:00
Behdad Esfahbod 1198fb2468 [vector] Adjust construction criteria 2022-01-17 16:46:45 -07:00
Behdad Esfahbod c58bfa35fb [vector] Move semantics in vector remove() 2022-01-17 16:46:45 -07:00
Behdad Esfahbod 5946e945d5 [vector] Destruct in pop() 2022-01-17 16:46:45 -07:00
Behdad Esfahbod 7171917b52 [vector] Construct items when enlarging 2022-01-17 16:46:45 -07:00
Behdad Esfahbod 813eaba6ea [vector] Start adding destruction
Now we need to remove manual destruction, ouch!
2022-01-17 16:46:45 -07:00
Behdad Esfahbod 65a22836f8 [vector] Add XXX markers for remaining places that need work 2022-01-17 16:46:45 -07:00
Behdad Esfahbod 92f179075f Make hb_coerce static inline
That's the pattern we follow.

985b63b3ee (commitcomment-63973544)
2022-01-16 07:51:35 -07:00
Behdad Esfahbod 19793f333b Better try at previous commit
985b63b3ee (commitcomment-63973544)
2022-01-16 07:49:40 -07:00
Behdad Esfahbod 1173ed1f7f Try fix Mac build
985b63b3ee (commitcomment-63973544)
2022-01-16 07:48:02 -07:00
Behdad Esfahbod c0f57ccc88 [algs] Add default-construtor to hb_pair_t 2022-01-16 07:01:05 -07:00
luz paz e2e305066a Fix various typos
Found via `codespell -q 3 -S ./perf/texts -L actualy,ba,beng,fo,gir,inout,nd,ot,pres,ro,te,teh,timne`
2022-01-16 05:39:03 -08:00
Behdad Esfahbod 589bea15b7 Fix previous commit 2022-01-15 17:55:10 -07:00
Behdad Esfahbod b97e4f7084 Further adjust setlocale
Fixes https://github.com/harfbuzz/harfbuzz/issues/3375#issuecomment-1013783496
2022-01-15 17:47:51 -07:00
Behdad Esfahbod 63affc4eae [vector] Move semantics when resizing 2022-01-15 12:24:20 -08:00
Behdad Esfahbod 1c50106608 [meta] Include <memory>, for addressof
Fixes https://github.com/harfbuzz/harfbuzz/issues/3375
2022-01-15 13:09:06 -07:00
Behdad Esfahbod 71e6f742a8 [meta] Remove unused hb_ref() 2022-01-15 13:09:06 -07:00
Garret Rieger e30511a8de [map] Correct previous commit, if (...) was reversed. 2022-01-14 16:48:42 -08:00
Garret Rieger ff4e8c7eac [map] Fix bad memory access if hb_map.fini() was called twice. 2022-01-14 16:42:39 -08:00
Behdad Esfahbod 8a69e00639 [meta] Use std::addressof() instead of hb_addressof() 2022-01-13 16:17:34 -07:00
Behdad Esfahbod b7b0a15f7e [meta] Remove hb_add_const 2022-01-13 15:33:27 -07:00
Behdad Esfahbod 3b2e604237 [meta] Use std::is_const instead of hb_is_const 2022-01-13 15:32:46 -07:00
Behdad Esfahbod 909dde9df1 [meta] Use std::is_reference instead of hb_is_reference 2022-01-13 15:30:10 -07:00
Behdad Esfahbod 47afb3ef04 [meta] Replace hb_is_pointer with std::is_pointer 2022-01-13 15:27:41 -07:00
Behdad Esfahbod 956e0a4d13 [map] Destruct objects 2022-01-13 15:07:10 -07:00
Behdad Esfahbod bc0a5fdf43 [test-map] Add disabled tests with std::string 2022-01-13 13:34:22 -07:00
Behdad Esfahbod 985b63b3ee [map] Allow invalid items to be pointer to static object
By derefencing them when necessary.

Also, we do not rely on trivially-copyable, so remove that assertion.
2022-01-13 13:33:07 -07:00
Behdad Esfahbod 98b26eedf5 [check-static-inits] Only check library object files 2022-01-13 13:12:10 -07:00
Behdad Esfahbod 1e27f95dc1 [algs] Add hb_coerce() 2022-01-13 13:10:47 -07:00
Behdad Esfahbod 5a91db1135 [map] Remove constexpr invalid items
These were non-workable in the general case, eg std::string.
2022-01-13 12:44:48 -07:00
Behdad Esfahbod 114046dc27 [map] Construct objects 2022-01-13 12:38:26 -07:00
Behdad Esfahbod ca4f56bdc7 [map] Massage some more
Towards being able to store arbitrary types.
2022-01-13 12:18:59 -07:00
Behdad Esfahbod cfe2b66114 [algs] Fix hash chaining to std::hash() 2022-01-13 12:18:59 -07:00
Garret Rieger 87496bf63e [subset] fix fuzzer timeout if visisted_paint goes into error. 2022-01-13 11:08:24 -08:00
Khaled Hosny 0acf466c44 [doc] Fix hb_font_set_synthetic_slant param name 2022-01-13 01:29:30 +02:00
Behdad Esfahbod fa12f1ae25 Rename method 2022-01-12 15:08:34 -07:00
Behdad Esfahbod 9408e0d6d1 Rename variable 2022-01-12 15:07:34 -07:00
Behdad Esfahbod 96c969c820 Preserve glyph props 2022-01-12 15:06:40 -07:00
Behdad Esfahbod 0b2c514fb4 More macro cleanup 2022-01-12 11:20:58 -07:00
Behdad Esfahbod 0a42f46ce9 Fix compiler warning
Fixes https://github.com/harfbuzz/harfbuzz/issues/3364
2022-01-12 11:16:17 -07:00
Matthias Clasen 72f0b24ee3
docs: Clarify variation apis (#3363)
Make it explicit that the variations setters
replace all existing variations, even if
not all axes are included in the provided
values.

Co-authored-by: Matthias Clasen <mclasen@redhat.com>
2022-01-12 11:08:02 -07:00
Matthias Clasen befe3b5d5a
color: Document empty returns (#3362)
Document that the SVG and PNG getters return
the singleton empty blob if the glyph has no
color.

Fixes: #1413

Co-authored-by: Matthias Clasen <mclasen@redhat.com>
2022-01-12 11:07:25 -07:00
Behdad Esfahbod 13643934aa Clean up HB_NO_SETLOCALE
https://github.com/harfbuzz/harfbuzz/pull/3358#pullrequestreview-850500143
2022-01-12 10:54:28 -07:00
Behdad Esfahbod 53847dba92 [algs] Call std::hash from hb_hash() 2022-01-12 10:35:28 -07:00
Behdad Esfahbod 74811c501d [map] Map == / != use correct types 2022-01-12 10:35:28 -07:00
Behdad Esfahbod ce7f19a2cc Revert "[map] Actually use k/v invalid types for declaration!"
This reverts commit 6f559346ac.

Err. My bad.
2022-01-10 14:40:27 -07:00
Behdad Esfahbod 6f559346ac [map] Actually use k/v invalid types for declaration! 2022-01-10 14:29:36 -07:00
Behdad Esfahbod a45a630539
Fix unintentional locale dependency (#3358)
Avoid unintentional locale dependency

hb_variation_to_string uses sprintf with %g, which will produce
a locale-dependent decimal point, which is not desired here.

The output is supposed to be compatible with CSS syntax, and
that always uses '.' for the decimal point.

Fix this by changing the per-thread locale to "C" around sprintf call.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3355
Fixes https://github.com/harfbuzz/harfbuzz/pull/3357
Fixes https://github.com/harfbuzz/harfbuzz/pull/3358

Co-authored-by: Matthias Clasen <mclasen@redhat.com>
2022-01-08 16:47:33 -07:00
Matthias Clasen d70825a6d1 docs: Add some details about coordinates
Mention what the effective values are when
coordinates have not been set.
2022-01-08 06:46:22 -08:00
Behdad Esfahbod 0a5c1c9705 [failing-alloc] Make it compile as C++ as well 2022-01-04 14:18:38 -07:00
Behdad Esfahbod bea5369c6d [buffer] Rename swap_buffers() to sync() 2022-01-04 10:52:05 -07:00
Behdad Esfahbod d1e7df5c3f [buffer] Add enter()/leave() pair around shape() 2022-01-04 07:32:04 -07:00
Behdad Esfahbod 43be5ba442 [buffer] Group shape-related members together 2022-01-04 07:26:53 -07:00
Behdad Esfahbod 52f5711ed0 [buffer] Add hb_buffer_create_similar()
Fixes https://github.com/harfbuzz/harfbuzz/issues/1555
2022-01-03 11:57:42 -07:00
Behdad Esfahbod f643b81ffc [buffer] Clean up internal state bookkeeping
hb_buffer_reset() was NOT resetting cluster_level. Ouch! Fix that.

Part of https://github.com/harfbuzz/harfbuzz/issues/1555
2022-01-03 11:45:31 -07:00
Behdad Esfahbod 36e9f467a4 [buffer] Overlay segment-properties in hb_buffer_append()
Part of https://github.com/harfbuzz/harfbuzz/issues/1555
2022-01-03 11:23:14 -07:00
Behdad Esfahbod 6a66992842 Add hb_segment_properties_overlay()
New API:
+ hb_segment_properties_overlay()
2022-01-03 11:21:29 -07:00
Behdad Esfahbod 165a6073fa
Merge pull request #3338 from harfbuzz/slant
[font] Add public API for synthetic slant
2022-01-02 12:02:20 -07:00
Behdad Esfahbod 3fc2e654c0 [metrics] Fix slant calc 2022-01-02 11:56:45 -07:00
Behdad Esfahbod a7751277e9 [docs] Add hb_font_[gs]et_synthetic_slant() 2022-01-02 11:50:02 -07:00
Behdad Esfahbod 4ab94443bb [metrics] Ouch. Fix slant code 2022-01-02 11:26:45 -07:00
Behdad Esfahbod f7d49d9c2b [metrics] Simplify 2022-01-02 11:16:33 -07:00
Behdad Esfahbod f1ba1f940f [metrics] Only scale caret rise/run if font is slanted 2022-01-02 10:58:25 -07:00
Behdad Esfahbod 45c2b6e384 [metrics] Harden math 2022-01-02 10:57:19 -07:00
Behdad Esfahbod fa008a021f [metrics] Implement synthetic slant for caret slope
Part of https://github.com/harfbuzz/harfbuzz/pull/3338
2022-01-02 10:46:38 -07:00
Behdad Esfahbod fc329f665f [metrics] Scale up horizontal caret rise/run
Eg. if rise/run are 1/0, we now return upem/0. This is equivalent.

Part of https://github.com/harfbuzz/harfbuzz/pull/3338
2022-01-02 10:43:13 -07:00
Behdad Esfahbod 0df83f52a1 Fix test 2022-01-02 08:01:11 -07:00
Behdad Esfahbod 5b87c30d6b [font] Mark hb_font_get_var_coords_design() non-experimental
Any remaining issue with the API will address later by deprecating it.

Fixes https://github.com/harfbuzz/harfbuzz/issues/1865
2022-01-02 07:53:45 -07:00
Behdad Esfahbod 2d42fc9fbb [font] Load named-instance if face index top bits are set
This matches FreeType behavior.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3348
2022-01-02 07:45:10 -07:00
Behdad Esfahbod da7dba0002 [face] Clarify face_index handling
Fixes https://github.com/harfbuzz/harfbuzz/issues/3347
2022-01-01 11:20:20 -07:00
Behdad Esfahbod 6da4b80e5f [hb-ot-var] Specify normalized 2.14 docs
Fixes https://github.com/harfbuzz/harfbuzz/issues/3345
2021-12-22 21:51:03 -07:00
Behdad Esfahbod 1b51be57dc [hb-ot-var] Actually set in/out argument
Fixes https://github.com/harfbuzz/harfbuzz/pull/3344
2021-12-22 21:43:48 -07:00
Behdad Esfahbod 06ee40213c Use invisible-glyph for spaces if font has no ASCII space
Fixes https://github.com/harfbuzz/harfbuzz/issues/3340

Should add tests ideally.
2021-12-22 21:34:44 -07:00
Behdad Esfahbod 602bd39680 [style] Adjust font slant angle for synthetic slant value
Part of https://github.com/harfbuzz/harfbuzz/pull/3338
2021-12-19 21:40:25 -08:00
Behdad Esfahbod ff697debd8 [GPOS] Apply font synthetic slant
Part of fixing https://github.com/harfbuzz/harfbuzz/issues/3196
2021-12-19 21:20:25 -08:00
Behdad Esfahbod 810f5d71c7 [font] Add public API for slant
Not hooked up internally to anything.

New API:

+ hb_font_set_synthetic_slant()
+ hb_font_get_synthetic_slant()

Part of fixing https://github.com/harfbuzz/harfbuzz/issues/3196
2021-12-19 21:20:25 -08:00
Garret Rieger 067f90a820 [subset] Fix for fuzzer timeout.
Fixes https://oss-fuzz.com/testcase-detail/5549945449480192

In prune_langsys: move LangSys visited check up before any work is done for a LangSys. In this particular case the compare() method is responsible for the majority of the time spent and wasn't being guarded with a visisted check.
2021-12-14 17:34:21 -07:00
Garret Rieger c4573c2ec7 [repacker] don't infinite loop if visited or roots is in error.
Fixes https://oss-fuzz.com/testcase-detail/5205038086094848
2021-12-14 15:57:48 -07:00
Khaled Hosny be91d2917d 3.2.0 2021-12-12 04:45:54 +02:00
Garret Rieger 77507a1d8d [subset] Don't double count visit lookups in closure_lookups
Each recursed lookup was getting counted once in closure_lookups() and then again in hb_closure_lookups_context_t::recurse.
2021-12-10 15:13:49 -07:00
Garret Rieger d67025705f [subset] reset the visited lookup count before each closure iteration. 2021-12-10 15:13:49 -07:00
Behdad Esfahbod 23159084b4 [morx] Reverse graphemese, not whole buffer
Fixes https://github.com/harfbuzz/harfbuzz/issues/3314
Supersedes https://github.com/harfbuzz/harfbuzz/pull/3315
2021-12-10 15:02:57 -07:00
Behdad Esfahbod 5b995526f7 [buffer] Fix reverse_group() to reverse() at the end 2021-12-10 14:59:56 -07:00
Behdad Esfahbod 21c4fc1011 [buffer] Add optional merge_clusters arg to reverse_groups() 2021-12-10 13:02:43 -07:00
Behdad Esfahbod e949e51218 [ot-layout] Port foreach_grapheme to buffer foreach_group 2021-12-10 12:58:27 -07:00
Behdad Esfahbod eb96e69d18 [buffer] Add foreach_group() 2021-12-10 12:55:29 -07:00
Behdad Esfahbod 1b78e04c78 [buffer] Add ::reverse_groups() 2021-12-10 12:45:43 -07:00
Behdad Esfahbod 4cd96e73e4 [buffer] Inline revers_range() / reverse() 2021-12-10 12:33:21 -07:00
Garret Rieger 5914acb3cb [repacker] Clear distance and position cache when assigning a new space.
A change in space will effect the distance assigned to the node and any of it's children so clear the distance cache.
2021-12-10 11:09:03 -07: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
Garret Rieger 441877f56a [repacker] add test case for using max priority to resolve an overflow. 2021-12-09 17:46:52 -07:00
Garret Rieger be2c488e5d [repacker] Improve vertex priority packing.
Previous priority implementation would move a node further back within it's layer, but at max priority was unable to move any further up than that. This updates the implementation to have 3 priority levels:
1. Distance is reduced by half of table size.
2. Distance is reduced by full table size (move to beginning of the layer).
3. Distance is set to 0. Vertex will be packed as soon as possible.

Also makes the iterative resolutions aware of max priority, so it won't keep trying to raise priority beyond the maximum.
2021-12-09 17:46:52 -07:00
David Corbett 2404617a60 Update language system tag registry to OT 1.9 2021-12-09 07:18:57 -07:00
Behdad Esfahbod 002a1f70b8 [ft] Disable vertical funcs if HB_NO_VERTICAL 2021-12-08 10:45:30 -08:00
Behdad Esfahbod ef14cad736 [GPOS] Disable vertical advance if HB_NO_VERTICAL 2021-12-08 10:43:52 -08:00
Behdad Esfahbod 6ed22de127 [CONFIG] Fix HB_NO_VERTICAL build without HB_TINY 2021-12-08 10:40:40 -08:00
Behdad Esfahbod 53eebc7cd2 [CONFIG] Add HB_NO_VERTICAL 2021-12-08 08:34:20 -08:00
Behdad Esfahbod 9bc5d2903a [TINY] Don't disable VORG table in any config profile
Is needed for vertical layout of CFF fonts.

Fixes https://github.com/harfbuzz/harfbuzz/discussions/3294#discussioncomment-1770313
2021-12-08 08:16:17 -08:00
Garret Rieger 3e4a25098d [repacker] add a maximum number of roots that can be moved in one iteration.
Set to half of the roots in a space. This prevents the repacker from moving all roots in a space to a new space if their are overflows in every root.
2021-12-06 21:27:28 -07:00
Garret Rieger 02b12d7965 [repacker] Move all overflowing roots to a new space simultaneously. 2021-12-06 21:27:28 -07:00
Garret Rieger fa966bcc29 [repacker] create repacker output buffer after final length is known.
Don't rely on a buffer provided by the caller, as it may not be large enough.
2021-12-06 21:27:28 -07:00
Qunxin Liu 51655a078e [subset] COLR : only include glyphs after COLR closure 2021-12-06 13:29:21 -07:00
Behdad Esfahbod 70f8c57e5c [buffer] Rename find_min_cluster 2021-12-04 19:49:23 -08:00
Behdad Esfahbod 94d43c008a [buffer] Merge and rename clear_glyph_flags() 2021-12-04 16:56:39 -08:00
Behdad Esfahbod b95d252fab [CONFIG] Add HB_CONFIG_OVERRIDE_H to simplify config overrides 2021-12-03 11:49:55 -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 1d9ef3a75a [subset] Actually fix end_cp unitialized warning. 2021-12-01 11:53:10 -07:00
Garret Rieger d8635dfe5a [subset] Fix warning about uninitialized use of end_cp. 2021-12-01 11:17:46 -07:00
Khaled Hosny 7608b19167 [directwrite] Set unsafe to break flag
Like the rest of platform shapers. Otherwise hb-shape --verify goes
crazy.
2021-12-01 19:55:48 +02:00
Khaled Hosny 361a438658 Revert "Revert "[hb-directwrite] Don't load dwrit.dll dynamically""
This reverts commit ecbe224743.

It was causing directwrite shaper to crash in MSVC builds.
2021-12-01 19:55:48 +02:00
Khaled Hosny 549e2b7038 Revert "Remove direct link to dwrite from meson scripts"
This reverts commit 6ea6c581ed.
2021-12-01 19:55:48 +02:00
Garret Rieger 071aea42c2 [iter] add specialized implementation for hb_concat forward when iterators are not random access. 2021-12-01 08:37:04 -07:00
Garret Rieger 2e935514d9 [iter] fix forward implementation in hb_concat().
Add test coverage for forward.
2021-12-01 08:37:04 -07:00
Garret Rieger 39e76af19e [subset] add all_links () to object_t.
Helper to provide easy access to concatenated real and virtual links iterator.
2021-12-01 08:37:04 -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 ca22741110 [iter] add hb_concat (a, b).
Iterates over a, and then over b.
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
Khaled Hosny 8aed5c21a3 3.1.2 2021-11-26 17:54:18 +02: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
Qunxin Liu 84dc4e85e8 [subset] avoid writing out duplicate extra glyph names in post table
Add check for possible duplicate with other name index
2021-11-19 17:22:35 -07:00
Behdad Esfahbod 325f26290e [array] Fix a couple constexpr warnings
./subprojects/harfbuzz/src/hb-array.hh:71:25: warning: 'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const' to avoid a change in behavior [-Wconstexpr-not-const]
  constexpr hb_array_t& operator = (const hb_array_t<U> &o)
                        ^
                                                            const
../subprojects/harfbuzz/src/hb-array.hh:72:5: warning: use of this statement in a constexpr function is a C++14 extension [-Wc++14-extensions]
  { arrayZ = o.arrayZ; length = o.length; backwards_length = o.backwards_length; return *this; }
    ^
../subprojects/harfbuzz/src/hb-array.hh:329:32: warning: 'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const' to avoid a change in behavior [-Wconstexpr-not-const]
  constexpr hb_sorted_array_t& operator = (const hb_array_t<U> &o)
                               ^
                                                                   const
../subprojects/harfbuzz/src/hb-array.hh:330:5: warning: use of this statement in a constexpr function is a C++14 extension [-Wc++14-extensions]
  { hb_array_t<Type> (*this) = o; return *this; }
    ^
4 warnings generated.
2021-11-19 17:19:09 -07:00
Behdad Esfahbod 98fefd5ded
Merge pull request #3301 from harfbuzz/hashmap-classes
Hashmap classes
2021-11-19 13:34:53 -07:00
Qunxin Liu ca418cac74 [subset] keep features that have FeatureParams and the tag is "size" 2021-11-19 13:31:25 -07:00
Qunxin Liu e88fc41ef3 [subset] inputSequence could be empty, change the sanity check 2021-11-19 12:57:43 -07:00
Behdad Esfahbod 4731b10736 [array] Mark constructors constexpr
../src/hb-map.hh:44:38: note: non-constexpr constructor 'hb_array_t' cannot be used in a constant expression
  static constexpr K INVALID_KEY   = kINVALID;
                                     ^
2021-11-19 12:33:37 -07:00
Behdad Esfahbod 1da7423ed9 [array] Add constructor taking std::nullptr_t
Not all impls implement nullptr_t in a way that would automatically
convert to what we were accepting.

In file included from ../src/test-map.cc:27:
../src/hb-map.hh:44:22: error: no viable conversion from 'nullptr_t' to 'const hb_array_t<const char>'
  static constexpr K INVALID_KEY   = kINVALID;
                     ^               ~~~~~~~~
2021-11-19 12:11:41 -07:00
Behdad Esfahbod e456922a76 [test] Fix nullptr_t scope issue 2021-11-19 12:04:08 -07:00
Behdad Esfahbod 5157cac0e2 [test] Silence unused-variable erros in test 2021-11-19 12:03:10 -07:00
Behdad Esfahbod 394f772937 [map] Allow storing classes in the hashmap
Fixes https://github.com/harfbuzz/harfbuzz/issues/3293

The trick was to change the type of the invalid key/value to be non-class.
2021-11-19 11:49:23 -07:00
Behdad Esfahbod cba17fd101 [array] Add default methods again, this time the full set
Should add tests.
2021-11-19 11:49:03 -07:00
Garret Rieger a75b96f7e5 [sanitize] In lookup sanitize don't try to access subtable 0 if it isn't there. 2021-11-16 15:00:50 -08:00
Behdad Esfahbod 82a9f54410 [colr] Simplify sanitize 2021-11-10 10:50:38 -08:00
Garret Rieger 64b29dbd59 [subset] reuse colrv1 max nesting depth constant for sanitize. 2021-11-10 10:34:46 -07:00
Garret Rieger ace98cc65f [subset] Only sanitize recursion depth in COLR. 2021-11-10 10:34:46 -07:00
Garret Rieger 782a7377ad [sanitize] add a maximum recursion depth for sanitize. 2021-11-10 10:34:46 -07:00
Khaled Hosny cd5c6cd041 3.1.1 2021-11-08 06:59:55 +02:00
Matthias Clasen 1e07d42aa6 Typo fix 2021-11-07 07:58:28 +02:00
Matthias Clasen 1fd7fd9823 Cosmetics: Avoid confusing indentation
This line had me confused for a second because
the condition looked like a cast and the if just
looked misplaced. Add a line break to prevent
such confusion.
2021-11-06 09:19:55 -07:00
Matthias Clasen 3471f8f69e docs: Clarify a doc comment
Reword the docs for hb_ot_layout_script_select_language and
be a bit more specific about the returned index.
2021-11-06 09:19:55 -07:00
Behdad Esfahbod 07dc34bdaf [mutex] Try work around GCC cast-align error/warning
Shouldn't be needed because of the alignas(). Oh well...

Might fix https://github.com/harfbuzz/harfbuzz/issues/3283
2021-11-05 14:45:20 -07:00
Khaled Hosny 77eeec53a9 3.1.0 2021-11-03 23:31:03 +02:00
Behdad Esfahbod 54e7d6267b [array] Remove defaulted destructor 2021-11-03 14:43:34 -06:00
Garret Rieger f51b48c8e7 [subset] Fix fuzzer found memory leak.
Happens because an insert into a map with an invalid key reports successful, but this causes the set being inserted to be lost.
2021-11-02 17:00:07 -07:00
Behdad Esfahbod b1cd0dce8e [map] Add INVALID_KEY and INVALID_VALUE 2021-11-02 17:56:11 -06:00
Qunxin Liu 540f19b6fe [subset] fix bug in (Chain)ContextFormat2
Only keep rulesets for glyphs class numbers that survived in coverage
2021-11-02 16:05:55 -07:00
Qunxin Liu 60e203644b [subset] use glyphset_gsub instead of glyphset for GDEF 2021-11-02 16:56:52 -06:00
Qunxin Liu 0a7563a53f [subset] fuzzer fix: https://oss-fuzz.com/testcase?key=6254792024915968
Make sure input is valid, each gid has a corresponding offset value in
the map
2021-11-02 15:25:18 -07:00
Qunxin Liu 364b6b3989 [subset] Don't assume FeatureList is sorted
Though the spec said FeatureRecords are sorted alphabetically by feature
tag, there're font files with unsorted FeatureList. And harfbuzz is not
able to subset these files correctly because we use binary search in
finding featureRecords when collecting lookups. Also
find_duplicate_features needs to be updated to handle this.
2021-11-02 15:15:02 -07:00
Garret Rieger 49c9392412 [subset] During LigatureSubstFormat1 subsetting always place Coverage last.
In Windows 7 on Chrome if the coverage table comes before any of the LigatureSet or Ligature subtables the font won't load. This changes the packing order to always place the Coverage table last. Virtual links are used to ensure the repacker maintains the desired ordering.

Coincidentally fontTools also does the same thing (a3f988fbf6/Lib/fontTools/ttLib/tables/otTables.py (L1137)) to reduce overflows during packing.
2021-11-02 12:19:13 -06:00
Garret Rieger 9643d77086 [repacker] add more detailed comment about virtual links. 2021-11-02 12:19:13 -06:00
Garret Rieger 5bfc7d1015 [repacker] remove VirtualOffset struct.
Make and add_virtual_link () specialization of add_link() instead.
2021-11-02 12:19:13 -06:00
Garret Rieger bc4c5341d6 [repacker] Add test for virtual links in the repacker. 2021-11-02 12:19:13 -06:00
Garret Rieger 7615b94ecf [repacker] add 'virtual links' to the serializer.
These aren't associated with an offset field, but instead exist solely to add an ordering constraint to the object graph.
2021-11-02 12:19:13 -06:00
Behdad Esfahbod 59d8f6c817 [map] Fix copy assignment operator 2021-11-02 10:33:53 -06:00
Behdad Esfahbod 459e485bab [meta] Remove otherwise-empty test-meta 2021-11-02 09:36:12 -06:00
Behdad Esfahbod b8724c6023 [meta] Add in-house impl of hb_is_convertible() 2021-11-02 00:49:40 -06:00
Behdad Esfahbod 7a078c395a [meta] Use std::conditional instead of hb_conditional() 2021-11-02 00:44:51 -06:00
Behdad Esfahbod 943921cf0c [meta] Use more std type_traits 2021-11-02 00:26:46 -06:00
Behdad Esfahbod 6d555ce82e [meta] Use std::forward instead of hb_forward() 2021-11-02 00:18:22 -06:00
Behdad Esfahbod 811f80a701 [algs] Use std::move instead of hb_move() 2021-11-02 00:17:54 -06:00
Behdad Esfahbod 896e0c74a8 [meta] Remove unused traits 2021-11-02 00:06:30 -06:00
Behdad Esfahbod be42800fc6 [meta] Use std::is_trivially_... instead of internal copies 2021-11-02 00:04:18 -06:00
Behdad Esfahbod 30c05e8b55 [algs] include <new> 2021-11-01 23:57:00 -06:00
Behdad Esfahbod 4c6fd7cdb2 [map] Try moving items when resizing 2021-11-01 23:13:34 -06:00
Behdad Esfahbod a28ea8d7f3 Simplify swap() 2021-11-01 22:50:54 -06:00
Behdad Esfahbod 94158316d9 [map] Add iterable constructor 2021-11-01 22:47:26 -06:00
Behdad Esfahbod a03b9b14c9 [map] Add initializer_list and swap() 2021-11-01 22:45:11 -06:00
Behdad Esfahbod 3604f5f248 [algs] Include <initializer_list> 2021-11-01 22:37:42 -06:00
Behdad Esfahbod c30f6834d0 [map] Add 5 methods 2021-11-01 22:29:14 -06:00
Behdad Esfahbod 38debbab7e [set] Add successful check in swap() 2021-11-01 22:17:35 -06:00
Behdad Esfahbod b860b44229 [bimap] Simplify initialization 2021-11-01 22:08:03 -06:00
Behdad Esfahbod d2c364f6e7 [array] Use default methods 2021-11-01 21:55:14 -06:00
Behdad Esfahbod 6f74d80ed1 [vector] Complete sorted_vector 5-methods 2021-11-01 21:49:32 -06:00
Behdad Esfahbod a28b5d03b5 [vector] Add swap() friend to hb_sorted_vector_t 2021-11-01 21:43:44 -06:00
Behdad Esfahbod e97e79967e Verbiage 2021-11-01 21:34:46 -06:00
Behdad Esfahbod 34fa5e2901 [set] More default operators 2021-11-01 21:25:03 -06:00
Behdad Esfahbod b6c0b40fc2 [vector] Use default constructor 2021-11-01 21:15:38 -06:00
Behdad Esfahbod 1e3f57c079 [bit-set] Implement standard-5 methods plus swap 2021-11-01 21:14:12 -06:00
Behdad Esfahbod 11eadb5d28 [bit-set-invertible] Implement standard-5 methods & swap 2021-11-01 21:07:09 -06:00
Behdad Esfahbod dcd18da611 [set] Add standard the 5 standard methods & tests 2021-11-01 20:55:30 -06:00
Behdad Esfahbod 628a0f3796 [vector] Add more tests 2021-11-01 20:36:55 -06:00
Behdad Esfahbod f15858be5f [vector] Pre-allocate if iterator has random-access length 2021-11-01 20:26:07 -06:00
Behdad Esfahbod 11135150a7 [vector] Move test code into separate file 2021-11-01 20:23:12 -06:00
Behdad Esfahbod ee75e716c1 [vector] Add initializer from iterable 2021-11-01 20:19:57 -06:00
Behdad Esfahbod 18a078f968 [vector] Implement move assignment using swap 2021-11-01 20:06:58 -06:00
Behdad Esfahbod eeda2c549d [vector] Add initializer_list constructor & tests 2021-11-01 18:50:11 -06:00
Behdad Esfahbod c484641304 Revert "[vector] Add initializer_list constructor & tests"
This reverts commit aa6182453b.
2021-11-01 18:48:24 -06:00
Behdad Esfahbod aa6182453b [vector] Add initializer_list constructor & tests 2021-11-01 18:36:57 -06:00
Behdad Esfahbod 8c05569930 [algs] Add hb_swap() ala, and using, std::swap()
Use it in vector.

Use ADL idiom.
2021-11-01 17:59:17 -06:00
Behdad Esfahbod bbaccf23d9 Better round positions during scaling
Fixes https://github.com/harfbuzz/harfbuzz/issues/3274
2021-11-01 16:45:36 -06:00
Matthias Clasen 52ccdc78e6 docs: Add a link to the OpenType spec
Link to the name table specification in the
hb_ot_name_id_t docs.
2021-10-28 11:58:38 -07:00
Matthias Clasen 8cb2f969d9 Document hb_ot_name_t values
Add a short blurb for each value and refer
to the OpenType spec for more information.

Fixes: #3181
2021-10-28 11:58:38 -07:00
Qunxin Liu 85deddb16e [subset] fuzzer fix: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40406 2021-10-27 16:16:15 -07:00
Behdad Esfahbod da500568de [API] Add hb_buffer_[sg]et_not_found_glyph() and --not-found-glyph
Instead of using gid=0 when a character is not found in the font,
client can now set a custom value.  This is useful for shaper-driven
font fallback and to differentiate that from .notdef glyph.

Fixes https://github.com/harfbuzz/harfbuzz/issues/1360
2021-10-26 08:02:29 -06:00
Cameron Cawley 6ea6c581ed Remove direct link to dwrite from meson scripts 2021-10-23 13:19:39 -07:00
Cameron Cawley ecbe224743 Revert "[hb-directwrite] Don't load dwrit.dll dynamically"
This reverts commit 6119ff9d80.
2021-10-23 13:19:39 -07:00
Behdad Esfahbod 4262636926
Merge pull request #3248 from googlefonts/connected_components
[repacker] Keep connected subgraphs in the same space.
2021-10-23 13:18:22 -07:00
Qunxin Liu f55d834736 [subset] Move struct DeltaSetIndexMap into hb-ot-var-common.hh
Also fix naming issues in review comments
2021-10-23 11:22:39 -07:00
Qunxin Liu 8c583db9b5 [subset] COLRv1: update subset() method for new strutc ClipList and VarIdxMap
Also fix issues in struct PaintTransform definition
2021-10-23 11:22:39 -07:00
Qunxin Liu e51c7f8e79 [subset] COLRv1: add ClipList/ClipRecord/ClipBox struct definition 2021-10-23 11:22:39 -07:00
Qunxin Liu 2e5636eeaf [subset] add DeltasetIndexMap struct definition 2021-10-23 11:22:39 -07:00
Qunxin Liu d2e986fead [subset] update COLRv1 table struct definitions 2021-10-23 11:22:39 -07:00
Khaled Hosny 792ca307b0 [meson] Add graphite2 option and deprecate graphite
Fixes https://github.com/harfbuzz/harfbuzz/issues/3241

Should be better handled when we can use https://github.com/mesonbuild/meson/pull/9184
2021-10-23 10:59:02 -07:00
Behdad Esfahbod c6557747ef [style] Use head->macStyle.isExtended in style fallback
https://github.com/harfbuzz/harfbuzz/issues/3263
2021-10-21 09:56:47 -06:00
Behdad Esfahbod f3f848b506 [head] Add is_expanded() internally
Fixes https://github.com/harfbuzz/harfbuzz/issues/3263
2021-10-21 09:54:02 -06:00
Garret Rieger d17155f5d2 [repacker] use possibly updated root idx after isolate_subgraph.
isolate_subgraph can change the root indices in some cases. So operations after the isolation need to use the roots from the output of isolate_subgraph.
2021-10-13 14:40:00 -07:00
Behdad Esfahbod a7a3608553 [docs] Rename overflow_resolution to repacker 2021-10-12 16:11:25 -07:00
Behdad Esfahbod 9bd7ba5019 Err on -Wbitwise-instead-of-logical
Part of https://github.com/harfbuzz/harfbuzz/pull/3256
2021-10-12 16:10:31 -07:00
Garret Rieger 6bc64317ca Add a writeup of the overflow resolution algorithm in harfbuzz. 2021-10-12 17:10:07 -06:00
Nico Weber 96299d70ed Fix Wbitwise-instead-of-logical warnings
`a || b` only evaluates b if a is false. `a | b` always evaluates
both a and b. If a and b are of type bool, || is usually what you
want, so clang now warns on `|` where both arguments are of type bool.

This warning fires twice in harfbuzz. In both cases, `|` is used
intentionally, with a comment explaining this.

Slightly reorder the code a bit to make the compiler happy, and to
make it obvious even without a comment that both calls should be evaluated.

No intended behavior change.
2021-10-12 08:56:54 -06:00
Qunxin Liu 36ed56b6e8 [subset] code cleanup
- rename copy() method if it takes extra parameter
- get rid of same code blocks
2021-10-09 13:37:20 -06:00
David Corbett 3e635cf5e2 [USE] Categorize characters that only have AJT 2021-10-09 07:53:48 -06:00
David Corbett ae193cd182 [USE] Insert dotted circles before lone viramas 2021-10-09 07:50:09 -06:00
David Corbett 641296b5eb [USE] Categorize U+11046 BRAHMI VIRAMA as HALANT 2021-10-09 07:50:09 -06:00
David Corbett bb50aae9b4 [USE] Document customizations of USE categories 2021-10-08 13:25:46 -04:00
David Corbett 7287125c58 [USE] Merge the categories S and O 2021-10-08 13:14:33 -04:00
David Corbett 8eaee2f887 [USE] Only skip default ignorables within CCSes 2021-10-08 10:15:08 -06:00
David Corbett 4645c3b47c Update comments for U+180F FVS4 2021-10-07 08:52:02 -04:00
Garret Rieger 5b882c420a [repacker] performance optimizations for topological sorting.
- Presize the output sorted graph and write it once in the correct order to avoid needing to reverse.
- Swap the old/new graph vectors instead of copying.
- Use a boolean vector for tracking visited instead of a set.
2021-10-06 11:43:47 -07:00
Garret Rieger ff7a86e9b0 [repacker] remove clone buffer, they are unnessecary.
When nodes are duplicated it's fine to just reuse head, tail from the node being cloned since we don't modify the contents.
2021-10-06 10:51:45 -07:00
Garret Rieger 8cae8b653d [repacker] add missing fini for parents vector. 2021-10-05 14:03:02 -07:00
Garret Rieger 7f0ede4f04 [repacker] refactor resolve overflow tests to use a helper. 2021-10-05 13:10:01 -07:00
Garret Rieger 7883b7ed95 [repacker] Add additional splitting spaces test.
Fix issues it uncovered.
2021-10-05 12:46:59 -07:00
Garret Rieger 6265663de4 [repacker] add test for splitting spaces. 2021-10-05 11:30:04 -07:00
Garret Rieger d97bd4268a [repacker] when assigning spaces use post isolation node indices.
isolate_subgraph can result in some of the roots being duplicated and moved to new indices, so do subgraph isolation before assign roots to spaces.
2021-10-05 10:53:05 -07:00
Behdad Esfahbod ccfc048153 [indic] Apply 'calt' and 'clig' across syllable boundaries
Fixes https://github.com/harfbuzz/harfbuzz/issues/3244
2021-10-05 07:00:50 -06:00
Behdad Esfahbod d58f1685ce [ot-shape] Tweak table order some more; apply GPOS with morx
During 5bc05ba155 accidentally GPOS was disabled when morx was
enabled. Fix that.

Fixes https://github.com/harfbuzz/harfbuzz/issues/2757#issuecomment-933531978
2021-10-04 08:40:24 -06:00
David Corbett f8ebb8a657 [USE] Update the data files
This uses the data files from
<c355d04194/USE>.
2021-10-04 08:14:20 -06:00
David Corbett 564afc425a [USE] Remove overrides for hieroglyphic categories 2021-10-04 08:14:20 -06:00
David Corbett 8c65442069 [Unicode 14] Handle U+180F FVS4 2021-10-04 08:14:20 -06:00
Garret Rieger 375a6c8f81 [repacker] add the ability to move subgraphs from a shared space into their own space.
Used to resolve overflows during manual resolution.
2021-09-29 18:14:57 -07:00
Garret Rieger 0dccbf368f [repacker] Handle the case where a subgraph root has an incoming 32 and 16 bit edge.
In this case the entire subgraph from that root will be duplicated.
2021-09-29 14:28:27 -07:00
Qunxin Liu 794b00db4b [subset] fuzzer fix: https://oss-fuzz.com/testcase-detail/6616166961905664 2021-09-29 10:29:06 -06:00
Garret Rieger 816c5302a7 [repacker] restrict 32 bit subgraph connected component search to only nodes reachable via directed links. 2021-09-28 16:04:27 -07:00
Garret Rieger 67eb222b8e [repacker] when assigning each connected subgraph a space, also isolate it.
This will break any links coming from space 0 (ie. the 16 bit offset only space).
2021-09-28 13:54:54 -07:00
Garret Rieger 307acf7fb0 [repacker] add space assignment based on connected components.
Assign each connected component that is underneath one or more 32 bit offsets into a unique space. This ensures that 32 bit subgraphs which are connected are packed into the same space.
2021-09-28 12:08:18 -07:00
Garret Rieger c77bdf1dcf [repacker] begin storing each nodes parents.
Will be used for connected component search.
2021-09-27 14:42:54 -07:00
Garret Rieger a52c6df38a [subset] Fix bug in composite operation counting.
Adding the result of add_gid_and_children to operation count over counts the number of operations.
2021-09-27 14:18:36 -06:00
Garret Rieger efda2f14e1 [repacker] fix bug in subgraph isolation.
Prior to this fix id remapping at the end of the isolation operation was fed the old subgraph instead of the new one. Which results in object indices being remapped for the nodes outside of the new subgraph. Adds a test which detects this problem.
2021-09-24 17:53:08 -06:00
Behdad Esfahbod 6f19094398 [getn-hb-version.py] Open old output in UTF-8 mode as well
Fixes https://github.com/harfbuzz/harfbuzz/issues/3227
2021-09-23 08:39:29 -06:00
Garret Rieger 9247d24d7f [repacker] s/0/HB_TAG_NONE 2021-09-22 18:18:50 -06:00
Garret Rieger fe155de989 [repacker] handle a couple of duplication edge cases.
- Detect cases where there are multiple links from a parent to a child. Don't duplicate that child if those are the only remaining links to the child.
- Correctly handle isolating a subgraph where the root idx has multiple incoming links.
2021-09-22 18:18:50 -06:00
Garret Rieger c19ec97da7 [repacker] reduce the bits used by order by 2 to give more bits to distance. 2021-09-22 18:18:50 -06:00
Garret Rieger d0daa7a59b [repacker] add a couple more complex isolation tests. 2021-09-22 18:18:50 -06:00
Garret Rieger 62c502cd9d [repacker] correctly update incoming_edges in duplicate. 2021-09-22 18:18:50 -06:00
Garret Rieger a57ef8df7e [repacker] default space to 0.
Since vector push() init's new objects to all zeros.
2021-09-22 18:18:50 -06:00
Garret Rieger 58facaade1 [repacker] put each 32 bit subgraph into it's own packing space.
Each subgraph pointed to by a 32 bit offset should be packed into it's own space. This adds a space property to vertices which affects the distance calculation. This effectively places the distances for all of the nodes of a 32 bit subgraph into a distinct range. Thus all of the nodes of the subgraph will be packed together.
2021-09-22 18:18:50 -06:00
Garret Rieger 543a3f9733 [repacker] Add repacker test for subgraph isolation. 2021-09-22 18:18:50 -06:00
Garret Rieger 7147f169d6 [repacker] recursively duplicate nodes during isolation.
If a node is duplicated during isolation then any children it has will have incoming links from outside the subgraph (from the duplicated node and the original node), so they must be duplicated too.
2021-09-22 18:18:50 -06:00
Garret Rieger 41bbf2812e [repacker] do extension subtable isolation before starting resolution attempts. 2021-09-22 18:18:50 -06:00
Garret Rieger 8d8b7458a4 [repacker] extract overflows processing into its own method. 2021-09-22 18:18:50 -06:00
Garret Rieger b14b3f13ba [repacker] begin implementing the ability to isolate extension subtables.
Adds isolate_subgraph operation to the repacker. This severs any links from outside a subgraph by duplicating the affected vertices. This will be used to isolate the subgraphs of a extension subtable from the rest of object graph. Thus allowing the extension subtable to be packed far away from the rest of the objects.
2021-09-22 18:18:50 -06:00
Garret Rieger 02c4a516db Add a debug message when offset overflow resolution fails. 2021-09-22 18:18:50 -06:00
Ben Wagner cb2d71c648 [mutex] Add hb_mutex_t std::mutex implementation
Instead of failing...
2021-09-22 18:43:58 -04:00
Behdad Esfahbod 67b3962fa5 [atomic] Cannot fail anymore 2021-09-22 18:43:58 -04:00
Qunxin Liu ca7b9daef0 [subset] subset MATH table 2021-09-22 18:08:30 -04:00
Garret Rieger c2cc566c9d [subset] Fix subset_offset_array adding unused space to serializer.
ArrayOf.serialize_append allocates space for the new item, but ArrayOf.pop() does not recover the allocated space. So in the case where the revert path was entered the extra space added by serialize_append gets left in the serialization buffer. This moves the snapshot to before ArrayOf.serialize_append is called so that revert cleans up the buffer extend.
2021-09-22 16:07:18 -06:00
Qunxin Liu 8c5c81746d [subset] fix find_duplicate_features
We should check each feature against all other features with the same
tag for duplicates.
2021-09-22 15:35:38 -06:00
Qunxin Liu 1afc3874e0 [subset] add closure_glyphs () method for MATH table 2021-09-22 12:06:59 -04:00
Behdad Esfahbod 3b2929e8a9 [set-digest] Use using instead of typedef 2021-09-21 12:21:17 -06:00
Simon Cozens 5694561f75 Add support for Pwo Karen / Ason Chin medial la
https://github.com/harfbuzz/harfbuzz/pull/3217
2021-09-20 17:01:40 -04:00
Behdad Esfahbod bff5685432 [khmer] Towards separating Khmer from Indic table 2021-09-20 13:25:58 -06:00
Behdad Esfahbod 5d957ffe74 [myanmar] Towards separating Myanmar from Indic table 2021-09-20 11:33:01 -06:00
Khaled Hosny 6db4b56e05 Make the file UTF-8 again
GitHub web interface failed to show the encoding change.
2021-09-20 19:18:39 +02:00
Behdad Esfahbod 14a2df7bc2 Add stub HBUINT15 2021-09-19 23:06:09 -04:00
Behdad Esfahbod c852b86841 Rename HBGlyphID to HBGlyphID16 2021-09-19 16:30:12 -04:00
Garret Rieger 74f96d9d4b [repacker] fix heap use after free in repacker.
Don't store a reference to the link in overflow records as the link object may be freed if the sorted graph vector is resized.
2021-09-19 09:06:17 -06:00
ActuallyaDeviloper 7143c8333b Make the code able to compile with MSVC++ from Visual Studio 2015 (Version 14.0.25431.01, Update 3) sucessfully again. 2021-09-19 09:05:52 -06:00
Khaled Hosny b36f1510ec [doc] Add missing version tags 2021-09-18 23:09:07 +02:00
Khaled Hosny 9c387e20d6
3.0.0 2021-09-17 21:32:30 +02:00
Behdad Esfahbod e0d5fe740a Centralize math include
https://github.com/harfbuzz/harfbuzz/pull/3212
2021-09-17 06:41:07 -06:00
Khaled Hosny a59e7ec993 [meson] Add ragel_subproject option
Add an option to build fallback ragel subproject when no suitable ragel
version is found, and make it off by default since most builder don’t
need ragel at all.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3208 (hopefully)
2021-09-17 06:12:14 -06:00
Garret Rieger d700646c33 [subset] In preperation for 3.0.0 release remove legacy subsetting api methods. 2021-09-16 15:31:29 -06:00
Behdad Esfahbod ae14537854 [style] Change tag type to hb_style_tag_t
https://github.com/harfbuzz/harfbuzz/pull/3201#discussion_r708914354
2021-09-15 07:46:33 -04:00
David Corbett 470686e817 [USE] Send Khitan Small Script and Yezidi to USE 2021-09-14 19:42:29 -06:00
Khaled Hosny 22cbd038d3 [meson] Add ragel subproject
If ragel 6.10 is not found, build it from source.

Seems to work, except that ragel uses exceptions and we configure
HarfBuzz build to not use exceptions, and I can’t find away to enable
exceptions only for the ragel subproject. I had to remove cpp_eh=none
from default options and try to disable exceptions in MSVC manually
(other compilers are already handled).
2021-09-14 18:46:33 -06:00
Khaled Hosny 5898a9618c [ragel] Regenerate state machine files with 6.10 2021-09-14 18:46:33 -06:00
Khaled Hosny 7e9ac8fea2 [meson] Require ragel 6.10
Ragel 7 is also not stable from upstream's point of view.

This uses “version” argument find_program(), which was introduced in
meson 0.52.0, so I raised the minimum required meson version
accordingly.
2021-09-14 18:46:33 -06:00
David Corbett f1493357f7 [Unicode 14] Update the Arabic joining script list 2021-09-14 18:46:50 -04:00
David Corbett 2c3e4b279b [Unicode 14] Send all the new scripts to USE 2021-09-14 18:31:42 -04:00
David Corbett 20736d9bb3 [Unicode 14] Update the USE table 2021-09-14 18:25:38 -04:00
David Corbett 35ac0de42b [Unicode 14] Update the emoji table 2021-09-14 18:14:20 -04:00
David Corbett ec5688f50f [Unicode 14] Update the vowel constraint table 2021-09-14 18:09:05 -04:00
David Corbett 11d5334d8e [Unicode 14] Update the Indic table 2021-09-14 18:07:38 -04:00
David Corbett 18a46eeafb [Unicode 14] Update the Arabic table 2021-09-14 18:07:38 -04:00
David Corbett 7b05eec054 [Unicode 14] Update the script direction list 2021-09-14 18:07:38 -04:00
David Corbett 26e1498e76 [Unicode 14] Update the UCD table 2021-09-14 18:07:29 -04:00
David Corbett 67f1aa4d21 [Unicode 14] Add new `hb_script_t` values 2021-09-14 18:05:08 -04:00
Behdad Esfahbod bda3238c89 Add fallback atexit implementation using template descrutors
Fixes https://github.com/harfbuzz/harfbuzz/issues/3197
2021-09-14 08:12:48 -04:00
Behdad Esfahbod 9c27045158 [style] Fix another float conversion warning 2021-09-14 07:50:35 -04:00
Behdad Esfahbod 5a1a6f1fe3 [ot-shape] Enabled two more features: 'Harf' and 'Buzz'
Considered 'required', as opposed to existing 'HARF' and 'BUZZ',
consider them discretionary.

See discussion in https://github.com/harfbuzz/harfbuzz/issues/3200
2021-09-14 07:14:56 -04:00
Behdad Esfahbod ed1163208d Call atexit() via hb_atexit()
Part of https://github.com/harfbuzz/harfbuzz/issues/3197
2021-09-14 07:11:46 -04:00
Behdad Esfahbod ad4df20dd6 [style] Fix float conversion warning 2021-09-14 07:11:46 -04:00
Behdad Esfahbod c5cc23a9b5 [style] Change private slant tag
https://github.com/harfbuzz/harfbuzz/issues/3200#issuecomment-918352162
2021-09-13 12:14:06 -04:00
Khaled Hosny d748586a18 [style] Try harder to fix MSVC build
https://docs.microsoft.com/en-us/cpp/c-runtime-library/math-constants?view=msvc-160
2021-09-13 10:10:10 -06:00
Khaled Hosny e275f0d7ed [style] Try to fix MSVC build 2021-09-13 10:10:10 -06:00
Khaled Hosny eb4075a1ed [style] Fix documentation
Message documentation a bit to get it working.
2021-09-13 10:10:10 -06:00
Khaled Hosny 4d9b7de0b6 [style] Prepare for release 2021-09-13 10:10:10 -06:00
Khaled Hosny 34ff2d3ea6 Fix build with -Dexperimental_api=true
../src/hb-style.cc:102:32: error: no matching function for call to 'hb_style_get_value'
    return _hb_angle_to_ratio (hb_style_get_value (HB_STYLE_TAG_SLANT_ANGLE));
                               ^~~~~~~~~~~~~~~~~~
../src/hb-style.cc:99:1: note: candidate function not viable: requires 2 arguments, but 1 was provided
hb_style_get_value (hb_font_t *font, hb_tag_t tag)
^

and

../src/hb-style.cc:80:1: error: unused function '_hb_ratio_to_angle' [-Werror,-Wunused-function]
_hb_ratio_to_angle (float r)
^
2021-09-11 00:12:03 +02:00
Behdad Esfahbod 39c20d2b9e [style] Add HB_STYLE_TAG_SLANT_RATIO 2021-09-10 04:59:16 -06:00
Behdad Esfahbod 201cbe3c66 [style] Rename HB_STYLE_TAG_SLANT to HB_STYLE_TAG_SLANT_ANGLE 2021-09-10 04:59:16 -06:00
Behdad Esfahbod a23ce28977 [style] Fall back to GPOS 'size' feature for optical size in style API 2021-09-10 04:59:16 -06:00
Qunxin Liu 37379f8f7d [subset] fox for (Chain)ContextFormat3: subset lookupRecord
skip copying a lookupRecord if lookup referenced in the lookupRecord is
not retained after subset
2021-09-08 13:55:21 -06:00
Khaled Hosny 9b7af950b3 [docs] Fix subset documentation
List the missing new APIs and unlist all the to be deleted legacy APIs.
2021-09-07 15:05:42 +02:00
Khaled Hosny 505df5abf8 2.9.1 2021-09-07 13:46:43 +02:00
Khaled Hosny 195c05df99 Revert "[ot-shape-normalize] Move buffer out of hb_ot_shape_normalize_context_t"
This reverts commit 8cdbea5580.

For some reason this is causing several tests to crash locally for me
(on macOS), see:
8cdbea5580 (commitcomment-55898088)
2021-09-04 03:41:19 +02:00
David Corbett f4559d2435 Update hb-ot-tag-table.hh 2021-09-03 18:40:47 +02:00
Garret Rieger 2bd911b8b4 [subset] handle cmap4 overflows.
If a cmap4 subtable overflows during serialization drop it and the corresponding EncodingRecord. Don't drop the corresponding cmap12 table if it would have otherwise been removed.
2021-09-02 14:43:17 -06:00
Behdad Esfahbod bf81bbfb35 Revert "[arabic] Do not re-compose Unicode sequences"
This reverts commit ff34c240b0.

https://github.com/harfbuzz/harfbuzz/issues/3179#issuecomment-911242833
2021-09-02 00:16:22 -06:00
Behdad Esfahbod ff34c240b0 [arabic] Do not re-compose Unicode sequences
Fixes https://github.com/harfbuzz/harfbuzz/issues/3179
2021-09-01 23:55:25 -06:00
Alba Mendez 5fadf4c85e Small docs improvement
Mention that the returned strings are always nul terminated for convenience.
2021-09-01 10:04:04 -06:00
Behdad Esfahbod 5c4c173b06
Merge pull request #3146 from googlefonts/set_api
[subset] proposed update to subset set apis.
2021-08-30 16:44:28 -06:00
Garret Rieger de85636581 [subset] s/REPLACE/REPLACEME/ 2021-08-30 14:36:05 -07:00
Garret Rieger 3844e58e14 [subset] remove helper functions for accessing subset input sets. 2021-08-30 11:16:51 -07:00
Behdad Esfahbod 41b9f2abcd [set] Add TODO item 2021-08-29 10:47:20 -06:00
Behdad Esfahbod 93ac700da6 [set] Add copy-constructor/assignment again 2021-08-29 10:47:20 -06:00
Garret Rieger b9a176e268
[subset] speedup cmap4 subsetting for large codepoint counts. (#3178)
glyphIdArray generation implementation was O(n^2). Refactored to use a hashmap to reduce complexity. After the change subset time for a 22k codepoint subset went from 7s to 0.7s.
2021-08-29 10:33:12 -06:00
Garret Rieger 57d6bf8251 [subset] in sets union correctly size the pointer array. 2021-08-27 10:59:28 -07:00
Garret Rieger 102666dab7 [subset] add test for hb_subset_input_set (...). 2021-08-27 10:36:42 -07:00
Garret Rieger 7194c2a2a3 [subset] use anonymous union to hold the input sets instead of a map. 2021-08-27 10:36:42 -07:00
Garret Rieger 05204d7586 [subset] implement hb_subset_input_set (...).
Switch to storing the sets keyed by enum internally.
2021-08-27 10:36:36 -07:00
Garret Rieger 50193262f0 [subset] reorder set enums. 2021-08-27 10:34:59 -07:00
Garret Rieger 3282f540a9 [subset] restore legacy set api methods. 2021-08-27 10:34:58 -07:00
Garret Rieger 1457c1f080 [subset] set enum name changes. 2021-08-27 10:34:58 -07:00
Garret Rieger 1b5e159301 [subset] Remove HB_SUBSET_SETS_COUNT and flags comment. 2021-08-27 10:34:58 -07:00
Garret Rieger 4c389fd9e5 [subset] add unicode and glyph set enums. 2021-08-27 10:34:58 -07:00
Garret Rieger e3e1ae8766 [subset] proposed update to subset set apis. 2021-08-27 10:34:58 -07:00
Garret Rieger 9db494f517
[subset] Update remaining subset input sets to use inversion for all. (#3172)
* [subset] Update remaining subset input sets to use inversion for all.

* [subset] Update flag help for remaining sets to mention -=.
2021-08-26 10:51:38 -06:00
Behdad Esfahbod 99356ea5f0
Merge pull request #3150 from harfbuzz/item-context-tests
[test] Add tests for item context
2021-08-25 17:19:06 -06:00
Behdad Esfahbod 1620698bd5 [subset-input] Minor format 2021-08-25 16:26:58 -06:00
Garret Rieger cd07070e41 [subset] Move plan unicodes and gids population to end of _populate_unicodes... 2021-08-25 14:42:00 -07:00
Behdad Esfahbod 4b5a81f13c [buffer] Fix hb_buffer_append() pre/post-context logic
Part of https://github.com/harfbuzz/harfbuzz/pull/3150
2021-08-25 15:20:54 -06:00
Garret Rieger 8f4f47df7c [subset] use inverted set for all unicodes.
Modify the code that handles input->unicodes to be safe with possibly inverted sets. Also adds --unicodes-= and --unicodes+= flags.
2021-08-25 13:34:05 -07:00
Behdad Esfahbod e9e6d66cd6 [subset] Minor internal parameter rename 2021-08-24 23:22:49 -06:00
Garret Rieger 59deb754b3 [subset] rename _collect_subset_layout to _collect_layout_indices.
Better describes what the function does.
2021-08-24 18:17:07 -06:00
Garret Rieger f2441a4b65 [subset] Remove retain all layout features flag.
Instead use inverted sets to handle requesting all features. Modifies feature collection in subset plan to intersect the set of requested features against the features in the font. This prevents iterating a fully filled feature tag set.
2021-08-24 18:17:07 -06:00
Behdad Esfahbod c90678cbc5 [set] One more try to fix things
That I don't let a "make check -j10" run finish before pushing things
out means either that we need to speed up our build / test process,
or I need a faster laptop...
2021-08-24 11:11:12 -06:00
Behdad Esfahbod 357976963e [set] One more try at fixing clear() on empty set 2021-08-24 10:59:31 -06:00
Garret Rieger fb07f8f876 During subset input creation check for set alloc failures and fail if encountered. 2021-08-24 10:59:14 -06:00
Behdad Esfahbod b5177d2147 [set] Fix seam exposed by previous commit 2021-08-24 10:43:37 -06:00
Behdad Esfahbod f0de40dd61 Whitespace 2021-08-24 10:35:33 -06:00
Behdad Esfahbod 8cdbea5580 [ot-shape-normalize] Move buffer out of hb_ot_shape_normalize_context_t 2021-08-24 10:35:33 -06:00
Behdad Esfahbod 10da9fd20d [ot-map] Whitespace 2021-08-24 10:35:33 -06:00
Behdad Esfahbod d3e09bf465 [set] Make all operators null-safe again
Changed my mind.

Also for hb_map_clear().

Part of https://github.com/harfbuzz/harfbuzz/pull/3162
2021-08-24 10:31:49 -06:00
Khaled Hosny 430224b1a0 [buffer] Handle pre/post-context in buffer_append
Fixes https://github.com/harfbuzz/harfbuzz/issues/1843
2021-08-24 02:11:17 +02:00
Behdad Esfahbod 33c82c7dad [ot-shape] Fix unused-var error when building without AAT
Fixes https://github.com/harfbuzz/harfbuzzjs/issues/45
2021-08-22 22:31:39 -06:00
Qunxin Liu 34e0b28fae [subset] make glyph-names option match fonttools behavior
Don't encode psNames that are contained in standard glyph names set
2021-08-20 01:30:23 -06:00
Behdad Esfahbod 829b0f3353
Merge pull request #3154 from harfbuzz/set-invert
Resurrect hb_set_invert()
2021-08-20 01:28:15 -06:00
Behdad Esfahbod 84c2a30214 [bit-set-invertible] Second try fixing previous() 2021-08-19 16:33:48 -06:00
Behdad Esfahbod 8f88747a5e [bit-set-invertible] Fix previous() iteration 2021-08-19 16:31:01 -06:00
Behdad Esfahbod 1d832693e1 [set] Protect against immutible null set with invertible addition 2021-08-19 16:02:30 -06:00
Behdad Esfahbod dc800ffd6c [bit-set] Remove TODO items we don't intend to finish 2021-08-19 15:41:27 -06:00
Behdad Esfahbod 92908c122b [bit-set-invertible] Remove extra check
We don't expect immutable / null set in this code.
2021-08-19 15:28:26 -06:00
Behdad Esfahbod 1babe80ed2 [bit-set-invertible] Fix last remaining corner-case 2021-08-19 15:18:32 -06:00
Behdad Esfahbod e8911d137c [bit-set-invertible] Implement a couple other missing corner cases
Also, in bit-set, don't compute population in is_equal/is_subset()
if we don't have it computed already.
2021-08-19 15:00:33 -06:00
Behdad Esfahbod 2579dc648f [bit-set-invertible] Move code around 2021-08-19 14:48:27 -06:00
Behdad Esfahbod 2dfc104236 [bit-set-invertible] Implement is_empty() for inverted case as well 2021-08-19 14:47:33 -06:00
Behdad Esfahbod ec4812a7d4 [bit-page] Remove unused inverted code 2021-08-19 13:32:44 -06:00
Behdad Esfahbod 87885e6f02 [bit-set-invertible] Fix next/previous() logic 2021-08-19 13:26:25 -06:00
Behdad Esfahbod ee4e331a6e [bit-set] Remove unused get_min(inverted) 2021-08-19 13:24:15 -06:00
Behdad Esfahbod eec1a25e71 [bit-set-invertible] Rewrite get_min/max() in terms of next/previous() 2021-08-19 13:24:00 -06:00
Behdad Esfahbod f09d5ed0f5 [algs] Remove hb_bitwise_non() 2021-08-19 13:06:10 -06:00
Behdad Esfahbod f4fd7baf7e [bit-set-invertible] Fix subtract() logic 2021-08-19 13:05:12 -06:00
Behdad Esfahbod f317d8e426 [bit-set-invertible] Fix intersect() logic 2021-08-19 13:01:07 -06:00
Behdad Esfahbod b21038d91d [bit-set-invertible] Rewrite next/previous_range() in terms of s.next/previous() 2021-08-19 11:24:17 -06:00
Behdad Esfahbod eb98bc1e32 [bit-set-invertible] Rewrite next/previous() using s.next/previous_range() 2021-08-19 11:19:24 -06:00
Behdad Esfahbod 248ad3bce5 [bit-set-invertible] Implement next/previous
This makes invertible set functionality complete.
2021-08-19 10:17:51 -06:00
Behdad Esfahbod c27f5b1288 [bit-set-invertible] Plug in next_range()/previous_range() 2021-08-19 10:01:24 -06:00
Behdad Esfahbod f6aa37159b [bit-set-invertible] Fix process logic for inverted
[# On branch set-invert
2021-08-19 01:12:25 -06:00
Behdad Esfahbod 060de189ec [bit-page] Fix sanitizer error
This essentially reverts 9449cfeefd

Problem was dereferencing pointer at end of array...
2021-08-19 00:58:34 -06:00
Behdad Esfahbod b119b48079 [bit-set-invertible] Add unlikely() around inverted checks 2021-08-19 00:51:24 -06:00
Behdad Esfahbod b94f24ec79 [bit-set-invertible] Implement set algebra 2021-08-19 00:48:00 -06:00
Behdad Esfahbod 6afefe1dc3 [algs] Remove unnecessary struct tag names 2021-08-19 00:27:03 -06:00
Behdad Esfahbod 8aa92ff8f0 [bit-set-invertible] Implement get_min/max 2021-08-18 23:01:06 -06:00
Behdad Esfahbod 18f50275ed [bit-set] Restructure get_min/max() in prep for adding inverted 2021-08-18 22:08:06 -06:00
Behdad Esfahbod 669b97d949 [bit-set-invertible] Implement iterator 2021-08-18 21:39:04 -06:00
Behdad Esfahbod c66894d7c9 [bit-set-invertible] Write a subset branch as dagger 2021-08-18 21:24:29 -06:00
Behdad Esfahbod c39d2f7a76 [bit-set-invertible] Implement add_array / add_sorted_array / intersects 2021-08-18 21:20:54 -06:00
Behdad Esfahbod 0efa614c04 [bit-set] Add del_array/del_sorted_array() 2021-08-18 21:18:32 -06:00
Behdad Esfahbod 48ad9eef1e [bit-set] Merge page_for_insert() into page_for() 2021-08-18 21:05:21 -06:00
Garret Rieger 280366ba6a Add TODO to update NN offsets to allow nulls. 2021-08-18 16:52:45 -06:00
Garret Rieger dc31920bbe Don't serialize null offsets in CPAL.
Fixes https://oss-fuzz.com/testcase-detail/5443213648330752
2021-08-18 16:52:45 -06:00
Khaled Hosny 80ff72f39d [doc] Misc fixes 2021-08-18 13:16:51 +02:00
Khaled Hosny 9aa6f8a93f 2.9.0 2021-08-18 09:32:04 +02:00
Behdad Esfahbod f0c3804fa2 [set] Add hb_bit_set_invertible_t and resurrect hb_set_invert()
Implementation is NOT complete yet.
2021-08-17 19:53:43 -06:00
Behdad Esfahbod b5cdbdc030 [set] Turn hb_set_t into instance of template taking implementation t 2021-08-17 10:53:08 -06:00
Behdad Esfahbod fad452bffb [set] Move main functionality into hb_bit_set_t
To add inversion on top in hb_invertible_set_t and use that as hb_set_t.
2021-08-17 10:47:18 -06:00
Behdad Esfahbod 9cc4da962f [object] Remove hb_object_is_inert() 2021-08-16 20:17:53 -06:00
Behdad Esfahbod 2d5ef05d67 Use !g_object_is_valid() instead of g_object_is_inert() 2021-08-16 20:13:58 -06:00
Behdad Esfahbod f6d6eff6a2 [object] Remove unused HB_REFERENCE_COUNT_INIT 2021-08-16 19:41:44 -06:00
Behdad Esfahbod f245dc4db8 [set] Whitespace 2021-08-15 18:59:58 -06:00
Behdad Esfahbod 9b390f8c40 [set] Move page_t into hb-bit-page.hh 2021-08-15 18:59:58 -06:00
Behdad Esfahbod 0c3e02ee2d [set] Add "inverted" to page_t::is_empty() 2021-08-15 18:59:58 -06:00
Behdad Esfahbod 9bd64fa077 [set] Add "inverted" to page_t::next/prev() 2021-08-15 18:59:58 -06:00
Behdad Esfahbod c88e7ec935 [set] Add page_t::elt_maybe_invert() 2021-08-15 18:59:58 -06:00
Behdad Esfahbod 9449cfeefd [set] Simplify page_t::next/prev() 2021-08-15 18:59:58 -06:00
Behdad Esfahbod 4394ee1f1d [set] Add inverted to page_t::get_min/max() 2021-08-15 18:59:58 -06:00
Behdad Esfahbod 0dcd9b15d9 [set] Add page_t::set_range() 2021-08-15 18:59:58 -06:00
Behdad Esfahbod cb273fd17c [set] Add page_t::set() 2021-08-15 18:59:58 -06:00
Behdad Esfahbod 32bbf53d9c [set] Minor rewrite one cmp() in term of other 2021-08-15 18:59:58 -06:00
Garret Rieger cb05c363d7 [subset] add some basic tests for the legacy subset methods. 2021-08-14 10:37:02 -06:00
Garret Rieger d18aad7ec5 [subset] restore old subsetting api methods.
These will be left in place until the 3.0.0 release.
2021-08-14 10:37:02 -06:00
Garret Rieger c0f3af91b8 [subset] speed up add_gid_and_children and adjust op limit.
Fix for fuzzer timeout: https://oss-fuzz.com/testcase-detail/5001604901240832.

- Operation limit is per glyph, so 100,000 should still be far more than needed.
- Switches from for(...) to while(...) loop for iteration. for(...) calls it.end() which in this case triggers a complete iteration.
- Cache CompositeGlyph size in the iterator to avoid needing to recalculate it.
2021-08-12 14:50:42 -06:00
Garret Rieger c08f1b8903 [map] fix incorrect population count in hash map.
If the same key was set twice the population was being incorrectly incremented.
2021-08-10 14:00:55 -06:00
Garret Rieger e39c3bde7b [subset] fix bug in parsing glyf flags.
the bytes of the flag stream were being treated as signed integers instead of unsigned as specified in the spec.
2021-08-10 12:57:07 -06:00
Ben Wagner f5ba1fabce Fix documentation of hb_subset_flags_t defaults
HB_SUBSET_FLAGS_DEFAULT is 0, and hb_subset_input_create_or_fail
initializes its flags to HB_SUBSET_FLAGS_DEFAULT, so currently all flags
are set to false by default. It has been decided that future flags will
also be false by default for simplicity (using NO_ in the name if
needed). Correct and simplify the documentation for hb_subset_flags_t to
reflect this.
2021-08-09 09:05:24 -06:00
Garret Rieger 8c0c217b5a [subset] fail reference blob in face builder if allocation for table sorting fails.
Fixes https://oss-fuzz.com/testcase-detail/5041767803125760
2021-08-06 15:54:41 -06:00
Garret Rieger e5bfd49ae5 [subset] don't allow table adds for tag == -1. 2021-08-05 17:49:37 -06:00
Garret Rieger 222b74f08f [subset] don't leak memory for duplicate tables. 2021-08-05 17:49:37 -06:00
Behdad Esfahbod f7a9c3ea93 [open-file] Use hb_is_source_of instead of hb_is_iterator 2021-08-05 13:05:07 -06:00
Behdad Esfahbod fa90cb8a31 Whitespace again 2021-08-05 12:31:06 -06:00
Behdad Esfahbod a110a47eb5 Whitespace 2021-08-05 12:28:39 -06:00
Behdad Esfahbod 2cb8c928d7 [face] Let hashmap derive invalid key/value types
Works now with the previous two fixes.
2021-08-05 12:27:22 -06:00
Behdad Esfahbod 95c888e192 [meta] Define hb_int_min for pointer types as nullptr 2021-08-05 12:27:02 -06:00
Behdad Esfahbod 407a112e7b [meta] Make hb_is_signed/hb_is_unsigned work on all types
They were failing if type was non-scalar, eg. pointer.
2021-08-05 12:23:53 -06:00
Behdad Esfahbod baf2166a24 [meta] Use hb_true_type/hb_false_type more 2021-08-05 12:08:47 -06:00
Behdad Esfahbod 74ad5ddcd7 [face] Minor cleaning of previous commit 2021-08-05 11:51:54 -06:00
Garret Rieger c2ee1fdd40 [subset] remove unsed table_entry struct. 2021-08-05 11:47:07 -06:00
Garret Rieger dea0fe5717 [subset] discard extra copies of a table in face builder.
Fixes #2361. Stores tables in the builder in a hashmap so you end up with at most one copy of each table. Table serialization order is now based on tag sort order instead of order of insertion into the builder.
2021-08-05 11:47:07 -06:00
Behdad Esfahbod 368e957887 [ot-shape] Add comment re `vert` feature 2021-08-05 10:41:18 -06:00
Garret Rieger 2c024dc3cb [subset] prune redundant cmap12 subtables.
If the post subset cmap12 table is equivalent to another cmap subtable don't include the 12 table in the final subset. Matches change https://github.com/fonttools/fonttools/pull/2146 from fontTools.
2021-08-04 17:36:24 -06:00
Behdad Esfahbod 09c3b82f5e [buffer] When shifting forward, leave no gap
Trying to see if this fixes the fuzzer issue:
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36236
2021-08-04 11:55:53 -06:00
Behdad Esfahbod a150baf32c [ot-map] Allocate top mask bit as global bit
Avoids undefined-shift of 32 in the following line:

  map->mask = (1u << (next_bit + bits_needed)) - (1u << next_bit)

Fixes https://bugs.chromium.org/p/chromium/issues/detail?id=1219263
2021-08-04 11:53:27 -06:00
Behdad Esfahbod e80c86ffa6 [coretext] Fix formatting 2021-08-04 10:25:06 -06:00
Simon Cozens 66aef2818e Support passing variations to coretext shaper 2021-08-04 10:24:40 -06:00
Behdad Esfahbod 62a535f154 [khmer] Fix comment
Fixes https://github.com/harfbuzz/harfbuzz/issues/3104
2021-08-03 10:11:43 -06:00
Behdad Esfahbod ee7473b8a4 [mutex] Remove unused HB_MUTEX_IMPL_INIT / HB_MUTEX_INIT
https://github.com/harfbuzz/harfbuzz/pull/3100#issuecomment-890089096
2021-07-30 12:55:28 -06:00
Behdad Esfahbod 0e37c07f4c Revert "Construct user_data in hb_object"
This reverts commit a78eb43c79.

See: https://github.com/harfbuzz/harfbuzz/pull/3100#issuecomment-890088227
2021-07-30 12:52:59 -06:00
Behdad Esfahbod 5dc4cd71cc [blob] Minor change in destruction
No semantic change.
2021-07-30 12:37:40 -06:00
Garret Rieger b63ac57174 [subset] bail if collection region indices is in error. 2021-07-29 18:30:37 -07:00
Garret Rieger f9d8e4a976 [subset] switch ..._set_flags to not take a mask. 2021-07-29 18:30:27 -07:00
Garret Rieger 46d4a5e673 [subset] Convert subset plan to use a flags bit set. 2021-07-29 18:02:34 -07:00
Garret Rieger 3d534b146c [subset] convert subset input flags into bit flags.
Store the flags in a bit set. Updates the public api to work with the bit set directly.
2021-07-29 18:02:34 -07:00
Ben Wagner a78eb43c79 Construct user_data in hb_object
hb_object's user_data is created lazily. The previous implementation of
hb_object_set_user_data created space for the user_data but did not
actually construct it. This means that hb_user_data_array_t's lock was
not constructed. If hb_mutex_t is backed by an implementation which
requires that it be constructed (not just zero initialized) then errors
will occur when taking the lock when setting the user data.

Change hb_object_set_user_data to construct the user_data in the created
space and hb_object_fini to call the destructor.
2021-07-29 16:03:56 -06:00
Behdad Esfahbod 30579f5a37 [set] Document & use open-ended del_range() 2021-07-29 11:19:13 -06:00
Behdad Esfahbod 2d54c34680 [subset/VarStore] Fix OOM in fuzzer test
The test in question is the one added in c68a00b92e.
Culprit is that it's allocating lots of memory because of region_indices that
are out-of-range anyway. So, try to filter those out first.
2021-07-29 00:49:36 -06:00
Behdad Esfahbod ff1fe25a5d [VarStore] Rename internal get_scalars() to get_region_scalars() 2021-07-29 00:49:36 -06:00
Khaled Hosny 9a7ff54bb7 [test] Write one sequence per-line
https://github.com/harfbuzz/harfbuzz/pull/3087#issuecomment-888691436
2021-07-28 18:25:51 -06:00
Khaled Hosny ddf87ffb22 [test] Add generated tests for emoji clusters
Fixes https://github.com/harfbuzz/harfbuzz/issues/3017

Uses AdobeBlank2.ttf from:

  https://github.com/adobe-fonts/adobe-blank-2

instead of a dummy empty font so that everything maps to GID 1 and
control code points are kept instead of being dropped because there is
not space glyph (otherwise we’d need to identify control code points
somehow when generating the expectations).
2021-07-28 18:25:51 -06:00
Behdad Esfahbod f0a1892ff9 [serialize] Remove unnecessary pointer indirection 2021-07-28 17:36:22 -06:00
Behdad Esfahbod 1c511ed6f6 [subset] Simplify VarStore serialization 2021-07-28 17:33:26 -06:00
Behdad Esfahbod ad4c692492 [subset] Simplify VarStore serialize 2021-07-28 17:22:14 -06:00
Behdad Esfahbod 25dee60977 [sanitize] Revert some from c68a00b92e
That overflow check was already happening in arrayZ.sanitize().
2021-07-28 13:58:24 -06:00
Behdad Esfahbod 6fe0d7d6e8 [GSUB] If MultipleSubst is applied to a ligature-component, preserve lig-id
Fixes https://github.com/harfbuzz/harfbuzz/issues/3069
2021-07-28 12:06:49 -06:00
Behdad Esfahbod b926fb9bb0 Whitespace 2021-07-28 11:58:10 -06:00
Behdad Esfahbod cc3a7ceea3 Fix macro-in-macro invocation
../src/hb-ot-color-colr-table.hh:980:2: error: embedding a directive within macro arguments has undefined behavior [-Werror,-Wembedded-directive]
\#if COLRV1_ENABLE_SUBSETTING == 1
2021-07-28 11:53:06 -06:00
Behdad Esfahbod 087e2705de Fix signed-ness error in 0ded6a70c8 2021-07-28 11:42:48 -06:00
Garret Rieger f3e031539f Revert "[ci] Bin FontTools version due to recent COLRv1 changes"
This reverts commit 163748b505.
2021-07-28 11:36:34 -06:00
Garret Rieger acbd8b27dc [subset] temporarily disable COLRv1 subsetting.
Currently COLRv1 spec is being changed so the subsetting implementation is out of sync. Disable subsetting by failing sanitization for COLRv1 tables and disable all colrv1 tests.
2021-07-28 11:36:34 -06:00
Behdad Esfahbod 0ded6a70c8 [subset] Fix another fuzzer issue
Addition could overflow on 32bit arch.

Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36636
Fixes https://oss-fuzz.com/testcase-detail/5072358514753536
2021-07-28 11:35:27 -06:00
Garret Rieger 09474d8d7b [subset] Fix fuzzer timeout in add_gid_and_children.
The composite glyph graph isn't check for max operations by sanitize so track an operations count during the graph traversal.
2021-07-27 13:30:06 -06:00
Behdad Esfahbod c68a00b92e [subset] Fix possible overflows in VarRegionList serialize
Fixes https://oss-fuzz.com/testcase-detail/5362189182566400
2021-07-27 13:28:09 -06:00
Behdad Esfahbod 7b8464b655 [serialize] Check for overflow in allocate_size()
If size was > INT_MAX, then the out-of-room check was failing to perform
as intended.

Part of fixing https://oss-fuzz.com/testcase-detail/5362189182566400
2021-07-27 13:26:00 -06:00
Behdad Esfahbod bf2c87bfe6 Add hb_memcpy() that does len=0 check 2021-07-27 13:26:00 -06:00
Khaled Hosny 5f801da945 [hb-ms-features] Move code out of header file 2021-07-27 21:07:32 +02:00
Khaled Hosny 990c15dbe5 [hb-ms-features] Rename types to be less general 2021-07-27 21:07:32 +02:00
Khaled Hosny 69199211b7 [uniscribe/directwrite] Move feature setup to shared file
Fixes https://github.com/harfbuzz/harfbuzz/issues/3070
2021-07-27 21:07:32 +02:00
Garret Rieger fc7f778120
[subset] add a note to hb-subset on what is and isn't supported (#3076) 2021-07-27 11:21:19 -07:00
Khaled Hosny 791a1bf3a4 Don’t disable getenv on Windows
The condition is inverted, regression from
40ec187dec.
2021-07-27 15:22:13 +02:00
Behdad Esfahbod 4762fcb415
Merge pull request #3067 from googlefonts/glyph_names
[subset] support option --glyph-names
2021-07-26 11:48:55 -07:00
Behdad Esfahbod aeec278453
Merge pull request #3068 from harfbuzz/hoi
[variations] Support multiple axes with same tag, aka HOI
2021-07-26 11:31:54 -07:00
Khaled Hosny ec99fdb7e8 [sebset] Use [s|g]et_flag for retain_all_layout_features
Looks like this was missed when adding hb_subset_input_[s|g]et_flag()
2021-07-26 19:32:28 +02:00
Khaled Hosny acc7100a3f [docs] Improve subset documentation 2021-07-26 02:18:23 +02:00
Khaled Hosny 3e2734cf91 [docs] Don’t use GTK-Doc syntax for internal functions
We don’t generate docs for them, reduces the number of warnings.
2021-07-26 02:18:18 +02:00
Qunxin Liu 71b5509c19 [subset] support option --glyph-names 2021-07-23 13:57:39 -07:00
Behdad Esfahbod b235511ed8
Merge pull request #3021 from googlefonts/stable_api
[subset] update hb_subset api with final changes before going stable.
2021-07-23 12:15:15 -07:00
Behdad Esfahbod a9a607d360 [variations] Support multiple axes with same tag, aka HOI
The axes in fvar are in arbitrary order, NOT sorted. Hence have to
lsearch all entries.

Fixes https://github.com/harfbuzz/harfbuzz/issues/1673
Fixes https://github.com/harfbuzz/harfbuzz/issues/2743

Test from https://github.com/ctrlcctrlv/FontForge-Higher-Order-Interpolation
2021-07-23 11:58:58 -07:00
Garret Rieger 1fde80ad28 [subset] update comments referencing hb_subset_input_t parameter. 2021-07-22 16:45:48 -07:00
Garret Rieger c581d11eba [set] in hb_set_set() avoid calling memcpy on nullptr. 2021-07-22 14:04:39 -07:00
Garret Rieger 2b9cb29923 [subset] cleanup no_subset_tables on destruction. 2021-07-22 13:26:03 -07:00
Garret Rieger 89fc399eba [subset] Add hb-subset section documentation. 2021-07-22 13:00:34 -07:00
Garret Rieger 792e2ed61c [subset] convert no get/set prune unicode ranges to enum. 2021-07-22 12:41:48 -07:00
Behdad Esfahbod 0a44feaeda [fvar] Make find_axis_index() return a range, not individual value 2021-07-22 12:18:48 -07:00
Garret Rieger 1b6c1aa684 [subset] add hb-subset api to documentation generator.
Standardize subset_input parameter to be input.
2021-07-22 12:15:45 -07:00
Garret Rieger 8ce9683412 [subset] add documentation for all hb-subset.h methods. 2021-07-22 12:14:53 -07:00
Garret Rieger 9ab751ac9f [subset] Remove hb_subset(). Leaving just hb_subset_or_fail(). 2021-07-22 12:14:47 -07:00
Garret Rieger e5c887fc0f [subset] add documentation for subset input flag enums. 2021-07-22 12:14:09 -07:00
Garret Rieger 372722ceee [subset] move notdef_outline to the subset input property enum. 2021-07-22 12:14:03 -07:00
Garret Rieger a6c6cda486 [subset] Add no subset tables and passthrough unrecognized tables to the subset api.
Matches fontTools options.
2021-07-22 12:12:37 -07:00
Garret Rieger 668f2bd93e [subset] Add hb_subset_or_fail () to public subset api. 2021-07-22 12:12:36 -07:00
Garret Rieger aba2e13141 [subset] Remove hb_subset_input_get/set_overlaps_flag (). 2021-07-22 12:12:36 -07:00
Garret Rieger 7d82191f61 [subset] Remove hb_subset_input_get/set_name_legacy (). 2021-07-22 12:12:36 -07:00
Garret Rieger 942636ae13 [subset] Remove hb_subset_input_get/set_retain_gids. 2021-07-22 12:12:36 -07:00
Garret Rieger 77b4a1cd96 [subset] Remove hb_subset_input_get/set_desubroutinize. 2021-07-22 12:12:36 -07:00
Garret Rieger 8bf5d4d4f7 [subset] Remove hb_subset_input_get/set_drop_hints. 2021-07-22 12:12:36 -07:00
Garret Rieger 9fb3a25633 [subset] Use hb_set_copy in subset input. 2021-07-22 12:12:36 -07:00
Garret Rieger 38de3491a0 [subset] add implementation for get/set flag on subset input. 2021-07-22 12:12:36 -07:00
Garret Rieger 83727837ef [subset] add proposed enum property get/set method. 2021-07-22 12:12:36 -07:00
Garret Rieger b38e49dcfa [subset] add get/set user data methods to subset input. 2021-07-22 12:12:30 -07:00
Garret Rieger edb57a8d9a Make subset input const in the subsetting operation. Don't modify the subset input's sets. 2021-07-22 12:11:43 -07:00
Behdad Esfahbod 233c29b302 [font] Call fvar.find_axis_index instead of find_axis_info in set_variations() 2021-07-22 12:00:24 -07:00
Behdad Esfahbod 89018068cd [fvar] Centralize axis finding logic
Part of fixing https://github.com/harfbuzz/harfbuzz/issues/1673
2021-07-22 11:59:23 -07:00
Behdad Esfahbod 0b2280af90 [font] Call fvar table directly, instead of calling public get_axis_info
To lighten it up in next commit.
2021-07-22 11:58:14 -07:00
Behdad Esfahbod b86a45ca55 [fvar] Add TODO
Fixing https://github.com/harfbuzz/harfbuzz/issues/1673
2021-07-22 11:46:44 -07:00
Behdad Esfahbod ba6db26b65 Tolerate unsorted OT table entries for small number of entries
See comment.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3065
2021-07-22 11:38:27 -07:00
Behdad Esfahbod 03cd9c5cba Align lfind() API to match bfind() 2021-07-22 11:38:27 -07:00
Behdad Esfahbod f54f5c1b16 Fix debug printer of bool 2021-07-22 11:38:27 -07:00
Garret Rieger 6269866bdd [subset] Keep bimap consistent if only one of the internal maps is in error. 2021-07-19 13:42:00 -06:00
Garret Rieger 48edbef96f [subset] bail if region_map is in error.
Fixes fuzzer case https://oss-fuzz.com/testcase-detail/5499162606043136.
2021-07-19 13:42:00 -06:00
Behdad Esfahbod 79e8b30609 [ot-shape] Fix application of kern table if GPOS kern is missing
Was broken sometime after we implemented kerx and tweaking it.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3043
2021-07-16 16:29:44 -06:00
Behdad Esfahbod 1060b04938
Merge pull request #3060 from googlefonts/unicode_collect
[subset] de-duplicate the logic that finds unicodes corresponding to …
2021-07-14 17:50:46 -07:00
Garret Rieger 9aa0ecef3f [subset] de-duplicate the logic that finds unicodes corresponding to requested glyphs.
Move the logic into subset planning and then re-use the results in cmap and OS2 subsetting. Removes depedency on cmap from os2.
2021-07-14 17:31:47 -07:00
Garret Rieger deee24fbef [subset] Add missing FontName op code in top dict parsing.
Fix for #3058
2021-07-14 16:01:18 -06:00
Behdad Esfahbod 9985ca6491
Merge pull request #3057 from harfbuzz/ci-coverage-macos
[ci] Add macOS GitHub workflow
2021-07-13 13:42:09 -07:00
Behdad Esfahbod 95b04f7409 [buffer] Remove unnecessary have_separate_output() 2021-07-12 17:36:38 -06:00
Behdad Esfahbod 3e266e5f64 [buffer] Update comments 2021-07-12 17:36:36 -06:00
Behdad Esfahbod 3807061d63 [ot-layout] Don't remove_output() before reverse substitution
No need anymore, because of new swap_buffers() semantics.

Just assert instead.
2021-07-12 17:36:22 -06:00
Behdad Esfahbod 10a9960f0a [buffer] Restructure swap_buffers()
Is more of a "commit" operation now. Will rename when ready.
2021-07-12 17:36:22 -06:00
Khaled Hosny d56afb750a [tests] Ignore more symbols
These seem to be exported when building with code coverage on macOS.
2021-07-13 01:12:34 +02:00
Behdad Esfahbod a7f4c985a8 [ot-layout] Always swap_buffers() even if no substitutions happened 2021-07-12 17:00:46 -06:00
Behdad Esfahbod 62b441e6ff [layout] Use Proxy::inplace instead of table index check
Equivalent.
2021-07-12 16:59:34 -06:00
Behdad Esfahbod 431f164003 [layout] Don't call clear_output() before pause-func 2021-07-12 16:57:25 -06:00
Behdad Esfahbod a623446a34 [shape] Remove stray clear_output() call in hb_shape() 2021-07-12 16:55:54 -06:00
Behdad Esfahbod 05c17787c4 [buffer] Rewind cursor in clear_output() 2021-07-12 16:55:08 -06:00
Behdad Esfahbod 1cb0ca1f2c Whitespace 2021-07-12 16:52:51 -06:00
Behdad Esfahbod 69310f14a6 [buffer] Change nil buffer have_output to false
Seems like a historical artefact that it was true.
2021-07-09 16:45:55 -07:00
Behdad Esfahbod 40884af17e [ot-layout] Narrow down random feature logic vs safe-to-break 2021-07-09 16:34:08 -07:00
Behdad Esfahbod 33b579d0ad [ot-layout] Clear random flag for subsequent flags
Ouch!
2021-07-09 16:34:08 -07:00
Behdad Esfahbod 29c9833e57 Remove Offset::serialize()
Finishing https://github.com/harfbuzz/harfbuzz/pull/2355
2021-07-09 11:58:36 -06:00
Khaled Hosny 63e15eac4f 2.8.2 2021-07-08 23:02:49 +02:00
Behdad Esfahbod 2337f0d047 Internally use hb_malloc/.../hb_free instead of malloc/.../free
Redefining those stock names as macros was conflicting with gcc 10
headers.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3044
2021-07-08 10:54:09 -07:00
Behdad Esfahbod bb48bf52a4 Rename misc uses of "free"
In preparation for fixing https://github.com/harfbuzz/harfbuzz/issues/3044
2021-07-08 10:54:09 -07:00
Qunxin Liu 7416faceeb [subset] fuzzer fix: https://oss-fuzz.com/testcase-detail/5715464591376384 2021-07-08 09:09:30 -07:00
Garret Rieger 0da9158f62 [subset] Remove OffsetTo::serialize().
Convert remaining uses of it to serialize_serialize() which correctly uses the object packer.
2021-06-30 14:05:48 -07:00
Behdad Esfahbod 0969614865 [ot-shape] Rewrite loop without foreach_grapheme()
We were not using the graphemes, and that's costlier than just for().
2021-06-26 08:52:53 -06:00
Qunxin Liu eee7b459ee [subset] add option --no-prune-unicode-ranges 2021-06-24 11:44:20 -07:00
Khaled Hosny c3be28ea26 [ot-shape] Numeric runs native direction is LTR
See inline comments. Slightly modified version of the code from Jonathan
Kew on the linked issue.

Fixes https://github.com/harfbuzz/harfbuzz/issues/501
2021-06-23 13:11:27 -07:00
Behdad Esfahbod cc9bb29491 [blob] Fix-up recent mistake in hb_blob_create() destroy(user_data)
https://github.com/harfbuzz/harfbuzz/pull/3026#discussion_r653437491
2021-06-20 18:47:03 -06:00
Garret Rieger bc06af977f [subset] speed up feature collection when tags are specified.
Precompute a feature index filter to avoid needing to iterate the feature tag list for each encountered feature index. For this particular fuzzer case speeds up feature collection from 50s to 2s.
2021-06-20 17:45:19 -07:00
Khaled Hosny 14f220b761 [directwrite] Support feature ranges
Code copied from hb-uniscribe.cc and adapted to use DirectWrite types.
May be there is a better way to de-duplicate the code, though I'm not
exactly sure how or if it is worth it.
2021-06-20 17:22:27 -07:00
Garret Rieger 26c80adb61 [subset] do colrv1 glyph closure before glyf composite closure. 2021-06-18 22:34:00 -07:00
Qunxin Liu d07f789ae3 [subset] support option "--notdef-outline" 2021-06-18 15:35:02 -07:00
Garret Rieger 10ad185932 [subset] add comment to copy_bytes(). 2021-06-16 17:35:39 -06:00
Garret Rieger 675ebbeb3a [subset] don't alloc zero bytes.
It will be leaked later since hb_blob_create() won't set up the blob to cleanup since it has length zero.
2021-06-16 17:35:39 -06:00
Behdad Esfahbod 93e6a9bc4e Revert "Remove unneeded buffer clear_output / remove_output calls"
This reverts commit 06175b7143.

One of the sanitizers is failing. Pushing again as PR to debug.
I have suspicions.
2021-06-15 15:38:49 -06:00
Behdad Esfahbod 06175b7143 Remove unneeded buffer clear_output / remove_output calls
Made sure clear_output is always paired with swap_buffers.
Trying to see if we can move towards RAII-like buffer iterators
instead of the buffer keeping an iterator internally.
2021-06-15 14:33:27 -06:00
Behdad Esfahbod bdfed8f113 [blob] Add failing versions of create API
Fixes https://github.com/harfbuzz/harfbuzz/issues/2567

New API:
+hb_blob_create_or_fail()
+hb_blob_create_from_file_or_fail()

Use these in util/ to distinguish empty file from not-found file.
Only err on the latter.
2021-06-15 13:56:30 -06:00
Behdad Esfahbod 2fc8d0e6f0
Merge pull request #3020 from googlefonts/serialize_serialize
[subset] Always serialize objects point to by OffsetTo to a new serializer object.
2021-06-15 12:56:17 -07:00
Garret Rieger 085aa65e09 [subset] Convert offset serialization in gsubgpos and gdef to serialize_serialize(). 2021-06-14 16:47:45 -07:00
Garret Rieger cc96c4e87e [shaping] Update shaping substituion lookup serialization to use serializer pop()/pack(). 2021-06-14 16:43:23 -07:00
Behdad Esfahbod d3dd936309 [coretext] Round position info
Test:

Before:
$ ./hb-shape /System/Library/Fonts/ヒラギノ丸ゴ\ ProN\ W4.ttc 1 --features="+palt" --shaper=coretext
[gid781=0@-78,0+841]
$ ./hb-shape /System/Library/Fonts/ヒラギノ丸ゴ\ ProN\ W4.ttc 1 --features="+palt" --shaper=ot
[gid781=0@-78,0+842]

After:
$ ./hb-shape /System/Library/Fonts/ヒラギノ丸ゴ\ ProN\ W4.ttc 1 --features="+palt" --shaper=coretext
[gid781=0@-78,0+842]
$ ./hb-shape /System/Library/Fonts/ヒラギノ丸ゴ\ ProN\ W4.ttc 1 --features="+palt" --shaper=ot
[gid781=0@-78,0+842]

I've verified in the font that 842 is correct.
2021-06-14 13:24:23 -07:00
Garret Rieger 8443cc85cb [subset] Correct OffsetTo serialization in GPOS to use serialize_serialize (). 2021-06-14 12:18:06 -07:00
Garret Rieger 5ba46ed067 [subset] Correct OffsetTo serialization in GSUB to use serialize_serialize (). 2021-06-14 12:18:06 -07:00
Garret Rieger 35458b6b66 [subset] Add serialize_serialize to OffsetTo.
Similar to serialize_subset() this will serialize the new object and then link it to the offset.
2021-06-14 12:18:06 -07:00
Behdad Esfahbod 2b0ced28b6 Cluster Regional_Indicator pairs (aka emoji flags)
Fixes https://github.com/harfbuzz/harfbuzz/issues/2265
2021-06-14 06:34:58 -07:00
Behdad Esfahbod 4e72d5e35d [src/check-static-init] Ignore objdump "file format not recognized" error
Fixes https://github.com/harfbuzz/harfbuzz/issues/3019
2021-06-13 05:46:17 -06:00