Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
srohatgi01
GitHub Repository: srohatgi01/cups
Path: blob/master/ppdc/ppdc.h
1090 views
1
//
2
// Definitions for the CUPS PPD Compiler.
3
//
4
// Copyright 2007-2019 by Apple Inc.
5
// Copyright 2002-2007 by Easy Software Products.
6
//
7
// Licensed under Apache License v2.0. See the file "LICENSE" for more information.
8
//
9
10
#ifndef _PPDC_H_
11
# define _PPDC_H_
12
13
//
14
// Include necessary headers...
15
//
16
17
# include <cups/file.h>
18
# include <stdlib.h>
19
20
21
//
22
// Macros...
23
//
24
25
# define PPDC_NAME(s) const char *class_name() { return (s); }
26
27
28
//
29
// Enumerations...
30
//
31
32
enum ppdcDrvType //// Driver type
33
{
34
PPDC_DRIVER_CUSTOM, // Custom driver
35
PPDC_DRIVER_PS, // PostScript driver
36
PPDC_DRIVER_ESCP, // rastertoescpx driver
37
PPDC_DRIVER_PCL, // rastertopclx driver
38
PPDC_DRIVER_LABEL, // rastertolabel/rastertodymo driver
39
PPDC_DRIVER_EPSON, // rastertoepson driver
40
PPDC_DRIVER_HP, // rastertohp driver
41
PPDC_DRIVER_MAX // Number of driver types defined
42
};
43
44
enum ppdcFontStatus //// Load status of font
45
{
46
PPDC_FONT_ROM, // Font is in ROM
47
PPDC_FONT_DISK // Font is on disk
48
};
49
50
enum ppdcOptSection //// Option section
51
{
52
PPDC_SECTION_ANY, // AnySetup
53
PPDC_SECTION_DOCUMENT, // DocumentSetup
54
PPDC_SECTION_EXIT, // ExitServer
55
PPDC_SECTION_JCL, // JCLSetup
56
PPDC_SECTION_PAGE, // PageSetup
57
PPDC_SECTION_PROLOG // Prolog
58
};
59
60
enum ppdcOptType //// Option type
61
{
62
PPDC_BOOLEAN, // True/false option
63
PPDC_PICKONE, // Single choice from list
64
PPDC_PICKMANY // Multiple choices from list
65
};
66
67
enum ppdcLineEnding //// Line endings
68
{
69
PPDC_LFONLY, // LF only
70
PPDC_CRONLY, // CR only
71
PPDC_CRLF // CR + LF
72
};
73
74
enum ppdcCondFlags //// Condition flags
75
{
76
PPDC_COND_NORMAL = 0, // Normal state
77
PPDC_COND_SKIP = 1, // Skip state
78
PPDC_COND_SATISFIED = 2 // At least one condition satisfied
79
};
80
81
82
//
83
// Printer description data...
84
//
85
86
class ppdcShared //// Shared Data Value
87
{
88
private:
89
90
int use; // Use count (delete when 0)
91
92
public:
93
94
ppdcShared();
95
virtual ~ppdcShared();
96
97
virtual const char *class_name() = 0;
98
99
void retain();
100
void release();
101
};
102
103
class ppdcArray //// Shared Array
104
: public ppdcShared
105
{
106
public:
107
108
size_t count, // Number of elements
109
alloc, // Allocated elements
110
current; // Current element
111
ppdcShared **data; // Elements
112
113
ppdcArray(ppdcArray *a = 0);
114
~ppdcArray();
115
116
PPDC_NAME("ppdcArray")
117
118
void add(ppdcShared *d);
119
ppdcShared *first();
120
ppdcShared *next();
121
void remove(ppdcShared *d);
122
};
123
124
class ppdcString //// Shared String
125
: public ppdcShared
126
{
127
public:
128
129
char *value; // String value
130
131
ppdcString(const char *v);
132
~ppdcString();
133
134
PPDC_NAME("ppdcString")
135
};
136
137
class ppdcInteger //// Shared integer
138
: public ppdcShared
139
{
140
public:
141
142
int *value; // Integer value
143
144
ppdcInteger(int *v) { value = v; }
145
146
PPDC_NAME("ppdcInteger")
147
};
148
149
class ppdcMessage //// Translation message
150
: public ppdcShared
151
{
152
public:
153
154
ppdcString *id, // Translation ID
155
*string; // Translation string
156
157
ppdcMessage(const char *i, const char *s);
158
~ppdcMessage();
159
160
PPDC_NAME("ppdcMessage")
161
};
162
163
class ppdcCatalog //// Translation catalog
164
: public ppdcShared
165
{
166
public:
167
168
ppdcString *locale; // Name of locale
169
ppdcString *filename; // Name of translation file
170
ppdcArray *messages; // Array of translation messages
171
172
ppdcCatalog(const char *l, const char *f = 0);
173
~ppdcCatalog();
174
175
PPDC_NAME("ppdcCatalog")
176
177
void add_message(const char *id, const char *string = NULL);
178
const char *find_message(const char *id);
179
int load_messages(const char *f);
180
int save_messages(const char *f);
181
};
182
183
class ppdcAttr //// Attribute
184
: public ppdcShared
185
{
186
public:
187
188
ppdcString *name, // Name of attribute
189
*selector, // Selector string
190
*text, // Text string
191
*value; // Value string
192
bool localizable; // Should this attribute be localized?
193
194
ppdcAttr(const char *n, const char *s, const char *t, const char *v,
195
bool loc = false);
196
~ppdcAttr();
197
198
PPDC_NAME("ppdcAttr")
199
};
200
201
class ppdcFont //// Shared Font
202
: public ppdcShared
203
{
204
public:
205
206
ppdcString *name, // Font name
207
*encoding, // Font base encoding
208
*version, // Font version
209
*charset; // Font charset
210
ppdcFontStatus status; // Font status (ROM or Disk)
211
212
ppdcFont(const char *n, const char *e, const char *v, const char *c,
213
ppdcFontStatus s);
214
~ppdcFont();
215
216
PPDC_NAME("ppdcFont")
217
};
218
219
class ppdcChoice //// Option Choice
220
: public ppdcShared
221
{
222
public:
223
224
ppdcString *name, // Name of choice
225
*text, // Human-readable text of choice
226
*code; // PS code of choice
227
228
ppdcChoice(const char *n, const char *t, const char *c);
229
~ppdcChoice();
230
231
PPDC_NAME("ppdcChoice")
232
};
233
234
class ppdcOption //// Option
235
: public ppdcShared
236
{
237
public:
238
239
ppdcOptType type; // Type of option
240
ppdcString *name, // Name of option
241
*text; // Human-readable text of option
242
ppdcOptSection section; // Section for option code
243
float order; // Order number
244
ppdcArray *choices; // Choices
245
ppdcString *defchoice; // Default choice
246
247
ppdcOption(ppdcOptType ot, const char *n, const char *t, ppdcOptSection s,
248
float o);
249
ppdcOption(ppdcOption *o);
250
~ppdcOption();
251
252
PPDC_NAME("ppdcOption")
253
254
void add_choice(ppdcChoice *c) { choices->add(c); }
255
ppdcChoice *find_choice(const char *n);
256
void set_defchoice(ppdcChoice *c);
257
};
258
259
class ppdcGroup //// Group of Options
260
: public ppdcShared
261
{
262
public:
263
264
ppdcString *name, // Name of option
265
*text; // Human-readable text of option
266
ppdcArray *options; // Options
267
268
ppdcGroup(const char *n, const char *t);
269
ppdcGroup(ppdcGroup *g);
270
~ppdcGroup();
271
272
PPDC_NAME("ppdcGroup")
273
274
void add_option(ppdcOption *o) { options->add(o); }
275
ppdcOption *find_option(const char *n);
276
};
277
278
class ppdcConstraint //// Constraint
279
: public ppdcShared
280
{
281
public:
282
283
ppdcString *option1, // First option
284
*choice1, // First choice
285
*option2, // Second option
286
*choice2; // Second choice
287
288
ppdcConstraint(const char *o1, const char *c1, const char *o2,
289
const char *c2);
290
~ppdcConstraint();
291
292
PPDC_NAME("ppdcConstraint")
293
};
294
295
class ppdcFilter //// Filter Program
296
: public ppdcShared
297
{
298
public:
299
300
ppdcString *mime_type, // MIME type
301
*program; // Filter program
302
int cost; // Relative cost of filter
303
304
ppdcFilter(const char *t, const char *p, int c);
305
~ppdcFilter();
306
307
PPDC_NAME("ppdcFilter")
308
};
309
310
class ppdcMediaSize //// Media Size
311
: public ppdcShared
312
{
313
public:
314
315
ppdcString *name, // Name of size
316
*text; // Human-readable text
317
float width, // Width in points
318
length, // Length in points
319
left, // Left limit in points
320
bottom, // Bottom limit in points
321
right, // Right limit in points
322
top; // Top limit in points
323
ppdcString *size_code, // PageSize code, if any
324
*region_code; // PageRegion code, if any
325
326
ppdcMediaSize(const char *n, const char *t, float w, float l,
327
float lm, float bm, float rm, float tm,
328
const char *sc = 0, const char *rc = 0);
329
~ppdcMediaSize();
330
331
PPDC_NAME("ppdcMediaSize")
332
};
333
334
class ppdcProfile //// Color Profile
335
: public ppdcShared
336
{
337
public:
338
339
ppdcString *resolution, // Resolution name
340
*media_type; // Media type name
341
float density, // Color profile density
342
gamma, // Color profile gamma
343
profile[9]; // Color profile matrix
344
345
ppdcProfile(const char *r, const char *m, float d, float g, const float *p);
346
~ppdcProfile();
347
348
PPDC_NAME("ppdcProfile")
349
};
350
351
class ppdcSource;
352
353
class ppdcDriver //// Printer Driver Data
354
: public ppdcShared
355
{
356
public:
357
358
ppdcDrvType type; // Driver type
359
ppdcArray *copyright; // Copyright strings
360
ppdcString *manufacturer, // Manufacturer
361
*model_name, // Name of printer model
362
*file_name, // Output filename for PPD
363
*pc_file_name, // 8 character PC filename for PPD
364
*version; // Version number
365
int model_number, // Model number for driver
366
manual_copies, // Do manual copies?
367
color_device, // Support color?
368
throughput; // Throughput in pages per minute
369
ppdcArray *attrs, // Attributes
370
*constraints, // Constraints
371
*filters, // Filters
372
*fonts, // Fonts
373
*groups, // Option groups
374
*profiles, // Color profiles
375
*sizes; // Fixed sizes
376
ppdcString *default_font, // Default font
377
*default_size; // Default size option
378
int variable_paper_size; // Support variable sizes?
379
ppdcString *custom_size_code; // Custom page size code, if any
380
float left_margin, // Margins for device in points
381
bottom_margin,
382
right_margin,
383
top_margin,
384
max_width, // Maximum width (points)
385
max_length, // Maximum length (points)
386
min_width, // Minimum width (points)
387
min_length; // Minimum length (points)
388
389
ppdcDriver(ppdcDriver *d = 0);
390
~ppdcDriver();
391
392
PPDC_NAME("ppdcDriver")
393
394
void add_attr(ppdcAttr *a) { attrs->add(a); }
395
void add_constraint(ppdcConstraint *c) { constraints->add(c); }
396
void add_copyright(const char *c) {
397
copyright->add(new ppdcString(c));
398
}
399
void add_filter(ppdcFilter *f) { filters->add(f); }
400
void add_font(ppdcFont *f) { fonts->add(f); }
401
void add_group(ppdcGroup *g) { groups->add(g); }
402
void add_profile(ppdcProfile *p) { profiles->add(p); }
403
void add_size(ppdcMediaSize *m) { sizes->add(m); }
404
405
ppdcAttr *find_attr(const char *k, const char *s);
406
ppdcGroup *find_group(const char *n);
407
ppdcOption *find_option(const char *n);
408
ppdcOption *find_option_group(const char *n, ppdcGroup **mg);
409
410
void set_custom_size_code(const char *c);
411
void set_default_font(ppdcFont *f);
412
void set_default_size(ppdcMediaSize *m);
413
void set_file_name(const char *f);
414
void set_manufacturer(const char *m);
415
void set_model_name(const char *m);
416
void set_pc_file_name(const char *f);
417
void set_version(const char *v);
418
419
int write_ppd_file(cups_file_t *fp, ppdcCatalog *catalog,
420
ppdcArray *locales, ppdcSource *src,
421
ppdcLineEnding le);
422
};
423
424
class ppdcVariable //// Variable Definition
425
: public ppdcShared
426
{
427
public:
428
429
ppdcString *name, // Name of variable
430
*value; // Value of variable
431
432
ppdcVariable(const char *n, const char *v);
433
~ppdcVariable();
434
435
PPDC_NAME("ppdcVariable")
436
437
void set_value(const char *v);
438
};
439
440
class ppdcFile //// File
441
{
442
public:
443
444
bool close_on_delete; // Close file on delete?
445
cups_file_t *fp; // File pointer
446
const char *filename; // Filename
447
int line; // Line in file
448
449
ppdcFile(const char *f, cups_file_t *ffp = (cups_file_t *)0);
450
~ppdcFile();
451
452
int get();
453
int peek();
454
};
455
456
class ppdcSource //// Source File
457
: public ppdcShared
458
{
459
public:
460
461
static ppdcArray *includes; // Include directories
462
static const char *driver_types[]; // Driver types
463
464
ppdcString *filename; // Filename
465
ppdcArray *base_fonts, // Base fonts
466
*drivers, // Printer drivers
467
*po_files, // Message catalogs
468
*sizes, // Predefined media sizes
469
*vars; // Defined variables
470
int cond_state, // Cumulative conditional state
471
*cond_current, // Current #if state
472
cond_stack[101]; // #if state stack
473
474
475
ppdcSource(const char *f = 0, cups_file_t *ffp = (cups_file_t *)0);
476
~ppdcSource();
477
478
PPDC_NAME("ppdcSource")
479
480
static void add_include(const char *d);
481
ppdcDriver *find_driver(const char *f);
482
static char *find_include(const char *f, const char *base, char *n,
483
int nlen);
484
ppdcCatalog *find_po(const char *l);
485
ppdcMediaSize *find_size(const char *s);
486
ppdcVariable *find_variable(const char *n);
487
ppdcAttr *get_attr(ppdcFile *fp, bool loc = false);
488
int get_boolean(ppdcFile *fp);
489
ppdcChoice *get_choice(ppdcFile *fp);
490
ppdcChoice *get_color_model(ppdcFile *fp);
491
int get_color_order(const char *co);
492
ppdcProfile *get_color_profile(ppdcFile *fp);
493
int get_color_space(const char *cs);
494
ppdcConstraint *get_constraint(ppdcFile *fp);
495
ppdcMediaSize *get_custom_size(ppdcFile *fp);
496
void get_duplex(ppdcFile *fp, ppdcDriver *d);
497
ppdcFilter *get_filter(ppdcFile *fp);
498
float get_float(ppdcFile *fp);
499
ppdcFont *get_font(ppdcFile *fp);
500
ppdcChoice *get_generic(ppdcFile *fp, const char *keyword,
501
const char *tattr, const char *nattr);
502
ppdcGroup *get_group(ppdcFile *fp, ppdcDriver *d);
503
ppdcOption *get_installable(ppdcFile *fp);
504
int get_integer(const char *v);
505
int get_integer(ppdcFile *fp);
506
float get_measurement(ppdcFile *fp);
507
ppdcOption *get_option(ppdcFile *fp, ppdcDriver *d, ppdcGroup *g);
508
ppdcCatalog *get_po(ppdcFile *fp);
509
ppdcChoice *get_resolution(ppdcFile *fp);
510
ppdcProfile *get_simple_profile(ppdcFile *fp);
511
ppdcMediaSize *get_size(ppdcFile *fp);
512
char *get_token(ppdcFile *fp, char *buffer, int buflen);
513
ppdcVariable *get_variable(ppdcFile *fp);
514
int import_ppd(const char *f);
515
int quotef(cups_file_t *fp, const char *format, ...);
516
void read_file(const char *f, cups_file_t *ffp = (cups_file_t *)0);
517
void scan_file(ppdcFile *fp, ppdcDriver *td = 0, bool inc = false);
518
ppdcVariable *set_variable(const char *name, const char *value);
519
int write_file(const char *f);
520
};
521
522
523
#endif // !_PPDC_H_
524
525