Home | History | Annotate | Download | only in freetype
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  ftotval.h                                                              */
      4 /*                                                                         */
      5 /*    FreeType API for validating OpenType tables (specification).         */
      6 /*                                                                         */
      7 /*  Copyright 2004-2018 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 /*                                                                         */
     22 /* Warning: This module might be moved to a different library in the       */
     23 /*          future to avoid a tight dependency between FreeType and the    */
     24 /*          OpenType specification.                                        */
     25 /*                                                                         */
     26 /*                                                                         */
     27 /***************************************************************************/
     28 
     29 
     30 #ifndef FTOTVAL_H_
     31 #define FTOTVAL_H_
     32 
     33 #include <ft2build.h>
     34 #include FT_FREETYPE_H
     35 
     36 #ifdef FREETYPE_H
     37 #error "freetype.h of FreeType 1 has been loaded!"
     38 #error "Please fix the directory search order for header files"
     39 #error "so that freetype.h of FreeType 2 is found first."
     40 #endif
     41 
     42 
     43 FT_BEGIN_HEADER
     44 
     45 
     46   /*************************************************************************/
     47   /*                                                                       */
     48   /* <Section>                                                             */
     49   /*    ot_validation                                                      */
     50   /*                                                                       */
     51   /* <Title>                                                               */
     52   /*    OpenType Validation                                                */
     53   /*                                                                       */
     54   /* <Abstract>                                                            */
     55   /*    An API to validate OpenType tables.                                */
     56   /*                                                                       */
     57   /* <Description>                                                         */
     58   /*    This section contains the declaration of functions to validate     */
     59   /*    some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).         */
     60   /*                                                                       */
     61   /* <Order>                                                               */
     62   /*    FT_OpenType_Validate                                               */
     63   /*    FT_OpenType_Free                                                   */
     64   /*                                                                       */
     65   /*    FT_VALIDATE_OTXXX                                                  */
     66   /*                                                                       */
     67   /*************************************************************************/
     68 
     69 
     70  /**********************************************************************
     71   *
     72   * @enum:
     73   *    FT_VALIDATE_OTXXX
     74   *
     75   * @description:
     76   *    A list of bit-field constants used with @FT_OpenType_Validate to
     77   *    indicate which OpenType tables should be validated.
     78   *
     79   * @values:
     80   *    FT_VALIDATE_BASE ::
     81   *      Validate BASE table.
     82   *
     83   *    FT_VALIDATE_GDEF ::
     84   *      Validate GDEF table.
     85   *
     86   *    FT_VALIDATE_GPOS ::
     87   *      Validate GPOS table.
     88   *
     89   *    FT_VALIDATE_GSUB ::
     90   *      Validate GSUB table.
     91   *
     92   *    FT_VALIDATE_JSTF ::
     93   *      Validate JSTF table.
     94   *
     95   *    FT_VALIDATE_MATH ::
     96   *      Validate MATH table.
     97   *
     98   *    FT_VALIDATE_OT ::
     99   *      Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
    100   *
    101   */
    102 #define FT_VALIDATE_BASE  0x0100
    103 #define FT_VALIDATE_GDEF  0x0200
    104 #define FT_VALIDATE_GPOS  0x0400
    105 #define FT_VALIDATE_GSUB  0x0800
    106 #define FT_VALIDATE_JSTF  0x1000
    107 #define FT_VALIDATE_MATH  0x2000
    108 
    109 #define FT_VALIDATE_OT  ( FT_VALIDATE_BASE | \
    110                           FT_VALIDATE_GDEF | \
    111                           FT_VALIDATE_GPOS | \
    112                           FT_VALIDATE_GSUB | \
    113                           FT_VALIDATE_JSTF | \
    114                           FT_VALIDATE_MATH )
    115 
    116  /**********************************************************************
    117   *
    118   * @function:
    119   *    FT_OpenType_Validate
    120   *
    121   * @description:
    122   *    Validate various OpenType tables to assure that all offsets and
    123   *    indices are valid.  The idea is that a higher-level library that
    124   *    actually does the text layout can access those tables without
    125   *    error checking (which can be quite time consuming).
    126   *
    127   * @input:
    128   *    face ::
    129   *       A handle to the input face.
    130   *
    131   *    validation_flags ::
    132   *       A bit field that specifies the tables to be validated.  See
    133   *       @FT_VALIDATE_OTXXX for possible values.
    134   *
    135   * @output:
    136   *    BASE_table ::
    137   *       A pointer to the BASE table.
    138   *
    139   *    GDEF_table ::
    140   *       A pointer to the GDEF table.
    141   *
    142   *    GPOS_table ::
    143   *       A pointer to the GPOS table.
    144   *
    145   *    GSUB_table ::
    146   *       A pointer to the GSUB table.
    147   *
    148   *    JSTF_table ::
    149   *       A pointer to the JSTF table.
    150   *
    151   * @return:
    152   *   FreeType error code.  0~means success.
    153   *
    154   * @note:
    155   *   This function only works with OpenType fonts, returning an error
    156   *   otherwise.
    157   *
    158   *   After use, the application should deallocate the five tables with
    159   *   @FT_OpenType_Free.  A NULL value indicates that the table either
    160   *   doesn't exist in the font, or the application hasn't asked for
    161   *   validation.
    162   */
    163   FT_EXPORT( FT_Error )
    164   FT_OpenType_Validate( FT_Face    face,
    165                         FT_UInt    validation_flags,
    166                         FT_Bytes  *BASE_table,
    167                         FT_Bytes  *GDEF_table,
    168                         FT_Bytes  *GPOS_table,
    169                         FT_Bytes  *GSUB_table,
    170                         FT_Bytes  *JSTF_table );
    171 
    172  /**********************************************************************
    173   *
    174   * @function:
    175   *    FT_OpenType_Free
    176   *
    177   * @description:
    178   *    Free the buffer allocated by OpenType validator.
    179   *
    180   * @input:
    181   *    face ::
    182   *       A handle to the input face.
    183   *
    184   *    table ::
    185   *       The pointer to the buffer that is allocated by
    186   *       @FT_OpenType_Validate.
    187   *
    188   * @note:
    189   *   This function must be used to free the buffer allocated by
    190   *   @FT_OpenType_Validate only.
    191   */
    192   FT_EXPORT( void )
    193   FT_OpenType_Free( FT_Face   face,
    194                     FT_Bytes  table );
    195 
    196   /* */
    197 
    198 
    199 FT_END_HEADER
    200 
    201 #endif /* FTOTVAL_H_ */
    202 
    203 
    204 /* END */
    205