1 /*
2  * This file defines the text output classes; these are simple subsets of
3  * popular output formats needed by the various filters.
4  */
5 
6 #ifndef TEXTOUT
7 #define TEXTOUT
8 
9 #include "outstream.h"
10 #include "instream.h"
11 #include "srlist.h"
12 #include "errhand.h"
13 
14 #define TEXT_I_IGNORE -2
15 
16 #define MAX_TEXT_REGNUM 10
17 #define MAX_TEXT_REGISTER 64
18 
19 /* Base class */
20 class TextOut {
21 
22     int    MatchCommand( const char *, int, SrEntry ** );
23     char * GetDQtext( char *, char *, int );
24     int    OutString( const char * );
25     int    OutStringUC( const char * );
26 
27     public:
28     char      *lfont;
29     char      font_str[32];
30     const char *mode;
31     char      mode_str[32];
32     char      *nl;
33     char      newline_str[32];
34     int       last_was_nl;
35     int       last_was_par;
36     char      newline_onoutput[3];
37     SrList    *userops;
38     OutStream *out;
39     int       debug_flag;
40     TextOut   *next;
41 
42     /* Text Registers */
43     char      cmdreg[MAX_TEXT_REGNUM][MAX_TEXT_REGISTER];
44 
45     // Basic control
46     virtual int SetDebug( int );
47     virtual const char *SetMode( const char * );
48     virtual int SetRegisterValue( int, const char * );
49     virtual int SetOutstream( OutStream * );
50     virtual ~TextOut();
51     virtual int Flush();
52     virtual void SetNewlineString( const char * );
53 
54     // Error handler.  Default is abort.
55     ErrHand  *err;
56 
57     // Get commands
58     virtual int ReadCommands( InStream * );
59 
60     // Common command generator
61     virtual int PutCommand( char *, char *, char *, char *, char *, int );
62 
63     // Basic text
64     virtual int PutChar( const char );
65     virtual int PutToken( int, const char * );
66     virtual int PutQuoted( int, const char * );
67     virtual int UpdateNL( int );
68     virtual int PutNewline( );
69 
70     // Verbatim mode output (mostly raw output, but for html, needs to
71     // handle the html special characters
72     virtual int PutTokenRaw(int, const char *);
73 
74     /* Special output */
75     virtual int PutOp( const char * );
76     virtual int PutOp( const char *, char *, char *, int );
77     virtual int PutOp( const char *, char *, char *, char *, char * );
78     virtual int PutOp( const char *, char * );
79     virtual int PutOp( const char *, char *, int );
80     virtual int PutOpError( const char *, const char * );
81     virtual int HasOp( const char * );
82 
83     /* Miscellaneous */
84     virtual int Debug( int );
85     };
86 
87 class TextOutHTML : public TextOut {
88 
89     int Setup( );
90 
91     public:
92     TextOutHTML( OutStream * );
93     TextOutHTML( );
94     int PutChar( const char );
95     int PutToken( int, const char * );
96     int PutTokenRaw(int, const char *);
97     };
98 
99 class TextOutTeX : public TextOut {
100 
101     int Setup( );
102 
103     public:
104     TextOutTeX( OutStream * );
105     TextOutTeX( );
106     int PutChar( const char );
107     int PutToken( int, const char * );
108     int PutTokenRaw(int, const char *);
109     };
110 
111 class TextOutNroff : public TextOut {
112 
113     int Setup( );
114 
115     public:
116     TextOutNroff( OutStream * );
117     TextOutNroff( );
118     int PutChar( const char );
119     int PutToken( int, const char * );
120     int PutTokenRaw(int, const char *);
121     };
122 
123 class TextOutStrm : public TextOut {
124     public:
125     TextOutStrm( OutStream * );
126     ~TextOutStrm();
127     };
128 
129 #endif
130