Fix LuaTeX compatibility with Poppler 0.72. Upstream LuaTeX have moved from Poppler to "pplib" and thus upstream fixes are unavailable. This is based on Arch Linux patches, with minor changes for Poppler 0.72: https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/texlive-bin&id=f1b424435c8fa31d9296c7a6dc17f939a8332780 diff --git a/texk/web2c/luatexdir/image/pdftoepdf.w b/texk/web2c/luatexdir/image/pdftoepdf.w --- a/texk/web2c/luatexdir/image/pdftoepdf.w +++ b/texk/web2c/luatexdir/image/pdftoepdf.w @@ -35,7 +35,7 @@ extern void md5(Guchar *msg, int msgLen, Guchar *digest); -static GBool isInit = gFalse; +static bool isInit = false; /* Maintain AVL tree of all PDF files for embedding */ @@ -363,10 +363,10 @@ void copyReal(PDF pdf, double d) static void copyString(PDF pdf, GooString * string) { - char *p; + const char *p; unsigned char c; size_t i, l; - p = string->getCString(); + p = string->c_str(); l = (size_t) string->getLength(); if (pdf->cave) pdf_out(pdf, ' '); @@ -393,7 +393,7 @@ static void copyString(PDF pdf, GooString * string) pdf->cave = true; } -static void copyName(PDF pdf, char *s) +static void copyName(PDF pdf, const char *s) { pdf_out(pdf, '/'); for (; *s != 0; s++) { @@ -468,14 +468,14 @@ static void copyObject(PDF pdf, PdfDocument * pdf_doc, Object * obj) break; /* case objNum: - GBool isNum() { return type == objInt || type == objReal; } + bool isNum() { return type == objInt || type == objReal; } break; */ case objString: copyString(pdf, (GooString *)obj->getString()); break; case objName: - copyName(pdf, (char *)obj->getName()); + copyName(pdf, obj->getName()); break; case objNull: pdf_add_null(pdf); @@ -531,22 +531,22 @@ static PDFRectangle *get_pagebox(Page * page, int pagebox_spec) { switch (pagebox_spec) { case PDF_BOX_SPEC_MEDIA: - return page->getMediaBox(); + return (PDFRectangle *) page->getMediaBox(); break; case PDF_BOX_SPEC_CROP: - return page->getCropBox(); + return (PDFRectangle *) page->getCropBox(); break; case PDF_BOX_SPEC_BLEED: - return page->getBleedBox(); + return (PDFRectangle *) page->getBleedBox(); break; case PDF_BOX_SPEC_TRIM: - return page->getTrimBox(); + return (PDFRectangle *) page->getTrimBox(); break; case PDF_BOX_SPEC_ART: - return page->getArtBox(); + return (PDFRectangle *) page->getArtBox(); break; default: - return page->getMediaBox(); + return (PDFRectangle *) page->getMediaBox(); break; } } @@ -587,11 +587,11 @@ void read_pdf_info(image_dict * idict) PDFRectangle *pagebox; int pdf_major_version_found, pdf_minor_version_found; float xsize, ysize, xorig, yorig; - if (isInit == gFalse) { + if (isInit == false) { if (!(globalParams)) globalParams = new GlobalParams(); - globalParams->setErrQuiet(gFalse); - isInit = gTrue; + globalParams->setErrQuiet(false); + isInit = true; } if (img_type(idict) == IMG_TYPE_PDF) pdf_doc = refPdfDocument(img_filepath(idict), FE_FAIL); @@ -966,7 +966,7 @@ void epdf_free() if (PdfDocumentTree != NULL) avl_destroy(PdfDocumentTree, destroyPdfDocument); PdfDocumentTree = NULL; - if (isInit == gTrue) + if (isInit == true) delete globalParams; - isInit = gFalse; + isInit = false; } diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lepdflib.cc --- a/texk/web2c/luatexdir/lua/lepdflib.cc +++ b/texk/web2c/luatexdir/lua/lepdflib.cc @@ -240,7 +240,7 @@ static int l_new_Attribute(lua_State * L) if (uobj->pd != NULL && uobj->pd->pc != uobj->pc) pdfdoc_changed_error(L); uout = new_Attribute_userdata(L); - uout->d = new Attribute(n, nlen, (Object *)uobj->d); + uout->d = new Attribute((GooString)n, (Object *)uobj->d); uout->atype = ALLOC_LEPDF; uout->pc = uobj->pc; uout->pd = uobj->pd; @@ -439,7 +439,7 @@ static int l_new_Object(lua_State * L) break; case 1: if (lua_isboolean (L,1)) { - uout->d = new Object(lua_toboolean(L, 1)? gTrue : gFalse); + uout->d = new Object(lua_toboolean(L, 1)? true : false); uout->atype = ALLOC_LEPDF; uout->pc = 0; uout->pd = NULL; @@ -596,7 +596,7 @@ static int m_##in##_##function(lua_State * L) \ uin = (udstruct *) luaL_checkudata(L, 1, M_##in); \ if (uin->pd != NULL && uin->pd->pc != uin->pc) \ pdfdoc_changed_error(L); \ - o = ((in *) uin->d)->function(); \ + o = (out *) ((in *) uin->d)->function(); \ if (o != NULL) { \ uout = new_##out##_userdata(L); \ uout->d = o; \ @@ -676,7 +676,7 @@ static int m_##in##_##function(lua_State * L) \ pdfdoc_changed_error(L); \ gs = (GooString *)((in *) uin->d)->function(); \ if (gs != NULL) \ - lua_pushlstring(L, gs->getCString(), gs->getLength()); \ + lua_pushlstring(L, gs->c_str(), gs->getLength()); \ else \ lua_pushnil(L); \ return 1; \ @@ -911,7 +911,7 @@ static int m_Array_getString(lua_State * L) if (i > 0 && i <= len) { gs = new GooString(); if (((Array *) uin->d)->getString(i - 1, gs)) - lua_pushlstring(L, gs->getCString(), gs->getLength()); + lua_pushlstring(L, gs->c_str(), gs->getLength()); else lua_pushnil(L); delete gs; @@ -1063,7 +1063,7 @@ static int m_Catalog_getJS(lua_State * L) if (i > 0 && i <= len) { gs = ((Catalog *) uin->d)->getJS(i - 1); if (gs != NULL) - lua_pushlstring(L, gs->getCString(), gs->getLength()); + lua_pushlstring(L, gs->c_str(), gs->getLength()); else lua_pushnil(L); delete gs; @@ -1125,12 +1125,12 @@ m_poppler_get_INT(Dict, getLength); static int m_Dict_add(lua_State * L) { - char *s; + const char *s; udstruct *uin, *uobj; uin = (udstruct *) luaL_checkudata(L, 1, M_Dict); if (uin->pd != NULL && uin->pd->pc != uin->pc) pdfdoc_changed_error(L); - s = copyString(luaL_checkstring(L, 2)); + s = luaL_checkstring(L, 2); uobj = (udstruct *) luaL_checkudata(L, 3, M_Object); ((Dict *) uin->d)->add(s, std::move(*((Object *) uobj->d))); return 0; @@ -1378,7 +1378,7 @@ static int m_GooString__tostring(lua_State * L) uin = (udstruct *) luaL_checkudata(L, 1, M_GooString); if (uin->pd != NULL && uin->pd->pc != uin->pc) pdfdoc_changed_error(L); - lua_pushlstring(L, ((GooString *) uin->d)->getCString(), + lua_pushlstring(L, ((GooString *) uin->d)->c_str(), ((GooString *) uin->d)->getLength()); return 1; } @@ -1527,9 +1527,9 @@ static int m_Object_initBool(lua_State * L) pdfdoc_changed_error(L); luaL_checktype(L, 2, LUA_TBOOLEAN); if (lua_toboolean(L, 2) != 0) - *((Object *) uin->d) = Object(gTrue); + *((Object *) uin->d) = Object(true); else - *((Object *) uin->d) = Object(gFalse); + *((Object *) uin->d) = Object(false); return 0; } @@ -1814,7 +1814,7 @@ static int m_Object_getString(lua_State * L) pdfdoc_changed_error(L); if (((Object *) uin->d)->isString()) { gs = (GooString *)((Object *) uin->d)->getString(); - lua_pushlstring(L, gs->getCString(), gs->getLength()); + lua_pushlstring(L, gs->c_str(), gs->getLength()); } else lua_pushnil(L); return 1; @@ -2051,7 +2051,7 @@ static int m_Object_dictAdd(lua_State * L) pdfdoc_changed_error(L); if (!((Object *) uin->d)->isDict()) luaL_error(L, "Object is not a Dict"); - ((Object *) uin->d)->dictAdd(copyString(s), std::move(*((Object *) uobj->d))); + ((Object *) uin->d)->dictAdd(s, std::move(*((Object *) uobj->d))); return 0; } @@ -2470,9 +2470,9 @@ static int m_PDFDoc_getFileName(lua_State * L) uin = (udstruct *) luaL_checkudata(L, 1, M_PDFDoc); if (uin->pd != NULL && uin->pd->pc != uin->pc) pdfdoc_changed_error(L); - gs = ((PdfDocument *) uin->d)->doc->getFileName(); + gs = (GooString *) ((PdfDocument *) uin->d)->doc->getFileName(); if (gs != NULL) - lua_pushlstring(L, gs->getCString(), gs->getLength()); + lua_pushlstring(L, gs->c_str(), gs->getLength()); else lua_pushnil(L); return 1; @@ -2559,9 +2559,9 @@ static int m_PDFDoc_readMetadata(lua_State * L) if (uin->pd != NULL && uin->pd->pc != uin->pc) pdfdoc_changed_error(L); if (((PdfDocument *) uin->d)->doc->getCatalog()->isOk()) { - gs = ((PdfDocument *) uin->d)->doc->readMetadata(); + gs = (GooString *) ((PdfDocument *) uin->d)->doc->readMetadata(); if (gs != NULL) - lua_pushlstring(L, gs->getCString(), gs->getLength()); + lua_pushlstring(L, gs->c_str(), gs->getLength()); else lua_pushnil(L); } else @@ -2577,7 +2577,7 @@ static int m_PDFDoc_getStructTreeRoot(lua_State * L) if (uin->pd != NULL && uin->pd->pc != uin->pc) pdfdoc_changed_error(L); if (((PdfDocument *) uin->d)->doc->getCatalog()->isOk()) { - obj = ((PdfDocument *) uin->d)->doc->getStructTreeRoot(); + obj = (StructTreeRoot *) ((PdfDocument *) uin->d)->doc->getStructTreeRoot(); uout = new_StructTreeRoot_userdata(L); uout->d = obj; uout->pc = uin->pc; @@ -3038,12 +3038,12 @@ m_poppler_get_BOOL(Attribute, isHidden); static int m_Attribute_setHidden(lua_State * L) { - GBool i; + bool i; udstruct *uin; uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute); if (uin->pd != NULL && uin->pd->pc != uin->pc) pdfdoc_changed_error(L); - i = (GBool) lua_toboolean(L, 2); + i = (bool) lua_toboolean(L, 2); ((Attribute *) uin->d)->setHidden(i); return 0; } @@ -3180,7 +3180,7 @@ static int m_StructElement_getParentRef(lua_State * L) // Ref is false if the C++ functione return false static int m_StructElement_getPageRef(lua_State * L) { - GBool b; + bool b; Ref *r; udstruct *uin, *uout; uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement); @@ -3226,16 +3226,16 @@ static int m_StructElement_setRevision(lua_State * L) static int m_StructElement_getText(lua_State * L) { - GBool i; + bool i; GooString *gs; udstruct *uin; uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement); if (uin->pd != NULL && uin->pd->pc != uin->pc) pdfdoc_changed_error(L); - i = (GBool) lua_toboolean(L, 2); + i = (bool) lua_toboolean(L, 2); gs = ((StructElement *) uin->d)->getText(i); if (gs != NULL) - lua_pushlstring(L, gs->getCString(), gs->getLength()); + lua_pushlstring(L, gs->c_str(), gs->getLength()); else lua_pushnil(L); return 1; @@ -3321,7 +3321,7 @@ static int m_StructElement_findAttribute(lua_State * L) { Attribute::Type t; Attribute::Owner o; - GBool g; + bool g; udstruct *uin, *uout; const Attribute *a; uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement); @@ -3329,7 +3329,7 @@ static int m_StructElement_findAttribute(lua_State * L) pdfdoc_changed_error(L); t = (Attribute::Type) luaL_checkint(L,1); o = (Attribute::Owner) luaL_checkint(L,2); - g = (GBool) lua_toboolean(L, 3); + g = (bool) lua_toboolean(L, 3); a = ((StructElement *) uin->d)->findAttribute(t,g,o); if (a!=NULL){