Home | History | Annotate | Download | only in freetype
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  ftmoderr.h                                                             */
      4 /*                                                                         */
      5 /*    FreeType module error offsets (specification).                       */
      6 /*                                                                         */
      7 /*  Copyright 2001-2005, 2010, 2013 by                                     */
      8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
      9 /*                                                                         */
     10 /*  This file is part of the FreeType project, and may only be used,       */
     11 /*  modified, and distributed under the terms of the FreeType project      */
     12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
     13 /*  this file you indicate that you have read the license and              */
     14 /*  understand and accept it fully.                                        */
     15 /*                                                                         */
     16 /***************************************************************************/
     17 
     18 
     19   /*************************************************************************/
     20   /*                                                                       */
     21   /* This file is used to define the FreeType module error codes.          */
     22   /*                                                                       */
     23   /* If the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in `ftoption.h' is    */
     24   /* set, the lower byte of an error value identifies the error code as    */
     25   /* usual.  In addition, the higher byte identifies the module.  For      */
     26   /* example, the error `FT_Err_Invalid_File_Format' has value 0x0003, the */
     27   /* error `TT_Err_Invalid_File_Format' has value 0x1303, the error        */
     28   /* `T1_Err_Invalid_File_Format' has value 0x1403, etc.                   */
     29   /*                                                                       */
     30   /* Note that `FT_Err_Ok', `TT_Err_Ok', etc. are always equal to zero,    */
     31   /* including the high byte.                                              */
     32   /*                                                                       */
     33   /* If FT_CONFIG_OPTION_USE_MODULE_ERRORS isn't set, the higher byte of   */
     34   /* an error value is set to zero.                                        */
     35   /*                                                                       */
     36   /* To hide the various `XXX_Err_' prefixes in the source code, FreeType  */
     37   /* provides some macros in `fttypes.h'.                                  */
     38   /*                                                                       */
     39   /*   FT_ERR( err )                                                       */
     40   /*     Add current error module prefix (as defined with the              */
     41   /*     `FT_ERR_PREFIX' macro) to `err'.  For example, in the BDF module  */
     42   /*     the line                                                          */
     43   /*                                                                       */
     44   /*       error = FT_ERR( Invalid_Outline );                              */
     45   /*                                                                       */
     46   /*     expands to                                                        */
     47   /*                                                                       */
     48   /*       error = BDF_Err_Invalid_Outline;                                */
     49   /*                                                                       */
     50   /*     For simplicity, you can always use `FT_Err_Ok' directly instead   */
     51   /*     of `FT_ERR( Ok )'.                                                */
     52   /*                                                                       */
     53   /*   FT_ERR_EQ( errcode, err )                                           */
     54   /*   FT_ERR_NEQ( errcode, err )                                          */
     55   /*     Compare error code `errcode' with the error `err' for equality    */
     56   /*     and inequality, respectively.  Example:                           */
     57   /*                                                                       */
     58   /*       if ( FT_ERR_EQ( error, Invalid_Outline ) )                      */
     59   /*         ...                                                           */
     60   /*                                                                       */
     61   /*     Using this macro you don't have to think about error prefixes.    */
     62   /*     Of course, if module errors are not active, the above example is  */
     63   /*     the same as                                                       */
     64   /*                                                                       */
     65   /*       if ( error == FT_Err_Invalid_Outline )                          */
     66   /*         ...                                                           */
     67   /*                                                                       */
     68   /*   FT_ERROR_BASE( errcode )                                            */
     69   /*   FT_ERROR_MODULE( errcode )                                          */
     70   /*     Get base error and module error code, respectively.               */
     71   /*                                                                       */
     72   /*                                                                       */
     73   /* It can also be used to create a module error message table easily     */
     74   /* with something like                                                   */
     75   /*                                                                       */
     76   /*   {                                                                   */
     77   /*     #undef __FTMODERR_H__                                             */
     78   /*     #define FT_MODERRDEF( e, v, s )  { FT_Mod_Err_ ## e, s },         */
     79   /*     #define FT_MODERR_START_LIST     {                                */
     80   /*     #define FT_MODERR_END_LIST       { 0, 0 } };                      */
     81   /*                                                                       */
     82   /*     const struct                                                      */
     83   /*     {                                                                 */
     84   /*       int          mod_err_offset;                                    */
     85   /*       const char*  mod_err_msg                                        */
     86   /*     } ft_mod_errors[] =                                               */
     87   /*                                                                       */
     88   /*     #include "ftmoderr.h"                                       */
     89   /*   }                                                                   */
     90   /*                                                                       */
     91   /*************************************************************************/
     92 
     93 
     94 #ifndef __FTMODERR_H__
     95 #define __FTMODERR_H__
     96 
     97 
     98   /*******************************************************************/
     99   /*******************************************************************/
    100   /*****                                                         *****/
    101   /*****                       SETUP MACROS                      *****/
    102   /*****                                                         *****/
    103   /*******************************************************************/
    104   /*******************************************************************/
    105 
    106 
    107 #undef  FT_NEED_EXTERN_C
    108 
    109 #ifndef FT_MODERRDEF
    110 
    111 #ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
    112 #define FT_MODERRDEF( e, v, s )  FT_Mod_Err_ ## e = v,
    113 #else
    114 #define FT_MODERRDEF( e, v, s )  FT_Mod_Err_ ## e = 0,
    115 #endif
    116 
    117 #define FT_MODERR_START_LIST  enum {
    118 #define FT_MODERR_END_LIST    FT_Mod_Err_Max };
    119 
    120 #ifdef __cplusplus
    121 #define FT_NEED_EXTERN_C
    122   extern "C" {
    123 #endif
    124 
    125 #endif /* !FT_MODERRDEF */
    126 
    127 
    128   /*******************************************************************/
    129   /*******************************************************************/
    130   /*****                                                         *****/
    131   /*****               LIST MODULE ERROR BASES                   *****/
    132   /*****                                                         *****/
    133   /*******************************************************************/
    134   /*******************************************************************/
    135 
    136 
    137 #ifdef FT_MODERR_START_LIST
    138   FT_MODERR_START_LIST
    139 #endif
    140 
    141 
    142   FT_MODERRDEF( Base,      0x000, "base module" )
    143   FT_MODERRDEF( Autofit,   0x100, "autofitter module" )
    144   FT_MODERRDEF( BDF,       0x200, "BDF module" )
    145   FT_MODERRDEF( Bzip2,     0x300, "Bzip2 module" )
    146   FT_MODERRDEF( Cache,     0x400, "cache module" )
    147   FT_MODERRDEF( CFF,       0x500, "CFF module" )
    148   FT_MODERRDEF( CID,       0x600, "CID module" )
    149   FT_MODERRDEF( Gzip,      0x700, "Gzip module" )
    150   FT_MODERRDEF( LZW,       0x800, "LZW module" )
    151   FT_MODERRDEF( OTvalid,   0x900, "OpenType validation module" )
    152   FT_MODERRDEF( PCF,       0xA00, "PCF module" )
    153   FT_MODERRDEF( PFR,       0xB00, "PFR module" )
    154   FT_MODERRDEF( PSaux,     0xC00, "PS auxiliary module" )
    155   FT_MODERRDEF( PShinter,  0xD00, "PS hinter module" )
    156   FT_MODERRDEF( PSnames,   0xE00, "PS names module" )
    157   FT_MODERRDEF( Raster,    0xF00, "raster module" )
    158   FT_MODERRDEF( SFNT,     0x1000, "SFNT module" )
    159   FT_MODERRDEF( Smooth,   0x1100, "smooth raster module" )
    160   FT_MODERRDEF( TrueType, 0x1200, "TrueType module" )
    161   FT_MODERRDEF( Type1,    0x1300, "Type 1 module" )
    162   FT_MODERRDEF( Type42,   0x1400, "Type 42 module" )
    163   FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" )
    164   FT_MODERRDEF( GXvalid,  0x1600, "GX validation module" )
    165 
    166 
    167 #ifdef FT_MODERR_END_LIST
    168   FT_MODERR_END_LIST
    169 #endif
    170 
    171 
    172   /*******************************************************************/
    173   /*******************************************************************/
    174   /*****                                                         *****/
    175   /*****                      CLEANUP                            *****/
    176   /*****                                                         *****/
    177   /*******************************************************************/
    178   /*******************************************************************/
    179 
    180 
    181 #ifdef FT_NEED_EXTERN_C
    182   }
    183 #endif
    184 
    185 #undef FT_MODERR_START_LIST
    186 #undef FT_MODERR_END_LIST
    187 #undef FT_MODERRDEF
    188 #undef FT_NEED_EXTERN_C
    189 
    190 
    191 #endif /* __FTMODERR_H__ */
    192 
    193 
    194 /* END */
    195