beta-0.89.2
[luatex.git] / source / texk / web2c / luatexdir / font / luatexfont.h
blobbd84a61672c2279f30f8589dad59f3efc605d483
1 /* luatexfont.h --- General font definitions
3 Copyright 2008-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 LUATEXFONT_H
22 # define LUATEXFONT_H
24 # include "ptexlib.h"
25 # ifndef pdfTeX
26 # define pdfTeX
27 # include "sfnt.h" /* which wants that pdfTeX is defined */
28 # undef pdfTeX
29 # else
30 # include "sfnt.h"
31 # endif
33 /**********************************************************************/
35 # define ASCENT_CODE 0
36 # define CAPHEIGHT_CODE 1
37 # define DESCENT_CODE 2
38 # define ITALIC_ANGLE_CODE 3
39 # define STEMV_CODE 4
40 # define XHEIGHT_CODE 5
41 # define FONTBBOX1_CODE 6
42 # define FONTBBOX2_CODE 7
43 # define FONTBBOX3_CODE 8
44 # define FONTBBOX4_CODE 9
45 # define FONTNAME_CODE 10
46 # define GEN_KEY_NUM (XHEIGHT_CODE + 1)
47 # define MAX_KEY_CODE (FONTBBOX1_CODE + 1)
48 # define INT_KEYS_NUM (FONTBBOX4_CODE + 1)
49 # define FONT_KEYS_NUM (FONTNAME_CODE + 1)
51 # define FD_FLAGS_NOT_SET_IN_MAPLINE -1
52 # define FD_FLAGS_DEFAULT_EMBED 4 /* a symbol font */
53 # define FD_FLAGS_DEFAULT_NON_EMBED 0x22
54 /* a nonsymbolic serif font */
56 /**********************************************************************/
58 typedef struct {
59 const char *pdfname;
60 const char *t1name;
61 boolean valid;
62 } key_entry;
64 extern const key_entry font_key[FONT_KEYS_NUM];
66 typedef struct _subfont_entry {
67 char *infix; /* infix for this subfont, eg "01" */
68 long charcodes[256]; /* the mapping for this subfont as read from sfd */
69 struct _subfont_entry *next;
70 } subfont_entry;
72 # include "mapfile.h"
74 typedef struct {
75 char *name; /* sfd name, eg "Unicode" */
76 subfont_entry *subfont; /* linked list of subfonts */
77 } sfd_entry;
79 typedef struct {
80 int val; /* value */
81 boolean set; /* true if parameter has been set */
82 } intparm;
84 typedef struct {
85 int fe_objnum; /* object number */
86 char *name; /* encoding file name */
87 char **glyph_names; /* array of glyph names */
88 struct avl_table *tx_tree; /* tree of encoding positions marked as used by TeX */
89 } fe_entry;
91 typedef struct fd_entry_ {
92 int fd_objnum; /* object number of the font descriptor object */
93 char *fontname; /* /FontName (without subset tag) */
94 char *subset_tag; /* 6-character subset tag */
95 boolean ff_found;
96 int ff_objnum; /* object number of the font program stream */
97 boolean all_glyphs; /* embed all glyphs? */
98 boolean write_ttf_glyph_names;
99 intparm font_dim[FONT_KEYS_NUM];
100 fe_entry *fe; /* pointer to encoding structure */
101 char **builtin_glyph_names; /* builtin encoding as read from the Type1 font file */
102 fm_entry *fm; /* pointer to font map structure */
103 struct avl_table *tx_tree; /* tree of non-reencoded TeX characters marked as used */
104 struct avl_table *gl_tree; /* tree of all marked glyphs */
105 } fd_entry;
107 typedef struct fo_entry_ {
108 int fo_objnum; /* object number of the font dictionary */
109 internal_font_number tex_font; /* needed only for \pdffontattr{} */
110 fm_entry *fm; /* pointer to font map structure for this font dictionary */
111 fd_entry *fd; /* pointer to /FontDescriptor object structure */
112 fe_entry *fe; /* pointer to encoding structure */
113 int cw_objnum; /* object number of the font program object */
114 int first_char; /* first character used in this font */
115 int last_char; /* last character used in this font */
116 struct avl_table *tx_tree; /* tree of non-reencoded TeX characters marked as used */
117 int tounicode_objnum; /* object number of ToUnicode */
118 } fo_entry;
120 typedef struct {
121 char *name; /* glyph name */
122 long code; /* -1 = undefined; -2 = multiple codes, stored
123 as string in unicode_seq; otherwise unicode value */
124 char *unicode_seq; /* multiple unicode sequence */
125 } glyph_unicode_entry;
127 typedef struct glw_entry_ { /* subset glyphs for inclusion in CID-based fonts */
128 unsigned int id; /* glyph CID */
129 signed int wd; /* glyph width in 1/1000 em parts */
130 } glw_entry;
132 typedef struct {
133 int charcode, cwidth, cheight, xoff, yoff, xescape, rastersize;
134 halfword *raster;
135 } chardesc;
137 /**********************************************************************/
139 # include "texfont.h"
141 /* tounicode.c */
142 int write_cid_tounicode(PDF, fo_entry *, internal_font_number);
143 void glyph_unicode_free(void);
144 void def_tounicode(str_number, str_number);
145 int write_tounicode(PDF, char **, char *);
147 /* vfpacket.c */
148 void replace_packet_fonts(internal_font_number f, int *old_fontid,
149 int *new_fontid, int count);
150 int *packet_local_fonts(internal_font_number f, int *num);
152 int packet_cur_s; /* current |do_vf_packet()| recursion level */
153 int packet_stack_ptr; /* pointer into |packet_stack| */
154 vf_struct *new_vfstruct(void);
156 /* writecff.c */
157 void writetype1w(PDF pdf, fd_entry * fd);
159 /* writetype0.c */
160 void writetype0(PDF pdf, fd_entry * fd);
162 /* writefont.c */
163 void do_pdf_font(PDF, internal_font_number);
164 fd_entry *lookup_fd_entry(char *);
165 fd_entry *new_fd_entry(void);
166 void write_fontstuff(PDF);
167 void register_fd_entry(fd_entry * fd);
169 /* writet1.c */
170 boolean t1_subset(char *, char *, unsigned char *);
171 char **load_enc_file(char *);
172 void writet1(PDF, fd_entry *);
173 void t1_free(void);
174 extern int t1_length1, t1_length2, t1_length3;
176 /* writetype2.c */
177 boolean writetype2(PDF, fd_entry *);
178 extern unsigned long cidtogid_obj;
179 pdf_obj *pdf_new_stream(void);
180 void pdf_add_stream(pdf_obj * stream, unsigned char *buf, long len);
181 void pdf_release_obj(pdf_obj * stream);
182 unsigned long ttc_read_offset(sfnt * sfont, int ttc_idx, fd_entry *fd);
184 /* subfont.c */
185 void sfd_free(void);
186 boolean handle_subfont_fm(fm_entry *, int);
188 /* writeenc.c */
189 fe_entry *get_fe_entry(char *);
190 void enc_free(void);
191 void write_fontencodings(PDF pdf);
193 /* writettf.c */
194 void writettf(PDF, fd_entry *);
195 void writeotf(PDF, fd_entry *);
196 void ttf_free(void);
197 extern int ttf_length;
199 /* pkin.c */
200 int readchar(boolean, chardesc *);
202 /* macnames.c */
203 extern char notdef[];
205 /* vfovf.c */
206 internal_font_number letter_space_font(internal_font_number f, int e, boolean nolig);
207 void pdf_check_vf(internal_font_number f);
208 internal_font_number copy_font_info(internal_font_number f);
210 /* writet3.c */
211 extern FILE *t3_file;
212 void writet3(PDF, internal_font_number);
214 extern unsigned char *t3_buffer;
215 extern int t3_size;
216 extern int t3_curbyte;
218 # define t3_read_file() readbinfile(t3_file, &t3_buffer, &t3_size)
219 # define t3_close() xfclose(t3_file, cur_file_name)
220 # define t3_getchar() t3_buffer[t3_curbyte++]
221 # define t3_eof() (t3_curbyte>t3_size)
223 # define t3_prefix(s) (!strncmp(t3_line_array, s, strlen(s)))
224 # define t3_putchar(c) pdfout(c)
226 #endif /* LUATEXFONT_H */