You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-tex/luatex/files/poppler022.patch

389 lines
12 KiB

Patch updating lepdflib.cc to upstream revision 4415, which basically removes
part of the exported interface and thereby circumvents the changes in
poppler-0.20 -> 0.22. Experimental, rebased on our existing Gentoo patches
poppler-0.18.patch and poppler-0.20.patch. Here to solve bug 449538.
diff -ruN luatex-beta-0.70.1.gentoo/source/texk/web2c/luatexdir/lua/lepdflib.cc
luatex-beta-0.70.1/source/texk/web2c/luatexdir/lua/lepdflib.cc
--- luatex-beta-0.70.1.gentoo/source/texk/web2c/luatexdir/lua/lepdflib.cc 2013-03-10 13:31:22.000000000 +0100
+++ luatex-beta-0.70.1/source/texk/web2c/luatexdir/lua/lepdflib.cc 2013-03-10 13:47:24.000000000 +0100
@@ -1,7 +1,7 @@
/* lepdflib.cc
- Copyright 2009-2011 Taco Hoekwater <taco@luatex.org>
- Copyright 2009-2011 Hartmut Henkel <hartmut@luatex.org>
+ Copyright 2009-2012 Taco Hoekwater <taco@luatex.org>
+ Copyright 2009-2012 Hartmut Henkel <hartmut@luatex.org>
This file is part of LuaTeX.
@@ -49,15 +49,13 @@
//**********************************************************************
#define M_Annot "Annot"
-#define M_AnnotBorder "AnnotBorder"
-#define M_AnnotBorderStyle "AnnotBorderStyle"
#define M_Annots "Annots"
#define M_Array "Array"
#define M_Catalog "Catalog"
-#define M_EmbFile "EmbFile"
#define M_Dict "Dict"
#define M_GooString "GooString"
#define M_LinkDest "LinkDest"
+#define M_Link "Link"
#define M_Links "Links"
#define M_Object "Object"
#define M_Page "Page"
@@ -65,8 +63,8 @@
#define M_PDFRectangle "PDFRectangle"
#define M_Ref "Ref"
#define M_Stream "Stream"
-#define M_XRef "XRef"
#define M_XRefEntry "XRefEntry"
+#define M_XRef "XRef"
//**********************************************************************
@@ -84,13 +82,9 @@
new_poppler_userdata(PDFDoc);
new_poppler_userdata(Annot);
-new_poppler_userdata(AnnotBorder);
-//new_poppler_userdata(AnnotBorderStyle);
-new_poppler_userdata(Annots);
new_poppler_userdata(Array);
new_poppler_userdata(Catalog);
new_poppler_userdata(Dict);
-//new_poppler_userdata(GooString);
new_poppler_userdata(LinkDest);
new_poppler_userdata(Links);
new_poppler_userdata(Object);
@@ -99,7 +93,6 @@
new_poppler_userdata(Ref);
new_poppler_userdata(Stream);
new_poppler_userdata(XRef);
-//new_poppler_userdata(XRefEntry);
//**********************************************************************
@@ -134,53 +127,6 @@
return 1; // doc path
}
-static int l_new_Annot(lua_State * L)
-{
- udstruct *uxref, *udict, *ucatalog, *uref, *uout;
- uxref = (udstruct *) luaL_checkudata(L, 1, M_XRef);
- udict = (udstruct *) luaL_checkudata(L, 2, M_Dict);
- ucatalog = (udstruct *) luaL_checkudata(L, 3, M_Catalog);
- uref = (udstruct *) luaL_checkudata(L, 4, M_Ref);
- if (uxref->pd != ucatalog->pd || uxref->pd != udict->pd
- || uxref->pd != uref->pd)
- pdfdoc_differs_error(L);
- if ((uxref->pd != NULL && uxref->pd->pc != uxref->pc) ||
- (ucatalog->pd != NULL && ucatalog->pd->pc != ucatalog->pc) ||
- (udict->pd != NULL && udict->pd->pc != udict->pc) ||
- (uref->pd != NULL && uref->pd->pc != uref->pc))
- pdfdoc_changed_error(L);
- uout = new_Annot_userdata(L);
- uout->d =
- new Annot(udict->pd->doc, (Dict *) udict->d,
- (Object *) uref->d);
- uout->atype = ALLOC_LEPDF;
- uout->pc = uxref->pc;
- uout->pd = uxref->pd;
- return 1;
-}
-
-static int l_new_Annots(lua_State * L)
-{
- udstruct *uxref, *ucatalog, *uannotsobj, *uout;
- uxref = (udstruct *) luaL_checkudata(L, 1, M_XRef);
- ucatalog = (udstruct *) luaL_checkudata(L, 2, M_Catalog);
- uannotsobj = (udstruct *) luaL_checkudata(L, 3, M_Object);
- if (uxref->pd != ucatalog->pd || uxref->pd != uannotsobj->pd)
- pdfdoc_differs_error(L);
- if ((uxref->pd != NULL && uxref->pd->pc != uxref->pc)
- || (ucatalog->pd != NULL && ucatalog->pd->pc != ucatalog->pc)
- || (uannotsobj->pd != NULL && uannotsobj->pd->pc != uannotsobj->pc))
- pdfdoc_changed_error(L);
- uout = new_Annots_userdata(L);
- uout->d =
- new Annots(uannotsobj->pd->doc,
- (Object *) uannotsobj->d);
- uout->atype = ALLOC_LEPDF;
- uout->pc = uxref->pc;
- uout->pd = uxref->pd;
- return 1;
-}
-
static int l_new_Array(lua_State * L)
{
udstruct *uxref, *uout;
@@ -235,8 +181,6 @@
static const struct luaL_Reg epdflib[] = {
{"open", l_open_PDFDoc},
- {"Annot", l_new_Annot},
- {"Annots", l_new_Annots},
{"Array", l_new_Array},
{"Dict", l_new_Dict},
{"Object", l_new_Object},
@@ -359,12 +303,26 @@
return 1; \
}
+#define m_poppler_check_string(in, function) \
+static int m_##in##_##function(lua_State * L) \
+{ \
+ const char *s; \
+ udstruct *uin; \
+ uin = (udstruct *) luaL_checkudata(L, 1, M_##in); \
+ if (uin->pd != NULL && uin->pd->pc != uin->pc) \
+ pdfdoc_changed_error(L); \
+ s = luaL_checkstring(L, 2); \
+ if (((in *) uin->d)->function((char *) s)) \
+ lua_pushboolean(L, 1); \
+ else \
+ lua_pushboolean(L, 0); \
+ return 1; \
+}
+
//**********************************************************************
// Annot
m_poppler_get_BOOL(Annot, isOk);
-m_poppler_get_OBJECT(Annot, getAppearanceResDict);
-m_poppler_get_poppler(Annot, AnnotBorder, getBorder);
static int m_Annot_match(lua_State * L)
{
@@ -398,8 +356,6 @@
static const struct luaL_Reg Annot_m[] = {
{"isOk", m_Annot_isOk},
- {"getAppearanceResDict", m_Annot_getAppearanceResDict},
- {"getBorder", m_Annot_getBorder},
{"match", m_Annot_match},
{"__tostring", m_Annot__tostring},
{"__gc", m_Annot__gc},
@@ -654,6 +610,7 @@
m_poppler_get_poppler(Catalog, Object, getDests);
m_poppler_get_INT(Catalog, numEmbeddedFiles);
+
m_poppler_get_INT(Catalog, numJS);
static int m_Catalog_getJS(lua_State * L)
@@ -770,20 +727,7 @@
return 0;
}
-static int m_Dict_is(lua_State * L)
-{
- const char *s;
- udstruct *uin;
- uin = (udstruct *) luaL_checkudata(L, 1, M_Dict);
- if (uin->pd != NULL && uin->pd->pc != uin->pc)
- pdfdoc_changed_error(L);
- s = luaL_checkstring(L, 2);
- if (((Dict *) uin->d)->is((char *) s))
- lua_pushboolean(L, 1);
- else
- lua_pushboolean(L, 0);
- return 1;
-}
+m_poppler_check_string(Dict, is);
static int m_Dict_lookup(lua_State * L)
{
@@ -894,6 +838,8 @@
return 1;
}
+m_poppler_check_string(Dict, hasKey);
+
m_poppler__tostring(Dict);
static const struct luaL_Reg Dict_m[] = {
@@ -910,6 +856,7 @@
{"getKey", m_Dict_getKey},
{"getVal", m_Dict_getVal},
{"getValNF", m_Dict_getValNF},
+ {"hasKey", m_Dict_hasKey},
{"__tostring", m_Dict__tostring},
{NULL, NULL} // sentinel
};
@@ -1017,9 +964,13 @@
//**********************************************************************
// Links
+m_poppler_get_INT(Links, getNumLinks);
+
m_poppler__tostring(Links);
static const struct luaL_Reg Links_m[] = {
+ {"getNumLinks", m_Links_getNumLinks},
+ //{"getLink", m_Links_getLink},
{"__tostring", m_Links__tostring},
{NULL, NULL} // sentinel
};
@@ -1925,28 +1876,6 @@
m_poppler_get_poppler(Page, Dict, getResourceDict);
m_poppler_get_OBJECT(Page, getAnnots);
-static int m_Page_getLinks(lua_State * L)
-{
- Links *links;
- udstruct *uin, *ucat, *uout;
- uin = (udstruct *) luaL_checkudata(L, 1, M_Page);
- ucat = (udstruct *) luaL_checkudata(L, 2, M_Catalog);
- if (uin->pd != NULL && ucat->pd != NULL && uin->pd != ucat->pd)
- pdfdoc_differs_error(L);
- if ((uin->pd != NULL && uin->pd->pc != uin->pc)
- || (ucat->pd != NULL && ucat->pd->pc != ucat->pd->pc))
- pdfdoc_changed_error(L);
- links = ((Page *) uin->d)->getLinks();
- if (links != NULL) {
- uout = new_Links_userdata(L);
- uout->d = links;
- uout->pc = uin->pc;
- uout->pd = uin->pd;
- } else
- lua_pushnil(L);
- return 1;
-}
-
m_poppler_get_OBJECT(Page, getContents);
m_poppler__tostring(Page);
@@ -1973,7 +1902,6 @@
{"getSeparationInfo", m_Page_getSeparationInfo},
{"getResourceDict", m_Page_getResourceDict},
{"getAnnots", m_Page_getAnnots},
- {"getLinks", m_Page_getLinks},
{"getContents", m_Page_getContents},
{"__tostring", m_Page__tostring},
{NULL, NULL} // sentinel
@@ -2158,19 +2086,23 @@
static int m_PDFDoc_getLinks(lua_State * L)
{
- int i;
+ int i, pages;
Links *links;
udstruct *uin, *uout;
uin = (udstruct *) luaL_checkudata(L, 1, M_PDFDoc);
if (uin->pd != NULL && uin->pd->pc != uin->pc)
pdfdoc_changed_error(L);
i = luaL_checkint(L, 2);
- links = ((PdfDocument *) uin->d)->doc->getLinks(i);
- if (links != NULL) {
- uout = new_Links_userdata(L);
- uout->d = links;
- uout->pc = uin->pc;
- uout->pd = uin->pd;
+ pages = ((PdfDocument *) uin->d)->doc->getNumPages();
+ if (i > 0 && i <= pages) {
+ links = ((PdfDocument *) uin->d)->doc->getLinks(i);
+ if (links != NULL) {
+ uout = new_Links_userdata(L);
+ uout->d = links;
+ uout->pc = uin->pc;
+ uout->pd = uin->pd;
+ } else
+ lua_pushnil(L);
} else
lua_pushnil(L);
return 1;
@@ -2249,6 +2181,8 @@
m_PDFDoc_INT(getPDFMajorVersion);
m_PDFDoc_INT(getPDFMinorVersion);
+m_poppler__tostring(PDFDoc);
+
static int m_PDFDoc__gc(lua_State * L)
{
udstruct *uin;
@@ -2292,6 +2226,7 @@
{"getDocInfoNF", m_PDFDoc_getDocInfoNF},
{"getPDFMajorVersion", m_PDFDoc_getPDFMajorVersion},
{"getPDFMinorVersion", m_PDFDoc_getPDFMinorVersion},
+ {"__tostring", m_PDFDoc__tostring},
{"__gc", m_PDFDoc__gc}, // finalizer
{NULL, NULL} // sentinel
};
@@ -2437,11 +2372,6 @@
"Flate", "JBIG2", "JPX", "Weird", NULL
};
-#if 0
-static const char *StreamColorSpaceModeNames[] =
- { "CSNone", "CSDeviceGray", "CSDeviceRGB", "CSDeviceCMYK", NULL };
-#endif
-
m_poppler_get_INT(Stream, getKind);
static int m_Stream_getKindName(lua_State * L)
@@ -2527,11 +2457,26 @@
m_poppler_get_OBJECT(XRef, getDocInfo);
m_poppler_get_OBJECT(XRef, getDocInfoNF);
m_poppler_get_INT(XRef, getNumObjects);
-// getLastXRefPos
m_poppler_get_INT(XRef, getRootNum);
m_poppler_get_INT(XRef, getRootGen);
// getStreamEnd
-// getEntry
+
+static int m_XRef_getNumEntry(lua_State * L)
+{
+ int i, offset;
+ udstruct *uin;
+ uin = (udstruct *) luaL_checkudata(L, 1, M_XRef);
+ if (uin->pd != NULL && uin->pd->pc != uin->pc)
+ pdfdoc_changed_error(L);
+ offset = luaL_checkint(L, 2);
+ i = ((XRef *) uin->d)->getNumEntry(offset);
+ if (i >= 0)
+ lua_pushinteger(L, i);
+ else
+ lua_pushnil(L);
+ return 1;
+}
+
m_poppler_get_poppler(XRef, Object, getTrailerDict);
m_poppler__tostring(XRef);
@@ -2553,10 +2498,10 @@
{"getDocInfo", m_XRef_getDocInfo},
{"getDocInfoNF", m_XRef_getDocInfoNF},
{"getNumObjects", m_XRef_getNumObjects},
- //
{"getRootNum", m_XRef_getRootNum},
{"getRootGen", m_XRef_getRootGen},
- //
+ // {"getStreamEnd", m_XRef_getStreamEnd},
+ {"getNumEntry", m_XRef_getNumEntry},
{"getTrailerDict", m_XRef_getTrailerDict},
{"__tostring", m_XRef__tostring},
{NULL, NULL} // sentinel
@@ -2565,7 +2510,10 @@
//**********************************************************************
// XRefEntry
+m_poppler__tostring(XRefEntry);
+
static const struct luaL_Reg XRefEntry_m[] = {
+ {"__tostring", m_XRefEntry__tostring},
{NULL, NULL} // sentinel
};
@@ -2582,7 +2530,6 @@
int luaopen_epdf(lua_State * L)
{
register_meta(Annot);
- // TODO register_meta(AnnotBorder);
register_meta(Annots);
register_meta(Array);
register_meta(Catalog);