~ubuntu-branches/ubuntu/wily/opencollada/wily-proposed

« back to all changes in this revision

Viewing changes to Externals/MathMLSolver/include/MathMLParser.h

  • Committer: Package Import Robot
  • Author(s): Matteo F. Vescovi
  • Date: 2015-05-14 17:23:27 UTC
  • Revision ID: package-import@ubuntu.com-20150514172327-f862u8envms01fra
Tags: upstream-0.1.0~20140703.ddf8f47+dfsg1
ImportĀ upstreamĀ versionĀ 0.1.0~20140703.ddf8f47+dfsg1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************************************************
 
2
Copyright (c) 2007 netAllied GmbH, Tettnang
 
3
 
 
4
Permission is hereby granted, free of charge, to any person
 
5
obtaining a copy of this software and associated documentation
 
6
files (the "Software"), to deal in the Software without
 
7
restriction, including without limitation the rights to use,
 
8
copy, modify, merge, publish, distribute, sublicense, and/or sell
 
9
copies of the Software, and to permit persons to whom the
 
10
Software is furnished to do so, subject to the following
 
11
conditions:
 
12
 
 
13
The above copyright notice and this permission notice shall be
 
14
included in all copies or substantial portions of the Software.
 
15
 
 
16
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
17
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 
18
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 
19
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 
20
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 
21
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 
22
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 
23
OTHER DEALINGS IN THE SOFTWARE.
 
24
******************************************************************************/
 
25
 
 
26
#ifndef __MATHML_PARSER_H__
 
27
#define __MATHML_PARSER_H__
 
28
 
 
29
#include "MathMLSolverPrerequisites.h"
 
30
#include <xercesc/parsers/XercesDOMParser.hpp>
 
31
#include "MathMLASTConstantExpression.h"
 
32
 
 
33
namespace MathML
 
34
{
 
35
    /** Parses a MathML file and creates an AST.
 
36
       @todo: Convenience method returning lists, strings, etc. created within, should be created
 
37
       in the calling method and passed as reference (-> no copying of strings, lists, etc).
 
38
       E.g.:
 
39
         - IS: ElementList getChildElements ( xercesc::DOMElement* element )
 
40
         - SHOULD BE: void getChildElements ( ElementList& result, xercesc::DOMElement* element )
 
41
 
 
42
       */
 
43
 
 
44
    class _MATHML_SOLVER_EXPORT Parser
 
45
    {
 
46
 
 
47
    private:
 
48
 
 
49
        /** The file path/url. */
 
50
        String mFile;
 
51
 
 
52
        /** The xml parser. */
 
53
        xercesc::XercesDOMParser* xmlParser;
 
54
        /** The parser handler for notification. */
 
55
        MathML::ParserHandler* mParserHandler;
 
56
        /** Temporary list of variable names. */
 
57
        ParserHandler::VariableList mVariableList;
 
58
 
 
59
    public:
 
60
        /** Type definition for a list DOM nodes of type 'element'. */
 
61
        typedef std::vector<xercesc::DOMElement*> ElementList;
 
62
        /** Type definition for a list DOM nodes of type 'text'. */
 
63
        typedef std::vector<xercesc::DOMText*> TextNodeList;
 
64
 
 
65
        /** C-tor.
 
66
        @param handler The parser handler being notifiied.
 
67
        */
 
68
        Parser( MathML::ParserHandler* handler = 0 );
 
69
 
 
70
        /** D-tor. */
 
71
        virtual ~Parser();
 
72
 
 
73
        /** Getter for path/url of parsing document. */
 
74
        virtual const String& getFile();
 
75
 
 
76
        /** Methode for starting a parse-process.
 
77
        @param fileName The string of a file path or url.
 
78
        */
 
79
        virtual void parse( const String& fileName );
 
80
 
 
81
    private:
 
82
        /** Getter for retrieving the parser handler. */
 
83
        virtual MathML::ParserHandler* getParserHandler();
 
84
 
 
85
        /** Convenience method for creating (double) constant expression
 
86
        from a xercesc character pointer.
 
87
        @param xmlValue The xercesc character pointer.
 
88
        @return The AST::ConstantExpression for the given string.
 
89
        */
 
90
        virtual AST::ConstantExpression* createConstant( const XMLCh* xmlValue );
 
91
 
 
92
        /** Convenience method for retrieving DOM child nodes of type
 
93
        'element' for the given DOMElement.
 
94
        @param element The element for retrieving its child elements.
 
95
        */
 
96
        virtual ElementList getChildElements ( xercesc::DOMElement* element );
 
97
 
 
98
        /** Convenience method for checking if given child node is
 
99
        of the given name.
 
100
        @param node The DOMNode to be checked.
 
101
        @param name The name to check against.
 
102
        @return True if node is of given name, otherwise false.
 
103
        */
 
104
        virtual bool isElementOfName( xercesc::DOMNode* node, String name );
 
105
 
 
106
        /** Convenience method for retrieving a element from a document
 
107
        by its id-attribute.
 
108
        @param doc The DOMDocument to be searched.
 
109
        @param elementId The id to search for.
 
110
        @return The found DOMElement or 0.
 
111
        */
 
112
        virtual xercesc::DOMElement* getElementById( xercesc::DOMDocument* doc, const String& elementId );
 
113
 
 
114
        /** Convenience method for retrieving the attribute value for
 
115
        the given attribute name.
 
116
        @param element The DOMElement to be search for the attribute.
 
117
        @param attributeName The name of the attribute to search for.
 
118
        @return The string representation of its value if found, otherwise an empty string.
 
119
        */
 
120
        virtual String getAttributeValue ( xercesc::DOMElement* element, String attributeName );
 
121
 
 
122
        /** Convenience method for retrieving child text nodes from a given DOMElement.
 
123
        @param element The DOMElement to be search for the text nodes.
 
124
        @return A list of found text nodes, otherwise an empty list.
 
125
        */
 
126
        virtual TextNodeList getTextNodes ( xercesc::DOMElement* element );
 
127
 
 
128
 
 
129
        /** Method for retrieving a unary operator from the given
 
130
        (MathML) DOMElement.
 
131
        @param element The element to be check for a unary operator.
 
132
        @return The string representation for a correct unary operator,
 
133
        otherwise the string constant 'NO_OPERATOR'.
 
134
        */
 
135
        virtual const String& getUnaryOperator ( xercesc::DOMElement* element );
 
136
 
 
137
        /** Method for retrieving a binary operator from the given
 
138
        (MathML) DOMElement.
 
139
        @param element The element to be check for a binary operator.
 
140
        @return The string representation for a correct binary operator,
 
141
        otherwise the string constant 'NO_OPERATOR'.
 
142
        */
 
143
        virtual const String& getBinaryOperator ( xercesc::DOMElement* element );
 
144
 
 
145
        /** Method for retrieving a relation operator from the given
 
146
        (MathML) DOMElement.
 
147
        @param element The element to be check for a relation operator.
 
148
        @return The string representation for a correct relation operator,
 
149
        otherwise the string constant 'NO_OPERATOR'.
 
150
        */
 
151
        virtual const String& getRelationOperator ( xercesc::DOMElement* element );
 
152
 
 
153
        /** Method for retrieving a logic operator from the given
 
154
        (MathML) DOMElement.
 
155
        @param element The element to be check for a logic operator.
 
156
        @return The string representation for a correct logic operator,
 
157
        otherwise the string constant 'NO_OPERATOR'.
 
158
        */
 
159
        virtual const String& getLogicOperator ( xercesc::DOMElement* element );
 
160
 
 
161
        /** Method for retrieving the name of a function from the given
 
162
        (MathML) DOMElement.
 
163
        @param element The element to be check for a function name.
 
164
        @return The string representation for a correct function name,
 
165
        otherwise the string constant 'NO_FUNCTION'.
 
166
        */
 
167
        virtual const String& getFunction ( xercesc::DOMElement* element );
 
168
 
 
169
        /** Methode for handling the given DOMElement.
 
170
        @param element The element to be further processed for its name (and attributes).
 
171
        @return The common interface of the underlying expression.
 
172
        */
 
173
        virtual AST::INode* handleElement ( xercesc::DOMElement* element );
 
174
 
 
175
        /** Methode for handling (MathML) <apply>-elements.
 
176
        @param element The element to be further processed for its children and attributes.
 
177
        @return The common interface of the underlying expression.
 
178
        */
 
179
        virtual AST::INode* handleElementApply( xercesc::DOMElement* element );
 
180
 
 
181
        /** Methode for handling (MathML) <declare>-elements.
 
182
        @param element The element to be further processed for its children and attributes).
 
183
        @param siblings The list of siblings holding the parameter arguments for this declaration-construct.
 
184
        @return The interface of an AST::FragmentExpression -node.
 
185
        */
 
186
        virtual AST::INode* handleElementDeclare( xercesc::DOMElement* element, const ElementList& siblings );
 
187
 
 
188
        /** Methode for handling 'external' defined fragments
 
189
        (or code) referenced by (MathML) <csymbol>-elements.
 
190
        @param firstChild The identified<csymbol>-element of the given list.
 
191
        @param childList The ElementList containing the <csymbol..>-element and its siblings.
 
192
        @return The interface of an AST::FragmentExpression -node.
 
193
        */
 
194
        virtual AST::INode* handleExternalReferenceByCSymbol( xercesc::DOMElement* firstChild, ElementList& childList );
 
195
 
 
196
        /** Methode for handling (MathML) <cn>-elements.
 
197
        @param element The <cn> -DOMElement..
 
198
        @return The interface of an AST::ConstantExpression -node.
 
199
        */
 
200
        virtual AST::INode* handleElementCN( xercesc::DOMElement* element );
 
201
 
 
202
        /** Methode for handling (MathML) <ci>-elements.
 
203
        @param element The <ci> -DOMElement..
 
204
        @return The interface of an AST::VariableExpression -node.
 
205
        */
 
206
        virtual AST::INode* handleElementCI( xercesc::DOMElement* element );
 
207
 
 
208
        /** Methode for handling (MathML) <logbase>-elements.
 
209
        @param element The <logbase> -DOMElement..
 
210
        @return The interface of an AST-node representening the base for a logarithm.
 
211
        */
 
212
        virtual AST::INode* handleElementLogbase( xercesc::DOMElement* element );
 
213
 
 
214
        /** Methode for handling (MathML) <pi>-elements.
 
215
        @param element The <pi> -DOMElement..
 
216
        @return The interface of an AST::ConstantExpression -node for the constant 'PI'.
 
217
        */
 
218
        virtual AST::INode* handleElementPI( xercesc::DOMElement* element );
 
219
 
 
220
        /** Methode for handling (MathML) <exponentiale>-elements.
 
221
        @param element The <exponentiale> -DOMElement..
 
222
        @return The interface of an AST::ConstantExpression -node for the constant 'e'.
 
223
        */
 
224
        virtual AST::INode* handleElementExponentiale( xercesc::DOMElement* element );
 
225
 
 
226
        /** Methode for handling (MathML) <true>-elements.
 
227
        @param element The <true> -DOMElement..
 
228
        @return The interface of an AST::ConstantExpression -node for the boolean constant 'true'.
 
229
        */
 
230
        virtual AST::INode* handleElementTrue( xercesc::DOMElement* element );
 
231
 
 
232
        /** Methode for handling (MathML) <false>-elements.
 
233
        @param element The <false> -DOMElement..
 
234
        @return The interface of an AST::ConstantExpression -node for the boolean constant 'false'.
 
235
        */
 
236
        virtual AST::INode* handleElementFalse( xercesc::DOMElement* element );
 
237
 
 
238
 
 
239
        /** Methode for handling unary operations.
 
240
        @param elements The list of elements containing operator and operand(s).
 
241
        @return The interface of an AST::UnaryExpression -node.
 
242
        */
 
243
        virtual AST::INode* handleUnaryOperation( ElementList& elements );
 
244
 
 
245
        /** Methode for handling operations with two operands.
 
246
        @param elements The list of elements containing operator and operand(s).
 
247
        @return The interface of an specialized AST::ExpressionNode (arithmetic, logic, ..).
 
248
        */
 
249
        virtual AST::INode* handleBinaryOperation( ElementList& elements );
 
250
 
 
251
        /** Methode for handling operations with more than two operands.
 
252
        @param elements The list of elements containing operator and operands.
 
253
        @return The interface of an specialized AST::ExpressionNode (arithmetic, logic, ..)
 
254
        but no AST::BinaryComparisionExpression (relations).
 
255
        */
 
256
        virtual AST::INode* handleMultiOperandOperation( ElementList& elements );
 
257
 
 
258
 
 
259
        /** todo: description */
 
260
        virtual String getContainer( const String& url );
 
261
        /** todo: description */
 
262
        virtual String getId( const String& url );
 
263
    };
 
264
 
 
265
} //namespace MathML
 
266
 
 
267
#endif //__MATHML_PARSER_H__