[PATCH] fix fdo#60534 : use DefaultCharMapper::mapChar() to map RTL ...

navin patidar (via Code Review) gerrit at gerrit.libreoffice.org
Sun Apr 7 01:52:59 PDT 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3221

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/21/3221/1

fix fdo#60534 : use DefaultCharMapper::mapChar() to map RTL string unicodes.

Use DefaultCharMapper::mapChar() to map RTL string unicodes
to their mirror compatible  unicodes.

Change-Id: I5bd2fd18bf96c49bbdf2be521a9cf28c311c7a09
---
M vcl/inc/graphite_layout.hxx
M vcl/source/glyphs/graphite_layout.cxx
2 files changed, 22 insertions(+), 2 deletions(-)



diff --git a/vcl/inc/graphite_layout.hxx b/vcl/inc/graphite_layout.hxx
index bbf6f15..fa6d25c 100644
--- a/vcl/inc/graphite_layout.hxx
+++ b/vcl/inc/graphite_layout.hxx
@@ -97,6 +97,7 @@
 private:
     const gr_face *         mpFace; // not owned by layout
     gr_font *               mpFont; // not owned by layout
+    sal_Unicode *           mpStr;
     int                     mnSegCharOffset; // relative to ImplLayoutArgs::mpStr
     long                    mnWidth;
     std::vector<int>        mvChar2BaseGlyph;
diff --git a/vcl/source/glyphs/graphite_layout.cxx b/vcl/source/glyphs/graphite_layout.cxx
index 8b19c31..3e3c329 100644
--- a/vcl/source/glyphs/graphite_layout.cxx
+++ b/vcl/source/glyphs/graphite_layout.cxx
@@ -48,6 +48,7 @@
 #include <unicode/ubidi.h>
 #include <unicode/uscript.h>
 
+#include <layout/DefaultCharMapper.h>
 // Graphite Libraries (must be after vcl headers on windows)
 #include <graphite2/Segment.h>
 
@@ -490,6 +491,7 @@
                                const grutils::GrFeatureParser * pFeatures) throw()
   : mpFace(face),
     mpFont(font),
+    mpStr(NULL),
     mnWidth(0),
     mfScaling(1.0),
     mpFeatures(pFeatures)
@@ -501,6 +503,7 @@
 {
     clear();
     // the features and font are owned by the platform layers
+    delete[] mpStr;
     mpFeatures = NULL;
     mpFont = NULL;
 }
@@ -591,12 +594,28 @@
         }
         size_t numchars = gr_count_unicode_characters(gr_utf16, rArgs.mpStr + mnSegCharOffset,
                 rArgs.mpStr + (rArgs.mnLength > limit + 64 ? limit + 64 : rArgs.mnLength), NULL);
+
+        mpStr = new sal_Unicode[rArgs.mnLength+1];
+        if(mpStr)
+            memcpy(mpStr, rArgs.mpStr, (rArgs.mnLength+1)*2);
+
+        if (bRtl && mpStr)
+        {
+            DefaultCharMapper cmap(true, bRtl);
+            int i=0;
+            while(rArgs.mpStr[i])
+            {
+                mpStr[i]=(sal_Unicode) cmap.mapChar((sal_uInt32)rArgs.mpStr[i]);
+                i++;
+            }
+        }
+
         if (mpFeatures)
             pSegment = gr_make_seg(mpFont, mpFace, 0, mpFeatures->values(), gr_utf16,
-                                        rArgs.mpStr + mnSegCharOffset, numchars, bRtl);
+                                        mpStr + mnSegCharOffset, numchars, bRtl);
         else
             pSegment = gr_make_seg(mpFont, mpFace, 0, NULL, gr_utf16,
-                                        rArgs.mpStr + mnSegCharOffset, numchars, bRtl);
+                                        mpStr + mnSegCharOffset, numchars, bRtl);
 
         //pSegment = new gr::RangeSegment((gr::Font *)&mrFont, mpTextSrc, &maLayout, mnMinCharPos, limit);
         if (pSegment != NULL)

-- 
To view, visit https://gerrit.libreoffice.org/3221
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5bd2fd18bf96c49bbdf2be521a9cf28c311c7a09
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: navin patidar <patidar at kacst.edu.sa>



More information about the LibreOffice mailing list