beta-0.89.2
[luatex.git] / source / texk / web2c / luatexdir / pdf / pdftables.h
blobee1d1832103246afe86e8b2a42b588cac5c6ed3f
1 /* pdftables.h
3 Copyright 2009-2013 Taco Hoekwater <taco@luatex.org>
5 This file is part of LuaTeX.
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.
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.
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/>.
21 #ifndef PDFTABLES_H
22 # define PDFTABLES_H
24 const char *pdf_obj_typenames[PDF_OBJ_TYPE_MAX + 1];
26 typedef enum {
27 union_type_int,
28 union_type_cstring,
29 } union_type;
31 typedef struct {
32 union {
33 int int0;
34 char *str0;
35 } u;
36 union_type u_type; /* integer or char * in union above */
37 int objptr;
38 } oentry;
42 The cross-reference table |obj_tab| is an array of |obj_tab_size| of |obj_entry|.
43 Each entry contains five integer fields and represents an object in PDF file
44 whose object number is the index of this entry in |obj_tab|. Objects in |obj_tab|
45 maybe linked into list; objects in such a linked list have the same type.
47 The first field contains information representing identifier of this object. It
48 is usally a number for most of object types, but it may be a string number for
49 named destination or named thread.
51 The second field of |obj_entry| contains link to the next object in |obj_tab| if
52 this object is linked in a list.
54 The third field holds the byte offset of the object in the output PDF file, or
55 its byte offset within an object stream. As long as the object is not written,
56 this field is used for flags about the write status of the object; then it has a
57 negative value.
59 The fourth field holds the object number of the object stream, into which the
60 object is included.
62 The last field usually represents the pointer to some auxiliary data structure
63 depending on the object type; however it may be used as a counter as well.
67 # define obj_info(pdf,A) pdf->obj_tab[(A)].u.int0 /* information representing identifier of this object */
68 # define obj_start(pdf,A) pdf->obj_tab[(A)].u.str0
69 # define obj_link(pdf,A) pdf->obj_tab[(A)].int1 /* link to the next entry in linked list */
71 # define obj_offset(pdf,A) pdf->obj_tab[(A)].int2 /* negative (flags), or byte offset for this object in PDF output file, or ... */
72 # define obj_os_objnum(pdf,A) pdf->obj_tab[(A)].int2 /* ... object stream number for this object */
73 # define obj_os_idx(pdf,A) pdf->obj_tab[(A)].int3 /* index of this object in object stream */
74 # define obj_aux(pdf,A) pdf->obj_tab[(A)].v.int4 /* auxiliary pointer */
75 # define obj_stop(pdf,A) pdf->obj_tab[(A)].v.str4
76 # define obj_type(pdf,A) pdf->obj_tab[(A)].objtype
78 # define obj_data_ptr obj_aux /* pointer to |pdf->mem| */
80 # define set_obj_link(pdf,A,B) obj_link(pdf,A)=(B)
81 # define set_obj_start(pdf,A,B) obj_start(pdf,A)=(B)
82 # define set_obj_info(pdf,A,B) obj_info(pdf,A)=(B)
83 # define set_obj_offset(pdf,A,B) obj_offset(pdf,A)=(B)
84 # define set_obj_os_objnum(pdf,A,B) obj_offset(pdf,A)=(B)
85 # define set_obj_aux(pdf,A,B) obj_aux(pdf,A)=(B)
86 # define set_obj_stop(pdf,A,B) obj_stop(pdf,A)=(B)
87 # define set_obj_data_ptr(pdf,A,B) obj_data_ptr(pdf,A)=(B)
89 # define set_obj_fresh(pdf,A) obj_offset(pdf,(A))=(off_t)-2
90 # define set_obj_scheduled(pdf,A) if (obj_offset(pdf,A)==(off_t)-2) obj_offset(pdf,A)=(off_t)-1
91 # define is_obj_scheduled(pdf,A) ((obj_offset(pdf,A))>(off_t)-2)
92 # define is_obj_written(pdf,A) ((obj_offset(pdf,A))>(off_t)-1)
95 NOTE: The data structure definitions for the nodes on the typesetting side are
96 inside |nodes.h|
99 # define inf_pk_dpi 72 /* min PK pixel density value from \.{texmf.cnf} */
100 # define sup_pk_dpi 8000 /* max PK pixel density value from \.{texmf.cnf} */
102 extern int find_obj(PDF pdf, int t, int i, boolean byname);
103 extern void check_obj_exists(PDF pdf, int objnum);
104 extern void check_obj_type(PDF pdf, int t, int objnum);
105 extern int pdf_get_obj(PDF pdf, int t, int i, boolean byname);
106 extern int pdf_create_obj(PDF pdf, int t, int i);
107 extern void set_rect_dimens(PDF pdf, halfword p, halfword parent_box, scaledpos cur, scaled_whd alt_rule, scaled margin);
108 extern void libpdffinish(PDF);
110 # define set_width(A,B) width(A)=(B)
111 # define set_height(A,B) height(A)=(B)
112 # define set_depth(A,B) depth(A)=(B)
114 /* pdf backend definitions */
116 typedef enum {
117 c_pdf_compress_level = 0,
118 c_pdf_decimal_digits,
119 c_pdf_image_resolution,
120 c_pdf_pk_resolution,
121 c_pdf_unique_resname,
122 c_pdf_minor_version,
123 c_pdf_pagebox,
124 c_pdf_inclusion_errorlevel,
125 c_pdf_ignore_unknown_images,
126 c_pdf_gamma,
127 c_pdf_image_apply_gamma,
128 c_pdf_image_gamma,
129 c_pdf_image_hicolor,
130 c_pdf_image_addfilename,
131 c_pdf_objcompresslevel,
132 c_pdf_inclusion_copy_font,
133 c_pdf_gen_tounicode,
134 c_pdf_pk_fixed_dpi,
135 } pdf_backend_counters ;
137 typedef enum {
138 d_pdf_h_origin = 0,
139 d_pdf_v_origin,
140 d_pdf_thread_margin,
141 d_pdf_dest_margin,
142 d_pdf_link_margin,
143 d_pdf_xform_margin,
144 } pdf_backend_dimensions ;
146 typedef enum {
147 t_pdf_page_attr = 0,
148 t_pdf_page_resources,
149 t_pdf_pages_attr,
150 t_pdf_xform_attr,
151 t_pdf_xform_resources,
152 t_pdf_pk_mode,
153 } pdf_backend_tokenlists ;
155 extern int pdf_last_annot;
156 extern int pdf_last_link;
157 extern int pdf_last_obj;
158 extern int pdf_retval;
160 # define pdf_compress_level get_tex_extension_count_register(c_pdf_compress_level)
161 # define pdf_decimal_digits get_tex_extension_count_register(c_pdf_decimal_digits)
162 # define pdf_image_resolution get_tex_extension_count_register(c_pdf_image_resolution)
163 # define pdf_pk_resolution get_tex_extension_count_register(c_pdf_pk_resolution)
164 # define pdf_unique_resname get_tex_extension_count_register(c_pdf_unique_resname)
165 # define pdf_minor_version get_tex_extension_count_register(c_pdf_minor_version)
166 # define pdf_pagebox get_tex_extension_count_register(c_pdf_pagebox)
167 # define pdf_inclusion_errorlevel get_tex_extension_count_register(c_pdf_inclusion_errorlevel)
168 # define pdf_ignore_unknown_images get_tex_extension_count_register(c_pdf_ignore_unknown_images)
169 # define pdf_gamma get_tex_extension_count_register(c_pdf_gamma)
170 # define pdf_image_apply_gamma get_tex_extension_count_register(c_pdf_image_apply_gamma)
171 # define pdf_image_gamma get_tex_extension_count_register(c_pdf_image_gamma)
172 # define pdf_image_hicolor get_tex_extension_count_register(c_pdf_image_hicolor)
173 # define pdf_image_addfilename get_tex_extension_count_register(c_pdf_image_addfilename)
174 # define pdf_objcompresslevel get_tex_extension_count_register(c_pdf_objcompresslevel)
175 # define pdf_inclusion_copy_font get_tex_extension_count_register(c_pdf_inclusion_copy_font)
176 # define pdf_gen_tounicode get_tex_extension_count_register(c_pdf_gen_tounicode)
177 # define pdf_pk_fixed_dpi get_tex_extension_count_register(c_pdf_pk_fixed_dpi)
179 # define pdf_h_origin get_tex_extension_dimen_register(d_pdf_h_origin)
180 # define pdf_v_origin get_tex_extension_dimen_register(d_pdf_v_origin)
181 # define pdf_thread_margin get_tex_extension_dimen_register(d_pdf_thread_margin)
182 # define pdf_dest_margin get_tex_extension_dimen_register(d_pdf_dest_margin)
183 # define pdf_link_margin get_tex_extension_dimen_register(d_pdf_link_margin)
184 # define pdf_xform_margin get_tex_extension_dimen_register(d_pdf_xform_margin)
186 # define pdf_page_attr get_tex_extension_toks_register(t_pdf_page_attr)
187 # define pdf_page_resources get_tex_extension_toks_register(t_pdf_page_resources)
188 # define pdf_pages_attr get_tex_extension_toks_register(t_pdf_pages_attr)
189 # define pdf_xform_attr get_tex_extension_toks_register(t_pdf_xform_attr)
190 # define pdf_xform_resources get_tex_extension_toks_register(t_pdf_xform_resources)
191 # define pdf_pk_mode get_tex_extension_toks_register(t_pdf_pk_mode)
193 # define set_pdf_minor_version(i) set_tex_extension_count_register(c_pdf_minor_version,i)
194 # define set_pdf_compress_level(i) set_tex_extension_count_register(c_pdf_compress_level,i)
195 # define set_pdf_objcompresslevel(i) set_tex_extension_count_register(c_pdf_objcompresslevel,i)
197 # define set_pdf_decimal_digits(i) set_tex_extension_count_register(c_pdf_decimal_digits,i)
198 # define set_pdf_pk_resolution(i) set_tex_extension_count_register(c_pdf_pk_resolution,i)
199 # define set_pdf_pk_fixed_dpi(i) set_tex_extension_count_register(c_pdf_pk_fixed_dpi,i)
201 # define pk_decimal_digits(pdf,delta) ((pdf->decimal_digits > 4 ? 4 : 3) + delta)
203 #endif