Line data Source code
1 : /* Copyright 1989-1991 Free Software Foundation, Inc.
2 : Written by James Clark (jjc@jclark.com)
3 :
4 : This file is part of groff, the GNU roff typesetting system.
5 :
6 : groff is free software; you can redistribute it and/or modify it under
7 : the terms of the GNU General Public License as published by the Free
8 : Software Foundation, either version 3 of the License, or
9 : (at your option) any later version.
10 :
11 : groff is distributed in the hope that it will be useful, but WITHOUT ANY
12 : WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 : for more details.
15 :
16 : You should have received a copy of the GNU General Public License
17 : along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 :
19 : #include <stdint.h> // uint16_t
20 :
21 : class ps_output {
22 : public:
23 : ps_output(FILE *, int max_line_length);
24 : ps_output &put_string(const uint16_t *, size_t, bool);
25 : ps_output &put_number(int);
26 : ps_output &put_fix_number(int);
27 : ps_output &put_float(double);
28 : ps_output &put_symbol(const char *);
29 : ps_output &put_color(unsigned int);
30 : ps_output &put_literal_symbol(const char *);
31 : ps_output &set_fixed_point(int);
32 : ps_output &simple_comment(const char *);
33 : ps_output &begin_comment(const char *);
34 : ps_output &comment_arg(const char *);
35 : ps_output &end_comment();
36 : ps_output &set_file(FILE *);
37 : ps_output &include_file(FILE *);
38 : ps_output ©_file(FILE *);
39 : ps_output &end_line();
40 : ps_output &put_delimiter(char);
41 : ps_output &special(const char *);
42 : FILE *get_file();
43 : private:
44 : FILE *fp;
45 : size_t col;
46 : size_t max_line_length; // not including newline
47 : int need_space;
48 : int fixed_point;
49 : };
50 :
51 546 : inline FILE *ps_output::get_file()
52 : {
53 546 : return fp;
54 : }
55 :
56 : // this must stay in sync with 'resource_table' in 'psrm.cpp'
57 : enum resource_type {
58 : RESOURCE_FONT,
59 : RESOURCE_FONTSET,
60 : RESOURCE_PROCSET,
61 : RESOURCE_FILE,
62 : RESOURCE_ENCODING,
63 : RESOURCE_FORM,
64 : RESOURCE_PATTERN
65 : };
66 :
67 : struct resource;
68 :
69 : extern string an_empty_string;
70 :
71 : class resource_manager {
72 : public:
73 : resource_manager();
74 : ~resource_manager();
75 : void import_file(const char *filename, ps_output &);
76 : void need_font(const char *name);
77 : void print_header_comments(ps_output &);
78 : void document_setup(ps_output &);
79 : void output_prolog(ps_output &);
80 : private:
81 : unsigned extensions;
82 : unsigned language_level;
83 : resource *procset_resource;
84 : resource *resource_list;
85 : resource *lookup_resource(resource_type type, string &name,
86 : string &version = an_empty_string,
87 : unsigned revision = 0);
88 : resource *lookup_font(const char *name);
89 : void read_download_file();
90 : void supply_resource(resource *r, int rank, FILE *outfp,
91 : int is_document = 0);
92 : void process_file(int rank, FILE *fp, const char *filename, FILE *outfp);
93 : resource *read_file_arg(const char **);
94 : resource *read_procset_arg(const char **);
95 : resource *read_font_arg(const char **);
96 : resource *read_resource_arg(const char **);
97 : void print_resources_comment(unsigned flag, FILE *outfp);
98 : void print_extensions_comment(FILE *outfp);
99 : void print_language_level_comment(FILE *outfp);
100 : int do_begin_resource(const char *ptr, int rank, FILE *fp, FILE *outfp);
101 : int do_include_resource(const char *ptr, int rank, FILE *fp, FILE *outfp);
102 : int do_begin_document(const char *ptr, int rank, FILE *fp, FILE *outfp);
103 : int do_include_document(const char *ptr, int rank, FILE *fp, FILE *outfp);
104 : int do_begin_procset(const char *ptr, int rank, FILE *fp, FILE *outfp);
105 : int do_include_procset(const char *ptr, int rank, FILE *fp, FILE *outfp);
106 : int do_begin_font(const char *ptr, int rank, FILE *fp, FILE *outfp);
107 : int do_include_font(const char *ptr, int rank, FILE *fp, FILE *outfp);
108 : int do_begin_file(const char *ptr, int rank, FILE *fp, FILE *outfp);
109 : int do_include_file(const char *ptr, int rank, FILE *fp, FILE *outfp);
110 : int change_to_end_resource(const char *ptr, int rank, FILE *fp, FILE *outfp);
111 : int do_begin_preview(const char *ptr, int rank, FILE *fp, FILE *outfp);
112 : int do_begin_data(const char *ptr, int rank, FILE *fp, FILE *outfp);
113 : int do_begin_binary(const char *ptr, int rank, FILE *fp, FILE *outfp);
114 : };
115 :
116 : extern unsigned broken_flags;
117 :
118 : // broken_flags is ored from these
119 :
120 : enum {
121 : NO_SETUP_SECTION = 01,
122 : STRIP_PERCENT_BANG = 02,
123 : STRIP_STRUCTURE_COMMENTS = 04,
124 : USE_PS_ADOBE_2_0 = 010,
125 : NO_PAPERSIZE = 020
126 : };
127 :
128 : #include "searchpath.h"
129 :
130 : extern search_path include_search_path;
131 :
132 : // Local Variables:
133 : // fill-column: 72
134 : // mode: C++
135 : // End:
136 : // vim: set cindent noexpandtab shiftwidth=2 textwidth=72:
|