Commit Graph

2360 Commits

Author SHA1 Message Date
Behdad Esfahbod d00f7d8375 Fix dependencies 2012-09-17 20:59:09 -04:00
Behdad Esfahbod 811eefe225 Return NULL, not false
Oh well...
2012-09-10 09:56:27 -04:00
Behdad Esfahbod 166b5cf7ec [Indic] Find syllables before any features are applied
With FreeSerif, it seems that the 'ccmp' feature does ligature
substituttions.  That was then causing syllable match failures.  We now
find syllables before any features have been applied.

Test sequence: U+0D9A,U+0DCA,U+200D,U+0DBB,U+0DCF
2012-09-07 14:56:01 -04:00
Behdad Esfahbod 96fdc04e5c Add hb_buffer_[sg]et_content_type
And hb_buffer_content_type_t and enum values.
2012-09-06 22:30:53 -04:00
Behdad Esfahbod e30ebd2794 Add hb_feature_to/from_string() 2012-09-06 22:09:06 -04:00
Behdad Esfahbod f67917161b [OT] Do per-ligature-component fallback mark positioning
With this in place, you can remove GDEF/GSUB/GPOS tables from Arabic
fonts and still get per-component marks positioned on
oh-yeah-fallback-formed LAM-ALEF ligatures with marks in between the LAM
and ALEF.

Now *that*'s pretty cool, if a bit anachronistic...
2012-09-06 17:22:31 -04:00
Behdad Esfahbod 525c685578 [OT] Make fallback mark positioning more robust
...with clusters spanning multiple base characters.
2012-09-06 16:02:07 -04:00
Behdad Esfahbod 5d502443f5 [old] Clear offset array 2012-09-06 15:29:29 -04:00
Behdad Esfahbod 9433c218b4 [OT] Simplify fallback positioning condition 2012-09-06 14:27:15 -04:00
Behdad Esfahbod 028a1706f8 Refactor common macro 2012-09-06 14:25:48 -04:00
Behdad Esfahbod 07cfbe21b5 [OT] Streamline Arabic fallback shaping table 2012-09-06 01:16:39 -04:00
Behdad Esfahbod 82f6b6f388 Minor 2012-09-06 01:12:50 -04: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 f0b8ed1b6d [Indic] Allow "H,ZWJ,M"
Uniscribe accepts a Halant,ZWJ before matras.  Allow that.

BENGALI down from 295 to 291
DEVANAGARI down from 69 to 57
GUJARATI down from 19 to 17
KANNADA down from 871 to 867
MALAYALAM down from 340 to 337
TELUGU down from 20 to 16

Currently at:

