Commit Graph

9773 Commits

Author SHA1 Message Date
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