/* luatexfont.h --- General font definitions Copyright 2008-2010 Taco Hoekwater 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 . */ /* $Id: luatexfont.h 3790 2010-08-02 20:00:17Z oneiros $ */ #ifndef LUATEXFONT_H # define LUATEXFONT_H # include "ptexlib.h" # ifndef pdfTeX # define pdfTeX # include "sfnt.h" /* which wants that pdfTeX is defined */ # undef pdfTeX # else # include "sfnt.h" # endif /**********************************************************************/ # define ASCENT_CODE 0 # define CAPHEIGHT_CODE 1 # define DESCENT_CODE 2 # define ITALIC_ANGLE_CODE 3 # define STEMV_CODE 4 # define XHEIGHT_CODE 5 # define FONTBBOX1_CODE 6 # define FONTBBOX2_CODE 7 # define FONTBBOX3_CODE 8 # define FONTBBOX4_CODE 9 # define FONTNAME_CODE 10 # define GEN_KEY_NUM (XHEIGHT_CODE + 1) # define MAX_KEY_CODE (FONTBBOX1_CODE + 1) # define INT_KEYS_NUM (FONTBBOX4_CODE + 1) # define FONT_KEYS_NUM (FONTNAME_CODE + 1) # define FD_FLAGS_NOT_SET_IN_MAPLINE -1 # define FD_FLAGS_DEFAULT_EMBED 4 /* a symbol font */ # define FD_FLAGS_DEFAULT_NON_EMBED 0x22 /* a nonsymbolic serif font */ /**********************************************************************/ typedef struct { const char *pdfname; const char *t1name; boolean valid; } key_entry; extern const key_entry font_key[FONT_KEYS_NUM]; typedef struct _subfont_entry { char *infix; /* infix for this subfont, eg "01" */ long charcodes[256]; /* the mapping for this subfont as read from sfd */ struct _subfont_entry *next; } subfont_entry; # include "mapfile.h" typedef struct { char *name; /* sfd name, eg "Unicode" */ subfont_entry *subfont; /* linked list of subfonts */ } sfd_entry; typedef struct { int val; /* value */ boolean set; /* true if parameter has been set */ } intparm; typedef struct { int 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 fd_entry_ { int 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; int ff_objnum; /* object number of the font program stream */ 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_ { int fo_objnum; /* object number of the font dictionary */ internal_font_number 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 */ int cw_objnum; /* object number of the font program object */ int first_char; /* first character used in this font */ int last_char; /* last character used in this font */ struct avl_table *tx_tree; /* tree of non-reencoded TeX characters marked as used */ int tounicode_objnum; /* object number of ToUnicode */ } fo_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 glw_entry_ { /* subset glyphs for inclusion in CID-based fonts */ unsigned int id; /* glyph CID */ signed int wd; /* glyph width in 1/1000 em parts */ } glw_entry; typedef struct { int charcode, cwidth, cheight, xoff, yoff, xescape, rastersize; halfword *raster; } chardesc; /**********************************************************************/ # include "texfont.h" /* tounicode.c */ int write_cid_tounicode(PDF, fo_entry *, internal_font_number); void glyph_unicode_free(void); void def_tounicode(str_number, str_number); int write_tounicode(PDF, char **, char *); /* vfpacket.c */ void replace_packet_fonts(internal_font_number f, int *old_fontid, int *new_fontid, int count); int *packet_local_fonts(internal_font_number f, int *num); /* writecff.c */ void writetype1w(PDF pdf, fd_entry * fd); /* writetype0.c */ void writetype0(PDF pdf, fd_entry * fd); /* writefont.c */ void do_pdf_font(PDF, internal_font_number); fd_entry *lookup_fd_entry(char *); fd_entry *new_fd_entry(void); void write_fontstuff(PDF); void register_fd_entry(fd_entry * fd); /* writet1.c */ boolean t1_subset(char *, char *, unsigned char *); char **load_enc_file(char *); void writet1(PDF, fd_entry *); void t1_free(void); extern int t1_length1, t1_length2, t1_length3; /* writetype2.c */ void writetype2(PDF, fd_entry *); extern unsigned long cidtogid_obj; pdf_obj *pdf_new_stream(void); void pdf_add_stream(pdf_obj * stream, unsigned char *buf, long len); void pdf_release_obj(pdf_obj * stream); /* subfont.c */ void sfd_free(void); boolean handle_subfont_fm(fm_entry *, int); /* writeenc.c */ fe_entry *get_fe_entry(char *); void enc_free(void); void write_fontencodings(PDF pdf); /* writettf.c */ void writettf(PDF, fd_entry *); void writeotf(PDF, fd_entry *); void ttf_free(void); extern int ttf_length; /* pkin.c */ int readchar(boolean, chardesc *); /* macnames.c */ extern char notdef[]; /* vfovf.c */ void vf_expand_local_fonts(internal_font_number f); internal_font_number letter_space_font(internal_font_number f, int e, boolean nolig); internal_font_number auto_expand_font(internal_font_number f, int e); void pdf_check_vf(internal_font_number f); internal_font_number copy_font_info(internal_font_number f); /* writet3.c */ extern FILE *t3_file; void writet3(PDF, internal_font_number); extern unsigned char *t3_buffer; extern int t3_size; extern int t3_curbyte; # define t3_read_file() readbinfile(t3_file, &t3_buffer, &t3_size) # define t3_close() xfclose(t3_file, cur_file_name) # define t3_getchar() t3_buffer[t3_curbyte++] # define t3_eof() (t3_curbyte>t3_size) # define t3_prefix(s) (!strncmp(t3_line_array, s, strlen(s))) # define t3_putchar(c) pdfout(c) #endif /* LUATEXFONT_H */