Commit Graph

10785 Commits

Author SHA1 Message Date
Behdad Esfahbod 95bfa0913d [gvar] Optimize translate() 2022-06-27 12:10:16 -06:00
Behdad Esfahbod 9f067582b8 [gvar] Optimize transform() 2022-06-27 12:10:16 -06:00
Behdad Esfahbod cfc57ef862 [glyf] Optimize contour_point_t layout 2022-06-27 12:10:16 -06:00
Behdad Esfahbod 75ca78a6bb [glyf] Optimize hb_contour_points_t::extend 2022-06-27 12:10:16 -06:00
David Corbett 04c4767150 [lao] Decompose and reorder U+0EB3 around U+0EBB 2022-06-27 11:31:32 -06:00
Behdad Esfahbod d3308f4713 [font] Optimize font scaling further 2022-06-27 11:28:57 -06:00
Matthias Clasen e72506d085 Fix the annotation for hb_blob_get_data
This function will return NULL for the the
empty blob. That is important information for
bindings that treat nullability as a type trait.
2022-06-27 10:59:02 -06:00
Behdad Esfahbod 3c49a6a60a [glyf] Fix an allocation error
Try fixing assertion failure found by fuzzers:

hb-draw-fuzzer: ../../src/harfbuzz/src/OT/glyf/glyf.hh:175: bool OT::glyf_accelerator_t::get_points(hb_font_t *, hb_codepoint_t, T) const [T = OT::glyf_impl::path_builder_t]: Assertion `count >= glyf_impl::PHANTOM_COUNT' failed.
2022-06-27 10:57:51 -06:00
Behdad Esfahbod 556e7078f0 [font] Optimize glyph scaling 2022-06-26 17:48:43 -06:00
Behdad Esfahbod a1c45bbb55 [glyf] Minor simplify 2022-06-26 17:30:16 -06:00
Behdad Esfahbod a21a9bb855 [glyf] Optimize flags decoding byte range checking 2022-06-26 17:24:29 -06:00
Behdad Esfahbod 0f1fdf461c [glyf] Optimize points decoding byte range checking 2022-06-26 17:22:45 -06:00
Behdad Esfahbod 51cfcf2957 [glyf] Optimize points decoding 2022-06-26 17:04:47 -06:00
Behdad Esfahbod 86b7022503 [glyf] Optimize flag decoding 2022-06-26 17:02:32 -06:00
Behdad Esfahbod 30d58bfd0f [glyf] Don't translate/transform components if has no effect 2022-06-26 16:49:40 -06:00
Behdad Esfahbod 2bb0fa878a [glyf] Remove unneeded point init() 2022-06-26 16:43:05 -06:00
Behdad Esfahbod fc72a1d22d [glyf] Add a pre-allocation for phantom points 2022-06-26 16:42:01 -06:00
Behdad Esfahbod 8d242aaa8b [glyf] Rewrite a loop harmlessly
I hope...
2022-06-26 16:36:08 -06:00
Behdad Esfahbod cf57f04ddb [glyf/path-builder] Optimize scaling code
Scale each point once upon entry to function.

This makes our shape fetching code as fast as FreeType for all
benchmark cases now.
2022-06-26 16:26:17 -06:00
Behdad Esfahbod 36dd5d32fb [draw] Use multiplication instead of division in quadratic conversion 2022-06-26 16:16:43 -06:00
Behdad Esfahbod b095df1343 [glyf/path-builder] Use operator bool for style 2022-06-26 16:12:50 -06:00
Behdad Esfahbod abb433d0f4 [glyf] Avoid a copy of points in shape fetching for simple glyphs
Matches performance with freetype now.
2022-06-26 16:09:32 -06:00
Behdad Esfahbod 7eac779abf Revert "Revert "[glyf] Optimize shape loading""
This reverts commit 164bd288cf.
2022-06-26 16:02:27 -06:00
Behdad Esfahbod 164bd288cf Revert "[glyf] Optimize shape loading"
This reverts commit f0819301b7.

Broke tests. To be debugged and redone.
2022-06-26 16:01:15 -06:00
Behdad Esfahbod f0819301b7 [glyf] Optimize shape loading
Do away with a copy for simple glyph load.
2022-06-26 15:52:54 -06:00
Behdad Esfahbod 65b066f18e [glyf/path-builder] Simplify initialization 2022-06-26 13:18:00 -06:00
David Corbett b2abd5c7e8 [thai] Reword to include all relevant marks 2022-06-26 13:12:12 -06:00
Behdad Esfahbod 2d4557fe04 [glyf/SimpleGlyph] Use member pointer instead of lambda 2022-06-26 13:08:37 -06:00
Behdad Esfahbod 9ce9773040 [glyf/SimpleGlyph] Minor use constructor for contour_point_t 2022-06-26 13:08:37 -06:00
Behdad Esfahbod f897978f21 [glyf] Adjust a check-range 2022-06-26 13:08:37 -06:00
Behdad Esfahbod db039d97ff [glyf/Composite] Make glyphIndex public 2022-06-26 13:08:37 -06:00
Behdad Esfahbod 1b14bf8aa8 [glyf] Rename CompositeGlyphChain to CompositeGlyphRecord 2022-06-26 13:08:37 -06:00
Behdad Esfahbod a5ac7f2ea6 [glyf/composite_iter_t] Renames 2022-06-26 13:08:37 -06:00
Behdad Esfahbod d15260ca95 [gpos] Limit recursion depth in propagate_attachment_offsets()
Fixes https://github.com/harfbuzz/harfbuzz/issues/2927
2022-06-25 19:53:11 -06:00
Behdad Esfahbod 449bdeed5f [glyf] Rename get_iterator() to iter()
That's the standard name.
2022-06-25 18:32:30 -06:00
Behdad Esfahbod 11d2670676 [glyf] Split off glyf-helpers.hh 2022-06-25 18:19:09 -06:00
Behdad Esfahbod 7c4b8c9bf4 [glyf] path-builder minor header guards fix test 2022-06-25 18:14:42 -06:00
Behdad Esfahbod 499c637922 [glyf] Split off path-builder.hh 2022-06-25 18:07:49 -06:00
Behdad Esfahbod 13aadc8961 [glyf] Split off CompositeGlyph.hh 2022-06-25 18:03:15 -06:00
Behdad Esfahbod f0ec2b728e [glyf] Split off SimpleGlyph.hh 2022-06-25 17:55:16 -06:00
Behdad Esfahbod 8ed78627f0 [glyf] Split off GlyphHeader.hh 2022-06-25 17:53:13 -06:00
Behdad Esfahbod 81315a3016 [glyf] Namespace implementation in glyf_impl
Part of https://github.com/harfbuzz/harfbuzz/issues/3677
2022-06-25 17:50:44 -06:00
Behdad Esfahbod be1d4bcf29 [glyf] Add fast __end__ to composite iterator 2022-06-25 17:45:21 -06:00
Behdad Esfahbod ef250eea7e [glyf] Move a few structs out of Glyph{} 2022-06-25 17:37:59 -06:00
Behdad Esfahbod ae75f066b5 [glyf] Split SubsetGlyph 2022-06-25 17:12:10 -06:00
Behdad Esfahbod 0031069f47 [glyf] Fix includes 2022-06-25 17:05:18 -06:00
Behdad Esfahbod b4a0c30d98 [glyf] Remove hardcoded HB_MAX_COMPOSITE_OPERATIONS 2022-06-25 17:01:11 -06:00
Behdad Esfahbod 36373ee15c [glyf] Move add_gid_and_children to subset-plan where it belongs 2022-06-25 16:55:26 -06:00
Behdad Esfahbod ba1c9eda38 [glyf] Use a range for loop 2022-06-25 16:51:33 -06:00
Behdad Esfahbod e4f2bc9342 [glyf] Split Glyph.hh 2022-06-25 16:47:06 -06:00
Behdad Esfahbod 3f9c6bf3fc [glyf] Minor in _write_loca() 2022-06-25 14:46:26 -06:00
Behdad Esfahbod 852985da0f [glyf] Split loca.hh 2022-06-25 14:41:51 -06:00
Behdad Esfahbod 100576b7b7 [glyf] Start splitting file 2022-06-25 14:38:43 -06:00
Behdad Esfahbod e867ac3aef
Merge pull request #3674 from harfbuzz/use-sinhala-no-hacks
[use] Switch Sinhala to USE
2022-06-25 12:43:04 -06:00
Behdad Esfahbod b1629b0ce0 [gdef] Minor harmless use of HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED 2022-06-25 12:00:25 -06:00
David Corbett 78c5ae3979 [indic] Remove remnants of Sinhala 2022-06-25 13:49:18 -04:00
Behdad Esfahbod 0cc948b96c [use] Switch Sinhala to USE
https://github.com/harfbuzz/harfbuzz/issues/1044
2022-06-25 13:48:43 -04:00
David Corbett 6059828769 [use] Reintroduce the HVM class for U+0DCA 2022-06-25 13:48:43 -04:00
David Corbett 1555b30081 Add U+25CC to lone Robatic but not after U+17D9 2022-06-25 11:02:39 -06:00
David Corbett 0f15cb12de [indic-table] Fix block headers 2022-06-25 11:02:39 -06:00
Garret Rieger 2674962cf5 [repacker] Add comment to graph class. 2022-06-24 17:16:50 -06:00
Garret Rieger 81a2dd0e80 [repacker] Update Makefile for repacker re-org. 2022-06-24 17:16:50 -06:00
Garret Rieger 7078560e33 [repacker] extract graph serialization code into a seperate file. 2022-06-24 17:16:50 -06:00
Garret Rieger 20b02a672d [repacker] Begin splitting up the repacker implementation into several files. 2022-06-24 17:16:50 -06:00
Behdad Esfahbod ad2ab1ddb4 [indic] Clear syllables at the end of GSUB 2022-06-24 11:08:35 -06:00
Behdad Esfahbod 8bfb3e9df2 [indic] Disable vowel-constraints under uniscribe-bug-compatible 2022-06-23 13:28:07 -06:00
Behdad Esfahbod a5cf1a8738 Another null adjustment 2022-06-20 18:01:39 -06:00
Behdad Esfahbod a7960bdfb0 [config] Add HB_NO_LANGUAGE_LONG and enable in TINY profile
Disables 3letter language tags and more complex ones.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3664
2022-06-20 17:55:28 -06:00
Behdad Esfahbod 0d03123350 Mark a null variable as const 2022-06-20 16:51:35 -06:00
Behdad Esfahbod 91d00ab722 [ucd] Update 2022-06-20 13:36:01 -06:00
Khaled Hosny a15ad778fe [arabic-fallback] Generate PUA table from data
Uses packtab for more compact arrays.
2022-06-19 12:29:10 -06:00
Behdad Esfahbod abc0685749
Merge pull request #3063 from harfbuzz/arabic-pua
Arabic PUA shaping
2022-06-19 11:05:17 -06:00
Behdad Esfahbod 7ec4a556d9 [normalize] Cosmetic
I didn't know this syntax is allowed in old C++.
2022-06-19 11:01:45 -06:00
Behdad Esfahbod 8c27c51c27 [arabic-pua] Rename symbols 2022-06-19 10:47:38 -06:00
Behdad Esfahbod 7698962911 [arabic-fallback] Disable PUA shaping under HB_NO_OT_SHAPER_ARABIC_FALLBACK 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 4520911429 [arabic-fallback] Fix warning 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 55350377b0 [cmap/ft] Only map 0xF000 range if font_page is NONE 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 41a079bdec [arabic-fallback] Make win1256 code build again
Humm. Untested.
2022-06-19 10:42:06 -06:00
Behdad Esfahbod 1db6fddb24 [arabic-fallback.hh] Hook up 3-letter ligatures 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 20e9f0b1d2 [arabic-fallback] Add the component loop
Should be able to support 3-letter ligatures now.  Hooking up next.
2022-06-19 10:42:06 -06:00
Behdad Esfahbod 9684d2d8aa [arabic-fallback] More baby steps 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 08715d75e0 [arabic-fallback] Another baby-step 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 15dd34b515 [arabic-fallback] Another minor rename towards supporting 3-letter ligatures 2022-06-19 10:42:06 -06:00
Behdad Esfahbod d86effa4a6 [arabic-fallback] Rename; towards supporting 3-letter ligatures 2022-06-19 10:42:06 -06:00
Behdad Esfahbod 16c2371352 [arabick-fallback] Apply mark ligatures 2022-06-19 10:42:06 -06:00
Khaled Hosny 7f362196c5 [arabic] Split ligature array
Generate marks and 3-component ligatures in separate arrays. The new
arrays are unused currently.
2022-06-19 10:42:06 -06:00
Khaled Hosny 6e29060af2 [arabic] Add mapping files for the PUA encoding
Unused right now.
2022-06-19 10:42:06 -06:00
Khaled Hosny 189e8c326e [ft] Remap legacy Arabic PUA codepoints
Similar to what ot font finctions does, to support Support legacy
pre-OpenType Windows 3.1-era fonts.
2022-06-19 10:42:05 -06:00
Khaled Hosny 69cbd365cc WIP: manually add data entries for PUA ligatures
Just a test, I’m not entirely convinced we should do this.
2022-06-19 10:42:05 -06:00
Khaled Hosny c3f590bb1e [arabic] Support legacy PUA shaping
Support legacy pre-OpenType Windows 3.1-era fonts, by remapping PUA code
points in cmap table and letting our fallback shaper build the GSUB
table.

Uniscribe applies also mset-like substitution, but our fallback mark
positioning gives better results, so this is not implemented.
2022-06-19 10:42:05 -06:00
Behdad Esfahbod b172f88c7d Fix a warning
D:\a\harfbuzz\harfbuzz\src\hb-bit-set-invertible.hh(83): warning C4805: '^': unsafe mix of type 'uint32_t' and type 'const bool' in operation
[870/1075] Compiling C++ object src/harfbuzz.dll.p/hb-face.cc.obj
cl : Command line warning D9025 : overriding '/EHs' with '/EHs-'
cl : Command line warning D9025 : overriding '/EHc' with '/EHc-'
2022-06-18 14:00:59 -06:00
Garret Rieger af74ab452f [repack] always run the sort in repack.
This is needed to ensure virtual link ordering constraints are respected when repack is being called from fontTools. For subset usage, repack won't be called if the graph doesn't already overflow so this change doesn't cause any extra work.
2022-06-16 15:17:58 -06:00
Behdad Esfahbod 29811a720c Fix typo 2022-06-16 14:04:08 -06:00
Behdad Esfahbod c859cbfb88 Mark an array as static
Not sure how this wasn't flagged before.
2022-06-16 13:55:12 -06:00
Behdad Esfahbod 19802dfdf0 Minor rename of static symbols to namespace them 2022-06-16 13:52:47 -06:00
Behdad Esfahbod e0a5231657 [draw] Lazy-allocate user-data/destroy callback vector 2022-06-16 13:40:44 -06:00
Garret Rieger 823f32a0e2 [subset] Fix potential out of bounds write setting overlap flag on composite glyphs. 2022-06-16 12:30:59 -06:00
Behdad Esfahbod 3f9226da37 [meta] Fix typo 2022-06-16 09:28:47 -06:00
Ryan VanderMeulen 1c0eeb7cb3 Don't try to set _USE_MATH_DEFINES if already defined 2022-06-16 09:28:33 -06:00
Ryan VanderMeulen 25917c780f Fix build warning when __GNUG__ isn't defined 2022-06-16 09:28:33 -06:00
Behdad Esfahbod e9c0a74063 Fix clang -Wcomma warnings
Fixes https://github.com/harfbuzz/harfbuzz/issues/3656
2022-06-15 17:28:36 -06:00
Behdad Esfahbod d9c18cc2f0 [indic-table] Update 2022-06-15 16:50:34 -06:00
Behdad Esfahbod 99a26bc19d [indic-generator] Fix typo 2022-06-15 16:15:21 -06:00
Behdad Esfahbod 2cbb775866 [myanmar] Fold category P into GB
Fixes https://github.com/harfbuzz/harfbuzz/issues/3649

This actually now allows Asat after the Myanmar punctuation marks;
something I see in Wikipedia data.
2022-06-15 16:15:21 -06:00
Behdad Esfahbod b350e30186 [myanmar] Remove category D completely
Fixes https://github.com/harfbuzz/harfbuzz/issues/3651
2022-06-15 16:15:21 -06:00
Behdad Esfahbod 8533214ac5 [khmer] Fold category Coeng completely into category H 2022-06-15 16:15:21 -06:00
Behdad Esfahbod 607a9fe793 [indic-like] Remove category duplication 2022-06-15 16:15:21 -06:00
Behdad Esfahbod 0485192195 [indic-like] Remove dependence on ot_category_t 2022-06-15 16:15:21 -06:00
Behdad Esfahbod 14049003ac [indic-like] Reduce indic-dependency of khmer/myanmar even more 2022-06-15 16:15:21 -06:00
Garret Rieger f9f0969cb6 [subset] switch to hb_memcpy. 2022-06-14 17:49:13 +01:00
Garret Rieger 1e34852f07 [subset] Fix undefined behaviour.
Don't memcpy if there's nothing to copy.
2022-06-14 17:49:13 +01:00
Garret Rieger 311413f16b [subset] Fix fuzzer issue.
Fixes https://oss-fuzz.com/testcase-detail/5693568490012672. new_index should be set from new_index2 when the entry is present in the map.
2022-06-14 17:49:13 +01:00
Matthias Clasen 4ba7980b8e Fix the generated gobject headers
These headers are not acceptable to modern compilers.
gcc says things like:

/usr/include/harfbuzz/hb-gobject-enums.h💯1: warning:
  function declaration isn’t a prototype [-Wstrict-prototypes]
  100 | hb_gobject_ot_metrics_tag_get_type () G_GNUC_CONST;
2022-06-11 23:47:00 +01:00
Ali Chraghi 79bb3b5278 [docs] fix typo 2022-06-11 13:04:55 +01:00
Behdad Esfahbod 98116e5cf5 [myanmar] Fix comments on categories
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894955430
2022-06-11 03:42:36 -06:00
Behdad Esfahbod 02016914b3 [indic-generator] Remove unnecessary Myanmar category=D overrides
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894685106
2022-06-10 17:24:19 -06:00
Behdad Esfahbod 937c878078 [indic-generator] Remove unnecessary override for Myanmar U+1039
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894762535
2022-06-10 17:20:15 -06:00
Behdad Esfahbod 9504037ccb [indic-generator] Remove three unneeded Myanmar overrides U+AA74-6
These three characters have Indic_Syllabic_Category=Consonant_Placeholder. The
original evidence that prompted these overrides says they can take tone marks.
They are not subjoined: Khamti Shan apparently does not use subjoined
characters at all. Therefore, PLACEHOLDER is good enough and these need not be
overridden to C.

https://www.unicode.org/L2/L2008/08276-khamti-proposal.pdf

https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894640713
2022-06-10 17:13:16 -06:00
Behdad Esfahbod 02eb6606d7 [indic-generator] Remove redundant PLACEHODER characters overrides
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894631922
2022-06-10 17:10:42 -06:00
Behdad Esfahbod e16669ceac [indic-generator] Remove redundant override of U+2010 / U+2011
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894630596
2022-06-10 17:05:35 -06:00
Behdad Esfahbod bb255cd9a6 [indic-generator] Remove redundant override of U+0980
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894627064
2022-06-10 17:03:52 -06:00
Behdad Esfahbod 30d8c87d01 [myanmar] Document Medials
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894532676
2022-06-10 16:56:15 -06:00
Behdad Esfahbod e1826c3714 [khmer] Reuse OT_H for OT_Coeng
https://github.com/harfbuzz/harfbuzz/pull/3648#discussion_r894517417
2022-06-10 16:53:11 -06:00
Behdad Esfahbod eb2f2e318a [indic-generator] Update comment re U+104E
https://github.com/harfbuzz/harfbuzz/pull/3648#pullrequestreview-1002150048
2022-06-10 16:47:59 -06:00
Behdad Esfahbod 0daafefdd1 Merge branch 'main' into indic-cleanup 2022-06-10 10:55:49 -06:00
Behdad Esfahbod 148283d0e0 [syllabic] Use a buffer scratch-flag for has-broken-syllable 2022-06-10 07:48:39 -06:00
Behdad Esfahbod 6997d10bc0 [arabic] Remove a couple TODO items 2022-06-10 07:43:33 -06:00
Behdad Esfahbod e1575f2347 [iter] Remove a few TODO items 2022-06-10 07:41:39 -06:00
Behdad Esfahbod 689c77530a [buffer] Actually remove TODO item
In reality, one side is smaller and one side is larger. The existing code
handles that just fine.
2022-06-10 07:37:45 -06:00
Behdad Esfahbod d09e962b9f [buffer] Update a TODO item 2022-06-10 07:36:43 -06:00
Behdad Esfahbod b3f689e7e5 [serializer] Remove TODO that's not gonna happen 2022-06-10 07:31:47 -06:00
Behdad Esfahbod 10a8cc28fc [normalizer] Remove a TODO that's not going to happen 2022-06-10 07:31:06 -06:00
Behdad Esfahbod 7635568f29 [font] Remove a TODO item that's not gonna happen 2022-06-10 07:29:15 -06:00
Behdad Esfahbod bd453de757 [unicode] Accept a couple hacks as permanent 2022-06-10 07:25:48 -06:00
Behdad Esfahbod 39c132a62d [indic/myanmar] Simplify compare functions 2022-06-10 07:12:39 -06:00
Behdad Esfahbod a5bcd8567f [indic] Update comment re category listing 2022-06-10 07:03:02 -06:00
Behdad Esfahbod 10a5485136 [indic/myanmar] Move is_consonant to .cc files 2022-06-10 06:34:56 -06:00
Behdad Esfahbod 1c657460ef [indic] Expand MEDIAL_FLAGS 2022-06-10 06:29:45 -06:00
Behdad Esfahbod 9e3917f6d6 [indic] Move a couple of functions to .cc file 2022-06-10 06:26:26 -06:00
Behdad Esfahbod 165ef55e57 [indic-generator] Move INDIC_COMBINE_CATEGORIES here 2022-06-10 06:20:10 -06:00
Behdad Esfahbod b030dd9e88 [indic-table] Minor rename 2022-06-10 06:12:13 -06:00
Behdad Esfahbod d414fb3328 [indic/khmer/myanmar] Add static_assert that categories match OT_* 2022-06-10 00:50:47 -06:00
Behdad Esfahbod 15ea4ccb04 [indic-like] Add note about replicated values 2022-06-09 17:47:46 -06:00
Behdad Esfahbod 3289e81532 [indic] Use categories from the machine 2022-06-09 17:46:15 -06:00
Behdad Esfahbod 37217fc9be [indic-generator/myanmar] Move most Myanmar category overrides to generator 2022-06-09 17:27:43 -06:00
Behdad Esfahbod c136227f57 [indic-generator/khmer] Move Khmer overrides to generator 2022-06-09 13:38:34 -06:00
Behdad Esfahbod 40aa4e8320 [indic/khmer/myanmar] Add Khmer/Myanmar categories to indic_category_t 2022-06-09 13:30:00 -06:00
Behdad Esfahbod 25793075e2 [indic-generator] Move Khmer/Myanmar vowel categories to the generator 2022-06-09 13:11:46 -06:00
Behdad Esfahbod a6c82d4b8c [myanmar] Simplify to not use position info from the indic table for shaping 2022-06-09 13:04:28 -06:00
Behdad Esfahbod 10cd8ac0e5 [indic-generator] Move matra category overrides to generator 2022-06-09 12:27:31 -06:00
Behdad Esfahbod c4e4f1d387 [indic-generator] Move SMVD position overrides to generator 2022-06-09 11:58:37 -06:00
Behdad Esfahbod 2963154c15 [indic-generator] Add a couple comments 2022-06-09 11:53:24 -06:00
Behdad Esfahbod 91d6f45bc9 [indic-generator] Move some position overrides to the generator 2022-06-09 11:52:56 -06:00
Behdad Esfahbod 0ec4dcb93d [indic-generator] Ouch
Not sure how this was passing tests still.
2022-06-09 11:52:25 -06:00
Behdad Esfahbod f0269e0f1b [indic-generator] Move Ra handling to the generator 2022-06-09 11:52:03 -06:00
Behdad Esfahbod 419d2146c2 [indic-generator] Cap off what categories have positions
This was left off of the commit moving Indic categories to the generator.
It didn't fail any tests, but adding it back because it has implications
possibly.
2022-06-09 11:51:38 -06:00
Behdad Esfahbod e1d965d527 [indic-generator] Move position mapping to generator 2022-06-09 11:51:15 -06:00
Behdad Esfahbod 4907514026 [indic-generator] Move category overrides to generator 2022-06-09 11:50:30 -06:00
Behdad Esfahbod 58eeb3a180 [indic-generator] Move category mapping to generator 2022-06-09 11:49:57 -06:00
Behdad Esfahbod 899ca24387 [myanmar] Remove duplication of categories in the Myanmar shaper 2022-06-09 07:02:54 -06:00
Behdad Esfahbod ce0528c0ff [khmer] Remove duplication of categories in the Khmer shaper 2022-06-09 07:02:54 -06:00
Behdad Esfahbod 17c80035ad Revert "[cplusplus] Internally allow using hb_unique_ptr with hb_free()"
This reverts commit b5f621b08d.

A build was failing with clang 14 for Firefox apparently, sigh.

https://github.com/harfbuzz/harfbuzz/issues/3647
2022-06-09 04:17:38 -06:00
Behdad Esfahbod 9fc9b1ece4 [layout] Minor, add using Lookup to GSUB/GPOS 2022-06-08 12:37:31 -06:00
Behdad Esfahbod d4ddb3acf8 Comments typos 2022-06-08 11:45:33 -06:00
Behdad Esfahbod 4119f73c21 [subset/layout] Rename dispatch_closure_lookups_recurse_func to dispatch_recurse_func<> 2022-06-08 18:42:09 +01:00
Behdad Esfahbod c13ff39520 [layout] Rename apply_recurse_func to specialization of dispatch_recurse_func 2022-06-08 18:42:09 +01:00
Behdad Esfahbod 6a1edb8c97 [set-digest] One more rename 2022-06-08 11:38:17 -06:00
Behdad Esfahbod 6453737b0e [set-digest] Rename lowest_bits to bits_pattern 2022-06-08 11:37:12 -06:00
Behdad Esfahbod 2a061cb9cc [set-digest] Improve documentation 2022-06-08 11:35:50 -06:00
Behdad Esfahbod 42051fe18a [layout] s/inplace/always_inplace/g 2022-06-08 04:00:21 -06:00
Behdad Esfahbod 21346af01d [layout-cache] Adjust cost-function for recent change 2022-06-07 14:41:39 -06:00
Behdad Esfahbod bfee6839b0 [layout-cache] Cache lookahead, not input, classdef in ChainContextFormat2
From the commit:

+    /* For ChainContextFormat2 we cache the LookaheadClassDef instead of InputClassDef.
+     * The reason is that most heavy fonts want to identify a glyph in context and apply
+     * a lookup to it. In this scenario, the length of the input sequence is one, whereas
+     * the lookahead / backtrack are typically longer.  The one glyph in input sequence is
+     * looked-up below and no input glyph is looked up in individual rules, whereas the
+     * lookahead and backtrack glyphs are tried.  Since we match lookahead before backtrack,
+     * we should cache lookahead.  This decisions showed a 20% improvement in shaping of
+     * the Gulzar font.

https://github.com/harfbuzz/harfbuzz/pull/3636
2022-06-07 11:41:05 -06:00
Behdad Esfahbod 39820af72f [layout] Add HB_NO_OT_LAYOUT_LOOKUP_CACHE to disable caching lookups
Enabled when optimize-size profile is enabled.
2022-06-07 10:27:55 -06:00
Behdad Esfahbod 845279c34c
Merge pull request #3636 from harfbuzz/classdef-cache
Classdef cache
2022-06-07 16:40:22 +01:00
Behdad Esfahbod b59e25f25e [cff] Try fixing Heap-buffer-overflow in CFF::Charset::collect_glyph_to_sid_map
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47790
2022-06-07 09:27:44 -06:00
Behdad Esfahbod c8fb048f79 [gsubgpos] Document caching 2022-06-07 09:20:27 -06:00
Behdad Esfahbod 5963cf4469 [gsubgpos] Merge cache_enter and cache_leave entry points
Saves a pointer per subtable
2022-06-07 09:17:14 -06:00
Behdad Esfahbod d4c09e9a87 [gsubgpos] Remove apply_cached() entry point
Just use a bool to apply()
2022-06-07 09:17:14 -06:00
Behdad Esfahbod b96622d15c [layout] Use a cache for main input ClassDef of (Chain)ContextLookupFormat2
This commit adds a per-lookup caching infrastructure to GSUB/GPOS, and
uses it to cache input ClassDef.get_class value for (Chain)ContextLookupFormat2.

For fonts heavy on use of heave class-based2 context matching, this shows
a good speedup. For NotoNastaliqUrdu for example, I observe 17% speedup.

Unfortunately not many other lookups can use a cache like this :(.

https://github.com/harfbuzz/harfbuzz/pull/3636
2022-06-07 09:14:38 -06:00
Xavier Claessens 4266f4e29a Fix check-* scripts when harfbuzz is a subproject
When harfbuzz is a subproject paths are in the form
"subprojects/harfbuzz/src/...". Instead of removing "src/" prefix, take
the absolute path and make it relative to current source dir.

This fix regression introduced in
https://github.com/harfbuzz/harfbuzz/pull/3394.
2022-06-06 16:53:29 +01:00
Behdad Esfahbod 15543f70e0 [indic-like] Move allocation of syllable() buffer var to shapers that use it
In indic, we don't have a pause location release the var.
2022-06-05 08:15:47 -06:00
Behdad Esfahbod 104dc85a22 [buffer] Add try_allocate for buffer variables 2022-06-05 08:15:46 -06:00
Behdad Esfahbod b5f621b08d [cplusplus] Internally allow using hb_unique_ptr with hb_free()
...for arbitrary types.
2022-06-05 08:15:31 -06:00
Behdad Esfahbod f18eb000d3 [buffer] Mark a variable as unused
Weird. Somehow our HB_TINY bot started erring as this var being unused
in non-debug builds. Not sure why now...

    In file included from src/hb-ot-map.hh:32:0,
                     from src/hb-ot-shape.hh:32,
                     from src/hb-aat-layout.hh:32,
                     from src/hb-aat-layout.cc:30,
                     from src/harfbuzz.cc:1:
    src/hb-buffer.hh: In member function ‘void hb_buffer_t::assert_var(unsigned int, unsigned int)’:
    src/hb-buffer.hh:192:18: error: unused variable ‘bits’ [-Werror=unused-variable]
         unsigned int bits = (1u<<end) - (1u<<start);
                      ^~~~
cc1plus: some warnings being treated as errors
Error: Process completed with exit code 1.
2022-06-05 07:06:07 -06:00
Behdad Esfahbod e6409d3905 Revert "[layout] Use a cache for main input ClassDef of (Chain)ContextLookups"
This reverts commit 57d1c08739.

Err. This was an accident.
2022-06-05 06:57:37 -06:00
Behdad Esfahbod 57d1c08739 [layout] Use a cache for main input ClassDef of (Chain)ContextLookups 2022-06-05 06:54:19 -06:00
Behdad Esfahbod 92e81ab1df [indic/khmer/myanmar] Shift category numbers around to avoid overlap
Fixes https://github.com/harfbuzz/harfbuzz/issues/3632
2022-06-05 01:14:32 -06:00
Behdad Esfahbod d6dbc0d175 [gi/ft] Silence warnings
gi doesn't understand that FT_Face is a pointer, and not bare struct.
So it skips these APIs anyway. Mark skip to silense the warning.

../src/hb-ft.cc:242: Warning: HarfBuzz: hb_ft_font_get_face: return value: Invalid non-constant return of bare structure or union; register as boxed type or (skip)
../src/hb-ft.cc:264: Warning: HarfBuzz: hb_ft_font_lock_face: return value: Invalid non-constant return of bare structure or union; register as boxed type or (skip)
2022-06-05 00:58:53 -06:00
Behdad Esfahbod f78a25098a [gi] Remove Xconstructor annotations 2022-06-05 00:55:35 -06:00
Behdad Esfahbod cb961eac5c [configs] Fix builds with HB_NO_BUFFER_SERIALIZE but not HB_NO_BUFFER_VERIFY
e986c12075 (commitcomment-75339317)
2022-06-05 00:45:29 -06:00
Behdad Esfahbod 67852504f6 [indic/myanmar] No-op update to machines 2022-06-04 09:27:45 -06:00
Behdad Esfahbod 20a61ca447 [myanmar] Fold D category into GB
Trying to free a byte the buffer vars, for caching of lookups.

Part of https://github.com/harfbuzz/harfbuzz/issues/3633
2022-06-04 09:27:37 -06:00
Behdad Esfahbod f9b643f6b2 [layout] s/hb_get_subtables_context_t/hb_accelerate_subtables_context_t/g 2022-06-04 09:27:31 -06:00
Behdad Esfahbod d4dfb8c1f1 [arabic] Free up buffer variable earlier 2022-06-04 09:27:23 -06:00
Behdad Esfahbod cc7ebb0ffa Remove remaining mention to complex shapers in the code
https://github.com/harfbuzz/harfbuzz/pull/3628#issuecomment-1146248037
2022-06-04 05:42:58 -06:00
Behdad Esfahbod b39b5f2f31 [name] Implement approximate language matching
Very rudimentary.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3354
2022-06-03 13:00:33 +01:00
Behdad Esfahbod 40d7d56e53 [subset-input] Minor move 2022-06-03 05:40:18 -06:00
Behdad Esfahbod 40193adbfc [subset] Update default features list 2022-06-03 05:35:19 -06:00
Behdad Esfahbod 5bfb0b721c Rename s/shape-complex/shaper/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod 44be1e5dfb s/SHAPE_COMPLEX/SHAPER/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod 6fbb552156 s/FLAG_COMPLEX/FLAG_SHAPER/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod 6d9e94d2b8 s/hb_ot_shape_complex_categorize/hb_ot_shaper_categorize/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod a560182cb3 s/complex_var/ot_shaper_var/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod 13fbed29e4 s/HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS/HB_OT_SHAPE_MAX_COMBINING_MARKS/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod 44a7b3b773 s/ot_complex_shaper/ot_shaper/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod e5161977a4 s/COMPLEX_SHAPER/OT_SHAPER/g 2022-06-03 10:30:34 +01:00
Behdad Esfahbod f3a8b7f36b [algs] Test hb_hash() 2022-06-03 02:21:46 -06:00
Behdad Esfahbod 215a0afad1 [algs] Remove unused hb_coerce() 2022-06-03 01:48:46 -06:00
Behdad Esfahbod 5dc12d7d8d [cmap] Rewrite set_for() slightly 2022-06-03 01:37:02 -06:00
Behdad Esfahbod 9552955e08 Add an unlikely 2022-06-03 01:33:01 -06:00
Behdad Esfahbod 88f00ecb84 [map] Fix iter_ref () and test it 2022-06-03 01:30:27 -06:00
Behdad Esfahbod a42c624fca Convert one final use of hashmap to unique_ptr 2022-06-03 01:22:34 -06:00
Behdad Esfahbod f13a79548f [subset] Convert another use of hashmap to unique_ptr 2022-06-03 01:17:20 -06:00
Behdad Esfahbod 25f57230d5 [map] Return references from new iter_ref() 2022-06-03 01:14:35 -06:00
Behdad Esfahbod a7a688616a [cmap] Convert another map use to unique_ptr 2022-06-02 18:59:15 -06:00
Behdad Esfahbod 997d9cc466 [map] Make unique_ptr hashable 2022-06-02 18:47:42 -06:00
Behdad Esfahbod 8bb2a3326e [map] Remove unneeded assignment 2022-06-02 15:18:23 -06:00
Behdad Esfahbod d7785a6da0 [cplusplus] Add unique_ptr 2022-06-02 12:43:04 -06:00
Behdad Esfahbod bca710e8ad [gsubgpos] Use map has() instead of get() when appropriate 2022-06-02 12:06:25 -06:00
Behdad Esfahbod e9407a2bd2 Use shared_ptr<hb_set_t> in one place
See if valgrind is happy...
2022-06-02 12:00:43 -06:00
Behdad Esfahbod a42a703cb6 [shared_ptr] Clear p in destructor 2022-06-02 12:00:43 -06:00
Behdad Esfahbod f0a0dcad70 [test-map] Test hashing shared_ptr 2022-06-02 11:25:56 -06:00
Behdad Esfahbod 4c1b5d9ece Whitespace 2022-06-02 11:25:11 -06:00
Behdad Esfahbod b9230c5425 [map] Fix has() 2022-06-02 11:23:38 -06:00
Behdad Esfahbod 97ea10a63a Remove old nullptr_t hacks
Were used for hashmap before.
2022-06-02 11:23:38 -06:00
Behdad Esfahbod 3f78a71ca0 [map] Finally! Just can usd hb_hashmap_t<obj_t, obj_t>
Yay!
2022-06-02 11:23:37 -06:00
Behdad Esfahbod 0ccab339f9 [map] Remove invalid-key template arguments since unused 2022-06-02 11:23:37 -06:00
Behdad Esfahbod 3f6a8f69a0 [map] Remove invalid-key special-casing
Can override invalid-key value now.
2022-06-02 11:23:37 -06:00
Behdad Esfahbod 5328b73fba [map] Reduce map item size again 2022-06-02 11:23:37 -06:00
Behdad Esfahbod 4f58ae60eb [map] Keep is_used, is_tombstone as booleans 2022-06-02 11:23:37 -06:00
Behdad Esfahbod 7ec3aad20f [shared_ptr] Fix hb_hash() crash on nullptr 2022-06-02 18:22:05 +01:00
Behdad Esfahbod 4d646773cf [cplusplus] Make .reference() return T* 2022-06-02 18:22:05 +01:00
Behdad Esfahbod 7e7a4a8f05 [cplusplus] Fix build 2022-06-02 18:22:05 +01:00
Behdad Esfahbod a089d91fda [hash] Adjust hash for shared_ptr, implement it for std::hash 2022-06-02 18:22:05 +01:00
Behdad Esfahbod e037325efb [hash] Remove custom hash, rely on std::hash 2022-06-02 18:22:05 +01:00
Behdad Esfahbod 0d3d5b62ae [cplusplus] Adjustments 2022-06-02 18:22:05 +01:00
Behdad Esfahbod 0b35940a72 Make hb::shared_ptr hashable 2022-06-02 18:22:05 +01:00
Behdad Esfahbod 3817bdfd7f [hb.hh] Include hb-cplusplus.hh 2022-06-02 18:22:05 +01:00
Behdad Esfahbod e0f3cab246 [cplusplus] Add hb-cplusplus.hh
Fixes https://github.com/harfbuzz/harfbuzz/issues/2152
2022-06-02 18:22:05 +01:00
Garret Rieger 98aaecd397 [subset] fix data race touching Crap() in cff subsetting. 2022-06-01 22:50:35 +01:00
Behdad Esfahbod c88a6a9ec3 [face] Remove const from get_user_data prototype
This was done by mistake.

Since the returned user_data can be changed, face should not be marked
const. Other object types follow this parttern.
2022-06-01 09:46:41 -06:00
Behdad Esfahbod bc6ecaa262 [font-funcs] Handle case of null func but non-null destroy or user-data 2022-06-01 16:38:12 +01:00
Behdad Esfahbod 88ccbd2c43 [font-funcs] Optimize user-data/destroy storage
Fixes https://github.com/harfbuzz/harfbuzz/issues/2427
2022-06-01 16:38:12 +01:00
Behdad Esfahbod e421613e8f [sbix] Fix conditional 2022-06-01 09:07:57 -06:00
Behdad Esfahbod 55b911d863 [buffer] Mark getter functions as taking const buffer
Fixes https://github.com/harfbuzz/harfbuzz/issues/2873
2022-06-01 08:13:06 -06:00
Behdad Esfahbod 9e1479b5f0 [morx] Limit context length
Fixes https://github.com/harfbuzz/harfbuzz/issues/3097
2022-06-01 07:54:45 -06:00
Behdad Esfahbod 62e803b361 [sbix] Limit glyph extents
Fixes https://github.com/harfbuzz/harfbuzz/issues/3557
2022-06-01 07:39:20 -06:00
Behdad Esfahbod cd05d187c8 [font] Fix undefined-behavior when scales are negative
Fixes https://github.com/harfbuzz/harfbuzz/issues/3555
2022-06-01 07:27:53 -06:00
Behdad Esfahbod fc4d42ff99 [ft] Add API to notify that hb_font_t changed
New API:
- hb_ft_hb_font_changed()

Mostly reverts 56e0ff9ea1

Related https://github.com/harfbuzz/harfbuzz/issues/2270

Fixes https://github.com/harfbuzz/harfbuzz/issues/3619
2022-06-01 14:12:38 +01:00
Behdad Esfahbod e246723f0c [shape] Fail shaping internally if buffer ops exceeded 2022-06-01 05:00:06 -06:00