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