summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/font/writettf.h
blob: 482c1d192dcefe2e9f7feb68d94e5046b587f49e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/* writettf.h
   
   Copyright 1996-2006 Han The Thanh <thanh@pdftex.org>
   Copyright 2006-2008 Taco Hoekwater <taco@luatex.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 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 <http://www.gnu.org/licenses/>. */


#ifndef WRITETTF_H
#  define WRITETTF_H 1
typedef signed char TTF_CHAR;
typedef unsigned char TTF_BYTE;
typedef signed short TTF_SHORT;
typedef unsigned short TTF_USHORT;
typedef signed long TTF_LONG;
typedef unsigned long TTF_ULONG;
typedef unsigned long TTF_FIXED;
typedef unsigned short TTF_FUNIT;
typedef signed short TTF_FWORD;
typedef unsigned short TTF_UFWORD;
typedef unsigned short TTF_F2DOT14;

#  define TTF_CHAR_SIZE    1
#  define TTF_BYTE_SIZE    1
#  define TTF_SHORT_SIZE   2
#  define TTF_USHORT_SIZE  2
#  define TTF_LONG_SIZE    4
#  define TTF_ULONG_SIZE   4
#  define TTF_FIXED_SIZE   4
#  define TTF_FWORD_SIZE   2
#  define TTF_UFWORD_SIZE  2
#  define TTF_F2DOT14_SIZE 2

/*
 * TrueType outline data.
 */
#  define ARG_1_AND_2_ARE_WORDS       (1<<0)
#  define ARGS_ARE_XY_VALUES          (1<<1)
#  define ROUND_XY_TO_GRID            (1<<2)
#  define WE_HAVE_A_SCALE             (1<<3)
#  define RESERVED                    (1<<4)
#  define MORE_COMPONENTS             (1<<5)
#  define WE_HAVE_AN_X_AND_Y_SCALE    (1<<6)
#  define WE_HAVE_A_TWO_BY_TWO        (1<<7)
#  define WE_HAVE_INSTRUCTIONS        (1<<8)
#  define USE_MY_METRICS              (1<<9)

#  define get_type(t)     ((t)ttf_getnum(t##_SIZE))
#  define ttf_skip(n)     ttf_getnum(n)

#  define get_byte()      get_type(TTF_BYTE)
#  define get_char()      get_type(TTF_CHAR)
#  define get_ushort()    get_type(TTF_USHORT)
#  define get_short()     get_type(TTF_SHORT)
#  define get_ulong()     get_type(TTF_ULONG)
#  define get_long()      get_type(TTF_LONG)
#  define get_fixed()     get_type(TTF_FIXED)
#  define get_funit()     get_type(TTF_FUNIT)
#  define get_fword()     get_type(TTF_FWORD)
#  define get_ufword()    get_type(TTF_UFWORD)
#  define get_f2dot14()   get_type(TTF_F2DOT14)

#  define put_num(t,n)    ((t)ttf_putnum(pdf,t##_SIZE, n))

#  define put_char(n)     (void)put_num(TTF_CHAR, n)
#  define put_byte(n)     (void)put_num(TTF_BYTE, n)
#  define put_short(n)    put_num(TTF_SHORT, n)
#  define put_ushort(n)   put_num(TTF_USHORT, n)
#  define put_long(n)     put_num(TTF_LONG, n)
#  define put_ulong(n)    (void)put_num(TTF_ULONG, n)
#  define put_fixed(n)    (void)put_num(TTF_FIXED, n)
#  define put_funit(n)    put_num(TTF_FUNIT, n)
#  define put_fword(n)    put_num(TTF_FWORD, n)
#  define put_ufword(n)   (void)put_num(TTF_UFWORD, n)
#  define put_f2dot14(n)  put_num(TTF_F2DOT14, n)

#  define copy_byte()     put_byte(get_byte())
#  define copy_char()     put_char(get_char())
#  define copy_ushort()   put_ushort(get_ushort())
#  define copy_short()    put_short(get_short())
#  define copy_ulong()    put_ulong(get_ulong())
#  define copy_long()     put_long(get_long())
#  define copy_fixed()    put_fixed(get_fixed())
#  define copy_funit()    put_funit(get_funit())
#  define copy_fword()    put_fword(get_fword())
#  define copy_ufword()   put_ufword(get_ufword())
#  define copy_f2dot14()  put_f2dot14(get_f2dot14())

#  define is_unicode_mapping(e) \
    (e->platform_id == 0 || (e->platform_id == 3 || e->encoding_id == 1))


#  define NMACGLYPHS      258
#  define TABDIR_OFF      12
#  define ENC_BUF_SIZE    1024

#  define GLYPH_PREFIX_INDEX    "index"
#  define GLYPH_PREFIX_UNICODE  "uni"

typedef struct {
    char tag[4];
    TTF_ULONG checksum;
    TTF_ULONG offset;
    TTF_ULONG length;
} dirtab_entry;

typedef struct {
    TTF_USHORT platform_id;
    TTF_USHORT encoding_id;
    TTF_ULONG offset;
    TTF_USHORT format;
} cmap_entry;

typedef struct {
    TTF_USHORT endCode;
    TTF_USHORT startCode;
    TTF_USHORT idDelta;
    TTF_USHORT idRangeOffset;
} seg_entry;

typedef struct {
    TTF_LONG offset;
    TTF_LONG newoffset;
    TTF_UFWORD advWidth;
    TTF_FWORD lsb;
    const char *name;           /* name of glyph */
    TTF_SHORT newindex;         /* new index of glyph in output file */
    TTF_USHORT name_index;      /* index of name as read from font file */
} glyph_entry;

/* some functions and variables are used by writetype0.c */

extern fd_entry *fd_cur;        /* pointer to the current font descriptor */
extern unsigned char *ttf_buffer;
extern int ttf_size;
extern int ttf_curbyte;
extern glyph_entry *glyph_tab;
extern dirtab_entry *dir_tab;
extern dirtab_entry *ttf_name_lookup(const char *s, boolean required);
extern dirtab_entry *ttf_seek_tab(const char *name, TTF_LONG offset);

extern void otc_read_tabdir(int index);
extern void ttf_read_tabdir(void);
extern void ttf_read_head(void);
extern void ttf_read_hhea(void);
extern void ttf_read_pclt(void);
extern void ttf_read_post(void);

extern FILE *ttf_file;

#  define ttf_open(a)      \
    (ttf_file = fopen((char *) (a), FOPEN_RBIN_MODE))
#  define otf_open(a)      \
    (ttf_file = fopen((char *) (a), FOPEN_RBIN_MODE))
#  define ttf_read_file()  \
    readbinfile(ttf_file,&ttf_buffer,&ttf_size)
#  define ttf_close()      xfclose(ttf_file,cur_file_name)
#  define ttf_getchar()    ttf_buffer[ttf_curbyte++]
#  define ttf_eof()        (ttf_curbyte>ttf_size)

extern long ttf_putnum(PDF pdf, int s, long n);
extern long ttf_getnum(int s);
#endif