[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#476957: marked as done (texlive-xetex: Sinhala language support)



Your message dated Mon, 28 Apr 2008 20:56:18 +0200
with message-id <20080428185618.GD28757@gamma.logic.tuwien.ac.at>
and subject line Re: Bug#476957: texlive-xetex: Sinhala language support
has caused the Debian Bug report #476957,
regarding texlive-xetex: Sinhala language support
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
476957: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=476957
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- 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 ---
--- Begin Message ---
Dear all,

thanks for the decision.

On Fr, 25 Apr 2008, Anuradha Ratnaweera wrote:
> As the discussion proved, we have a little more than *smallest* doubts
> about the attached patch.  So let us not risk including it for TL2007
> in partly frozen Lenny.

Ok, fine with me.

> Please close the bug.

Done.

I can assure you that as soon as TL2008 is out and packaged for Debian
we will provide backports for lenny of the packages, so people
interested can do that without any problems.

Best wishes

Norbert

-------------------------------------------------------------------------------
Dr. Norbert Preining <preining@logic.at>        Vienna University of Technology
Debian Developer <preining@debian.org>                         Debian TeX Group
gpg DSA: 0x09C5B094      fp: 14DF 2E6C 0307 BE6D AD76  A9C0 D2BF 4AA3 09C5 B094
-------------------------------------------------------------------------------
CAMER (n.)
A mis-tossed caber.
			--- Douglas Adams, The Meaning of Liff


--- End Message ---

Reply to: