summaryrefslogtreecommitdiff
path: root/support/dktools/dk4font.ctr
blob: ca7a60d7a857bdf54646ba3e9ff3dbfb06db599d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
%%	options

copyright owner	=	Dirk Krause
copyright year	=	2016-xxxx
license			=	bsd


%%	header


/**	Font numbers the module can handle.
*/
typedef enum {
	DK4_FONT_TIMES_ROMAN		= 0,
	DK4_FONT_TIMES_ITALIC ,
	DK4_FONT_TIMES_BOLD ,
	DK4_FONT_TIMES_BOLD_ITALIC ,
	DK4_FONT_AVANTGARDE_BOOK ,
	DK4_FONT_AVANTGARDE_BOOK_OBLIQUE ,
	DK4_FONT_AVANTGARDE_DEMI ,
	DK4_FONT_AVANTGARDE_DEMI_OBLIQUE ,
	DK4_FONT_BOOKMAN_LIGHT ,
	DK4_FONT_BOOKMAN_LIGHT_ITALIC ,
	DK4_FONT_BOOKMAN_DEMI ,
	DK4_FONT_BOOKMAN_DEMI_ITALIC ,
	DK4_FONT_COURIER ,
	DK4_FONT_COURIER_OBLIQUE ,
	DK4_FONT_COURIER_BOLD ,
	DK4_FONT_COURIER_BOLD_OBLIQUE ,
	DK4_FONT_HELVETICA ,
	DK4_FONT_HELVETICA_OBLIQUE ,
	DK4_FONT_HELVETICA_BOLD ,
	DK4_FONT_HELVETICA_BOLD_OBLIQUE ,
	DK4_FONT_HELVETICA_NARROW ,
	DK4_FONT_HELVETICA_NARROW_OBLIQUE ,
	DK4_FONT_HELVETICA_NARROW_BOLD ,
	DK4_FONT_HELVETICA_NARROW_BOLD_OBLIQUE ,
	DK4_FONT_NEW_CENTURY_SCHOOLBOOK_ROMAN ,
	DK4_FONT_NEW_CENTURY_SCHOOLBOOK_ITALIC ,
	DK4_FONT_NEW_CENTURY_SCHOOLBOOK_BOLD ,
	DK4_FONT_NEW_CENTURY_SCHOOLBOOK_BOLD_ITALIC ,
	DK4_FONT_PALATINO_ROMAN ,
	DK4_FONT_PALATINO_ITALIC ,
	DK4_FONT_PALATINO_BOLD ,
	DK4_FONT_PALATINO_BOLD_ITALIC ,
	DK4_FONT_SYMBOL ,
	DK4_FONT_ZAPF_CHANCERY ,
	DK4_FONT_ZAPF_DINGBATS ,

	/*	We might want to add further LaTeX fonts here but no PS font name is
		available for fonts after this point.
		Remember to add corresponding entries to the dk4font_tex_family_names,
		dk4font_tex_names and dk4font_features arrays in the module section.
		Order of fonts here must correspond to the order of information
		in these arrays!
	*/

	/*	Finally we set some constants for comparisons.
	*/

	DK4_FONT_PS_MAX	= DK4_FONT_ZAPF_DINGBATS,			/**< Maximum for PS. */
	DK4_FONT_MAX	= DK4_FONT_ZAPF_DINGBATS			/**< Maximum value. */
} dk4_font_number_t;


/**	Font features.
*/
enum {
	DK4_FONT_FEATURE_SANS_SERIF	=	 1,	/**< Sans-serif font. */
	DK4_FONT_FEATURE_TTY		=	 2,	/**< Typewriter style font. */
	DK4_FONT_FEATURE_SYMBOL		=	 3,	/**< Symbol font. */
	DK4_FONT_FEATURE_BOLD		=	 4,	/**< Bold font. */
	DK4_FONT_FEATURE_ITALIC		=	 8,	/**< Italic font. */
	DK4_FONT_FEATURE_OBLIQUE	=	16,	/**< Oblique font. */
	DK4_FONT_FEATURE_NARROW		=	32,	/**< Narrow or condensed font. */

	DK4_FONT_FEATURE_FT_MASK	=	 3,	/**< Mask to retrieve sf or tty. */
	DK4_FONT_FEATURE_ITOB_MASK	=	24,	/**< Mask for italic or oblique. */
};


#ifdef	__cplusplus
extern "C" {
#endif


/**	Retrieve font name (without leading slash) for a PS font.
	@param	fno	Font number.
	@return	Valid pointer on success (fno refers to a PS font), NULL otherwise.
*/

const char *
dk4font_get_ps_name(dk4_font_number_t fno);


/**	Retrieve LaTeX font family name for a font.
	@param	fno	Font number.
	@return	Valid pointer on success, NULL on error.
*/

const char *
dk4font_get_latex_family_name(dk4_font_number_t fno);


/**	Retrieve LaTeX font name for a font.
	@param	fno	Font number.
	@return	Valid pointer on success, NULL on error.
*/

const char *
dk4font_get_latex_font_name(dk4_font_number_t fno);


/**	Retrieve font feature set for a font.
	@param	fno	Font number.
	@return	Font feature set.
*/

int
dk4font_get_features(dk4_font_number_t fno);

#ifdef	__cplusplus
}
#endif



