blob: 3e01498767b18f23d3bc51698ed286f5a78123ca [file] [log] [blame]
Werner Lemberg8c90c222002-06-08 06:47:18 +00001/***************************************************************************/
2/* */
3/* t42drivr.c */
4/* */
5/* High-level Type 42 driver interface (body). */
6/* */
7/* Copyright 2002 by Roberto Alameda. */
8/* */
9/* This file is part of the FreeType project, and may only be used, */
10/* modified, and distributed under the terms of the FreeType project */
11/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
12/* this file you indicate that you have read the license and */
13/* understand and accept it fully. */
14/* */
15/***************************************************************************/
16
17
David Turner9f95bab2002-06-07 07:23:06 +000018#include "t42drivr.h"
19#include "t42objs.h"
Werner Lemberg8c90c222002-06-08 06:47:18 +000020#include "t42error.h"
Werner Lemberg347a7142002-05-15 06:16:57 +000021#include FT_INTERNAL_DEBUG_H
Werner Lemberg347a7142002-05-15 06:16:57 +000022
Werner Lemberg8c90c222002-06-08 06:47:18 +000023
Werner Lemberg7cf4d372002-05-21 14:13:01 +000024#undef FT_COMPONENT
25#define FT_COMPONENT trace_t42
26
Werner Lemberg8c90c222002-06-08 06:47:18 +000027
Werner Lemberg347a7142002-05-15 06:16:57 +000028 static FT_Error
29 t42_get_glyph_name( T42_Face face,
30 FT_UInt glyph_index,
31 FT_Pointer buffer,
32 FT_UInt buffer_max )
33 {
34 FT_String* gname;
35
36
David Turner9f95bab2002-06-07 07:23:06 +000037 gname = face->type1.glyph_names[glyph_index];
Werner Lemberg347a7142002-05-15 06:16:57 +000038
39 if ( buffer_max > 0 )
40 {
41 FT_UInt len = (FT_UInt)( ft_strlen( gname ) );
42
43
44 if ( len >= buffer_max )
45 len = buffer_max - 1;
David Turner9f95bab2002-06-07 07:23:06 +000046
Werner Lemberg347a7142002-05-15 06:16:57 +000047 FT_MEM_COPY( buffer, gname, len );
48 ((FT_Byte*)buffer)[len] = 0;
49 }
50
Werner Lemberg8c90c222002-06-08 06:47:18 +000051 return T42_Err_Ok;
Werner Lemberg347a7142002-05-15 06:16:57 +000052 }
53
54
55 static const char*
56 t42_get_ps_name( T42_Face face )
57 {
David Turner9f95bab2002-06-07 07:23:06 +000058 return (const char*)face->type1.font_name;
Werner Lemberg347a7142002-05-15 06:16:57 +000059 }
60
61
62 static FT_UInt
63 t42_get_name_index( T42_Face face,
64 FT_String* glyph_name )
65 {
66 FT_Int i;
67 FT_String* gname;
68
69
David Turner9f95bab2002-06-07 07:23:06 +000070 for ( i = 0; i < face->type1.num_glyphs; i++ )
Werner Lemberg347a7142002-05-15 06:16:57 +000071 {
David Turner9f95bab2002-06-07 07:23:06 +000072 gname = face->type1.glyph_names[i];
Werner Lemberg347a7142002-05-15 06:16:57 +000073
74 if ( !ft_strcmp( glyph_name, gname ) )
David Turner9f95bab2002-06-07 07:23:06 +000075 return ft_atoi( (const char *)face->type1.charstrings[i] );
Werner Lemberg347a7142002-05-15 06:16:57 +000076 }
77
78 return 0;
79 }
80
81
82 static FT_Module_Interface
David Turner9f95bab2002-06-07 07:23:06 +000083 T42_Get_Interface( FT_Driver driver,
84 const FT_String* t42_interface )
Werner Lemberg347a7142002-05-15 06:16:57 +000085 {
86 FT_UNUSED( driver );
87
88 /* Any additional interface are defined here */
89 if (ft_strcmp( (const char*)t42_interface, "glyph_name" ) == 0 )
90 return (FT_Module_Interface)t42_get_glyph_name;
91
92 if ( ft_strcmp( (const char*)t42_interface, "name_index" ) == 0 )
93 return (FT_Module_Interface)t42_get_name_index;
94
95 if ( ft_strcmp( (const char*)t42_interface, "postscript_name" ) == 0 )
96 return (FT_Module_Interface)t42_get_ps_name;
97
98 return 0;
99 }
100
101
102 const FT_Driver_ClassRec t42_driver_class =
103 {
104 {
105 ft_module_font_driver |
106 ft_module_driver_scalable |
Werner Lemberg7cf4d372002-05-21 14:13:01 +0000107#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
Werner Lemberg347a7142002-05-15 06:16:57 +0000108 ft_module_driver_has_hinter,
Werner Lemberg7cf4d372002-05-21 14:13:01 +0000109#else
110 0,
111#endif
Werner Lemberg347a7142002-05-15 06:16:57 +0000112
113 sizeof ( T42_DriverRec ),
114
115 "type42",
116 0x10000L,
117 0x20000L,
118
119 0, /* format interface */
120
121 (FT_Module_Constructor)T42_Driver_Init,
122 (FT_Module_Destructor) T42_Driver_Done,
David Turner9f95bab2002-06-07 07:23:06 +0000123 (FT_Module_Requester) T42_Get_Interface,
Werner Lemberg347a7142002-05-15 06:16:57 +0000124 },
125
126 sizeof ( T42_FaceRec ),
127 sizeof ( T42_SizeRec ),
128 sizeof ( T42_GlyphSlotRec ),
129
130 (FT_Face_InitFunc) T42_Face_Init,
131 (FT_Face_DoneFunc) T42_Face_Done,
132 (FT_Size_InitFunc) T42_Size_Init,
133 (FT_Size_DoneFunc) T42_Size_Done,
134 (FT_Slot_InitFunc) T42_GlyphSlot_Init,
135 (FT_Slot_DoneFunc) T42_GlyphSlot_Done,
136
David Turner9f95bab2002-06-07 07:23:06 +0000137 (FT_Size_ResetPointsFunc) T42_Size_SetChars,
138 (FT_Size_ResetPixelsFunc) T42_Size_SetPixels,
139 (FT_Slot_LoadFunc) T42_GlyphSlot_Load,
140 (FT_CharMap_CharIndexFunc)T42_CMap_CharIndex,
Werner Lemberg347a7142002-05-15 06:16:57 +0000141
142 (FT_Face_GetKerningFunc) 0,
143 (FT_Face_AttachFunc) 0,
144
145 (FT_Face_GetAdvancesFunc) 0,
146
David Turner9f95bab2002-06-07 07:23:06 +0000147 (FT_CharMap_CharNextFunc) T42_CMap_CharNext,
Werner Lemberg347a7142002-05-15 06:16:57 +0000148 };
149
Werner Lemberg8c90c222002-06-08 06:47:18 +0000150
151/* END */