Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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