Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


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@kacst.edu.sa>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.