text: /***************************************************************************/
  /*                                                                         */
  /*  ftgxval.h                                                              */
  /*                                                                         */
  /*    FreeType API for validating TrueTypeGX/AAT tables (specification).   */
  /*                                                                         */
  /*  Copyright 2004, 2005 by                                                */
  /*  Masatake YAMATO, Redhat K.K,                                           */
  /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
  /*                                                                         */
  /*  This file is part of the FreeType project, and may only be used,       */
  /*  modified, and distributed under the terms of the FreeType project      */
  /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
  /*  this file you indicate that you have read the license and              */
  /*  understand and accept it fully.                                        */
  /*                                                                         */
  /***************************************************************************/
  
  /***************************************************************************/
  /*                                                                         */
  /* gxvalid is derived from both gxlayout module and otvalid module.        */
  /* Development of gxlayout is supported by the Information-technology      */
  /* Promotion Agency(IPA), Japan.                                           */
  /*                                                                         */
  /***************************************************************************/
  
  
  #ifndef __FTGXVAL_H__
  #define __FTGXVAL_H__
  
  #include <ft2build.h>
  #include FT_FREETYPE_H
  
  #ifdef FREETYPE_H
  #error "freetype.h of FreeType 1 has been loaded!"
  #error "Please fix the directory search order for header files"
  #error "so that freetype.h of FreeType 2 is found first."
  #endif
  
  
  FT_BEGIN_HEADER
  
  
    /*************************************************************************/
    /*                                                                       */
    /* <Section>                                                             */
    /*    gx_validation                                                      */
    /*                                                                       */
    /* <Title>                                                               */
    /*    TrueTypeGX/AAT Validation                                          */
    /*                                                                       */
    /* <Abstract>                                                            */
    /*    An API to validate TrueTypeGX/AAT tables.                          */
    /*                                                                       */
    /* <Description>                                                         */
    /*    This section contains the declaration of functions to validate     */
    /*    some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd,  */
    /*    trak, prop, lcar).                                                 */
    /*                                                                       */
    /*************************************************************************/
  
  
    /*************************************************************************/
    /*                                                                       */
    /*                                                                       */
    /* Warning: Use FT_VALIDATE_XXX to validate a table.                     */
    /*          Following definitions are for gxvalid developers.            */
    /*                                                                       */
    /*                                                                       */
    /*************************************************************************/
  
  #define FT_VALIDATE_feat_INDEX     0
  #define FT_VALIDATE_mort_INDEX     1
  #define FT_VALIDATE_morx_INDEX     2
  #define FT_VALIDATE_bsln_INDEX     3
  #define FT_VALIDATE_just_INDEX     4
  #define FT_VALIDATE_kern_INDEX     5
  #define FT_VALIDATE_opbd_INDEX     6
  #define FT_VALIDATE_trak_INDEX     7
  #define FT_VALIDATE_prop_INDEX     8
  #define FT_VALIDATE_lcar_INDEX     9
  #define FT_VALIDATE_GX_LAST_INDEX  FT_VALIDATE_lcar_INDEX
  #define FT_VALIDATE_GX_LENGTH     (FT_VALIDATE_GX_LAST_INDEX + 1)
  
    /* Up to 0x1000 is used by otvalid.
       Ox2xxx is reserved for feature OT extension. */
  #define FT_VALIDATE_GX_START 0x4000
  #define FT_VALIDATE_GX_BITFIELD( tag )                  \
    ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
  
  
   /**********************************************************************
    *
    * @enum:
    *    FT_VALIDATE_GXXXX
    *
    * @description:
    *    A list of bit-field constants used with @FT_TrueTypeGX_Validate to
    *    indicate which TrueTypeGX/AAT Type tables should be validated.
    *
    * @values:
    *    FT_VALIDATE_feat ::
    *      Validate `feat' table.
    *
    * @values:
    *    FT_VALIDATE_mort ::
    *      Validate `mort' table.
    *
    * @values:
    *    FT_VALIDATE_morx ::
    *      Validate `morx' table.
    *
    * @values:
    *    FT_VALIDATE_bsln ::
    *      Validate `bsln' table.
    *
    * @values:
    *    FT_VALIDATE_just ::
    *      Validate `just' table.
    *
    * @values:
    *    FT_VALIDATE_kern ::
    *      Validate `kern' table.
    *
    * @values:
    *    FT_VALIDATE_opbd ::
    *      Validate `opbd' table.
    *
    * @values:
    *    FT_VALIDATE_trak ::
    *      Validate `trak' table.
    *
    * @values:
    *    FT_VALIDATE_prop ::
    *      Validate `prop' table.
    *
    * @values:
    *    FT_VALIDATE_lcar ::
    *      Validate `lcar' table.
    *
    * @values:
    *    FT_VALIDATE_GX ::
    *      Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern,
    *      opbd, trak, prop and lcar).
    *
    */
  
  #define FT_VALIDATE_feat  FT_VALIDATE_GX_BITFIELD( feat )
  #define FT_VALIDATE_mort  FT_VALIDATE_GX_BITFIELD( mort )
  #define FT_VALIDATE_morx  FT_VALIDATE_GX_BITFIELD( morx )
  #define FT_VALIDATE_bsln  FT_VALIDATE_GX_BITFIELD( bsln )
  #define FT_VALIDATE_just  FT_VALIDATE_GX_BITFIELD( just )
  #define FT_VALIDATE_kern  FT_VALIDATE_GX_BITFIELD( kern )
  #define FT_VALIDATE_opbd  FT_VALIDATE_GX_BITFIELD( opbd )
  #define FT_VALIDATE_trak  FT_VALIDATE_GX_BITFIELD( trak )
  #define FT_VALIDATE_prop  FT_VALIDATE_GX_BITFIELD( prop )
  #define FT_VALIDATE_lcar  FT_VALIDATE_GX_BITFIELD( lcar )
  
  #define FT_VALIDATE_GX  ( FT_VALIDATE_feat | \
                            FT_VALIDATE_mort | \
                            FT_VALIDATE_morx | \
                            FT_VALIDATE_bsln | \
                            FT_VALIDATE_just | \
                            FT_VALIDATE_kern | \
                            FT_VALIDATE_opbd | \
                            FT_VALIDATE_trak | \
                            FT_VALIDATE_prop | \
                            FT_VALIDATE_lcar )
  
  
    /* */
  
   /**********************************************************************
    *
    * @function:
    *    FT_TrueTypeGX_Validate
    *
    * @description:
    *    Validate various TrueTypeGX tables to assure that all offsets and
    *    indices are valid.  The idea is that a higher-level library which
    *    actually does the text layout can access those tables without
    *    error checking (which can be quite time consuming).
    *
    * @input:
    *    face ::
    *       A handle to the input face.
    *
    *    validation_flags ::
    *       A bit field which specifies the tables to be validated.  See
    *       @FT_VALIDATE_GXXXX for possible values.
    *
    *    table_length ::
    *       The size of the `tables' array.  Normally, `FT_VALIDATE_GX_LENGTH'
    *       should be passed.
    *
    * @output
    *    tables ::
    *       The array where all validated sfnt tables are stored.
    *       The array itself must be allocated by a client.
    *
    * @return:
    *   FreeType error code.  0 means success.
    *
    * @note:
    *   This function only works with TrueTypeGX fonts, returning an error
    *   otherwise.
    *
    *   After use, the application should deallocate the buffers pointed to by
    *   each tables' element.  A NULL value indicates that the table either
    *   doesn't exist in the font, the application hasn't asked for
    *   validation, or the validator doesn't have the ability to validate the
    *   sfnt table.
    */
    FT_EXPORT( FT_Error )
    FT_TrueTypeGX_Validate( FT_Face   face,
                            FT_UInt   validation_flags,
                            FT_Bytes  tables[FT_VALIDATE_GX_LENGTH],
                            FT_UInt   table_length );
  
  
    /* */
  
   /**********************************************************************
    *
    * @enum:
    *    FT_VALIDATE_CKERNXXX
    *
    * @description:
    *    A list of bit-field constants used with @FT_ClassicKern_Validate
    *    to indicate the classic kern dialect or dialects.  If the selected
    *    type doesn't fit, @FT_ClassicKern_Validate regards the table as
    *    invalid.
    *
    * @values:
    *    FT_VALIDATE_MS ::
    *      Handle the `kern' table as a classic Microsoft kern table.
    *
    * @values:
    *    FT_VALIDATE_APPLE ::
    *      Handle the `kern' table as a classic Apple kern table.
    *
    * @values:
    *    FT_VALIDATE_CKERN ::
    *      Handle the `kern' as either classic Apple or Microsoft kern table.
    */
  #define FT_VALIDATE_MS     ( FT_VALIDATE_GX_START << 0 )
  #define FT_VALIDATE_APPLE  ( FT_VALIDATE_GX_START << 1 )
  
  #define FT_VALIDATE_CKERN  ( FT_VALIDATE_MS | FT_VALIDATE_APPLE )
  
  
    /* */
  
   /**********************************************************************
    *
    * @function:
    *    FT_ClassicKern_Validate
    *
    * @description:
    *    Validate classic (16bit format) kern table to assure that the offsets
    *    and indices are valid.  The idea is that a higher-level library which
    *    actually does the text layout can access those tables without error
    *    checking (which can be quite time consuming).
    *
    *    The `kern' table validator in @FT_TrueTypeGX_Validate deals with both
    *    the new 32bit format and the classic 16bit format, while
    *    FT_ClassicKern_Validate only supports the classic 16bit format.
    *
    * @input:
    *    face ::
    *       A handle to the input face.
    *
    *    validation_flags ::
    *       A bit field which specifies the dialect to be validated.  See
    *       @FT_VALIDATE_CKERNXXX for possible values.
    *
    * @output
    *    ckern_table ::
    *       A pointer to the kern table.
    *
    * @return:
    *   FreeType error code.  0 means success.
    *
    * @note:
    *   After use, the application should deallocate the buffers pointed to by
    *   ckern_table.  A NULL value indicates that the table doesn't exist in
    *   the font.
    */
    FT_EXPORT( FT_Error )
    FT_ClassicKern_Validate( FT_Face    face,
                             FT_UInt    validation_flags,
                             FT_Bytes  *ckern_table );
  
  
   /* */
  
  
  FT_END_HEADER
  
  #endif /* __FTGXVAL_H__ */
  
  
  /* END */
  