Commit Graph

3399 Commits

Author SHA1 Message Date
Behdad Esfahbod 66c6a48b6c Add HB_NO_MERGE_CLUSTERS
Disables any cluster-merging.  Added for testing purposes while
we investigate what kind of API to add for this.
2014-04-14 15:55:42 -07:00
Behdad Esfahbod 5fd996c4a4 Further adjust check-defs and check-symbols for mipsel
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=74491
2014-04-09 16:38:26 -07:00
Behdad Esfahbod 75ec6d0bc5 Tighten up check-static-inits.sh check
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=74490
2014-04-09 16:33:32 -07:00
Behdad Esfahbod 110ec0714a Typo 2014-04-08 17:32:08 -07:00
Behdad Esfahbod 0682ddd05c [indic] Support U+17DD KHMER SIGN ATTHACAN
As requested by Martin Hosken on the list.
2014-04-08 16:03:35 -07:00
Primiano Tucci 05870ed62e Use __aarch64__ for 64-bit ARM detection, not __arm64__
Many GCC versions don't define __arm64__
2014-04-02 12:41:11 -07:00
Behdad Esfahbod 04d894e897 Minor 2014-03-25 12:11:32 -07:00
Behdad Esfahbod 903648437c Start fleshing out builtin font functions 2014-03-24 15:19:15 -07:00
Behdad Esfahbod 343a0e4e74 Add "make built-sources" 2014-03-21 14:37:27 -07:00
Konstantin Ritt b96af03c20 Fix build with --coretext on iOS
On iOS CoreText and CoreGraphics are stand-alone frameworks
2014-03-21 10:29:34 -07:00
Behdad Esfahbod 09732cc669 Remove dead warning 2014-03-19 12:00:17 -07:00
Behdad Esfahbod a949cd329e Don't use "register" storage class specifier
Fixes warnings.
https://bugzilla.mozilla.org/show_bug.cgi?id=984081
2014-03-16 20:22:42 -07:00
jfkthame 0082dbeae6 wrap definition of free_langs() with HAVE_ATEXIT
...to avoid an unused function warning; see mozilla bug https://bugzilla.mozilla.org/show_bug.cgi?id=984081.
2014-03-16 13:40:33 -07:00
Behdad Esfahbod a9e25e90a4 [coretext] Add hb_coretext_face_create()
Not tested.
2014-03-14 19:55:46 -07:00
Behdad Esfahbod c79865f90f [coretext] Add coretext_aat shaper
This is a higher-priority shaper than default shaper ("ot"), but
only picks up fonts that have AAT "morx"/"mort" table.

Note that for this to work the font face's get_table() implementation
should know how to return the full font blob.

Based on patch from Konstantin Ritt.
2014-03-14 19:38:58 -04:00
Behdad Esfahbod af1aa362ca If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
Useful for Android / Chrome / etc when ICU is built in the same
library as harfbuzz itself.
2014-03-14 15:54:13 -07:00
Behdad Esfahbod 853daf857f Remove old cruft 2014-03-14 15:49:18 -07:00
Behdad Esfahbod bb8ffb581b Use AM_MISSING_PROG for ragel and git 2014-03-04 13:03:51 -08:00
Behdad Esfahbod a82165248c Only do fallback Hebrew composition if no GPOS 'mark' available
Apparently some modern fonts have proper GPOS mark positioning
tables, but undesirable precomposed forms!  See thread
"Hebrew composition to presentation forms" and:

  http://tex.stackexchange.com/questions/156775/having-trouble-with-vowel-positioning-in-ezra-sil-xelatex

Test case: U+fb1d,05d9,05b4
2014-02-18 15:53:56 -05:00
Werner Lemberg db068d81cd typo in ucdn's Makefile.am 2014-02-10 13:05:48 -05:00
Behdad Esfahbod fbb2847f54 Improve MemoryBarrier() implementation
See thread "[HarfBuzz] compilation error of 0.9.26 with MinGW"
started by Werner.
2014-02-05 08:22:06 -05:00
Jonathan Kew 7691a154e5 Ensure hb_script_t can safely hold any hb_tag_t value it's given.
Fixes https://github.com/behdad/harfbuzz/pull/21
2014-01-29 16:09:16 -05:00
Behdad Esfahbod c29993a181 [coretext] Handle surrogate pairs when generating notdef glyphs
Fixes github.com/behdad/harfbuzz/pull/19
2014-01-28 17:29:42 -05:00
Behdad Esfahbod 748b2782e4 [coretext] Minor optimization 2014-01-28 17:10:05 -05:00
Konstantin Ritt 24e6b11f12 Fix double destruction in case of OOM 2014-01-28 11:21:18 -05:00
Konstantin Ritt 083225916a Micro optimizations 2014-01-28 11:14:12 -05:00
Konstantin Ritt c9522de233 Make it possible to disable the fallback shaper at configure time
The OT shaper supersedes the fallback shaper in every case
and the latter become an extra weight for 99.9% of users.
2014-01-28 11:13:53 -05:00
Behdad Esfahbod 6775da3a7c Fix clang warning 'private field 'xxx' is not used
Fixes https://github.com/behdad/harfbuzz/pull/16
2014-01-23 14:18:49 -05:00
Behdad Esfahbod 62299826f4 Fix typo in _hb_buffer_serialize_glyphs_text()
Fixes https://github.com/behdad/harfbuzz/pull/17
2014-01-23 14:11:03 -05:00
Behdad Esfahbod ae23c24c32 [arabic] Disable 'cswh' by default
I believe Windows 8 disables it, and spec update dated
Jan 2014 also clearly says it's disabled by default:

  http://www.microsoft.com/typography/OpenTypeDev/arabic/intro.htm#features
2014-01-22 11:03:02 -05:00
Behdad Esfahbod 08cf5d75ef [ot] Don't try to compose if normalization is off 2014-01-22 07:53:55 -05:00
Behdad Esfahbod 0596343bfe Merge pull request #13 from jfkthame/hangul-shaper
Tone-mark reordering and improved Old Hangul support
2014-01-22 04:43:51 -08:00
Jonathan Kew 62cb28dfc6 fixup for 64-bit windows build 2014-01-22 07:31:54 -05:00
Jonathan Kew 83d7e7915a [hangul] Fix ordering of dotted circle with Hangul tone mark (reported by Dohyun Kim). 2014-01-20 19:49:47 +00:00
Jonathan Kew deef186265 [hangul] Don't force zero-width for marks - this is not wanted for the Jamo Filler glyphs. 2014-01-20 10:38:27 +00:00
Jonathan Kew 391934db0a [unicode] Exclude the Jamo Filler characters from Default_Ignorable, as some fonts want these to be visible/spacing glyphs. 2014-01-20 10:37:32 +00:00
Jonathan Kew 7244b3fc3b [hangul] Reorder Hangul tone mark to beginning of syllable, unless font implements it using a zero-width glyph. 2014-01-20 10:35:51 +00:00
Jonathan Kew 103436838d [hangul] Apply the appropriate *jmo features to decomposed syllables, including Old Hangul sequences that don't have Unicode compositions. Merge clusters in decomposed syllables. 2014-01-20 10:35:07 +00:00
Behdad Esfahbod 8fc1f7fe74 [ot/hangul] Don't decompose Hangul even when combining marks present
As discussed on
https://github.com/behdad/harfbuzz/pull/10#issuecomment-31442030
2014-01-02 17:04:04 +08:00
Behdad Esfahbod 64426ec73a [ot] Simplify composing
Not tested.  Ouch.
2014-01-02 14:33:10 +08:00
Behdad Esfahbod 8de20b1e8a Add font->has_glyph() 2014-01-02 14:30:45 +08:00
Behdad Esfahbod f6298e55ae [fallback] Minor 2014-01-02 14:23:56 +08:00
Behdad Esfahbod 29ea403d67 [hangul] Fix decomposition logic
Seems to be working now.
2014-01-02 14:20:00 +08:00
Behdad Esfahbod bdb20dafc3 [hangul] Fix decomposition
Part of https://github.com/behdad/harfbuzz/pull/10
2014-01-02 14:04:30 +08:00
Behdad Esfahbod 32478656ce [hangul] Tighten up character categories
I had tried to expand to fill the blocks, but that sounds wrong in
retrospect.
2014-01-02 14:01:56 +08:00
Behdad Esfahbod f14bb7de63 [ot] Separate out hebrew and tibetan shapers from default
Now default shaper is truly no-op.
2013-12-31 16:49:15 +08:00
Behdad Esfahbod 6300cd7253 [ot] Define HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT 2013-12-31 16:38:47 +08:00
Behdad Esfahbod 3d6ca0d32e [ot] Simplify normalization_preference again
No shaper has more than one behavior re this, so no need for a callback.
2013-12-31 16:35:37 +08:00
Behdad Esfahbod c98b7183f7 [ot] Add Hangul shaper
Not exhaustively tested, but I think I got the intended logic
right.

The logic can perhaps be simplified.  Maybe we should disabled
normalization with this shaper.  Then again, for now focusing on
correctness.
2013-12-31 16:23:48 +08:00
Behdad Esfahbod 15f67048e4 Reorder Tai Tham SAKOT to ensure it comes after any tone marks 2013-12-27 19:33:28 -05:00
Behdad Esfahbod 3216e44feb [uniscribe] Fix scratch-buffer accounting 2013-12-23 14:39:23 -05:00
Behdad Esfahbod beeb12c9af Add TODO item 2013-12-22 22:53:27 -05:00
Luis de Bethencourt fbd4acc58a Clean ht-ob headers 2013-12-22 22:52:57 -05:00
Behdad Esfahbod 5497a8a274 Cache various masks on the shape plan 2013-12-22 20:48:53 -05:00
Behdad Esfahbod 02f909664f Minor correction to kern mask checking 2013-12-22 19:35:27 -05:00
Behdad Esfahbod a7e8bbb080 Minor fraction mask setting improvement 2013-12-22 19:33:35 -05:00
Behdad Esfahbod 76fff252a9 Don't form fractions if only one of numr/dnom exist 2013-12-22 17:55:59 -05:00
Behdad Esfahbod 3aeee519f0 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.
2013-12-22 16:17:54 -05:00
Behdad Esfahbod 014f369ec9 Add XXX note 2013-12-22 16:15:30 -05:00
Behdad Esfahbod 739325178a Initialize masks before mirroring
We were throwing away the rtlm feature mask set during
mirroring...
2013-12-21 00:18:18 -05:00
Behdad Esfahbod 2a8c49ade0 Remove unnecessary includes 2013-12-11 20:24:20 -05:00
Behdad Esfahbod 205bf834d8 Revert "Karen" language mapping back to what it was before
https://bugzilla.mozilla.org/show_bug.cgi?id=941470
2013-12-02 20:41:41 -05:00
Behdad Esfahbod f47b921954 Fix unsafe shape_plan->face dependency 2013-12-02 05:57:27 -05:00
Jonathan Kew ca8d96c8ba cache shape plans even if (global) user features are set 2013-12-02 05:22:00 -05:00
Behdad Esfahbod 8ffa528f28 Add note about unsafe shape_plan->face
Will fix by removing shape_plan->face completely.
2013-12-02 05:17:14 -05:00
Behdad Esfahbod aec468f01e [coretext] Add TODO 2013-11-29 19:21:58 -05:00
Behdad Esfahbod 58cc233e8b [coretext] Cleanup 2013-11-29 19:17:42 -05:00
Khaled Hosny c8213c6198 [coretext] Avoid font fallback with CoreText shaper
CoreText does automatic font fallback (AKA "cascading") for  characters
not supported by the requested font, and provides no way to turn it off,
so detect if the returned run uses a font other than the requested one
and fill in the buffer with .notdef glyphs instead of random indices
glyph from a different font.
2013-11-29 19:01:56 -05:00
Behdad Esfahbod 63bae73aef [fallback] Add TODO note 2013-11-26 22:57:24 -05:00
Behdad Esfahbod e1ebf01d0c Minor 2013-11-26 18:00:35 -05:00
Behdad Esfahbod a182dbc9e4 Minor 2013-11-26 17:53:41 -05:00
Behdad Esfahbod 9174a9db5c [myanmar] Allow punctuation clusters
The spec and Uniscribe don't allow these, but UTN#11
specifically says the sequence U+104B,U+1038 is valid.
As such, allow all "P V" sequences.  There's about
eight sequences that match that structure, but Roozbeh
thinks it's fine to allow all of them.

Test case: U+104B, U+1038

https://bugs.freedesktop.org/show_bug.cgi?id=71947
2013-11-25 18:10:38 -05:00
Behdad Esfahbod 096b71e8ef [myanmar] Mark U+104E MYANMAR SYMBOL AFOREMENTIONED as Consonant
The spec and Uniscribe treat it as consonant in the grammar, but
it's not in IndicSyllableCategory.txt, so fix up.

Test sequence: U+1004,U+103A,U+1039,U+104E

https://bugs.freedesktop.org/show_bug.cgi?id=71948
2013-11-25 18:03:34 -05:00
Behdad Esfahbod d2da5e0b4b [myanmar] Relax pwo-tone group a bit
This is broken sequence according to OpenType spec, Uniscribe,
and current HarfBuzz implementation.  But Roozbeh says this
is a valid sequence, so allow it.  There are multiple
"(DB As?)?" constructs in the grammar, but Roozbeh thinks only
this one needs changing.

Test case: 1014,1063,103A

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=71949
2013-11-25 17:50:07 -05:00
Roozbeh Pournader 08c2d27d35 Added support for several new languages
Based on research into latest SIL and Windows fonts, pulling in
the latest OpenType language tag proposal from Microsoft, and updating
to latest language tags and names from ISO 639.
2013-11-25 06:36:20 -05:00
Roozbeh Pournader 05511acd19 Added language tags for S'gaw Karen and Khamti
Tags based on support in Windows 8.1's 'Myanmar Text' font.
2013-11-25 06:36:13 -05:00
Behdad Esfahbod 0bb31e4497 Bug 71845 - Use 64-bit cmpexch on ARM64 iOS 2013-11-20 14:21:07 -05:00
Behdad Esfahbod 02c6c8cd6e Set buffer content type to INVALID in hb_buffer_set_length(0)
Previously we were only setting this in hb_buffer_clear_contents(),
but set_length(0) is a valid way to reinitialize buffer to use with
new text.
2013-11-15 13:07:03 -05:00
Behdad Esfahbod 061cb46493 Use long alignment for scratch buffer
Fixes last of scratch alignment warnings in hb-coretext.
2013-11-13 14:50:25 -05:00
Behdad Esfahbod 68c372ed2e More scratch-buffer cleanup 2013-11-13 14:45:43 -05:00
Behdad Esfahbod 8fcadb9cf9 [coretext] More scratch buffer fixes 2013-11-13 14:33:57 -05:00
Behdad Esfahbod 16f175cb2e Fix scratch-buffer alignment warnings 2013-11-12 17:22:49 -05:00
Behdad Esfahbod 83408cf804 Fix llvm warnings on Mac
Patch from Scott Fleischman.  Warnings were:

