summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/ptexlib.h
diff options
context:
space:
mode:
authorMartin Schröder <martin@oneiros.de>2008-03-24 15:47:15 +0000
committerMartin Schröder <martin@oneiros.de>2008-03-24 15:47:15 +0000
commit0b5550c241229764120d133af80a0cbab5937ddd (patch)
tree81309c18d6f0deba7407813cf15b9add2db375d1 /Build/source/texk/web2c/luatexdir/ptexlib.h
parent51f55df6a36ce376952a1f2b30bdb4dd0e06548d (diff)
First step of importing luatex (up to r1121)
git-svn-id: svn://tug.org/texlive/trunk@7124 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/ptexlib.h')
-rw-r--r--Build/source/texk/web2c/luatexdir/ptexlib.h615
1 files changed, 615 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/ptexlib.h b/Build/source/texk/web2c/luatexdir/ptexlib.h
new file mode 100644
index 00000000000..aad25eb4ab2
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/ptexlib.h
@@ -0,0 +1,615 @@
+/*
+ Copyright (c) 1996-2006 Han The Thanh, <thanh@pdftex.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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with luatex; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+$Id$
+*/
+
+#ifndef LUATEXLIB
+# define LUATEXLIB
+
+/* WEB2C macros and prototypes */
+# if !defined(LUATEXCOERCE)
+# ifdef luatex
+# undef luatex /* to avoid warning about redefining luatex in luatexd.h */
+# endif /* luatex */
+# define EXTERN extern
+# include "luatexd.h"
+# endif
+
+/* pdftexlib macros */
+# include "ptexmac.h"
+
+# include "avlstuff.h"
+# include "image/image.h"
+
+# include "openbsd-compat.h"
+
+/* pdftexlib type declarations */
+typedef struct {
+ const char *pdfname;
+ const char *t1name;
+ boolean valid;
+} key_entry;
+
+struct _subfont_entry;
+typedef struct _subfont_entry subfont_entry;
+
+struct _subfont_entry {
+ char *infix; /* infix for this subfont, eg "01" */
+ long charcodes[256]; /* the mapping for this subfont as read from sfd */
+ subfont_entry *next;
+};
+
+typedef struct {
+ char *name; /* sfd name, eg "Unicode" */
+ subfont_entry *subfont; /* linked list of subfonts */
+} sfd_entry;
+
+typedef struct {
+ integer fe_objnum; /* object number */
+ char *name; /* encoding file name */
+ char **glyph_names; /* array of glyph names */
+ struct avl_table *tx_tree; /* tree of encoding positions marked as used by TeX */
+} fe_entry;
+
+typedef struct {
+ char *name; /* glyph name */
+ long code; /* -1 = undefined; -2 = multiple codes, stored
+ as string in unicode_seq; otherwise unicode value */
+ char *unicode_seq; /* multiple unicode sequence */
+} glyph_unicode_entry;
+
+typedef struct {
+ /* parameters scanned from the map file: */
+ char *tfm_name; /* TFM file name (1st field in map line) */
+ char *sfd_name; /* subfont directory name, like @sfd_name@ */
+ char *ps_name; /* PostScript name (optional 2nd field in map line) */
+ integer fd_flags; /* font descriptor /Flags (PDF Ref. section 5.7.1) */
+ integer slant; /* SlantFont */
+ integer extend; /* ExtendFont */
+ char *encname; /* encoding file name */
+ char *ff_name; /* font file name */
+ unsigned short type; /* various flags */
+ short pid; /* Pid for truetype fonts */
+ short eid; /* Eid for truetype fonts */
+ /* parameters NOT scanned from the map file: */
+ subfont_entry *subfont; /* subfont mapping */
+ unsigned short links; /* link flags from tfm_tree and ps_tree */
+ boolean in_use; /* true if this structure has been referenced already */
+} fm_entry;
+
+typedef struct glw_entry_ { /* subset glyphs for inclusion in CID-based fonts */
+ unsigned short id; /* glyph CID */
+ unsigned short wd; /* glyph width in 1/1000 em parts */
+} glw_entry;
+
+
+/**********************************************************************/
+
+typedef struct {
+ int val; /* value */
+ boolean set; /* true if parameter has been set */
+} intparm;
+
+typedef struct fd_entry_ {
+ integer fd_objnum; /* object number of the font descriptor object */
+ char *fontname; /* /FontName (without subset tag) */
+ char *subset_tag; /* 6-character subset tag */
+ boolean ff_found;
+ integer ff_objnum; /* object number of the font program stream */
+ integer fn_objnum; /* font name object number (embedded PDF) */
+ boolean all_glyphs; /* embed all glyphs? */
+ boolean write_ttf_glyph_names;
+ intparm font_dim[FONT_KEYS_NUM];
+ fe_entry *fe; /* pointer to encoding structure */
+ char **builtin_glyph_names; /* builtin encoding as read from the Type1 font file */
+ fm_entry *fm; /* pointer to font map structure */
+ struct avl_table *tx_tree; /* tree of non-reencoded TeX characters marked as used */
+ struct avl_table *gl_tree; /* tree of all marked glyphs */
+} fd_entry;
+
+typedef struct fo_entry_ {
+ integer fo_objnum; /* object number of the font dictionary */
+ internalfontnumber tex_font; /* needed only for \pdffontattr{} */
+ fm_entry *fm; /* pointer to font map structure for this font dictionary */
+ fd_entry *fd; /* pointer to /FontDescriptor object structure */
+ fe_entry *fe; /* pointer to encoding structure */
+ integer cw_objnum; /* object number of the font program object */
+ integer first_char; /* first character used in this font */
+ integer last_char; /* last character used in this font */
+ struct avl_table *tx_tree; /* tree of non-reencoded TeX characters marked as used */
+ integer tounicode_objnum; /* object number of ToUnicode */
+} fo_entry;
+
+/**********************************************************************/
+
+typedef struct {
+ char *ff_name; /* base name of font file */
+ char *ff_path; /* full path to font file */
+} ff_entry;
+
+typedef short shalfword;
+typedef struct {
+ integer charcode, cwidth, cheight, xoff, yoff, xescape, rastersize;
+ halfword *raster;
+} chardesc;
+
+/* pdftexlib variable declarations */
+extern boolean true_dimen;
+extern char **t1_glyph_names, *t1_builtin_glyph_names[];
+extern char *cur_file_name;
+extern const char notdef[];
+extern integer t1_length1, t1_length2, t1_length3;
+extern integer ttf_length;
+extern strnumber last_tex_string;
+extern size_t last_ptr_index;
+
+/* loadpool.c */
+
+int loadpoolstrings(integer spare_size);
+
+/* pdftexlib function prototypes */
+
+/* epdf.c */
+extern integer get_fontfile_num(int);
+extern integer get_fontname_num(int);
+extern void epdf_free(void);
+
+/* mapfile.c */
+extern fm_entry *lookup_fontmap(char *);
+extern boolean hasfmentry(internalfontnumber);
+extern void fm_free(void);
+extern void fm_read_info(void);
+extern ff_entry *check_ff_exist(char *, boolean);
+extern void pdfmapfile(integer);
+extern void pdfmapline(integer);
+extern void pdf_init_map_file(string map_name);
+extern fm_entry *new_fm_entry(void);
+extern void delete_fm_entry(fm_entry *);
+extern int avl_do_entry(fm_entry *, int);
+
+/* papersiz.c */
+extern integer myatodim(char **);
+extern integer myatol(char **);
+
+/* pkin.c */
+extern int readchar(boolean, chardesc *);
+
+/* subfont.c */
+extern void sfd_free(void);
+extern boolean handle_subfont_fm(fm_entry *, int);
+
+/* tounicode.c */
+extern void glyph_unicode_free(void);
+extern void def_tounicode(strnumber, strnumber);
+extern integer write_tounicode(char **, char *);
+
+/* utils.c */
+extern boolean str_eq_cstr(strnumber, char *);
+extern char *makecstring(integer);
+extern char *makeclstring(integer, int *);
+extern void print_string(char *j);
+extern void append_string(char *s);
+extern void getcreationdate(void);
+extern void tconfusion(char *s);
+extern void tprint(char *s);
+extern void tprint_nl(char *s);
+extern void tprint_esc(char *s);
+
+# define overflow_string(a,b) { overflow(maketexstring(a),b); flush_str(last_tex_string); }
+
+extern int xfflush(FILE *);
+extern int xgetc(FILE *);
+extern int xputc(int, FILE *);
+extern scaled ext_xn_over_d(scaled, scaled, scaled);
+extern size_t xfwrite(void *, size_t size, size_t nmemb, FILE *);
+extern strnumber get_resname_prefix(void);
+extern strnumber maketexstring(const char *);
+extern strnumber maketexlstring(const char *, size_t);
+extern integer fb_offset(void);
+extern void fb_flush(void);
+extern void fb_putchar(eight_bits b);
+extern void fb_seek(integer);
+extern void libpdffinish(void);
+extern char *makecfilename(strnumber s);
+extern void make_subset_tag(fd_entry *);
+__attribute__ ((format(printf, 1, 2)))
+extern void pdf_printf(const char *, ...);
+extern void pdf_puts(const char *);
+__attribute__ ((noreturn, format(printf, 1, 2)))
+extern void pdftex_fail(const char *, ...);
+__attribute__ ((format(printf, 1, 2)))
+extern void pdftex_warn(const char *, ...);
+extern void set_job_id(int, int, int, int);
+__attribute__ ((format(printf, 1, 2)))
+extern void tex_printf(const char *, ...);
+extern void write_stream_length(integer, integer);
+extern char *convertStringToPDFString(const char *in, int len);
+extern void print_ID(strnumber);
+extern void print_creation_date();
+extern void print_mod_date();
+extern void escapename(poolpointer in);
+extern void escapestring(poolpointer in);
+extern void escapehex(poolpointer in);
+extern void unescapehex(poolpointer in);
+extern void make_pdftex_banner(void);
+extern void init_start_time();
+extern void remove_pdffile(void);
+extern void garbage_warning(void);
+extern void initversionstring(char **versions);
+extern int newcolorstack(integer s, integer literal_mode, boolean pagestart);
+extern int colorstackused();
+extern integer colorstackset(int colstack_no, integer s);
+extern integer colorstackpush(int colstack_no, integer s);
+extern integer colorstackpop(int colstack_no);
+extern integer colorstackcurrent(int colstack_no);
+extern integer colorstackskippagestart(int colstack_no);
+extern void checkpdfsave(int cur_h, int cur_v);
+extern void checkpdfrestore(int cur_h, int cur_v);
+extern void pdfshipoutbegin(boolean shipping_page);
+extern void pdfshipoutend(boolean shipping_page);
+extern void pdfsetmatrix(poolpointer in, scaled cur_h, scaled cur_v);
+extern void matrixtransformpoint(scaled x, scaled y);
+extern void matrixtransformrect(scaled llx, scaled lly, scaled urx, scaled ury);
+extern boolean matrixused();
+extern void matrixrecalculate(scaled urx);
+extern scaled getllx();
+extern scaled getlly();
+extern scaled geturx();
+extern scaled getury();
+
+/* writeenc.c */
+extern fe_entry *get_fe_entry(char *);
+extern void enc_free(void);
+extern void write_fontencodings(void);
+
+/* writefont.c */
+extern void do_pdf_font(integer, internalfontnumber);
+extern fd_entry *lookup_fd_entry(char *, integer, integer);
+extern fd_entry *new_fd_entry(void);
+extern void write_fontstuff();
+
+/* writeimg.c */
+extern boolean check_image_b(integer);
+extern boolean check_image_c(integer);
+extern boolean check_image_i(integer);
+extern boolean is_pdf_image(integer);
+extern integer epdforigx(integer);
+extern integer epdforigy(integer);
+extern integer image_pages(integer);
+extern integer image_index(integer);
+extern integer image_width(integer);
+extern integer image_height(integer);
+extern integer image_depth(integer);
+extern integer image_objnum(integer);
+extern integer image_imgnum(integer);
+extern integer new_image_entry(void);
+extern integer read_image(integer, integer, strnumber, integer, strnumber,
+ strnumber, integer, integer, integer, integer);
+extern void img_free(void);
+extern void update_image_procset(integer);
+extern void write_image(integer);
+extern integer image_colordepth(integer img);
+extern void scale_image(integer);
+extern void set_image_dimensions(integer, integer, integer, integer);
+extern void set_image_index(integer, integer);
+extern void out_image(integer, scaled, scaled);
+
+/* writejbig2.c */
+extern void flush_jbig2_page0_objects();
+
+/* writet1.c */
+extern boolean t1_subset(char *, char *, unsigned char *);
+extern char **load_enc_file(char *);
+extern void writet1(fd_entry *);
+extern void t1_free(void);
+
+/* writet3.c */
+extern void writet3(int, internalfontnumber);
+extern scaled get_pk_char_width(internalfontnumber, scaled);
+
+/* writettf.c */
+extern void writettf(fd_entry *);
+extern void writeotf(fd_entry *);
+extern void ttf_free(void);
+
+/* writezip.c */
+extern void write_zip(boolean);
+extern void zip_free(void);
+
+/* avlstuff.c */
+extern int comp_int_entry(const void *, const void *, void *);
+extern int comp_string_entry(const void *, const void *, void *);
+extern void avl_put_obj(integer, integer);
+extern integer avl_find_obj(integer, integer, integer);
+
+/**********************************************************************/
+static const key_entry font_key[FONT_KEYS_NUM] = {
+ {"Ascent", "Ascender", 1}
+ , {"CapHeight", "CapHeight", 1}
+ , {"Descent", "Descender", 1}
+ , {"ItalicAngle", "ItalicAngle", 1}
+ , {"StemV", "StdVW", 1}
+ , {"XHeight", "XHeight", 1}
+ , {"FontBBox", "FontBBox", 1}
+ , {"", "", 0}
+ , {"", "", 0}
+ , {"", "", 0}
+ , {"FontName", "FontName", 1}
+};
+
+/**********************************************************************/
+
+typedef enum {
+ no_print = 16,
+ term_only = 17,
+ log_only = 18,
+ term_and_log = 19,
+ pseudo = 20,
+ new_string = 21
+} selector_settings;
+
+
+# include "font/texfont.h"
+
+/* language stuff */
+
+typedef struct _lang_variables {
+ int pre_hyphen_char;
+ int post_hyphen_char;
+} lang_variables;
+
+
+# include "hyphen.h"
+
+struct tex_language {
+ HyphenDict *patterns;
+ int exceptions; /* lua registry pointer, should be replaced */
+ int id;
+ int pre_hyphen_char;
+ int post_hyphen_char;
+};
+
+# define MAX_WORD_LEN 256 /* in chars */
+
+extern struct tex_language *new_language(void);
+extern struct tex_language *get_language(int n);
+extern void load_patterns(struct tex_language *lang, unsigned char *buf);
+extern void load_hyphenation(struct tex_language *lang, unsigned char *buf);
+extern int hyphenate_string(struct tex_language *lang, char *w, char **ret);
+
+extern void new_hyphenation(halfword h, halfword t);
+extern void clear_patterns(struct tex_language *lang);
+extern void clear_hyphenation(struct tex_language *lang);
+extern char *clean_hyphenation(char *buffer, char **cleaned);
+extern void hnj_hyphenation(halfword head, halfword tail);
+
+extern void set_pre_hyphen_char(integer lan, integer val);
+extern void set_post_hyphen_char(integer lan, integer val);
+extern integer get_pre_hyphen_char(integer lan);
+extern integer get_post_hyphen_char(integer lan);
+
+extern halfword new_ligkern(halfword head, halfword tail);
+extern halfword handle_ligaturing(halfword head, halfword tail);
+extern halfword handle_kerning(halfword head, halfword tail);
+
+# define push_dir(a) \
+ { dir_tmp=new_dir((a)); \
+ vlink(dir_tmp)=dir_ptr; dir_ptr=dir_tmp; \
+ dir_ptr=dir_tmp; \
+ }
+
+# define push_dir_node(a) \
+ { dir_tmp=new_node(whatsit_node,dir_node); \
+ dir_dir(dir_tmp)=dir_dir((a)); \
+ dir_level(dir_tmp)=dir_level((a)); \
+ dir_dvi_h(dir_tmp)=dir_dvi_h((a)); \
+ dir_dvi_ptr(dir_tmp)=dir_dvi_ptr((a)); \
+ vlink(dir_tmp)=dir_ptr; dir_ptr=dir_tmp; \
+ }
+
+# define pop_dir_node() \
+ { dir_tmp=dir_ptr; \
+ dir_ptr=vlink(dir_tmp); \
+ flush_node(dir_tmp); \
+ }
+
+
+
+# define dir_parallel(a,b) (((a) % 2)==((b) % 2))
+# define dir_orthogonal(a,b) (((a) % 2)!=((b) % 2))
+
+# define is_rotated(a) dir_parallel(dir_secondary[(a)],dir_tertiary[(a)])
+
+void initialize_active(void);
+
+halfword find_protchar_left(halfword l, boolean d);
+halfword find_protchar_right(halfword l, halfword r);
+
+void ext_do_line_break(boolean d,
+ int pretolerance,
+ int tracing_paragraphs,
+ int tolerance,
+ scaled emergency_stretch,
+ int looseness,
+ int hyphen_penalty,
+ int ex_hyphen_penalty,
+ int pdf_adjust_spacing,
+ halfword par_shape_ptr,
+ int adj_demerits,
+ int pdf_protrude_chars,
+ int line_penalty,
+ int last_line_fit,
+ int double_hyphen_demerits,
+ int final_hyphen_demerits,
+ int hang_indent,
+ int hsize,
+ int hang_after,
+ halfword left_skip,
+ halfword right_skip,
+ int pdf_each_line_height,
+ int pdf_each_line_depth,
+ int pdf_first_line_height,
+ int pdf_last_line_depth,
+ halfword inter_line_penalties_ptr,
+ int inter_line_penalty,
+ int club_penalty,
+ halfword club_penalties_ptr,
+ halfword display_widow_penalties_ptr,
+ halfword widow_penalties_ptr,
+ int display_widow_penalty,
+ int widow_penalty,
+ int broken_penalty, halfword final_par_glue);
+
+void ext_post_line_break(boolean d,
+ int right_skip,
+ int left_skip,
+ int pdf_protrude_chars,
+ halfword par_shape_ptr,
+ int pdf_adjust_spacing,
+ int pdf_each_line_height,
+ int pdf_each_line_depth,
+ int pdf_first_line_height,
+ int pdf_last_line_depth,
+ halfword inter_line_penalties_ptr,
+ int inter_line_penalty,
+ int club_penalty,
+ halfword club_penalties_ptr,
+ halfword display_widow_penalties_ptr,
+ halfword widow_penalties_ptr,
+ int display_widow_penalty,
+ int widow_penalty,
+ int broken_penalty,
+ halfword final_par_glue,
+ halfword best_bet,
+ halfword last_special_line,
+ scaled second_width,
+ scaled second_indent,
+ scaled first_width,
+ scaled first_indent, halfword best_line);
+
+halfword lua_hpack_filter(halfword head_node, scaled size, int pack_type,
+ int extrainfo);
+void lua_node_filter(int filterid, int extrainfo, halfword head_node,
+ halfword * tail_node);
+halfword lua_vpack_filter(halfword head_node, scaled size, int pack_type,
+ scaled maxd, int extrainfo);
+void lua_node_filter_s(int filterid, char *extrainfo, halfword head_node,
+ halfword * tail_node);
+
+void load_tex_patterns(int curlang, halfword head);
+void load_tex_hyphenation(int curlang, halfword head);
+
+/* textcodes.c */
+void set_lc_code(integer n, halfword v, quarterword gl);
+halfword get_lc_code(integer n);
+void set_uc_code(integer n, halfword v, quarterword gl);
+halfword get_uc_code(integer n);
+void set_sf_code(integer n, halfword v, quarterword gl);
+halfword get_sf_code(integer n);
+void set_cat_code(integer h, integer n, halfword v, quarterword gl);
+halfword get_cat_code(integer h, integer n);
+void unsave_cat_codes(integer h, quarterword gl);
+int valid_catcode_table(int h);
+void unsave_text_codes(quarterword grouplevel);
+void initialize_text_codes(void);
+void dump_text_codes(void);
+void undump_text_codes(void);
+
+/* mathcodes.c */
+
+void set_math_code(integer n, halfword v, quarterword gl);
+halfword get_math_code(integer n);
+void set_del_code(integer n, halfword v, halfword w, quarterword gl);
+halfword get_del_code_a(integer n);
+halfword get_del_code_b(integer n);
+void unsave_math_codes(quarterword grouplevel);
+void initialize_math_codes(void);
+void dump_math_codes(void);
+void undump_math_codes(void);
+
+/* texlang.c */
+
+void dump_language_data(void);
+void undump_language_data(void);
+char *exception_strings(struct tex_language *lang);
+
+/* llualib.c */
+
+void dump_luac_registers(void);
+void undump_luac_registers(void);
+
+/* ltexlib.c */
+void luacstring_start(int n);
+void luacstring_close(int n);
+int luacstring_detokenized(void);
+int luacstring_defaultcattable(void);
+integer luacstring_cattable(void);
+int luacstring_simple(void);
+int luacstring_penultimate(void);
+int luacstring_input(void);
+
+
+/* luatoken.c */
+void do_get_token_lua(integer callback_id);
+
+/* luanode.c */
+int visible_last_node_type(int n);
+void print_node_mem_stats(int n, int o);
+
+/* writeimg.c */
+integer epdf_orig_y(integer i);
+integer epdf_orig_x(integer i);
+
+/* limglib.c */
+void lua_setximage(integer i);
+
+/* vfovf.c */
+void vf_expand_local_fonts(internal_font_number f);
+internal_font_number letter_space_font(halfword u, internal_font_number f,
+ integer e);
+internal_font_number auto_expand_font(internal_font_number f, integer e);
+str_number expand_font_name(internal_font_number f, integer e);
+void pdf_check_vf_cur_val(void);
+
+/* ltexiolib.c */
+void flush_loggable_info(void);
+
+/* luastuff.c */
+void closelua(int n);
+void luacall(int n, int s);
+void luatokencall(int n, int p);
+
+void tex_error(char *msg, char **hlp);
+
+scaled divide_scaled(scaled s, scaled m, integer dd);
+scaled divide_scaled_n(double s, double m, double d);
+
+/* texpdf.c */
+void pdf_print_char(internal_font_number f, integer c);
+void pdf_print(str_number n);
+void pdf_print_str(str_number n);
+void pdf_print_int(integer n);
+
+/* textoken.c */
+
+void get_next(void);
+void get_token_lua(void);
+
+#endif /* PDFTEXLIB */