Ginga  0.13.6.1771-df200
The iTV middleware.
ParserXercesC.h
Go to the documentation of this file.
1 /* Copyright (C) 2006-2017 PUC-Rio/Laboratorio TeleMidia
2 
3 This file is part of Ginga (Ginga-NCL).
4 
5 Ginga is free software: you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 2 of the License, or
8 (at your option) any later version.
9 
10 Ginga is distributed in the hope that it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
13 License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with Ginga. If not, see <http://www.gnu.org/licenses/>. */
17 
18 #ifndef PARSER_XERCES_C_H
19 #define PARSER_XERCES_C_H
20 
22 GINGA_PRAGMA_DIAG_IGNORE (-Wsign-conversion)
24 #include <xercesc/dom/DOM.hpp>
25 #include <xercesc/sax/ErrorHandler.hpp>
26 #include <xercesc/sax/SAXParseException.hpp>
27 XERCES_CPP_NAMESPACE_USE
29 
30 #include "NclArea.h"
31 #include "NclDocument.h"
32 #include "NclProperty.h"
33 #include "NclSwitch.h"
34 
36 
37 class ParserXercesC: public ErrorHandler
38 {
39 public:
40  static NclDocument *parse (const string &, int, int, string *);
41 
42 private:
43  string _prefix; // current prefix
44  NclDocument *_doc; // NCL document
45  string _path; // document's absolute path
46  string _dirname; // directory part of document's path
47  string _errmsg; // last error
48  int _width; // screen width (in pixels)
49  int _height; // screen height (in pixels)
50 
51  map<string,map<string,string>> _descriptors; // cached descriptors
52  map<string,map<string,string>> _regions; // cached regions
53  map<string,Predicate *> _rules; // cached rules
54 
55  struct ConnRole
56  {
57  string role;
62  string value;
63  string key;
64  };
65  map<string,list<ConnRole>> _connectors;
66 
67  ParserXercesC (int, int);
68  ~ParserXercesC ();
69 
70  string getErrMsg ();
71  void setErrMsg (const string &);
72 
73  NclDocument *parse0 (const string &);
74  bool parseNcl (DOMElement *);
75  void parseHead (DOMElement *);
76 
77  NclDocument *parse1 (const string &);
78  void parseImportNCL (DOMElement *);
79  void parseImportBase (DOMElement *);
80  void parseImportedDocumentBase (DOMElement *);
81 
82  void parseRuleBase (DOMElement *);
83  void parseCompositeRule (DOMElement *, Predicate *);
84  void parseRule (DOMElement *, Predicate *);
85 
86  void parseTransitionBase (DOMElement *);
87  void parseTransition (DOMElement *);
88 
89  void parseRegionBase (DOMElement *);
90  void parseRegion (DOMElement *, Rect);
91 
92  void parseDescriptorBase (DOMElement *);
93  void parseDescriptor (DOMElement *);
94 
95  void parseConnectorBase (DOMElement *);
96  void parseCausalConnector (DOMElement *);
97 
98  Predicate *parseAssessmentStatement (DOMElement *);
99  Predicate *parseCompoundStatement (DOMElement *);
100 
101  void parseCompoundCondition (DOMElement *, list<ConnRole> *, Predicate *);
102  void parseCondition (DOMElement *, list<ConnRole> *, Predicate *);
103 
104  void parseCompoundAction (DOMElement *, list<ConnRole> *);
105  void parseSimpleAction (DOMElement *, list<ConnRole> *);
106 
107  NclContext *parseBody (DOMElement *);
109  void posCompileContext (DOMElement *, NclContext *);
110  void posCompileSwitch (DOMElement *, NclSwitch *);
111 
112  NclNode *parseContext (DOMElement *);
113  NclPort *parsePort (DOMElement *, NclComposition *);
114 
115  NclNode *parseSwitch (DOMElement *);
116  NclNode *parseMedia (DOMElement *);
117  NclProperty *parseProperty (DOMElement *);
118  NclAnchor *parseArea (DOMElement *);
119 
120  NclLink *parseLink (DOMElement *, NclContext *);
121  NclBind *parseBind (DOMElement *, NclLink *, list<ConnRole> *,
122  map<string, string> *, NclContext *);
123 
124  // From ErrorHandler.
125  void warning (const SAXParseException &);
126  void error (const SAXParseException &);
127  void fatalError (const SAXParseException &);
128  void resetErrors () {};
129 };
130 
132 
133 #endif // PARSER_XERCESC_H
Definition: NclComposition.h:26
string _dirname
Definition: ParserXercesC.h:46
#define GINGA_PRAGMA_DIAG_PUSH
Definition: aux-ginga.h:29
Definition: NclDocument.h:25
void parseRule(DOMElement *, Predicate *)
Definition: ParserXercesC.cpp:643
#define GINGA_PRAGMA_DIAG_POP
Definition: aux-ginga.h:30
void parseCompoundAction(DOMElement *, list< ConnRole > *)
Definition: ParserXercesC.cpp:1311
string value
Definition: ParserXercesC.h:62
string role
Definition: ParserXercesC.h:57
void parseCompoundCondition(DOMElement *, list< ConnRole > *, Predicate *)
Definition: ParserXercesC.cpp:1182
void parseHead(DOMElement *)
Definition: ParserXercesC.cpp:456
void parseCondition(DOMElement *, list< ConnRole > *, Predicate *)
Definition: ParserXercesC.cpp:1261
NclDocument * parse1(const string &)
Definition: ParserXercesC.cpp:498
void fatalError(const SAXParseException &)
Definition: ParserXercesC.cpp:2139
NclDocument * _doc
Definition: ParserXercesC.h:44
Definition: NclBind.h:27
string key
Definition: ParserXercesC.h:63
Predicate * predicate
Definition: ParserXercesC.h:61
NclBind::RoleType roleType
Definition: ParserXercesC.h:58
NclPort * parsePort(DOMElement *, NclComposition *)
Definition: ParserXercesC.cpp:1596
void parseDescriptor(DOMElement *)
Definition: ParserXercesC.cpp:902
RoleType
Definition: NclBind.h:30
Event::Transition transition
Definition: ParserXercesC.h:60
void error(const SAXParseException &)
Definition: ParserXercesC.cpp:2119
NclNode * parseSwitch(DOMElement *)
Definition: ParserXercesC.cpp:1646
void setErrMsg(const string &)
Definition: ParserXercesC.cpp:345
Predicate * parseCompoundStatement(DOMElement *)
Definition: ParserXercesC.cpp:1128
void parseRuleBase(DOMElement *)
Definition: ParserXercesC.cpp:567
void parseRegionBase(DOMElement *)
Definition: ParserXercesC.cpp:767
int _width
Definition: ParserXercesC.h:48
map< string, map< string, string > > _descriptors
Definition: ParserXercesC.h:51
void parseConnectorBase(DOMElement *)
Definition: ParserXercesC.cpp:972
bool parseNcl(DOMElement *)
Definition: ParserXercesC.cpp:419
NclAnchor * parseArea(DOMElement *)
Definition: ParserXercesC.cpp:1854
void parseCompositeRule(DOMElement *, Predicate *)
Definition: ParserXercesC.cpp:597
#define GINGA_NAMESPACE_END
Definition: aux-ginga.h:62
map< string, list< ConnRole > > _connectors
Definition: ParserXercesC.h:65
ParserXercesC(int, int)
Definition: ParserXercesC.cpp:350
void parseImportBase(DOMElement *)
Definition: ParserXercesC.cpp:517
void posCompileContext(DOMElement *, NclContext *)
Definition: ParserXercesC.cpp:1433
Definition: NclContext.h:26
Event::Type eventType
Definition: ParserXercesC.h:59
void parseTransitionBase(DOMElement *)
Definition: ParserXercesC.cpp:686
#define GINGA_PRAGMA_DIAG_IGNORE
Definition: aux-ginga.h:31
Predicate * parseAssessmentStatement(DOMElement *)
Definition: ParserXercesC.cpp:1057
void parseCausalConnector(DOMElement *)
Definition: ParserXercesC.cpp:998
string _errmsg
Definition: ParserXercesC.h:47
NclBind * parseBind(DOMElement *, NclLink *, list< ConnRole > *, map< string, string > *, NclContext *)
Definition: ParserXercesC.cpp:1939
map< string, map< string, string > > _regions
Definition: ParserXercesC.h:52
void parseTransition(DOMElement *)
Definition: ParserXercesC.cpp:712
int _height
Definition: ParserXercesC.h:49
Definition: NclAnchor.h:25
~ParserXercesC()
Definition: ParserXercesC.cpp:360
NclNode * parseContext(DOMElement *)
Definition: ParserXercesC.cpp:1550
NclNode * parseMedia(DOMElement *)
Definition: ParserXercesC.cpp:1753
string getErrMsg()
Definition: ParserXercesC.cpp:339
void resetErrors()
Definition: ParserXercesC.h:128
#define GINGA_NAMESPACE_BEGIN
Definition: aux-ginga.h:61
void warning(const SAXParseException &)
Definition: ParserXercesC.cpp:2099
Transition
Definition: Event.h:44
Definition: NclPort.h:27
string _path
Definition: ParserXercesC.h:45
Definition: NclSwitch.h:26
void parseImportNCL(DOMElement *)
Definition: ParserXercesC.cpp:506
string _prefix
Definition: ParserXercesC.h:43
void parseDescriptorBase(DOMElement *)
Definition: ParserXercesC.cpp:876
Definition: Predicate.h:25
NclDocument * parse0(const string &)
Definition: ParserXercesC.cpp:368
Definition: NclProperty.h:25
NclContext * parseBody(DOMElement *)
Definition: ParserXercesC.cpp:1388
Type
Definition: Event.h:30
static NclDocument * parse(const string &, int, int, string *)
Parses NCL document.
Definition: ParserXercesC.cpp:324
Definition: NclNode.h:26
map< string, Predicate * > _rules
Definition: ParserXercesC.h:53
void parseImportedDocumentBase(DOMElement *)
Definition: ParserXercesC.cpp:548
Definition: ParserXercesC.h:55
void posCompileSwitch(DOMElement *, NclSwitch *)
Definition: ParserXercesC.cpp:1471
Definition: ParserXercesC.h:37
void solveNodeReferences(NclComposition *)
Definition: ParserXercesC.cpp:1500
void parseSimpleAction(DOMElement *, list< ConnRole > *)
Definition: ParserXercesC.cpp:1338
NclProperty * parseProperty(DOMElement *)
Definition: ParserXercesC.cpp:1838
void parseRegion(DOMElement *, Rect)
Definition: ParserXercesC.cpp:794
GdkRectangle Rect
Definition: aux-ginga.h:114
NclLink * parseLink(DOMElement *, NclContext *)
Definition: ParserXercesC.cpp:1895