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