diff -ruN icu.orig/source/layout/IndicReordering.h icu/source/layout/IndicReordering.h
--- icu.orig/source/layout/IndicReordering.h 2007-04-27 10:28:22.000000000 +0100
+++ icu/source/layout/IndicReordering.h 2007-04-27 10:39:22.000000000 +0100
@@ -142,6 +142,7 @@
// do not instantiate
IndicReordering();
+public:
static le_int32 findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
};
diff -ruN icu.orig/source/layout/LayoutEngine.cpp icu/source/layout/LayoutEngine.cpp
--- icu.orig/source/layout/LayoutEngine.cpp 2007-04-27 10:28:22.000000000 +0100
+++ icu/source/layout/LayoutEngine.cpp 2007-04-27 10:39:22.000000000 +0100
@@ -14,6 +14,7 @@
#include "CanonShaping.h"
#include "HanLayoutEngine.h"
#include "HangulLayoutEngine.h"
+#include "MalayalamLayoutEngine.h"
#include "IndicLayoutEngine.h"
#include "KhmerLayoutEngine.h"
#include "ThaiLayoutEngine.h"
@@ -179,7 +180,7 @@
}
le_int32 LayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32)
{
if (LE_FAILURE(success)) {
return 0;
@@ -499,11 +500,13 @@
if (gsubTable != NULL && gsubTable->coversScript(scriptTag = OpenTypeLayoutEngine::getScriptTag(scriptCode))) {
switch (scriptCode) {
+ case mlymScriptCode:
+ result = new MalayalamOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
+ break;
case bengScriptCode:
case devaScriptCode:
case gujrScriptCode:
case kndaScriptCode:
- case mlymScriptCode:
case oryaScriptCode:
case guruScriptCode:
case tamlScriptCode:
@@ -560,11 +563,13 @@
result = new GXLayoutEngine(fontInstance, scriptCode, languageCode, morphTable);
} else {
switch (scriptCode) {
+ case mlymScriptCode:
+ result = new MalayalamOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
+ break;
case bengScriptCode:
case devaScriptCode:
case gujrScriptCode:
case kndaScriptCode:
- case mlymScriptCode:
case oryaScriptCode:
case guruScriptCode:
case tamlScriptCode:
diff -ruN icu.orig/source/layout/LEGlyphStorage.h icu/source/layout/LEGlyphStorage.h
--- icu.orig/source/layout/LEGlyphStorage.h 2007-04-27 10:28:22.000000000 +0100
+++ icu/source/layout/LEGlyphStorage.h 2007-04-27 10:43:54.000000000 +0100
@@ -413,6 +413,8 @@
*/
void adoptGlyphArray(LEGlyphStorage &from);
+ void appendGlyphStorage(LEGlyphStorage &from);
+
/**
* Delete the char indices array and replace it with the one
* in from
. Set the char indices array pointer
diff -ruN icu.orig/source/layout/Makefile.in icu/source/layout/Makefile.in
--- icu.orig/source/layout/Makefile.in 2007-04-27 10:28:22.000000000 +0100
+++ icu/source/layout/Makefile.in 2007-04-27 10:39:22.000000000 +0100
@@ -66,6 +66,7 @@
ArabicLayoutEngine.o \
GXLayoutEngine.o \
HanLayoutEngine.o \
+MalayalamLayoutEngine.o \
IndicLayoutEngine.o \
LayoutEngine.o \
ContextualGlyphSubstProc.o \
diff -ruN icu.orig/source/layout/MalayalamLayoutEngine.cpp icu/source/layout/MalayalamLayoutEngine.cpp
--- icu.orig/source/layout/MalayalamLayoutEngine.cpp 1970-01-01 01:00:00.000000000 +0100
+++ icu/source/layout/MalayalamLayoutEngine.cpp 2007-04-27 10:44:26.000000000 +0100
@@ -0,0 +1,121 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LayoutEngine.h"
+#include "OpenTypeLayoutEngine.h"
+#include "MalayalamLayoutEngine.h"
+#include "ScriptAndLanguageTags.h"
+
+#include "GlyphSubstitutionTables.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+
+#include "GDEFMarkFilter.h"
+#include "LEGlyphStorage.h"
+
+#include "IndicReordering.h"
+
+#include
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MalayalamOpenTypeLayoutEngine)
+
+void LEGlyphStorage::appendGlyphStorage(LEGlyphStorage &from)
+{
+ if (fInsertionList) applyInsertions();
+ if (from.fInsertionList) from.applyInsertions();
+
+ if (!from.fGlyphCount)
+ return;
+
+ le_int32 newGlyphCount = fGlyphCount + from.fGlyphCount;
+
+ fGlyphs = (LEGlyphID*)LE_GROW_ARRAY(fGlyphs, newGlyphCount);
+ LE_ARRAY_COPY(fGlyphs+fGlyphCount, from.fGlyphs, from.fGlyphCount);
+
+ le_int32 nLargestIndex = 0;
+ if (fGlyphCount)
+ {
+ for (le_int32 i = 0; i < fGlyphCount; ++i)
+ {
+ if (fCharIndices[i] > nLargestIndex)
+ nLargestIndex = fCharIndices[i];
+ }
+ nLargestIndex+=1;
+ }
+ fCharIndices = (le_int32 *)LE_GROW_ARRAY(fCharIndices, newGlyphCount);
+ for (le_int32 i = 0; i < from.fGlyphCount; ++i)
+ fCharIndices[fGlyphCount+i] = from.fCharIndices[i] + nLargestIndex;
+
+ fAuxData = (le_uint32 *)LE_GROW_ARRAY(fAuxData, newGlyphCount);
+ LE_ARRAY_COPY(fAuxData+fGlyphCount, from.fAuxData, from.fGlyphCount);
+
+ fGlyphCount = newGlyphCount;
+}
+
+le_int32 MalayalamOpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ glyphStorage.appendGlyphStorage(tempGlyphStorage);
+
+ return glyphStorage.getGlyphCount();
+}
+
+
+le_int32 MalayalamOpenTypeLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ le_int32 outGlyphCount=0;
+
+ const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(fScriptCode);
+ le_int32 prev = 0;
+ while (prev < count)
+ {
+ le_int32 outCharCount=0, fakeGlyphCount=0,fSyllableCount=0;
+ LEUnicode *outChars = NULL;
+ LEGlyphStorage fakeGlyphStorage;
+
+ le_int32 syllable = IndicReordering::findSyllable(classTable, chars+offset, prev, count);
+ outCharCount = characterProcessing(chars+prev, offset, syllable-prev, max, rightToLeft, outChars, fakeGlyphStorage, success, ++fSyllableCount);
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (outChars != NULL) {
+ fakeGlyphCount = glyphProcessing(outChars, 0, outCharCount, outCharCount, rightToLeft, fakeGlyphStorage, success);
+ LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
+ } else {
+ fakeGlyphCount = glyphProcessing(chars+prev, offset, syllable-prev, max, rightToLeft, fakeGlyphStorage, success);
+ }
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ outGlyphCount = glyphPostProcessing(fakeGlyphStorage, glyphStorage, success);
+
+ prev = syllable;
+ }
+
+ return outGlyphCount;
+}
+
+U_NAMESPACE_END
diff -ruN icu.orig/source/layout/MalayalamLayoutEngine.h icu/source/layout/MalayalamLayoutEngine.h
--- icu.orig/source/layout/MalayalamLayoutEngine.h 1970-01-01 01:00:00.000000000 +0100
+++ icu/source/layout/MalayalamLayoutEngine.h 2007-04-27 10:39:52.000000000 +0100
@@ -0,0 +1,41 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __MALAYALAMLAYOUTENGINE_H
+#define __MALAYALAMLAYOUTENGINE_H
+
+#include "IndicLayoutEngine.h"
+
+U_NAMESPACE_BEGIN
+
+class MalayalamOpenTypeLayoutEngine : public IndicOpenTypeLayoutEngine
+{
+public:
+ MalayalamOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) :
+ IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable)
+
+ {}
+
+ MalayalamOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags) :
+ IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags)
+
+ {}
+
+ virtual UClassID getDynamicClassID() const;
+ static UClassID getStaticClassID();
+
+protected:
+ virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+};
+
+U_NAMESPACE_END
+#endif
+
diff -ru icu.orig/source/layout/MalayalamLayoutEngine.cpp icu/source/layout/MalayalamLayoutEngine.cpp
--- icu.orig/source/layout/MalayalamLayoutEngine.cpp 2007-11-28 10:44:11.000000000 +0000
+++ icu/source/layout/MalayalamLayoutEngine.cpp 2007-11-28 11:40:18.000000000 +0000
@@ -30,6 +30,11 @@
{
if (fInsertionList) applyInsertions();
if (from.fInsertionList) from.applyInsertions();
+ if ((!fInsertionList) && (from.fInsertionList))
+ {
+ fInsertionList = from.fInsertionList;
+ from.fInsertionList = NULL;
+ }
if (!from.fGlyphCount)
return;
diff -ru icu/source/layout/ArabicLayoutEngine.cpp icu.works/source/layout/ArabicLayoutEngine.cpp
--- icu.orig/source/layout/ArabicLayoutEngine.cpp 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/ArabicLayoutEngine.cpp 2008-01-25 12:19:42.000000000 +0000
@@ -64,7 +64,7 @@
// Output: characters, char indices, tags
// Returns: output character count
le_int32 ArabicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32)
{
if (LE_FAILURE(success)) {
return 0;
diff -ru icu/source/layout/ArabicLayoutEngine.h icu.works/source/layout/ArabicLayoutEngine.h
--- icu.orig/source/layout/ArabicLayoutEngine.h 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/ArabicLayoutEngine.h 2008-01-25 12:20:14.000000000 +0000
@@ -112,7 +112,7 @@
* @internal
*/
virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32 fSyllableCount);
/**
* This method applies the GPOS table if it is present, otherwise it ensures that all vowel
diff -ru icu/source/layout/HangulLayoutEngine.cpp icu.works/source/layout/HangulLayoutEngine.cpp
--- icu.orig/source/layout/HangulLayoutEngine.cpp 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/HangulLayoutEngine.cpp 2008-01-25 12:20:38.000000000 +0000
@@ -207,7 +207,7 @@
}
le_int32 HangulOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32)
{
if (LE_FAILURE(success)) {
return 0;
diff -ru icu/source/layout/HangulLayoutEngine.h icu.works/source/layout/HangulLayoutEngine.h
--- icu.orig/source/layout/HangulLayoutEngine.h 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/HangulLayoutEngine.h 2008-01-25 12:21:15.000000000 +0000
@@ -117,7 +117,7 @@
* @internal
*/
virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32 fSyllableCount=0);
};
U_NAMESPACE_END
diff -ru icu/source/layout/HanLayoutEngine.cpp icu.works/source/layout/HanLayoutEngine.cpp
--- icu.orig/source/layout/HanLayoutEngine.cpp 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/HanLayoutEngine.cpp 2008-01-25 12:21:25.000000000 +0000
@@ -52,7 +52,7 @@
}
le_int32 HanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
- LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+ LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32)
{
if (LE_FAILURE(success)) {
return 0;
diff -ru icu/source/layout/HanLayoutEngine.h icu.works/source/layout/HanLayoutEngine.h
--- icu.orig/source/layout/HanLayoutEngine.h 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/HanLayoutEngine.h 2008-01-25 12:21:32.000000000 +0000
@@ -96,7 +96,7 @@
* @internal
*/
virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32 fSyllableCount=0);
};
diff -ru icu/source/layout/IndicLayoutEngine.cpp icu.works/source/layout/IndicLayoutEngine.cpp
--- icu.orig/source/layout/IndicLayoutEngine.cpp 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/IndicLayoutEngine.cpp 2008-01-25 12:13:41.000000000 +0000
@@ -75,7 +75,7 @@
// Output: characters, char indices, tags
// Returns: output character count
le_int32 IndicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32 fSyllableCount)
{
if (LE_FAILURE(success)) {
return 0;
@@ -105,7 +105,7 @@
// NOTE: assumes this allocates featureTags...
// (probably better than doing the worst case stuff here...)
- le_int32 outCharCount = IndicReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage, &fMPreFixups);
+ le_int32 outCharCount = IndicReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage, &fMPreFixups, fSyllableCount);
glyphStorage.adoptGlyphCount(outCharCount);
return outCharCount;
diff -ru icu/source/layout/IndicLayoutEngine.h icu.works/source/layout/IndicLayoutEngine.h
--- icu.orig/source/layout/IndicLayoutEngine.h 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/IndicLayoutEngine.h 2008-01-25 12:13:12.000000000 +0000
@@ -119,7 +119,7 @@
* @internal
*/
virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32 fSyllableCount = 0);
/**
* This method does character to glyph mapping, applies the GSUB table and applies
diff -ru icu/source/layout/IndicReordering.cpp icu.works/source/layout/IndicReordering.cpp
--- icu.orig/source/layout/IndicReordering.cpp 2008-01-25 12:23:56.000000000 +0000
+++ icu/source/layout/IndicReordering.cpp 2008-01-25 12:15:32.000000000 +0000
@@ -138,8 +138,8 @@
}
public:
- IndicReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups)
- : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage),
+ IndicReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups,le_int32 fSyllableCount_)
+ : fSyllableCount(fSyllableCount_), 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), fVirama(0), fViramaIndex(0),
fMatraFeatures(0), fMPreOutIndex(-1), fMPreFixups(mpreFixups),
@@ -480,7 +480,7 @@
le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
LEUnicode *outChars, LEGlyphStorage &glyphStorage,
- MPreFixups **outMPreFixups)
+ MPreFixups **outMPreFixups, le_int32 fSyllableCount)
{
MPreFixups *mpreFixups = NULL;
const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
@@ -489,7 +489,7 @@
mpreFixups = new MPreFixups(charCount);
}
- IndicReorderingOutput output(outChars, glyphStorage, mpreFixups);
+ IndicReorderingOutput output(outChars, glyphStorage, mpreFixups, fSyllableCount);
le_int32 i, prev = 0;
le_bool lastInWord = FALSE;
diff -ru icu/source/layout/IndicReordering.h icu.works/source/layout/IndicReordering.h
--- icu.orig/source/layout/IndicReordering.h 2008-01-25 12:23:56.000000000 +0000
+++ icu/source/layout/IndicReordering.h 2008-01-25 12:13:59.000000000 +0000
@@ -132,7 +132,7 @@
static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
LEUnicode *outChars, LEGlyphStorage &glyphStorage,
- MPreFixups **outMPreFixups);
+ MPreFixups **outMPreFixups, le_int32 fSyllableCount = 0);
static void adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage);
diff -ru icu/source/layout/KhmerLayoutEngine.cpp icu.works/source/layout/KhmerLayoutEngine.cpp
--- icu.orig/source/layout/KhmerLayoutEngine.cpp 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/KhmerLayoutEngine.cpp 2008-01-25 12:21:48.000000000 +0000
@@ -42,7 +42,7 @@
// Output: characters, char indices, tags
// Returns: output character count
le_int32 KhmerOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32)
{
if (LE_FAILURE(success)) {
return 0;
diff -ru icu/source/layout/KhmerLayoutEngine.h icu.works/source/layout/KhmerLayoutEngine.h
--- icu.orig/source/layout/KhmerLayoutEngine.h 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/KhmerLayoutEngine.h 2008-01-25 12:21:56.000000000 +0000
@@ -120,7 +120,7 @@
* @internal
*/
virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32 fSyllableCount=0);
};
diff -ru icu/source/layout/LayoutEngine.h icu.works/source/layout/LayoutEngine.h
--- icu.orig/source/layout/LayoutEngine.h 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/LayoutEngine.h 2008-01-25 12:22:14.000000000 +0000
@@ -164,7 +164,7 @@
* @internal
*/
virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32 fSyllableCount=0);
/**
* This method does the glyph processing. It converts an array of characters
diff -ru icu/source/layout/OpenTypeLayoutEngine.cpp icu.works/source/layout/OpenTypeLayoutEngine.cpp
--- icu.orig/source/layout/OpenTypeLayoutEngine.cpp 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/OpenTypeLayoutEngine.cpp 2008-01-25 12:22:32.000000000 +0000
@@ -149,7 +149,7 @@
}
le_int32 OpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32)
{
if (LE_FAILURE(success)) {
return 0;
diff -ru icu/source/layout/OpenTypeLayoutEngine.h icu.works/source/layout/OpenTypeLayoutEngine.h
--- icu.orig/source/layout/OpenTypeLayoutEngine.h 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/OpenTypeLayoutEngine.h 2008-01-25 12:22:39.000000000 +0000
@@ -247,7 +247,7 @@
* @internal
*/
virtual le_int32 characterProcessing(const LEUnicode /*chars*/[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
- LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+ LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32 fSyllableCount=0);
/**
* This method does character to glyph mapping, and applies the GSUB table. The
diff -ru icu/source/layout/TibetanLayoutEngine.cpp icu.works/source/layout/TibetanLayoutEngine.cpp
--- icu.orig/source/layout/TibetanLayoutEngine.cpp 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/TibetanLayoutEngine.cpp 2008-01-25 12:22:52.000000000 +0000
@@ -48,7 +48,7 @@
// Output: characters, char indices, tags
// Returns: output character count
le_int32 TibetanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32)
{
if (LE_FAILURE(success)) {
return 0;
diff -ru icu/source/layout/TibetanLayoutEngine.h icu.works/source/layout/TibetanLayoutEngine.h
--- icu.orig/source/layout/TibetanLayoutEngine.h 2007-12-12 18:58:06.000000000 +0000
+++ icu/source/layout/TibetanLayoutEngine.h 2008-01-25 12:22:59.000000000 +0000
@@ -120,7 +120,7 @@
* @internal
*/
virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success, le_int32 fSyllableCount=0);
};