/* vim: set ai sw=4 ts=4 : */
%%	module


#include "dk4font.h"


#include <stdio.h>

#if	DK4_HAVE_STDLIB_H
#include <stdlib.h>
#endif

#if	DK4_HAVE_UNISTD_H
#include <unistd.h>
#endif

$!trace-include



static const char * const	dk4font_ps_names[] = {
$!string-table
Times-Roman
Times-Italic
Times-Bold
Times-BoldItalic
AvantGarde-Book
AvantGarde-BookOblique
AvantGarde-Demi
AvantGarde-DemiOblique
Bookman-Light
Bookman-LightItalic
Bookman-Demi
Bookman-DemiItalic
Courier
Courier-Oblique
Courier-Bold
Courier-BoldOblique
Helvetica
Helvetica-Oblique
Helvetica-Bold
Helvetica-BoldOblique
Helvetica-Narrow
Helvetica-Narrow-Oblique
Helvetica-Narrow-Bold
Helvetica-Narrow-BoldOblique
NewCenturySchlbk-Roman
NewCenturySchlbk-Italic
NewCenturySchlbk-Bold
NewCenturySchlbk-BoldItalic
Palatino-Roman
Palatino-Italic
Palatino-Bold
Palatino-BoldItalic
Symbol
ZapfChancery-MediumItalic
ZapfDingbats
$!end
};



static const char * const	dk4font_tex_family_names[] = {
$!string-table
ptm
ptm
ptm
ptm
pag
pag
pag
pag
pbk
pbk
pbk
pbk
pcr
pcr
pcr
pcr
phv
phv
phv
phv
phv
phv
phv
phv
pnc
pnc
pnc
pnc
ppl
ppl
ppl
ppl
psy
pzc
pzd
$!end
};



static const char * const	dk4font_tex_names[] = {
$!string-table
ptmr
ptmri
ptmb
ptmbi
pagk
pagko
pagd
pagdo
pbkl
pbkli
pbkd
pbkdi
pcrr
pcrro
pcrb
pcrbo
phvr
phvro
phvb
phvbo
phvrrn
phvron
phvbrn
phvbon
pncr
pncri
pncb
pncbi
pplr
pplri
pplb
pplbi
psyr
pzcmi
pzdr
$!end
};



const int	dk4font_features[] = {
0,
DK4_FONT_FEATURE_ITALIC,
DK4_FONT_FEATURE_BOLD,
(DK4_FONT_FEATURE_ITALIC | DK4_FONT_FEATURE_BOLD),
DK4_FONT_FEATURE_SANS_SERIF,
(DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_OBLIQUE),
(DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_BOLD),
(DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_OBLIQUE),
0,
DK4_FONT_FEATURE_ITALIC,
DK4_FONT_FEATURE_BOLD,
(DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_ITALIC),
DK4_FONT_FEATURE_TTY,
(DK4_FONT_FEATURE_TTY | DK4_FONT_FEATURE_OBLIQUE),
(DK4_FONT_FEATURE_TTY | DK4_FONT_FEATURE_BOLD),
(DK4_FONT_FEATURE_TTY | DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_OBLIQUE),
DK4_FONT_FEATURE_SANS_SERIF,
(DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_OBLIQUE),
(DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_BOLD),
(DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_OBLIQUE),
(DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_NARROW),
(
	DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_NARROW
	| DK4_FONT_FEATURE_OBLIQUE
),
(DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_NARROW | DK4_FONT_FEATURE_BOLD),
(
	DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_NARROW
	| DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_OBLIQUE
),
0,
DK4_FONT_FEATURE_ITALIC,
DK4_FONT_FEATURE_BOLD,
(DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_ITALIC),
0,
DK4_FONT_FEATURE_ITALIC,
DK4_FONT_FEATURE_BOLD,
(DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_ITALIC),
DK4_FONT_FEATURE_SYMBOL,
DK4_FONT_FEATURE_ITALIC,
DK4_FONT_FEATURE_SYMBOL
};


const char *
dk4font_get_ps_name(dk4_font_number_t fno)
{
	if (DK4_FONT_PS_MAX >= fno) {
		return (dk4font_ps_names[fno]);
	}
	return NULL;
}



const char *
dk4font_get_latex_family_name(dk4_font_number_t fno)
{
	if (DK4_FONT_PS_MAX >= fno) {
		return (dk4font_tex_family_names[fno]);
	}
	return NULL;
}



const char *
dk4font_get_latex_font_name(dk4_font_number_t fno)
{
	if (DK4_FONT_PS_MAX >= fno) {
		return (dk4font_tex_names[fno]);
	}
	return NULL;
}



int
dk4font_get_features(dk4_font_number_t fno)
{
	if (DK4_FONT_PS_MAX >= fno) {
		return (dk4font_features[fno]);
	}
	return 0;
}



/* vim: set ai sw=4 ts=4 : */