diff options
author | Herbert Duerr [hdu] <herbert.duerr@oracle.com> | 2010-11-19 14:37:26 +0100 |
---|---|---|
committer | Herbert Duerr [hdu] <herbert.duerr@oracle.com> | 2010-11-19 14:37:26 +0100 |
commit | 7a4ec865eafbb8c0a6fb703d843a8f023c5a6a9c (patch) | |
tree | 9a9959949ab2045469f6c8c562f5cccfe8909aaf /vcl | |
parent | d9d5b04b12df37939faacc45524aebad560836bc (diff) |
#i115618# fix bad PDF export regression for simple RTL cases
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/gdi/pdfwriter_impl.cxx | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 580161da8a4e..aa9f642f9fee 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -7398,7 +7398,14 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const String& rText, bool bT // try to handle ligatures and such if( i < nGlyphs-1 ) { - pUnicodesPerGlyph[i] = nChars = pCharPosAry[i+1] - pCharPosAry[i]; + nChars = pCharPosAry[i+1] - pCharPosAry[i]; + // #i115618# fix for simple RTL+CTL cases + // TODO: sanitize for RTL ligatures, more complex CTL, etc. + if( nChars < 0 ) + nChars = -nChars; + else if( nChars == 0 ) + nChars = 1; + pUnicodesPerGlyph[i] = nChars; for( int n = 1; n < nChars; n++ ) aUnicodes.push_back( rText.GetChar( sal::static_int_cast<xub_StrLen>(pCharPosAry[i]+n) ) ); } |