os/textandloc/fontservices/textshaperplugin/IcuSource/layout/CursiveAttachmentSubtables.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 /*
     2  * (C) Copyright IBM Corp. 1998 - 2005 - 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 
    17 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     }
    38 
    39     if (exitOffset != 0) {
    40         const AnchorTable *exitAnchorTable = (const AnchorTable *) ((char *) this + exitOffset);
    41 
    42         exitAnchorTable->getAnchor(glyphID, fontInstance, exitAnchor);
    43         glyphIterator->setCursiveExitPoint(exitAnchor);
    44     }
    45 
    46     return 1;
    47 }
    48 
    49 U_NAMESPACE_END