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.
389 lines
12 KiB
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);
|