1% pdfluaapi.w
2%
3% Copyright 2010 Taco Hoekwater <taco@@luatex.org>
4%
5% This file is part of LuaTeX.
6%
7% LuaTeX is free software; you can redistribute it and/or modify it under
8% the terms of the GNU General Public License as published by the Free
9% Software Foundation; either version 2 of the License, or (at your
10% option) any later version.
11%
12% LuaTeX is distributed in the hope that it will be useful, but WITHOUT
13% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14% FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
15% License for more details.
16%
17% You should have received a copy of the GNU General Public License along
18% with LuaTeX; if not, see <http://www.gnu.org/licenses/>.
19
20@ @c
21
22
23#include "ptexlib.h"
24
25@ @c
26int new_pdflua(void)
27{
28    int i, err;
29    Byte *uncompr;
30    const zlib_struct *zp = pdflua_zlib_struct_ptr;
31    uLong uncomprLen = zp->uncomprLen;
32    if ((uncompr = xtalloc(zp->uncomprLen, Byte)) == NULL)
33        luatex_fail("new_pdflua(): xtalloc()");
34    err = uncompress(uncompr, &uncomprLen, zp->compr, zp->comprLen);
35    if (err != Z_OK)
36        luatex_fail("new_pdflua(): uncompress()");
37    assert(uncomprLen == zp->uncomprLen);
38    if (luaL_loadbuffer(Luas, (const char *) uncompr, uncomprLen, "pdflua")
39        || lua_pcall(Luas, 0, 1, 0))
40        luatex_fail("new_pdflua(): lua_pcall()");
41    luaL_checktype(Luas, -1, LUA_TTABLE);       /* t */
42    i = luaL_ref(Luas, LUA_REGISTRYINDEX);       /* - */
43    xfree(uncompr);
44    return i;
45}
46
47@ @c
48void pdflua_begin_page(PDF pdf)
49{
50    int err;                    /* ... */
51    lua_rawgeti(Luas, LUA_REGISTRYINDEX, pdf->pdflua_ref);       /* t ... */
52    lua_pushstring(Luas, "beginpage");  /* s t ... */
53    lua_gettable(Luas, -2);     /* f t ... */
54    lua_newtable(Luas);         /* t f t ... */
55    lua_pushnumber(Luas, total_pages + 1);      /* i t f t ... */
56    lua_setfield(Luas, -2, "pagenum");  /* t f t ... */
57    lua_pushnumber(Luas, pdf->last_page);       /*  i t f t ... */
58    lua_setfield(Luas, -2, "page_objnum");      /* t f t ... */
59    lua_pushnumber(Luas, pdf->last_stream);     /* i t f t ... */
60    lua_setfield(Luas, -2, "stream_objnum");    /* t f t ... */
61    lua_pushnumber(Luas, pdf->page_resources->last_resources);  /* i t f t ... */
62    lua_setfield(Luas, -2, "resources_objnum"); /* t f t ... */
63    err = lua_pcall(Luas, 1, 0, 0);     /* (e) t ... */
64    if (err != 0)
65        luatex_fail("pdflua.lua: beginpage()");
66    /* t ... */
67    lua_pop(Luas, 1);           /* ... */
68}
69
70@ @c
71void pdflua_end_page(PDF pdf, int annots, int beads)
72{
73    int err;                    /* ... */
74    lua_rawgeti(Luas, LUA_REGISTRYINDEX, pdf->pdflua_ref);       /* t ... */
75    lua_pushstring(Luas, "endpage");    /* s t ... */
76    lua_gettable(Luas, -2);     /* f t ... */
77    lua_newtable(Luas);         /* t f t ... */
78    lua_pushnumber(Luas, total_pages);  /* i t f t ... */
79    lua_setfield(Luas, -2, "pagenum");  /* t f t ... */
80    lua_pushnumber(Luas, pdf->page_size.h);     /* i t f t ... */
81    lua_setfield(Luas, -2, "hsize");    /* t f t ... */
82    lua_pushnumber(Luas, pdf->page_size.v);     /* i t f t ... */
83    lua_setfield(Luas, -2, "vsize");    /* t f t ... */
84    if (annots != 0) {
85        lua_pushnumber(Luas, annots);   /* i t f t ... */
86        lua_setfield(Luas, -2, "annots");       /* t f t ... */
87    }
88    if (beads != 0) {
89        lua_pushnumber(Luas, beads);    /* i t f t ... */
90        lua_setfield(Luas, -2, "beads");        /* t f t ... */
91    }
92    if (pdf->img_page_group_val != 0) {
93        lua_pushnumber(Luas, pdf->img_page_group_val);  /* i t f t ... */
94        lua_setfield(Luas, -2, "imggroup");     /* t f t ... */
95    }
96    err = lua_pcall(Luas, 1, 0, 0);     /* (e) t ... */
97    if (err != 0)
98        luatex_fail("pdflua.lua: endpage()");
99    /* t ... */
100    lua_pop(Luas, 1);           /* ... */
101}
102
103@ @c
104void pdflua_output_pages_tree(PDF pdf)
105{
106    int err;
107    lua_rawgeti(Luas, LUA_REGISTRYINDEX, pdf->pdflua_ref);       /* t */
108    lua_pushstring(Luas, "outputpagestree");    /* s t */
109    lua_gettable(Luas, -2);     /* f */
110    err = lua_pcall(Luas, 0, 0, 0);     /* - */
111    if (err != 0)
112        luatex_fail("pdflua.lua: outputpagestree()");
113}
114