• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * (C) Copyright IBM Corp. 1998 - 2007 - All Rights Reserved
3  *
4  */
5 
6 #include "LETypes.h"
7 #include "OpenTypeTables.h"
8 #include "GlyphPositioningTables.h"
9 #include "CursiveAttachmentSubtables.h"
10 #include "AnchorTables.h"
11 #include "GlyphIterator.h"
12 #include "OpenTypeUtilities.h"
13 #include "LESwaps.h"
14 
15 U_NAMESPACE_BEGIN
16 
process(GlyphIterator * glyphIterator,const LEFontInstance * fontInstance) const17 le_uint32 CursiveAttachmentSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
18 {
19     LEGlyphID glyphID       = glyphIterator->getCurrGlyphID();
20     le_int32  coverageIndex = getGlyphCoverage(glyphID);
21     le_uint16 eeCount       = SWAPW(entryExitCount);
22 
23     if (coverageIndex < 0 || coverageIndex >= eeCount) {
24         glyphIterator->setCursiveGlyph();
25         return 0;
26     }
27 
28     LEPoint entryAnchor, exitAnchor;
29     Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor);
30     Offset exitOffset  = SWAPW(entryExitRecords[coverageIndex].exitAnchor);
31 
32     if (entryOffset != 0) {
33         const AnchorTable *entryAnchorTable = (const AnchorTable *) ((char *) this + entryOffset);
34 
35         entryAnchorTable->getAnchor(glyphID, fontInstance, entryAnchor);
36         glyphIterator->setCursiveEntryPoint(entryAnchor);
37     } else {
38         //glyphIterator->clearCursiveEntryPoint();
39     }
40 
41     if (exitOffset != 0) {
42         const AnchorTable *exitAnchorTable = (const AnchorTable *) ((char *) this + exitOffset);
43 
44         exitAnchorTable->getAnchor(glyphID, fontInstance, exitAnchor);
45         glyphIterator->setCursiveExitPoint(exitAnchor);
46     } else {
47         //glyphIterator->clearCursiveExitPoint();
48     }
49 
50     return 1;
51 }
52 
53 U_NAMESPACE_END
54