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 <pati...@kacst.edu.sa> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice