summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-xetex/layout/CursiveAttachmentSubtables.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-xetex/layout/CursiveAttachmentSubtables.cpp')
-rw-r--r--Build/source/libs/icu/icu-xetex/layout/CursiveAttachmentSubtables.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-xetex/layout/CursiveAttachmentSubtables.cpp b/Build/source/libs/icu/icu-xetex/layout/CursiveAttachmentSubtables.cpp
new file mode 100644
index 00000000000..9d2144fcefa
--- /dev/null
+++ b/Build/source/libs/icu/icu-xetex/layout/CursiveAttachmentSubtables.cpp
@@ -0,0 +1,53 @@
+/*
+ * (C) Copyright IBM Corp. 1998 - 2007 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+#include "CursiveAttachmentSubtables.h"
+#include "AnchorTables.h"
+#include "GlyphIterator.h"
+#include "OpenTypeUtilities.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_uint32 CursiveAttachmentSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ LEGlyphID glyphID = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyphID);
+ le_uint16 eeCount = SWAPW(entryExitCount);
+
+ if (coverageIndex < 0 || coverageIndex >= eeCount) {
+ glyphIterator->setCursiveGlyph();
+ return 0;
+ }
+
+ LEPoint entryAnchor, exitAnchor;
+ Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor);
+ Offset exitOffset = SWAPW(entryExitRecords[coverageIndex].exitAnchor);
+
+ if (entryOffset != 0) {
+ const AnchorTable *entryAnchorTable = (const AnchorTable *) ((char *) this + entryOffset);
+
+ entryAnchorTable->getAnchor(glyphID, fontInstance, entryAnchor);
+ glyphIterator->setCursiveEntryPoint(entryAnchor);
+ } else {
+ //glyphIterator->clearCursiveEntryPoint();
+ }
+
+ if (exitOffset != 0) {
+ const AnchorTable *exitAnchorTable = (const AnchorTable *) ((char *) this + exitOffset);
+
+ exitAnchorTable->getAnchor(glyphID, fontInstance, exitAnchor);
+ glyphIterator->setCursiveExitPoint(exitAnchor);
+ } else {
+ //glyphIterator->clearCursiveExitPoint();
+ }
+
+ return 1;
+}
+
+U_NAMESPACE_END