From 53790d2a0c50915d8cec71df3e89cd24d887b2fe Mon Sep 17 00:00:00 2001 From: Jonathan Kew Date: Tue, 4 Mar 2008 13:26:36 +0000 Subject: update icu-xetex to 3.8.1-based code from xetex repository git-svn-id: svn://tug.org/texlive/trunk@6842 c570f23f-e606-0410-a88d-b1316a301751 --- .../icu-xetex/layout/TrimmedArrayProcessor.cpp | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.cpp (limited to 'Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.cpp') diff --git a/Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.cpp b/Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.cpp new file mode 100644 index 00000000000..a68c056267f --- /dev/null +++ b/Build/source/libs/icu-xetex/layout/TrimmedArrayProcessor.cpp @@ -0,0 +1,55 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * + */ + +#include "LETypes.h" +#include "MorphTables.h" +#include "SubtableProcessor.h" +#include "NonContextualGlyphSubst.h" +#include "NonContextualGlyphSubstProc.h" +#include "TrimmedArrayProcessor.h" +#include "LEGlyphStorage.h" +#include "LESwaps.h" + +U_NAMESPACE_BEGIN + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TrimmedArrayProcessor) + +TrimmedArrayProcessor::TrimmedArrayProcessor() +{ +} + +TrimmedArrayProcessor::TrimmedArrayProcessor(const MorphSubtableHeader *morphSubtableHeader) + : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader) +{ + const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader; + + trimmedArrayLookupTable = (const TrimmedArrayLookupTable *) &header->table; + firstGlyph = SWAPW(trimmedArrayLookupTable->firstGlyph); + lastGlyph = firstGlyph + SWAPW(trimmedArrayLookupTable->glyphCount); +} + +TrimmedArrayProcessor::~TrimmedArrayProcessor() +{ +} + +void TrimmedArrayProcessor::process(LEGlyphStorage &glyphStorage) +{ + le_int32 glyphCount = glyphStorage.getGlyphCount(); + le_int32 glyph; + + for (glyph = 0; glyph < glyphCount; glyph += 1) { + LEGlyphID thisGlyph = glyphStorage[glyph]; + TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(thisGlyph); + + if ((ttGlyph > firstGlyph) && (ttGlyph < lastGlyph)) { + TTGlyphID newGlyph = SWAPW(trimmedArrayLookupTable->valueArray[ttGlyph - firstGlyph]); + + glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph); + } + } +} + +U_NAMESPACE_END -- cgit v1.2.3