2000-11-28 20:56:52 +00:00
|
|
|
/*
|
|
|
|
* @(#)SubstitutionLookups.cpp 1.6 00/03/15
|
|
|
|
*
|
|
|
|
* (C) Copyright IBM Corp. 1998, 1999, 2000 - All Rights Reserved
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "LETypes.h"
|
|
|
|
#include "LEFontInstance.h"
|
|
|
|
#include "OpenTypeTables.h"
|
|
|
|
#include "GlyphSubstitutionTables.h"
|
|
|
|
#include "GlyphIterator.h"
|
|
|
|
#include "LookupProcessor.h"
|
|
|
|
#include "SubstitutionLookups.h"
|
|
|
|
#include "CoverageTables.h"
|
|
|
|
#include "LESwaps.h"
|
|
|
|
|
2001-10-16 00:39:01 +00:00
|
|
|
U_NAMESPACE_BEGIN
|
|
|
|
|
2000-11-28 20:56:52 +00:00
|
|
|
/*
|
|
|
|
NOTE: This could be optimized somewhat by keeping track
|
|
|
|
of the previous sequenceIndex in the loop and doing next()
|
|
|
|
or prev() of the delta between that and the current
|
|
|
|
sequenceIndex instead of always resetting to the front.
|
|
|
|
*/
|
|
|
|
void SubstitutionLookup::applySubstitutionLookups(
|
|
|
|
LookupProcessor *lookupProcessor,
|
|
|
|
SubstitutionLookupRecord *substLookupRecordArray,
|
|
|
|
le_uint16 substCount,
|
|
|
|
GlyphIterator *glyphIterator,
|
2000-12-21 01:18:44 +00:00
|
|
|
const LEFontInstance *fontInstance,
|
2000-11-28 20:56:52 +00:00
|
|
|
le_int32 position)
|
|
|
|
{
|
|
|
|
GlyphIterator tempIterator(*glyphIterator);
|
|
|
|
|
|
|
|
for (le_uint16 subst = 0; subst < substCount; subst += 1) {
|
|
|
|
le_uint16 sequenceIndex = SWAPW(substLookupRecordArray[subst].sequenceIndex);
|
|
|
|
le_uint16 lookupListIndex = SWAPW(substLookupRecordArray[subst].lookupListIndex);
|
|
|
|
|
|
|
|
tempIterator.setCurrStreamPosition(position);
|
|
|
|
tempIterator.next(sequenceIndex);
|
|
|
|
|
|
|
|
lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-10-16 00:39:01 +00:00
|
|
|
U_NAMESPACE_END
|