1 /*
2 Copyright 1996-2014 Han The Thanh, <thanh@pdftex.org>
3 
4 This file is part of pdfTeX.
5 
6 pdfTeX is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10 
11 pdfTeX is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License along
17 with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 typedef signed char TTF_CHAR;
21 typedef unsigned char TTF_BYTE;
22 typedef signed short TTF_SHORT;
23 typedef unsigned short TTF_USHORT;
24 typedef signed long TTF_LONG;
25 typedef unsigned long TTF_ULONG;
26 typedef unsigned long TTF_FIXED;
27 typedef unsigned short TTF_FUNIT;
28 typedef signed short TTF_FWORD;
29 typedef unsigned short TTF_UFWORD;
30 typedef unsigned short TTF_F2DOT14;
31 
32 #define TTF_CHAR_SIZE    1
33 #define TTF_BYTE_SIZE    1
34 #define TTF_SHORT_SIZE   2
35 #define TTF_USHORT_SIZE  2
36 #define TTF_LONG_SIZE    4
37 #define TTF_ULONG_SIZE   4
38 #define TTF_FIXED_SIZE   4
39 #define TTF_FWORD_SIZE   2
40 #define TTF_UFWORD_SIZE  2
41 #define TTF_F2DOT14_SIZE 2
42 
43 #define ARG_1_AND_2_ARE_WORDS       (1<<0)
44 #define ARGS_ARE_XY_VALUES          (1<<1)
45 #define ROUND_XY_TO_GRID            (1<<2)
46 #define WE_HAVE_A_SCALE             (1<<3)
47 #define RESERVED                    (1<<4)
48 #define MORE_COMPONENTS             (1<<5)
49 #define WE_HAVE_AN_X_AND_Y_SCALE    (1<<6)
50 #define WE_HAVE_A_TWO_BY_TWO        (1<<7)
51 #define WE_HAVE_INSTRUCTIONS        (1<<8)
52 #define USE_MY_METRICS              (1<<9)
53 
54 #define get_type(t)     ((t)ttf_getnum(t##_SIZE))
55 #define ttf_skip(n)     ttf_getnum(n)
56 
57 #define get_byte()      get_type(TTF_BYTE)
58 #define get_char()      get_type(TTF_CHAR)
59 #define get_ushort()    get_type(TTF_USHORT)
60 #define get_short()     get_type(TTF_SHORT)
61 #define get_ulong()     get_type(TTF_ULONG)
62 #define get_long()      get_type(TTF_LONG)
63 #define get_fixed()     get_type(TTF_FIXED)
64 #define get_funit()     get_type(TTF_FUNIT)
65 #define get_fword()     get_type(TTF_FWORD)
66 #define get_ufword()    get_type(TTF_UFWORD)
67 #define get_f2dot14()   get_type(TTF_F2DOT14)
68 
69 #define put_num(t,n)    ((t)ttf_putnum(t##_SIZE, n))
70 
71 #define put_char(n)     (void)put_num(TTF_CHAR, n)
72 #define put_byte(n)     (void)put_num(TTF_BYTE, n)
73 #define put_short(n)    put_num(TTF_SHORT, n)
74 #define put_ushort(n)   put_num(TTF_USHORT, n)
75 #define put_long(n)     put_num(TTF_LONG, n)
76 #define put_ulong(n)    (void)put_num(TTF_ULONG, n)
77 #define put_fixed(n)    (void)put_num(TTF_FIXED, n)
78 #define put_funit(n)    put_num(TTF_FUNIT, n)
79 #define put_fword(n)    put_num(TTF_FWORD, n)
80 #define put_ufword(n)   (void)put_num(TTF_UFWORD, n)
81 #define put_f2dot14(n)  put_num(TTF_F2DOT14, n)
82 
83 #define copy_byte()     put_byte(get_byte())
84 #define copy_char()     put_char(get_char())
85 #define copy_ushort()   put_ushort(get_ushort())
86 #define copy_short()    put_short(get_short())
87 #define copy_ulong()    put_ulong(get_ulong())
88 #define copy_long()     put_long(get_long())
89 #define copy_fixed()    put_fixed(get_fixed())
90 #define copy_funit()    put_funit(get_funit())
91 #define copy_fword()    put_fword(get_fword())
92 #define copy_ufword()   put_ufword(get_ufword())
93 #define copy_f2dot14()  put_f2dot14(get_f2dot14())
94 
95 #define is_unicode_mapping(e) \
96     (e->platform_id == 0 || (e->platform_id == 3 || e->encoding_id == 1))
97 
98 
99 #define NMACGLYPHS      258
100 #define TABDIR_OFF      12
101 #define ENC_BUF_SIZE    1024
102 
103 #define GLYPH_PREFIX_INDEX    "index"
104 #define GLYPH_PREFIX_UNICODE  "uni"
105 
106 typedef struct {
107     char tag[4];
108     TTF_ULONG checksum;
109     TTF_ULONG offset;
110     TTF_ULONG length;
111 } dirtab_entry;
112 
113 typedef struct {
114     TTF_USHORT platform_id;
115     TTF_USHORT encoding_id;
116     TTF_ULONG offset;
117     TTF_USHORT format;
118 } cmap_entry;
119 
120 typedef struct {
121     TTF_USHORT endCode;
122     TTF_USHORT startCode;
123     TTF_USHORT idDelta;
124     TTF_USHORT idRangeOffset;
125 } seg_entry;
126