Author: jghali
Date: Fri Oct  5 16:54:54 2018
New Revision: 22717

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22717
Log:
#15449: Arabic number glyphs of Noto Serif CJK are not exported into PDF 
correctly depending on specified languages

Modified:
    trunk/Scribus/scribus/pdflib_core.cpp

Modified: trunk/Scribus/scribus/pdflib_core.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22717&path=/trunk/Scribus/scribus/pdflib_core.cpp
==============================================================================
--- trunk/Scribus/scribus/pdflib_core.cpp       (original)
+++ trunk/Scribus/scribus/pdflib_core.cpp       Fri Oct  5 16:54:54 2018
@@ -1517,28 +1517,38 @@
                glyphWidths.append(qRound(np1.x()));
 
                PdfId charProcObject = writer.newObject();
-               const ScFace::GlyphEncoding& glEncoding = gl[ig.key()];
-               charProcs.append(Pdf::toName(glEncoding.glyphName)+" 
"+Pdf::toPdf(charProcObject)+" 0 R\n");
-               encoding += Pdf::toName(glEncoding.glyphName)+" ";
-               glyphMapping.insert(ig.key(), glyphCount + SubFonts * 256);
                writer.startObj(charProcObject);
                if (Options.Compress)
                        fon = CompressArray(fon);
-               PutDoc("<< /Length "+Pdf::toPdf(fon.length()+1));
+               PutDoc("<< /Length " + Pdf::toPdf(fon.length() + 1));
                if (Options.Compress)
                        PutDoc("\n/Filter /FlateDecode");
-               PutDoc("\n>>\nstream\n"+EncStream(fon, 
charProcObject)+"\nendstream");
+               PutDoc("\n>>\nstream\n" + EncStream(fon, charProcObject) + 
"\nendstream");
                writer.endObj(charProcObject);
 
-               QString tmp;
-               tmp.sprintf("%02X", glyphCount);
-               toUnicodeMap += "<" + Pdf::toAscii(tmp) + "> <" + 
Pdf::toAscii(glEncoding.toUnicode) + ">\n";
+               // #15449 : in some cases we cannot retrieve glyph names for 
all glyphs we need
+               // using ScFace's glyphNames(), so generate custom glyph names 
using glyph index.
+               // With Type 3 fonts we have more flexibility than with other 
fonts.
+               QString glGlyphName, glToUnicode;
+               auto  glyphIt = gl.constFind(ig.key());
+               if ((glyphIt != gl.constEnd()) && (glyphIt->charcode > 0))
+                       glToUnicode = QString::asprintf("%04X", 
glyphIt->charcode);
+               else
+                       glToUnicode = QString("0000");
+               glGlyphName = "gly" + QString::asprintf("%04X", ig.key());
+
+               charProcs.append(Pdf::toName(glGlyphName) + " " + 
Pdf::toPdf(charProcObject) + " 0 R\n");
+               encoding += Pdf::toName(glGlyphName) + " ";
+               glyphMapping.insert(ig.key(), glyphCount + SubFonts * 256);
+
+               QString tmp = QString::asprintf("%02X", glyphCount);
+               toUnicodeMap += "<" + Pdf::toAscii(tmp) + "> <" + 
Pdf::toAscii(glToUnicode) + ">\n";
                toUnicodeMapCounter++;
                if (toUnicodeMapCounter == 100)
                {
                        toUnicodeMaps.append(toUnicodeMap);
                        toUnicodeMapsCount.append(toUnicodeMapCounter);
-                       toUnicodeMap = "";
+                       toUnicodeMap.clear();
                        toUnicodeMapCounter = 0;
                }
 
@@ -1915,8 +1925,7 @@
        result.encoding = Encode_224;
        
        int nglyphs = 0;
-       ScFace::FaceEncoding::ConstIterator gli;
-       for (gli = gl.cbegin(); gli != gl.cend(); ++gli)
+       for (auto gli = gl.cbegin(); gli != gl.cend(); ++gli)
        {
                if (gli.key() > static_cast<uint>(nglyphs))
                        nglyphs = gli.key();
@@ -1946,16 +1955,18 @@
                }
                PutDoc("]");
                writer.endObj(fontWidths2);
-               PdfId fontEncoding2 = writer.newObject();
-               writer.startObj(fontEncoding2);
+
                QStringList toUnicodeMaps;
                QList<int> toUnicodeMapsCount;
                QString toUnicodeMap = "";
                int toUnicodeMapCounter = 0;
+               int crc = 0;
+               bool startOfSeq = true;
+
+               PdfId fontEncoding2 = writer.newObject();
+               writer.startObj(fontEncoding2);
                PutDoc("<< /Type /Encoding\n");
                PutDoc("/Differences [ \n");
-               int crc = 0;
-               bool startOfSeq = true;
                for (int ww2 = 32; ww2 < 256; ++ww2)
                {
                        uint glyph = 224 * Fc + ww2 - 32;
@@ -1979,7 +1990,7 @@
                                {
                                        toUnicodeMaps.append(toUnicodeMap);
                                        
toUnicodeMapsCount.append(toUnicodeMapCounter);
-                                       toUnicodeMap = "";
+                                       toUnicodeMap.clear();
                                        toUnicodeMapCounter = 0;
                                }
                                crc++;
@@ -2631,7 +2642,8 @@
        ScLayer ll;
        ll.isPrintable = false;
        ll.ID = 0;
-       Content = "";
+
+       Content.clear();
 
        double bLeft, bRight, bBottom, bTop;
        getBleeds(pag, bLeft, bRight, bBottom, bTop);
@@ -2648,7 +2660,7 @@
                                PutPage("/OC /" + OCGEntries[ll.Name].Name + " 
BDC\n");
                        for (int a = 0; a < PItems.count(); ++a)
                        {
-                               Content = "";
+                               Content.clear();
                                ite =PItems.at(a);
                                if (ite->LayerID != ll.ID)
                                        continue;
@@ -3316,7 +3328,7 @@
 void PDFLibCore::PDF_Begin_Page(const ScPage* pag, const QImage& thumb)
 {
        ActPageP = pag;
-       Content = "";
+       Content.clear();
        pageData.AObjects.clear();
        pageData.radioButtonList.clear();
        if (Options.Thumbnails)
@@ -5377,8 +5389,7 @@
 QByteArray PDFLibCore::paintBorder(const TableBorder& border, const QPointF& 
start, const QPointF& end, const QPointF& startOffsetFactors, const QPointF& 
endOffsetFactors)
 {
        QByteArray tmp;
-       tmp = "";
-       tmp += "q\n";
+       tmp = "q\n";
        QPointF lineStart, lineEnd;
        QVector<double> DashValues;
        for (const TableBorderLine& line : border.borderLines())
@@ -5417,7 +5428,7 @@
 QByteArray PDFLibCore::handleBrushPattern(PageItem* ite, QPainterPath &path, 
const ScPage* pag, uint PNr)
 {
        QByteArray tmp;
-       tmp = "";
+
        ScPattern pat = doc.docPatterns[ite->strokePattern()];
        double pLen = path.length() - ((pat.width / 2.0) * 
(ite->patternStrokeScaleX / 100.0));
        double adv = pat.width * ite->patternStrokeScaleX / 100.0 * 
ite->patternStrokeSpace;


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to