summaryrefslogtreecommitdiff
path: root/src/pdflib/pdflib/p_font.h
blob: 3dc4d91d8afc7cd393d19be35da8cf72e3c726bc (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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
/*---------------------------------------------------------------------------*
 |              PDFlib - A library for generating PDF on the fly             |
 +---------------------------------------------------------------------------+
 | Copyright (c) 1997-2006 Thomas Merz and PDFlib GmbH. All rights reserved. |
 +---------------------------------------------------------------------------+
 |                                                                           |
 |    This software is subject to the PDFlib license. It is NOT in the       |
 |    public domain. Extended versions and commercial licenses are           |
 |    available, please check http://www.pdflib.com.                         |
 |                                                                           |
 *---------------------------------------------------------------------------*/

/* $Id: p_font.h,v 1.1 2008/10/17 06:11:49 scuri Exp $
 *
 * Header file for the PDFlib font subsystem
 *
 */

#ifndef P_FONT_H
#define P_FONT_H

#define PDF_DEFAULT_CHAR PDC_UNICODE_SPACE

/* internal maximal length of fontnames */
#define PDF_MAX_FONTNAME        128

/* last text rendering mode number */
#define  PDF_LAST_TRMODE  7

/* minimal number of glyphs for appropriate encoding */
#define  PDF_MIN_GLYPHS  5

typedef enum
{
    font_ascender  = (1<<0),
    font_descender = (1<<1),
    font_capheight = (1<<2),
    font_xheight   = (1<<3),
    font_linegap   = (1<<4),

    font_italic    = (1<<8),
    font_bold      = (1<<9)
}
pdf_font_values;

typedef struct pdf_t3glyph_s pdf_t3glyph;

/* font options */
struct pdf_font_options_s
{
    pdc_bool embedding;
    char *encoding;
    int flags;
    char *fontname;
    fnt_fontstyle fontstyle;
    pdc_bool fontwarning;
    int mask;
    int monospace;
    int ascender;
    int descender;
    int capheight;
    int xheight;
    int linegap;
    pdc_bool auxiliary;
};

/* Type3 font structures */
struct pdf_t3glyph_s
{
    char *name;
    pdc_id charproc_id;
    pdc_scalar wx;
    pdc_scalar llx;
    pdc_scalar lly;
    pdc_scalar urx;
    pdc_scalar ury;
    pdc_scalar width;
    int pass;                   /* 0, 1, 2 */
};

struct pdf_t3font_s
{
    pdf_t3glyph *glyphs;        /* dynamically growing glyph table */
    int capacity;               /* current number of slots */
    int next_glyph;             /* next available slot */
    int curr_glyph;             /* slot of current glyph */

    pdc_id charprocs_id;        /* id of /CharProcs dict */
    pdc_id res_id;              /* id of /Resources dict */
    pdc_bool colorized;         /* glyphs colorized */
    int pass;                   /* 0, 1, 2 */

};

/* pdflib font structure */
struct pdf_font_s
{
    /* pdcore font structure */
    fnt_font ft;

    /* font options */
    pdf_font_options opt;       /* pdflib font options */
    pdc_bool verbose;           /* put out warning/error messages */

    /* special font names */
    char *apiname;              /* font name specified in API call */
    const char *filename;       /* name of font file, copy of ft.filename */
    char *metricfilename;       /* name of metric font file */

    /* font control */
    pdc_bool used_in_formfield;    /* this font is in use in form field */
    pdc_bool used_in_current_doc;  /* this font is in use in current doc. */
    pdc_bool used_on_current_page; /* this font is in use on current page */
    pdc_id obj_id;                 /* object id of this font */

    /* CFF table */
    long cff_offset;            /* start of CFF table in font */
    size_t cff_length;          /* length of CFF table in font */

    /* Type3 font */
    pdf_t3font *t3font;         /* Type3 font data */
    pdc_bool hasoriginal;       /* has the original Type3 font data */

    /* pdflib encoding and CMap properties */
    char *encapiname;           /* encoding name specified in API call */
    char *outcmapname;          /* output CMap namel */
    int codepage;               /* OEM multi byte code-page number */
    pdc_encoding towinansi;     /* convert to 'towinansi' enc. for output */
    pdc_bool hasnomac;          /* TT font has no macroman cmap */
    pdc_bool passthrough;       /* text will be passed through as is */
    pdc_bool unibyte;           /* take Unicode encoding as byte encoding */
    pdc_bool asciispace;        /* encoding has space at x20 */
    pdc_bool issemantic;        /* encoding is Unicode interpretable */
    pdc_bool widthsmissing;     /* GID widths not available */
    pdc_ulong missingglyphs;    /* bit mask for missing new AGL glyphs */
    int metricflags;            /* flags for faked font values */
    int supplement;             /* supplement number of CMap
                                 * = -1: Identity-H/V */
    pdc_encoding symenc;        /* font encoding for symbol fonts */
    int replacementchar;        /* replacement character */
    int replacementcode;        /* replacement code or glyph id resp. */

    /* encoding and glyph control */
    int codesize;               /* code size */
                                /* = 0: unknown, no Unicode CMap */
                                /* = 1: 1 byte encoding */
                                /* = 2: 2 byte encoding */
    int lastcode;               /* AFM: last byte code for generating runtime */
                                /* byte encoding. = -1: ignore */
    int gid0code;               /* code für gid 0 (because of Type3 fonts) */
    pdc_byte *usedgids;         /* used Glyph IDs for font subsetting */
    pdc_bool expectglyphs;      /* TT: glyph id text strings are expected */
    pdc_bool iscidfont;         /* is CID font */

};

/* p_truetype.c */
pdc_bool        pdf_get_metrics_tt(PDF *p, pdf_font *font,
                    const char *fontname, pdc_encoding enc,
                    const char *filename);
int             pdf_check_tt_hostfont(PDF *p, const char *hostname);

/* p_afm.c */
pdc_bool        pdf_process_metrics_data(PDF *p, pdf_font *font,
                    const char *fontname);
pdc_bool        pdf_get_metrics_afm(PDF *p, pdf_font *font,
                    const char *fontname, pdc_encoding enc,
                    const char *filename, pdc_bool requested);

/* p_pfm.c */
pdc_bool        pdf_check_pfm_encoding(PDF *p, pdf_font *font,
                       pdc_encoding enc);
pdc_bool        pdf_get_metrics_pfm(PDF *p, pdf_font *font,
                    const char *fontname, pdc_encoding enc,
                    const char *filename, pdc_bool requested);

/* p_cid.c */
pdc_bool pdf_handle_cidfont(PDF *p, const char *fontname,
        const char *encoding, pdc_encoding enc, pdf_font *font, int *o_slot,
        pdc_encoding *newenc);
void pdf_put_cidglyph_widths(PDF *p, pdf_font *font);

/* p_font.c */
void pdf_get_page_fonts(PDF *p, pdf_reslist *rl);
void pdf_parse_font_options(PDF *p, const char *optlist);
double pdf_get_font_float_option(PDF *p, pdf_font_optflags fflags);
pdc_bool pdf_check_font_embedding(PDF *p, pdf_font *font, const char *fontname);
pdc_bool pdf_make_fontflag(PDF *p, pdf_font *font);
int pdf_get_code_or_glyphid(PDF *p, pdf_font *font, pdc_encodingvector *ev,
        pdc_ushort uv);
void pdf_set_replchar(PDF *p, pdf_font *font);
void pdf_font_issemantic(PDF *p, pdf_font *font);
void pdf_font_set_missvalues(PDF *p, pdf_font *font);
pdc_bool pdf_font_get_is_faked(pdf_font *font, pdf_font_values flag);
double pdf_font_get_metric_value(int value);
const char *pdf_get_encoding_name(PDF *p, pdc_encoding enc, pdf_font *font);
const char *pdf_get_font_char_option(PDF *p, pdf_font_optflags fflags);
const char *pdf_get_pdf_fontname(pdf_font *font);
char *pdf_get_encoding_adaptname(PDF *p, pdc_encoding enc, pdf_font *font,
        const char *fontname);
pdc_encodingvector *pdf_create_font_encoding(PDF *p, pdc_encoding enc,
        pdf_font *font, const char *fontname, pdc_bool kreg);
void pdf_transform_fontwidths(PDF *p, pdf_font *font,
        pdc_encodingvector *evto, pdc_encodingvector *evfrom);

/* p_type1.c */
pdc_bool pdf_t1open_fontfile(PDF *p, pdf_font *font, const char *fontname,
                             PDF_data_source *t1src, pdc_bool requested);
pdc_bool pdf_make_t1src(PDF *p, pdf_font *font, PDF_data_source *t1src);
void     pdf_put_length_objs(PDF *p, PDF_data_source *t1src,
		     pdc_id length1_id, pdc_id length2_id, pdc_id length3_id);

/* p_type3.c */
void pdf_cleanup_t3font(PDF *p, pdf_t3font *t3font);
void pdf_init_type3(PDF *p);
pdc_bool pdf_handle_t3font(PDF *p, const char *fontname, pdc_encoding enc,
                      pdf_font *font, int *slot);
pdc_bool pdf_isvalid_font(PDF *p, int slot);

/* p_subsett.c */
int pdf_prepare_ttfont(PDF *p, pdf_font *font);


#endif  /* P_FONT_H */