1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  ftotval.c                                                              */
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*    FreeType API for validating OpenType tables (body).                  */
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  Copyright 2004, 2006, 2008, 2010, 2013 by                              */
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  This file is part of the FreeType project, and may only be used,       */
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  modified, and distributed under the terms of the FreeType project      */
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  this file you indicate that you have read the license and              */
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  understand and accept it fully.                                        */
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/ft2build.h"
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/ftdebug.h"
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/ftobjs.h"
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/services/svotval.h"
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/ftotval.h"
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /* documentation is in ftotval.h */
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_EXPORT_DEF( FT_Error )
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_OpenType_Validate( FT_Face    face,
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        FT_UInt    validation_flags,
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        FT_Bytes  *BASE_table,
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        FT_Bytes  *GDEF_table,
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        FT_Bytes  *GPOS_table,
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        FT_Bytes  *GSUB_table,
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        FT_Bytes  *JSTF_table )
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Service_OTvalidate  service;
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Error               error;
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( !face )
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      error = FT_THROW( Invalid_Face_Handle );
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      goto Exit;
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( !( BASE_table &&
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            GDEF_table &&
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            GPOS_table &&
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            GSUB_table &&
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            JSTF_table ) )
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      error = FT_THROW( Invalid_Argument );
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      goto Exit;
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_FACE_FIND_GLOBAL_SERVICE( face, service, OPENTYPE_VALIDATE );
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( service )
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      error = service->validate( face,
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                 validation_flags,
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                 BASE_table,
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                 GDEF_table,
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                 GPOS_table,
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                 GSUB_table,
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                 JSTF_table );
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    else
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      error = FT_THROW( Unimplemented_Feature );
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  Exit:
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return error;
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_EXPORT_DEF( void )
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_OpenType_Free( FT_Face   face,
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    FT_Bytes  table )
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Memory  memory;
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( !face )
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      return;
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    memory = FT_FACE_MEMORY( face );
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_FREE( table );
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov