-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathRexx.h
133 lines (118 loc) · 5.01 KB
/
Rexx.h
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
/* $Id: Rexx.h,v 1.103 2011-07-29 10:26:35 pgr Exp $ */
#ifndef COM_JAXO_YAXX_REXX_H_INCLUDED
#define COM_JAXO_YAXX_REXX_H_INCLUDED
/*---------+
| Includes |
+---------*/
#include "rexxgendef.h"
#if !defined COM_JAXO_YAXX_DENY_XML
#include "../yasp3lib/parser/CachedDtd.h"
#endif
#include "Clauses.h"
#include "Label.h"
#include "Interpreter.h"
// class streambuf;
#ifdef TOOLS_NAMESPACE
namespace TOOL_NAMESPACE {
#endif
class FileStreamBuf;
#ifdef TOOLS_NAMESPACE
}
#endif
#ifdef YAXX_NAMESPACE
namespace YAXX_NAMESPACE {
#endif
/*--------------------------------------------------------------- class Rexx -+
| Typical calls: |
| |
| void main() |
| { |
| Rexx rexx; |
| Rexx::Script script("animal.r"); |
| RexxString result; |
| |
| // to interpret the script: |
| Rexx.interpret(script, "", result); |
| |
| // to transform an XML document xmlIn to xmlOut: |
| Rexx.interpret(script, "arg", result, xmlIn, xmlOut); |
| } |
| |
| A stream can also be passed as the first argument to |
| the Rexx::Script constructor. If possible, the second argument |
| should be an identifier for clearly indicating the origin in the |
| error messages (otherwise; it will be "[UNKNOWN]") |
| |
| Ex: |
| void main() |
| { |
| Rexx rexx; |
| MemStream myRexx("Say 'Hello World!'"); |
| Rexx::Script script(myRexx, "Inline Hello World"); |
| RexxString result; |
| Rexx.interpret(script, "", result); |
| } |
| |
| *** WARNING *** |
| The passed stream must stay alive for the lifetime of the returned script! |
| |
+----------------------------------------------------------------------------*/
class REXX_API Rexx {
public:
class REXX_API Script {
friend class Rexx;
public:
Script(
istream & input, //>>>PGR: warning, it is transient!
RexxString const & strPath, // for info only
streambuf * pSb = 0 // if caller has a preferred codebuffer streambuf
);
Script(
RexxString const & strPath, // a qualified path to the file system
streambuf * pSb = 0 // if caller has a preferred codebuffer streambuf
);
private:
Clauses m_clauses;
SymbolMap m_mapSym;
LabelMap m_mapLabel;
CodeBuffer m_codeBuf;
istream & m_input;
RexxString m_strPath;
bool m_isCompiled;
int interpret(
char const * arg,
RexxString & result,
#if !defined COM_JAXO_YAXX_DENY_XML
istream & xmlIn,
ostream & xmlOut,
CachedDtdList const & dtds,
#endif
UnicodeComposer & erh
);
};
private:
static RexxString resultDeflt;
static NullStream nilDevice;
public:
/*---------------+
| Public Methods |
+---------------*/
Rexx();
int interpret( // return 0 or Rexx error no
Script & script, // Script to interpret
char const * arg = "", // Rexx ARG (asciiz string)
RexxString & result = resultDeflt, // Rexx RESULT
istream & xmlIn = nilDevice, // HTML input stream
ostream & xmlOut = nilDevice // Transformed Output stream
);
private:
UnicodeComposer m_erh;
#if !defined COM_JAXO_YAXX_DENY_XML
CachedDtdList m_dtds;
#endif
};
#ifdef YAXX_NAMESPACE
}
#endif
#endif
/*===========================================================================*/