BENGALI: 353897 out of 354188 tests passed. 291 failed (0.0821598%)
DEVANAGARI: 707337 out of 707394 tests passed. 57 failed (0.00805774%)
GUJARATI: 366440 out of 366457 tests passed. 17 failed (0.00463902%)
GURMUKHI: 60704 out of 60747 tests passed. 43 failed (0.0707854%)
KANNADA: 951046 out of 951913 tests passed. 867 failed (0.0910798%)
KHMER: 299077 out of 299124 tests passed. 47 failed (0.0157125%)
LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
MALAYALAM: 1047997 out of 1048334 tests passed. 337 failed (0.0321462%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271666 out of 271847 tests passed. 181 failed (0.0665816%)
TAMIL: 1091754 out of 1091754 tests passed. 0 failed (0%)
TELUGU: 970557 out of 970573 tests passed. 16 failed (0.00164851%)
TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
2012-09-05 17:41:08 -04:00
Behdad Esfahbod 4ed717ef61 [Indic] Relax grammar
Now that we insert dotted-circle, tests break more easily when our indic
machine breaks.

In particular, a few Devanagari tests were having sequences like
"C,H,ZWJ,N", and because of the ZWJ the Nukta does NOT get reordered to
before the Halant as the grammar used to expect...  Fixup.

Another case is as simple as "C,ZWJ,SM".

Fixes 10 out of 79 failures:

DEVANAGARI: 707325 out of 707394 tests passed. 69 failed (0.00975411%)
2012-09-05 17:21:17 -04:00
Behdad Esfahbod aa7141efe4 [Indic] Fix Khmer syllable-final coeng-consonant
Brings down Khmer failures from 162 to 47.

KHMER: 299077 out of 299124 tests passed. 47 failed (0.0157125%)

Also rebaselined some of the test files that had only-inherited lines.
Removing those, the stats are:

BENGALI: 353893 out of 354188 tests passed. 295 failed (0.0832891%)
DEVANAGARI: 707315 out of 707394 tests passed. 79 failed (0.0111678%)
GUJARATI: 366438 out of 366457 tests passed. 19 failed (0.00518478%)
GURMUKHI: 60704 out of 60747 tests passed. 43 failed (0.0707854%)
KANNADA: 951042 out of 951913 tests passed. 871 failed (0.0915%)
KHMER: 299077 out of 299124 tests passed. 47 failed (0.0157125%)
LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
MALAYALAM: 1047994 out of 1048334 tests passed. 340 failed (0.0324324%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271666 out of 271847 tests passed. 181 failed (0.0665816%)
TAMIL: 1091754 out of 1091754 tests passed. 0 failed (0%)
TELUGU: 970553 out of 970573 tests passed. 20 failed (0.00206064%)
TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)

Still some regressions, but some of the more egregious cases are
addressed.
2012-09-05 17:14:52 -04:00
Behdad Esfahbod 27bd55bd2c [Indic] Tamil does not have half-forms either
The Win7 Tamil font does not realy on this behavior, but the WinXP
version does.  Handle Tamil like Malayalam: Matras always move to
before base.

WinXP Tamil failures went down from 168964 (15.4752%) to 167
(0.0152953%) (two orders of magnitude reduction!).

Included in this is a minor fixup that actually fixed a few tests
with non-Tamil too.  Numbers at:

BENGALI: 353997 out of 354285 tests passed. 288 failed (0.0812905%)
DEVANAGARI: 707339 out of 707394 tests passed. 55 failed (0.00777502%)
GUJARATI: 366489 out of 366506 tests passed. 17 failed (0.0046384%)
GURMUKHI: 60769 out of 60809 tests passed. 40 failed (0.0657797%)
KANNADA: 951086 out of 951913 tests passed. 827 failed (0.0868777%)
KHMER: 299106 out of 299124 tests passed. 18 failed (0.00601757%)
LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
MALAYALAM: 1048104 out of 1048416 tests passed. 312 failed (0.0297592%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271747 out of 271847 tests passed. 100 failed (0.0367854%)
TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
2012-09-05 15:22:02 -04:00
Behdad Esfahbod 87b75d0a4a [OT] Allow adding features with fallback implementation 2012-09-04 23:06:38 -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 715e03bc21 Minor 2012-09-04 20:10:17 -04:00
Behdad Esfahbod 652d1e0d64 [OT] Start adding Lookup-level serialize API 2012-09-04 20:00:44 -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 a5ddd9e31c [OT] Really fix possible NULL dereference this time 2012-09-04 14:55:00 -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 f8fa2b5cf6 Fix possible NULL dereference
As reported by Kenichi Ishibashi.
2012-09-03 20:19:46 -04:00
Behdad Esfahbod 4b312fb288 [OT] Remove serialize alignment
Will reintroduce in a different way when we actually need it.
2012-09-01 21:56:06 -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 6912e476dd [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.
2012-09-01 20:38:45 -04:00
Behdad Esfahbod 1d581ec384 [OT] Fallback-position ccc=0 Thai / Lao marks
Not perfect, but so is fallback positioning in 2012...
2012-09-01 20:06:26 -04:00
Behdad Esfahbod 3992b5ec4c Move code around 2012-09-01 19:20:41 -04:00
Behdad Esfahbod b85800f9de [Indic] Implement dotted-circle insertion for broken clusters
No panic, we reeally insert dotted circle when it's absolutely broken.

Fixes most of the dotted-circle cases against Uniscribe. (for Devanagari
fixes 80% of them, for Khmer 70%; the rest look like Uniscribe being
really bogus...)

I had to make a decision.  Apparently Uniscribe adds one dotted circle
to each broken character.  I tried that, but that goes wrong easily with
split matras.  So I made it add only one dotted circle to an entire
broken syllable tail.  As in: "if there was a dotted circle here, this
would have formed a correct cluster."  That works better for split
stuff, and I like it more.
2012-08-31 19:18:20 -04:00
Behdad Esfahbod 327d14ef18 [Indic] Start adding dotted-circle instrastructure 2012-08-31 16:49:34 -04:00
Behdad Esfahbod 1be368e96f Minor 2012-08-31 16:29:17 -04:00
Behdad Esfahbod 784f29d061 Minor 2012-08-31 14:06:26 -04:00
Behdad Esfahbod 5a7f18767a [OT] Better fallback-position Thai / Lao ccc!=0 marks 2012-08-30 22:53:29 -04:00
Behdad Esfahbod 9f2348de58 [OT] Add serialize() for Coverage 2012-08-29 21:08:59 -04:00
Behdad Esfahbod e901b954c6 [OT] Start adding serialize() API 2012-08-29 20:26:08 -04:00
Behdad Esfahbod 965c280de0 Add HB_BUFFER_ASSERT_VAR
To be used in places we access buffer vars...
2012-08-29 14:02:37 -04:00
Behdad Esfahbod 0ccf9b6473 Move code around 2012-08-29 14:02:37 -04:00
Behdad Esfahbod 2fcbbdb41a 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...
2012-08-29 14:01:22 -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 2eef71737e [hb-icu-le] Add visbility 2012-08-28 19:16:38 -04:00
Behdad Esfahbod d59e28e492 Minor 2012-08-28 19:08:36 -04:00
Behdad Esfahbod af169d2813 Minor 2012-08-28 19:08:22 -04:00
Behdad Esfahbod 52ff2681d8 Use VisualStudio-style atomic intrinsics on mingw32 2012-08-28 18:03:35 -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 dc5df5af6b Revert "Minor"
This reverts commit 3e0a03978b.

I know remember why that line is there :).
2012-08-28 16:31:23 -04:00
Behdad Esfahbod 3e0a03978b Minor 2012-08-27 17:10:02 -04:00
Behdad Esfahbod 667218a5b1 Minor 2012-08-27 17:00:44 -04:00
Behdad Esfahbod 30dd62251f Only fallback-position glyphs if we have the ccc
Previously, ccc=0 Thai / Lao marks were being
mispositioned.  Don't touch them.
2012-08-27 16:54:34 -04:00
Behdad Esfahbod e1ba62811a Center unknown marks horizontally 2012-08-27 16:28:05 -04:00
Behdad Esfahbod 23b0e9d7dc [Indic] Fix switch
D'oh.  Was working by pure chance :)).
2012-08-26 14:30:38 -04:00
Behdad Esfahbod 56e878ab87 [graphite2] Cleanup scratch buffer allocation 2012-08-24 00:41:51 -04:00
Behdad Esfahbod 2f7586c622 [icu-le] Implement icu layout engine shaper 2012-08-24 00:00:33 -04:00
Behdad Esfahbod ba7f6c3797 [icu-le] Hook up to hb_face_t 2012-08-24 00:00:33 -04:00
Behdad Esfahbod e96bb36995 [icu-le] Actually use the FontTableCache 2012-08-24 00:00:33 -04:00
Behdad Esfahbod 7d242364ea [icu-le] Start adding a icu-layout-engine backend
Import PortableFontInstance and add shaper stub.
2012-08-24 00:00:29 -04:00
Behdad Esfahbod b5584ee4be [Indic] For old-spec, match non-zero context
Fixes consonant-position with old-spec Malayalam.  Uniscribe seem to be
doing this.  Fixes below-base La (eg. Pa,H,La) with AnjaliNewLipi.ttf.
Doesn't regress new-spec or other scripts.
2012-08-23 16:26:07 -04:00
Behdad Esfahbod d9b204d3d2 [GSUB] Allow non-zero-context matching in would_apply()
To be used in the next patch.
2012-08-23 16:22:28 -04:00
Behdad Esfahbod 1f2bb172fe Revert "[Indic/GSUB] Ignore context when matching would_apply()"
This reverts commit 24dd4e5674.

Oops.  My bad.  The change _regressed_ Malayalam test suite, not
improved it.  I'll redo it, differentiating between old-spec and
new-spec cases.
2012-08-23 16:10:37 -04:00
Behdad Esfahbod 24dd4e5674 [Indic/GSUB] Ignore context when matching would_apply()
The MS Indic specs say "...all classifications are determined ... using
context-free substitutions."  However, testing shows that MS's Malayalam
shapers (both old and new), "match" even if there is no zero-context rule.
We follow.

Fixes below-base La (eg. Pa,H,La) with AnjaliNewLipi.ttf (old spec).
Moreover, test suite Malayalam failures are down to 312 from 875!  No
change in other scripts.

Current numbers:

BENGALI: 353996 out of 354285 tests passed. 289 failed (0.0815727%)
DEVANAGARI: 707339 out of 707394 tests passed. 55 failed (0.00777502%)
GUJARATI: 366489 out of 366506 tests passed. 17 failed (0.0046384%)
GURMUKHI: 60769 out of 60809 tests passed. 40 failed (0.0657797%)
KANNADA: 951086 out of 951913 tests passed. 827 failed (0.0868777%)
KHMER: 299106 out of 299124 tests passed. 18 failed (0.00601757%)
LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
MALAYALAM: 1047541 out of 1048416 tests passed. 875 failed (0.0834592%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271726 out of 271847 tests passed. 121 failed (0.0445103%)
TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
2012-08-23 15:47:10 -04:00
Behdad Esfahbod 6732d62e78 [Indic] Implement pre-base reordering Ra for old-spec Malayalam
Fixes Pa,H,Ra sequence with AnjaliNewLipi.ttf.
2012-08-23 15:32:12 -04:00
Behdad Esfahbod 80cd92326f [Indic] Only apply basic features per-syllable
Free up syllables and let features work across syllables for the
presentation forms features and GPOS.

Fixed:
- 1 GURMUKHI test (remains 40)
- 12 KHMER tests (remains 18)
- 11 SINHALA tests (remains 121)

Regresses:
- 5 MALAYALAM tests (up to 312)

Current numbers:

BENGALI: 353996 out of 354285 tests passed. 289 failed (0.0815727%)
DEVANAGARI: 707339 out of 707394 tests passed. 55 failed (0.00777502%)
GUJARATI: 366489 out of 366506 tests passed. 17 failed (0.0046384%)
GURMUKHI: 60769 out of 60809 tests passed. 40 failed (0.0657797%)
KANNADA: 951086 out of 951913 tests passed. 827 failed (0.0868777%)
KHMER: 299106 out of 299124 tests passed. 18 failed (0.00601757%)
LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
MALAYALAM: 1048104 out of 1048416 tests passed. 312 failed (0.0297592%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271726 out of 271847 tests passed. 121 failed (0.0445103%)
TAMIL: 1091837 out of 1091837 tests passed. 0 failed (0%)
TELUGU: 970558 out of 970573 tests passed. 15 failed (0.00154548%)
TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
2012-08-23 12:06:14 -04:00
Behdad Esfahbod df5d5c68f3 Whitespace 2012-08-23 09:33:30 -04:00
Behdad Esfahbod 2f1747ed7d Add comment 2012-08-16 11:46:46 -04:00
Behdad Esfahbod bd08d5d126 [OT] Fix Arabic shaper OOB access
https://bugzilla.mozilla.org/show_bug.cgi?id=782908
2012-08-16 11:35:50 -04:00
Behdad Esfahbod daf0731865 [ICU] Fix includes
As reported by Steven Loomis, including uversion.h works everywhere.
2012-08-16 07:32:59 -04:00
Behdad Esfahbod a67ba9c0fe Whitespace 2012-08-15 18:52:17 -04:00
Behdad Esfahbod 45c1383cc7 Minor 2012-08-14 09:33:18 -04:00
Behdad Esfahbod 4ac4c6f2e1 Fix ICU build with older ICUs 2012-08-13 10:52:52 -04:00
Behdad Esfahbod d5045a5f40 [ICU] Use new normalizer2 compose/decompose API
It's considerably faster than the fallback implementation we had
previously!
2012-08-11 21:27:15 -04:00
Behdad Esfahbod 9f9f04c222 [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.
2012-08-11 18:34:13 -04:00
Behdad Esfahbod e9f28a38f5 [OT] Add shape_plan to Arabic shaper 2012-08-11 18:20:54 -04:00
Behdad Esfahbod daf13afb08 [OT] Implement fallback mark positioning for "double" combining marks 2012-08-10 16:38:44 -04:00
Behdad Esfahbod d345313104 [OT] Fix fallback mark positioning with left-to-right text
Ouch!
2012-08-10 16:34:04 -04:00
Behdad Esfahbod f4cb476298 [OT] Slightly adjust normalizer
The change is very subtle.  If we have a single-char cluster that
decomposes to three or more characters, then try recomposition, in
case the farther mark may compose with the base.
2012-08-10 03:51:44 -04:00
Behdad Esfahbod 07d6828063 Minor 2012-08-10 03:28:50 -04:00
Behdad Esfahbod b00321ea78 [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.
2012-08-09 22:33:32 -04:00
Behdad Esfahbod 12c0875eaf [OT] Remove redundant check 2012-08-09 22:02:54 -04:00
Behdad Esfahbod 5c60b70c89 [OT] More code shuffling around
Preparing for merging map_glyphs() and normalize().
2012-08-09 21:58:07 -04:00
Behdad Esfahbod cd0c6e148f Shuffle buffer variable allocations around
To room for more allocations, coming.
2012-08-09 21:48:55 -04:00
Behdad Esfahbod 8d1eef3f32 Minor 2012-08-09 21:35:47 -04:00
Behdad Esfahbod 56c9e7c004 Fill out combining class resetting for fallback shaping Thai/Lao/Tibetan 2012-08-09 21:14:23 -04:00
Behdad Esfahbod a321e1d51e Revert "Reject lookups with no subTable"
This reverts commit 30ec9002d8.

See previous commit.
2012-08-09 18:30:34 -04:00
Behdad Esfahbod 2eaf482b37 Revert "[GSUB/GPOS] Reject Context/ChainContext lookups with zero input"
This reverts commit 0981068b75.

I was confused.  Even if we access coverage[0] unconditionally, we don't
need bound checks since the array machinary already handles that.
2012-08-09 18:30:05 -04:00
Behdad Esfahbod a02d86484b Add check-exported-symbols.sh
And misc linking fixes.
2012-08-08 18:04:29 -04:00
Behdad Esfahbod 4c8ac4f47e Misc minor fixes 2012-08-08 17:44:19 -04:00
Behdad Esfahbod 560d68af81 Use a export-file for Windows builds
Apparently even that doesn't make check-internal-symbols.sh happy with
mingw32.  Going to disable that for DLLs again, but hopefully the
export-file is doing *something*.
2012-08-08 17:16:01 -04:00
Behdad Esfahbod f8751cf8e0 [hb-old] speed-up build 2012-08-08 17:15:44 -04:00
Behdad Esfahbod 5f4c52867c Minor 2012-08-08 16:53:37 -04:00
Behdad Esfahbod 7e7d245b33 Make default_language threadsafe 2012-08-08 15:23:48 -04:00
Behdad Esfahbod 06b192c458 Minor 2012-08-08 15:23:45 -04:00
Behdad Esfahbod 37191ede75 Minor 2012-08-08 14:59:09 -04:00
Behdad Esfahbod 6d9a329a8a Adjust a couple source checks 2012-08-08 14:48:41 -04:00
Behdad Esfahbod 9c929abdcf Minor renaming 2012-08-08 14:33:37 -04:00
Behdad Esfahbod 801298b590 Fix cast
https://bugs.freedesktop.org/show_bug.cgi?id=53233
2012-08-08 14:26:36 -04:00
Behdad Esfahbod 21756934a1 [OT] Implement fallback positioning
Implemented for Arabic, Hebrew, and generic marks.
Activated if no GPOS table present.
2012-08-08 01:20:45 -04:00
Behdad Esfahbod fb56e76283 [hb-old] Fix warnings 2012-08-07 23:44:47 -04:00
Behdad Esfahbod affaf8a0e5 [OT] Start adding fallback positioning
Used when there is no GPOS.
2012-08-07 22:43:07 -04:00
Behdad Esfahbod 7e4920fd15 Minor 2012-08-07 22:32:23 -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 6f3a300138 Add hb_font_glyph_from/to_string 2012-08-07 22:13:25 -04:00
Behdad Esfahbod eb56f6ae96 Minor 2012-08-07 21:44:25 -04:00
Behdad Esfahbod f4e48adcdd [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.
2012-08-07 21:12:49 -04:00
Behdad Esfahbod b1914b8bd0 Fix warnings 2012-08-07 16:57:48 -04:00
Behdad Esfahbod 0f8881d6bb More refactoring 2012-08-07 16:57:02 -04:00
Behdad Esfahbod 428dfcab66 Minor refactoring 2012-08-07 16:51:48 -04:00
Behdad Esfahbod 61f41849af Add Hebrew presentation forms shaping
Lifted from https://bugzilla.mozilla.org/show_bug.cgi?id=728866
2012-08-07 16:45:27 -04:00
Behdad Esfahbod 32d71dc133 [Graphite] Minor 2012-08-07 14:21:12 -04:00
Behdad Esfahbod 030ac5022e Remove enum trailing comma
...again.
2012-08-07 13:01:12 -04:00
Behdad Esfahbod 368b4e7649 Minor 2012-08-06 23:06:04 -04:00
Behdad Esfahbod ade7459ea7 [util] Fix leaks 2012-08-06 19:49:42 -07:00
Behdad Esfahbod 2fef993460 [Graphite] Fix graphite2 backend with RTL text
Patch from Martin Hosken.
2012-08-06 19:35:04 -07:00
Behdad Esfahbod e4992e13e1 [Graphite] Port graphite2 backend to new shaper infrastructure 2012-08-06 19:29:53 -07:00
Behdad Esfahbod 66591ececf Remove unnecessary lifecycle bits
We already set recount to INVALID when destroying.
This block was not necessary.
2012-08-06 17:07:19 -07:00
Behdad Esfahbod 167b625d98 [Indic] Minor, move 'blwf' after 'half'
We don't apply them together anyway.  Should not make any difference
right now.
2012-08-05 21:16:26 -07:00
Behdad Esfahbod 048e3b596f Speed up hb_set_digest_lowest_bits_t calcs 2012-08-04 20:46:45 -07:00
Behdad Esfahbod 3d1b66a35e Speed up hb_set_digest_common_bits_t calcs 2012-08-04 17:42:28 -07:00
Behdad Esfahbod 25326c2359 Rewrite ARRAY_LENGTH as a template function
Such it wouldn't apply to pointers accidentally.
2012-08-04 16:43:18 -07:00
Behdad Esfahbod 8ba8042821 [Indic] Fix consonant position font lookup logic
Oops.  I broken this badly and the test suite did not notice.  That
worries me.  Have to investigate.
2012-08-03 18:54:54 -07:00
Behdad Esfahbod abd0c05f1f Minor 2012-08-03 18:45:05 -07:00
Behdad Esfahbod 46ee108ef8 Fix leak 2012-08-03 18:21:13 -07:00
Behdad Esfahbod 71baea0062 [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.
2012-08-03 17:40:07 -07:00
Behdad Esfahbod 3a7e137a68 Dn't use gint 2012-08-03 17:23:40 -07:00
Behdad Esfahbod 11b0e20ba4 [Indic] Add per-script configuration tables
This concludes the Indic shape_plan work.  May do for Arabic also...
2012-08-02 14:21:40 -04:00
Behdad Esfahbod 85fc6c483f [Indic] Move more stuff to the shape_plan
Almost done.  Need to add per-script static tables.
2012-08-02 12:21:44 -04:00
Behdad Esfahbod 914ffaa40f [Indic] Move more repeated work into shape_plan 2012-08-02 11:05:32 -04:00
Behdad Esfahbod a8c6da90f4 [OT] Add per-complex-shaper shape_plan data
Hookup some Indic data to it.  More to come.
2012-08-02 10:46:34 -04:00
Behdad Esfahbod 8bb5deba96 [OT] Pipe shape_plan down to pause_callbacks 2012-08-02 10:07:58 -04:00
Behdad Esfahbod 3e38c0f288 More massaging 2012-08-02 09:44:18 -04:00
Behdad Esfahbod 16c6a27b4b [OT] Port complex_shaper to planner/plan 2012-08-02 09:38:28 -04:00
Behdad Esfahbod 5393e3a62b [OT] Minor refactoring 2012-08-02 09:24:35 -04:00
Behdad Esfahbod 24eacf17c8 [Indic] Move consonant-position-setting into initial_reordering() 2012-08-02 08:42:51 -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 b0e6a26a10 [OT] Hide some API
It was impossible to meaningfully use them from the outside these days.
2012-08-02 08:11:14 -04:00
Behdad Esfahbod 305246744e Minor 2012-08-02 08:08:04 -04:00
Behdad Esfahbod 8ef3d53255 [Indic] More refactoring of consonant position peeking in the font
To be moved to initial_reordering next...
2012-08-02 07:59:19 -04:00
Behdad Esfahbod 3eb6f81fd3 [Indic] Refactor
Move all the logic that needs to eventually move into the indic table
into hb-ot-shape-complex-indic-private.hh.
2012-08-02 07:38:39 -04:00
Behdad Esfahbod 3614ba242f [Indic] Rename 2012-08-02 07:23:42 -04:00
Behdad Esfahbod 610e5e8f71 [Indic] Streamline feature would_apply()
Comes with some 10% speedup for Devanagari even!
2012-08-02 05:41:18 -04:00
Behdad Esfahbod 1d002048d5 [Indic] Minor 2012-08-02 05:02:53 -04:00
Behdad Esfahbod 6f76113755 [GSUB/GPOS] Check array size before accessing digests 2012-08-02 04:00:31 -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 e2b8d75fa6 Use wider set digests on 64-bit archs 2012-08-01 22:17:48 -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 60a3035ac5 Add hb_set_digest_t
Implement two set digests, and one that combines the two.
2012-08-01 21:46:19 -04:00
Behdad Esfahbod c8accf1dd2 [OT] Templatize Coverage::add_coverage() 2012-08-01 21:05:57 -04:00
Behdad Esfahbod 8fbfda920e Inline font getters 2012-08-01 19:03:46 -04:00
Behdad Esfahbod 6adf417bc1 Use a lookup table for modified_combining_class 2012-08-01 18:07:42 -04:00
Behdad Esfahbod 208f70f055 Inline Unicode callbacks internally 2012-08-01 17:13:10 -04:00
Behdad Esfahbod 7470315a3e Move unicode accessors around 2012-08-01 17:01:59 -04:00
Behdad Esfahbod 21fdcee001 Add hb_unicode_combining_class_t 2012-08-01 16:28:50 -04:00
Behdad Esfahbod 84186a6400 Add commentary on the compatibility decomposition in the normalizer 2012-08-01 13:32:39 -04:00
Behdad Esfahbod 0834d95201 [hb-old] Adjust mark positioning parameters
Fallback mark positioning works now...  With hb-ft and hb-view /
hb-shape at least.
2012-08-01 00:21:09 -04:00
Behdad Esfahbod 4ca743dfb8 [old] Implement fontMetrics 2012-08-01 00:03:41 -04:00
Behdad Esfahbod 1e7d860613 [GPOS] Adjust mark advance-width zeroing logic
If there is no GPOS, zero mark advances.

If there *is* GPOS and the shaper requests so, zero mark advances for
attached marks.

Fixes regression with Tibetan, where the font has GPOS, and marks a
glyph as mark where it shouldn't get zero advance.
2012-07-31 23:41:06 -04:00
Behdad Esfahbod a8842e4a44 Remove some TODO items 2012-07-31 23:17:23 -04:00
Behdad Esfahbod 2bc3b9a616 [OT] Zero mark advances if the shaper desires so
Enabled for all shapers except for Indic.
2012-07-31 23:17:22 -04:00
Behdad Esfahbod 5fecd8b035 [OT] Synthesize glyph classes 2012-07-31 23:17:22 -04:00
Behdad Esfahbod 03b09214c0 [GSUB] Minor 2012-07-31 22:43:58 -04:00
Behdad Esfahbod f0fc1df8fc [hb-old] Implement getGlyphMetrics()
Still working on it.
2012-07-31 22:43:32 -04:00
Behdad Esfahbod 378d279bbf Implement Unicode compatibility decompositions
Based on patch from Philip Withnall.
https://bugs.freedesktop.org/show_bug.cgi?id=41095
2012-07-31 21:36:16 -04:00
Behdad Esfahbod 321ec29cc2 Remove unused function 2012-07-31 21:10:16 -04:00
Behdad Esfahbod 69cc492dc1 [buffer] Minor 2012-07-31 14:51:36 -04:00
Behdad Esfahbod 693918ef85 [OT] Streamline complex shaper enumeration
Add a shaper class struct.
2012-07-30 21:08:51 -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 300c7307eb [OT] Don't crash if no GDEF available 2012-07-30 19:37:44 -04:00
Behdad Esfahbod 3dcbdc2125 Minor 2012-07-30 19:32:42 -04:00
Behdad Esfahbod 05bd1b6342 [GSUB/GPOS] Move glyph props matching around 2012-07-30 19:30:01 -04:00
Behdad Esfahbod 2fca1426ca [GSUB] Don't erase glyph classes if GDEF does not have glyph classes 2012-07-30 18:46:41 -04:00
Behdad Esfahbod fd42257f8c Minor 2012-07-30 18:44:10 -04:00
Behdad Esfahbod 7fbbf86efe [GSUB] Minor 2012-07-30 18:36:42 -04:00
Behdad Esfahbod 713914d320 [Uniscribe] Clean up a bit 2012-07-30 17:54:38 -04:00
Behdad Esfahbod 301168dae7 [CoreText] Port to shape_plan infrastructure 2012-07-30 17:48:04 -04:00
Behdad Esfahbod 6cdfd14bb1 Fix build on Mac 2012-07-30 17:22:17 -04:00
Behdad Esfahbod 7e34601ded Unbreak Hangul jamo composition
When we removed the separate Hangul shaper, the specific normalization
preference of Hangul was lost.  Fix that.  Also, the Thai shaper was
copied from Hangul, so had the fully-composed normalization behavior,
which was unnecessary.  So, fix that too.
2012-07-30 14:53:41 -04:00
Behdad Esfahbod 7afb14407e [Indic] Recategorize Telugu length marks
Fixes 8 more Telugu tests.  Failures at 15 (0.00154548%).
2012-07-30 13:54:46 -04:00
Behdad Esfahbod f2377155e3 [hb-old] Fix misc leaks
Backport (forward-port?!) from upstream:

commit 3ab7b37bdebf0f8773493a1fee910b151c4de30f
Author: Behdad Esfahbod <behdad@behdad.org>
Date:   Mon Jul 30 10:50:22 2012 -0400

    Fix misc leaks

    https://bugs.freedesktop.org/show_bug.cgi?id=31992
    https://bugs.freedesktop.org/show_bug.cgi?id=31993
    https://bugs.freedesktop.org/show_bug.cgi?id=31994
    https://bugs.freedesktop.org/show_bug.cgi?id=31995
2012-07-30 10:50:57 -04:00
Behdad Esfahbod 3f4764bb56 Don't lock user_data set during destruction if empty 2012-07-30 10:06:42 -04:00
Behdad Esfahbod 4ba647eecf Fix leak 2012-07-30 09:53:06 -04:00
Behdad Esfahbod f860366456 [OT] Gain back some lost speed 2012-07-30 03:16:38 -04:00
Behdad Esfahbod 11f4c87d01 [OT] Remove hb_ot_layout_ensure()
I didn't like it from the beginning.
2012-07-30 02:36:46 -04:00
Behdad Esfahbod 578e42182b Minor 2012-07-30 02:35:07 -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 0aef425e25 [GSUB] Minor 2012-07-30 00:55:15 -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 4751dec8be Minor 2012-07-30 00:42:07 -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 ef6e9cec33 Fixup bb0e4ba3e9 2012-07-29 21:35:22 -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 a15b70a81a [hb-old] Fix cluster formation in RTL
Unlike Uniscribe, hb-old returns glyphs in logical order, so the logic
does not need to duplicated for RTL.
2012-07-29 20:09:22 -04:00
Behdad Esfahbod 8a7e70ef65 [Minor] 2012-07-29 19:56:54 -04:00
Behdad Esfahbod bb0e4ba3e9 Minor 2012-07-29 17:34:14 -04:00
Behdad Esfahbod a00ad60bc0 [Uniscribe] Remove hb_uniscribe_font_ensure()
Wasn't a huge fan of putting the burden on the user.  Just remove it and
do what we've got to do transparently.
2012-07-28 21:16:08 -04:00
Behdad Esfahbod 5d874d566f [GPOS] Fix mark-to-mark positioning when one of the marks is a ligature
This commit: a3313e5400 broke MarkMarkPos
when one of the marks itself is a ligature.  That regressed 26 Tibetan
tests (up from zero!).  Fix that.  Tibetan back to zero.
2012-07-28 21:05:25 -04:00
Behdad Esfahbod 338fe662b5 [GSUB] Minor 2012-07-28 18:53:01 -04:00
Behdad Esfahbod e6f7479fe3 [GSUB] Simplify would-apply 2012-07-28 18:34:58 -04:00
Behdad Esfahbod dadede012e Minor 2012-07-28 18:13:09 -04:00
Behdad Esfahbod 0b99429ead [GSUB/GPOS] Add get_coverage() and use it to speed up main loop
And use it to speed up the hotspot by checking coverage directly in
the main loop, not 10 functions deep in.

Gives me a solid 20% boost with Indic test suite.  Less so for less
lookup-intensive scenarios.

Remove the "fast_path" hack from before.
2012-07-28 17:46:35 -04:00
Behdad Esfahbod 30ec9002d8 Reject lookups with no subTable 2012-07-28 17:25:20 -04:00
Behdad Esfahbod 0981068b75 [GSUB/GPOS] Reject Context/ChainContext lookups with zero input 2012-07-28 17:01:59 -04:00
Behdad Esfahbod 2f87cebe10 Implement shape_plan caching
Should give us some performance boost.
2012-07-27 04:20:39 -04:00
Behdad Esfahbod e9eb9503e9 Add default_shaper_list to shape_plan 2012-07-27 03:16:22 -04:00
Behdad Esfahbod 3b7c4e2706 Don't fail choosing shaper on planning failure
Shapers have a chance to reject a font in face shaper_data creation.
No need to allow failing during planning.
2012-07-27 03:12:23 -04:00
Behdad Esfahbod cfe9882610 Add hb_ot_layout_ensure() and hb_uniscribe_font_ensure() 2012-07-27 03:06:30 -04:00
Behdad Esfahbod c5b668fb92 Choose one shaper per plan 2012-07-27 02:49:39 -04:00
Behdad Esfahbod e82061e8db Move ot shaper completely to shape_plan 2012-07-27 02:29:32 -04:00
Behdad Esfahbod ea278d3895 Partially switch ot shaper to shape_plan 2012-07-27 02:12:28 -04:00
Behdad Esfahbod b6b7ba1313 Switch old and uniscribe backends to shape_plan 2012-07-27 01:37:18 -04:00
Behdad Esfahbod c32c096a42 Switch to shape_plan
Not optimized yet.  Eats babies.  And no shaper uses the shape_plan.
2012-07-27 01:13:53 -04:00
Behdad Esfahbod 5b95c148cc Start implementing shape_plan 2012-07-27 01:02:24 -04:00
Behdad Esfahbod bd26b4d21f Minor 2012-07-26 22:18:24 -04:00
Behdad Esfahbod 027857d041 Start adding a unified shaper access infrastructure
Add global shape_plan.  Unused so far.
2012-07-26 21:14:02 -04:00
Behdad Esfahbod fa2dfcd560 Fix visibility warnings with MinGW32 2012-07-26 16:06:16 -04:00
Jonathan Kew ac2085d4b3 [CoreText] Ensure cluster indices in output buffer are non-decreasing.
Does not provide Uniscribe-compatible results, but should at least avoid
breaking hb-view due to out-of-order cluster values.

For RTL runs, ensure cluster values are non-increasing (instead of
non-decreasing).
2012-07-26 15:58:45 -04:00
Behdad Esfahbod 441d3bb7de Minor 2012-07-26 12:01:12 -04:00
Behdad Esfahbod 2e7f223054 [hb-old] Fix Arabic cursive positioning
Backporting from upstream:

commit b847f24ce855d24f6822bcd9c0006905e81b94d8
Author: Behdad Esfahbod <behdad@behdad.org>
Date:   Wed Jul 25 19:29:16 2012 -0400

    [arabic] Fix Arabic cursive positioning

    This was clearly broken in testing.  Who knows...  Fixes for me.
    Test with a Nastaleeq font, or with Arabic Typesetting.

    Backporting from Chromium.
2012-07-25 19:30:15 -04:00
Behdad Esfahbod 9550a8c4e8 [hb-old] Fixup not-enough-space handling 2012-07-25 19:22:57 -04:00
Behdad Esfahbod 91e721ea86 [hb-old] Fix clusters
Unlike its "documentation", hb-old's log_clusters are, well, indeed
logical, not visual.  Fixup.  Adapted / copied from hb-uniscribe.
2012-07-25 19:20:34 -04:00
Behdad Esfahbod a3313e5400 [GPOS] Fix MarkMarkPos applied to results of MultipleSubst
This was broken as a result of 7b84c536c1.
As Khaled reported, MarkMark positioning was broken with glyphs
resulting from a MultipleSubst.  Fixed.  Test with the ALLAH character
in Amiri.
2012-07-25 18:37:51 -04:00
Behdad Esfahbod 35bdab3cf1 Minor 2012-07-25 11:59:52 -04:00
Behdad Esfahbod 8fe4c7405b [hb-old] Add HarfBuzz.old shaper
Choose using shaper name "old".
2012-07-25 11:11:22 -04:00
Behdad Esfahbod 5e1987005e [hb-old] Define Unicode funcs in terms of new HarfBuzz 2012-07-25 11:11:22 -04:00
Behdad Esfahbod 4a31166b28 [hb-old] Shovel out the line-breaking / word-segmentation stuff 2012-07-25 11:11:22 -04:00
Behdad Esfahbod 0bcbe88cf3 [hb-old] Add visibility attributes 2012-07-25 11:11:22 -04:00
Behdad Esfahbod 6a9d43c317 [hb-old] Remove unused header file 2012-07-25 11:11:22 -04:00
Behdad Esfahbod fb47209c5b [hb-old] Rename hb_buffer_* to HB_Buffer_* 2012-07-25 11:11:22 -04:00
Behdad Esfahbod 1512a73575 [hb-old] Start adding HarfBuzz-old as a new backend 2012-07-25 11:11:16 -04:00
Behdad Esfahbod 478fd0529b Minor 2012-07-24 17:09:01 -04:00
Behdad Esfahbod 8979a7f6f2 [Mongolian] Remove Mongolian Vowel Separator at the end of shaping
Results match Uniscribe now.
2012-07-24 17:03:55 -04:00
Jonathan Kew aa6d849838 [CoreText] Add basic Core Text backend for comparison with our native shaping
Does not attempt to handle clusters in a Uniscribe- or HarfBuzz-compatible way;
just returns the original string indexes that CT maintains. These may even be
out-of-order in the case of reordrant glyphs.
2012-07-24 15:52:32 -04:00
Behdad Esfahbod ec8d249469 Make data members of various OpenType structs protected instead of private
Should fix warnings generated when building with -Wunused-private-field.
Based on patch from Jonathan Kew.
2012-07-24 15:40:37 -04:00
Behdad Esfahbod 97aa0b738a Minor const correctness shuffling 2012-07-24 15:02:34 -04:00
Behdad Esfahbod 6411e74caf [Indic] Reposition Gurmukhi top matras to after post
The font is forming a post-base consonant in some samples, and Uniscribe
positions top matra on the post-base.  Do the same.

Gurmukhi failures down from 59 to 41 (0.0674242%).
2012-07-24 13:48:49 -04:00