beta-0.89.2
[luatex.git] / source / texk / web2c / luatexdir / tex / extensions.h
blob01a75b7e387e21d9f507f40fa720a6ce02e3a5a8
1 /* extensions.h
3 Copyright 2009 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 EXTENSIONS_H
22 # define EXTENSIONS_H
24 extern alpha_file write_file[last_file_selector+1];
25 extern halfword write_file_mode[last_file_selector+1];
26 extern halfword write_file_translation[last_file_selector+1];
27 extern boolean write_open[last_file_selector+1];
29 # define valid_write_file(n) ((n>=0) && (n<=last_file_selector))
30 # define file_can_be_written(n) (valid_write_file(n) && write_open[n])
32 extern void expand_macros_in_tokenlist(halfword p);
33 extern void write_out(halfword p);
34 extern void finalize_write_files(void);
35 extern void initialize_write_files(void);
36 extern void close_write_file(int id);
37 extern boolean open_write_file(int id, char *fn);
39 extern scaled neg_wd;
40 extern scaled pos_wd;
41 extern scaled neg_ht;
43 extern halfword write_loc;
45 extern void do_extension(int immediate);
48 User defined whatsits can be inserted into node lists to pass data
49 along from one lua call to another without interference from the
50 typesetting engine itself. Each has an id, a type, and a value. The
51 type of the value depends on the |user_node_type| field.
54 extern void new_whatsit(int s);
56 extern halfword concat_tokens(halfword q, halfword r);
59 The \.{\\pagediscards} and \.{\\splitdiscards} commands share the
60 command code |un_vbox| with \.{\\unvbox} and \.{\\unvcopy}, they are
61 distinguished by their |chr_code| values |last_box_code| and
62 |vsplit_code|. These |chr_code| values are larger than |box_code| and
63 |copy_code|.
66 extern boolean *eof_seen; /* has eof been seen? */
67 extern void print_group(boolean e);
68 extern void group_trace(boolean e);
69 extern save_pointer *grp_stack; /* initial |cur_boundary| */
70 extern halfword *if_stack; /* initial |cond_ptr| */
71 extern void group_warning(void);
72 extern void if_warning(void);
73 extern void file_warning(void);
75 extern halfword last_line_fill; /* the |par_fill_skip| glue node of the new paragraph */
77 # define get_tex_dimen_register(j) dimen(j)
78 # define get_tex_skip_register(j) skip(j)
79 # define get_tex_mu_skip_register(j) mu_skip(j)
80 # define get_tex_count_register(j) count(j)
81 # define get_tex_attribute_register(j) attribute(j)
82 # define get_tex_box_register(j) box(j)
84 extern int get_tex_extension_count_register(int i);
85 extern void set_tex_extension_count_register(int i, int d);
86 extern int get_tex_extension_dimen_register(int i);
87 extern void set_tex_extension_dimen_register(int i, int d);
88 extern int get_tex_extension_toks_register (int i);
90 extern int set_tex_dimen_register(int j, scaled v);
91 extern int set_tex_skip_register(int j, halfword v);
92 extern int set_tex_mu_skip_register(int j, halfword v);
93 extern int set_tex_count_register(int j, scaled v);
94 extern int set_tex_box_register(int j, scaled v);
95 extern int set_tex_attribute_register(int j, scaled v);
96 extern int get_tex_toks_register(int l);
97 extern int set_tex_toks_register(int j, lstring s);
98 extern int scan_tex_toks_register(int j, int c, lstring s);
99 extern scaled get_tex_box_width(int j);
100 extern int set_tex_box_width(int j, scaled v);
101 extern scaled get_tex_box_height(int j);
102 extern int set_tex_box_height(int j, scaled v);
103 extern scaled get_tex_box_depth(int j);
104 extern int set_tex_box_depth(int j, scaled v);
106 /* Synctex variables */
108 extern int synctexoption;
109 extern int synctexoffset;
111 /* Here are extra variables for Web2c. */
113 extern pool_pointer edit_name_start;
114 extern int edit_name_length, edit_line;
115 extern int ipcon;
116 extern boolean stop_at_space;
117 extern int shellenabledp;
118 extern int restrictedshell;
119 extern char *output_comment;
120 extern boolean debug_format_file;
122 extern int last_saved_box_index ;
123 extern int last_saved_image_index ;
124 extern int last_saved_image_pages ;
125 extern scaledpos last_position ;
127 typedef enum {
128 /* traditional extensions */
129 open_code = 0,
130 write_code,
131 close_code,
132 reserved_extension_code, // 3: we moved special below immediate //
133 reserved_immediate_code, // 4: same number as main codes, expected value //
134 /* backend specific implementations */
135 special_code,
136 save_box_resource_code,
137 use_box_resource_code,
138 save_image_resource_code,
139 use_image_resource_code,
140 /* backend */
141 dvi_extension_code,
142 pdf_extension_code,
143 } extension_codes ;
145 #endif