On 27/12/13 16:21, Ed Trager wrote:
Hi, Martin, Richard, and Danh Hong,
With regard to forcing the re-ordering of the
UCD-enforced-but-totally-broken normalisation of TAI THAM TONE MARK plus
U+1A60, does the following approach in the OpenType feature file make
sense as the quickest and cleanest way to do it or not?:
Basically the idea is to compose the out-of-order pair of characters
into a ligature; and then take that ligature and decompose it back to a
pair of characters that are in the correct order:
If there is a better way to do this in OpenType, please enlighten me!
:-) I was trying to get this to work last night, so far without success:
The trouble with this idea (or at least one trouble with it!) is that by
the time your lookups have a chance to do anything, harfbuzz has already
inserted dotted-circle glyphs because it treated the (normalized)
sequence as being a "broken" cluster. The pattern for a "consonant
syllable" in the SEAsian shaper allows for a <sakot, consonant> pair
(i.e. a subjoined consonant) among the various possible syllable-tail
items, but it does not allow for the <sakot> and <cons> to be separated
by other marks, which is what the normalization does.
You -might- be able to work around this by explicitly including the
dotted circles in your ligature-composition rules, though that will make
them all more cumbersome. The better way forward is for us to fix
harfbuzz, as previously suggested.
Possible patch attached; Behdad, wdyt?
diff --git a/src/hb-unicode-private.hh b/src/hb-unicode-private.hh
index dd4d001..eac3144 100644
--- a/src/hb-unicode-private.hh
+++ b/src/hb-unicode-private.hh
@@ -107,8 +107,12 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
unsigned int
modified_combining_class (hb_codepoint_t unicode)
{
+ /* XXX This hack belongs to the SEA shaper (for Tai Tham):
+ reorder SAKOT to ensure it comes after any tone marks. */
+ if (unlikely (unicode == 0x1A60)) return 254;
+
/* XXX This hack belongs to the Myanmar shaper. */
- if (unicode == 0x1037) unicode = 0x103A;
+ if (unlikely (unicode == 0x1037)) unicode = 0x103A;
return _hb_modified_combining_class[combining_class (unicode)];
}
_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz