4 * Copyright (C) 2011-2012 by Werner Lemberg.
6 * This file is part of the ttfautohint library, and may only be used,
7 * modified, and distributed under the terms given in `COPYING'. By
8 * continuing to use, modify, or distribute this file you indicate that you
9 * have read `COPYING' and understand and accept it fully.
11 * The file `COPYING' mentioned in the previous paragraph is distributed
12 * with the ttfautohint library.
20 TA_font_init(FONT
* font
)
24 FT_Int major
, minor
, patch
;
27 error
= FT_Init_FreeType(&font
->lib
);
31 /* assure correct FreeType version to avoid using the wrong DLL */
32 FT_Library_Version(font
->lib
, &major
, &minor
, &patch
);
33 if (((major
*1000 + minor
)*1000 + patch
) < 2004005)
34 return TA_Err_Invalid_FreeType_Version
;
36 /* get number of faces (i.e. subfonts) */
37 error
= FT_New_Memory_Face(font
->lib
, font
->in_buf
, font
->in_len
, -1, &f
);
40 font
->num_sfnts
= f
->num_faces
;
43 /* it is a TTC if we have more than a single subfont */
44 font
->sfnts
= (SFNT
*)calloc(1, font
->num_sfnts
* sizeof (SFNT
));
46 return FT_Err_Out_Of_Memory
;
53 TA_font_unload(FONT
* font
,
57 /* in case of error it is expected that unallocated pointers */
58 /* are NULL (and counters are zero) */
64 ta_loader_done(font
->loader
);
71 for (i
= 0; i
< font
->num_tables
; i
++)
73 free(font
->tables
[i
].buf
);
74 if (font
->tables
[i
].data
)
76 if (font
->tables
[i
].tag
== TTAG_glyf
)
78 glyf_Data
* data
= (glyf_Data
*)font
->tables
[i
].data
;
82 for (j
= 0; j
< data
->num_glyphs
; j
++)
84 free(data
->glyphs
[j
].buf
);
85 free(data
->glyphs
[j
].ins_buf
);
86 free(data
->glyphs
[j
].components
);
87 free(data
->glyphs
[j
].pointsums
);
102 for (i
= 0; i
< font
->num_sfnts
; i
++)
104 FT_Done_Face(font
->sfnts
[i
].face
);
105 free(font
->sfnts
[i
].table_infos
);
110 FT_Done_FreeType(font
->lib
);
118 /* end of tafont.c */