tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ftgxval.c (3125B)


      1 /****************************************************************************
      2 *
      3 * ftgxval.c
      4 *
      5 *   FreeType API for validating TrueTypeGX/AAT tables (body).
      6 *
      7 * Copyright (C) 2004-2025 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 */