xref: /386bsd/usr/src/usr.bin/groff/grops/ps.h (revision a2142627)
1 // -*- C++ -*-
2 /* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
3      Written by James Clark (jjc@jclark.com)
4 
5 This file is part of groff.
6 
7 groff is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11 
12 groff is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License along
18 with groff; see the file COPYING.  If not, write to the Free Software
19 Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20 
21 class ps_output {
22 public:
23   ps_output(FILE *, int max_line_length);
24   ps_output &put_string(const char *, int);
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_literal_symbol(const char *);
30   ps_output &set_fixed_point(int);
31   ps_output &simple_comment(const char *);
32   ps_output &begin_comment(const char *);
33   ps_output &comment_arg(const char *);
34   ps_output &end_comment();
35   ps_output &set_file(FILE *);
36   ps_output &include_file(FILE *);
37   ps_output &copy_file(FILE *);
38   ps_output &end_line();
39   ps_output &put_delimiter(char);
40   ps_output &special(const char *);
41   FILE *get_file();
42 private:
43   FILE *fp;
44   int col;
45   int max_line_length;		// not including newline
46   int need_space;
47   int fixed_point;
48 };
49 
get_file()50 inline FILE *ps_output::get_file()
51 {
52   return fp;
53 }
54 
55 enum resource_type {
56   RESOURCE_FONT,
57   RESOURCE_PROCSET,
58   RESOURCE_FILE,
59   RESOURCE_ENCODING,
60   RESOURCE_FORM,
61   RESOURCE_PATTERN
62   };
63 
64 struct resource;
65 
66 extern string an_empty_string;
67 
68 class resource_manager {
69 public:
70   resource_manager();
71   ~resource_manager();
72   void import_file(const char *filename, ps_output &);
73   void need_font(const char *name);
74   void print_header_comments(ps_output &);
75   void document_setup(ps_output &);
76   void output_prolog(ps_output &);
77 private:
78   unsigned extensions;
79   unsigned language_level;
80   resource *procset_resource;
81   resource *resource_list;
82   resource *lookup_resource(resource_type type, string &name,
83 			    string &version = an_empty_string,
84 			    unsigned revision = 0);
85   resource *lookup_font(const char *name);
86   void read_download_file();
87   void supply_resource(resource *r, int rank, FILE *outfp,
88 		       int is_document = 0);
89   void process_file(int rank, FILE *fp, const char *filename, FILE *outfp);
90   resource *read_file_arg(const char **);
91   resource *read_procset_arg(const char **);
92   resource *read_font_arg(const char **);
93   resource *read_resource_arg(const char **);
94   void print_resources_comment(unsigned flag, FILE *outfp);
95   void print_extensions_comment(FILE *outfp);
96   void print_language_level_comment(FILE *outfp);
97   int do_begin_resource(const char *ptr, int rank, FILE *fp, FILE *outfp);
98   int do_include_resource(const char *ptr, int rank, FILE *fp, FILE *outfp);
99   int do_begin_document(const char *ptr, int rank, FILE *fp, FILE *outfp);
100   int do_include_document(const char *ptr, int rank, FILE *fp, FILE *outfp);
101   int do_begin_procset(const char *ptr, int rank, FILE *fp, FILE *outfp);
102   int do_include_procset(const char *ptr, int rank, FILE *fp, FILE *outfp);
103   int do_begin_font(const char *ptr, int rank, FILE *fp, FILE *outfp);
104   int do_include_font(const char *ptr, int rank, FILE *fp, FILE *outfp);
105   int do_begin_file(const char *ptr, int rank, FILE *fp, FILE *outfp);
106   int do_include_file(const char *ptr, int rank, FILE *fp, FILE *outfp);
107   int change_to_end_resource(const char *ptr, int rank, FILE *fp, FILE *outfp);
108   int do_begin_preview(const char *ptr, int rank, FILE *fp, FILE *outfp);
109   int do_begin_data(const char *ptr, int rank, FILE *fp, FILE *outfp);
110   int do_begin_binary(const char *ptr, int rank, FILE *fp, FILE *outfp);
111 };
112 
113 extern unsigned broken_flags;
114 
115 // broken_flags is ored from these
116 
117 enum {
118   NO_SETUP_SECTION = 01,
119   STRIP_PERCENT_BANG = 02,
120   STRIP_STRUCTURE_COMMENTS = 04,
121   USE_PS_ADOBE_2_0 = 010
122 };
123