diff options
-rw-r--r-- | libre/texlive-bin/PKGBUILD | 9 | ||||
-rw-r--r-- | libre/texlive-bin/texlive-poppler-0.59.patch | 96 |
2 files changed, 57 insertions, 48 deletions
diff --git a/libre/texlive-bin/PKGBUILD b/libre/texlive-bin/PKGBUILD index 1473b8863..12645ec17 100644 --- a/libre/texlive-bin/PKGBUILD +++ b/libre/texlive-bin/PKGBUILD @@ -6,10 +6,10 @@ pkgname=texlive-bin pkgver=2017.44590 -pkgrel=3.parabola1 +pkgrel=7.parabola1 license=('GPL') arch=('i686' 'x86_64' 'armv7h') -makedepends=('cairo' 'pixman' 'graphite' 't1lib' 'gd' 'poppler=0.59.0' +makedepends=('cairo' 'pixman' 'graphite' 't1lib' 'gd' 'poppler=0.60.1' 'libsigsegv' 'zziplib' 'libpng' 'libjpeg' 'freetype2' 'icu=59.1' 'harfbuzz' 'harfbuzz-icu' 'gmp' 'mpfr' 'potrace' 'libpaper' 'perl' 'clisp' 'ffcall') @@ -19,7 +19,7 @@ source=("http://mirrors.kernel.org/archlinux/other/texlive/texlive-bin-source-${ "texlive-poppler-0.59.patch") sha256sums=('4645b4d55fc500ba9be7156a6a330afb44fbf7fda40dfd73fe9cb16d207f2038' 'ee97f3e07e235dee4ad6d0c3e85c2260914c965e94d5ffbf481fa506df5f01ec' - '8ff387b417b4da920d6ffc3f3d89e52796334693cb88b97bf1770931bf2791e5') + '76bc0528da33b1f980f85464c95d00736d9997ba7f8d11475c88f03e099e91b0') prepare() { cd "$srcdir/source" @@ -106,7 +106,7 @@ build() { package() { pkgdesc="TeX Live binaries (Parabola rebranded)" - depends=('cairo' 'pixman' 'graphite' 't1lib' 'gd' 'poppler=0.59.0' + depends=('cairo' 'pixman' 'graphite' 't1lib' 'gd' 'poppler=0.60.1' 'libsigsegv' 'zziplib' 'libpng' 'libjpeg' 'freetype2' 'icu=59.1' 'harfbuzz' 'harfbuzz-icu' 'gmp' 'mpfr' 'potrace' 'libpaper' 'libsynctex') @@ -386,4 +386,3 @@ pn2pdf" rm -f "$pkgdir"/usr/lib/pkgconfig/synctex.pc rm -f "$pkgdir"/usr/share/man/man*/synctex.* } - diff --git a/libre/texlive-bin/texlive-poppler-0.59.patch b/libre/texlive-bin/texlive-poppler-0.59.patch index 82b1d4c97..401315a64 100644 --- a/libre/texlive-bin/texlive-poppler-0.59.patch +++ b/libre/texlive-bin/texlive-poppler-0.59.patch @@ -720,16 +720,39 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd pdf_puts(" "); } pdf_puts("]\n"); -@@ -396,7 +359,7 @@ +@@ -394,10 +357,29 @@ + #define REPLACE_TYPE1C true + ++static bool embeddableFont(Object * fontdesc) ++{ ++ Object fontfile, ffsubtype; ++ ++ if (!fontdesc->isDict()) ++ return false; ++ fontfile = fontdesc->dictLookup("FontFile"); ++ if (fontfile.isStream()) ++ return true; ++ if (REPLACE_TYPE1C) { ++ fontfile = fontdesc->dictLookup("FontFile3"); ++ if (!fontfile.isStream()) ++ return false; ++ ffsubtype = fontfile.streamGetDict()->lookup("Subtype"); ++ return ffsubtype.isName() && !strcmp(ffsubtype.getName(), "Type1C"); ++ } ++ return false; ++} ++ static void copyFont(char *tag, Object * fontRef) { - PdfObject fontdict, subtype, basefont, fontdescRef, fontdesc, charset, +- fontfile, ffsubtype, stemV; + Object fontdict, subtype, basefont, fontdescRef, fontdesc, charset, - fontfile, ffsubtype, stemV; ++ stemV; GfxFont *gfont; fd_entry *fd; -@@ -413,33 +376,49 @@ + fm_entry *fontmap; +@@ -413,33 +395,39 @@ } // Only handle included Type1 (and Type1C) fonts; anything else will be copied. // Type1C fonts are replaced by Type1 fonts, if REPLACE_TYPE1C is true. @@ -747,23 +770,13 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd - && !strcmp(ffsubtype->getName(), "Type1C"))) - && (fontmap = lookup_fontmap(basefont->getName())) != NULL) { + fontdict = fontRef->fetch(xref); ++ fontdesc = Object(objNull); + if (fontdict.isDict()) { + subtype = fontdict.dictLookup("Subtype"); + basefont = fontdict.dictLookup("BaseFont"); + fontdescRef = fontdict.dictLookupNF("FontDescriptor"); + if (fontdescRef.isRef()) { + fontdesc = fontdescRef.fetch(xref); -+ if (fontdesc.isDict()) { -+ fontfile = fontdesc.dictLookup("FontFile"); -+ if (!fontfile.isStream() && REPLACE_TYPE1C) { -+ fontfile = fontdesc.dictLookup("FontFile3"); -+ ffsubtype = fontfile.streamGetDict()->lookup("Subtype"); -+ if (!(ffsubtype.isName() && !strcmp(ffsubtype.getName(), "Type1C"))) { -+ // not a Type1-C font. -+ fontfile = Object(objNull); -+ } -+ } -+ } + } + } + if (!fixedinclusioncopyfont && fontdict.isDict() @@ -772,7 +785,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd + && basefont.isName() + && fontdescRef.isRef() + && fontdesc.isDict() -+ && fontfile.isStream() ++ && embeddableFont(&fontdesc) + && (fontmap = lookup_fontmap(basefont.getName())) != NULL) { // round /StemV value, since the PDF input is a float // (see Font Descriptors in PDF reference), but we only store an @@ -799,7 +812,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd pdf_printf(" %d 0 R ", addFont(fontRef->getRef(), fd, addEncoding(gfont))); } else { -@@ -451,24 +430,24 @@ +@@ -451,24 +439,24 @@ static void copyFontResources(Object * obj) { @@ -829,7 +842,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd } pdf_puts(">>\n"); } -@@ -557,7 +536,7 @@ +@@ -557,7 +545,7 @@ static void copyObject(Object * obj) { @@ -838,7 +851,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd int i, l, c; Ref ref; char *p; -@@ -601,8 +580,8 @@ +@@ -601,8 +589,8 @@ } else if (obj->isArray()) { pdf_puts("["); for (i = 0, l = obj->arrayGetLength(); i < l; ++i) { @@ -849,16 +862,18 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd pdf_puts(" "); copyObject(&obj1); } -@@ -612,7 +591,7 @@ +@@ -612,9 +600,8 @@ copyDict(obj); pdf_puts(">>"); } else if (obj->isStream()) { - initDictFromDict(obj1, obj->streamGetDict()); -+ obj1 = Object(obj->streamGetDict()); pdf_puts("<<\n"); - copyDict(&obj1); +- copyDict(&obj1); ++ copyDict(obj->getStream()->getDictObject()); pdf_puts(">>\n"); -@@ -638,9 +617,8 @@ + pdf_puts("stream\n"); + copyStream(obj->getStream()->getUndecodedStream()); +@@ -638,9 +625,8 @@ InObj *r; for (r = inObjList; r != 0; r = r->next) { if (!r->written) { @@ -869,7 +884,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd if (r->type == objFont) { assert(!obj1.isStream()); pdfbeginobj(r->num, 2); // \pdfobjcompresslevel = 2 is for this -@@ -656,7 +634,6 @@ +@@ -656,7 +642,6 @@ pdf_puts("\n"); pdfendobj(); } @@ -877,7 +892,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd } } } -@@ -839,8 +816,8 @@ +@@ -839,8 +824,8 @@ Page *page; Ref *pageRef; Dict *pageDict; @@ -888,7 +903,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd bool writeSepGroup = false; Object info; char *key; -@@ -867,8 +844,8 @@ +@@ -867,8 +852,8 @@ encodingList = 0; page = pdf_doc->doc->getCatalog()->getPage(epdf_selected_page); pageRef = pdf_doc->doc->getCatalog()->getPageRef(epdf_selected_page); @@ -899,7 +914,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd rotate = page->getRotate(); PDFRectangle *pagebox; // write the Page header -@@ -886,7 +863,7 @@ +@@ -886,7 +871,7 @@ pdf_printf("/%s.PageNumber %i\n", pdfkeyprefix, (int) epdf_selected_page); } if ((suppress_ptex_info & MASK_SUPPRESS_PTEX_INFODICT) == 0) { @@ -908,7 +923,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd if (info.isRef()) { // the info dict must be indirect (PDF Ref p. 61) pdf_printf("/%s.InfoDict ", pdfkeyprefix); -@@ -942,14 +919,14 @@ +@@ -942,14 +927,14 @@ pdf_puts(stripzeros(s)); // Metadata validity check (as a stream it must be indirect) @@ -927,7 +942,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd pdf_newline(); pdf_printf("/%s ", pageDictKeys[i]); copyObject(&dictObj); // preserves indirection -@@ -957,8 +934,8 @@ +@@ -957,8 +942,8 @@ } // handle page group @@ -938,7 +953,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd if (pdfpagegroupval == 0) { // another pdf with page group was included earlier on the // same page; copy the Group entry as is. See manual for -@@ -972,11 +949,11 @@ +@@ -972,11 +957,11 @@ copyObject(&dictObj); } else { // write Group dict as a separate object, since the Page dict also refers to it @@ -953,29 +968,24 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd pdf_printf("/Group %ld 0 R\n", (long)pdfpagegroupval); } } -@@ -989,15 +966,15 @@ +@@ -989,14 +974,14 @@ pdftex_warn ("PDF inclusion: /Resources missing. 'This practice is not recommended' (PDF Ref)"); } else { - initDictFromDict(obj1, page->getResourceDict()); -- if (!obj1->isDict()) -+ obj1 = Object(page->getResourceDict()); -+ if (!obj1.isDict()) ++ Object *obj1 = page->getResourceDictObject(); + if (!obj1->isDict()) pdftex_fail("PDF inclusion: invalid resources dict type <%s>", -- obj1->getTypeName()); -+ obj1.getTypeName()); + obj1->getTypeName()); pdf_newline(); pdf_puts("/Resources <<\n"); -- for (i = 0, l = obj1->dictGetLength(); i < l; ++i) { + for (i = 0, l = obj1->dictGetLength(); i < l; ++i) { - obj1->dictGetVal(i, &obj2); -- key = obj1->dictGetKey(i); -+ for (i = 0, l = obj1.dictGetLength(); i < l; ++i) { -+ obj2 = obj1.dictGetVal(i); -+ key = obj1.dictGetKey(i); ++ obj2 = obj1->dictGetVal(i); + key = obj1->dictGetKey(i); if (strcmp("Font", key) == 0) copyFontResources(&obj2); - else if (strcmp("ProcSet", key) == 0) -@@ -1009,8 +986,8 @@ +@@ -1009,8 +994,8 @@ } // write the page contents @@ -986,7 +996,7 @@ diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexd // Variant A: get stream and recompress under control // of \pdfcompresslevel -@@ -1021,36 +998,35 @@ +@@ -1021,36 +1006,35 @@ // Variant B: copy stream without recompressing // |