hpdf_fontdef.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. /*
  2. * << Haru Free PDF Library >> -- hpdf_fontdef.h
  3. *
  4. * URL: http://libharu.org
  5. *
  6. * Copyright (c) 1999-2006 Takeshi Kanno <[email protected]>
  7. * Copyright (c) 2007-2009 Antony Dovgal <[email protected]>
  8. *
  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.
  15. *
  16. */
  17. #ifndef _HPDF_FONTDEF_H
  18. #define _HPDF_FONTDEF_H
  19. #include "hpdf_objects.h"
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. #define HPDF_FONTDEF_SIG_BYTES 0x464F4E54L
  24. /*------ collection of flags for defining characteristics. ---*/
  25. #define HPDF_FONT_FIXED_WIDTH 1
  26. #define HPDF_FONT_SERIF 2
  27. #define HPDF_FONT_SYMBOLIC 4
  28. #define HPDF_FONT_SCRIPT 8
  29. /* Reserved 16 */
  30. #define HPDF_FONT_STD_CHARSET 32
  31. #define HPDF_FONT_ITALIC 64
  32. /* Reserved 128
  33. Reserved 256
  34. Reserved 512
  35. Reserved 1024
  36. Reserved 2048
  37. Reserved 4096
  38. Reserved 8192
  39. Reserved 16384
  40. Reserved 32768 */
  41. #define HPDF_FONT_ALL_CAP 65536
  42. #define HPDF_FONT_SMALL_CAP 131072
  43. #define HPDF_FONT_FOURCE_BOLD 262144
  44. #define HPDF_CID_W_TYPE_FROM_TO 0
  45. #define HPDF_CID_W_TYPE_FROM_ARRAY 1
  46. /*-- HPDF_FontDef ---------------------------------------*/
  47. typedef struct _HPDF_CharData {
  48. HPDF_INT16 char_cd;
  49. HPDF_UNICODE unicode;
  50. HPDF_INT16 width;
  51. } HPDF_CharData;
  52. typedef enum _HPDF_FontDefType {
  53. HPDF_FONTDEF_TYPE_TYPE1,
  54. HPDF_FONTDEF_TYPE_TRUETYPE,
  55. HPDF_FONTDEF_TYPE_CID,
  56. HPDF_FONTDEF_TYPE_UNINITIALIZED,
  57. HPDF_FONTDEF_TYPE_EOF
  58. } HPDF_FontDefType;
  59. typedef struct _HPDF_CID_Width {
  60. HPDF_UINT16 cid;
  61. HPDF_INT16 width;
  62. } HPDF_CID_Width;
  63. /*----------------------------------------------------------------------------*/
  64. /*----- HPDF_FontDef ---------------------------------------------------------*/
  65. typedef struct _HPDF_FontDef_Rec *HPDF_FontDef;
  66. typedef void (*HPDF_FontDef_FreeFunc) (HPDF_FontDef fontdef);
  67. typedef void (*HPDF_FontDef_CleanFunc) (HPDF_FontDef fontdef);
  68. typedef HPDF_STATUS (*HPDF_FontDef_InitFunc) (HPDF_FontDef fontdef);
  69. typedef struct _HPDF_FontDef_Rec {
  70. HPDF_UINT32 sig_bytes;
  71. char base_font[HPDF_LIMIT_MAX_NAME_LEN + 1];
  72. HPDF_MMgr mmgr;
  73. HPDF_Error error;
  74. HPDF_FontDefType type;
  75. HPDF_FontDef_CleanFunc clean_fn;
  76. HPDF_FontDef_FreeFunc free_fn;
  77. HPDF_FontDef_InitFunc init_fn;
  78. HPDF_INT16 ascent;
  79. HPDF_INT16 descent;
  80. HPDF_UINT flags;
  81. HPDF_Box font_bbox;
  82. HPDF_INT16 italic_angle;
  83. HPDF_UINT16 stemv;
  84. HPDF_INT16 avg_width;
  85. HPDF_INT16 max_width;
  86. HPDF_INT16 missing_width;
  87. HPDF_UINT16 stemh;
  88. HPDF_UINT16 x_height;
  89. HPDF_UINT16 cap_height;
  90. /* the initial value of descriptor entry is NULL.
  91. * when first font-object besed on the fontdef object is created,
  92. * the font-descriptor object is created and descriptor entry is set.
  93. */
  94. HPDF_Dict descriptor;
  95. HPDF_Stream data;
  96. HPDF_BOOL valid;
  97. void *attr;
  98. } HPDF_FontDef_Rec;
  99. void
  100. HPDF_FontDef_Free (HPDF_FontDef fontdef);
  101. void
  102. HPDF_FontDef_Cleanup (HPDF_FontDef fontdef);
  103. HPDF_BOOL
  104. HPDF_FontDef_Validate (HPDF_FontDef fontdef);
  105. /*----------------------------------------------------------------------------*/
  106. /*----- HPDF_Type1FontDef ---------------------------------------------------*/
  107. typedef struct _HPDF_Type1FontDefAttrRec *HPDF_Type1FontDefAttr;
  108. typedef struct _HPDF_Type1FontDefAttrRec {
  109. HPDF_BYTE first_char; /* Required */
  110. HPDF_BYTE last_char; /* Required */
  111. HPDF_CharData *widths; /* Required */
  112. HPDF_UINT widths_count;
  113. HPDF_INT16 leading;
  114. char *char_set;
  115. char encoding_scheme[HPDF_LIMIT_MAX_NAME_LEN + 1];
  116. HPDF_UINT length1;
  117. HPDF_UINT length2;
  118. HPDF_UINT length3;
  119. HPDF_BOOL is_base14font;
  120. HPDF_BOOL is_fixed_pitch;
  121. HPDF_Stream font_data;
  122. } HPDF_Type1FontDefAttr_Rec;
  123. HPDF_FontDef
  124. HPDF_Type1FontDef_New (HPDF_MMgr mmgr);
  125. HPDF_FontDef
  126. HPDF_Type1FontDef_Load (HPDF_MMgr mmgr,
  127. HPDF_Stream afm,
  128. HPDF_Stream font_data);
  129. HPDF_FontDef
  130. HPDF_Type1FontDef_Duplicate (HPDF_MMgr mmgr,
  131. HPDF_FontDef src);
  132. HPDF_STATUS
  133. HPDF_Type1FontDef_SetWidths (HPDF_FontDef fontdef,
  134. const HPDF_CharData *widths);
  135. HPDF_INT16
  136. HPDF_Type1FontDef_GetWidthByName (HPDF_FontDef fontdef,
  137. const char *gryph_name);
  138. HPDF_INT16
  139. HPDF_Type1FontDef_GetWidth (HPDF_FontDef fontdef,
  140. HPDF_UNICODE unicode);
  141. HPDF_FontDef
  142. HPDF_Base14FontDef_New (HPDF_MMgr mmgr,
  143. const char *font_name);
  144. /*----------------------------------------------------------------------------*/
  145. /*----- HPDF_TTFontDef ------------------------------------------------------*/
  146. #define HPDF_TTF_FONT_TAG_LEN 6
  147. typedef struct _HPDF_TTF_Table {
  148. char tag[4];
  149. HPDF_UINT32 check_sum;
  150. HPDF_UINT32 offset;
  151. HPDF_UINT32 length;
  152. } HPDF_TTFTable;
  153. typedef struct _HPDF_TTF_OffsetTbl {
  154. HPDF_UINT32 sfnt_version;
  155. HPDF_UINT16 num_tables;
  156. HPDF_UINT16 search_range;
  157. HPDF_UINT16 entry_selector;
  158. HPDF_UINT16 range_shift;
  159. HPDF_TTFTable *table;
  160. } HPDF_TTF_OffsetTbl;
  161. typedef struct _HPDF_TTF_CmapRange {
  162. HPDF_UINT16 format;
  163. HPDF_UINT16 length;
  164. HPDF_UINT16 language;
  165. HPDF_UINT16 seg_count_x2;
  166. HPDF_UINT16 search_range;
  167. HPDF_UINT16 entry_selector;
  168. HPDF_UINT16 range_shift;
  169. HPDF_UINT16 *end_count;
  170. HPDF_UINT16 reserved_pad;
  171. HPDF_UINT16 *start_count;
  172. HPDF_INT16 *id_delta;
  173. HPDF_UINT16 *id_range_offset;
  174. HPDF_UINT16 *glyph_id_array;
  175. HPDF_UINT glyph_id_array_count;
  176. } HPDF_TTF_CmapRange;
  177. typedef struct _HPDF_TTF_GryphOffsets {
  178. HPDF_UINT32 base_offset;
  179. HPDF_UINT32 *offsets;
  180. HPDF_BYTE *flgs; /* 0: unused, 1: used */
  181. } HPDF_TTF_GryphOffsets;
  182. typedef struct _HPDF_TTF_LongHorMetric {
  183. HPDF_UINT16 advance_width;
  184. HPDF_INT16 lsb;
  185. } HPDF_TTF_LongHorMetric;
  186. typedef struct _HPDF_TTF_FontHeader {
  187. HPDF_BYTE version_number[4];
  188. HPDF_UINT32 font_revision;
  189. HPDF_UINT32 check_sum_adjustment;
  190. HPDF_UINT32 magic_number;
  191. HPDF_UINT16 flags;
  192. HPDF_UINT16 units_per_em;
  193. HPDF_BYTE created[8];
  194. HPDF_BYTE modified[8];
  195. HPDF_INT16 x_min;
  196. HPDF_INT16 y_min;
  197. HPDF_INT16 x_max;
  198. HPDF_INT16 y_max;
  199. HPDF_UINT16 mac_style;
  200. HPDF_UINT16 lowest_rec_ppem;
  201. HPDF_INT16 font_direction_hint;
  202. HPDF_INT16 index_to_loc_format;
  203. HPDF_INT16 glyph_data_format;
  204. } HPDF_TTF_FontHeader;
  205. typedef struct _HPDF_TTF_NameRecord {
  206. HPDF_UINT16 platform_id;
  207. HPDF_UINT16 encoding_id;
  208. HPDF_UINT16 language_id;
  209. HPDF_UINT16 name_id;
  210. HPDF_UINT16 length;
  211. HPDF_UINT16 offset;
  212. } HPDF_TTF_NameRecord;
  213. typedef struct _HPDF_TTF_NamingTable {
  214. HPDF_UINT16 format;
  215. HPDF_UINT16 count;
  216. HPDF_UINT16 string_offset;
  217. HPDF_TTF_NameRecord *name_records;
  218. } HPDF_TTF_NamingTable;
  219. typedef struct _HPDF_TTFontDefAttr_Rec *HPDF_TTFontDefAttr;
  220. typedef struct _HPDF_TTFontDefAttr_Rec {
  221. char base_font[HPDF_LIMIT_MAX_NAME_LEN + 1];
  222. HPDF_BYTE first_char;
  223. HPDF_BYTE last_char;
  224. char *char_set;
  225. char tag_name[HPDF_TTF_FONT_TAG_LEN + 1];
  226. char tag_name2[(HPDF_TTF_FONT_TAG_LEN + 1) * 2];
  227. HPDF_TTF_FontHeader header;
  228. HPDF_TTF_GryphOffsets glyph_tbl;
  229. HPDF_UINT16 num_glyphs;
  230. HPDF_TTF_NamingTable name_tbl;
  231. HPDF_TTF_LongHorMetric *h_metric;
  232. HPDF_UINT16 num_h_metric;
  233. HPDF_TTF_OffsetTbl offset_tbl;
  234. HPDF_TTF_CmapRange cmap;
  235. HPDF_UINT16 fs_type;
  236. HPDF_BYTE panose[12];
  237. HPDF_UINT32 code_page_range1;
  238. HPDF_UINT32 code_page_range2;
  239. HPDF_UINT length1;
  240. HPDF_BOOL embedding;
  241. HPDF_BOOL is_cidfont;
  242. HPDF_Stream stream;
  243. } HPDF_TTFontDefAttr_Rec;
  244. HPDF_FontDef
  245. HPDF_TTFontDef_New (HPDF_MMgr mmgr);
  246. HPDF_FontDef
  247. HPDF_TTFontDef_Load (HPDF_MMgr mmgr,
  248. HPDF_Stream stream,
  249. HPDF_BOOL embedding);
  250. HPDF_FontDef
  251. HPDF_TTFontDef_Load2 (HPDF_MMgr mmgr,
  252. HPDF_Stream stream,
  253. HPDF_UINT index,
  254. HPDF_BOOL embedding);
  255. HPDF_UINT16
  256. HPDF_TTFontDef_GetGlyphid (HPDF_FontDef fontdef,
  257. HPDF_UINT16 unicode);
  258. HPDF_INT16
  259. HPDF_TTFontDef_GetCharWidth (HPDF_FontDef fontdef,
  260. HPDF_UINT16 unicode);
  261. HPDF_INT16
  262. HPDF_TTFontDef_GetGidWidth (HPDF_FontDef fontdef,
  263. HPDF_UINT16 gid);
  264. HPDF_STATUS
  265. HPDF_TTFontDef_SaveFontData (HPDF_FontDef fontdef,
  266. HPDF_Stream stream);
  267. HPDF_Box
  268. HPDF_TTFontDef_GetCharBBox (HPDF_FontDef fontdef,
  269. HPDF_UINT16 unicode);
  270. void
  271. HPDF_TTFontDef_SetTagName (HPDF_FontDef fontdef,
  272. char *tag);
  273. /*----------------------------------------------------------------------------*/
  274. /*----- HPDF_CIDFontDef -----------------------------------------------------*/
  275. typedef struct _HPDF_CIDFontDefAttrRec *HPDF_CIDFontDefAttr;
  276. typedef struct _HPDF_CIDFontDefAttrRec {
  277. HPDF_List widths;
  278. HPDF_INT16 DW;
  279. HPDF_INT16 DW2[2];
  280. } HPDF_CIDFontDefAttr_Rec;
  281. HPDF_FontDef
  282. HPDF_CIDFontDef_New (HPDF_MMgr mmgr,
  283. char *name,
  284. HPDF_FontDef_InitFunc init_fn);
  285. HPDF_STATUS
  286. HPDF_CIDFontDef_AddWidth (HPDF_FontDef fontdef,
  287. const HPDF_CID_Width *widths);
  288. HPDF_INT16
  289. HPDF_CIDFontDef_GetCIDWidth (HPDF_FontDef fontdef,
  290. HPDF_UINT16 cid);
  291. HPDF_STATUS
  292. HPDF_CIDFontDef_ChangeStyle (HPDF_FontDef fontdef,
  293. HPDF_BOOL bold,
  294. HPDF_BOOL italic);
  295. #ifdef __cplusplus
  296. }
  297. #endif /* __cplusplus */
  298. #endif /* _HPDF_FONTDEF_H */