Evince
Evince is a document viewer capable of displaying multiple and single page document formats like PDF and Postscript.
Main Page
Related Pages
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
afmparse.h
Go to the documentation of this file.
1
/* modified for MDVI -- some names changed to avoid conflicts with T1lib */
2
/*
3
* (C) 1988, 1989 by Adobe Systems Incorporated. All rights reserved.
4
*
5
* This file may be freely copied and redistributed as long as:
6
* 1) This entire notice continues to be included in the file,
7
* 2) If the file has been modified in any way, a notice of such
8
* modification is conspicuously indicated.
9
*
10
* PostScript, Display PostScript, and Adobe are registered trademarks of
11
* Adobe Systems Incorporated.
12
*
13
* ************************************************************************
14
* THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT
15
* NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS
16
* INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR
17
* LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY
18
* KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION,
19
* AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
20
* FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
21
* ************************************************************************
22
*/
23
24
/* ParseAFM.h
25
*
26
* This header file is used in conjuction with the parseAFM.c file.
27
* Together these files provide the functionality to parse Adobe Font
28
* Metrics files and store the information in predefined data structures.
29
* It is intended to work with an application program that needs font metric
30
* information. The program can be used as is by making a procedure call to
31
* parse an AFM file and have the data stored, or an application developer
32
* may wish to customize the code.
33
*
34
* This header file defines the data structures used as well as the key
35
* strings that are currently recognized by this version of the AFM parser.
36
* This program is based on the document "Adobe Font Metrics Files,
37
* Specification Version 2.0".
38
*
39
* AFM files are separated into distinct sections of different data. Because
40
* of this, the parseAFM program can parse a specified file to only save
41
* certain sections of information based on the application's needs. A record
42
* containing the requested information will be returned to the application.
43
*
44
* AFM files are divided into five sections of data:
45
* 1) The Global Font Information
46
* 2) The Character Metrics Information
47
* 3) The Track Kerning Data
48
* 4) The Pair-Wise Kerning Data
49
* 5) The Composite Character Data
50
*
51
* Basically, the application can request any of these sections independent
52
* of what other sections are requested. In addition, in recognizing that
53
* many applications will want ONLY the x-width of characters and not all
54
* of the other character metrics information, there is a way to receive
55
* only the width information so as not to pay the storage cost for the
56
* unwanted data. An application should never request both the
57
* "quick and dirty" char metrics (widths only) and the Character Metrics
58
* Information since the Character Metrics Information will contain all
59
* of the character widths as well.
60
*
61
* There is a procedure in parseAFM.c, called parseFile, that can be
62
* called from any application wishing to get information from the AFM File.
63
* This procedure expects 3 parameters: a vaild file descriptor, a pointer
64
* to a (FontInfo *) variable (for which space will be allocated and then
65
* will be filled in with the data requested), and a mask specifying
66
* which data from the AFM File should be saved in the FontInfo structure.
67
*
68
* The flags that can be used to set the appropriate mask are defined below.
69
* In addition, several commonly used masks have already been defined.
70
*
71
* History:
72
* original: DSM Thu Oct 20 17:39:59 PDT 1988
73
* modified: DSM Mon Jul 3 14:17:50 PDT 1989
74
* - added 'storageProblem' return code
75
* - fixed typos
76
*/
77
#ifndef _MDVI_PARSEAFM_H
78
#define _MDVI_PARSEAFM_H 1
79
80
#include "
sysdeps.h
"
81
82
#include <stdio.h>
83
84
/* your basic constants */
85
#define TRUE 1
86
#define FALSE 0
87
#define EOL '\n'
/* end-of-line indicator */
88
#define MAX_NAME 4096
/* max length for identifiers */
89
#define BOOL int
90
#define FLAGS int
91
92
/* Flags that can be AND'ed together to specify exactly what
93
* information from the AFM file should be saved. */
94
#define P_G 0x01
/* 0000 0001 */
/* Global Font Info */
95
#define P_W 0x02
/* 0000 0010 */
/* Character Widths ONLY */
96
#define P_M 0x06
/* 0000 0110 */
/* All Char Metric Info */
97
#define P_P 0x08
/* 0000 1000 */
/* Pair Kerning Info */
98
#define P_T 0x10
/* 0001 0000 */
/* Track Kerning Info */
99
#define P_C 0x20
/* 0010 0000 */
/* Composite Char Info */
100
101
/* Commonly used flags */
102
#define P_GW (P_G | P_W)
103
#define P_GM (P_G | P_M)
104
#define P_GMP (P_G | P_M | P_P)
105
#define P_GMK (P_G | P_M | P_P | P_T)
106
#define P_ALL (P_G | P_M | P_P | P_T | P_C)
107
108
/* Possible return codes from the parseFile procedure.
109
*
110
* ok means there were no problems parsing the file.
111
*
112
* parseError means that there was some kind of parsing error, but the
113
* parser went on. This could include problems like the count for any given
114
* section does not add up to how many entries there actually were, or
115
* there was a key that was not recognized. The return record may contain
116
* vaild data or it may not.
117
*
118
* earlyEOF means that an End of File was encountered before expected. This
119
* may mean that the AFM file had been truncated, or improperly formed.
120
*
121
* storageProblem means that there were problems allocating storage for
122
* the data structures that would have contained the AFM data.
123
*/
124
#define ok 0
125
#define parseError -1
126
#define earlyEOF -2
127
#define storageProblem -3
128
129
/************************* TYPES *********************************/
130
/* Below are all of the data structure definitions. These structures
131
* try to map as closely as possible to grouping and naming of data
132
* in the AFM Files.
133
*/
134
135
/* Bounding box definition. Used for the Font BBox as well as the
136
* Character BBox.
137
*/
138
typedef
struct
139
{
140
int
llx
;
/* lower left x-position */
141
int
lly
;
/* lower left y-position */
142
int
urx
;
/* upper right x-position */
143
int
ury
;
/* upper right y-position */
144
}
BBox
;
145
146
/* Global Font information.
147
* The key that each field is associated with is in comments. For an
148
* explanation about each key and its value please refer to the AFM
149
* documentation (full title & version given above).
150
*/
151
typedef
struct
152
{
153
char
*
afmVersion
;
/* key: StartFontMetrics */
154
char
*
fontName
;
/* key: FontName */
155
char
*
fullName
;
/* key: FullName */
156
char
*
familyName
;
/* key: FamilyName */
157
char
*
weight
;
/* key: Weight */
158
float
italicAngle
;
/* key: ItalicAngle */
159
BOOL
isFixedPitch
;
/* key: IsFixedPitch */
160
BBox
fontBBox
;
/* key: FontBBox */
161
int
underlinePosition
;
/* key: UnderlinePosition */
162
int
underlineThickness
;
/* key: UnderlineThickness */
163
char
*
version
;
/* key: Version */
164
char
*
notice
;
/* key: Notice */
165
char
*
encodingScheme
;
/* key: EncodingScheme */
166
int
capHeight
;
/* key: CapHeight */
167
int
xHeight
;
/* key: XHeight */
168
int
ascender
;
/* key: Ascender */
169
int
descender
;
/* key: Descender */
170
}
GlobalFontInfo
;
171
172
/* Ligature definition is a linked list since any character can have
173
* any number of ligatures.
174
*/
175
typedef
struct
_t_ligature
176
{
177
char
*
succ
, *
lig
;
178
struct
_t_ligature
*
next
;
179
}
Ligature
;
180
181
/* Character Metric Information. This structure is used only if ALL
182
* character metric information is requested. If only the character
183
* widths is requested, then only an array of the character x-widths
184
* is returned.
185
*
186
* The key that each field is associated with is in comments. For an
187
* explanation about each key and its value please refer to the
188
* Character Metrics section of the AFM documentation (full title
189
* & version given above).
190
*/
191
typedef
struct
192
{
193
int
code,
/* key: C */
194
wx,
/* key: WX */
195
wy
;
/* together wx and wy are associated with key: W */
196
char
*
name
;
/* key: N */
197
BBox
charBBox
;
/* key: B */
198
Ligature
*
ligs
;
/* key: L (linked list; not a fixed number of Ls */
199
}
CharMetricInfo
;
200
201
/* Track kerning data structure.
202
* The fields of this record are the five values associated with every
203
* TrackKern entry.
204
*
205
* For an explanation about each value please refer to the
206
* Track Kerning section of the AFM documentation (full title
207
* & version given above).
208
*/
209
typedef
struct
210
{
211
int
degree
;
212
float
minPtSize
,
213
minKernAmt,
214
maxPtSize,
215
maxKernAmt;
216
}
TrackKernData
;
217
218
/* Pair Kerning data structure.
219
* The fields of this record are the four values associated with every
220
* KP entry. For KPX entries, the yamt will be zero.
221
*
222
* For an explanation about each value please refer to the
223
* Pair Kerning section of the AFM documentation (full title
224
* & version given above).
225
*/
226
typedef
struct
227
{
228
char
*
name1
;
229
char
*
name2
;
230
int
xamt,
231
yamt
;
232
}
PairKernData
;
233
234
/* PCC is a piece of a composite character. This is a sub structure of a
235
* compCharData described below.
236
* These fields will be filled in with the values from the key PCC.
237
*
238
* For an explanation about each key and its value please refer to the
239
* Composite Character section of the AFM documentation (full title
240
* & version given above).
241
*/
242
typedef
struct
243
{
244
char
*
pccName
;
245
int
deltax,
246
deltay
;
247
}
Pcc
;
248
249
/* Composite Character Information data structure.
250
* The fields ccName and numOfPieces are filled with the values associated
251
* with the key CC. The field pieces points to an array (size = numOfPieces)
252
* of information about each of the parts of the composite character. That
253
* array is filled in with the values from the key PCC.
254
*
255
* For an explanation about each key and its value please refer to the
256
* Composite Character section of the AFM documentation (full title
257
* & version given above).
258
*/
259
typedef
struct
260
{
261
char
*
ccName
;
262
int
numOfPieces
;
263
Pcc
*
pieces
;
264
}
CompCharData
;
265
266
/* FontInfo
267
* Record type containing pointers to all of the other data
268
* structures containing information about a font.
269
* A a record of this type is filled with data by the
270
* parseFile function.
271
*/
272
typedef
struct
273
{
274
GlobalFontInfo
*
gfi
;
/* ptr to a GlobalFontInfo record */
275
int
*
cwi
;
/* ptr to 256 element array of just char widths */
276
int
numOfChars
;
/* number of entries in char metrics array */
277
CharMetricInfo
*
cmi
;
/* ptr to char metrics array */
278
int
numOfTracks
;
/* number to entries in track kerning array */
279
TrackKernData
*
tkd
;
/* ptr to track kerning array */
280
int
numOfPairs
;
/* number to entries in pair kerning array */
281
PairKernData
*
pkd
;
/* ptr to pair kerning array */
282
int
numOfComps
;
/* number to entries in comp char array */
283
CompCharData
*
ccd
;
/* ptr to comp char array */
284
}
FontInfo
;
285
286
/************************* PROCEDURES ****************************/
287
288
/* Call this procedure to do the grunt work of parsing an AFM file.
289
*
290
* "fp" should be a valid file pointer to an AFM file.
291
*
292
* "fi" is a pointer to a pointer to a FontInfo record sturcture
293
* (defined above). Storage for the FontInfo structure will be
294
* allocated in parseFile and the structure will be filled in
295
* with the requested data from the AFM File.
296
*
297
* "flags" is a mask with bits set representing what data should
298
* be saved. Defined above are valid flags that can be used to set
299
* the mask, as well as a few commonly used masks.
300
*
301
* The possible return codes from parseFile are defined above.
302
*/
303
304
extern
int
afm_parse_file
__PROTO
((FILE *,
FontInfo
**,
FLAGS
));
305
extern
void
afm_free_fontinfo
__PROTO
((
FontInfo
*));
306
307
#endif
/* _MDVI_PARSEAFM_H */
evince-master
backend
dvi
mdvi-lib
afmparse.h
Generated on Thu Jul 13 2017 13:41:44 for Evince by
1.8.4