2 * << Haru Free PDF Library >> -- hpdf_fontdef.h
4 * URL: http://libharu.org
6 * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
7 * Copyright (c) 2007-2009 Antony Dovgal <tony@daylessday.org>
9 * Permission to use, copy, modify, distribute and sell this software
10 * and its documentation for any purpose is hereby granted without fee,
11 * provided that the above copyright notice appear in all copies and
12 * that both that copyright notice and this permission notice appear
13 * in supporting documentation.
14 * It is provided "as is" without express or implied warranty.
18 #ifndef _HPDF_FONTDEF_H
19 #define _HPDF_FONTDEF_H
21 #include "hpdf_objects.h"
28 #define HPDF_FONTDEF_SIG_BYTES 0x464F4E54L
30 /*------ collection of flags for defining characteristics. ---*/
32 #define HPDF_FONT_FIXED_WIDTH 1
33 #define HPDF_FONT_SERIF 2
34 #define HPDF_FONT_SYMBOLIC 4
35 #define HPDF_FONT_SCRIPT 8
37 #define HPDF_FONT_STD_CHARSET 32
38 #define HPDF_FONT_ITALIC 64
48 #define HPDF_FONT_ALL_CAP 65536
49 #define HPDF_FONT_SMALL_CAP 131072
50 #define HPDF_FONT_FOURCE_BOLD 262144
52 #define HPDF_CID_W_TYPE_FROM_TO 0
53 #define HPDF_CID_W_TYPE_FROM_ARRAY 1
55 /*-- HPDF_FontDef ---------------------------------------*/
57 typedef struct _HPDF_CharData {
63 typedef enum _HPDF_FontDefType {
64 HPDF_FONTDEF_TYPE_TYPE1,
65 HPDF_FONTDEF_TYPE_TRUETYPE,
66 HPDF_FONTDEF_TYPE_CID,
67 HPDF_FONTDEF_TYPE_UNINITIALIZED,
71 typedef struct _HPDF_CID_Width {
76 /*----------------------------------------------------------------------------*/
77 /*----- HPDF_FontDef ---------------------------------------------------------*/
79 typedef struct _HPDF_FontDef_Rec *HPDF_FontDef;
81 typedef void (*HPDF_FontDef_FreeFunc) (HPDF_FontDef fontdef);
83 typedef void (*HPDF_FontDef_CleanFunc) (HPDF_FontDef fontdef);
85 typedef HPDF_STATUS (*HPDF_FontDef_InitFunc) (HPDF_FontDef fontdef);
87 typedef struct _HPDF_FontDef_Rec {
88 HPDF_UINT32 sig_bytes;
89 char base_font[HPDF_LIMIT_MAX_NAME_LEN + 1];
92 HPDF_FontDefType type;
93 HPDF_FontDef_CleanFunc clean_fn;
94 HPDF_FontDef_FreeFunc free_fn;
95 HPDF_FontDef_InitFunc init_fn;
101 HPDF_INT16 italic_angle;
103 HPDF_INT16 avg_width;
104 HPDF_INT16 max_width;
105 HPDF_INT16 missing_width;
107 HPDF_UINT16 x_height;
108 HPDF_UINT16 cap_height;
110 /* the initial value of descriptor entry is NULL.
111 * when first font-object besed on the fontdef object is created,
112 * the font-descriptor object is created and descriptor entry is set.
114 HPDF_Dict descriptor;
123 HPDF_FontDef_Free (HPDF_FontDef fontdef);
127 HPDF_FontDef_Cleanup (HPDF_FontDef fontdef);
131 HPDF_FontDef_Validate (HPDF_FontDef fontdef);
134 /*----------------------------------------------------------------------------*/
135 /*----- HPDF_Type1FontDef ---------------------------------------------------*/
137 typedef struct _HPDF_Type1FontDefAttrRec *HPDF_Type1FontDefAttr;
139 typedef struct _HPDF_Type1FontDefAttrRec {
140 HPDF_BYTE first_char; /* Required */
141 HPDF_BYTE last_char; /* Required */
142 HPDF_CharData *widths; /* Required */
143 HPDF_UINT widths_count;
147 char encoding_scheme[HPDF_LIMIT_MAX_NAME_LEN + 1];
151 HPDF_BOOL is_base14font;
152 HPDF_BOOL is_fixed_pitch;
154 HPDF_Stream font_data;
155 } HPDF_Type1FontDefAttr_Rec;
160 HPDF_Type1FontDef_New (HPDF_MMgr mmgr);
164 HPDF_Type1FontDef_Load (HPDF_MMgr mmgr,
166 HPDF_Stream font_data);
170 HPDF_Type1FontDef_Duplicate (HPDF_MMgr mmgr,
175 HPDF_Type1FontDef_SetWidths (HPDF_FontDef fontdef,
176 const HPDF_CharData *widths);
180 HPDF_Type1FontDef_GetWidthByName (HPDF_FontDef fontdef,
181 const char *gryph_name);
185 HPDF_Type1FontDef_GetWidth (HPDF_FontDef fontdef,
186 HPDF_UNICODE unicode);
190 HPDF_Base14FontDef_New (HPDF_MMgr mmgr,
191 const char *font_name);
195 /*----------------------------------------------------------------------------*/
196 /*----- HPDF_TTFontDef ------------------------------------------------------*/
198 #define HPDF_TTF_FONT_TAG_LEN 6
200 typedef struct _HPDF_TTF_Table {
202 HPDF_UINT32 check_sum;
208 typedef struct _HPDF_TTF_OffsetTbl {
209 HPDF_UINT32 sfnt_version;
210 HPDF_UINT16 num_tables;
211 HPDF_UINT16 search_range;
212 HPDF_UINT16 entry_selector;
213 HPDF_UINT16 range_shift;
214 HPDF_TTFTable *table;
215 } HPDF_TTF_OffsetTbl;
218 typedef struct _HPDF_TTF_CmapRange {
221 HPDF_UINT16 language;
222 HPDF_UINT16 seg_count_x2;
223 HPDF_UINT16 search_range;
224 HPDF_UINT16 entry_selector;
225 HPDF_UINT16 range_shift;
226 HPDF_UINT16 *end_count;
227 HPDF_UINT16 reserved_pad;
228 HPDF_UINT16 *start_count;
229 HPDF_INT16 *id_delta;
230 HPDF_UINT16 *id_range_offset;
231 HPDF_UINT16 *glyph_id_array;
232 HPDF_UINT glyph_id_array_count;
233 } HPDF_TTF_CmapRange;
236 typedef struct _HPDF_TTF_GryphOffsets {
237 HPDF_UINT32 base_offset;
238 HPDF_UINT32 *offsets;
239 HPDF_BYTE *flgs; /* 0: unused, 1: used */
240 } HPDF_TTF_GryphOffsets;
243 typedef struct _HPDF_TTF_LongHorMetric {
244 HPDF_UINT16 advance_width;
246 } HPDF_TTF_LongHorMetric;
249 typedef struct _HPDF_TTF_FontHeader {
250 HPDF_BYTE version_number[4];
251 HPDF_UINT32 font_revision;
252 HPDF_UINT32 check_sum_adjustment;
253 HPDF_UINT32 magic_number;
255 HPDF_UINT16 units_per_em;
256 HPDF_BYTE created[8];
257 HPDF_BYTE modified[8];
262 HPDF_UINT16 mac_style;
263 HPDF_UINT16 lowest_rec_ppem;
264 HPDF_INT16 font_direction_hint;
265 HPDF_INT16 index_to_loc_format;
266 HPDF_INT16 glyph_data_format;
267 } HPDF_TTF_FontHeader;
270 typedef struct _HPDF_TTF_NameRecord {
271 HPDF_UINT16 platform_id;
272 HPDF_UINT16 encoding_id;
273 HPDF_UINT16 language_id;
277 } HPDF_TTF_NameRecord;
280 typedef struct _HPDF_TTF_NamingTable {
283 HPDF_UINT16 string_offset;
284 HPDF_TTF_NameRecord *name_records;
285 } HPDF_TTF_NamingTable;
288 typedef struct _HPDF_TTFontDefAttr_Rec *HPDF_TTFontDefAttr;
290 typedef struct _HPDF_TTFontDefAttr_Rec {
291 char base_font[HPDF_LIMIT_MAX_NAME_LEN + 1];
292 HPDF_BYTE first_char;
295 char tag_name[HPDF_TTF_FONT_TAG_LEN + 1];
296 char tag_name2[(HPDF_TTF_FONT_TAG_LEN + 1) * 2];
297 HPDF_TTF_FontHeader header;
298 HPDF_TTF_GryphOffsets glyph_tbl;
299 HPDF_UINT16 num_glyphs;
300 HPDF_TTF_NamingTable name_tbl;
301 HPDF_TTF_LongHorMetric *h_metric;
302 HPDF_UINT16 num_h_metric;
303 HPDF_TTF_OffsetTbl offset_tbl;
304 HPDF_TTF_CmapRange cmap;
306 HPDF_BYTE panose[12];
307 HPDF_UINT32 code_page_range1;
308 HPDF_UINT32 code_page_range2;
313 HPDF_BOOL is_cidfont;
316 } HPDF_TTFontDefAttr_Rec;
321 HPDF_TTFontDef_New (HPDF_MMgr mmgr);
325 HPDF_TTFontDef_Load (HPDF_MMgr mmgr,
327 HPDF_BOOL embedding);
331 HPDF_TTFontDef_Load2 (HPDF_MMgr mmgr,
334 HPDF_BOOL embedding);
338 HPDF_TTFontDef_GetGlyphid (HPDF_FontDef fontdef,
339 HPDF_UINT16 unicode);
343 HPDF_TTFontDef_GetCharWidth (HPDF_FontDef fontdef,
344 HPDF_UINT16 unicode);
348 HPDF_TTFontDef_GetGidWidth (HPDF_FontDef fontdef,
353 HPDF_TTFontDef_SaveFontData (HPDF_FontDef fontdef,
358 HPDF_TTFontDef_GetCharBBox (HPDF_FontDef fontdef,
359 HPDF_UINT16 unicode);
363 HPDF_TTFontDef_SetTagName (HPDF_FontDef fontdef,
367 /*----------------------------------------------------------------------------*/
368 /*----- HPDF_CIDFontDef -----------------------------------------------------*/
370 typedef struct _HPDF_CIDFontDefAttrRec *HPDF_CIDFontDefAttr;
372 typedef struct _HPDF_CIDFontDefAttrRec {
376 } HPDF_CIDFontDefAttr_Rec;
380 HPDF_CIDFontDef_New (HPDF_MMgr mmgr,
382 HPDF_FontDef_InitFunc init_fn);
386 HPDF_CIDFontDef_AddWidth (HPDF_FontDef fontdef,
387 const HPDF_CID_Width *widths);
391 HPDF_CIDFontDef_GetCIDWidth (HPDF_FontDef fontdef,
397 HPDF_CIDFontDef_ChangeStyle (HPDF_FontDef fontdef,
403 #endif /* __cplusplus */
405 #endif /* _HPDF_FONTDEF_H */