sfntpic.c revision e3c9301581a450fae5db73a3b94b10ed6a0aeb5e
1fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/***************************************************************************/
2fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*                                                                         */
3fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*  sfntpic.c                                                              */
4fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*                                                                         */
5fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*    The FreeType position independent code services for sfnt module.     */
6fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/*                                                                         */
7e3c9301581a450fae5db73a3b94b10ed6a0aeb5eWerner Lemberg/*  Copyright 2009, 2010, 2012, 2013 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 (鈴木俊哉)
33c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
34c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Destroy_Class_sfnt_services( FT_Library          library,
35c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                  FT_ServiceDescRec*  clazz );
36c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
37c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
38c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_sfnt_service_bdf( FT_Service_BDFRec*  clazz );
39c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
40c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
41c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_sfnt_interface( FT_Library       library,
42c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                SFNT_Interface*  clazz );
43c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
44c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
45c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_sfnt_service_glyph_dict(
46c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Library                library,
47c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Service_GlyphDictRec*  clazz );
48c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
49c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
50c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_sfnt_service_ps_name(
51c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Library                 library,
52c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Service_PsFontNameRec*  clazz );
53c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
54c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
55c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_tt_service_get_cmap_info(
56c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Library              library,
57c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Service_TTCMapsRec*  clazz );
58c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
59c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
60c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Init_Class_sfnt_service_sfnt_table(
61c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Service_SFNT_TableRec*  clazz );
62fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
63fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  /* forward declaration of PIC init functions from ttcmap.c */
64c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Error
65c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Create_Class_tt_cmap_classes( FT_Library       library,
66c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                   TT_CMap_Class**  output_class );
67c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
68c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  void
69c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  FT_Destroy_Class_tt_cmap_classes( FT_Library      library,
70c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                    TT_CMap_Class*  clazz );
71fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
72665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg
73fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  void
74c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)  sfnt_module_class_pic_free( FT_Library  library )
75fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  {
76c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_PIC_Container*  pic_container = &library->pic_container;
77665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg    FT_Memory          memory        = library->memory;
78c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
79c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
80fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    if ( pic_container->sfnt )
81fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    {
82c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      sfntModulePIC*  container = (sfntModulePIC*)pic_container->sfnt;
83c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
84c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
85c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      if ( container->sfnt_services )
86c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)        FT_Destroy_Class_sfnt_services( library,
87c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                        container->sfnt_services );
88fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      container->sfnt_services = NULL;
89665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg
90c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      if ( container->tt_cmap_classes )
91c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)        FT_Destroy_Class_tt_cmap_classes( library,
92c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                          container->tt_cmap_classes );
93fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      container->tt_cmap_classes = NULL;
94665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg
95fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      FT_FREE( container );
96fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      pic_container->sfnt = NULL;
97fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    }
98fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  }
99fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
100fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
101fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  FT_Error
102665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg  sfnt_module_class_pic_init( FT_Library library )
103fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  {
104f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg    FT_PIC_Container*  pic_container = &library->pic_container;
105e3c9301581a450fae5db73a3b94b10ed6a0aeb5eWerner Lemberg    FT_Error           error         = FT_Err_Ok;
106328aa3b203fc061c207fb01e9cbabea7cb3c9272Werner Lemberg    sfntModulePIC*     container     = NULL;
107665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg    FT_Memory          memory        = library->memory;
108f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg
109fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
110fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    /* allocate pointer, clear and set global container pointer */
111fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    if ( FT_ALLOC ( container, sizeof ( *container ) ) )
112fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      return error;
113f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg    FT_MEM_SET( container, 0, sizeof ( *container ) );
114fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    pic_container->sfnt = container;
115fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
116665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg    /* initialize pointer table -                       */
117665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg    /* this is how the module usually expects this data */
118c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    error = FT_Create_Class_sfnt_services( library,
119c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                           &container->sfnt_services );
120c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    if ( error )
121fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      goto Exit;
122665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg
123c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    error = FT_Create_Class_tt_cmap_classes( library,
124c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)                                             &container->tt_cmap_classes );
125c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    if ( error )
126fb429ec409348501f6ab1932b39ee2d612723198Oran Agra      goto Exit;
127c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)
128c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_sfnt_service_glyph_dict(
129c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      library, &container->sfnt_service_glyph_dict );
130c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_sfnt_service_ps_name(
131c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      library, &container->sfnt_service_ps_name );
132c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_tt_service_get_cmap_info(
133c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      library, &container->tt_service_get_cmap_info );
134c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_sfnt_service_sfnt_table(
135c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      &container->sfnt_service_sfnt_table );
136fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#ifdef TT_CONFIG_OPTION_BDF
137c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_sfnt_service_bdf( &container->sfnt_service_bdf );
138fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#endif
139c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    FT_Init_Class_sfnt_interface( library, &container->sfnt_interface );
140fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
141665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg  Exit:
142c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)    if ( error )
143c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉)      sfnt_module_class_pic_free( library );
144fb429ec409348501f6ab1932b39ee2d612723198Oran Agra    return error;
145fb429ec409348501f6ab1932b39ee2d612723198Oran Agra  }
146fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
147fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#endif /* FT_CONFIG_OPTION_PIC */
148fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
149fb429ec409348501f6ab1932b39ee2d612723198Oran Agra
150fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* END */
151