Home | History | Annotate | Download | only in base
      1 /****************************************************************************
      2  *
      3  * ftgxval.c
      4  *
      5  *   FreeType API for validating TrueTypeGX/AAT tables (body).
      6  *
      7  * Copyright 2004-2018 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 #include <ft2build.h>
     29 #include FT_INTERNAL_DEBUG_H
     30 
     31 #include FT_INTERNAL_OBJECTS_H
     32 #include FT_SERVICE_GX_VALIDATE_H
     33 
     34 
     35   /* documentation is in ftgxval.h */
     36 
     37   FT_EXPORT_DEF( FT_Error )
     38   FT_TrueTypeGX_Validate( FT_Face   face,
     39                           FT_UInt   validation_flags,
     40                           FT_Bytes  tables[FT_VALIDATE_GX_LENGTH],
     41                           FT_UInt   table_length )
     42   {
     43     FT_Service_GXvalidate  service;
     44     FT_Error               error;
     45 
     46 
     47     if ( !face )
     48     {
     49       error = FT_THROW( Invalid_Face_Handle );
     50       goto Exit;
     51     }
     52 
     53     if ( !tables )
     54     {
     55       error = FT_THROW( Invalid_Argument );
     56       goto Exit;
     57     }
     58 
     59     FT_FACE_FIND_GLOBAL_SERVICE( face, service, GX_VALIDATE );
     60 
     61     if ( service )
     62       error = service->validate( face,
     63                                  validation_flags,
     64                                  tables,
     65                                  table_length );
     66     else
     67       error = FT_THROW( Unimplemented_Feature );
     68 
     69   Exit:
     70     return error;
     71   }
     72 
     73 
     74   FT_EXPORT_DEF( void )
     75   FT_TrueTypeGX_Free( FT_Face   face,
     76                       FT_Bytes  table )
     77   {
     78     FT_Memory  memory;
     79 
     80 
     81     if ( !face )
     82       return;
     83 
     84     memory = FT_FACE_MEMORY( face );
     85 
     86     FT_FREE( table );
     87   }
     88 
     89 
     90   FT_EXPORT_DEF( FT_Error )
     91   FT_ClassicKern_Validate( FT_Face    face,
     92                            FT_UInt    validation_flags,
     93                            FT_Bytes  *ckern_table )
     94   {
     95     FT_Service_CKERNvalidate  service;
     96     FT_Error                  error;
     97 
     98 
     99     if ( !face )
    100     {
    101       error = FT_THROW( Invalid_Face_Handle );
    102       goto Exit;
    103     }
    104 
    105     if ( !ckern_table )
    106     {
    107       error = FT_THROW( Invalid_Argument );
    108       goto Exit;
    109     }
    110 
    111     FT_FACE_FIND_GLOBAL_SERVICE( face, service, CLASSICKERN_VALIDATE );
    112 
    113     if ( service )
    114       error = service->validate( face,
    115                                  validation_flags,
    116                                  ckern_table );
    117     else
    118       error = FT_THROW( Unimplemented_Feature );
    119 
    120   Exit:
    121     return error;
    122   }
    123 
    124 
    125   FT_EXPORT_DEF( void )
    126   FT_ClassicKern_Free( FT_Face   face,
    127                        FT_Bytes  table )
    128   {
    129     FT_Memory  memory;
    130 
    131 
    132     if ( !face )
    133       return;
    134 
    135     memory = FT_FACE_MEMORY( face );
    136 
    137 
    138     FT_FREE( table );
    139   }
    140 
    141 
    142 /* END */
    143