37 #include "OpenTypeUtilities.h" |
37 #include "OpenTypeUtilities.h" |
38 #include "LESwaps.h" |
38 #include "LESwaps.h" |
39 |
39 |
40 U_NAMESPACE_BEGIN |
40 U_NAMESPACE_BEGIN |
41 |
41 |
42 le_uint32 CursiveAttachmentSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const |
42 le_uint32 CursiveAttachmentSubtable::process(const LEReferenceTo<CursiveAttachmentSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const |
43 { |
43 { |
44 LEGlyphID glyphID = glyphIterator->getCurrGlyphID(); |
44 LEGlyphID glyphID = glyphIterator->getCurrGlyphID(); |
45 le_int32 coverageIndex = getGlyphCoverage(glyphID); |
45 le_int32 coverageIndex = getGlyphCoverage(base, glyphID, success); |
46 le_uint16 eeCount = SWAPW(entryExitCount); |
46 le_uint16 eeCount = SWAPW(entryExitCount); |
47 |
47 |
48 if (coverageIndex < 0 || coverageIndex >= eeCount) { |
48 if (coverageIndex < 0 || coverageIndex >= eeCount) { |
49 glyphIterator->setCursiveGlyph(); |
49 glyphIterator->setCursiveGlyph(); |
50 return 0; |
50 return 0; |
51 } |
51 } |
52 |
52 |
53 LEPoint entryAnchor, exitAnchor; |
53 LEPoint entryAnchor, exitAnchor; |
54 Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor); |
54 Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor); // TODO |
55 Offset exitOffset = SWAPW(entryExitRecords[coverageIndex].exitAnchor); |
55 Offset exitOffset = SWAPW(entryExitRecords[coverageIndex].exitAnchor); |
56 |
56 |
57 if (entryOffset != 0) { |
57 if (entryOffset != 0) { |
58 const AnchorTable *entryAnchorTable = (const AnchorTable *) ((char *) this + entryOffset); |
58 const AnchorTable *entryAnchorTable = (const AnchorTable *) ((char *) this + entryOffset); |
59 |
59 |