poco/PDF/include/Poco/PDF/hpdf_fontdef.h
Aleksandar Fabijanic d75e68c027 new trunk (base for 1.5)
windows build only
2012-04-23 01:14:34 +00:00

404 lines
11 KiB
C

/*
* << Haru Free PDF Library 2.0.4 >> -- hpdf_fontdef.h
*
* Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation.
* It is provided "as is" without express or implied warranty.
*
*/
#ifndef _HPDF_FONTDEF_H
#define _HPDF_FONTDEF_H
#include "hpdf_objects.h"
#ifdef __cplusplus
extern "C" {
#endif
#define HPDF_FONTDEF_SIG_BYTES 0x464F4E54L
/*------ collection of flags for defining characteristics. ---*/
#define HPDF_FONT_FIXED_WIDTH 1
#define HPDF_FONT_SERIF 2
#define HPDF_FONT_SYMBOLIC 4
#define HPDF_FONT_SCRIPT 8
/* Reserved 16 */
#define HPDF_FONT_STD_CHARSET 32
#define HPDF_FONT_ITALIC 64
/* Reserved 128
Reserved 256
Reserved 512
Reserved 1024
Reserved 2048
Reserved 4096
Reserved 8192
Reserved 16384
Reserved 32768 */
#define HPDF_FONT_ALL_CAP 65536
#define HPDF_FONT_SMALL_CAP 131072
#define HPDF_FONT_FOURCE_BOLD 262144
#define HPDF_CID_W_TYPE_FROM_TO 0
#define HPDF_CID_W_TYPE_FROM_ARRAY 1
/*-- HPDF_FontDef ---------------------------------------*/
typedef struct _HPDF_CharData {
HPDF_INT16 char_cd;
HPDF_UNICODE unicode;
HPDF_INT16 width;
} HPDF_CharData;
typedef enum _HPDF_FontDefType {
HPDF_FONTDEF_TYPE_TYPE1,
HPDF_FONTDEF_TYPE_TRUETYPE,
HPDF_FONTDEF_TYPE_CID,
HPDF_FONTDEF_TYPE_UNINITIALIZED,
HPDF_FONTDEF_TYPE_EOF
} HPDF_FontDefType;
typedef struct _HPDF_CID_Width {
HPDF_UINT16 cid;
HPDF_INT16 width;
} HPDF_CID_Width;
/*----------------------------------------------------------------------------*/
/*----- HPDF_FontDef ---------------------------------------------------------*/
typedef struct _HPDF_FontDef_Rec *HPDF_FontDef;
typedef void (*HPDF_FontDef_FreeFunc) (HPDF_FontDef fontdef);
typedef void (*HPDF_FontDef_CleanFunc) (HPDF_FontDef fontdef);
typedef HPDF_STATUS (*HPDF_FontDef_InitFunc) (HPDF_FontDef fontdef);
typedef struct _HPDF_FontDef_Rec {
HPDF_UINT32 sig_bytes;
char base_font[HPDF_LIMIT_MAX_NAME_LEN + 1];
HPDF_MMgr mmgr;
HPDF_Error error;
HPDF_FontDefType type;
HPDF_FontDef_CleanFunc clean_fn;
HPDF_FontDef_FreeFunc free_fn;
HPDF_FontDef_InitFunc init_fn;
HPDF_INT16 ascent;
HPDF_INT16 descent;
HPDF_UINT flags;
HPDF_Box font_bbox;
HPDF_INT16 italic_angle;
HPDF_UINT16 stemv;
HPDF_INT16 avg_width;
HPDF_INT16 max_width;
HPDF_INT16 missing_width;
HPDF_UINT16 stemh;
HPDF_UINT16 x_height;
HPDF_UINT16 cap_height;
/* the initial value of descriptor entry is NULL.
* when first font-object besed on the fontdef object is created,
* the font-descriptor object is created and descriptor entry is set.
*/
HPDF_Dict descriptor;
HPDF_Stream data;
HPDF_BOOL valid;
void *attr;
} HPDF_FontDef_Rec;
void
HPDF_FontDef_Free (HPDF_FontDef fontdef);
void
HPDF_FontDef_Cleanup (HPDF_FontDef fontdef);
HPDF_BOOL
HPDF_FontDef_Validate (HPDF_FontDef fontdef);
/*----------------------------------------------------------------------------*/
/*----- HPDF_Type1FontDef ---------------------------------------------------*/
typedef struct _HPDF_Type1FontDefAttrRec *HPDF_Type1FontDefAttr;
typedef struct _HPDF_Type1FontDefAttrRec {
HPDF_BYTE first_char; /* Required */
HPDF_BYTE last_char; /* Required */
HPDF_CharData *widths; /* Required */
HPDF_UINT widths_count;
HPDF_INT16 leading;
char *char_set;
char encoding_scheme[HPDF_LIMIT_MAX_NAME_LEN + 1];
HPDF_UINT length1;
HPDF_UINT length2;
HPDF_UINT length3;
HPDF_BOOL is_base14font;
HPDF_BOOL is_fixed_pitch;
HPDF_Stream font_data;
} HPDF_Type1FontDefAttr_Rec;
HPDF_FontDef
HPDF_Type1FontDef_New (HPDF_MMgr mmgr);
HPDF_FontDef
HPDF_Type1FontDef_Load (HPDF_MMgr mmgr,
HPDF_Stream afm,
HPDF_Stream font_data);
HPDF_FontDef
HPDF_Type1FontDef_Duplicate (HPDF_MMgr mmgr,
HPDF_FontDef src);
HPDF_STATUS
HPDF_Type1FontDef_SetWidths (HPDF_FontDef fontdef,
const HPDF_CharData *widths);
HPDF_INT16
HPDF_Type1FontDef_GetWidthByName (HPDF_FontDef fontdef,
const char *gryph_name);
HPDF_INT16
HPDF_Type1FontDef_GetWidth (HPDF_FontDef fontdef,
HPDF_UNICODE unicode);
HPDF_FontDef
HPDF_Base14FontDef_New (HPDF_MMgr mmgr,
const char *font_name);
/*----------------------------------------------------------------------------*/
/*----- HPDF_TTFontDef ------------------------------------------------------*/
#define HPDF_TTF_FONT_TAG_LEN 6
typedef struct _HPDF_TTF_Table {
char tag[4];
HPDF_UINT32 check_sum;
HPDF_UINT32 offset;
HPDF_UINT32 length;
} HPDF_TTFTable;
typedef struct _HPDF_TTF_OffsetTbl {
HPDF_UINT32 sfnt_version;
HPDF_UINT16 num_tables;
HPDF_UINT16 search_range;
HPDF_UINT16 entry_selector;
HPDF_UINT16 range_shift;
HPDF_TTFTable *table;
} HPDF_TTF_OffsetTbl;
typedef struct _HPDF_TTF_CmapRange {
HPDF_UINT16 format;
HPDF_UINT16 length;
HPDF_UINT16 language;
HPDF_UINT16 seg_count_x2;
HPDF_UINT16 search_range;
HPDF_UINT16 entry_selector;
HPDF_UINT16 range_shift;
HPDF_UINT16 *end_count;
HPDF_UINT16 reserved_pad;
HPDF_UINT16 *start_count;
HPDF_INT16 *id_delta;
HPDF_UINT16 *id_range_offset;
HPDF_UINT16 *glyph_id_array;
HPDF_UINT glyph_id_array_count;
} HPDF_TTF_CmapRange;
typedef struct _HPDF_TTF_GryphOffsets {
HPDF_UINT32 base_offset;
HPDF_UINT32 *offsets;
HPDF_BYTE *flgs; /* 0: unused, 1: used */
} HPDF_TTF_GryphOffsets;
typedef struct _HPDF_TTF_LongHorMetric {
HPDF_UINT16 advance_width;
HPDF_INT16 lsb;
} HPDF_TTF_LongHorMetric;
typedef struct _HPDF_TTF_FontHeader {
HPDF_BYTE version_number[4];
HPDF_UINT32 font_revision;
HPDF_UINT32 check_sum_adjustment;
HPDF_UINT32 magic_number;
HPDF_UINT16 flags;
HPDF_UINT16 units_per_em;
HPDF_BYTE created[8];
HPDF_BYTE modified[8];
HPDF_INT16 x_min;
HPDF_INT16 y_min;
HPDF_INT16 x_max;
HPDF_INT16 y_max;
HPDF_UINT16 mac_style;
HPDF_UINT16 lowest_rec_ppem;
HPDF_INT16 font_direction_hint;
HPDF_INT16 index_to_loc_format;
HPDF_INT16 glyph_data_format;
} HPDF_TTF_FontHeader;
typedef struct _HPDF_TTF_NameRecord {
HPDF_UINT16 platform_id;
HPDF_UINT16 encoding_id;
HPDF_UINT16 language_id;
HPDF_UINT16 name_id;
HPDF_UINT16 length;
HPDF_UINT16 offset;
} HPDF_TTF_NameRecord;
typedef struct _HPDF_TTF_NamingTable {
HPDF_UINT16 format;
HPDF_UINT16 count;
HPDF_UINT16 string_offset;
HPDF_TTF_NameRecord *name_records;
} HPDF_TTF_NamingTable;
typedef struct _HPDF_TTFontDefAttr_Rec *HPDF_TTFontDefAttr;
typedef struct _HPDF_TTFontDefAttr_Rec {
char base_font[HPDF_LIMIT_MAX_NAME_LEN + 1];
HPDF_BYTE first_char;
HPDF_BYTE last_char;
char *char_set;
char tag_name[HPDF_TTF_FONT_TAG_LEN + 1];
char tag_name2[(HPDF_TTF_FONT_TAG_LEN + 1) * 2];
HPDF_TTF_FontHeader header;
HPDF_TTF_GryphOffsets glyph_tbl;
HPDF_UINT16 num_glyphs;
HPDF_TTF_NamingTable name_tbl;
HPDF_TTF_LongHorMetric *h_metric;
HPDF_UINT16 num_h_metric;
HPDF_TTF_OffsetTbl offset_tbl;
HPDF_TTF_CmapRange cmap;
HPDF_UINT16 fs_type;
HPDF_BYTE panose[12];
HPDF_UINT32 code_page_range1;
HPDF_UINT32 code_page_range2;
HPDF_UINT length1;
HPDF_BOOL embedding;
HPDF_BOOL is_cidfont;
HPDF_Stream stream;
} HPDF_TTFontDefAttr_Rec;
HPDF_FontDef
HPDF_TTFontDef_New (HPDF_MMgr mmgr);
HPDF_FontDef
HPDF_TTFontDef_Load (HPDF_MMgr mmgr,
HPDF_Stream stream,
HPDF_BOOL embedding);
HPDF_FontDef
HPDF_TTFontDef_Load2 (HPDF_MMgr mmgr,
HPDF_Stream stream,
HPDF_UINT index,
HPDF_BOOL embedding);
HPDF_UINT16
HPDF_TTFontDef_GetGlyphid (HPDF_FontDef fontdef,
HPDF_UINT16 unicode);
HPDF_INT16
HPDF_TTFontDef_GetCharWidth (HPDF_FontDef fontdef,
HPDF_UINT16 unicode);
HPDF_INT16
HPDF_TTFontDef_GetGidWidth (HPDF_FontDef fontdef,
HPDF_UINT16 gid);
HPDF_STATUS
HPDF_TTFontDef_SaveFontData (HPDF_FontDef fontdef,
HPDF_Stream stream);
HPDF_Box
HPDF_TTFontDef_GetCharBBox (HPDF_FontDef fontdef,
HPDF_UINT16 unicode);
void
HPDF_TTFontDef_SetTagName (HPDF_FontDef fontdef,
char *tag);
/*----------------------------------------------------------------------------*/
/*----- HPDF_CIDFontDef -----------------------------------------------------*/
typedef struct _HPDF_CIDFontDefAttrRec *HPDF_CIDFontDefAttr;
typedef struct _HPDF_CIDFontDefAttrRec {
HPDF_List widths;
HPDF_INT16 DW;
HPDF_INT16 DW2[2];
} HPDF_CIDFontDefAttr_Rec;
HPDF_FontDef
HPDF_CIDFontDef_New (HPDF_MMgr mmgr,
char *name,
HPDF_FontDef_InitFunc init_fn);
HPDF_STATUS
HPDF_CIDFontDef_AddWidth (HPDF_FontDef fontdef,
const HPDF_CID_Width *widths);
HPDF_INT16
HPDF_CIDFontDef_GetCIDWidth (HPDF_FontDef fontdef,
HPDF_UINT16 cid);
HPDF_STATUS
HPDF_CIDFontDef_ChangeStyle (HPDF_FontDef fontdef,
HPDF_BOOL bold,
HPDF_BOOL italic);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _HPDF_FONTDEF_H */