harfbuzz/src/hb-font-private.hh:121:42: Implicit conversion loses
integer precision: 'long long' to 'hb_position_t' (aka 'int')
harfbuzz/src/hb-font-private.hh:126:42: Implicit conversion loses
integer precision: 'long long' to 'hb_position_t' (aka 'int')
harfbuzz/src/hb-font-private.hh:400:85: Implicit conversion loses
integer precision: 'long long' to 'hb_position_t' (aka 'int')
harfbuzz/src/hb-ot-layout-common-private.hh:1115:37: Implicit conversion
loses integer precision: 'long long' to 'int'
harfbuzz/src/hb-ft.cc:421:97: Implicit conversion loses integer
precision: 'unsigned long long' to 'int'
harfbuzz/src/hb-ft.cc:422:97: Implicit conversion loses integer
precision: 'unsigned long long' to 'int'
2013-11-06 14:46:04 -05:00
Behdad Esfahbod 333cc6e2d1 [otlayout] Remove unused is_inplace()
Patch from Jonathan Kew.
2013-10-30 17:30:11 +00:00
Behdad Esfahbod 176fd17d02 Bug 70971 - Signed/unsigned compiler warnings on windows
Patch from Emil Eklund.
2013-10-30 17:27:24 +00:00
Behdad Esfahbod 3d436d325e [otlayout] Reset ccc when marking glyph as letter 2013-10-28 21:00:37 +01:00
Behdad Esfahbod 6ffc007b61 [otlayout] Optimize inplace
See thread started by Jonathan with subject "an optimization for complex
fonts".
2013-10-28 19:26:02 +01:00
Behdad Esfahbod 71b4c999a5 Revert "Zero marks by GDEF for Tibetan"
This reverts commit d5bd0590ae.

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:

  7e08f1258d

So, revert the faulty commit and everything seems to be in good
shape.
2013-10-28 00:43:27 +01:00
Behdad Esfahbod c2bc818706 Work with old and new glib
Avoids "deprecated" warnings.
2013-10-27 23:37:14 +01:00
Behdad Esfahbod 46a863d91d [indic] Adjust pref reordering logic
For Javanese (pref_len == 1) only reorder if it didn't ligate.  That's
sensible, and what the spec says.  For other Indic (pref_len > 1)
only reorder if ligated.

Doesn't change any test numbers.
2013-10-27 23:28:12 +01:00
Behdad Esfahbod 6b03e3c724 Optimize fallback kerning
Patch from Jonathan Kew.  "These changes seem to yield a small but
just-about-measurable improvement with old fonts that lack GPOS
kerning."
2013-10-27 21:04:55 +01:00
Behdad Esfahbod 133eeba6a3 Minor
See:
https://github.com/prezi/harfbuzz-js/pull/1/files#r7032397
2013-10-27 00:24:59 +02:00
Behdad Esfahbod a74f0de225 [indic] Fix CM2, really
Followup from 6e613f3365.
2013-10-24 11:46:33 +02:00
Behdad Esfahbod 6e613f3365 Fix "shift count >= width of type" issue 2013-10-23 23:34:13 +02:00
Behdad Esfahbod ac8cd51191 Refactor 2013-10-18 19:33:09 +02:00
Behdad Esfahbod 0f3fe37fcc Comment 2013-10-18 19:14:22 +02:00
Behdad Esfahbod ddce2d8df6 [indic] Improve positioning of post-base bells and whistles
Bug 58714 - Kannada u+0cb0 u+200d u+0ccd u+0c95 u+0cbe does not provide
same results as Windows8
https://bugs.freedesktop.org/show_bug.cgi?id=58714

Test with U+0CB0,U+200D,U+0CCD,U+0C95,U+0CBF and tunga.ttf.

Improves some scripts.  Improves Bengali too, but numbers
are up because we produce better results than Uniscribe for some
sequences now.

