According to the ISCII standard, the worst case for an Indic syllable has 4
consonants. Microsoft has enshrined this in their code, it seems, and our
customers are demanding the same behaviour; that after the fourth consonant, the
next virama is explicit, then any further consonant is part of the next
syllable. For example, KA+VIRAMA+KA+VIRAMA+KA+VIRAMA+KA+VIRAMA+KA+VIRAMA+KA
comes out as KKKKA+VIRAMA+KA
We have made the following change to get this effect:
--- //EPOC/development/personal/timba/proto/OpenType/IcuLayoutEngine/IcuSource/layout/IndicReordering.cpp
2005/12/14 10:50:35
+++ //EPOC/development/personal/timba/proto/OpenType/IcuLayoutEngine/IcuSource/layout/IndicReordering.cpp
2005/12/14 11:26:27
@@ -327,14 +327,22 @@
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 1 - exit
state
{-1, 6, 1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, -1}, // 2 - consonant
with nukta
{-1, 6, 1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, -1}, // 3 -
consonant
- {-1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, 7}, // 4 - consonant
virama
+ {-1, -1, -1, -1, -1, 12, 11, -1, -1, -1, -1, -1, -1, 7}, // 4 - consonant
virama
{-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 5 - dependent
vowels
{-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - vowel
mark
{-1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, -1}, // 7 - ZWJ,
ZWNJ
{-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1}, // 8 -
independent vowels that can take a virama
{-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, 10, 5, -1, -1}, // 9 - first
part of split vowel
- {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1} // 10 - second
part of split vowel
-
+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1}, // 10 - second
part of split vowel
+ {-1, 6, 1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 13, -1}, // 11 - ct vr ct
nu
+ {-1, 6, 1, -1, -1, -1, -1, 11, 5, 9, 5, 5, 13, -1}, // 12 - ct vr ct
+ {-1, -1, -1, -1, -1, 15, 14, -1, -1, -1, -1, -1, -1, 7}, // 13 - ct vr ct
vr
+ {-1, 6, 1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 16, -1}, // 14 - ct vr ct
vr ct nu
+ {-1, 6, 1, -1, -1, -1, -1, 14, 5, 9, 5, 5, 16, -1}, // 15 - ct vr ct
vr ct
+ {-1, -1, -1, -1, -1, 18, 17, -1, -1, -1, -1, -1, -1, 7}, // 16 - ct vr ct
vr ct vr
+ {-1, 6, 1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 19, -1}, // 17 - ct vr ct
vr ct vr ct nu
+ {-1, 6, 1, -1, -1, -1, -1, 17, 5, 9, 5, 5, 19, -1}, // 18 - ct vr ct
vr ct vr ct
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7} // 19 - ct vr ct
vr ct vr ct vr
};
const LETag *IndicReordering::getFeatureOrder()