]>
git.saurik.com Git - apple/icu.git/blob - icuSources/layout/ExtensionSubtables.cpp
4 * (C) Copyright IBM Corp. 2008-2013 - 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 static inline le_uint32
READ_LONG(le_uint32 code
) {
20 le_uint16
* first
= ((le_uint16
*)&code
);
21 le_uint16
* second
= (((le_uint16
*)&code
) + 1);
22 return (le_uint32
)((SWAPW(*first
) << 16) + SWAPW(*second
));
25 // FIXME: should look at the format too... maybe have a sub-class for it?
26 le_uint32
ExtensionSubtable::process(const LookupProcessor
*lookupProcessor
, le_uint16 lookupType
,
27 GlyphIterator
*glyphIterator
, const LEFontInstance
*fontInstance
, LEErrorCode
& success
) const
29 const LEReferenceTo
<ExtensionSubtable
> thisRef(lookupProcessor
->getReference(), success
); // create a reference to this
31 if (LE_FAILURE(success
)) {
35 le_uint16 elt
= SWAPW(extensionLookupType
);
37 if (elt
!= lookupType
) {
38 le_uint32 extOffset
= READ_LONG(extensionOffset
);
39 LEReferenceTo
<LookupSubtable
> subtable(thisRef
, success
, extOffset
);
41 if(LE_SUCCESS(success
)) {
42 return lookupProcessor
->applySubtable(subtable
, elt
, glyphIterator
, fontInstance
, success
);