summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/image/epdf.h
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
committerKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
commitad547a6b5986815fda458221149728d9d9ab1d87 (patch)
tree16296910eb3eca724371474ea9aea3994dc69614 /Build/source/texk/web2c/luatexdir/image/epdf.h
parent947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff)
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/image/epdf.h')
-rw-r--r--Build/source/texk/web2c/luatexdir/image/epdf.h183
1 files changed, 183 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/image/epdf.h b/Build/source/texk/web2c/luatexdir/image/epdf.h
new file mode 100644
index 00000000000..737682d791a
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/image/epdf.h
@@ -0,0 +1,183 @@
+/* epdf.h
+
+ Copyright 1996-2006 Han The Thanh <thanh@pdftex.org>
+ Copyright 2006-2015 Taco Hoekwater <taco@luatex.org>
+ This file is part of LuaTeX.
+
+ LuaTeX is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ LuaTeX is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
+
+
+/* this is the common header file for C++ sources pdftoepdf.c and lepdflib.c */
+
+#ifndef EPDF_H
+# define EPDF_H
+
+/*extern "C" {*/
+
+#ifdef HAVE_CONFIG_H
+#include <w2c/config.h>
+#endif
+
+/*}*/
+
+# include <stdlib.h>
+# include <math.h>
+# include <stddef.h>
+# include <stdio.h>
+# include <string.h>
+# include <kpathsea/c-ctype.h>
+# include <kpathsea/simpletypes.h>
+# include <sys/stat.h>
+# include <dirent.h>
+
+/*extern "C" { */
+
+# include <kpathsea/c-auto.h>
+
+extern char *xstrdup(const char *);
+
+typedef enum { FE_FAIL, FE_RETURN_NULL } file_error_mode;
+
+/* the following code is extremly ugly but needed for including web2c/config.h */
+
+/*typedef const char *const_string;*/ /* including kpathsea/types.h doesn't work on some systems */
+
+# define KPATHSEA_CONFIG_H /* avoid including other kpathsea header files */
+
+/* from web2c/config.h */
+
+# ifdef CONFIG_H /* CONFIG_H has been defined by some xpdf */
+# undef CONFIG_H /* header file */
+# endif
+
+# include <c-auto.h> /* define SIZEOF_LONG */
+
+# include "image.h"
+# include "utils/avlstuff.h"
+# include "pdf/pdftypes.h"
+
+# include "lua.h"
+# include "lauxlib.h"
+
+# include "pplib.h"
+
+
+/* pdfgen.w */
+
+extern int ten_pow[10];
+__attribute__ ((format(printf, 2, 3)))
+extern void pdf_printf(PDF, const char *fmt, ...);
+extern void pdf_begin_obj(PDF, int, int);
+extern void pdf_end_obj(PDF);
+extern void pdf_begin_dict(PDF);
+extern void pdf_end_dict(PDF);
+extern void pdf_begin_array(PDF);
+extern void pdf_end_array(PDF);
+extern void pdf_add_null(PDF);
+extern void pdf_add_bool(PDF, int i);
+extern void pdf_add_int(PDF, int i);
+extern void pdf_add_real(PDF, double d);
+extern void pdf_add_ref(PDF, int num);
+extern void pdf_add_name(PDF, const char *name);
+extern void pdf_dict_add_streaminfo(PDF);
+extern void pdf_begin_stream(PDF);
+extern void pdf_end_stream(PDF);
+extern void pdf_room(PDF, int);
+extern void pdf_out_block(PDF pdf, const char *s, size_t n);
+
+extern void pdf_dict_add_int(PDF, const char *key, int i);
+extern void pdf_dict_add_ref(PDF, const char *key, int num);
+extern void pdf_dict_add_name(PDF, const char *key, const char *val);
+extern void pdf_dict_add_streaminfo(PDF);
+
+/* Conflict with pdfgen.h */
+/*# define pdf_out(pdf, A) do { pdf_room(pdf, 1); *(pdf->buf->p++) = A; } while (0)*/
+/*# define pdf_quick_out(pdf,A) *(pdf->buf->p++)=(unsigned char)(A) */
+
+# define pdf_puts(pdf, s) pdf_out_block((pdf), (s), strlen(s))
+
+/* pdfpage.w */
+
+extern void print_pdffloat(PDF pdf, pdffloat f);
+
+/* pdftables.w */
+
+extern int pdf_create_obj(PDF pdf, int t, int i);
+
+/* pdftoepdf.c */
+
+extern void read_pdf_info(image_dict *);
+extern void flush_pdf_info(image_dict *);
+
+extern void write_epdf(PDF, image_dict *, int suppress_optional_info);
+extern int write_epdf_object(PDF, image_dict *, int n);
+
+extern void unrefPdfDocument(char *);
+extern void unrefMemStreamPdfDocument(char *);
+
+extern void epdf_free(void);
+
+/* writeimg.w */
+
+extern void pdf_dict_add_img_filename(PDF pdf, image_dict * idict);
+
+/* utils.w */
+
+/*extern char *convertStringToPDFString(const char *in, int len);*/
+
+/* lepdflib.w */
+
+int luaopen_epdf(lua_State * L);
+
+# include "luatex-common.h"
+
+/*}*/
+
+typedef struct InObj InObj;
+
+struct InObj {
+ /* int version; */ /* old object number in included PDF */
+ int objnum; /* old version number in included PDF, we can do without */
+ int num; /* new object number in output PDF */
+ InObj *next; /* next entry in list of indirect objects */
+} ;
+
+
+typedef struct avl_table avl_table;
+
+struct PdfDocument {
+ char *file_path; /* full file name including path */
+ char *checksum; /* for reopening */
+ ppdoc *pdfe;
+ InObj *inObjList; /* temporary linked list */
+ avl_table *ObjMapTree; /* permanent over luatex run */
+ int is_mem;
+ char *memstream;
+ unsigned int occurences; /* number of references to the PdfDocument; it can be deleted when occurences == 0 */
+ unsigned int pc; /* counter to track PDFDoc generation or deletion */
+};
+
+typedef struct PdfDocument PdfDocument;
+
+PdfDocument *refPdfDocument(const char *file_path, file_error_mode fe, const char *userpassword, const char *ownerpassword);
+
+PdfDocument *refMemStreamPdfDocument(char *docstream, unsigned long long streamsize, const char *file_id);
+
+#define STREAM_CHECKSUM_SIZE 16 // md5
+#define STRSTREAM_CHECKSUM_SIZE 1+((unsigned int)(log((double)ULONG_MAX)/log(16.0))) // djb2 printable digest as hex stream
+#define STREAM_FILE_ID_LEN 2048 // 2048 bytes are enough to make a strong almost-unique name
+#define STREAM_URI "data:application/pdf,"
+#define STREAM_URI_LEN 21 // length of "data:application/pdf," without final '\0'
+
+#endif /* EPDF_H */