summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/lua/lpdflib.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/lua/lpdflib.c')
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/lpdflib.c127
1 files changed, 127 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/lua/lpdflib.c b/Build/source/texk/web2c/luatexdir/lua/lpdflib.c
new file mode 100644
index 00000000000..9cf847c84c8
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/lua/lpdflib.c
@@ -0,0 +1,127 @@
+/* $Id: lpdflib.c 1013 2008-02-14 00:09:02Z oneiros $ */
+
+#include "luatex-api.h"
+#include <ptexlib.h>
+
+
+static int
+findcurv (lua_State *L) {
+ int j;
+ j = get_cur_v();
+ lua_pushnumber(L, j);
+ return 1;
+}
+
+static int
+findcurh (lua_State *L) {
+ int j;
+ j = get_cur_h();
+ lua_pushnumber(L, j);
+ return 1;
+}
+
+
+typedef enum { set_origin, direct_page, direct_always } pdf_lit_mode;
+
+int luapdfprint(lua_State * L)
+{
+ int n;
+ unsigned i, len;
+ const char *outputstr, *st;
+ pdf_lit_mode literal_mode;
+ n = lua_gettop(L);
+ if (!lua_isstring(L, -1)) {
+ lua_pushstring(L, "no string to print");
+ lua_error(L);
+ }
+ literal_mode = set_origin;
+ if (n == 2) {
+ if (!lua_isstring(L, -2)) {
+ lua_pushstring(L, "invalid argument for print literal mode");
+ lua_error(L);
+ } else {
+ outputstr = (char *) lua_tostring(L, -2);
+ if (strcmp(outputstr, "direct") == 0)
+ literal_mode = direct_always;
+ else if (strcmp(outputstr, "page") == 0)
+ literal_mode = direct_page;
+ else {
+ lua_pushstring(L,
+ "invalid argument for print literal mode");
+ lua_error(L);
+ }
+ }
+ } else {
+ if (n != 1) {
+ lua_pushstring(L, "invalid number of arguments");
+ lua_error(L);
+ }
+ }
+ switch (literal_mode) {
+ case (set_origin):
+ pdf_end_text();
+ pdf_set_origin(cur_h, cur_v);
+ break;
+ case (direct_page):
+ pdf_end_text();
+ break;
+ case (direct_always):
+ pdf_end_string_nl();
+ break;
+ default:
+ assert(0);
+ }
+ st = lua_tolstring(L, n,&len);
+ for (i = 0; i < len; i++) {
+ if (i%16 == 0)
+ pdfroom(16);
+ pdf_buf[pdf_ptr++] = st[i];
+ }
+ return 0;
+}
+
+static int
+getpdf (lua_State *L) {
+ char *st;
+ if (lua_isstring(L,2)) {
+ st = (char *)lua_tostring(L,2);
+ if (st && *st) {
+ if (*st == 'h')
+ return findcurh(L);
+ else if (*st == 'v')
+ return findcurv(L);
+ }
+ }
+ lua_pushnil(L);
+ return 1;
+}
+
+static int
+setpdf (lua_State *L) {
+ return (L==NULL ? 0 : 0); /* for -Wall */
+}
+
+static const struct luaL_reg pdflib[] = {
+ {"print", luapdfprint},
+ {NULL, NULL} /* sentinel */
+};
+
+
+int
+luaopen_pdf (lua_State *L) {
+ luaL_register(L, "pdf", pdflib);
+ /* build meta table */
+ luaL_newmetatable(L,"pdf_meta");
+ lua_pushstring(L, "__index");
+ lua_pushcfunction(L, getpdf);
+ /* do these later, NYI */
+ if (0) {
+ lua_settable(L, -3);
+ lua_pushstring(L, "__newindex");
+ lua_pushcfunction(L, setpdf);
+ }
+ lua_settable(L, -3);
+ lua_setmetatable(L,-2); /* meta to itself */
+ return 1;
+}
+