1 /*
2  * << Haru Free PDF Library >> -- hpdf_types.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_TYPES_H
19 #define _HPDF_TYPES_H
20 
21 #ifndef HPDF_STDCALL
22 #ifdef HPDF_DLL_MAKE
23 #define HPDF_STDCALL __stdcall
24 #else
25 #ifdef HPDF_DLL
26 #define HPDF_STDCALL __stdcall
27 #else
28 #define HPDF_STDCALL
29 #endif
30 #endif
31 #endif
32 
33 #include <stdlib.h>
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 /*----------------------------------------------------------------------------*/
40 /*----- type definition ------------------------------------------------------*/
41 
42 
43 /*  native OS integer types */
44 typedef  signed int          HPDF_INT;
45 typedef  unsigned int        HPDF_UINT;
46 
47 
48 /*  64bit integer types
49  */
50 typedef  signed long long    HPDF_INT64;
51 typedef  unsigned long long  HPDF_UINT64;
52 
53 
54 /*  32bit integer types
55  */
56 typedef  signed int          HPDF_INT32;
57 typedef  unsigned int        HPDF_UINT32;
58 
59 
60 /*  16bit integer types
61  */
62 typedef  signed short        HPDF_INT16;
63 typedef  unsigned short      HPDF_UINT16;
64 
65 
66 /*  8bit integer types
67  */
68 typedef  signed char         HPDF_INT8;
69 typedef  unsigned char       HPDF_UINT8;
70 
71 
72 /*  8bit binary types
73  */
74 typedef  unsigned char       HPDF_BYTE;
75 
76 
77 /*  float type (32bit IEEE754)
78  */
79 typedef  float               HPDF_REAL;
80 
81 
82 /*  double type (64bit IEEE754)
83  */
84 typedef  double              HPDF_DOUBLE;
85 
86 
87 /*  boolean type (0: False, !0: True)
88  */
89 typedef  signed int          HPDF_BOOL;
90 
91 
92 /*  error-no type (32bit unsigned integer)
93  */
94 typedef  unsigned long       HPDF_STATUS;
95 
96 
97 /*  charactor-code type (16bit)
98  */
99 typedef  HPDF_UINT16         HPDF_CID;
100 typedef  HPDF_UINT16         HPDF_UNICODE;
101 
102 
103 /*  HPDF_Point struct
104  */
105 typedef  struct  _HPDF_Point {
106     HPDF_REAL  x;
107     HPDF_REAL  y;
108 } HPDF_Point;
109 
110 typedef  struct _HPDF_Rect {
111     HPDF_REAL  left;
112     HPDF_REAL  bottom;
113     HPDF_REAL  right;
114     HPDF_REAL  top;
115 } HPDF_Rect;
116 
117 /*  HPDF_Point3D struct
118 */
119 typedef  struct  _HPDF_Point3D {
120 	HPDF_REAL  x;
121 	HPDF_REAL  y;
122 	HPDF_REAL  z;
123 } HPDF_Point3D;
124 
125 typedef struct _HPDF_Rect HPDF_Box;
126 
127 /* HPDF_Date struct
128  */
129 typedef  struct  _HPDF_Date {
130     HPDF_INT    year;
131     HPDF_INT    month;
132     HPDF_INT    day;
133     HPDF_INT    hour;
134     HPDF_INT    minutes;
135     HPDF_INT    seconds;
136     char        ind;
137     HPDF_INT    off_hour;
138     HPDF_INT    off_minutes;
139 } HPDF_Date;
140 
141 
142 typedef enum _HPDF_InfoType {
143     /* date-time type parameters */
144     HPDF_INFO_CREATION_DATE = 0,
145     HPDF_INFO_MOD_DATE,
146 
147     /* string type parameters */
148     HPDF_INFO_AUTHOR,
149     HPDF_INFO_CREATOR,
150     HPDF_INFO_PRODUCER,
151     HPDF_INFO_TITLE,
152     HPDF_INFO_SUBJECT,
153     HPDF_INFO_KEYWORDS,
154     HPDF_INFO_TRAPPED,
155     HPDF_INFO_GTS_PDFX,
156     HPDF_INFO_EOF
157 } HPDF_InfoType;
158 
159 /* PDF-A Types */
160 
161 typedef enum _HPDF_PDFA_TYPE
162 {
163     HPDF_PDFA_1A = 0,
164     HPDF_PDFA_1B = 1
165 } HPDF_PDFAType;
166 
167 
168 typedef enum _HPDF_PdfVer {
169     HPDF_VER_12 = 0,
170     HPDF_VER_13,
171     HPDF_VER_14,
172     HPDF_VER_15,
173     HPDF_VER_16,
174     HPDF_VER_17,
175     HPDF_VER_EOF
176 } HPDF_PDFVer;
177 
178 typedef enum  _HPDF_EncryptMode {
179     HPDF_ENCRYPT_R2    = 2,
180     HPDF_ENCRYPT_R3    = 3
181 } HPDF_EncryptMode;
182 
183 
184 typedef void
185 (HPDF_STDCALL *HPDF_Error_Handler)  (HPDF_STATUS   error_no,
186                                      HPDF_STATUS   detail_no,
187                                      void         *user_data);
188 
189 typedef void*
190 (HPDF_STDCALL *HPDF_Alloc_Func)  (HPDF_UINT  size);
191 
192 
193 typedef void
194 (HPDF_STDCALL *HPDF_Free_Func)  (void  *aptr);
195 
196 
197 /*---------------------------------------------------------------------------*/
198 /*------ text width struct --------------------------------------------------*/
199 
200 typedef struct _HPDF_TextWidth {
201     HPDF_UINT numchars;
202 
203     /* don't use this value (it may be change in the feature).
204        use numspace as alternated. */
205     HPDF_UINT numwords;
206 
207     HPDF_UINT width;
208     HPDF_UINT numspace;
209 } HPDF_TextWidth;
210 
211 
212 /*---------------------------------------------------------------------------*/
213 /*------ dash mode ----------------------------------------------------------*/
214 
215 typedef struct _HPDF_DashMode {
216     HPDF_UINT16  ptn[8];
217     HPDF_UINT    num_ptn;
218     HPDF_UINT    phase;
219 } HPDF_DashMode;
220 
221 
222 /*---------------------------------------------------------------------------*/
223 /*----- HPDF_TransMatrix struct ---------------------------------------------*/
224 
225 typedef struct _HPDF_TransMatrix {
226     HPDF_REAL   a;
227     HPDF_REAL   b;
228     HPDF_REAL   c;
229     HPDF_REAL   d;
230     HPDF_REAL   x;
231     HPDF_REAL   y;
232 } HPDF_TransMatrix;
233 
234 /*---------------------------------------------------------------------------*/
235 /*----- HPDF_3DMatrix struct ------------------------------------------------*/
236 
237 typedef struct _HPDF_3DMatrix {
238     HPDF_REAL   a;
239     HPDF_REAL   b;
240     HPDF_REAL   c;
241     HPDF_REAL   d;
242     HPDF_REAL   e;
243     HPDF_REAL   f;
244     HPDF_REAL   g;
245     HPDF_REAL   h;
246     HPDF_REAL   i;
247     HPDF_REAL   tx;
248     HPDF_REAL   ty;
249     HPDF_REAL   tz;
250 } HPDF_3DMatrix;
251 
252 /*---------------------------------------------------------------------------*/
253 
254 typedef enum _HPDF_ColorSpace {
255     HPDF_CS_DEVICE_GRAY = 0,
256     HPDF_CS_DEVICE_RGB,
257     HPDF_CS_DEVICE_CMYK,
258     HPDF_CS_CAL_GRAY,
259     HPDF_CS_CAL_RGB,
260     HPDF_CS_LAB,
261     HPDF_CS_ICC_BASED,
262     HPDF_CS_SEPARATION,
263     HPDF_CS_DEVICE_N,
264     HPDF_CS_INDEXED,
265     HPDF_CS_PATTERN,
266     HPDF_CS_EOF
267 } HPDF_ColorSpace;
268 
269 /*---------------------------------------------------------------------------*/
270 /*----- HPDF_RGBColor struct ------------------------------------------------*/
271 
272 typedef struct _HPDF_RGBColor {
273     HPDF_REAL   r;
274     HPDF_REAL   g;
275     HPDF_REAL   b;
276 } HPDF_RGBColor;
277 
278 /*---------------------------------------------------------------------------*/
279 /*----- HPDF_CMYKColor struct -----------------------------------------------*/
280 
281 typedef struct _HPDF_CMYKColor {
282     HPDF_REAL   c;
283     HPDF_REAL   m;
284     HPDF_REAL   y;
285     HPDF_REAL   k;
286 } HPDF_CMYKColor;
287 
288 /*---------------------------------------------------------------------------*/
289 /*------ The line cap style -------------------------------------------------*/
290 
291 typedef enum _HPDF_LineCap {
292     HPDF_BUTT_END = 0,
293     HPDF_ROUND_END,
294     HPDF_PROJECTING_SCUARE_END,
295     HPDF_LINECAP_EOF
296 } HPDF_LineCap;
297 
298 /*----------------------------------------------------------------------------*/
299 /*------ The line join style -------------------------------------------------*/
300 
301 typedef enum _HPDF_LineJoin {
302     HPDF_MITER_JOIN = 0,
303     HPDF_ROUND_JOIN,
304     HPDF_BEVEL_JOIN,
305     HPDF_LINEJOIN_EOF
306 } HPDF_LineJoin;
307 
308 /*----------------------------------------------------------------------------*/
309 /*------ The text rendering mode ---------------------------------------------*/
310 
311 typedef enum _HPDF_TextRenderingMode {
312     HPDF_FILL = 0,
313     HPDF_STROKE,
314     HPDF_FILL_THEN_STROKE,
315     HPDF_INVISIBLE,
316     HPDF_FILL_CLIPPING,
317     HPDF_STROKE_CLIPPING,
318     HPDF_FILL_STROKE_CLIPPING,
319     HPDF_CLIPPING,
320     HPDF_RENDERING_MODE_EOF
321 } HPDF_TextRenderingMode;
322 
323 
324 typedef enum _HPDF_WritingMode {
325     HPDF_WMODE_HORIZONTAL = 0,
326     HPDF_WMODE_VERTICAL,
327     HPDF_WMODE_EOF
328 } HPDF_WritingMode;
329 
330 
331 typedef enum _HPDF_PageLayout {
332     HPDF_PAGE_LAYOUT_SINGLE = 0,
333     HPDF_PAGE_LAYOUT_ONE_COLUMN,
334     HPDF_PAGE_LAYOUT_TWO_COLUMN_LEFT,
335     HPDF_PAGE_LAYOUT_TWO_COLUMN_RIGHT,
336     HPDF_PAGE_LAYOUT_TWO_PAGE_LEFT,
337     HPDF_PAGE_LAYOUT_TWO_PAGE_RIGHT,
338     HPDF_PAGE_LAYOUT_EOF
339 } HPDF_PageLayout;
340 
341 
342 typedef enum _HPDF_PageMode {
343     HPDF_PAGE_MODE_USE_NONE = 0,
344     HPDF_PAGE_MODE_USE_OUTLINE,
345     HPDF_PAGE_MODE_USE_THUMBS,
346     HPDF_PAGE_MODE_FULL_SCREEN,
347 /*  HPDF_PAGE_MODE_USE_OC,
348     HPDF_PAGE_MODE_USE_ATTACHMENTS,
349  */
350     HPDF_PAGE_MODE_EOF
351 } HPDF_PageMode;
352 
353 
354 typedef enum _HPDF_PageNumStyle {
355     HPDF_PAGE_NUM_STYLE_DECIMAL = 0,
356     HPDF_PAGE_NUM_STYLE_UPPER_ROMAN,
357     HPDF_PAGE_NUM_STYLE_LOWER_ROMAN,
358     HPDF_PAGE_NUM_STYLE_UPPER_LETTERS,
359     HPDF_PAGE_NUM_STYLE_LOWER_LETTERS,
360     HPDF_PAGE_NUM_STYLE_EOF
361 } HPDF_PageNumStyle;
362 
363 
364 typedef enum _HPDF_DestinationType {
365     HPDF_XYZ = 0,
366     HPDF_FIT,
367     HPDF_FIT_H,
368     HPDF_FIT_V,
369     HPDF_FIT_R,
370     HPDF_FIT_B,
371     HPDF_FIT_BH,
372     HPDF_FIT_BV,
373     HPDF_DST_EOF
374 } HPDF_DestinationType;
375 
376 
377 typedef enum _HPDF_AnnotType {
378     HPDF_ANNOT_TEXT_NOTES,
379     HPDF_ANNOT_LINK,
380     HPDF_ANNOT_SOUND,
381     HPDF_ANNOT_FREE_TEXT,
382     HPDF_ANNOT_STAMP,
383     HPDF_ANNOT_SQUARE,
384     HPDF_ANNOT_CIRCLE,
385     HPDF_ANNOT_STRIKE_OUT,
386     HPDF_ANNOT_HIGHTLIGHT,
387     HPDF_ANNOT_UNDERLINE,
388     HPDF_ANNOT_INK,
389     HPDF_ANNOT_FILE_ATTACHMENT,
390     HPDF_ANNOT_POPUP,
391     HPDF_ANNOT_3D,
392     HPDF_ANNOT_SQUIGGLY,
393 	HPDF_ANNOT_LINE,
394 	HPDF_ANNOT_PROJECTION,
395 	HPDF_ANNOT_WIDGET
396 } HPDF_AnnotType;
397 
398 
399 typedef enum _HPDF_AnnotFlgs {
400     HPDF_ANNOT_INVISIBLE,
401     HPDF_ANNOT_HIDDEN,
402     HPDF_ANNOT_PRINT,
403     HPDF_ANNOT_NOZOOM,
404     HPDF_ANNOT_NOROTATE,
405     HPDF_ANNOT_NOVIEW,
406     HPDF_ANNOT_READONLY
407 } HPDF_AnnotFlgs;
408 
409 
410 typedef enum _HPDF_AnnotHighlightMode {
411     HPDF_ANNOT_NO_HIGHTLIGHT = 0,
412     HPDF_ANNOT_INVERT_BOX,
413     HPDF_ANNOT_INVERT_BORDER,
414     HPDF_ANNOT_DOWN_APPEARANCE,
415     HPDF_ANNOT_HIGHTLIGHT_MODE_EOF
416 } HPDF_AnnotHighlightMode;
417 
418 
419 typedef enum _HPDF_AnnotIcon {
420     HPDF_ANNOT_ICON_COMMENT = 0,
421     HPDF_ANNOT_ICON_KEY,
422     HPDF_ANNOT_ICON_NOTE,
423     HPDF_ANNOT_ICON_HELP,
424     HPDF_ANNOT_ICON_NEW_PARAGRAPH,
425     HPDF_ANNOT_ICON_PARAGRAPH,
426     HPDF_ANNOT_ICON_INSERT,
427     HPDF_ANNOT_ICON_EOF
428 } HPDF_AnnotIcon;
429 
430 typedef enum _HPDF_AnnotIntent {
431     HPDF_ANNOT_INTENT_FREETEXTCALLOUT = 0,
432     HPDF_ANNOT_INTENT_FREETEXTTYPEWRITER,
433     HPDF_ANNOT_INTENT_LINEARROW,
434     HPDF_ANNOT_INTENT_LINEDIMENSION,
435     HPDF_ANNOT_INTENT_POLYGONCLOUD,
436     HPDF_ANNOT_INTENT_POLYLINEDIMENSION,
437     HPDF_ANNOT_INTENT_POLYGONDIMENSION
438 } HPDF_AnnotIntent;
439 
440 typedef enum _HPDF_LineAnnotEndingStyle {
441     HPDF_LINE_ANNOT_NONE = 0,
442     HPDF_LINE_ANNOT_SQUARE,
443     HPDF_LINE_ANNOT_CIRCLE,
444     HPDF_LINE_ANNOT_DIAMOND,
445     HPDF_LINE_ANNOT_OPENARROW,
446     HPDF_LINE_ANNOT_CLOSEDARROW,
447     HPDF_LINE_ANNOT_BUTT,
448     HPDF_LINE_ANNOT_ROPENARROW,
449     HPDF_LINE_ANNOT_RCLOSEDARROW,
450     HPDF_LINE_ANNOT_SLASH
451 } HPDF_LineAnnotEndingStyle;
452 
453 typedef enum _HPDF_LineAnnotCapPosition{
454     HPDF_LINE_ANNOT_CAP_INLINE = 0,
455     HPDF_LINE_ANNOT_CAP_TOP
456 } HPDF_LineAnnotCapPosition;
457 
458 typedef enum _HPDF_StampAnnotName{
459     HPDF_STAMP_ANNOT_APPROVED = 0,
460     HPDF_STAMP_ANNOT_EXPERIMENTAL,
461     HPDF_STAMP_ANNOT_NOTAPPROVED,
462     HPDF_STAMP_ANNOT_ASIS,
463     HPDF_STAMP_ANNOT_EXPIRED,
464     HPDF_STAMP_ANNOT_NOTFORPUBLICRELEASE,
465     HPDF_STAMP_ANNOT_CONFIDENTIAL,
466     HPDF_STAMP_ANNOT_FINAL,
467     HPDF_STAMP_ANNOT_SOLD,
468     HPDF_STAMP_ANNOT_DEPARTMENTAL,
469     HPDF_STAMP_ANNOT_FORCOMMENT,
470     HPDF_STAMP_ANNOT_TOPSECRET,
471     HPDF_STAMP_ANNOT_DRAFT,
472     HPDF_STAMP_ANNOT_FORPUBLICRELEASE
473 } HPDF_StampAnnotName;
474 
475 /*----------------------------------------------------------------------------*/
476 /*------ border stype --------------------------------------------------------*/
477 
478 typedef enum _HPDF_BSSubtype {
479     HPDF_BS_SOLID,
480     HPDF_BS_DASHED,
481     HPDF_BS_BEVELED,
482     HPDF_BS_INSET,
483     HPDF_BS_UNDERLINED
484 } HPDF_BSSubtype;
485 
486 
487 /*----- blend modes ----------------------------------------------------------*/
488 
489 typedef enum _HPDF_BlendMode {
490     HPDF_BM_NORMAL,
491     HPDF_BM_MULTIPLY,
492     HPDF_BM_SCREEN,
493     HPDF_BM_OVERLAY,
494     HPDF_BM_DARKEN,
495     HPDF_BM_LIGHTEN,
496     HPDF_BM_COLOR_DODGE,
497     HPDF_BM_COLOR_BUM,
498     HPDF_BM_HARD_LIGHT,
499     HPDF_BM_SOFT_LIGHT,
500     HPDF_BM_DIFFERENCE,
501     HPDF_BM_EXCLUSHON,
502     HPDF_BM_EOF
503 } HPDF_BlendMode;
504 
505 /*----- slide show -----------------------------------------------------------*/
506 
507 typedef enum _HPDF_TransitionStyle {
508     HPDF_TS_WIPE_RIGHT = 0,
509     HPDF_TS_WIPE_UP,
510     HPDF_TS_WIPE_LEFT,
511     HPDF_TS_WIPE_DOWN,
512     HPDF_TS_BARN_DOORS_HORIZONTAL_OUT,
513     HPDF_TS_BARN_DOORS_HORIZONTAL_IN,
514     HPDF_TS_BARN_DOORS_VERTICAL_OUT,
515     HPDF_TS_BARN_DOORS_VERTICAL_IN,
516     HPDF_TS_BOX_OUT,
517     HPDF_TS_BOX_IN,
518     HPDF_TS_BLINDS_HORIZONTAL,
519     HPDF_TS_BLINDS_VERTICAL,
520     HPDF_TS_DISSOLVE,
521     HPDF_TS_GLITTER_RIGHT,
522     HPDF_TS_GLITTER_DOWN,
523     HPDF_TS_GLITTER_TOP_LEFT_TO_BOTTOM_RIGHT,
524     HPDF_TS_REPLACE,
525     HPDF_TS_EOF
526 } HPDF_TransitionStyle;
527 
528 /*----------------------------------------------------------------------------*/
529 
530 typedef enum _HPDF_PageSizes {
531     HPDF_PAGE_SIZE_LETTER = 0,
532     HPDF_PAGE_SIZE_LEGAL,
533     HPDF_PAGE_SIZE_A3,
534     HPDF_PAGE_SIZE_A4,
535     HPDF_PAGE_SIZE_A5,
536     HPDF_PAGE_SIZE_B4,
537     HPDF_PAGE_SIZE_B5,
538     HPDF_PAGE_SIZE_EXECUTIVE,
539     HPDF_PAGE_SIZE_US4x6,
540     HPDF_PAGE_SIZE_US4x8,
541     HPDF_PAGE_SIZE_US5x7,
542     HPDF_PAGE_SIZE_COMM10,
543     HPDF_PAGE_SIZE_EOF
544 } HPDF_PageSizes;
545 
546 
547 typedef enum _HPDF_PageDirection {
548     HPDF_PAGE_PORTRAIT = 0,
549     HPDF_PAGE_LANDSCAPE
550 } HPDF_PageDirection;
551 
552 
553 typedef enum  _HPDF_EncoderType {
554     HPDF_ENCODER_TYPE_SINGLE_BYTE,
555     HPDF_ENCODER_TYPE_DOUBLE_BYTE,
556     HPDF_ENCODER_TYPE_UNINITIALIZED,
557     HPDF_ENCODER_UNKNOWN
558 } HPDF_EncoderType;
559 
560 
561 typedef enum _HPDF_ByteType {
562     HPDF_BYTE_TYPE_SINGLE = 0,
563     HPDF_BYTE_TYPE_LEAD,
564     HPDF_BYTE_TYPE_TRIAL,
565     HPDF_BYTE_TYPE_UNKNOWN
566 } HPDF_ByteType;
567 
568 
569 typedef enum _HPDF_TextAlignment {
570     HPDF_TALIGN_LEFT = 0,
571     HPDF_TALIGN_RIGHT,
572     HPDF_TALIGN_CENTER,
573     HPDF_TALIGN_JUSTIFY
574 } HPDF_TextAlignment;
575 
576 /*----------------------------------------------------------------------------*/
577 
578 /* Name Dictionary values -- see PDF reference section 7.7.4 */
579 typedef enum _HPDF_NameDictKey {
580     HPDF_NAME_EMBEDDED_FILES = 0,    /* TODO the rest */
581     HPDF_NAME_EOF
582 } HPDF_NameDictKey;
583 
584 /*----------------------------------------------------------------------------*/
585 
586 typedef enum _HPDF_ShadingType {
587   HPDF_SHADING_FREE_FORM_TRIANGLE_MESH = 4 /* TODO the rest */
588 } HPDF_ShadingType;
589 
590 typedef enum _HPDF_Shading_FreeFormTriangleMeshEdgeFlag {
591   HPDF_FREE_FORM_TRI_MESH_EDGEFLAG_NO_CONNECTION = 0,
592   HPDF_FREE_FORM_TRI_MESH_EDGEFLAG_BC,
593   HPDF_FREE_FORM_TRI_MESH_EDGEFLAG_AC
594 } HPDF_Shading_FreeFormTriangleMeshEdgeFlag;
595 
596 /*----------------------------------------------------------------------------*/
597 
598 #ifdef __cplusplus
599 }
600 #endif /* __cplusplus */
601 
602 #endif /* _HPDF_TYPES_H */
603 
604