(root)/
freetype-2.13.2/
include/
freetype/
ftgxval.h
       1  /****************************************************************************
       2   *
       3   * ftgxval.h
       4   *
       5   *   FreeType API for validating TrueTypeGX/AAT tables (specification).
       6   *
       7   * Copyright (C) 2004-2023 by
       8   * Masatake YAMATO, Redhat K.K,
       9   * David Turner, Robert Wilhelm, and Werner Lemberg.
      10   *
      11   * This file is part of the FreeType project, and may only be used,
      12   * modified, and distributed under the terms of the FreeType project
      13   * license, LICENSE.TXT.  By continuing to use, modify, or distribute
      14   * this file you indicate that you have read the license and
      15   * understand and accept it fully.
      16   *
      17   */
      18  
      19  /****************************************************************************
      20   *
      21   * gxvalid is derived from both gxlayout module and otvalid module.
      22   * Development of gxlayout is supported by the Information-technology
      23   * Promotion Agency(IPA), Japan.
      24   *
      25   */
      26  
      27  
      28  #ifndef FTGXVAL_H_
      29  #define FTGXVAL_H_
      30  
      31  #include <freetype/freetype.h>
      32  
      33  #ifdef FREETYPE_H
      34  #error "freetype.h of FreeType 1 has been loaded!"
      35  #error "Please fix the directory search order for header files"
      36  #error "so that freetype.h of FreeType 2 is found first."
      37  #endif
      38  
      39  
      40  FT_BEGIN_HEADER
      41  
      42  
      43    /**************************************************************************
      44     *
      45     * @section:
      46     *   gx_validation
      47     *
      48     * @title:
      49     *   TrueTypeGX/AAT Validation
      50     *
      51     * @abstract:
      52     *   An API to validate TrueTypeGX/AAT tables.
      53     *
      54     * @description:
      55     *   This section contains the declaration of functions to validate some
      56     *   TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak,
      57     *   prop, lcar).
      58     *
      59     * @order:
      60     *   FT_TrueTypeGX_Validate
      61     *   FT_TrueTypeGX_Free
      62     *
      63     *   FT_ClassicKern_Validate
      64     *   FT_ClassicKern_Free
      65     *
      66     *   FT_VALIDATE_GX_LENGTH
      67     *   FT_VALIDATE_GXXXX
      68     *   FT_VALIDATE_CKERNXXX
      69     *
      70     */
      71  
      72    /**************************************************************************
      73     *
      74     *
      75     * Warning: Use `FT_VALIDATE_XXX` to validate a table.
      76     *          Following definitions are for gxvalid developers.
      77     *
      78     *
      79     */
      80  
      81  #define FT_VALIDATE_feat_INDEX     0
      82  #define FT_VALIDATE_mort_INDEX     1
      83  #define FT_VALIDATE_morx_INDEX     2
      84  #define FT_VALIDATE_bsln_INDEX     3
      85  #define FT_VALIDATE_just_INDEX     4
      86  #define FT_VALIDATE_kern_INDEX     5
      87  #define FT_VALIDATE_opbd_INDEX     6
      88  #define FT_VALIDATE_trak_INDEX     7
      89  #define FT_VALIDATE_prop_INDEX     8
      90  #define FT_VALIDATE_lcar_INDEX     9
      91  #define FT_VALIDATE_GX_LAST_INDEX  FT_VALIDATE_lcar_INDEX
      92  
      93  
      94    /**************************************************************************
      95     *
      96     * @macro:
      97     *   FT_VALIDATE_GX_LENGTH
      98     *
      99     * @description:
     100     *   The number of tables checked in this module.  Use it as a parameter
     101     *   for the `table-length` argument of function @FT_TrueTypeGX_Validate.
     102     */
     103  #define FT_VALIDATE_GX_LENGTH  ( FT_VALIDATE_GX_LAST_INDEX + 1 )
     104  
     105    /* */
     106  
     107    /* Up to 0x1000 is used by otvalid.
     108       Ox2xxx is reserved for feature OT extension. */
     109  #define FT_VALIDATE_GX_START  0x4000
     110  #define FT_VALIDATE_GX_BITFIELD( tag ) \
     111            ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
     112  
     113  
     114    /**************************************************************************
     115     *
     116     * @enum:
     117     *    FT_VALIDATE_GXXXX
     118     *
     119     * @description:
     120     *    A list of bit-field constants used with @FT_TrueTypeGX_Validate to
     121     *    indicate which TrueTypeGX/AAT Type tables should be validated.
     122     *
     123     * @values:
     124     *    FT_VALIDATE_feat ::
     125     *      Validate 'feat' table.
     126     *
     127     *    FT_VALIDATE_mort ::
     128     *      Validate 'mort' table.
     129     *
     130     *    FT_VALIDATE_morx ::
     131     *      Validate 'morx' table.
     132     *
     133     *    FT_VALIDATE_bsln ::
     134     *      Validate 'bsln' table.
     135     *
     136     *    FT_VALIDATE_just ::
     137     *      Validate 'just' table.
     138     *
     139     *    FT_VALIDATE_kern ::
     140     *      Validate 'kern' table.
     141     *
     142     *    FT_VALIDATE_opbd ::
     143     *      Validate 'opbd' table.
     144     *
     145     *    FT_VALIDATE_trak ::
     146     *      Validate 'trak' table.
     147     *
     148     *    FT_VALIDATE_prop ::
     149     *      Validate 'prop' table.
     150     *
     151     *    FT_VALIDATE_lcar ::
     152     *      Validate 'lcar' table.
     153     *
     154     *    FT_VALIDATE_GX ::
     155     *      Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern,
     156     *      opbd, trak, prop and lcar).
     157     *
     158     */
     159  
     160  #define FT_VALIDATE_feat  FT_VALIDATE_GX_BITFIELD( feat )
     161  #define FT_VALIDATE_mort  FT_VALIDATE_GX_BITFIELD( mort )
     162  #define FT_VALIDATE_morx  FT_VALIDATE_GX_BITFIELD( morx )
     163  #define FT_VALIDATE_bsln  FT_VALIDATE_GX_BITFIELD( bsln )
     164  #define FT_VALIDATE_just  FT_VALIDATE_GX_BITFIELD( just )
     165  #define FT_VALIDATE_kern  FT_VALIDATE_GX_BITFIELD( kern )
     166  #define FT_VALIDATE_opbd  FT_VALIDATE_GX_BITFIELD( opbd )
     167  #define FT_VALIDATE_trak  FT_VALIDATE_GX_BITFIELD( trak )
     168  #define FT_VALIDATE_prop  FT_VALIDATE_GX_BITFIELD( prop )
     169  #define FT_VALIDATE_lcar  FT_VALIDATE_GX_BITFIELD( lcar )
     170  
     171  #define FT_VALIDATE_GX  ( FT_VALIDATE_feat | \
     172                            FT_VALIDATE_mort | \
     173                            FT_VALIDATE_morx | \
     174                            FT_VALIDATE_bsln | \
     175                            FT_VALIDATE_just | \
     176                            FT_VALIDATE_kern | \
     177                            FT_VALIDATE_opbd | \
     178                            FT_VALIDATE_trak | \
     179                            FT_VALIDATE_prop | \
     180                            FT_VALIDATE_lcar )
     181  
     182  
     183    /**************************************************************************
     184     *
     185     * @function:
     186     *    FT_TrueTypeGX_Validate
     187     *
     188     * @description:
     189     *    Validate various TrueTypeGX tables to assure that all offsets and
     190     *    indices are valid.  The idea is that a higher-level library that
     191     *    actually does the text layout can access those tables without error
     192     *    checking (which can be quite time consuming).
     193     *
     194     * @input:
     195     *    face ::
     196     *      A handle to the input face.
     197     *
     198     *    validation_flags ::
     199     *      A bit field that specifies the tables to be validated.  See
     200     *      @FT_VALIDATE_GXXXX for possible values.
     201     *
     202     *    table_length ::
     203     *      The size of the `tables` array.  Normally, @FT_VALIDATE_GX_LENGTH
     204     *      should be passed.
     205     *
     206     * @output:
     207     *    tables ::
     208     *      The array where all validated sfnt tables are stored.  The array
     209     *      itself must be allocated by a client.
     210     *
     211     * @return:
     212     *   FreeType error code.  0~means success.
     213     *
     214     * @note:
     215     *   This function only works with TrueTypeGX fonts, returning an error
     216     *   otherwise.
     217     *
     218     *   After use, the application should deallocate the buffers pointed to by
     219     *   each `tables` element, by calling @FT_TrueTypeGX_Free.  A `NULL` value
     220     *   indicates that the table either doesn't exist in the font, the
     221     *   application hasn't asked for validation, or the validator doesn't have
     222     *   the ability to validate the sfnt table.
     223     */
     224    FT_EXPORT( FT_Error )
     225    FT_TrueTypeGX_Validate( FT_Face   face,
     226                            FT_UInt   validation_flags,
     227                            FT_Bytes  tables[FT_VALIDATE_GX_LENGTH],
     228                            FT_UInt   table_length );
     229  
     230  
     231    /**************************************************************************
     232     *
     233     * @function:
     234     *    FT_TrueTypeGX_Free
     235     *
     236     * @description:
     237     *    Free the buffer allocated by TrueTypeGX validator.
     238     *
     239     * @input:
     240     *    face ::
     241     *      A handle to the input face.
     242     *
     243     *    table ::
     244     *      The pointer to the buffer allocated by @FT_TrueTypeGX_Validate.
     245     *
     246     * @note:
     247     *   This function must be used to free the buffer allocated by
     248     *   @FT_TrueTypeGX_Validate only.
     249     */
     250    FT_EXPORT( void )
     251    FT_TrueTypeGX_Free( FT_Face   face,
     252                        FT_Bytes  table );
     253  
     254  
     255    /**************************************************************************
     256     *
     257     * @enum:
     258     *    FT_VALIDATE_CKERNXXX
     259     *
     260     * @description:
     261     *    A list of bit-field constants used with @FT_ClassicKern_Validate to
     262     *    indicate the classic kern dialect or dialects.  If the selected type
     263     *    doesn't fit, @FT_ClassicKern_Validate regards the table as invalid.
     264     *
     265     * @values:
     266     *    FT_VALIDATE_MS ::
     267     *      Handle the 'kern' table as a classic Microsoft kern table.
     268     *
     269     *    FT_VALIDATE_APPLE ::
     270     *      Handle the 'kern' table as a classic Apple kern table.
     271     *
     272     *    FT_VALIDATE_CKERN ::
     273     *      Handle the 'kern' as either classic Apple or Microsoft kern table.
     274     */
     275  #define FT_VALIDATE_MS     ( FT_VALIDATE_GX_START << 0 )
     276  #define FT_VALIDATE_APPLE  ( FT_VALIDATE_GX_START << 1 )
     277  
     278  #define FT_VALIDATE_CKERN  ( FT_VALIDATE_MS | FT_VALIDATE_APPLE )
     279  
     280  
     281    /**************************************************************************
     282     *
     283     * @function:
     284     *    FT_ClassicKern_Validate
     285     *
     286     * @description:
     287     *    Validate classic (16-bit format) kern table to assure that the
     288     *    offsets and indices are valid.  The idea is that a higher-level
     289     *    library that actually does the text layout can access those tables
     290     *    without error checking (which can be quite time consuming).
     291     *
     292     *    The 'kern' table validator in @FT_TrueTypeGX_Validate deals with both
     293     *    the new 32-bit format and the classic 16-bit format, while
     294     *    FT_ClassicKern_Validate only supports the classic 16-bit format.
     295     *
     296     * @input:
     297     *    face ::
     298     *      A handle to the input face.
     299     *
     300     *    validation_flags ::
     301     *      A bit field that specifies the dialect to be validated.  See
     302     *      @FT_VALIDATE_CKERNXXX for possible values.
     303     *
     304     * @output:
     305     *    ckern_table ::
     306     *      A pointer to the kern table.
     307     *
     308     * @return:
     309     *   FreeType error code.  0~means success.
     310     *
     311     * @note:
     312     *   After use, the application should deallocate the buffers pointed to by
     313     *   `ckern_table`, by calling @FT_ClassicKern_Free.  A `NULL` value
     314     *   indicates that the table doesn't exist in the font.
     315     */
     316    FT_EXPORT( FT_Error )
     317    FT_ClassicKern_Validate( FT_Face    face,
     318                             FT_UInt    validation_flags,
     319                             FT_Bytes  *ckern_table );
     320  
     321  
     322    /**************************************************************************
     323     *
     324     * @function:
     325     *    FT_ClassicKern_Free
     326     *
     327     * @description:
     328     *    Free the buffer allocated by classic Kern validator.
     329     *
     330     * @input:
     331     *    face ::
     332     *      A handle to the input face.
     333     *
     334     *    table ::
     335     *      The pointer to the buffer that is allocated by
     336     *      @FT_ClassicKern_Validate.
     337     *
     338     * @note:
     339     *   This function must be used to free the buffer allocated by
     340     *   @FT_ClassicKern_Validate only.
     341     */
     342    FT_EXPORT( void )
     343    FT_ClassicKern_Free( FT_Face   face,
     344                         FT_Bytes  table );
     345  
     346    /* */
     347  
     348  
     349  FT_END_HEADER
     350  
     351  #endif /* FTGXVAL_H_ */
     352  
     353  
     354  /* END */