]>
git.saurik.com Git - apple/icu.git/blob - icuSources/layout/ExtensionSubtables.cpp
4 * (C) Copyright IBM Corp. 2008-2010 - All Rights Reserved
9 #include "OpenTypeTables.h"
10 #include "GlyphSubstitutionTables.h"
11 #include "LookupProcessor.h"
12 #include "ExtensionSubtables.h"
13 #include "GlyphIterator.h"
18 // read a 32-bit value that might only be 16-bit-aligned in memory
19 #define READ_LONG(code) (le_uint32)((SWAPW(*(le_uint16*)&code) << 16) + SWAPW(*(((le_uint16*)&code) + 1)))
21 // FIXME: should look at the format too... maybe have a sub-class for it?
22 le_uint32
ExtensionSubtable::process(const LookupProcessor
*lookupProcessor
, le_uint16 lookupType
,
23 GlyphIterator
*glyphIterator
, const LEFontInstance
*fontInstance
, LEErrorCode
& success
) const
25 if (LE_FAILURE(success
)) {
29 le_uint16 elt
= SWAPW(extensionLookupType
);
31 if (elt
!= lookupType
) {
32 le_uint32 extOffset
= READ_LONG(extensionOffset
);
33 LookupSubtable
*subtable
= (LookupSubtable
*) ((char *) this + extOffset
);
35 return lookupProcessor
->applySubtable(subtable
, elt
, glyphIterator
, fontInstance
, success
);