src/hb-ot-shape.cc


Log

Author Commit Date CI Message
Behdad Esfahbod 6c222764 2018-05-25T16:21:27 Add HB_DISALLOW_COPY_AND_ASSIGN
Behdad Esfahbod f673cfbd 2018-05-07T13:58:32 Support scripts that are written both LTR and RTL Right now only Old Italic is marked as such. Fixes https://github.com/harfbuzz/harfbuzz/issues/1000
Behdad Esfahbod a60ba796 2018-05-01T19:01:25 s/finish/fini For consistency.
Behdad Esfahbod ac2ece3e 2018-03-07T15:52:42 [ot] Comment out AAT include
Ebrahim Byagowi 1ab16f45 2018-02-24T12:49:42 [aat] Implement trak logic (#816)
Behdad Esfahbod eada749e 2018-02-21T00:35:23 Use HB_SET_VALUE_INVALID consistently
Behdad Esfahbod 046690a4 2018-01-17T16:59:55 [aat] Add hb_aat_apply_context_t
Behdad Esfahbod fd034490 2018-01-17T16:46:51 Rename hb_apply_context_t to hb_ot_apply_context_t
Behdad Esfahbod ee16b9d8 2018-01-12T11:28:09 Revert accidental morx enablement
Behdad Esfahbod cdfa801f 2018-01-12T11:12:20 [aat] Tweak previous commit
Behdad Esfahbod 3b1e97f3 2018-01-10T03:35:20 Add HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES New API: HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES hb-shape / hb-view --remove-default-ignorables One more text-rendering-tests test passing. Eleven failing.
Behdad Esfahbod 0ed69c94 2018-01-10T02:49:36 Disable processing of morx table in ot shaper So I can merge this to master...
Behdad Esfahbod 748b989a 2018-01-09T17:55:17 [aat/morx] Implement NoncontextualSubtables Also makes hb-ot-shape call morx for now instead of GSUB... Just for testing.
Behdad Esfahbod 4cf3ab1d 2018-01-09T16:32:58 Minor
ebraminio 7c6937e7 2017-11-20T14:49:22 Move all references of old url to the new address (#622)
Behdad Esfahbod baf7779d 2017-11-14T21:53:48 Limit how much recursion GSUB/GPOS does This only counts recursions right now. Good start. Hopefully... Fixes https://github.com/behdad/harfbuzz/issues/429
Behdad Esfahbod 8b9d9b71 2017-10-22T17:48:06 Fix set initialization issues
Behdad Esfahbod dbdbfe3d 2017-10-15T12:11:08 Use nullptr instead of NULL
Behdad Esfahbod 9786fcd8 2017-10-03T17:22:43 Fix GPOS v_origin ordering This should affect mark attachment in vertical text. I have no font to test, but this sounds the right order. Noticed while debugging https://github.com/behdad/harfbuzz/issues/532
Behdad Esfahbod 7cc34804 2017-09-04T20:04:59 [unsafe-to-break] Fix unsafe-to-break for cluster-level=1 Fixes tests/shaping/tests/cluster.tests
Behdad Esfahbod c449d2d8 2017-08-30T17:28:22 [unsafe-to-break] Mark during fraction-slash formation Fixes tests/automatic-fractions.tests
Behdad Esfahbod 1c17c2bd 2017-08-11T19:06:07 [unsafe-to-break] Copy flag to all glyphs in a cluster Makes consumption easier.
Behdad Esfahbod e2a2b5b2 2017-08-10T20:10:12 [unsafe-to-break] Be careful with flag propagation when merging clusters
Behdad Esfahbod 5aec2fb8 2017-03-02T11:46:33 Remove TODO item that is not going to happen
Behdad Esfahbod 466b3e58 2017-02-03T16:43:25 Shuffle things around a bit
Khaled Hosny 2452543f 2017-01-18T22:48:13 [ot] Fix automatic fraction for RTL scripts (#405) The numbers for right-to-left scripts are processed also from right to left, so the order of applying “numr” and “dnom” features should be reversed in such case. Fixes https://github.com/behdad/harfbuzz/issues/395
Behdad Esfahbod e2b87805 2016-12-22T14:40:19 Disable OTL processing for Hebrew if GPOS doesn't have Hebrew subtable New approach to fix this: https://github.com/behdad/harfbuzz/commit/69f9fbc4200442a35484d3c790ae8f4979be5d60 Previous approach was reverted as it was too broad. See context: https://github.com/behdad/harfbuzz/issues/347#issuecomment-267838368 With U+05E9,U+05B8,U+05C1,U+05DC and Arial Unicode, we now (correctly) disable GDEF and GPOS, so we get results very close to Uniscribe, but slightly different since our fallback position logic is not exactly the same: Before: [gid1166=3+991|gid1142=0+737|gid5798=0+1434] After: [gid1166=3+991|gid1142=0@402,-26+0|gid5798=0+1434] Uniscribe: [gid1166=3+991|gid1142=0@348,0+0|gid5798=0+1434]
Behdad Esfahbod 1a0f4aa6 2016-12-22T13:33:54 Revert "Synthesize GDEF glyph class for any glyph that does not have one in GDEF" This reverts commit 69f9fbc4200442a35484d3c790ae8f4979be5d60. See https://github.com/behdad/harfbuzz/issues/347#issuecomment-268873401 Fixes https://github.com/behdad/harfbuzz/issues/347
Behdad Esfahbod 0aedfd59 2016-09-28T17:05:43 [GX] Apply 'rvrn' feature before any other feature
Behdad Esfahbod 72ada4f0 2016-09-10T03:57:24 [GX] Hook up feature variations Shape-plan caching is not implemented.
Behdad Esfahbod 69f9fbc4 2016-03-17T11:59:43 Synthesize GDEF glyph class for any glyph that does not have one in GDEF Previously we only synthesized GDEF glyph classes if the glyphClassDef array in GDEF was null. This worked well enough, and is indeed what OpenType requires: "If the font does not include a GlyphClassDef table, the client must define and maintain this information when using the GSUB and GPOS tables." That sentence does not quite make sense since one needs Unicode properties as well, but is close enough. However, looks like Arial Unicode as shipped on WinXP, does have GDEF glyph class array, but defines no classes for Hebrew. This results in Hebrew marks not getting their widths zeroed. So, with this change, we synthesize glyph class for any glyph that is not specified in the GDEF glyph class table. Since, from our point of view, a glyph not being listed in that table is a font bug, any unwanted consequence of this change is a font bug :). Note that we still don't get the same rendering as Uniscribe, since Uniscribe seems to do fallback positioning as well, even though the font does have a GPOS table (which does NOT cover Hebrew!). We are not going to try to match that though. Test string for Arial Unicode: U+05E9,U+05B8,U+05C1,U+05DC Before: [gid1166=3+991|gid1142=0+737|gid5798=0+1434] After: [gid1166=3+991|gid1142=0+0|gid5798=0+1434] Uniscribe: [gid1166=3+991|gid1142=0@348,0+0|gid5798=0+1434] Note that our new output matches what we were generating until July 2014, because the Hebrew shaper used to zero mark advances based on Unicode, NOT GDEF. That's 9e834e29e0b657f0555df1ab9cea79ff7abcf08d. Reported by Greg Douglas.
Behdad Esfahbod 8b5bc141 2016-02-24T19:05:23 Add get_nominal_glyph() and get_variation_glyph() instead of get_glyph() New API: - hb_font_get_nominal_glyph_func_t - hb_font_get_variation_glyph_func_t - hb_font_funcs_set_nominal_glyph_func() - hb_font_funcs_set_variation_glyph_func() - hb_font_get_nominal_glyph() - hb_font_get_variation_glyph() Deprecated API: - hb_font_get_glyph_func_t - hb_font_funcs_set_glyph_func() Clients that implement their own font-funcs are encouraged to replace their get_glyph() implementation with a get_nominal_glyph() and get_variation_glyph() pair. The variation version can assume that variation_selector argument is not zero.
Behdad Esfahbod 815bdd77 2016-02-22T18:22:44 In cluster-level=0, group ZWJ/ZWNJ with previous cluster This better emulates Unicode grapheme clusters. Note that Uniscribe does NOT do this, but should be harmless with most clients, and improve fallback with clients that use HarfBuzz cluster as unit of fallback. Fixes https://github.com/behdad/harfbuzz/issues/217
Behdad Esfahbod 89137e32 2016-02-22T16:00:59 Minor
Behdad Esfahbod 62c27111 2016-02-22T15:07:20 [coretext] Limit grapheme-cluster forming to cluster-level=0
Behdad Esfahbod 7d8d58ac 2016-02-11T16:34:28 [GPOS] Divide position_finish() into two phases, for advances and offsets Right now the position_finish_advances() is empty. To be used for spacing attachments proposal later.
Behdad Esfahbod 84742315 2016-02-11T16:27:41 [ot] Minor shuffling code around
Behdad Esfahbod 660c9d3f 2016-02-11T12:14:27 Remove font-dependent ASCII-only perf hack Is confusing. I already hit it myself. Remove. We can optimize ASCII based on Unicode properties. But should not do based on assumptions on the font.
Behdad Esfahbod eaadcbbc 2016-02-10T18:29:54 Remove now-unused mark zeroing BY_UNICODE
Behdad Esfahbod 35d18585 2015-11-26T19:30:37 Fix a few docs blocks
Behdad Esfahbod ea512f71 2015-11-26T19:22:22 Use C-style casts instead of compare to 0, to convert hb_bool_t to bool
Behdad Esfahbod 67a36a72 2015-11-26T18:48:42 Fix vertical GPOS This was brorken earlier, though, it's really hard to notice it. Unlike the glyph_h_origin(), an unset glyph_v_origin() does NOT mean that the vertical origin is at 0,0. Related to https://github.com/behdad/harfbuzz/issues/187
Behdad Esfahbod 766963ad 2015-11-24T15:38:43 Merge pull request #114 from ThePhD/vc++-fixes Fix all VC++ warnings and errors
Behdad Esfahbod abadc171 2015-11-18T17:52:08 Try to better handle OOM situations Fixes assert fail in https://github.com/behdad/harfbuzz/issues/161 with libharfbuzz-fuzzing.
Behdad Esfahbod 4301703b 2015-11-05T23:44:59 Limit buffer max size growth https://github.com/behdad/harfbuzz/issues/161
Behdad Esfahbod 13686337 2015-11-05T13:24:15 Add new shaper method postprocess_glyphs() Unused currently. To be used for Syriac stretch implementation. https://github.com/behdad/harfbuzz/issues/141
Behdad Esfahbod e95eb23a 2015-11-04T22:55:11 Don't try zeroing marks by GDEF if there are no non-ASCII This one is a hack, but should be ok.
Behdad Esfahbod 7fa54ed7 2015-11-04T22:54:49 Don't try zeroing mark attachments by Unicode if there's no non-ASCII
Behdad Esfahbod 0f407325 2015-11-04T22:28:44 Minor
Behdad Esfahbod 497a6c20 2015-11-04T22:24:19 Skip forming clusters if text is all ASCII
Behdad Esfahbod 5bc28b5f 2015-11-04T21:53:16 Optimize positioning for when h_origin is nil
Behdad Esfahbod bee901b3 2015-11-04T19:28:17 Optimize positioning direction calculations It makes the binary smaller AND faster. Yumm!
Behdad Esfahbod e3e4bb01 2015-11-04T18:58:02 Don't do fractions if buffer is ASCII-only
Behdad Esfahbod 6986208b 2015-11-04T18:46:22 Optimize runs without Default_Ignorable's Now that we have a buffer-wide scratch flags facility, use it to optimize away a few passes.
Behdad Esfahbod 49ef6309 2015-11-04T17:27:07 Adjust the width of various spaces if font does not cover them See discussion here: https://github.com/behdad/harfbuzz/commit/81ef4f407d9c7bd98cf62cef951dc538b13442eb There's no way to disable this fallback, but I don't think it would be needed. Let's hope for the best! Fixes https://github.com/behdad/harfbuzz/issues/153
Behdad Esfahbod aa7044de 2015-11-04T16:25:57 Generalize flags types
Behdad Esfahbod f883de66 2015-09-01T16:23:40 [OT] Merge /before/ reordering
Behdad Esfahbod e47b772a 2015-08-18T18:42:47 [ot] Change buffer content type right after we map to glyphs Needed for upcoming debug output changes.
ThePhD 5c99cf93 2015-08-14T01:02:00 Merge branch 'master' into vc++-fixes
Behdad Esfahbod 0f98fe88 2015-07-23T11:52:11 [ot] Search globally for 'vert' feature if not found in specified script/lang Fixes https://github.com/behdad/harfbuzz/issues/63
Behdad Esfahbod f327aacf 2015-07-23T11:32:59 [ot] Minor
Behdad Esfahbod 8cfbc304 2015-07-22T18:41:10 Fix hide-default-ignorables after f0010dfd01ef4a927b0bdc175dd4e343a8637174 We can't delete things before hb_ot_layout_position_finish(). So, just zero the advance before it, and remove later.
Behdad Esfahbod 2dbd3d29 2015-07-22T18:28:39 Fix hide-ignorables if font doesn't have space glyph Was broken by 82b521aeb7cc73879b44ca4278d6fa8b4347527f, as we have positioning data by then and can't use the output buffer. Ouch!
Behdad Esfahbod 4ba796b2 2015-07-22T17:41:31 Refactor _hb_glyph_info_is_default_ignorable()
Behdad Esfahbod f0010dfd 2015-07-22T17:36:23 [ot] Hide default-ignorables before finishing off positioning For example, fixes the following sequence with Arial XP: 628 25cc 651 25cc 64e 3a 20 628 651 34f 64e 628 25cc 64e 25cc 651 3a 20 628 64e 34f 651 Discovered as part of: https://bugs.freedesktop.org/show_bug.cgi?id=85873
Behdad Esfahbod 376d587f 2015-07-22T16:51:12 Implement more granular cluster-merging TODO: Documentation. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=71445
Behdad Esfahbod a60e2cfa 2015-07-22T15:49:08 [ot] Don't rely on cluster numbers for ensure_native_direction()
Behdad Esfahbod 701112da 2015-07-22T15:42:20 [ot] Simplify form_clusters()
Behdad Esfahbod 7b8b63ad 2015-07-22T15:24:26 [ot] Don't mirror character if font doesn't support mirrored character!
ThePhD 8e545d59 2015-06-22T22:29:04 Fix all VC++ warnings and errors in the current commit's builds.
Behdad Esfahbod 5f13bbd9 2015-06-19T13:31:49 When removing default-ignorables, merge clusters Fixes test-shape, and: https://code.google.com/p/chromium/issues/detail?id=497578
Behdad Esfahbod 82b521ae 2015-06-19T11:57:57 Rewrite hide_default_ignorables Separate the loops for the two cases of replacing with space and deleting. For deleting, use the out-buffer machinery. Needed for upcoming cluster merge fix.
Sascha Brawer 01c3a885 2015-06-01T13:22:01 Fix "Since:" tags Based on data from http://upstream-tracker.org/versions/harfbuzz.html Resolves #103
Behdad Esfahbod 982d94ea 2015-01-28T10:51:33 [coretext] Don't generate notdef glyph for default-ignorables As discovered on Chrome Mac: https://code.google.com/p/chromium/issues/detail?id=452326
Behdad Esfahbod 8f3eebf7 2014-08-02T17:18:46 Make sure gsubgpos buffer vars are available during fallback_position Add buffer var allocation asserts to a few key places.
Behdad Esfahbod 2053f369 2014-08-02T16:31:16 Disable 'liga' for vertical text The reason we turned it on is because Kazuraki uses it. But that's not reason enough. Until the OpenType spec gets its act together re adding design-direction to lookups, this is better user experience.
Behdad Esfahbod 763e5466 2014-08-02T16:17:44 Make it easier to use HB_BUFFER_FLAG_BOT/EOT Previously, we expected users to provide BOT/EOT flags when the text *segment* was at paragraph boundaries. This meant that for clients that provide full paragraph to HarfBuzz (eg. Pango), they had code like this: hb_buffer_set_flags (hb_buffer, (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) | (item_offset + item_length == paragraph_length ? HB_BUFFER_FLAG_EOT : 0)); hb_buffer_add_utf8 (hb_buffer, paragraph_text, paragraph_length, item_offset, item_length); After this change such clients can simply say: hb_buffer_set_flags (hb_buffer, HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT); hb_buffer_add_utf8 (hb_buffer, paragraph_text, paragraph_length, item_offset, item_length); Ie, HarfBuzz itself checks whether the segment is at the beginning/end of the paragraph. Clients that only pass item-at-a-time to HarfBuzz continue not setting any flags whatsoever. Another way to put it is: if there's pre-context text in the buffer, HarfBuzz ignores the BOT flag. If there's post-context, it ignores EOT flag.
Behdad Esfahbod 595d2b96 2014-07-26T18:44:15 Minor
Behdad Esfahbod 7cd33f23 2014-07-17T14:22:11 Micro optimization
Behdad Esfahbod 3b861421 2014-07-16T13:22:05 Fix Mongolian Variation Selectors for fonts without GDEF Originally we fixed those in 79d1007a501fd63c0ba4d51038c513e6b8b94740. However, fonts like MongolianWhite don't have GDEF, but have IgnoreMarks in their LigatureSubstitute init/etc features. We were synthesizing a GDEF class of mark for Mongolian Variation Selectors and as such the ligature lookups where not matching. Uniscribe doesn't do that. I tried with more sophisticated fixes, like, if there is no GDEF and a lookup-flag mismatch happens, instead of rejecting a match, try skipping that glyph. That surely produces some interesting behavior, but since we don't want to support fonts missing GDEF more than we have to, I went for this simpler fix which is to always mark default-ignorables as base when synthesizing GDEF. Micro-test added. Fixes rest of https://bugs.freedesktop.org/show_bug.cgi?id=65258
Behdad Esfahbod 878a2537 2014-07-16T13:21:26 Minor
Behdad Esfahbod ec181e50 2014-07-16T13:10:03 Minor moving around
Behdad Esfahbod 7627100f 2014-07-11T14:54:42 Mark unsigned integer literals with the u suffix Simplifies hb_in_range() calls as the type can be inferred. The rest is obsessiveness, I admit.
Jonathan Kew 798e4185 2014-06-10T13:10:30 When zeroing mark widths for LTR, also adjust offset... ...so that they overstrike preceding glyph. https://github.com/behdad/harfbuzz/pull/43
Behdad Esfahbod 8de20b1e 2014-01-02T14:30:45 Add font->has_glyph()
Behdad Esfahbod 5497a8a2 2013-12-22T20:48:53 Cache various masks on the shape plan
Behdad Esfahbod a7e8bbb0 2013-12-22T19:33:35 Minor fraction mask setting improvement
Behdad Esfahbod 76fff252 2013-12-22T17:55:59 Don't form fractions if only one of numr/dnom exist
Behdad Esfahbod 3aeee519 2013-12-22T16:17:54 Bug 72698 - Automatically support frac / numr / dnom When seeing U+2044 FRACTION SLASH in the text, find decimal digits (Unicode General Category Decimal_Number) around it, and mark the pre-slash digits with 'numr' feature, the post-slash digits with 'dnom' feature, and the whole sequence with 'frac' feature. This beautifully renders fractions with major Windows fonts, and any other font that implements those features (numr/dnom is enough for most fonts.) Not the fastest way to do this, but good enough for a start.
Behdad Esfahbod 73932517 2013-12-21T00:18:18 Initialize masks before mirroring We were throwing away the rtlm feature mask set during mirroring...
Behdad Esfahbod 71b4c999 2013-10-28T00:20:59 Revert "Zero marks by GDEF for Tibetan" This reverts commit d5bd0590ae2fbc7b0dee86385a565aef00ffb835. The reasoning behind that logic was flawed and made under a misunderstanding of the original problem, and caused regressions as reported by Jonathan Kew in thread titled "tibetan marks" in Oct 2013. Apparently I have had fixed the original problem with this commit: 7e08f1258da229dfaf7e1c4b5c41e5bb83906cb0 So, revert the faulty commit and everything seems to be in good shape.
Behdad Esfahbod ac8cd511 2013-10-18T19:33:09 Refactor
Behdad Esfahbod d5bd0590 2013-10-18T16:44:54 Zero marks by GDEF for Tibetan See: http://lists.freedesktop.org/archives/harfbuzz/2013-April/003101.html
Behdad Esfahbod a1f7b285 2013-10-18T01:09:08 [otlayout] Switch over from old is_a_ligature() to IS_LIGATED Impact should be minimal and positive.
Behdad Esfahbod 101303db 2013-10-18T00:42:39 [otlayout] More shuffling around
Behdad Esfahbod 91689de2 2013-10-18T00:21:59 [otlayout] Add _hb_glyph_info_set_glyph_props() No functional change.
Behdad Esfahbod 3ddf892b 2013-10-18T00:02:43 [otlayout] Renaming
Behdad Esfahbod 3d2c4f0c 2013-09-27T17:06:29 Fix hiding of default_ignorables if font doesn't have space glyph Based on patch from Jonathan Kew. See discussion on the list.
Behdad Esfahbod 4b011094 2013-09-13T20:17:42 Move code around I believe I didn't break anything...
Behdad Esfahbod d71c0df2 2013-08-09T09:28:32 Remove vrt2, vkrn, vpal, and valt from default vertical features See thread by John Dagget on the list.