Behdad Esfahbod
fc3c59a1d7
Fix unused var warnings
2015-04-08 13:04:29 -07:00
Behdad Esfahbod
bd047d3b7f
[layout] Minor
2015-02-25 15:43:31 -08:00
Behdad Esfahbod
1a2322134a
[layout] Don't check glyph props against lookup flags when recursing
...
Shouldn't be needed. I have a hard time imagining this breaking any
legitimate use case.
2015-02-25 15:43:30 -08:00
Behdad Esfahbod
095a1257cc
[layout] Port sanitize() to use dispatch()
...
Needed some rework of Extension table. Hopefully I got it right, and
the new template usage doesn't break any compilers...
2015-02-25 15:43:30 -08:00
Behdad Esfahbod
40c58923cb
[layout] Refactor Lookup::dispatch()
2015-02-25 15:43:30 -08:00
Behdad Esfahbod
70366f5d19
[layout] Refactor get_subtable()
2015-02-25 15:43:29 -08:00
Behdad Esfahbod
8e36ccfd4f
[layout] Use dispatch() for add_coverage()
2015-02-25 15:43:29 -08:00
Behdad Esfahbod
50b8dc79da
[layout] Add may_dispatch()
...
No functional change right now.
2015-02-25 15:43:29 -08:00
Behdad Esfahbod
de2118ed7a
Make sanitize() a const method
...
This makes a lot of code safer. We only try modifying the object in one
place, after making sure it's safe to do so. So, do a const_cast<> in
that one place...
2015-02-25 15:43:28 -08:00
Behdad Esfahbod
6759ed95a3
Minor
2015-02-25 15:43:28 -08:00
Behdad Esfahbod
6b599dac1f
Remove unnecessary check in sanitize
2015-02-25 15:43:28 -08:00
Behdad Esfahbod
7788993bc1
[layout] Use setter method to set c->lookup_props
2015-02-25 15:43:25 -08:00
Behdad Esfahbod
241eac9559
Hide internals of lookup accelerators
2015-02-25 15:43:25 -08:00
Behdad Esfahbod
00f6a8e334
[ot] Print format in dispatch trace
2014-12-12 20:36:49 -08:00
Behdad Esfahbod
5c87120b81
Fix misc warnings
...
Fixes https://github.com/behdad/harfbuzz/pull/51
2014-10-14 20:07:31 -07:00
Behdad Esfahbod
8f3eebf7ee
Make sure gsubgpos buffer vars are available during fallback_position
...
Add buffer var allocation asserts to a few key places.
2014-08-02 19:07:49 -04:00
Behdad Esfahbod
7627100f42
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.
2014-07-11 16:22:13 -04:00
Behdad Esfahbod
832a6f99b3
[indic] Don't reorder reph/pref if ligature was expanded
...
Normally if you want to, say, conditionally prevent a 'pref', you
would use blocking contextual matching. Some designers instead
form the 'pref' form, then undo it in context. To detect that
we now also remember glyphs that went through MultipleSubst.
In the only place that this is used, Uniscribe seems to only care
about the "last" transformation between Ligature and Multiple
substitions. Ie. if you ligate, expand, and ligate again, it
moves the pref, but if you ligate and expand it doesn't. That's
why we clear the MULTIPLIED bit when setting LIGATED.
Micro-test added. Test: U+0D2F,0D4D,0D30 with font from:
[1]
https://code.google.com/a/google.com/p/noto-alpha/issues/detail?id=186#c29
2014-06-05 20:36:01 -04:00
Behdad Esfahbod
b5be231720
[gsub] Adjust single-length ligature subst to act like single subst
2014-06-05 19:00:22 -04:00
Behdad Esfahbod
aae69451df
[gsub] Minor shuffling
2014-06-05 19:00:08 -04:00
Behdad Esfahbod
b6b304f12b
[ot] Add TODO re zero-len MultipleSubst sequences
2014-06-05 17:12:54 -04:00
Behdad Esfahbod
6faff8e413
Add static storage classifier to inline functions
...
Before we were just relying on the compiler inlining them and not
leaving a trace in our public API. Try to fix. Hopefully not
breaking anyone's build.
2014-04-28 14:30:44 -07:00
Behdad Esfahbod
333cc6e2d1
[otlayout] Remove unused is_inplace()
...
Patch from Jonathan Kew.
2013-10-30 17:30:11 +00:00
Behdad Esfahbod
101303dbf7
[otlayout] More shuffling around
2013-10-18 11:21:15 +02:00
Behdad Esfahbod
91689de260
[otlayout] Add _hb_glyph_info_set_glyph_props()
...
No functional change.
2013-10-18 11:21:15 +02:00
Behdad Esfahbod
3ddf892b53
[otlayout] Renaming
2013-10-18 11:21:15 +02:00
Behdad Esfahbod
03058c3d1e
[otlayout] Remove two unused HB_OT_LAYOUT_GLYPH_PROPS_* values
2013-10-17 20:55:34 +02:00
Behdad Esfahbod
49901862e3
[otlayout] Guard against use of ReverseChain through Context
2013-10-17 19:48:51 +02:00
Behdad Esfahbod
e714fe6d6a
[otlayout] Simplify ligate_input()
...
Shouldn't change behavior at all, but is faster / more robust.
2013-10-17 13:49:51 +02:00
Behdad Esfahbod
6b65a76b40
[otlayout] Fix (Chain)Context recursion!
...
Previously we only supported recursive sublookups with
ascending indices. We were also not correctly handling
non-1-to-1 recursed lookups.
Fix all that!
Fixes the three tests in test/shaping/tests/context-matching.tests,
which were derived from NotoSansBengali and NotoSansDevanagari
among others.
2013-10-14 18:54:51 +02:00
Behdad Esfahbod
6c48f20eea
[otlayout] Add structs for JSTF table
2013-09-09 15:43:10 -04:00
Behdad Esfahbod
45f3d980c9
[OTLayout] Merge / templateize apply_string()
2013-05-04 16:04:04 -04:00
Behdad Esfahbod
780cd930a9
[OTLayout] Minor
2013-05-04 16:04:04 -04:00
Behdad Esfahbod
2e0c44f4be
[OTLayout] Add is_inplace() method to GSUB
2013-05-04 16:04:04 -04:00
Behdad Esfahbod
5d59f99920
[OTLayout] Make MultipleSubst in-place for sequences of len=1
2013-05-02 15:39:16 -04:00
Behdad Esfahbod
54f84a6b85
[OTLayout] Whitespace
2013-05-02 15:39:16 -04:00
Behdad Esfahbod
0dc3a4e034
Obssesive optimization
...
Not measurable by any means, but conceptually this is faster since
the mask matches more often than the digest.
2013-04-17 23:04:03 -04:00
Behdad Esfahbod
ee5464d17f
[OTLayout] Move code around
2013-03-09 01:59:30 -05:00
Behdad Esfahbod
9c5a9ee967
[OTLayout] Rename process() to dispatch()
2013-03-09 01:55:04 -05:00
Behdad Esfahbod
99fa9ea020
Minor
2013-02-15 11:47:24 -05:00
Behdad Esfahbod
607feb7cff
[OTLayout] Ignore default-ignorables when matching GSUB/GPOS
...
When matching lookups, be smart about default-ignorable characters.
In particular:
Do nothing specific about ZWNJ, but for the other default-ignorables:
If the lookup in question uses the ignorable character in a sequence,
then match it as we used to do. However, if the sequence match will
fail because the default-ignorable blocked it, try skipping the
ignorable character and continue.
The most immediate thing it means is that if Lam-Alef forms a ligature,
then Lam-ZWJ-Alef will do to. Finally!
One exception: when matching for GPOS, or for backtrack/lookahead of
GSUB, we ignore ZWNJ too. That's the right thing to do.
It certainly is possible to build fonts that this feature will result
in undesirable glyphs, but it's hard to think of a real-world case
that that would happen.
This *does* break Indic shaping right now, since Indic Unicode has
specific rules for what ZWJ/ZWNJ mean, and skipping ZWJ is breaking
those rules. That will be fixed in upcoming commits.
2013-02-14 12:57:50 -05:00
Behdad Esfahbod
407fc12466
[OTLayout] Remove bogus caching of glyph property
2013-02-13 11:13:06 -05:00
Behdad Esfahbod
8303593ba1
Minor
...
Use pointers instead of references, in preparation for upcoming change.
2012-12-04 17:08:41 -05:00
Behdad Esfahbod
3038ae6adb
[OTLayout] Minor
2012-11-30 08:24:13 +02:00
Behdad Esfahbod
b67881b171
[OTLayout] Remove operator() from Coverage
2012-11-24 19:13:55 -05:00
Behdad Esfahbod
4c4e8f0e75
[OTLayout] Reuse apply context for recursion
2012-11-24 01:13:20 -05:00
Behdad Esfahbod
26514d51b6
[OTLayout] More collect_glyphs()
2012-11-23 18:13:48 -05:00
Behdad Esfahbod
c6fb843f2a
[OTLayout] Templatize process_recurse_func
2012-11-23 18:04:08 -05:00
Behdad Esfahbod
9b34677f36
[OTLayout] Clean up closure() a bit
2012-11-23 17:55:40 -05:00
Behdad Esfahbod
f48ec0e834
[OTLayout] Add process() tracing
2012-11-23 17:23:41 -05:00
Behdad Esfahbod
ed2e135944
[OTLayout] More Extension templatizing
2012-11-23 17:10:40 -05:00
Behdad Esfahbod
7dddd4e72b
[OTLayout] More templatizing Extension
2012-11-23 17:04:55 -05:00
Behdad Esfahbod
653eeb2645
Make Extension a template
2012-11-23 16:57:36 -05:00
Behdad Esfahbod
08f1eede1b
Minor
2012-11-23 16:51:43 -05:00
Behdad Esfahbod
be218c688c
Pass this object to trace macros
2012-11-23 15:32:14 -05:00
Behdad Esfahbod
c779d82b2f
Fix warnings
2012-11-23 14:09:21 -05:00
Behdad Esfahbod
ec35a72a44
[OTLayout] Port apply() operator to process() template
2012-11-22 16:33:46 -05:00
Behdad Esfahbod
2005fa5340
[OTLayout] Port would_apply() and get_coverage() to process() templates
2012-11-22 16:33:46 -05:00
Behdad Esfahbod
44fc237b53
[OTLayout] Port closure() to process() template
2012-11-22 16:33:46 -05:00
Behdad Esfahbod
e8cfdd7fa8
Start implementing collect_glyphs() operation
...
Not functional yet.
2012-11-16 19:07:06 -08:00
Behdad Esfahbod
7d52e6601f
Whitespace
2012-11-16 18:49:54 -08:00
Behdad Esfahbod
5a08ecf920
Implement hb_ot_layout_get_glyph_class()
2012-11-16 13:34:29 -08:00
Behdad Esfahbod
0bc7a38463
[OT] Fix ReverseChainingSubst
...
We should make it clear that we don't want output buffer in this case,
otherwise buffer->backtrack_len() would be wrong.
2012-10-29 22:02:45 -07:00
Behdad Esfahbod
fabd3113a9
[OT] Port Arabic fallback shaping to synthetic GSUB
...
All of init/medi/fina/isol and rlig implemented.
Let there be dragons... ⻯
2012-09-06 00:51:44 -04:00
Behdad Esfahbod
1d3947a6bd
Minor
2012-09-04 22:42:17 -04:00
Behdad Esfahbod
b3b89b6658
[OT] Add SubstLookup serialize API
2012-09-04 21:28:33 -04:00
Behdad Esfahbod
a930c68e9c
[OT] More serialize. Implements all basic GSUB subtables
2012-09-04 19:16:09 -04:00
Behdad Esfahbod
1b38b4e817
Minor
2012-09-04 18:17:21 -04:00
Behdad Esfahbod
2bd9fe3598
Refactor
2012-09-04 15:15:19 -04:00
Behdad Esfahbod
2941683358
[OT] Implement serialize() for AlternateSubst
2012-09-03 23:31:14 -04:00
Behdad Esfahbod
1f07e3382a
[OT] Implement serialize() for MultiSubst
2012-09-03 23:28:34 -04:00
Behdad Esfahbod
4912030dfb
Minor
2012-09-03 21:00:48 -04:00
Behdad Esfahbod
c61be03d6d
[OT] A bit more serialize
2012-09-01 21:49:44 -04:00
Behdad Esfahbod
abcc5ac1fd
[OT] Improve serialize syntax
...
For some definition of improvement...
2012-09-01 21:30:17 -04:00
Behdad Esfahbod
bc5be24014
[OT] Restart work on serialize()
2012-09-01 21:25:20 -04:00
Behdad Esfahbod
5e399a8a45
Minor
2012-08-29 10:40:49 -04:00
Behdad Esfahbod
a177d027d1
[GSUB] Move ligation logic over
2012-08-28 23:18:22 -04:00
Behdad Esfahbod
191fa885d9
[GSUB] Merge Ligature and context input matching
...
Looks better now...
2012-08-28 22:58:55 -04:00
Behdad Esfahbod
93814ca7dc
Start converging Ligature and match_input
2012-08-28 22:39:10 -04:00
Behdad Esfahbod
7c8e844d92
Use namespace for OpenType tables
...
Avoids USHORT, SHORT, ULONG, LONG clashes with Windows API.
2012-08-28 17:57:49 -04:00
Behdad Esfahbod
472f229a63
[GSUB] Generalize would_apply()
...
Fixes logic also, where before we were always matching if glyphs_len==1
and a ligature started with the glyph.
2012-08-07 22:25:24 -04:00
Behdad Esfahbod
afbcc24be0
[GSUB] Wire the font, not just the face, down to substitute()
...
We need the font for glyph lookup during GSUB pauses in Indic shaper.
Could perhaps be avoided, but at this point, we don't mean to support
separate substitute()/position() entry points (anymore), so there is
no point in not providing the font to GSUB.
2012-08-02 08:36:40 -04:00
Behdad Esfahbod
22148b8c4a
Use Coverage digests in would_apply
2012-08-02 03:51:51 -04:00
Behdad Esfahbod
6c459c8fef
Minor
2012-08-02 03:45:53 -04:00
Behdad Esfahbod
0120ce9679
[GSUB/GPOS] Remove unused get_coverage() methods
2012-08-01 21:56:35 -04:00
Behdad Esfahbod
1336ecdf8e
[GSUB/GPOS] Use Coverage digests as gatekeeper
...
Gives me a good 10% speedup for the Devanagari test case. Less so
for less lookup-intensive tests.
For the Devanagari test case, the false positive rate of the GSUB digest
is 4%.
2012-08-01 21:46:36 -04:00
Behdad Esfahbod
a878c58a8f
[GSUB/GPOS] Add add_coverage()
2012-08-01 21:46:19 -04:00
Behdad Esfahbod
03b09214c0
[GSUB] Minor
2012-07-31 22:43:58 -04:00
Behdad Esfahbod
c2e42c3db6
Minor
2012-07-30 19:54:50 -04:00
Behdad Esfahbod
03f67bc012
More refactoring glyph class access
2012-07-30 19:47:53 -04:00
Behdad Esfahbod
05bd1b6342
[GSUB/GPOS] Move glyph props matching around
2012-07-30 19:30:01 -04:00
Behdad Esfahbod
7fbbf86efe
[GSUB] Minor
2012-07-30 18:36:42 -04:00
Behdad Esfahbod
6cdfd14bb1
Fix build on Mac
2012-07-30 17:22:17 -04:00
Behdad Esfahbod
a973b5ce86
[GSUB] Further adjustments to mark-attachment vs ligation interaction
...
The d1d69ec52e
change broke Kannada badly,
since it was ligating consonants, pushing matra out, and then ligating
with the matra. Adjust for that. See comments.
2012-07-30 01:47:46 -04:00
Behdad Esfahbod
d1d69ec52e
[GSUB] Don't ligate glyphs attached to different components of ligatures
...
This concludes the mark-attachment vs ligating interaction fixes (for now).
2012-07-30 00:51:47 -04:00
Behdad Esfahbod
f24bcfbed1
Minor
2012-07-30 00:39:00 -04:00
Behdad Esfahbod
fe20c0f84f
[GSUB] Fix mark component stuff when ligatures form ligatures!
...
See comments.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=437633
2012-07-30 00:00:59 -04:00
Behdad Esfahbod
2ec3ba46a3
[GSUB/GPOS] Minor
...
Start squeezing more out of lig_id/lig_comp.
2012-07-29 22:16:15 -04:00
Behdad Esfahbod
cb3d340631
[GSUB] Don't set new lig_id on mark ligatures
...
If two marks form a ligature, retain their previous lig_id, such that
the mark ligature can attach to ligature components...
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=676343
In fact, I noticed that we should not let ligatures form between glyphs
coming from different components of a previous ligature. For example,
if the sequence is: LAM,SHADDA,LAM,FATHA,HEH, the LAM,LAM,HEH form a
ligature, putting SHADDA and FATHA next to eachother. However, it would
be wrong to ligate them. Uniscribe has this bug also.
2012-07-29 20:37:38 -04:00
Behdad Esfahbod
338fe662b5
[GSUB] Minor
2012-07-28 18:53:01 -04:00