--- Begin Message ---
Package: texlive-xetex
Severity: normal
Tags: patch l10n
XeTeX is linked statically with ICU 3.4, which does not support Sinhala
language. Here is the backport of two patches that went into ICU 3.4
and 3.6 which enables Sinhala in the OpenType rendering engine.
Upstream (0.997), which uses ICU 3.8.1, properly supports Sinhala.
Also attached is a trivial patch which makes XeTeX recognize Sinhala
language.
diff -Nrua texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/IndicClassTables.cpp texlive-bin-2007/build/source/libs/icu-xetex/layout/IndicClassTables.cpp
--- texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/IndicClassTables.cpp 2008-04-20 16:01:17.000000000 +0530
+++ texlive-bin-2007/build/source/libs/icu-xetex/layout/IndicClassTables.cpp 2008-04-20 16:02:42.000000000 +0530
@@ -186,6 +186,18 @@
_iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0D60 - 0D6F
};
+static const IndicClassTable::CharClass sinhCharClasses[] =
+{
+ _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, // 0D80 - 0D8F
+ _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _ct, _ct, // 0D90 - 0D9F
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0DA0 - 0DAF
+ _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _xx, _xx, // 0DB0 - 0DBF
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _vr, _xx, _xx, _xx, _xx, _dr, // 0DC0 - 0DCF
+ _dr, _dr, _da, _da, _db, _xx, _db, _xx, _dr, _dl, _s1, _dl, _s2, _s3, _s4, _dr, // 0DD0 - 0DDF
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0DE0 - 0DEF
+ _xx, _xx, _dr, _dr, _xx // 0DF0 - 0DF4
+};
+
//
// Split matra tables
//
@@ -202,6 +214,8 @@
static const SplitMatra mlymSplitTable[] = {{0x0D46, 0x0D3E}, {0x0D47, 0x0D3E}, {0x0D46, 0x0D57}};
+static const SplitMatra sinhSplitTable[] = {{0x0DD9, 0x0DCA}, {0x0DD9, 0x0DCF}, {0x0DD9, 0x0DCF, 0x0DCA}, {0x0DD9, 0x0DDF}};
+
//
// Script Flags
//
@@ -218,6 +232,7 @@
#define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | 3)
#define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | 3)
#define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
+#define SINH_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
//
// Indic Class Tables
@@ -240,6 +255,8 @@
static const IndicClassTable mlymClassTable = {0x0D00, 0x0D6F, 3, MLYM_SCRIPT_FLAGS, mlymCharClasses, mlymSplitTable};
+static const IndicClassTable sinhClassTable = {0x0D80, 0x0DF4, 4, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable};
+
//
// IndicClassTable addresses
//
@@ -277,7 +294,7 @@
NULL, /* 'ital' (OLD-ITALIC) */
&oryaClassTable, /* 'orya' (ORIYA) */
NULL, /* 'runr' (RUNIC) */
- NULL, /* 'sinh' (SINHALA) */
+ &sinhClassTable, /* 'sinh' (SINHALA) */
NULL, /* 'syrc' (SYRIAC) */
&tamlClassTable, /* 'taml' (TAMIL) */
&teluClassTable, /* 'telu' (TELUGU) */
diff -Nrua texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/IndicReordering.cpp texlive-bin-2007/build/source/libs/icu-xetex/layout/IndicReordering.cpp
--- texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/IndicReordering.cpp 2008-04-20 16:01:17.000000000 +0530
+++ texlive-bin-2007/build/source/libs/icu-xetex/layout/IndicReordering.cpp 2008-04-20 16:02:27.000000000 +0530
@@ -35,6 +35,9 @@
LEUnicode fLengthMark;
le_int32 fLengthMarkIndex;
+ LEUnicode fAlLakuna;
+ le_int32 fAlLakunaIndex;
+
const LETag *fMatraTags;
le_int32 fMPreOutIndex;
@@ -56,6 +59,9 @@
if (IndicClassTable::isLengthMark(matraClass)) {
fLengthMark = matra;
fLengthMarkIndex = matraIndex;
+ } else if (IndicClassTable::isVirama(matraClass)) {
+ fAlLakuna = matra;
+ fAlLakunaIndex = matraIndex;
} else {
switch (matraClass & CF_POS_MASK) {
case CF_POS_BEFORE:
@@ -89,8 +95,9 @@
ReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups)
: fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage),
fMpre(0), fMpreIndex(0), fMbelow(0), fMbelowIndex(0), fMabove(0), fMaboveIndex(0),
- fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0), fMatraTags(NULL),
- fMPreOutIndex(-1), fMPreFixups(mpreFixups),
+ fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0),
+ fAlLakuna(0), fAlLakunaIndex(0),
+ fMatraTags(NULL), fMPreOutIndex(-1), fMPreFixups(mpreFixups),
fVMabove(0), fVMpost(0), fVMIndex(0), fVMTags(NULL),
fSMabove(0), fSMbelow(0), fSMIndex(0), fSMTags(NULL)
{
@@ -104,7 +111,7 @@
void reset()
{
- fMpre = fMbelow = fMabove = fMpost = fLengthMark = 0;
+ fMpre = fMbelow = fMabove = fMpost = fLengthMark = fAlLakuna = 0;
fMPreOutIndex = -1;
fVMabove = fVMpost = 0;
@@ -205,6 +212,19 @@
}
}
+ int alLakunaExists()
+ {
+ return (fAlLakuna != 0);
+ }
+
+ // Handles Al-Lakuna in Sinhala split vowels.
+ void writeAlLakuna()
+ {
+ if (fAlLakuna != 0) {
+ writeChar(fAlLakuna, fAlLakunaIndex, fMatraTags);
+ }
+ }
+
void writeMpre()
{
if (fMpre != 0) {
@@ -326,14 +346,15 @@
{ 1, 1, 1, 5, 8, 3, 2, 1, 5, 9, 5, 1, 1, 1}, // 0 - ground state
{-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, 6, 1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, 11}, // 3 - consonant
{-1, -1, -1, -1, -1, 3, 2, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1} // 11 - <ct> <zwj>
};
@@ -420,7 +441,10 @@
case CC_SPLIT_VOWEL_PIECE_3:
case CC_VOWEL_MODIFIER:
case CC_STRESS_MARK:
- output.writeMpre();
+ // A lone <U+0DDD> crashes ooffice without this workaround.
+ if (!output.alLakunaExists()) {
+ output.writeMpre();
+ }
output.writeChar(C_DOTTED_CIRCLE, prev, &tagArray[1]);
@@ -442,6 +466,7 @@
}
output.writeLengthMark();
+ output.writeAlLakuna();
if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
output.writeVMabove();
@@ -632,6 +657,7 @@
}
output.writeLengthMark();
+ output.writeAlLakuna();
// write reph
if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
diff -Nrua texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/LayoutEngine.cpp texlive-bin-2007/build/source/libs/icu-xetex/layout/LayoutEngine.cpp
--- texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/LayoutEngine.cpp 2008-04-20 16:01:17.000000000 +0530
+++ texlive-bin-2007/build/source/libs/icu-xetex/layout/LayoutEngine.cpp 2008-04-20 16:02:27.000000000 +0530
@@ -483,6 +483,7 @@
case guruScriptCode:
case tamlScriptCode:
case teluScriptCode:
+ case sinhScriptCode:
result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
break;
@@ -537,6 +538,7 @@
case guruScriptCode:
case tamlScriptCode:
case teluScriptCode:
+ case sinhScriptCode:
{
result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
break;
diff -Nrua texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/LEFontInstance.cpp texlive-bin-2007/build/source/libs/icu-xetex/layout/LEFontInstance.cpp
--- texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/LEFontInstance.cpp 2008-04-20 16:01:17.000000000 +0530
+++ texlive-bin-2007/build/source/libs/icu-xetex/layout/LEFontInstance.cpp 2008-04-20 16:02:27.000000000 +0530
@@ -75,7 +75,7 @@
return 0xFFFF;
}
- if (mappedChar == 0x200C || mappedChar == 0x200D) {
+ if (mappedChar == 0x200C) {
return 1;
}
diff -Nrua texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/IndicClassTables.cpp texlive-bin-2007/build/source/libs/icu-xetex/layout/IndicClassTables.cpp
--- texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/IndicClassTables.cpp 2008-04-20 16:01:17.000000000 +0530
+++ texlive-bin-2007/build/source/libs/icu-xetex/layout/IndicClassTables.cpp 2008-04-20 16:02:42.000000000 +0530
@@ -186,6 +186,18 @@
_iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0D60 - 0D6F
};
+static const IndicClassTable::CharClass sinhCharClasses[] =
+{
+ _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, // 0D80 - 0D8F
+ _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _ct, _ct, // 0D90 - 0D9F
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0DA0 - 0DAF
+ _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _xx, _xx, // 0DB0 - 0DBF
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _vr, _xx, _xx, _xx, _xx, _dr, // 0DC0 - 0DCF
+ _dr, _dr, _da, _da, _db, _xx, _db, _xx, _dr, _dl, _s1, _dl, _s2, _s3, _s4, _dr, // 0DD0 - 0DDF
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0DE0 - 0DEF
+ _xx, _xx, _dr, _dr, _xx // 0DF0 - 0DF4
+};
+
//
// Split matra tables
//
@@ -202,6 +214,8 @@
static const SplitMatra mlymSplitTable[] = {{0x0D46, 0x0D3E}, {0x0D47, 0x0D3E}, {0x0D46, 0x0D57}};
+static const SplitMatra sinhSplitTable[] = {{0x0DD9, 0x0DCA}, {0x0DD9, 0x0DCF}, {0x0DD9, 0x0DCF, 0x0DCA}, {0x0DD9, 0x0DDF}};
+
//
// Script Flags
//
@@ -218,6 +232,7 @@
#define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | 3)
#define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | 3)
#define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
+#define SINH_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
//
// Indic Class Tables
@@ -240,6 +255,8 @@
static const IndicClassTable mlymClassTable = {0x0D00, 0x0D6F, 3, MLYM_SCRIPT_FLAGS, mlymCharClasses, mlymSplitTable};
+static const IndicClassTable sinhClassTable = {0x0D80, 0x0DF4, 4, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable};
+
//
// IndicClassTable addresses
//
@@ -277,7 +294,7 @@
NULL, /* 'ital' (OLD-ITALIC) */
&oryaClassTable, /* 'orya' (ORIYA) */
NULL, /* 'runr' (RUNIC) */
- NULL, /* 'sinh' (SINHALA) */
+ &sinhClassTable, /* 'sinh' (SINHALA) */
NULL, /* 'syrc' (SYRIAC) */
&tamlClassTable, /* 'taml' (TAMIL) */
&teluClassTable, /* 'telu' (TELUGU) */
diff -Nrua texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/IndicReordering.cpp texlive-bin-2007/build/source/libs/icu-xetex/layout/IndicReordering.cpp
--- texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/IndicReordering.cpp 2008-04-20 16:01:17.000000000 +0530
+++ texlive-bin-2007/build/source/libs/icu-xetex/layout/IndicReordering.cpp 2008-04-20 16:02:27.000000000 +0530
@@ -35,6 +35,9 @@
LEUnicode fLengthMark;
le_int32 fLengthMarkIndex;
+ LEUnicode fAlLakuna;
+ le_int32 fAlLakunaIndex;
+
const LETag *fMatraTags;
le_int32 fMPreOutIndex;
@@ -56,6 +59,9 @@
if (IndicClassTable::isLengthMark(matraClass)) {
fLengthMark = matra;
fLengthMarkIndex = matraIndex;
+ } else if (IndicClassTable::isVirama(matraClass)) {
+ fAlLakuna = matra;
+ fAlLakunaIndex = matraIndex;
} else {
switch (matraClass & CF_POS_MASK) {
case CF_POS_BEFORE:
@@ -89,8 +95,9 @@
ReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups)
: fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage),
fMpre(0), fMpreIndex(0), fMbelow(0), fMbelowIndex(0), fMabove(0), fMaboveIndex(0),
- fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0), fMatraTags(NULL),
- fMPreOutIndex(-1), fMPreFixups(mpreFixups),
+ fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0),
+ fAlLakuna(0), fAlLakunaIndex(0),
+ fMatraTags(NULL), fMPreOutIndex(-1), fMPreFixups(mpreFixups),
fVMabove(0), fVMpost(0), fVMIndex(0), fVMTags(NULL),
fSMabove(0), fSMbelow(0), fSMIndex(0), fSMTags(NULL)
{
@@ -104,7 +111,7 @@
void reset()
{
- fMpre = fMbelow = fMabove = fMpost = fLengthMark = 0;
+ fMpre = fMbelow = fMabove = fMpost = fLengthMark = fAlLakuna = 0;
fMPreOutIndex = -1;
fVMabove = fVMpost = 0;
@@ -205,6 +212,19 @@
}
}
+ int alLakunaExists()
+ {
+ return (fAlLakuna != 0);
+ }
+
+ // Handles Al-Lakuna in Sinhala split vowels.
+ void writeAlLakuna()
+ {
+ if (fAlLakuna != 0) {
+ writeChar(fAlLakuna, fAlLakunaIndex, fMatraTags);
+ }
+ }
+
void writeMpre()
{
if (fMpre != 0) {
@@ -326,14 +346,15 @@
{ 1, 1, 1, 5, 8, 3, 2, 1, 5, 9, 5, 1, 1, 1}, // 0 - ground state
{-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, 6, 1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, 11}, // 3 - consonant
{-1, -1, -1, -1, -1, 3, 2, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1} // 11 - <ct> <zwj>
};
@@ -420,7 +441,10 @@
case CC_SPLIT_VOWEL_PIECE_3:
case CC_VOWEL_MODIFIER:
case CC_STRESS_MARK:
- output.writeMpre();
+ // A lone <U+0DDD> crashes ooffice without this workaround.
+ if (!output.alLakunaExists()) {
+ output.writeMpre();
+ }
output.writeChar(C_DOTTED_CIRCLE, prev, &tagArray[1]);
@@ -442,6 +466,7 @@
}
output.writeLengthMark();
+ output.writeAlLakuna();
if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
output.writeVMabove();
@@ -632,6 +657,7 @@
}
output.writeLengthMark();
+ output.writeAlLakuna();
// write reph
if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
diff -Nrua texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/LayoutEngine.cpp texlive-bin-2007/build/source/libs/icu-xetex/layout/LayoutEngine.cpp
--- texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/LayoutEngine.cpp 2008-04-20 16:01:17.000000000 +0530
+++ texlive-bin-2007/build/source/libs/icu-xetex/layout/LayoutEngine.cpp 2008-04-20 16:02:27.000000000 +0530
@@ -483,6 +483,7 @@
case guruScriptCode:
case tamlScriptCode:
case teluScriptCode:
+ case sinhScriptCode:
result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
break;
@@ -537,6 +538,7 @@
case guruScriptCode:
case tamlScriptCode:
case teluScriptCode:
+ case sinhScriptCode:
{
result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
break;
diff -Nrua texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/LEFontInstance.cpp texlive-bin-2007/build/source/libs/icu-xetex/layout/LEFontInstance.cpp
--- texlive-bin-2007.orig/build/source/libs/icu-xetex/layout/LEFontInstance.cpp 2008-04-20 16:01:17.000000000 +0530
+++ texlive-bin-2007/build/source/libs/icu-xetex/layout/LEFontInstance.cpp 2008-04-20 16:02:27.000000000 +0530
@@ -75,7 +75,7 @@
return 0xFFFF;
}
- if (mappedChar == 0x200C || mappedChar == 0x200D) {
+ if (mappedChar == 0x200C) {
return 1;
}
diff -Nrua texlive-bin-2007.orig/build/source/texk/web2c/xetexdir/XeTeXOTLayoutEngine.cpp texlive-bin-2007/build/source/texk/web2c/xetexdir/XeTeXOTLayoutEngine.cpp
--- texlive-bin-2007.orig/build/source/texk/web2c/xetexdir/XeTeXOTLayoutEngine.cpp 2008-04-20 16:01:23.000000000 +0530
+++ texlive-bin-2007/build/source/texk/web2c/xetexdir/XeTeXOTLayoutEngine.cpp 2008-04-20 16:08:41.000000000 +0530
@@ -85,6 +85,7 @@
case guruScriptCode:
case tamlScriptCode:
case teluScriptCode:
+ case sinhScriptCode:
// result = new XeTeXIndicLayoutEngine(fontInstance, scriptTag, languageTag, gsubTable, addFeatures, removeFeatures);
result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
break;
@@ -125,6 +126,7 @@
case guruScriptCode:
case tamlScriptCode:
case teluScriptCode:
+ case sinhScriptCode:
result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
break;
--- End Message ---