diff options
Diffstat (limited to 'Build/source/libs/icu-xetex/layout/MPreFixups.cpp')
-rw-r--r-- | Build/source/libs/icu-xetex/layout/MPreFixups.cpp | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/Build/source/libs/icu-xetex/layout/MPreFixups.cpp b/Build/source/libs/icu-xetex/layout/MPreFixups.cpp deleted file mode 100644 index 75791eed02c..00000000000 --- a/Build/source/libs/icu-xetex/layout/MPreFixups.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 2002-2004 - All Rights Reserved - * - */ - -#include "LETypes.h" -#include "LEGlyphStorage.h" -#include "MPreFixups.h" - -U_NAMESPACE_BEGIN - -struct FixupData -{ - le_int32 fBaseIndex; - le_int32 fMPreIndex; -}; - -MPreFixups::MPreFixups(le_int32 charCount) - : fFixupData(NULL), fFixupCount(0) -{ - fFixupData = LE_NEW_ARRAY(FixupData, charCount); -} - -MPreFixups::~MPreFixups() -{ - LE_DELETE_ARRAY(fFixupData); - fFixupData = NULL; -} - -void MPreFixups::add(le_int32 baseIndex, le_int32 mpreIndex) -{ - // NOTE: don't add the fixup data if the mpre is right - // before the base consonant glyph. - if (baseIndex - mpreIndex > 1) { - fFixupData[fFixupCount].fBaseIndex = baseIndex; - fFixupData[fFixupCount].fMPreIndex = mpreIndex; - - fFixupCount += 1; - } -} - -void MPreFixups::apply(LEGlyphStorage &glyphStorage) -{ - for (le_int32 fixup = 0; fixup < fFixupCount; fixup += 1) { - le_int32 baseIndex = fFixupData[fixup].fBaseIndex; - le_int32 mpreIndex = fFixupData[fixup].fMPreIndex; - le_int32 mpreLimit = mpreIndex + 1; - - while (glyphStorage[baseIndex] == 0xFFFF || glyphStorage[baseIndex] == 0xFFFE) { - baseIndex -= 1; - } - - while (glyphStorage[mpreLimit] == 0xFFFF || glyphStorage[mpreLimit] == 0xFFFE) { - mpreLimit += 1; - } - - if (mpreLimit == baseIndex) { - continue; - } - - LEErrorCode success = LE_NO_ERROR; - le_int32 mpreCount = mpreLimit - mpreIndex; - le_int32 moveCount = baseIndex - mpreLimit; - le_int32 mpreDest = baseIndex - mpreCount; - LEGlyphID *mpreSave = LE_NEW_ARRAY(LEGlyphID, mpreCount); - le_int32 *indexSave = LE_NEW_ARRAY(le_int32, mpreCount); - le_int32 i; - - for (i = 0; i < mpreCount; i += 1) { - mpreSave[i] = glyphStorage[mpreIndex + i]; - indexSave[i] = glyphStorage.getCharIndex(mpreIndex + i, success); //charIndices[mpreIndex + i]; - } - - for (i = 0; i < moveCount; i += 1) { - LEGlyphID glyph = glyphStorage[mpreLimit + i]; - le_int32 charIndex = glyphStorage.getCharIndex(mpreLimit + i, success); - - glyphStorage[mpreIndex + i] = glyph; - glyphStorage.setCharIndex(mpreIndex + i, charIndex, success); - } - - for (i = 0; i < mpreCount; i += 1) { - glyphStorage[mpreDest + i] = mpreSave[i]; - glyphStorage.setCharIndex(mpreDest, indexSave[i], success); - } - - LE_DELETE_ARRAY(indexSave); - LE_DELETE_ARRAY(mpreSave); - } -} - -U_NAMESPACE_END |