New numbers:
BENGALI: 353724 out of 354188 tests passed. 464 failed (0.131004%)
DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%)
GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%)
GURMUKHI: 60732 out of 60747 tests passed. 15 failed (0.0246926%)
KANNADA: 951190 out of 951913 tests passed. 723 failed (0.0759523%)
KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%)
MALAYALAM: 1048140 out of 1048334 tests passed. 194 failed (0.0185056%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271662 out of 271847 tests passed. 185 failed (0.068053%)
TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
2013-10-18 18:17:29 +02:00
Behdad Esfahbod d5bd0590ae Zero marks by GDEF for Tibetan
See:
http://lists.freedesktop.org/archives/harfbuzz/2013-April/003101.html
2013-10-18 18:17:29 +02:00
Behdad Esfahbod bf029281b1 Bug 65258 - [...] Mongolian with free variation selector 2013-10-18 18:17:29 +02:00
Behdad Esfahbod 0193649ce4 [otfallback] Don't shift down above-marks too much
This seems to generate much better, almost-perfect, positioning for
Arabic as well as Latin above marks.
2013-10-18 18:17:29 +02:00
Behdad Esfahbod dba9580237 [otfallback] Never fallback-position a below-mark upwards
Test with WinXP times.ttf and U+05D9,U+05B5.
2013-10-18 18:17:29 +02:00
Behdad Esfahbod 8177da29ad Minor 2013-10-18 18:17:29 +02:00
Behdad Esfahbod c16012e901 [indic] Add Javanese support!
Seems to be working just fine!
2013-10-18 18:17:29 +02:00
Behdad Esfahbod 755b44cce6 [ft] Round metrics instead of truncate
Lohit-Punjabi has a upem of 769!  We were losing one unit in our
code, and FreeType is losing another one...  Test with U+0A06.
Has an advance of 854 in the font.  We were producing 852.
Now we do 853, which is what FreeType is telling us.
2013-10-18 12:03:01 +02:00
Behdad Esfahbod 9a49351cc2 [indic] Swith pref logic to use _hb_glyph_info_substituted()
See comments from caveat!  Seems to work fine.

This is useful for Javanese which has an atomically encoded pre-base
reordering Ra which should only be reordered if it was substituted
by the pref feature.
2013-10-18 11:25:24 +02:00
Behdad Esfahbod f175aa33c5 [indic] Fix compiler warnings 2013-10-18 11:25:24 +02:00
Behdad Esfahbod 8570273414 [otlayout] Add _hb_glyph_info_substituted()
Currently unused.
2013-10-18 11:25:24 +02:00
Behdad Esfahbod a1f7b28561 [otlayout] Switch over from old is_a_ligature() to IS_LIGATED
Impact should be minimal and positive.
2013-10-18 11:25:24 +02:00
Behdad Esfahbod 09675a8115 [otlayout] Add HB_OT_LAYOUT_GLYPH_PROPS_LIGATED
Currently unused.
2013-10-18 11:25:24 +02:00
Behdad Esfahbod 05ad6b50ac [otlayout] Add HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED
Currently unused.
2013-10-18 11:21:15 +02: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 a016174658 [otlayout] Simplify set_class() usage 2013-10-18 11:21:15 +02:00
Behdad Esfahbod 3ddf892b53 [otlayout] Renaming 2013-10-18 11:21:15 +02:00
Behdad Esfahbod 2e96d2c6ee [otlayout] More shuffling 2013-10-18 11:21:15 +02:00
Behdad Esfahbod 469524692b [otlayout] Code shuffling 2013-10-18 11:21:15 +02:00
Behdad Esfahbod 11fb16cb84 Use unsigned enums for mask types 2013-10-18 11:21:11 +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 941b699204 [otlayout] Remove unused HB_OT_LAYOUT_GLYPH_PROPS_UNCLASSIFIED 2013-10-17 20:47:33 +02:00
Behdad Esfahbod 8f9ec92dfc [indic] Adjust Javanese base algorithm 2013-10-17 19:52:47 +02:00
Behdad Esfahbod 49901862e3 [otlayout] Guard against use of ReverseChain through Context 2013-10-17 19:48:51 +02:00
Behdad Esfahbod 74f4bbf056 [indic] Towards supporting atomicly-encoded prebase-reorderings 2013-10-17 19:07:53 +02:00
Behdad Esfahbod efed40b975 [indic] Minor refactoring of reph handling 2013-10-17 18:50:11 +02:00
Behdad Esfahbod 684fe59ff8 [indic] Minor refactoring of would_substitute() 2013-10-17 18:30:06 +02:00
Behdad Esfahbod 321df83fb4 Route Buginese through the SEA shaper
Both Indic and SEA seem to do it just fine, but SEA is much
simpler.
2013-10-17 18:16:14 +02:00
Behdad Esfahbod b5a0f69e47 [indic] Pass zero-context=false to would_substitute for newer scripts
For scripts without an old/new spec distinction, use zero-context=false.
This changes behavior in Sinhala / Khmer, but doesn't seem to regress.
This will be useful and used in Javanese.
2013-10-17 18:04:23 +02:00
Behdad Esfahbod c4e71ff36d [indic] Clean up Khmer and Sinhala base finding algorithm 2013-10-17 17:04:47 +02:00
Behdad Esfahbod e10453e6fb [indic] Add BASE_POS_LAST_SINHALA
Previously we planted this into the mode used for Khmer.  There's not
really much in common between the two, so separate again.
2013-10-17 16:49:06 +02:00
Behdad Esfahbod 9ac6b01e0c [indic] Adjust Sinhala cluster merging under uniscribe
Similar to 190c8f2b60 but for
Sinhala.
2013-10-17 16:27:38 +02:00
Behdad Esfahbod 3c3df9cba1 [otlayout] Minor 2013-10-17 13:58:31 +02:00
Behdad Esfahbod 6cc136f753 [otlayout] Minor 2013-10-17 13:55:48 +02:00
Behdad Esfahbod ba6ddc421e [otlayout] Increase MAX_CONTEXT_LENGTH
It's cheap.
2013-10-17 13:52: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 6b2abdcd20 [indic] Improve clusters in presence of reph 2013-10-17 13:15:43 +02:00
Behdad Esfahbod 42d0f55cbc [indic] Apply calt,clig in the same stage as presentation features
Whic means these twp are applied per-syllable now.  Apparently
in some Khmer fonts the clig interacts with presentation features.

Test case: U+1781,U+17D2,U+1789,U+17BB,U+17C6 with Mondulkiri-R.ttf
should produce one big ligature.
2013-10-17 13:06:22 +02:00
Behdad Esfahbod ae9a5834df [indic] Fix pref vs blwf interaction
If a glyph can be both blwf and pref, we were wrongly sorting it
in the post position instead of below position.
2013-10-17 12:24:55 +02:00
Behdad Esfahbod c7dacac02c [indic] Don't apply blwf before base under old-spec mode
Test case: U+09AC,U+09CD,U+09A6 with Lohit-Bengali 2.5.3.
2013-10-17 12:20:46 +02:00
Behdad Esfahbod da72042c52 [otlayout] Fix up recent Context matching change
Commit 6b65a76b40.  "end" was becoming
negative.  Was trigerred by Lohit-Kannada 2.5.3 and the sequence:
U+0CB0,U+200D,U+0CBE,U+0CB7,U+0CCD,U+0C9F,U+0CCD,U+0CB0,U+0C97,U+0CB3
Two glyphs were being duplicated.
2013-10-17 12:02:34 +02:00
Behdad Esfahbod 1a7de1ba98 [indic] Improve Avagraha support in machine 2013-10-16 19:55:06 +02:00
Behdad Esfahbod 3756efaf4e [indic] Misc harmless fixes!
First, we were abusing OT_VD instead of OT_A.  Fix that
but moving OT_A in the grammar where it belongs (which
is different from what the spec says).

Also, only allow medial consonants after all other
consonants.  This doesn't affect any current character.

Finally, fix Halant attachment in presence of medial
consonants.  Again, this currently doesn't affect any
sequence.

I lied.  There's Gurmukhi U+0A75 which is Consonant_Medial.
Uniscribe allows one of those in each of these positions:
before matras, after matras and before syllable modifiers,
and after syllable modifiers!  We currently just allow
unlimited numbers of it, before matras.
2013-10-16 19:06:29 +02:00
Behdad Esfahbod c52ddab72e [arabic] Make ZWJ prevent ligatures instead of facilitating it
Unicode 6.2.0 Section 16.2 / Figure 16.3 says:

"For backward compatibility, between Arabic characters a ZWJ acts just
like the sequence <ZWJ, ZWNJ, ZWJ>, preventing a ligature from forming
instead of requesting the use of a ligature that would not normally be
used. As a result, there is no plain text mechanism for requesting the
use of a ligature in Arabic text."

As such, we flip internal zwj to zwnj flags for GSUB matching, which
means it will block ligation in all features, unless the font
explicitly matches U+200D glyph.  This doesn't affect joining behavior.
2013-10-16 13:42:38 +02:00
Behdad Esfahbod 1a31f9f820 [otlayout] Minor 2013-10-16 13:42:18 +02:00
Behdad Esfahbod 28d5daec94 [indic] More granular post-base cluster merging! 2013-10-16 12:32:12 +02:00
Behdad Esfahbod 9cb59d460e [indic] Fix cluster merging of left matras
The merge_clusters there was totally broken.
2013-10-16 11:34:07 +02:00
Behdad Esfahbod 190c8f2b60 [indic] Adjust cluster merging under uniscribe mode for Tamil
Apparently Uniscribe Tamil shaper doesn't ship chubby clusters
for Tamil.  Adjust to that.
2013-10-16 11:33:18 +02:00
Behdad Esfahbod 5c558877da [indic] Allow up to two syllable modifiers
Bug 70509 - Candrabindu+Visarga doesn't work in Devanagari
https://bugs.freedesktop.org/show_bug.cgi?id=70509

We categorize both bindus and visarga as syllable-modifiers.
OT spec doesn't actually say what characters go in the syllable
modifier category, and allows one.  We just allow up to two now.

Test case: U+0930,U+0941,U+0901,U+0903

Uniscribe currently doesn't support that and produces a
dotted circle.
2013-10-16 11:18:09 +02:00
Behdad Esfahbod f5299eff5c [indic] Simplify reph logic
*Shouldn't* break anything.
2013-10-15 18:21:32 +02:00
Behdad Esfahbod 65a929b1c0 [indic] If Malayalam dot-reph formed a ligature, don't move it
Rachana-0.6 implements dot-reph by ligation, so we shouldn't move it.
Uniscribe doesn't either.  Test case:

  U+0D4E,U+0D1A,U+0D4D,U+0D1A,U+0D4D
2013-10-15 18:21:32 +02:00
Behdad Esfahbod a01cbf6cbe [indic] Harmless reordering of Khmer features! 2013-10-15 18:21:32 +02:00
Behdad Esfahbod eb10233b26 [indic] Apply 'kern' for all scripts except for Khmer in Uniscribe mode
Seems to better match Uniscribe.

Note: NotoSansTelugu-Regular has kern feature, so this fixes most of the
positioning failures there, except for the kern pairs blocked by a
(non-)joiner, in which case we (correctly) kern, but Uniscribe doesn't.
2013-10-15 18:21:32 +02:00
Behdad Esfahbod 30145272a7 [indic] Don't apply presentation features across syllables
More like Uniscribe...  We still allow user-defined features to
work across syllables, but not pres,blws,abs,psts,etc.

This "regressed" Sinhala numbers by 11.  These are cases were
there's Consonant followed by Ra,Halant,ZWJ at the of text.
The Ra,Halant,ZWJ ends up forming reph, which is wrong...
But before we were also ligating that reph with the previous
consonant.  That's even more wrong.  That's also what Uniscribe
does.

Current numbers:

BENGALI: 353732 out of 354188 tests passed. 456 failed (0.128745%)
DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%)
GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%)
GURMUKHI: 60732 out of 60747 tests passed. 15 failed (0.0246926%)
KANNADA: 951030 out of 951913 tests passed. 883 failed (0.0927606%)
KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%)
MALAYALAM: 1048140 out of 1048334 tests passed. 194 failed (0.0185056%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271655 out of 271847 tests passed. 192 failed (0.070628%)
TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
2013-10-15 18:20:59 +02:00
Behdad Esfahbod 3c7b3641cf [indic] Handle Avagraha
It can come either at the end(ish!) of the syllable, or independently.
When independent, it accepts a few bits and pieces.
2013-10-15 13:14:31 +02:00
Behdad Esfahbod 5e7432b817 [myanmar] Apply abvm/blwm 2013-10-15 12:33:18 +02:00
Behdad Esfahbod 8acbb6be27 [indic] Some scripts like blwf applied to pre-base characters
...while some don't!

Improved Bengali, Devanagari, Gurmukhi, Malayalam.

Updated numbers:

BENGALI: 353732 out of 354188 tests passed. 456 failed (0.128745%)
DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%)
GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%)
GURMUKHI: 60732 out of 60747 tests passed. 15 failed (0.0246926%)
KANNADA: 951030 out of 951913 tests passed. 883 failed (0.0927606%)
KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%)
MALAYALAM: 1048134 out of 1048334 tests passed. 200 failed (0.0190779%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271666 out of 271847 tests passed. 181 failed (0.0665816%)
TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
2013-10-15 12:29:07 +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 4e6e53db5d [otlayout] "Minor" 2013-10-14 13:06:36 +02:00
Behdad Esfahbod 9326d48e43 Don't use g_mapped_file_unref()
Was introduced in glib 2.22.
2013-10-10 20:04:42 +02:00
Behdad Esfahbod 27674b4bb3 [OTLayout] Protect against out-of-range lookup indices
Filter them out when compiling map.
2013-10-03 14:54:50 -04:00
Behdad Esfahbod 3d2c4f0c2f Fix hiding of default_ignorables if font doesn't have space glyph
Based on patch from Jonathan Kew.  See discussion on the list.
2013-09-27 17:06:29 -04:00
Behdad Esfahbod 48360ec03b Bug 68990 - test-common fails on i686-linux
Fix use-after-end-of-scope.
2013-09-26 16:48:42 -04:00
Behdad Esfahbod 2af8262963 Improve library checks 2013-09-16 22:03:59 -04:00
Behdad Esfahbod 882edce48e [graphite2] Fix include 2013-09-13 20:36:43 -04:00
Behdad Esfahbod ace5c7eb4c [introspection] hb-ft annotations 2013-09-13 20:35:19 -04:00
Behdad Esfahbod a8949df487 [introspection] Annotate Unicode / font callbacks
Should move these out of the public header...

We're "clean" of introspection warnings now.  Remaining ones are about
graphite2 / freetype types not being introspectable.
2013-09-13 20:31:07 -04:00
Behdad Esfahbod 4b011094d5 Move code around
I believe I didn't break anything...
2013-09-13 20:17:42 -04:00
Behdad Esfahbod e478ebe4d3 [introspection] Add sample.py 2013-09-12 20:53:07 -04:00
Behdad Esfahbod dfdbe7f932 [introspection] Make hb_blob_create() introspectable 2013-09-12 20:52:20 -04:00
Behdad Esfahbod 085d4291a9 [introspection] Disable constructors for now
Since our types are not associated with their methods, marking
constructors makes them inaccessible from bindings.  Undo for now.
2013-09-12 17:14:33 -04:00
Behdad Esfahbod 6c48f20eea [otlayout] Add structs for JSTF table 2013-09-09 15:43:10 -04:00
Behdad Esfahbod 70303cf23b [docs/introspection] Some more annotations 2013-09-06 17:38:25 -04:00
Behdad Esfahbod 288f289997 [docs/introspection] More annotations 2013-09-06 17:30:54 -04:00
Behdad Esfahbod 17905c54f1 [introspection] Work around g-i limitation with hb_language_t 2013-09-06 17:16:25 -04:00
Behdad Esfahbod cd361c3cbe Minor change to hb_language_t
Let me know if this breaks anyone's anything.
2013-09-06 17:16:25 -04:00
Behdad Esfahbod 20cbc1f8eb Annotate hb-set a bit; add HB_SET_VALUE_INVALID 2013-09-06 15:31:22 -04:00
Behdad Esfahbod c44b81833d Whitespace 2013-09-06 15:13:16 -04:00
Behdad Esfahbod 5f512017ba [docs] Document a few symbols 2013-09-05 16:40:32 -04:00
Behdad Esfahbod e0dbf99b44 [introspection] Pass source files to scanner 2013-09-05 16:18:45 -04:00
Behdad Esfahbod 5a5350b39b Revert "Round when scaling values"
This reverts commit 10f964623f.

See discussion with Khaled Hosny on mailing list.  In short, since
integers here can be negative, and int division is "round towards
zero", proper rounding should take sign into account.  Just skip
doing it again, has been serving us well before.
2013-09-03 20:11:01 -04:00
Behdad Esfahbod 213001aa99 [build] Fix EXTRA_DIST
I was under the impression that EXTRA_DISTs will happen regardless of
automake conditionals.  Apparently I was wrong.
2013-09-03 20:00:16 -04:00
Behdad Esfahbod ac1b723917 Remove hb-old and hb-icu-le test shapers
They've been disabled for a while and no one cared.  We're past
the point to need them for testing, and if we ever need to
resurrect them again, well, they're in git graveyard somewhere.
2013-08-30 19:32:10 -04:00
Behdad Esfahbod b94243d6a9 [g-i] Rename library from harfbuzz to HarfBuzz 2013-08-30 18:41:33 -04:00
Behdad Esfahbod 71ef22b04d Turn hb-gobject, and introspection off by default
Also enable bootstrapping without them.
2013-08-28 12:52:55 -04:00
Behdad Esfahbod d8f507099b Hookup harfbuzz-gobject to introspection 2013-08-28 12:38:37 -04:00
Behdad Esfahbod 71439a8c7a [gobject] Flesh out hb-gobject
Move it to new harfbuzz-gobject library.  Implement enums and
boxed types for object-types.  Still have to do boxed types for
value types.
2013-08-28 12:38:37 -04:00
Behdad Esfahbod 23027f7611 [introspection] Enable gobject-introspection again 2013-08-28 12:38:37 -04:00
Behdad Esfahbod 757a7a9018 [uniscribe] Fixed build with wide chars
f65dafa413
2013-08-28 12:38:37 -04:00
Behdad Esfahbod 4dc798de19 Add hb-deprecated.h, and rename a couple enum values
Add deprecated alias for old name.
2013-08-27 11:46:08 -04:00
Behdad Esfahbod 2e3a07abdf Separate face source code from font
Makes documentation / introspection easier.
2013-08-27 11:46:08 -04:00
Behdad Esfahbod d3490761e1 Improve check-includes.sh 2013-08-27 11:46:07 -04:00
Behdad Esfahbod 38b8b40526 Fix possible snprintf OOM
https://bugzilla.redhat.com/show_bug.cgi?id=1001645
2013-08-27 11:46:07 -04:00
Behdad Esfahbod d22548c0e3 [check-*] Minor 2013-08-26 18:46:21 -04:00
Behdad Esfahbod 700a15fe4b Add HB_DISABLE_DEPRECATED
That moment that you have to accept that you made API mistakes...
2013-08-26 17:49:36 -04:00
Anthony Carrico f7c72b42ef [gtk-doc] Initial setup
Initial setup of gtk-doc. Straight forward setup following the gtk-doc
instructions. Ignore some troublesome types in src/hb-gobject.h. To
build use "./autogen.sh --enable-gtk-doc" then "make". Docs are in
harfbuzz/docs/reference/html/index.html.
2013-08-26 17:32:30 -04:00
Behdad Esfahbod 3409fb1c76 [uniscribe] Ask Uniscribe to return shaping results in logical order
See discussion on the list in the thread "Arabic presentation forms
and the uniscribe backend".

Based on patch from Jonathan Kew.
2013-08-21 17:22:21 -04:00
Behdad Esfahbod 1d05fdd09f [uniscribe] Print run info 2013-08-20 13:22:50 -04:00
Behdad Esfahbod 3613696b57 [coretext] Fully support user features
Based on patch from Jonathan Kew and data from Apple.

It's not working correctly though, and I suspect I'm hitting a bug in
CoreText.  When I do this:

hb-shape /Library/Fonts/Zapfino.ttf ZapfinoZapfino --shaper coretext \
--features=-liga

I expect both ligatures to turn off, but only the second one does:

[Z_a_p_f_i_n_o=0+2333|Z=7+395|a=8+285|p_f=9+433|i=11+181|n=12+261|o=13+250]

whereas if I disable 'dlig' instead of 'liga', both are turned off.
Smells...

Doesn't resolve conflicting feature settings.
2013-08-12 12:01:05 -04:00
Behdad Esfahbod 54e6f6c588 Clean up list of Unicode scripts
Rename HB_SCRIPT_CANADIAN_ABORIGINAL to HB_SCRIPT_CANADIAN_SYLLABICS
and a macro for the old name.
2013-08-09 14:36:18 -04:00
Behdad Esfahbod 515a0ac81e Fix compiler warning 2013-08-09 09:40:59 -04:00
Behdad Esfahbod 10f964623f Round when scaling values
Doesn't matter for most users since they should be working in a
fixed sub-pixel scale anyway (ie. 22.10, 26.6, 16.16, etc).
2013-08-09 09:40:01 -04:00
Behdad Esfahbod df8f70ae5d Minor 2013-08-09 09:35:10 -04:00
Behdad Esfahbod ce8badf180 Minor 2013-08-09 09:31:06 -04:00
Behdad Esfahbod d71c0df2d1 Remove vrt2, vkrn, vpal, and valt from default vertical features
See thread by John Dagget on the list.
2013-08-09 09:29:29 -04:00
Behdad Esfahbod a782a5e9a3 [coretext] Start adding support for features
Unlike AAT, looks like with CoreText very few OT features can be mapped.
:(
2013-08-07 22:08:29 -04:00
Behdad Esfahbod bdd8873fd8 Revert "[Indic] don't apply 'calt' by default in Indic shaper"
This reverts commit 952121007c.

In light of discussion on the mailing list...
2013-08-07 17:58:25 -04:00
Behdad Esfahbod 9a175914d7 [uniscribe] Support feature ranges
As Khaled pointed out, right now setting any features, turns kern
and possibly other features off.
2013-08-07 17:29:32 -04:00
Behdad Esfahbod 38d5c58d23 [uniscribe] Half-support user features
Turning features on globally works now.
2013-08-06 14:45:36 -04:00
Behdad Esfahbod 639afdc690 Minor 2013-08-06 14:28:12 -04:00
Jonathan Kew 952121007c [Indic] don't apply 'calt' by default in Indic shaper 2013-08-06 10:36:14 -04:00
Behdad Esfahbod 625678436c Fix glyph closure with class==0
As reported by cibu.  Untested.
2013-08-05 22:44:18 -04:00
Behdad Esfahbod 580d5eb93a Don't apply 'dlig' by default
Windows 8 doesn't, and the spec will be fixed.
2013-08-04 16:55:21 -04:00
Behdad Esfahbod 48382e2f41 Minor 2013-07-30 18:25:39 -04:00
Behdad Esfahbod c461371419 [CoreText] Don't leak the CTLine object (and everything that hangs off it)
Patch from Jonathan Kew.
2013-07-30 14:48:23 -04:00
Behdad Esfahbod 6fadd9dd7c Apply 'mark' to Myanmar
According to Andrew Glass: "The issue with Myanmar <mark> feature was
fixed via a servicing patch as soon as Windows 8 became available."
2013-07-26 10:33:06 -04:00
Behdad Esfahbod 86522e493d Fix glyph closure recursion! 2013-07-22 19:07:53 -04:00
Behdad Esfahbod 74439d0aa1 Minor 2013-07-22 19:02:29 -04:00
Behdad Esfahbod 8b427c78ef [uniscribe] Sanitize font file 2013-07-22 10:57:05 -04:00
Behdad Esfahbod 12ff69df21 [uniscribe] Handle TTC when renaming font 2013-07-22 10:52:12 -04:00
Behdad Esfahbod 05bad3b8c2 [uniscribe] Use OT::* types 2013-07-21 17:19:09 -04:00
Behdad Esfahbod bdeea605fe [uniscribe] Move name generation into separate function 2013-07-21 17:19:09 -04:00
Behdad Esfahbod 73f947e2a7 [uniscribe] Use blob to pass data around 2013-07-21 17:19:09 -04:00
Behdad Esfahbod 8ac2e88def [uniscribe] Use unique font name
When installing per-process fonts using AddFontMemResourceEx(),
if a font with the same family name is already installed, sometimes
that one gets used.  Which is problematic for us.  As such, we
now mangle the font to install a new 'name' table with a unique
name, which we then use to choose the font.

Patch from Jonathan Kew.
2013-07-21 17:17:44 -04:00
Behdad Esfahbod 8751de5083 Followup fix for 3f9e2dced2
During GSUB, if a ligation happens, subsequence context input matching
matches the new indexing.  During GPOS however, the indices never
change.  So just go one by one.

Fixes 'dist' positioning with mmrtext.ttf and the following sequence:

  U+1014,U+1039,U+1011,U+1014,U+1039,U+1011,U+1014,U+1039,U+1011

Reported by Jonathan Kew.
2013-07-18 16:29:50 -04:00
Behdad Esfahbod e509d35cf1 [ft] hb_ft_get_glyph_from_name fails for the name of glyph id 0
Based on patch from Jonathan Kew, as reported on the mailing list.
2013-07-11 14:56:45 -04:00
Behdad Esfahbod 29b596ac67 [uniscribe] Fix buffer allocation
Email from Jonathan Kew:

My cygwin build kept aborting on certain test words when run with the
uniscribe backend. Turned out this was caused by a bug in the allocation
of scratch buffers in hb-uniscribe.cc.

Commit 2a17f9568d introduced a new line

  ALLOCATE_ARRAY (SCRIPT_VISATTR, vis_attr, glyphs_size);

but it failed to account for this in the computation of glyphs_size
(the number of glyphs for which scratch buffer space is available),
with the result that the vis_clusters array ends up overrunning the
end of the scratch buffer and clobbering the beginning of the buffer's
info[].

AFAICS, the vis_attr array is not actually used, so the simple fix is
to remove the line that allocates it. (If/when we -do- need to use
vis_attr for something, we'll need to add another term to the earlier
calculation of glyphs_size.)

With this patch, the uniscribe backend runs reliably again.

JK
2013-07-08 08:37:15 -06:00
Behdad Esfahbod 9245e98742 [Indic] Add Javanese config
We should add for other scripts too, send me the virama codepoint
and script name...
2013-06-26 20:57:58 -04:00
Behdad Esfahbod 5f85c80a07 [OT] Collect requiredFeature only if features are not provided
As per Werner's report on the list.
2013-06-26 20:14:18 -04:00
Behdad Esfahbod 3f9e2dced2 Fix contextual lookup recursion indexing
See email thread "Skipping Control for Attaching Marks using OpenType"
from earlier this month.
2013-06-26 19:46:55 -04:00
Bradley Grainger 89312b7417 Destroy lookups before blobs.
'layout->gsub' may depend on data owned by 'layout->gsub_blob', so it must
be deinitialized before the blob is destroyed.
2013-06-21 15:02:18 -07:00
Behdad Esfahbod 79d1007a50 If variation selector is not consumed by cmap, pass it on to GSUB
This changes the semantics of get_glyph() callback and expect that
callbacks return false if the requested variant is not available, and
then we will call them back with variation_selector=0 and will retain
the glyph for the selector in the glyph stream.

Apparently most Mongolian fonts implement the Mongolian Variation
Selectors using GSUB, not cmap.

https://bugs.freedesktop.org/show_bug.cgi?id=65258

Note that this doesn't fix the Mongolian shaping yet, because the way
that's implemented is that the, say, 'init' feature ligates the letter
and the variation-selector.  However, since currently the variation
selector doesn't have the 'init' mask on, it will not be matched...
2013-06-13 19:01:07 -04:00
Behdad Esfahbod c7a8491720 Skip over multiple variation selectors in a row 2013-06-10 15:08:49 -04:00
Behdad Esfahbod 7235f33f9e Fix misc warnings reported by cppcheck
https://bugs.freedesktop.org/show_bug.cgi?id=65544
2013-06-10 15:08:49 -04:00
Behdad Esfahbod 2fd0e02706 Minor 2013-06-06 17:16:01 -04:00
Behdad Esfahbod 4ddf937242 Remove unnecessary stdint.h include 2013-06-03 18:36:26 -04:00
Chun-wei Fan 93a04b8b5e hb-uniscribe.cc: Re-enable build under Visual Studio
-Declare hinstLib at the top of block
-Fix the definitions of the typedefs of ScriptItemizeOpenType,
 ScriptShapeOpenType and ScriptPlaceOpenType
2013-06-03 18:32:59 -04:00
Behdad Esfahbod d70be29831 Fix dist 2013-05-28 17:27:31 -04:00
Behdad Esfahbod 22ce096174 Generate harfbuzz-icu.pc
Currently it only works with ICU that has .pc files.  I'll
wait till someone complains before fixing it for icu-config
systems.
2013-05-28 17:18:30 -04:00
Behdad Esfahbod d9afa11133 Build hb-icu into libharfbuzz-icu.so 2013-05-28 15:27:40 -04:00
Behdad Esfahbod 2a17f9568d Bug 55494 - ScriptItemizeOpenType doesn't exists under Windows XP
Fallback to older API if OpenType variants are not available.
2013-05-28 13:13:46 -04:00
Behdad Esfahbod 61e7775fa7 Remove hb-icu dependency from hb-icu-le shaper 2013-05-27 18:24:56 -04:00
Behdad Esfahbod 7e08f1258d Don't zero advance of mark-non-mark ligatures
If there's a mark ligating forward with non-mark, they were
inheriting the GC of the mark and later get advance-zeroed.
Don't do that if there's any non-mark glyph in the ligature.

Sample test: U+1780,U+17D2,U+179F with Kh-Metal-Chrieng.ttf

Also:
Bug 58922 - Issue with mark advance zeroing in generic shaper
2013-05-27 14:50:00 -04:00
Behdad Esfahbod cf059ac69d [icu_le] Support non-BMP text 2013-05-24 15:28:11 -04:00
Behdad Esfahbod a447c528e6 [icu_le] A bit better scaling 2013-05-23 17:05:39 -04:00
Behdad Esfahbod fb502a2278 Merge commit '9d9e72e94e7914f82ce62a304e7242f79c13edaf' 2013-05-23 15:54:52 -04:00
Behdad Esfahbod b9408d24f3 [icu_le] Fix scaling
Seems to work...
2013-05-23 15:43:02 -04:00
Behdad Esfahbod 601526392d Copy stdint.h boilerplate to ucdn 2013-05-21 17:22:13 -04:00
Behdad Esfahbod d785fa0c45 Minor refactoring 2013-05-20 09:18:52 -04:00
Behdad Esfahbod 127daf15e0 Arabic mark width-zeroing regression
Mozilla Bug 873902 - Display Arabic text with diacritics is bad
https://bugzilla.mozilla.org/show_bug.cgi?id=873902
2013-05-20 09:11:35 -04:00
Behdad Esfahbod fa3d0a0ce6 Bug 64476 - Typo in hb_set_t.get_min()
Fixes previous commit's test.
2013-05-14 15:30:55 -04:00
Behdad Esfahbod 9d9e72e94e [OTLayout] Use is_inplace() when flipping buffers 2013-05-04 16:04:04 -04:00
Behdad Esfahbod 45f3d980c9 [OTLayout] Merge / templateize apply_string() 2013-05-04 16:04:04 -04:00
Behdad Esfahbod e015b8f218 [OTLayout] Minor 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 bac1dd6a0f [OTLayout] Refactor a bit more 2013-05-04 16:04:04 -04:00
Behdad Esfahbod d2c96819de Move code around 2013-05-04 16:04:04 -04:00
Behdad Esfahbod 45fd9424c7 [OTLayout] Add hb_ot_layout_lookup_accelerator_t 2013-05-04 16:04:03 -04:00
Behdad Esfahbod 76ea563673 [OTLayout] Add note about collect_glyphs() and recursive lookups 2013-05-04 16:04:03 -04:00
Behdad Esfahbod a8bf0e91f1 Add U+061C ARABIC LETTER MARK to Default_Ignorable 2013-05-03 14:45: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 3276c354da [OTLayout] Minor refactoring 2013-05-02 15:39:15 -04:00
Behdad Esfahbod ea86efa486 Minor 2013-05-02 15:39:15 -04:00
Behdad Esfahbod 8b63efb6f8 Minor 2013-05-02 15:39:15 -04:00
Behdad Esfahbod 2265be0a62 Minor 2013-05-02 15:39:15 -04:00
Behdad Esfahbod e6f19af087 Minor 2013-05-02 14:00:16 -04:00
Behdad Esfahbod 6c15ddfe2b Renamed DEBUG to something else
Some infrastructures use DEBUG as a generic symbol.
2013-04-30 11:34:00 -04:00
Behdad Esfahbod ed79dff517 Minor 2013-04-21 15:43:27 -04:00
Behdad Esfahbod 893f57b32f Minor renaming 2013-04-21 15:23:21 -04:00
Behdad Esfahbod 8ac3c9c0b6 Rename "pause" to "stage"
The compile() function is starting to become illegible...
2013-04-21 15:19:38 -04:00
Behdad Esfahbod dd0641a432 Minor 2013-04-21 15:13:57 -04:00
Behdad Esfahbod 06a44e8593 Remove unneeded code
We always push a pause at the end such that each lookup falls in exactly
one pause_map_t.  Now, only if I can find a better name for that...
2013-04-21 15:13:08 -04:00
Behdad Esfahbod 8659c63608 Hand-code bsearch in the hot inner loop.
Saves another 3 / 4 percent with Amiri.
2013-04-19 14:36:32 -04:00
Behdad Esfahbod 797d76d07f Minor 2013-04-18 19:04:12 -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 f9a6110267 Remove HB_DEBUG_SET_DIGESTS
Wasn't correct with the new combiner.  I should add it back somehow,
but for now the digests seem to be working very well...
2013-04-17 19:01:49 -04:00
Behdad Esfahbod f7466ee76f Remove hb_set_digest_common_bits_t
Was unused.
2013-04-17 18:20:44 -04:00
Behdad Esfahbod 0d5798a137 Improve hb_set_digest_t
Make Amiri rendering faster a whopping 45% again!  Speends up pretty
much anything I tested.
2013-04-17 18:19:21 -04:00
Behdad Esfahbod c7851efcd3 Templatize hb_set_digest_lowest_bits_t filter 2013-04-17 18:18:10 -04:00
Behdad Esfahbod 0edd0fd255 Add comment 2013-04-17 17:26:56 -04:00
Behdad Esfahbod b40f2c0372 Add hb_set_digest_combiner_t 2013-04-16 23:21:38 -04:00
Behdad Esfahbod 02e5e58368 Speed up Speed up hb_set_digest_common_bits_t calcs
Correctly this time.
2013-04-16 23:13:10 -04:00
Behdad Esfahbod 893991fc9d Initialize set digests
We were not initializing the digests properly and as a result they were
being initialized to zero, making digest1 to never do any useful work.

Speeds up Amiri shaping significantly.
2013-04-16 21:57:35 -04:00
Behdad Esfahbod 4d2813d3e9 Print set-digest hit ratio with HB_DEBUG_SET_DIGESTS 2013-04-16 21:57:35 -04:00
Behdad Esfahbod 1357c2dd12 Revert "Speed up hb_set_digest_common_bits_t calcs"
This reverts commit 3d1b66a35e.

The calculations were buggy.  It's not worth optimizing right now.
2013-04-16 21:47:40 -04:00
Behdad Esfahbod 2b712bba3f Fix typo in unused macro 2013-04-16 16:11:09 -04:00
Behdad Esfahbod 08677c2507 [old] Speed up Unicode properties access in hb-old shaper
Just to be sure it's not punishing the old shaper performance
numbers.  Doesn't seem to have a measurable effect.
2013-04-11 14:45:58 -04:00
Behdad Esfahbod ef9e02eddf Minor 2013-04-09 14:06:54 -04:00
Behdad Esfahbod 587e5753e0 Add note re Hangul shaping 2013-04-05 12:38:58 -04:00
Behdad Esfahbod 269de14dda Don't compose Hangul jamo
See thread "an issue regarding discrepancy between Korean and Unicode
standards" on the mailing list for the rationale.  In short: Uniscribe
doesn't, so fonts are designed to work without it.
2013-04-04 23:06:54 -04:00
Behdad Esfahbod 1f97060985 Put back MemoryBarrier fallback implementation on MINGW32
This almost reverts 2761e8a632,
but only if under MINGW32, so it doesn't affect MSVC.
2013-04-04 15:02:03 -04:00
Behdad Esfahbod f368ba4a9e [Arabic] Zero marks by GDEF, not Unicode category
Testing shows that this is closer to what Uniscribe does.

Reported by Khaled Hosny:

"""
commit 568000274c
...
This commit is causing a regression with Amiri, the string “هَٰذ” with
Uniscribe and HarfBuzz before this commit, gives:

	[uni0630.fina=3+965|uni0670.medi=0+600|uni064E=0@-256,0+0|uni0647.init=0+926]

But now it gives:

	[uni0630.fina=3+965|uni0670.medi=0+0|uni064E=0@-256,0+0|uni0647.init=0+926]

i.e. uni0670.medi is zeroed though it has a base glyph GDEF class.
"""

The test case is U+0647,U+064E,U+0670,U+0630 with Amiri.
2013-04-04 14:25:36 -04:00
Behdad Esfahbod 3b80674c50 Bug 63107 - FTBFS on ppc64: symbols marked with 'D' on powerpc64 instead 2013-04-04 12:06:46 -04:00
Behdad Esfahbod 7148dc1a97 [graphite2] Don't crash if language is not set
https://bugs.webkit.org/show_bug.cgi?id=113796
2013-04-02 14:08:53 -04:00
Behdad Esfahbod a88a62f70f Minor 2013-03-21 21:02:16 -04:00
Behdad Esfahbod cc50bf5b13 Remove Hangul filler characters from Default_Ignorable chars
See discussion on mailing list.
2013-03-19 07:00:41 -04:00
Behdad Esfahbod a8cf7b43fa [Indic] Futher adjust ZWJ handling in Indic-like shapers
After the Ngapi hackfest work, we were assuming that fonts
won't use presentation features to choose specific forms
(eg. conjuncts).  As such, we were using auto-joiner behavior
for such features.  It proved to be troublesome as many fonts
used presentation forms ('pres') for example to form conjuncts,
which need to be disabled when a ZWJ is inserted.

Two examples:

	U+0D2F,U+200D,U+0D4D,U+0D2F with kartika.ttf
	U+0995,U+09CD,U+200D,U+09B7 with vrinda.ttf

What we do now is to never do magic to ZWJ during GSUB's main input
match for Indic-style shapers.  Note that backtrack/lookahead are still
matched liberally, as is GPOS.  This seems to be an acceptable
compromise.

As to the bug that initially started this work, that one needs to
be fixed differently:

  Bug 58714 - Kannada u+0cb0 u+200d u+0ccd u+0c95 u+0cbe does not
  provide same results as Windows8
  https://bugs.freedesktop.org/show_bug.cgi?id=58714

New numbers:

BENGALI: 353689 out of 354188 tests passed. 499 failed (0.140886%)
DEVANAGARI: 707305 out of 707394 tests passed. 89 failed (0.0125814%)
GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%)
GURMUKHI: 60706 out of 60747 tests passed. 41 failed (0.067493%)
KANNADA: 951030 out of 951913 tests passed. 883 failed (0.0927606%)
KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%)
LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
MALAYALAM: 1048102 out of 1048334 tests passed. 232 failed (0.0221304%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271666 out of 271847 tests passed. 181 failed (0.0665816%)
TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
2013-03-19 06:22:06 -04:00
Behdad Esfahbod 190e19e684 [ft] Remove TODO items that I'm not going to fix 2013-03-09 20:30:22 -05:00
Behdad Esfahbod 392ee97431 [ft] Remove TODO item re FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH
That flag is redundant, deprecated, and ignored since April 2011.
From FreeType git log:

commit 8c82ec5b17d0cfc9b0876a2d848acc207a62a25a
Author: Behdad Esfahbod <behdad@behdad.org>
Date:   Thu Apr 21 08:21:37 2011 +0200

    Always ignore global advance.

    This makes FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH redundant,
    deprecated, and ignored.  The new behavior is what every major user
    of FreeType has been requesting.  Global advance is broken in many
    CJK fonts.  Just ignoring it by default makes most sense.

    * src/truetype/ttdriver.c (tt_get_advances),
    src/truetype/ttgload.c (TT_Get_HMetrics, TT_Get_VMetrics,
    tt_get_metrics, compute_glyph_metrics, TT_Load_Glyph),
    src/truetype/ttgload.h: Implement it.

    * docs/CHANGES: Updated.
2013-03-09 20:27:55 -05:00
Behdad Esfahbod c5d91f3980 Add hb_auto_array_t 2013-03-09 04:34:21 -05: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 2761e8a632 [win32] Remove MemoryBarrier() fallback implementation
I added these because the older mingw32 toolchain didn't have
MemoryBarrier().  The newer mingw-w64 toolchain however has.
As reported by John Emmas this was causing build failure with
MSVC (on glib) because of inline issues.  But that reminded me
that we may be taking this path even if the system implements
MemoryBarrier as a function, which is a waste.  So, just remove
it.
2013-03-07 20:51:30 -05:00
Behdad Esfahbod 5594c2d112 [FT] Just return if glyph name not found
The fallback happens in higher level already.  No need to do here.
2013-03-06 19:37:31 -05:00
Behdad Esfahbod fb7c182bf9 [Indic] Minor 2013-03-06 00:53:24 -05:00
Behdad Esfahbod 8144936d07 [Indic] Work around fonts with broken new-spec tables
See comments, and this thread:

http://lists.freedesktop.org/archives/harfbuzz/2013-March/002990.html

Originally reported here:

https://code.google.com/p/chromium/issues/detail?id=96143

Doesn't change test suite numbers.
2013-03-05 20:08:59 -05:00
Behdad Esfahbod cd54d505d1 Fix distcheck 2013-03-04 21:29:38 -05:00
Behdad Esfahbod 41732f1fe3 [Indic] Help compiler put indic_features table in .rodata
The overridden "or" operator was preventing the flag expression from
being const, and putting the table in .data instead or .rodata.
2013-02-27 20:40:54 -05:00
Behdad Esfahbod 778d7f844c [buffer] Better parse glyph names 2013-02-27 18:49:18 -05:00
Behdad Esfahbod 20b817ac21 [buffer] Implement buffer deserialization for format=json
Using a ragel machine.
2013-02-27 18:49:18 -05:00
Behdad Esfahbod 847794e929 [buffer] Implement buffer deserialization for format=text
Using a ragel machine.
2013-02-27 18:49:18 -05:00
Behdad Esfahbod 4ee803b42a [buffer] Fix serializing of buffer with invalid direction 2013-02-27 18:49:15 -05:00
Behdad Esfahbod e54dd26300 [buffer] Start implementing buffer deserialization 2013-02-27 18:49:13 -05:00
Behdad Esfahbod bcc8f32b4c [buffer] Minor 2013-02-27 18:49:10 -05:00
Behdad Esfahbod d3e14aafff [buffer] Move buffer serialization code to a new file 2013-02-27 18:49:05 -05:00
Behdad Esfahbod 8da5111269 Minor 2013-02-27 18:49:05 -05:00
Behdad Esfahbod 94789fd601 [Indic] Sort pre-base reordering consonants with post-forms
Before, we were marking them as below-form for initial reordering.
However, there is a rule that says "post consonants should follow
below consonsnts" for base determination purposes.  Malayalam has
port-form YA/VA, and RA is pre-base.  As such, for a sequence like
YA,Virama,YA,Virama,RA, the correct base is at index 0.  But
because the code was seeing RA as a below-base, it was stopping at
the second YA as base, instead of jumping it as a post-base.

By treating prebase-reordering consonants like post-forms, this
is fixed.

MALAYALAM went down from 351 to 265.  Other numbers didn't change:

BENGALI: 353686 out of 354188 tests passed. 502 failed (0.141733%)
DEVANAGARI: 707305 out of 707394 tests passed. 89 failed (0.0125814%)
GUJARATI: 366262 out of 366457 tests passed. 195 failed (0.0532122%)
GURMUKHI: 60706 out of 60747 tests passed. 41 failed (0.067493%)
KANNADA: 950680 out of 951913 tests passed. 1233 failed (0.129529%)
KHMER: 299074 out of 299124 tests passed. 50 failed (0.0167155%)
LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
MALAYALAM: 1048069 out of 1048334 tests passed. 265 failed (0.0252782%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271539 out of 271847 tests passed. 308 failed (0.113299%)
TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
2013-02-26 21:22:37 -05:00
Behdad Esfahbod 05d5d3cd63 Fix "comparison between signed and unsigned" warnings
Patch from Jonathan Kew.
2013-02-25 23:57:51 -05:00
Behdad Esfahbod 07a52b6211 Give up sanitizing after 100 edit requests
Such fonts are *definitely* really broken.  Give up.
Limits time spent in sanitize for extremely / deliberately broken
fonts.  For example, two fonts with these md5sum / names:

  9343f0a1b8c84b8123e7d201cae62ffd.ttf
  eb8c978547f09d368fc204194fb34688.ttf

were spending over a second in sanitize!  Not anymore.
2013-02-25 19:09:57 -05:00
Behdad Esfahbod 29ff254815 Add HB_DEBUG_VERBOSE
Only affects the verbosity of function name printing right now.
2013-02-25 19:04:56 -05:00
Behdad Esfahbod c3ba49b6fa Always create sub-blobs in MEMORY_MODE_READONLY
This fixes a design bug with sanitize and sub-blobs that can
cause crashes.  Jonathan and I found and debugged this issue
when we tested a corrupt font with the md5sum / filename:
ea395483d37af0cb933f40689ff7b60a.  Two hours of intense
debugging we found out that the font has overlapping GSUB/GPOS
tables, and as such, sanitizing the second table can modify
the first one, which can cause all kinds of undefined behavior.

The correct way to fix this is to make sure sub-blobs are
always created readonly, since we consider the parent blob
to be a shared resource and can't modify it, even if it *is*
writable.

This essentially makes the READONLY_MAY_MAKE_WRITABLE mode
unused...  Maybe we should simply remove / deprecate it.
2013-02-25 17:06:35 -05:00
Behdad Esfahbod 57542d7f41 Minor 2013-02-21 15:55:49 -05:00
Behdad Esfahbod d46606e119 Port TrueType-kerning to use skippy iterator
It skips joiners and default ignorables now.  Skips marks too, but only
if there is proper GDEF classes for marks.
2013-02-21 15:55:49 -05:00
Behdad Esfahbod 722e8b857e Fixup previous commit
Was not decreasing num_items.  Ouch!
2013-02-21 15:37:51 -05:00
Behdad Esfahbod ba87b8fc89 Move code around 2013-02-21 15:23:39 -05:00
Behdad Esfahbod 2b2a6e8944 [OTLayout] Correctly skip Default_Ignorable when match_func not set
When a match_func was not set on the matcher_t object (ie. from GPOS),
then the Default_Ignorables (including joiners) were never skipped.
This meant that they were not skipped as they should during GPOS
matching.  Fix that.

A few Indic numbers have "regressed": BENGALI and DEVANAGARI went
up from 290 and 58 respectively, but in both cases new results are
superior to Uniscribe, as they apply GPOS when we weren't (and
Uniscribe isn't) before.
BENGALI: 353686 out of 354188 tests passed. 502 failed (0.141733%)
DEVANAGARI: 707305 out of 707394 tests passed. 89 failed (0.0125814%)
GUJARATI: 366262 out of 366457 tests passed. 195 failed (0.0532122%)
GURMUKHI: 60706 out of 60747 tests passed. 41 failed (0.067493%)
KANNADA: 950680 out of 951913 tests passed. 1233 failed (0.129529%)
KHMER: 299074 out of 299124 tests passed. 50 failed (0.0167155%)
LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
MALAYALAM: 1047983 out of 1048334 tests passed. 351 failed (0.0334817%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271539 out of 271847 tests passed. 308 failed (0.113299%)
TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
2013-02-21 15:07:03 -05:00
Behdad Esfahbod ff93ac8cb2 Minor 2013-02-21 14:51:40 -05:00
Behdad Esfahbod b1f4407591 [SEA] Fix order of pre-base reordering Ra and left matras
The code was confused because it was expecting left matra to have
POS_PRE_M, like we do in the Myanmar shaper, but that is not what
we were doing in this shaper.  Rewrite to rely on category only.

Test case: U+AA06,U+AA34,U+AA2F
2013-02-17 12:12:37 -05:00
Behdad Esfahbod 99fa9ea020 Minor 2013-02-15 11:47:24 -05:00
Behdad Esfahbod 27589620ba [OTLayout] Remove unused code 2013-02-15 11:47:09 -05:00
Behdad Esfahbod c2a1cdc4c4 [Arabic] Fix shaping of left-joining 'Phags-Pa U+A872
This is the first character in Unicode to have Arabic left-joining
behavior.  Update the machine to recognize that.

Test case: U+A840,U+A872,U+A840.
2013-02-15 09:27:02 -05:00
Behdad Esfahbod c462b32dcb 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().
2013-02-15 07:51:47 -05:00
Behdad Esfahbod 7abddbb47a Add assertions for a couple programmer errors 2013-02-15 07:46:57 -05:00
Behdad Esfahbod 038c98f686 Allow disabling of TrueType kerning
Responds to the same feature tag that GPOS kerning does:
'kern' for horizontal and 'vkrn' for vertical.
2013-02-15 07:41:07 -05:00
Behdad Esfahbod 398238a252 Fix partial disabling of default-on features
Surprisingly, if user ever tried to turn a default feature off partially
(say, disable liga for a range), the feature was being turned off
globally!  Fixed now.
2013-02-15 07:40:10 -05:00
Behdad Esfahbod cb90b1bbe6 [OTLayout] Respect syllable boundaries for backtrack/lookahead matching
Originally we meant to match backtrack/lookahead across syllable
boundaries.  But a bug in the code meant that this was NOT done for
backtrack.  We "fixed" that in 2c7d0b6b80,
but that broke Myanmar shaping.

We now believe that for Indic-like shapers (which is where syllables are
used), all basic shaping forms should be fully contained within their
syllables, so now we limit backtrack/lookahead matching to the syllable
too.  Unbreaks Myanmar.
2013-02-15 07:02:08 -05:00
Behdad Esfahbod ee9c3a17d0 Minor refactoring 2013-02-15 06:22:52 -05:00
Behdad Esfahbod cfc507c543 [Indic-like] Disable automatic joiner handling for basic shaping features
Not for Arabic, but for Indic-like scripts.  ZWJ/ZWNJ have special
meanings in those scripts, so let font lookups take full control.

This undoes the regression caused by automatic-joiners handling
introduced two commits ago.

We only disable automatic joiner handling for the "basic shaping
features" of Indic, Myanmar, and SEAsian shapers.  The "presentation
forms" and other features are still applied with automatic-joiner
handling.

This change also changes the test suite failure statistics, such that
a few scripts show more "failures".  The most affected is Kannada.
However, upon inspection, we believe that in most, if not all, of the
new failures, we are producing results superior to Uniscribe.  Hard to
count those!

Here's an example of what is fixed by the recent joiner-handling
changes:

  https://bugs.freedesktop.org/show_bug.cgi?id=58714

New numbers, for future reference:

BENGALI: 353892 out of 354188 tests passed. 296 failed (0.0835714%)
DEVANAGARI: 707336 out of 707394 tests passed. 58 failed (0.00819911%)
GUJARATI: 366262 out of 366457 tests passed. 195 failed (0.0532122%)
GURMUKHI: 60706 out of 60747 tests passed. 41 failed (0.067493%)
KANNADA: 950680 out of 951913 tests passed. 1233 failed (0.129529%)
KHMER: 299074 out of 299124 tests passed. 50 failed (0.0167155%)
LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
MALAYALAM: 1047983 out of 1048334 tests passed. 351 failed (0.0334817%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271539 out of 271847 tests passed. 308 failed (0.113299%)
TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
TIBETAN: 208469 out of 208469 tests passed. 0 failed (0%)
2013-02-14 13:10:54 -05:00
Behdad Esfahbod 0b45479198 [OTLayout] Add fine-grained control over ZWJ matching
Not used yet.  Next commit...
2013-02-14 13:02:13 -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 ec5448667b Add hb_ot_map_feature_flags_t
Code cleanup.  No (intended) functional change.
2013-02-14 12:53:57 -05:00
Behdad Esfahbod e7ffcfafb1 Clean-up add_bool_feature 2013-02-14 11:58:13 -05:00
Behdad Esfahbod e7562f53fe Fix compile warnings for ragel-generated machines 2013-02-14 11:58:13 -05:00
Behdad Esfahbod 4e51df73a3 [OTLayout] Remove unused function 2013-02-14 07:42:42 -05:00
Behdad Esfahbod 8820bb235b [OTLayout] Port apply_lookup to skippy_iter 2013-02-14 07:41:23 -05:00
Behdad Esfahbod dfca269f06 [OTLayout] Port ligate_input to skippy_iter 2013-02-14 07:41:23 -05:00
Behdad Esfahbod 7e53415c2d [OTLayout] Minor fix for apply_lookup()
Should NOT change behavior, since first glyph is a match.
2013-02-14 06:24:30 -05:00
Behdad Esfahbod 6880f7e19d [OTLayout] Make table type known to apply context 2013-02-13 12:17:25 -05:00
Behdad Esfahbod 2c7d0b6b80 [OTLayou] Unbreak backtrack matching
Was introduced by 28b9d502bb.
2013-02-13 12:10:08 -05:00
Behdad Esfahbod c074ebc466 [OTLayout] Minor refactoring 2013-02-13 11:22:42 -05:00
Behdad Esfahbod 407fc12466 [OTLayout] Remove bogus caching of glyph property 2013-02-13 11:13:06 -05:00
Behdad Esfahbod 6b1e3502e2 Remember ZWNJ
To be used in upcoming changes.
2013-02-13 11:02:54 -05:00
Behdad Esfahbod 1f91c39677 Indent 2013-02-13 09:38:40 -05:00
Behdad Esfahbod a0cb9f33ee [Indic] Improve base finding in final_reordering
Fixes 5 Malayalam failures!

MALAYALAM: 1048016 out of 1048334 tests passed. 318 failed (0.0303338%)
2013-02-13 09:26:55 -05:00
Behdad Esfahbod f22b7e7778 [Indic] Track base position when reordering things
Ouch, how did things ever work without this?!  The added test that has a
dot-reph as well as a pre-base reordering Ra perfectly demonstrates the
bug (tested with Nirmala font from Win8 for example).  Testing suggests
that Win8 shaper has the *exact* same bug / behavior that we used to
have.  Odd.
2013-02-13 07:32:46 -05:00
Behdad Esfahbod bc11de144c [SEA] Don't zero any mark advances
Keep the logic simple, easier to explain to font developers.
2013-02-13 05:59:06 -05:00
Behdad Esfahbod 0291a65286 Further adjust mark advance zeroing
This is a followup to 568000274c.
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.
2013-02-13 05:57:24 -05:00
Behdad Esfahbod 85c51ec2e1 [Indic] Fix Eyelash Ra with old Devanagari spec 2013-02-12 18:17:39 -05:00
Behdad Esfahbod 63e48bc33b [Indic] Apply 'blwf' before 'half'
This reverts 167b625d98.  It didn't
matter before, but that's going to change with next commit.
2013-02-12 18:02:07 -05:00
Behdad Esfahbod 70d6565711 [Indic] Apply 'vatu' before 'cjct'
This essentially reverts 1d6846db9e,
but that commit is from way back when.  We should be better
following the spec order now again.
2013-02-12 18:02:07 -05:00
Behdad Esfahbod f9b660534c [Myanmar] Use master Indic table for syllable data 2013-02-12 16:13:56 -05:00
Behdad Esfahbod a6c1e040e5 Improve check for Windows platforms
Instead of checking for compiler, check for platform.
2013-02-12 15:31:58 -05:00
Behdad Esfahbod 9e1f80ab3e [SEA] Treat Consonant_Final like Consonant_Medial 2013-02-12 15:28:21 -05:00
Behdad Esfahbod bab02d339f Rename HB_OT_INDIC_OPTIONS env var to HB_OPTIONS
The Myanmar shaper now respects the uniscribe-bug-compatibility
option too.
2013-02-12 15:26:45 -05:00
Behdad Esfahbod 3a83d33ec0 Add South-East Asian shaper
Handles Tai Tham, Cham, and New Tai Lue for now.
2013-02-12 12:14:10 -05:00
Behdad Esfahbod 5676d5d527 [Indic] Make sure New Tai Lue works! 2013-02-12 10:31:14 -05:00
Behdad Esfahbod 568000274c 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.
2013-02-12 09:44:57 -05:00
Behdad Esfahbod 99749ca8e0 [Myanmar] Add note re Uniscribe NOT applying 'mark' 2013-02-12 09:44:35 -05:00
Behdad Esfahbod b842780138 Minor 2013-02-11 17:02:17 -05:00
Behdad Esfahbod 419c933ed1 [Myanmar] Fix handling of Punctuation and Symbol types
Testing with "clusters" now on par with testing without them.  15
failures both.
2013-02-11 16:16:16 -05:00
Behdad Esfahbod 0572c1410a [Myanmar] Fixup handling of joiners and GB characters 2013-02-11 16:16:07 -05:00
Behdad Esfahbod 1c8654ead4 [Myanmar] Prevent reordering between Asat and Dot below
Implemented as a hack for now.  Myanmar failures down from 23 to 15.

MYANMAR: 1123868 out of 1123883 tests passed. 15 failed (0.00133466%)

The remaining 15 cases are all where the syllable is wrong according to
the OpenType spec.  We insert dottedcircle.  Uniscribe fails to do that,
but it also fails to reorder the prebase-reordering medial-Ra.  So it
gets it wrong.
2013-02-11 14:28:59 -05:00
Behdad Esfahbod 98628cac9f Add Win8-style Myanmar shaper
Myanmar failures down from 51% to 0.00204648%!

MYANMAR: 1123860 out of 1123883 tests passed. 23 failed (0.00204648%)
2013-02-11 14:20:08 -05:00
Behdad Esfahbod 1df5644958 Minor 2013-02-11 14:18:09 -05:00
Behdad Esfahbod 54f7b4d9ec [OTLayout] Respect lookup-flags skipping over non-mark glyphs
Before, when matching ligatures, we never skipping over base / liga
glyphs even if that was what the LookupFlags asked for.

Fixed now.  We carefully reviewed all instances of this, and tested with
Amiri as well as some Indic scripts, and are confident that this should
NOT break anyone's fonts.  It's also how Uniscribe does it, from what
we can tell.
2013-02-11 13:27:17 -05:00
Behdad Esfahbod 9082efc4aa [OTLayout] s/mark_skipping/skipping/
In aticipation of upcoming changes.
2013-02-11 13:14:56 -05:00
Behdad Esfahbod 9621e0ba29 [Indic] Fix bug introduced in 8b217f5ac5
Was breaking reph formation logic when the Ra is the only consonant.
Devanagari regression fixed.  Down to 57 failures again.  Ouch.
2013-02-11 12:59:36 -05:00
Behdad Esfahbod 6e74c64211 Improve normalization heuristic
Before, for most scripts, we were not trying to recompose two characters
if the second one had ccc=0.  That fails for Myanmar where U+1026
decomposes to U+1025,U+102E, both of which have ccc=0.  However, we do
want to try to recompose those.  We now check whether the second is a
mark, using general category instead.

At the same time, remove optimization that was conflicting with this.

[Let the Ngapi hackfest begin!]
2013-02-11 12:59:00 -05:00
Behdad Esfahbod adff377815 Revert "[Indic] Import ragel-generated Indic machine in git"
This reverts commit fab7a71f11.

Conflicts:
	src/hb-ot-shape-complex-indic-machine.hh

Keeping that generated file in-tree causes problems with processes like
tinderbox  that automatically fetch and build harfbuzz.  It's harder to
bootstrap harfbuzz now (as was previously), but I'm willing to give this
another chance and see how it goes.
2013-02-06 23:43:27 -05:00
Behdad Esfahbod 9de5f98f36 Bug 60035 - intermittent make install failure on hb-version.h 2013-02-04 23:28:22 -05:00
Behdad Esfahbod 6c1e8b614c Bug 59637 - check-exported-symbols.sh & check-internal-symbols.sh fail on mips/mipsel 2013-02-04 23:24:16 -05:00
Behdad Esfahbod bafdf3d983 Merge check-internal-symbols.sh and check-exported-symbols.sh 2013-02-04 23:06:50 -05:00
Behdad Esfahbod e9171af55c Bug 60053 - hb-common.cc:181:6: warning: ‘void free_langs()’ defined but not used 2013-01-29 22:45:00 -05:00
Behdad Esfahbod eb45c0a2fb Minor 2013-01-16 22:07:50 -06:00
Behdad Esfahbod 52c8d1226f Minor 2013-01-14 13:51:46 -06:00
Behdad Esfahbod f88d3bd7e4 Fix build with Sun compiler 2013-01-14 00:33:58 -06:00
Behdad Esfahbod 08b29c0809 Revert "Minor"
This reverts commit 0a49235701.

Enables code on more compilers.
2013-01-14 00:32:12 -06:00
Behdad Esfahbod e78463211e Fix linking with non-gcc compilers 2013-01-14 00:27:21 -06:00
Behdad Esfahbod de649f07f1 Fix residuals from fontconfig changes 2013-01-14 00:26:43 -06:00
Behdad Esfahbod 2dcb333f52 Add atomic ops for Solaris
Based on fontconfig patch from Raimund Steger.
2013-01-10 01:18:10 -06:00
Behdad Esfahbod 69fd6e157c Fix crasher during multi-thread shaper data creation
Sample crash:

0  _hb_graphite2_shaper_face_data_destroy (data=0xffffffffffffffff)
    at ../../src/hb-graphite2.cc:129
1  0x00007ffff4271d7d in hb_graphite2_shaper_face_data_ensure (
    face=<optimized out>) at ../../src/hb-shaper-list.hh:35
2  hb_shape_plan_plan (shaper_list=<optimized out>, num_user_features=0,
    user_features=0x0, shape_plan=0xf7b490) at ../../src/hb-shaper-list.hh:35
3  hb_shape_plan_create (face=<optimized out>, props=<optimized out>,
    user_features=0x0, num_user_features=0, shaper_list=<optimized out>)
    at ../../src/hb-shape-plan.cc:108
4  0x00007ffff4272c93 in hb_shape_plan_create_cached (face=0x10cf2b0,
    props=0x11980d8, user_features=0x0, num_user_features=<optimized out>,
    shaper_list=0x0) at ../../src/hb-shape-plan.cc:283
2013-01-10 00:03:36 -06:00
Behdad Esfahbod ecd454b3cd [Indic] In old-spec shaping, don't move viramas around if seq ends with one
For example: u0c9a u0ccd u0c9a u0ccd with Lohit.  See:

https://bugs.freedesktop.org/show_bug.cgi?id=59118
2013-01-08 18:09:46 -06:00
Behdad Esfahbod e95e031b56 [GPOS] If an Anchor offset is NULL, return false
If in a MarkPos table, a base has no anchor for a particular mark class,
return NULL such that the subsequent subtables get a chance at it.

Test case:
hb-shape ./EBGaramond12-Regular.otf ἂ --features="ss20","smcp"
2013-01-08 16:17:06 -06:00
Behdad Esfahbod 1172dc7362 Rename hb_buffer_clear() to hb_buffer_clear_contents()
The previous name was clashing with harfbuzz.old.  There are systems
that need to link both...

Clash-free now again.
2013-01-07 16:46:37 -06:00
Behdad Esfahbod 7b912c1936 Remove a few unnecessary const's
Apparently helps with MSVC compilation.
2013-01-04 01:25:27 -06:00
Behdad Esfahbod f0c82410db [OTLayout] Always collect default language system in collect_lookups
Not sure if this is the most desired behavior.  It's the most easily
defined though.
2013-01-03 00:07:16 -06:00
Behdad Esfahbod 15e9e4e1dd [OTLayout] Fix feature iteration in collect_lookups
Previous logic was just wrong.
2013-01-03 00:04:40 -06:00
Behdad Esfahbod 733e8c0d7b [OTLayout] Whitespace 2013-01-03 00:00:23 -06:00
Behdad Esfahbod d37ae38047 [OTLayout] Handle required_feature_index in collect_lookups 2013-01-02 23:57:36 -06:00
Behdad Esfahbod 11fba79ee9 [OTLayout] Fix various introspection issues with ClassDef's
As reported by Jonathan Kew.
2013-01-02 23:36:37 -06:00
Behdad Esfahbod 7b1b720a8d Protect sets in-error from further modication
Fixes test-set.c
2013-01-02 23:02:59 -06:00
Behdad Esfahbod 8165f2765b [tests] Start adding tests for hb-set.h
Fails now.  Fixing.
2013-01-02 22:50:36 -06:00
Behdad Esfahbod 11d2956553 Minor 2013-01-02 17:41:27 -06:00
Behdad Esfahbod 596740db04 [Indic] Insert dottedcircle after a lone Malayalam dot-reph 2012-12-21 19:41:04 -05:00
Behdad Esfahbod 6f69fa283e Minor 2012-12-21 16:51:15 -05:00
Behdad Esfahbod f4abcbfc62 Minor 2012-12-21 16:48:51 -05:00
Behdad Esfahbod 8b217f5ac5 [Indic] Reorder Malayalam dot-reph to after base
Test sequence is simple: U+0D4E,U+0D15.  The doth-reph should be
reordered to after the Ka.

https://bugzilla.redhat.com/show_bug.cgi?id=799565
2012-12-21 15:49:26 -05:00
Behdad Esfahbod 742c4ee97e Minor 2012-12-21 15:35:03 -05:00
Behdad Esfahbod 044d385276 Bug 58498 - Tests fail with gold linker on ARM 2012-12-19 13:00:16 -05:00
Behdad Esfahbod b68b86daf1 Use C++ linker if ICU is disabled
Bug 54948 - Undefined symbols: "operator delete(void*)" "operator
new(unsigned long)" "___cxa_pure_virtual"
2012-12-18 20:39:40 -05:00
Behdad Esfahbod 1ffd23cb47 [OTLayout] Limit alternate-location FeatureParams to 'size' feature 2012-12-17 23:29:15 -05:00
Behdad Esfahbod efe252e600 [OTLayout] Fix 'size' featureParams implementation
Looks at alternate location now.
2012-12-17 23:25:57 -05:00
Behdad Esfahbod e77b442574 [OTLayout] Fix tracing 2012-12-17 18:42:59 -05:00
Behdad Esfahbod 9b54562d63 [OTLayout] Towards correct FeatureParams handling 2012-12-17 13:55:36 -05:00
Behdad Esfahbod 87e43b7f2b [OTLayout] Wire tag and list start all the way to Feature
To fix FeatureParam issues.  No actual fix yet, just plumbing.
2012-12-14 17:48:23 -05:00
Behdad Esfahbod 85bc44b90a [OTLayout] More 'size' feature sanity checking
We still don't look for the old incorrect place of the featureParams.
I'll wait till someone actually complains about it...
2012-12-12 11:38:49 -05:00
Behdad Esfahbod 0bae50a36f [OTLayout] Add FeatureParamsCharacterVariants struct
No API yet.
2012-12-11 16:29:24 -05:00
Behdad Esfahbod bd61bc13ea [OTLayout] Add UINT24 type 2012-12-11 16:01:07 -05:00
Behdad Esfahbod 9cf7f9d4f6 Make test-size-params write size in points 2012-12-11 14:31:13 -05:00
Behdad Esfahbod 372fe2b67b [OTLayout] Make hb_ot_layout_get_size_params() do some checks 2012-12-11 14:30:57 -05:00
Behdad Esfahbod 875a5cbc9c [OTLayout] Change hb_ot_layout_get_params() API
And add implementation for StylisticSet UINameID.  No API yet.
2012-12-11 14:17:01 -05:00
Behdad Esfahbod 0e9f0f3e5f Fix atomic ops on iOS
Patch from John Ralls.
2012-12-10 15:25:21 -05:00
Behdad Esfahbod 5f9569c139 Make older MSVC happy 2012-12-10 13:39:06 -05:00
Behdad Esfahbod 071d5b831e Work around missing OSAtomicCompareAndSwapPtrBarrier() on OS X 10.4
Not sure how to handle iOS.
2012-12-10 00:57:00 -05:00
Behdad Esfahbod e923e6487b [coretext] Fixed typo
Oops.  Thanks Khaled for catching this.
2012-12-09 19:39:40 -05:00
Behdad Esfahbod 9a8395824b [coretext] Add hb_coretext_face_get_cg_font()
Not sure if it's useful, but it was missing.
2012-12-09 18:47:36 -05:00
Behdad Esfahbod 8611235688 [coretext] Remove hack around GlyphID
We not namespace our types, so the hack is not needed anymore.
2012-12-09 18:47:09 -05:00
Behdad Esfahbod 8e58459aeb [graphite2] "Update to new API"
Part of patch from Martin Hosken.  I believe he knows what he's doing
:).
2012-12-09 18:45:47 -05:00
Behdad Esfahbod a5a4ab3846 [graphite2] Add hb_graphite2_face_get_gr_face and hb_graphite2_font_get_gr_font
Based on patch from Martin Hosken.  I believe it returns NULL if the
font doesn't have graphite tables, but have not tested.
2012-12-09 18:44:41 -05:00
Behdad Esfahbod 737ba15644 [graphite2] Preload all tables
Part of patch from Martin Hosken.
2012-12-09 18:43:03 -05:00
Behdad Esfahbod 0ae6dbf1b4 Minor 2012-12-09 18:37:38 -05:00
Behdad Esfahbod 3fe5c159d3 Remove excess return
Oops!
2012-12-09 18:20:19 -05:00
Behdad Esfahbod ba2d543004 Update OT language tags
Patch from Roozbeh Pournader.
2012-12-08 19:28:41 -05:00
Behdad Esfahbod aba38173c6 Minor 2012-12-05 19:54:48 -05:00
Behdad Esfahbod 61865745e3 Fix test with gold linker
Bug 57633 - Symbol tests should ignore __bss_start, _edata, _end
2012-12-05 19:42:10 -05:00
Behdad Esfahbod b71b0bd9ee [Indic] Add link to Sinhala split matra section of the Sinhala spec 2012-12-05 19:20:31 -05:00
Behdad Esfahbod 0beb66e3a6 Fix warnings 2012-12-05 19:14:28 -05:00
Behdad Esfahbod 130bb3f614 Rename VOID and void_t to have HarfBuzz prefix
Fixes build on Windows.  Ouch!
2012-12-05 16:49:47 -05:00
Behdad Esfahbod 4a350d0eb2 [OTLayout] Reuse context in collect_glyphs() recursion 2012-12-04 17:13:09 -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 1bcfa06d11 [OTLayout] Don't recurse in collect_glyphs() for GPOS 2012-12-04 16:58:09 -05:00
Behdad Esfahbod b5e04c7dc6 [ucdn] Match upstream changes 2012-12-04 15:57:02 -05:00
Behdad Esfahbod 7babfe5a79 Move object mutext into the user-data array
We are not using it for anything lse it seems.
2012-12-04 00:35:54 +02:00
Behdad Esfahbod a190011477 Remove unused functions 2012-12-04 00:29:35 +02:00
Behdad Esfahbod 88b7564183 "Update" to Unicode 6.2.0 tables
Nothing changed...
2012-12-02 19:14:29 +02:00
Behdad Esfahbod 4ab99fb8c3 Minor 2012-11-30 15:02:04 +02:00
Behdad Esfahbod 6748b96d27 Minor 2012-11-30 12:02:21 +02:00
Behdad Esfahbod 0f3f529904 Add test-size-params
Eventually this will become part of a yet-to-be-written hb-ot cmdline
tool.
2012-11-30 09:06:59 +02:00
Behdad Esfahbod 8465a05a89 Fix hb_buffer_guess_segment_properties() for empty buffer
Was causing assertion failure in shape_plan().
2012-11-30 08:46:43 +02:00
Behdad Esfahbod e75943de80 [OTLayout] Fix collect_glyphs() recursion in ContextFormat3 2012-11-30 08:38:24 +02:00
Behdad Esfahbod 3038ae6adb [OTLayout] Minor 2012-11-30 08:24:13 +02:00
Behdad Esfahbod 0dff11f6bf [OTLayout] Look for any 'size' feature, not only in DFLT script
The old code doesn't work with all fonts, as Khaled has reported.
2012-11-30 08:14:20 +02:00
Behdad Esfahbod e9ad71dee8 [OTLayout] Rename hb_ot_layout_position_get_size() to hb_ot_layout_get_size_params() 2012-11-30 08:10:26 +02:00
Behdad Esfahbod f18ff5a84d [OTLayout] Return correct value from recursion
Commit 4c4e8f0e75 broke contextual lookups
by making the recurse() function always return false.

Reported by Khaled.  Test case: لا in Amiri.
2012-11-30 08:07:06 +02:00
Behdad Esfahbod f54cce3c6a [OTLayout] Implement 'size' feature 2012-11-26 14:02:31 +02:00
Behdad Esfahbod 2dc1141d7d [OTLayout] Remove operator() from ClassDef 2012-11-24 19:16:34 -05:00
Behdad Esfahbod b67881b171 [OTLayout] Remove operator() from Coverage 2012-11-24 19:13:55 -05:00
Behdad Esfahbod a88e716021 [OTLayout] Implement hb_ot_layout_collect_lookups()
Untested.
2012-11-24 02:31:02 -05:00
Behdad Esfahbod 1ea375da44 [OTLayout] Only collect output glyphs during recursion in collect_glyphs() 2012-11-24 02:05:52 -05:00
Behdad Esfahbod f1b12781d2 [OTLayout] Implement ChainContext collect_glyphs()
All of collect_glyphs() complete and untested now.
2012-11-24 02:02:01 -05:00
Behdad Esfahbod cdd756b9f4 [OTLayout] Implement GPOS collect_glyphs() 2012-11-24 01:38:41 -05:00
Behdad Esfahbod 4c4e8f0e75 [OTLayout] Reuse apply context for recursion 2012-11-24 01:13:20 -05:00
Behdad Esfahbod 53a69f49e5 [OTLayout] Remove unused members 2012-11-24 01:03:05 -05:00
Behdad Esfahbod d0a5233785 [OTLayout] Implement Context::collect_glyphs() 2012-11-23 18:54:59 -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 adf7758a27 Improve debug log format in presence of templates 2012-11-23 17:34:02 -05:00
Behdad Esfahbod 2c53bd3c3e [OTLayout] Start porting sanitize() to process() 2012-11-23 17:29:05 -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 2c9d6485a1 More tracing fixup 2012-11-23 16:49:19 -05:00
Behdad Esfahbod a1733db1c6 [OTLayout] Start adding process() tracing 2012-11-23 16:40:04 -05:00
Behdad Esfahbod 73c18ae1b9 Cleanup 2012-11-23 15:34:11 -05:00
Behdad Esfahbod be218c688c Pass this object to trace macros 2012-11-23 15:32:14 -05:00
Behdad Esfahbod 902cc8aca0 [OTLayout] Start unbreaking tracing 2012-11-23 15:23:30 -05:00
Behdad Esfahbod dabe698fcb Minor 2012-11-23 14:21:35 -05:00
Behdad Esfahbod c779d82b2f Fix warnings 2012-11-23 14:09:21 -05:00
Behdad Esfahbod 81822528ef Minor 2012-11-23 13:27:16 -05:00
Behdad Esfahbod 1d67ef980f Move code around 2012-11-22 16:47:53 -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 5be86b1bb4 [ucdn] Make data tables const! 2012-11-22 16:33:46 -05:00
Behdad Esfahbod 7c5b7fe686 Fix hb_shape_plan_get_shaper() 2012-11-22 16:33:46 -05:00
Behdad Esfahbod ac064a2db2 Rename hb_set_population() to hb_set_get_population() 2012-11-21 01:14:19 -05:00
Behdad Esfahbod 16c914c2a6 [Indic] One more try at unbreaking Khmer fonts
See comments and discussion on the list.
2012-11-21 01:04:15 -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 51bb498b7b Minor 2012-11-16 14:08:05 -08:00
Behdad Esfahbod 89ca8eeb83 Implement hb_ot_layout_get_glyphs_in_class() 2012-11-16 13:53:40 -08:00
Behdad Esfahbod 5a08ecf920 Implement hb_ot_layout_get_glyph_class() 2012-11-16 13:34:29 -08:00
Behdad Esfahbod f9edd5d56b Implement hb_shape_plan_get_shaper()
Untested.
2012-11-16 13:23:37 -08:00
Behdad Esfahbod 43b6531500 [Indic] Another try to unbreak Sinhala split matras
Just read the comments...
2012-11-16 13:14:26 -08:00
Behdad Esfahbod 977f1740ac Unbreak tests 2012-11-16 13:10:07 -08:00
Behdad Esfahbod eba312c8d1 Plumbing to get shape plan and font into complex decompose function
So we can handle Sinhala split matras smartly...  Coming soon.
2012-11-16 12:58:38 -08:00
Behdad Esfahbod 3f82f8ff07 Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties() 2012-11-15 18:48:10 -08:00
Behdad Esfahbod f30641038b 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.)
2012-11-15 18:48:10 -08:00
Behdad Esfahbod e05a999495 Add hb_face_[sg]et_glyph_count() 2012-11-15 16:23:21 -08:00
Behdad Esfahbod aec89de564 Add / modify set API a bit 2012-11-15 16:15:42 -08:00
Behdad Esfahbod c54599ad26 Minor 2012-11-15 16:14:39 -08:00
Behdad Esfahbod d1aa143ca4 [Thai] Remove U+0E2C from "AC" consonants
WinXP doesn't include it.
2012-11-15 15:38:08 -08:00
Behdad Esfahbod 362a990b22 Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup()
To match upcoming API.
2012-11-15 14:57:31 -08:00
Behdad Esfahbod 3cec819d39 Make the OT shaper default, even if CoreText or Uniscribe is enabled 2012-11-15 13:15:39 -08:00
Behdad Esfahbod 072ae7a982 Add hb_buffer_serialize_list_formats() 2012-11-15 13:14:12 -08:00
Behdad Esfahbod f9edf16725 Add buffer serialization / deserialization API
Two output formats for now: TEXT, and JSON.  For example:

  hb-shape --output-format=json

Deserialization API is added, but not implemented yet.
2012-11-15 13:10:07 -08:00
Behdad Esfahbod fd0de881f4 Avoid C++ undefined behavior
https://bugzilla.mozilla.org/show_bug.cgi?id=810823
2012-11-15 10:48:50 -08:00
Behdad Esfahbod f41dc2d35b Fix undefined behavior in Indic dottedcircle
Chromium Issue 158998:	Conditional jump in harfbuzz-ng
http://code.google.com/p/chromium/issues/detail?id=158998
2012-11-15 10:36:43 -08:00
Behdad Esfahbod 1eb3e94fe9 [Thai] Implement PUA-based fallback shaping
As explained here:

  http://linux.thai.net/~thep/th-otf/shaping.html

Our output now matches Uniscribe for old fonts (eg. XP Tahoma) with no
Thai GSUB table.
2012-11-14 17:53:09 -08:00
Behdad Esfahbod 851784f837 Improve shaper selection 2012-11-14 17:53:09 -08:00
Behdad Esfahbod 43f04a7456 Move Thai shaper into a separate file 2012-11-14 15:51:54 -08:00
Behdad Esfahbod ba82325b7a Add note re 'Phags-pa letter U+A872, which is Joining_Type=L 2012-11-14 15:36:53 -08:00
Behdad Esfahbod d469fadce8 [Indic] Exchange abort() for assert() 2012-11-14 15:07:36 -08:00
Behdad Esfahbod 0f80a89de9 Don't route Kharoshthi through the Indic shaper
It's a simple, right-to-left, script.
2012-11-14 15:05:19 -08:00
Behdad Esfahbod e67072bb17 [Indic] Handle overstruck matra position 2012-11-14 15:00:53 -08:00
Behdad Esfahbod 7e99e4f074 Reposition Lao marks
Lao marks are center-aligned, unlike Thai ones.
2012-11-14 14:09:46 -08:00
Behdad Esfahbod 865745b5b8 Don't do fallback positioning for Indic and Thai shapers 2012-11-14 13:48:26 -08:00
Behdad Esfahbod 981748cb2e [Indic] If Khmer fonts have a 'liga' feature, use generic shaper
Seems to produce more coherent results than trying the Indic shaper on
them.  I'm looking at you, Kh-* fonts...
2012-11-14 13:38:16 -08:00
Behdad Esfahbod dde5506fd9 [Indic] Don't move virama with left matra
This is important for the Sinhala U+0DDA split matra since it decomposes
to U+0DD9,U+0DCA where U+0DD9 is a left matra and U+0DCA is the virama.
We don't want to move the virama with the left matra.
TEST: U+0D9A,U+0DDA

Note that we were already doing this in the Uniscribe bug compatibility
mode.  We now do it all the time.
2012-11-14 11:37:04 -08:00
Behdad Esfahbod 92f9bfed42 Minor 2012-11-13 16:50:45 -08:00
Behdad Esfahbod 66ac2ff32e API change: Remove "mask" from hb_buffer_add()
I don't expect anybody using hb_buffer_add(), so this shouldn't break
anyone's code.
2012-11-13 16:26:32 -08:00
Behdad Esfahbod e13f8d280b Fix UTF-8 backward iteration
Ouch!
2012-11-13 15:12:06 -08:00
Behdad Esfahbod 5669a6cf41 [Arabic] Fix post-context handling
Ouch!
2012-11-13 15:11:51 -08:00
Behdad Esfahbod 0c7df22228 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/...
2012-11-13 14:42:35 -08:00
Behdad Esfahbod 1c7e55511a Minor fix
Ouch
2012-11-13 14:42:22 -08:00
Behdad Esfahbod 82ecaff736 Add hb_buffer_clear()
Which is like _reset(), but does NOT clear unicode-funcs.
2012-11-13 14:10:00 -08:00
Behdad Esfahbod 0736915b8e [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.
2012-11-13 12:35:35 -08:00
Behdad Esfahbod 6fd5335622 [Indic] Update auto-generated Indic machine to reflect previous commit 2012-11-12 18:42:18 -08:00
Behdad Esfahbod 9cac1338c4 [Indic] Allow Consonant_Medial's after Consonant's
Mostly affects Myanmar, but also Tai Tham, Javanese, and Cham.  The
latter three are untested (no fonts!).
2012-11-12 18:41:22 -08:00
Behdad Esfahbod d187099cba [Indic] Categorize Myanmar "tone marks" as nuktas 2012-11-12 18:38:06 -08:00
Behdad Esfahbod 8173f23f3f [Indic] Add config for Myanmar 2012-11-12 18:37:20 -08:00
Behdad Esfahbod 9e92978c8a [Indic] Route "new" Myanmar tag through the Indic shaper
Windows 8 adds a Myanmar shaper using the 'mym2' tag.  Route that
through the Indic shaper.  It's still very broken, but at least this
does NOT break old-style Myanmar shaping using the generic shaper.
2012-11-12 18:36:10 -08:00
Behdad Esfahbod 5ab3855f81 Choose shaper based on chosen OT script tag
For Arabic and Indic shapers, if the font doesn't have a script system
for the script, use default shaper.

Make an exception for Arabic script since we have fallback logic for
that one.
2012-11-12 18:27:42 -08:00
Behdad Esfahbod 9b37b4c580 Make planner available to complex shaper choosing logic 2012-11-12 18:23:38 -08:00
Behdad Esfahbod 6fddf2d739 Refactoring ot-map building to make chosen script available earlier 2012-11-12 18:03:07 -08:00
Behdad Esfahbod de796a6fb9 Add "new" Myanmar OT Script tag
Windows 8 added support for Myanmar shaping using the "mym2" script tag,
even though Windows never supported the old "mymr" tag.
2012-11-12 17:27:51 -08:00
Behdad Esfahbod e9334ce97b Break build when ragel is needed and missing 2012-11-12 14:57:02 -08:00
Behdad Esfahbod dba186711e [Indic] Make more room in the table
To be used in upcoming commits.
2012-11-12 14:48:33 -08:00
Behdad Esfahbod c4be991743 Typo 2012-11-12 14:27:33 -08:00
Behdad Esfahbod 56be677781 [Indic] Port 'pref' logic to look into font tables
...instead of using a hardcoded list of Ra characters.
2012-11-12 14:09:40 -08:00
Behdad Esfahbod f2c0f59043 [Indic] Port reph handling logic to look into font features
...instead of using a hardcoded list of Ra characters.
2012-11-12 14:02:02 -08:00
Behdad Esfahbod 43149afbc0 Route MEETEI_MAYEK through the Indic shaper
Since it has a couple of left-"matras".
2012-11-12 13:34:17 -08:00
Behdad Esfahbod d0905c3400 Minor 2012-11-12 13:03:52 -08:00
Behdad Esfahbod 365f27ab5b Work around older compilers
As reported on the list:

I am seeing a similar problem building harfbuzz 0.9.5 with Apple gcc
4.0.1 on OS X 10.5 Leopard:

hb-ot-layout-common-private.hh:406: error: 'struct
OT::CoverageFormat1::Iter' is private
hb-ot-layout-common-private.hh:646: error: within this context
hb-ot-layout-common-private.hh:500: error: 'struct
OT::CoverageFormat2::Iter' is private
hb-ot-layout-common-private.hh:647: error: within this context
make[4]: *** [libharfbuzz_la-hb-ot-layout.lo] Error 1

Also reported as happening with MSVC 2005.
2012-11-12 11:16:57 -08:00
Behdad Esfahbod 6b389ddc36 [Indic] Don't apply 'liga'
Uniscribe doesn't.  And some fonts abuse this feature to get Indic
shaping working in non-complex applications like Adobe's apps.

No change in numbers:

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: 299074 out of 299124 tests passed. 50 failed (0.0167155%)
LAO: 53611 out of 53644 tests passed. 33 failed (0.0615167%)
MALAYALAM: 1048011 out of 1048334 tests passed. 323 failed (0.0308108%)
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-11-12 11:02:56 -08:00
Behdad Esfahbod d05ac7dc3f Fix hb-ft glyph name for broken fonts that return empty glyph names 2012-11-12 10:26:50 -08:00
Behdad Esfahbod 4899801155 U+A872 PHAGS-PA SUPERFIXED LETTER RA is "Right"-Joining 2012-11-08 15:08:26 -08:00
Behdad Esfahbod 22a685836a Adjust Mongolian shaping
For U+1880..U+1886 Uniscribe thinks they are non-joining.
For U+1887 Uniscribe thinks it's joining, but looks wrong to me.
For now, match Uniscribe.
2012-11-05 15:20:10 -08:00
Behdad Esfahbod c26a52fbe6 Minor 2012-11-04 16:48:45 -08:00
Behdad Esfahbod f60d3ed35d Minor 2012-11-04 16:44:47 -08:00
Behdad Esfahbod 10a33296e6 Minor 2012-11-02 13:38:55 -07:00
Behdad Esfahbod 3ba7bc14ea Implement 'Phags-pa shaping
Through the Arabic shaper.  It's similar to Mongolian.
2012-11-01 20:05:04 -07:00
Behdad Esfahbod da70111ab2 Don't clear buffer pre-context if no new context is being provided
Patch from Jonathan Kew.

Part of fixing:

Mozilla Bug 801410 - avoid inserting dotted-circle for run-initial
Unicode combining characters in "simple" scripts such as Latin

https://bugzilla.mozilla.org/show_bug.cgi?id=801410
2012-10-31 13:45:30 -07: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 2616689d15 More tracing fixups 2012-10-29 21:51:56 -07:00
Behdad Esfahbod 937f8d3871 [Arabic] Enable dlig and mset for Arabic
That's what the spec says, and what Uniscribe does.
2012-10-29 21:49:33 -07:00
Behdad Esfahbod bc513add79 Add missing TRACE_RETURN 2012-10-29 19:03:55 -07:00
Behdad Esfahbod 88d3c98e30 [Indic] Position pre-base reordering Ra after Chillus in Malayalam
The logic for pre-base reordering follows the left matra logic.
We had an exception for Malayalam/Tamil in the left matra repositioning
which was not reflected in pre-base reordering.

Malayalam failures down from 337 to 323.

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: 1048011 out of 1048334 tests passed. 323 failed (0.0308108%)
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-10-29 16:46:44 -07:00
Behdad Esfahbod 21bf796954 Add missed file 2012-10-29 14:21:09 -07:00
Behdad Esfahbod 02ed52169a Improve license information 2012-10-28 21:26:19 -07:00
Behdad Esfahbod 4c1d924461 Minor 2012-10-28 20:27:25 -07:00
Behdad Esfahbod 38b015e57f Fix hb_buffer_set_length(buffer, 0)
Was causing invalid realloc()s.
2012-10-28 20:11:47 -07:00
Behdad Esfahbod b7115b63be Add XXX 2012-10-28 20:11:42 -07:00
Behdad Esfahbod 71ee1f2450 Port to ICU LayoutEngine C API
Incidentally, this makes it not crash with icu-le-hb anymore...
I'm not smart / stupid enough to spend two more days debugging C++
linking issues, and this is ABI-stable at least.
2012-10-28 19:18:11 -07:00
Behdad Esfahbod 0144f05e57 Remove unused members 2012-10-26 13:48:06 -07:00
Behdad Esfahbod cf3afd8979 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.
2012-10-25 16:32:54 -07:00
Behdad Esfahbod fecdfa95da Fixup hb_ot_shape_closure()
Broke it when merged cmap mapping and normalizer.  Ouch!
2012-10-07 17:19:58 -04:00
Behdad Esfahbod 2d1dcb3ce3 Mark debug message functions static 2012-10-07 17:13:46 -04:00
Behdad Esfahbod 9947bd6daf Update UCDN to upstream commit 3f159c87824230b59af56e40e2db32caf6afa51a
- Unicode 6.2.0 goodness,
- Unassigned codepoints now have correct properties.  Passes test suite.
2012-10-02 20:44:43 -04:00
Behdad Esfahbod 32dbfcf763 Fix visibility of UCDN symbols 2012-10-02 17:42:13 -04:00
Behdad Esfahbod 3f33f0d1f2 Import UCDN into source tree
https://github.com/grigorig/ucdn
2012-10-02 16:23:29 -04:00
Behdad Esfahbod 0e292eb2a2 Remove Glib thread-safety support
Now that we have pthread detection in configure, we don't need Glib
anymore.  Glib will only be a Unicode data provider.
2012-10-02 15:09:38 -04:00
Behdad Esfahbod 66efe89648 Check for pthreads 2012-10-02 14:55:32 -04:00
Behdad Esfahbod f2eb3fa9dc [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
2012-09-25 21:35:35 -04:00
Behdad Esfahbod bdc2fc8294 [Arabic] Respect Arabic joining from neighboring context
Now we respect Arabic joining across runs.
2012-09-25 21:32:35 -04:00
Behdad Esfahbod 05207a79e0 [buffer] Save pre/post textual context
To be used for a variety of purposes.  We save up to five characters
in each direction.  No public API changes, everything is taken care
of already.  All clients need to do is to call hb_buffer_add_utf* with
the full text + segment info (or at least some context) instead of
just passing in the segment.

Various operations (hb_buffer_reset, hb_buffer_set_length,
hb_buffer_add*) automatically reset the relevant contexts.
2012-09-25 21:32:21 -04:00
Behdad Esfahbod 89ac39dbbe Add hb_utf_prev() 2012-09-25 13:59:24 -04:00
Behdad Esfahbod 70ea4ac688 Slightly optimize UTF-8 parsing 2012-09-25 12:30:16 -04:00
Behdad Esfahbod 4445e5e2ec [buffer] Cleanup / optimize UTF-16 parsing a bit 2012-09-25 12:26:12 -04:00
Behdad Esfahbod 1f66c3c1a0 Add hb_utf_strlen()
Speeds up UTF-8 parsing by calling strlen().
2012-09-25 11:42:16 -04:00
Behdad Esfahbod 7f19ae7b9f [buffer] Templatize UTF handling
Also move UTF routines into a separate file, to be reused from shapers
that need it.
2012-09-25 11:23:55 -04:00
Behdad Esfahbod 0e0a4da9b7 [buffer] Towards template'izing different UTF adders 2012-09-25 11:09:04 -04:00
Behdad Esfahbod 7d37280600 Minor 2012-09-25 11:04:41 -04:00
Behdad Esfahbod 54d5da4ee9 Remove unused indic.cc 2012-09-25 10:51:42 -04:00
Behdad Esfahbod fab7a71f11 [Indic] Import ragel-generated Indic machine in git
I don't expect ragel to be creating too much noise in its generated
output, and including this in-tree helps users right now.  We can
revisit this later if it proved to be too much trouble.
2012-09-24 21:51:13 -04:00
Behdad Esfahbod 20a840c7cd Use a C++ linker on Windows
On Windows we don't care whether or not we link to libstdc++.
Seems to fix build with mingw32 on msys, as reported by Werner.
2012-09-24 20:23:00 -04:00
Behdad Esfahbod eb7669a380 Better autofoo 2012-09-18 19:42:06 -04:00
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