Aric Stewart : usp10: Apply 'ccmp' before Arabic contextual shaping.

Alexandre Julliard julliard at winehq.org
Mon Jan 30 15:39:16 CST 2017


Module: wine
Branch: master
Commit: 0c1419542fa61d6eaacd0a007074cbb3a12605a2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0c1419542fa61d6eaacd0a007074cbb3a12605a2

Author: Aric Stewart <aric at codeweavers.com>
Date:   Fri Jan 27 11:31:51 2017 -0600

usp10: Apply 'ccmp' before Arabic contextual shaping.

Signed-off-by: Aric Stewart <aric at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/usp10/shape.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/dlls/usp10/shape.c b/dlls/usp10/shape.c
index 850e929..bf333b2 100644
--- a/dlls/usp10/shape.c
+++ b/dlls/usp10/shape.c
@@ -1128,9 +1128,19 @@ static void ContextualShape_Arabic(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *p
 
         if (psc->GSUB_Table)
         {
-            INT nextIndex;
+            INT nextIndex, offset = 0;
             INT prevCount = *pcGlyphs;
 
+            /* Apply CCMP first */
+            apply_GSUB_feature_to_glyph(hdc, psa, psc, pwOutGlyphs, glyph_index, dirL, pcGlyphs, "ccmp");
+
+            if (prevCount != *pcGlyphs)
+            {
+                offset = *pcGlyphs - prevCount;
+                if (dirL < 0)
+                    glyph_index -= offset * dirL;
+            }
+
             /* Apply the contextual feature */
             nextIndex = apply_GSUB_feature_to_glyph(hdc, psa, psc, pwOutGlyphs, glyph_index, dirL, pcGlyphs, contextual_features[context_shape[char_index]]);
 
@@ -1138,7 +1148,13 @@ static void ContextualShape_Arabic(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *p
             {
                 UpdateClusters(glyph_index, *pcGlyphs - prevCount, dirL, cChars, pwLogClust);
                 char_index += dirL;
-                glyph_index = nextIndex;
+                if (!offset)
+                    glyph_index = nextIndex;
+                else
+                {
+                    offset = *pcGlyphs - prevCount;
+                    glyph_index += dirL * (offset + 1);
+                }
             }
             shaped = (nextIndex > GSUB_E_NOGLYPH);
         }




More information about the wine-cvs mailing list