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
- [PATCH] fix fdo#60534 : use DefaultCharMapper::mapChar() to map RTL ... · navin patidar (via Code Review)
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.