1fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/***************************************************************************/
2fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*                                                                         */
3fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*  sfntpic.c                                                              */
4fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*                                                                         */
5fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*    The FreeType position independent code services for sfnt module.     */
6fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*                                                                         */
70a0c22569deab933df21127e75db5c81f724f292Werner Lemberg/*  Copyright 2009-2018 by                                                 */
8fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*  Oran Agra and Mickey Gabel.                                            */
9fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*                                                                         */
10fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*  This file is part of the FreeType project, and may only be used,       */
11fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*  modified, and distributed under the terms of the FreeType project      */
12fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*  this file you indicate that you have read the license and              */
14fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*  understand and accept it fully.                                        */
15fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*                                                                         */
16fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/***************************************************************************/
17fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
18fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
19fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#include <ft2build.h>
20fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#include FT_FREETYPE_H
21fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#include FT_INTERNAL_OBJECTS_H
22fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#include "sfntpic.h"
234b733517d77856d192c5929dbbff449b813dc23aSuzuki, Toshiya (鈴木俊哉)#include "sferrors.h"
24fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
25665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg
26fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#ifdef FT_CONFIG_OPTION_PIC
27fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
28fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  /* forward declaration of PIC init functions from sfdriver.c */
29c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Error
30c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Create_Class_sfnt_services( FT_Library           library,
31328aa3b203fc061c207fb01e9cbabea7cb3c9272Werner Lemberg                                 FT_ServiceDescRec**  output_class );
32c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
33c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Destroy_Class_sfnt_services( FT_Library          library,
34c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                  FT_ServiceDescRec*  clazz );
35c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
36c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_sfnt_service_bdf( FT_Service_BDFRec*  clazz );
37c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
38c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_sfnt_interface( FT_Library       library,
39c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                SFNT_Interface*  clazz );
40c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
41c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_sfnt_service_glyph_dict(
42c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Library                library,
43c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Service_GlyphDictRec*  clazz );
44c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
45c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_sfnt_service_ps_name(
46c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Library                 library,
47c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Service_PsFontNameRec*  clazz );
48c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
49c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_tt_service_get_cmap_info(
50c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Library              library,
51c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Service_TTCMapsRec*  clazz );
52c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
53c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_sfnt_service_sfnt_table(
54c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Service_SFNT_TableRec*  clazz );
55fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
565ea06ce0174a95f48b28efdba297672ae5d89981Werner Lemberg
57fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  /* forward declaration of PIC init functions from ttcmap.c */
58c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Error
59c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Create_Class_tt_cmap_classes( FT_Library       library,
60c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                   TT_CMap_Class**  output_class );
61c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
62c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Destroy_Class_tt_cmap_classes( FT_Library      library,
63c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                    TT_CMap_Class*  clazz );
64fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
65665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg
66fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  void
67c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  sfnt_module_class_pic_free( FT_Library  library )
68fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  {
69c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_PIC_Container*  pic_container = &library->pic_container;
70665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg    FT_Memory          memory        = library->memory;
71c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
72c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
73fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    if ( pic_container->sfnt )
74fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    {
75c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      sfntModulePIC*  container = (sfntModulePIC*)pic_container->sfnt;
76c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
77c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
78c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      if ( container->sfnt_services )
79c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)        FT_Destroy_Class_sfnt_services( library,
80c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                        container->sfnt_services );
81fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      container->sfnt_services = NULL;
82665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg
83c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      if ( container->tt_cmap_classes )
84c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)        FT_Destroy_Class_tt_cmap_classes( library,
85c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                          container->tt_cmap_classes );
86fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      container->tt_cmap_classes = NULL;
87665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg
88fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      FT_FREE( container );
89fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      pic_container->sfnt = NULL;
90fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    }
91fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  }
92fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
93fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
94fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  FT_Error
955ea06ce0174a95f48b28efdba297672ae5d89981Werner Lemberg  sfnt_module_class_pic_init( FT_Library  library )
96fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  {
97f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg    FT_PIC_Container*  pic_container = &library->pic_container;
98e3c9301581a450fae5db73a3b94b10ed6a0aeb5eWerner Lemberg    FT_Error           error         = FT_Err_Ok;
99328aa3b203fc061c207fb01e9cbabea7cb3c9272Werner Lemberg    sfntModulePIC*     container     = NULL;
100665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg    FT_Memory          memory        = library->memory;
101f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg
102fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
103fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    /* allocate pointer, clear and set global container pointer */
1045ea06ce0174a95f48b28efdba297672ae5d89981Werner Lemberg    if ( FT_ALLOC( container, sizeof ( *container ) ) )
105fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      return error;
106f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg    FT_MEM_SET( container, 0, sizeof ( *container ) );
107fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    pic_container->sfnt = container;
108fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
109665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg    /* initialize pointer table -                       */
110665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg    /* this is how the module usually expects this data */
111c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    error = FT_Create_Class_sfnt_services( library,
112c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                           &container->sfnt_services );
113c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    if ( error )
114fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      goto Exit;
115665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg
116c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    error = FT_Create_Class_tt_cmap_classes( library,
117c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                             &container->tt_cmap_classes );
118c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    if ( error )
119fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      goto Exit;
120c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
121c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_sfnt_service_glyph_dict(
122c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      library, &container->sfnt_service_glyph_dict );
123c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_sfnt_service_ps_name(
124c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      library, &container->sfnt_service_ps_name );
125c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_tt_service_get_cmap_info(
126c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      library, &container->tt_service_get_cmap_info );
127c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_sfnt_service_sfnt_table(
128c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      &container->sfnt_service_sfnt_table );
129fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#ifdef TT_CONFIG_OPTION_BDF
130c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_sfnt_service_bdf( &container->sfnt_service_bdf );
131fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#endif
132c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_sfnt_interface( library, &container->sfnt_interface );
133fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
134665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg  Exit:
135c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    if ( error )
136c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      sfnt_module_class_pic_free( library );
137fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    return error;
138fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  }
139fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
140fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#endif /* FT_CONFIG_OPTION_PIC */
141fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
142fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
143fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* END */
144