1 /* 2 * << Haru Free PDF Library >> -- hpdf_encoder.h 3 * 4 * URL: http://libharu.org 5 * 6 * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp> 7 * Copyright (c) 2007-2009 Antony Dovgal <tony@daylessday.org> 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 18 #ifndef _HPDF_ENCODER_H 19 #define _HPDF_ENCODER_H 20 21 #include "hpdf_consts.h" 22 #include "hpdf_streams.h" 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /*-- HPDF_Encoder ---------------------------------------*/ 29 30 #define HPDF_ENCODER_SIG_BYTES 0x454E4344L 31 32 /*----------------------------------------------------------------------------*/ 33 /*------ predefined font encodings -------------------------------------------*/ 34 35 #define HPDF_ENCODING_FONT_SPECIFIC "FontSpecific" 36 #define HPDF_ENCODING_STANDARD "StandardEncoding" 37 #define HPDF_ENCODING_MAC_ROMAN "MacRomanEncoding" 38 #define HPDF_ENCODING_WIN_ANSI "WinAnsiEncoding" 39 #define HPDF_ENCODING_ISO8859_2 "ISO8859-2" 40 #define HPDF_ENCODING_ISO8859_3 "ISO8859-3" 41 #define HPDF_ENCODING_ISO8859_4 "ISO8859-4" 42 #define HPDF_ENCODING_ISO8859_5 "ISO8859-5" 43 #define HPDF_ENCODING_ISO8859_6 "ISO8859-6" 44 #define HPDF_ENCODING_ISO8859_7 "ISO8859-7" 45 #define HPDF_ENCODING_ISO8859_8 "ISO8859-8" 46 #define HPDF_ENCODING_ISO8859_9 "ISO8859-9" 47 #define HPDF_ENCODING_ISO8859_10 "ISO8859-10" 48 #define HPDF_ENCODING_ISO8859_11 "ISO8859-11" 49 #define HPDF_ENCODING_ISO8859_13 "ISO8859-13" 50 #define HPDF_ENCODING_ISO8859_14 "ISO8859-14" 51 #define HPDF_ENCODING_ISO8859_15 "ISO8859-15" 52 #define HPDF_ENCODING_ISO8859_16 "ISO8859-16" 53 #define HPDF_ENCODING_CP1250 "CP1250" 54 #define HPDF_ENCODING_CP1251 "CP1251" 55 #define HPDF_ENCODING_CP1252 "CP1252" 56 #define HPDF_ENCODING_CP1253 "CP1253" 57 #define HPDF_ENCODING_CP1254 "CP1254" 58 #define HPDF_ENCODING_CP1255 "CP1255" 59 #define HPDF_ENCODING_CP1256 "CP1256" 60 #define HPDF_ENCODING_CP1257 "CP1257" 61 #define HPDF_ENCODING_CP1258 "CP1258" 62 #define HPDF_ENCODING_KOI8_R "KOI8-R" 63 64 /*----------------------------------------------------------------------------*/ 65 /*----- definition for font encoding -----------------------------------------*/ 66 67 #define char_NOTDEF ".notdef" 68 69 typedef enum _HPDF_EncodingType { 70 HPDF_STANDARD_ENCODING = 0, 71 HPDF_MAC_ROMAN_ENCODING, 72 HPDF_WIN_ANSI_ENCODING, 73 HPDF_FONT_SPECIFIC, 74 HPDF_ENCODING_EOF 75 } HPDF_EncodingType; 76 77 78 typedef struct _HPDF_ParseText_Rec { 79 const HPDF_BYTE *text; 80 HPDF_UINT index; 81 HPDF_UINT len; 82 HPDF_ByteType byte_type; 83 } HPDF_ParseText_Rec; 84 85 86 typedef struct _HPDF_Encoder_Rec *HPDF_Encoder; 87 88 typedef HPDF_ByteType 89 (*HPDF_Encoder_ByteType_Func) (HPDF_Encoder encoder, 90 HPDF_ParseText_Rec *state); 91 92 typedef HPDF_UNICODE 93 (*HPDF_Encoder_ToUnicode_Func) (HPDF_Encoder encoder, 94 HPDF_UINT16 code); 95 96 typedef char * 97 (*HPDF_Encoder_EncodeText_Func) (HPDF_Encoder encoder, 98 const char *text, 99 HPDF_UINT len, 100 HPDF_UINT *encoded_length); 101 102 typedef HPDF_STATUS 103 (*HPDF_Encoder_Write_Func) (HPDF_Encoder encoder, 104 HPDF_Stream out); 105 106 107 typedef HPDF_STATUS 108 (*HPDF_Encoder_Init_Func) (HPDF_Encoder encoder); 109 110 111 typedef void 112 (*HPDF_Encoder_Free_Func) (HPDF_Encoder encoder); 113 114 115 typedef struct _HPDF_Encoder_Rec { 116 HPDF_UINT32 sig_bytes; 117 char name[HPDF_LIMIT_MAX_NAME_LEN + 1]; 118 HPDF_MMgr mmgr; 119 HPDF_Error error; 120 HPDF_EncoderType type; 121 122 HPDF_Encoder_ByteType_Func byte_type_fn; 123 HPDF_Encoder_ToUnicode_Func to_unicode_fn; 124 HPDF_Encoder_EncodeText_Func encode_text_fn; 125 HPDF_Encoder_Write_Func write_fn; 126 HPDF_Encoder_Free_Func free_fn; 127 HPDF_Encoder_Init_Func init_fn; 128 /* 129 char lang_code[3]; 130 char country_code[3]; 131 */ 132 void *attr; 133 } HPDF_Encoder_Rec; 134 135 136 typedef enum _HPDF_BaseEncodings { 137 HPDF_BASE_ENCODING_STANDARD, 138 HPDF_BASE_ENCODING_WIN_ANSI, 139 HPDF_BASE_ENCODING_MAC_ROMAN, 140 HPDF_BASE_ENCODING_FONT_SPECIFIC, 141 HPDF_BASE_ENCODING_EOF 142 } HPDF_BaseEncodings; 143 144 HPDF_STATUS 145 HPDF_Encoder_Validate (HPDF_Encoder encoder); 146 147 void 148 HPDF_Encoder_SetParseText (HPDF_Encoder encoder, 149 HPDF_ParseText_Rec *state, 150 const HPDF_BYTE *text, 151 HPDF_UINT len); 152 153 HPDF_ByteType 154 HPDF_Encoder_ByteType (HPDF_Encoder encoder, 155 HPDF_ParseText_Rec *state); 156 157 158 159 HPDF_UNICODE 160 HPDF_Encoder_ToUnicode (HPDF_Encoder encoder, 161 HPDF_UINT16 code); 162 163 164 void 165 HPDF_Encoder_Free (HPDF_Encoder encoder); 166 167 /*-- HPDF_BasicEncoder ----------------------------------*/ 168 169 170 typedef struct _HPDF_BasicEncoderAttr_Rec *HPDF_BasicEncoderAttr; 171 172 typedef struct _HPDF_BasicEncoderAttr_Rec { 173 char base_encoding[HPDF_LIMIT_MAX_NAME_LEN + 1]; 174 HPDF_BYTE first_char; 175 HPDF_BYTE last_char; 176 HPDF_UNICODE unicode_map[256]; 177 HPDF_BOOL has_differences; 178 HPDF_BYTE differences[256]; 179 } HPDF_BasicEncoderAttr_Rec; 180 181 182 HPDF_Encoder 183 HPDF_BasicEncoder_New (HPDF_MMgr mmgr, 184 const char *encoding_name); 185 186 187 void 188 HPDF_BasicEncoder_Free (HPDF_Encoder encoder); 189 190 191 HPDF_STATUS 192 HPDF_BasicEncoder_Write (HPDF_Encoder encoder, 193 HPDF_Stream out); 194 195 196 HPDF_UNICODE 197 HPDF_BasicEncoder_ToUnicode (HPDF_Encoder encoder, 198 HPDF_UINT16 code); 199 200 /*-- HPDF_CMapEncoder ----------------------------------*/ 201 202 typedef HPDF_BOOL 203 (*HPDF_CMapEncoder_ByteType_Func) (HPDF_Encoder encoder, 204 HPDF_BYTE b); 205 206 typedef struct _HPDF_CidRange_Rec { 207 HPDF_UINT16 from; 208 HPDF_UINT16 to; 209 HPDF_UINT16 cid; 210 } HPDF_CidRange_Rec; 211 212 213 typedef struct _HPDF_UnicodeMap_Rec { 214 HPDF_UINT16 code; 215 HPDF_UINT16 unicode; 216 } HPDF_UnicodeMap_Rec; 217 218 typedef struct _HPDF_CMapEncoderAttr_Rec *HPDF_CMapEncoderAttr; 219 220 typedef struct _HPDF_CMapEncoderAttr_Rec { 221 HPDF_UNICODE unicode_map[256][256]; 222 HPDF_UINT16 cid_map[256][256]; 223 HPDF_UINT16 jww_line_head[HPDF_MAX_JWW_NUM]; 224 HPDF_List cmap_range; 225 HPDF_List notdef_range; 226 HPDF_List code_space_range; 227 HPDF_WritingMode writing_mode; 228 char registry[HPDF_LIMIT_MAX_NAME_LEN + 1]; 229 char ordering[HPDF_LIMIT_MAX_NAME_LEN + 1]; 230 HPDF_INT suppliment; 231 HPDF_CMapEncoder_ByteType_Func is_lead_byte_fn; 232 HPDF_CMapEncoder_ByteType_Func is_trial_byte_fn; 233 HPDF_INT uid_offset; 234 HPDF_UINT xuid[3]; 235 } HPDF_CMapEncoderAttr_Rec; 236 237 238 HPDF_Encoder 239 HPDF_CMapEncoder_New (HPDF_MMgr mmgr, 240 char *name, 241 HPDF_Encoder_Init_Func init_fn); 242 243 244 HPDF_STATUS 245 HPDF_CMapEncoder_InitAttr (HPDF_Encoder encoder); 246 247 248 void 249 HPDF_CMapEncoder_Free (HPDF_Encoder encoder); 250 251 252 HPDF_STATUS 253 HPDF_CMapEncoder_Write (HPDF_Encoder encoder, 254 HPDF_Stream out); 255 256 257 HPDF_UNICODE 258 HPDF_CMapEncoder_ToUnicode (HPDF_Encoder encoder, 259 HPDF_UINT16 code); 260 261 HPDF_UINT16 262 HPDF_CMapEncoder_ToCID (HPDF_Encoder encoder, 263 HPDF_UINT16 code); 264 265 HPDF_STATUS 266 HPDF_CMapEncoder_SetParseText (HPDF_Encoder encoder, 267 HPDF_ParseText_Rec *state, 268 const HPDF_BYTE *text, 269 HPDF_UINT len); 270 271 HPDF_ByteType 272 HPDF_CMapEncoder_ByteType (HPDF_Encoder encoder, 273 HPDF_ParseText_Rec *state); 274 275 276 HPDF_STATUS 277 HPDF_CMapEncoder_AddCMap (HPDF_Encoder encoder, 278 const HPDF_CidRange_Rec *range); 279 280 281 HPDF_STATUS 282 HPDF_CMapEncoder_AddNotDefRange (HPDF_Encoder encoder, 283 HPDF_CidRange_Rec range); 284 285 286 HPDF_STATUS 287 HPDF_CMapEncoder_AddCodeSpaceRange (HPDF_Encoder encoder, 288 HPDF_CidRange_Rec range); 289 290 291 void 292 HPDF_CMapEncoder_SetUnicodeArray (HPDF_Encoder encoder, 293 const HPDF_UnicodeMap_Rec *array1); 294 295 296 HPDF_STATUS 297 HPDF_CMapEncoder_AddJWWLineHead (HPDF_Encoder encoder, 298 const HPDF_UINT16 *code); 299 300 HPDF_BOOL 301 HPDF_Encoder_CheckJWWLineHead (HPDF_Encoder encoder, 302 const HPDF_UINT16 code); 303 304 /*-- utility functions ----------------------------------*/ 305 306 const char* 307 HPDF_UnicodeToGryphName (HPDF_UNICODE unicode); 308 309 310 HPDF_UNICODE 311 HPDF_GryphNameToUnicode (const char *gryph_name); 312 313 #ifdef __cplusplus 314 } 315 #endif /* __cplusplus */ 316 317 #endif /* _HPDF_ENCODER_H */ 318