src/hb-ot-shape.cc


Log

Author Commit Date CI Message
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.
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!
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.
Behdad Esfahbod d785fa0c 2013-05-20T09:18:52 Minor refactoring
Behdad Esfahbod 127daf15 2013-05-20T09:11:35 Arabic mark width-zeroing regression Mozilla Bug 873902 - Display Arabic text with diacritics is bad https://bugzilla.mozilla.org/show_bug.cgi?id=873902
Behdad Esfahbod ba87b8fc 2013-02-21T15:23:39 Move code around
Behdad Esfahbod c462b32d 2013-02-15T07:51:47 Disable automatic segment properties guessing Before, if one called hb_shape() without setting script, language, and direction on the buffer, hb_shape() was calling hb_buffer_guess_segment_properties() on the user's behalf to guess these. This is very dangerous, since any serious user of HarfBuzz must set these properly (specially important is direction). So now, we don't guess properties by default. People not setting direction will get an abort() now. If the old behavior is desired (fragile, good for simple testing only), users can call hb_buffer_guess_segment_properties() on the buffer just before calling hb_shape().
Behdad Esfahbod 038c98f6 2013-02-15T07:41:07 Allow disabling of TrueType kerning Responds to the same feature tag that GPOS kerning does: 'kern' for horizontal and 'vkrn' for vertical.
Behdad Esfahbod ee9c3a17 2013-02-15T06:22:26 Minor refactoring
Behdad Esfahbod ec544866 2013-02-14T11:25:10 Add hb_ot_map_feature_flags_t Code cleanup. No (intended) functional change.
Behdad Esfahbod e7ffcfaf 2013-02-14T11:05:56 Clean-up add_bool_feature
Behdad Esfahbod 0291a652 2013-02-13T05:57:24 Further adjust mark advance zeroing This is a followup to 568000274c8edb5f41bc4f876ce21fcc8bdaeed8. Looks like in the Latin shaper, Uniscribe zeroes all Unicode NSM advances *after* GPOS, not before. Match that. Can be tested using DejaVu Sans Mono, since that font has GPOS rules to zero the mark advances on its own.
Behdad Esfahbod 56800027 2013-02-12T09:44:57 Adjust mark advance-width zeroing logic for Myanmar Before, we were zeroing advance width of attached marks for non-Indic scripts, and not doing it for Indic. We have now three different behaviors, which seem to better reflect what Uniscribe is doing: - For Indic, no explicit zeroing happens whatsoever, which is the same as before, - For Myanmar, zero advance width of glyphs marked as marks *in GDEF*, and do that *before* applying GPOS. This seems to be what the new Win8 Myanmar shaper does, - For everything else, zero advance width of glyphs that are from General_Category=Mn Unicode characters, and do so before applying GPOS. This seems to be what Uniscribe does for Latin at least. With these changes, positioning of all tests matches for Myanmar, except for the glitch in Uniscribe not applying 'mark'. See preivous commit.
Behdad Esfahbod 51bb498b 2012-11-16T14:08:05 Minor
Behdad Esfahbod 5a08ecf9 2012-11-16T13:34:29 Implement hb_ot_layout_get_glyph_class()
Behdad Esfahbod eba312c8 2012-11-16T12:39:23 Plumbing to get shape plan and font into complex decompose function So we can handle Sinhala split matras smartly... Coming soon.
Behdad Esfahbod 3f82f8ff 2012-11-15T18:45:31 Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties()
Behdad Esfahbod f3064103 2012-11-15T18:39:46 Bunch of independent changes (ouch) API additions: hb_segment_properties_t HB_SEGMENT_PROPERTIES_DEFAULT hb_segment_properties_equal() hb_segment_properties_hash() hb_buffer_set_segment_properties() hb_buffer_get_segment_properties() hb_ot_layout_glyph_class_t hb_shape_plan_t hb_shape_plan_create() hb_shape_plan_create_cached() hb_shape_plan_get_empty() hb_shape_plan_reference() hb_shape_plan_destroy() hb_shape_plan_set_user_data() hb_shape_plan_get_user_data() hb_shape_plan_execute() hb_ot_shape_plan_collect_lookups() API changes: Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups(). New header file: hb-shape-plan.h And a bunch of prototyped but not implemented stuff. Coming soon. (Tests fail because of the prototypes right now.)
Behdad Esfahbod aec89de5 2012-11-15T16:15:42 Add / modify set API a bit
Behdad Esfahbod 865745b5 2012-11-14T13:48:26 Don't do fallback positioning for Indic and Thai shapers
Behdad Esfahbod 0c7df222 2012-11-13T14:42:35 Add buffer flags New API: hb_buffer_flags_t HB_BUFFER_FLAGS_DEFAULT HB_BUFFER_FLAG_BOT HB_BUFFER_FLAG_EOT HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES hb_buffer_set_flags() hb_buffer_get_flags() We use the BOT flag to decide whether to insert dottedcircle if the first char in the buffer is a combining mark. The PRESERVE_DEFAULT_IGNORABLES flag prevents removal of characters like ZWNJ/ZWJ/...
Behdad Esfahbod 0736915b 2012-11-13T12:35:35 [Indic] Decompose Sinhala split matras the way old HarfBuzz / Pango did Had to do some refactoring to make this happen... Under uniscribe bug compatibility mode, we still plit them Uniscrie-style, but Jonathan and I convinced ourselves that there is no harm doing this the Unicode way. This change makes that happen, and unbreaks free Sinhala fonts.
Behdad Esfahbod 9b37b4c5 2012-11-12T18:23:38 Make planner available to complex shaper choosing logic
Behdad Esfahbod cf3afd89 2012-10-25T16:32:54 Rename and revamp is_zero_width() to be is_default_ignorable() That's really the logic desired. Except that MONGOLIAN VOWEL SEPARATOR is not default_ignorable but it really should be. Reported to Unicode. Based on suggestion from Konstantin Ritt.
Behdad Esfahbod fecdfa95 2012-10-07T17:19:58 Fixup hb_ot_shape_closure() Broke it when merged cmap mapping and normalizer. Ouch!
Behdad Esfahbod f2eb3fa9 2012-09-25T21:35:35 [OT] Only insert dottedcircle if at the beginning of paragraph If the first char in the run is a combining mark, but there is text before the run, don't insert dottedcircle. Part of addressing: https://bugzilla.redhat.com/show_bug.cgi?id=858736
Behdad Esfahbod 028a1706 2012-09-06T14:25:48 Refactor common macro
Behdad Esfahbod fabd3113 2012-09-05T22:19:28 [OT] Port Arabic fallback shaping to synthetic GSUB All of init/medi/fina/isol and rlig implemented. Let there be dragons... ⻯
Behdad Esfahbod 6912e476 2012-09-01T20:38:45 [OT] Insert dotted-circle for run-initial marks Unfortunately if the font has GPOS and 'mark' feature does not position mark on dotted-circle, our inserted dotted-circle will not get the mark repositioned to itself. Uniscribe cheats here. If there is no GPOS however, the fallback positioning kicks in and sorts this out. I'm not willing to address the first case.
Behdad Esfahbod 3992b5ec 2012-09-01T19:20:41 Move code around
Behdad Esfahbod 784f29d0 2012-08-31T14:06:26 Minor
Behdad Esfahbod 0ccf9b64 2012-08-29T11:53:26 Move code around
Behdad Esfahbod 2fcbbdb4 2012-08-29T11:11:54 Port Arabic fallback ligating to share code with GSUB This will eventually allow us to skip marks, as well as (fallback) attach marks to ligature components of fallback-shaped Arabic. That would be pretty cool. I kludged GDEF props in, so mark-skipping works, but the produced ligature id/components will be cleared later by substitute_start() et al. Perhaps using a synthetic table for Arabic fallback shaping was a better idea. The current approach has way too many layering violations...
Behdad Esfahbod 9f9f04c2 2012-08-11T18:34:13 [OT] Unbreak Thai shaping and fallback Arabic shaping The merger of normalizer and glyph-mapping broke shapers that modified text stream. Unbreak them by adding a new preprocess_text shaping stage that happens before normalizing/cmap and disallow setup_mask modification of actual text.
Behdad Esfahbod 07d68280 2012-08-10T03:28:50 Minor
Behdad Esfahbod b00321ea 2012-08-09T22:33:32 [OT] Avoid calling get_glyph() twice Essentially move the glyph mapping to normalization process. The effect on Devanagari is small (but observable). Should be more observable in simple text, like ASCII.
Behdad Esfahbod 12c0875e 2012-08-09T22:00:53 [OT] Remove redundant check
Behdad Esfahbod 5c60b70c 2012-08-09T21:58:07 [OT] More code shuffling around Preparing for merging map_glyphs() and normalize().
Behdad Esfahbod a02d8648 2012-08-08T18:04:29 Add check-exported-symbols.sh And misc linking fixes.
Behdad Esfahbod 4c8ac4f4 2012-08-08T17:44:19 Misc minor fixes
Behdad Esfahbod 9c929abd 2012-08-08T14:33:37 Minor renaming
Behdad Esfahbod affaf8a0 2012-08-07T22:41:38 [OT] Start adding fallback positioning Used when there is no GPOS.
Behdad Esfahbod 7e4920fd 2012-08-07T22:32:23 Minor
Behdad Esfahbod f4e48adc 2012-08-07T21:12:49 [OT] Apply 'rclt' feature in horizontal mode 'rclt' is "Required Contextual Forms" being proposed by Microsoft. It's like 'calt', but supposedly always on. We apply 'calt' anyway, and now apply this too.
Behdad Esfahbod 71baea00 2012-08-03T17:40:07 [OT] Use general-category, not GDEF class, to decide to zero mark advances At this point, the GDEF glyph synthesis looks pointless. Not that I have many fonts without GDEF lying around. As for mark advance zeroing when GPOS not available, that also is being replaced by proper fallback mark positioning soon.
Behdad Esfahbod a8c6da90 2012-08-02T10:46:34 [OT] Add per-complex-shaper shape_plan data Hookup some Indic data to it. More to come.
Behdad Esfahbod 8bb5deba 2012-08-02T10:07:58 [OT] Pipe shape_plan down to pause_callbacks
Behdad Esfahbod 16c6a27b 2012-08-02T09:38:28 [OT] Port complex_shaper to planner/plan
Behdad Esfahbod 5393e3a6 2012-08-02T09:24:35 [OT] Minor refactoring