summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-4.2.1-PATCHES/patch-22-fix-JK-adjust_for_marks
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-4.2.1-PATCHES/patch-22-fix-JK-adjust_for_marks')
-rw-r--r--Build/source/libs/icu/icu-4.2.1-PATCHES/patch-22-fix-JK-adjust_for_marks31
1 files changed, 31 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-4.2.1-PATCHES/patch-22-fix-JK-adjust_for_marks b/Build/source/libs/icu/icu-4.2.1-PATCHES/patch-22-fix-JK-adjust_for_marks
new file mode 100644
index 00000000000..4c4119de776
--- /dev/null
+++ b/Build/source/libs/icu/icu-4.2.1-PATCHES/patch-22-fix-JK-adjust_for_marks
@@ -0,0 +1,31 @@
+diff -ur icu-4.2.1.orig/source/layout/MarkToBasePosnSubtables.cpp icu-4.2.1/source/layout/MarkToBasePosnSubtables.cpp
+--- icu-4.2.1.orig/source/layout/MarkToBasePosnSubtables.cpp 2009-07-01 20:51:24.000000000 +0200
++++ icu-4.2.1/source/layout/MarkToBasePosnSubtables.cpp 2009-10-22 23:46:21.000000000 +0200
+@@ -83,11 +83,27 @@
+ glyphIterator->setCurrGlyphBaseOffset(baseIterator.getCurrStreamPosition());
+
+ if (glyphIterator->isRightToLeft()) {
++ ///// FIXME: need similar patch to below; also in MarkToLigature and MarkToMark
++ ///// (is there a better way to approach this for all the cases?)
+ glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
+ } else {
+ LEPoint baseAdvance;
+
+ fontInstance->getGlyphAdvance(baseGlyph, pixels);
++
++ ///// JK: adjustment needs to account for non-zero advance of any marks between base glyph and current mark
++ GlyphIterator gi(baseIterator, (le_uint16)0); // copy of baseIterator that won't ignore marks
++ gi.next(); // point beyond the base glyph
++ while (gi.getCurrStreamPosition() < glyphIterator->getCurrStreamPosition()) { // for all intervening glyphs (marks)...
++ LEGlyphID otherMark = gi.getCurrGlyphID();
++ LEPoint px;
++ fontInstance->getGlyphAdvance(otherMark, px); // get advance, in case it's non-zero
++ pixels.fX += px.fX; // and add that to the base glyph's advance
++ pixels.fY += px.fY;
++ gi.next();
++ }
++ ///// end of JK patch
++
+ fontInstance->pixelsToUnits(pixels, baseAdvance);
+
+ glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - baseAdvance.fX, anchorDiffY - baseAdvance.fY, -markAdvance.fX, -markAdvance.fY);