Version: 8.3.0
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
YACS
Introduction
Features
Packages
Building
TODOs
Base classes
Engine
SALOME Runtime
XML file loader
GUI design
Python wrapping
PMMLlib C++ examples
Configuring and Installing PMML from sources
PMMLlib
PMMLlib Python examples
Modules
Namespaces
Classes
Files
File List
idl
src
bases
engine
genericgui
hmi
pmml
pyqt
runtime
salomegui
salomewrap
yacsloader
pmml
blocParsers.hxx
codeParsers.cxx
codeParsers.hxx
componentinstanceParsers.cxx
componentinstanceParsers.hxx
containerParsers.cxx
containerParsers.hxx
dataParsers.cxx
dataParsers.hxx
debugger.cxx
driver.cxx
ExampleOfObserversPluginForDriver.cxx
factory.cxx
factory.hxx
inlineParsers.hxx
linkParsers.hxx
LoadState.cxx
LoadState.hxx
loopParsers.hxx
nodeParsers.hxx
outputParsers.hxx
parserBase.cxx
parserBase.hxx
parsers.cxx
parsers.hxx
portParsers.hxx
presetParsers.hxx
ProcCataLoader.cxx
ProcCataLoader.hxx
procParsers.hxx
propertyParsers.cxx
propertyParsers.hxx
remoteParsers.hxx
resume.cxx
rootParser.cxx
rootParser.hxx
serverParsers.hxx
serviceParsers.hxx
sinlineParsers.hxx
switchParsers.hxx
typeParsers.cxx
typeParsers.hxx
xmlParserBase.cxx
xmlParserBase.hxx
xmlrpcParsers.cxx
xmlrpcParsers.hxx
YACSloaderExport.hxx
yacsorb
File Members
parsers.cxx
Go to the documentation of this file.
1
// Copyright (C) 2006-2016 CEA/DEN, EDF R&D
2
//
3
// This library is free software; you can redistribute it and/or
4
// modify it under the terms of the GNU Lesser General Public
5
// License as published by the Free Software Foundation; either
6
// version 2.1 of the License, or (at your option) any later version.
7
//
8
// This library is distributed in the hope that it will be useful,
9
// but WITHOUT ANY WARRANTY; without even the implied warranty of
10
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
// Lesser General Public License for more details.
12
//
13
// You should have received a copy of the GNU Lesser General Public
14
// License along with this library; if not, write to the Free Software
15
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
//
17
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18
//
19
20
#include "
parsers.hxx
"
21
22
#include <iostream>
23
#include <stdexcept>
24
#include <cstdio>
25
26
#include "
Runtime.hxx
"
27
#include "
Proc.hxx
"
28
#include "
ProcCataLoader.hxx
"
29
#include "
Logger.hxx
"
30
31
#include "
rootParser.hxx
"
32
33
//#define _DEVDEBUG_
34
#include "
YacsTrace.hxx
"
35
36
#include <libxml/parser.h>
37
#include <libxml/tree.h>
38
#include <libxml/xmlreader.h>
39
#include <libxml/parserInternals.h>
40
YACS::ENGINE::Runtime
*
theRuntime
=0;
41
42
#define BUFFSIZE 8192
43
44
char
Buff
[
BUFFSIZE
];
45
46
extern
YACS::ENGINE::Proc
*
currentProc
;
47
extern
_xmlParserCtxt*
saxContext
;
48
namespace
YACS
49
{
50
51
YACSLoader::YACSLoader
()
52
{
53
_defaultParsersMap
.clear();
54
theRuntime =
ENGINE::getRuntime
();
55
}
56
57
void
YACSLoader::registerProcCataLoader
()
58
{
59
YACS::ENGINE::ProcCataLoader
* factory=
new
YACS::ENGINE::ProcCataLoader
(
this
);
60
theRuntime->
setCatalogLoaderFactory
(
"proc"
,factory);
61
}
62
63
ENGINE::Proc
*
YACSLoader::load
(
const
char
* file)
64
{
65
DEBTRACE
(
"YACSLoader::load: "
<< file);
66
parser::main_parser
.
init
();
67
parser::main_parser
.
_stackParser
.push(&
parser::main_parser
);
68
xmlSAXHandler baseHandler =
69
{
70
0,
// internal_subset,
71
0,
// isStandalone
72
0,
// hasInternalSubset
73
0,
// hasExternalSubset
74
0,
// resolveEntity
75
0,
// getEntity
76
0,
// entityDecl
77
0,
// notationDecl
78
0,
// attributeDecl
79
0,
// elementDecl
80
0,
// unparsedEntityDecl
81
0,
// setDocumentLocator
82
parser::start_document
,
// startDocument
83
parser::end_document
,
// endDocument
84
parser::start_element
,
// startElement
85
parser::end_element
,
// endElement
86
0,
// reference
87
parser::characters
,
// characters
88
0,
// ignorableWhitespace
89
0,
// processingInstruction
90
parser::comment
,
// comment
91
parser::warning
,
// warning
92
parser::error
,
// error
93
parser::fatal_error
,
// fatalError
94
0,
// getParameterEntity
95
parser::cdata_block
,
// cdataBlock
96
0
// externalSubset
97
};
98
99
FILE* fin=fopen(file,
"r"
);
100
if
(! fin)
101
{
102
std::cerr <<
"Couldn't open schema file"
<< std::endl;
103
throw
std::invalid_argument(
"Couldn't open schema file"
);
104
}
105
106
saxContext
= xmlCreateFileParserCtxt(file);
107
108
if
(!
saxContext
)
109
{
110
std::cerr <<
"Couldn't allocate memory for parser"
<< std::endl;
111
throw
Exception
(
"Couldn't allocate memory for parser"
);
112
}
113
saxContext
->sax = &baseHandler;
114
parser::main_parser
.
SetUserDataAndPush
(&
YACS::roottypeParser::rootParser
);
115
if
( !
_defaultParsersMap
.empty() )
116
roottypeParser::rootParser
.setDefaultMap(&
_defaultParsersMap
);
117
else
118
roottypeParser::rootParser
.
setDefaultMap
(0);
119
120
parser::main_parser
.
_file
= file;
121
currentProc = 0;
122
123
try
124
{
125
if
( xmlParseDocument(
saxContext
) == -1 )
126
{
127
if
(!currentProc)
128
throw
Exception
(
"Basic error during parsing."
);
129
YACS::ENGINE::Logger
* logger = currentProc->
getLogger
(
"parser"
);
130
logger->
fatal
(
saxContext
->lastError.message, file,
saxContext
->input->line );
131
}
132
saxContext
= 0;
133
return
currentProc
;
134
}
135
catch
(
Exception
& e)
136
{
137
if
(!currentProc)
138
throw
e;
139
YACS::ENGINE::Logger
* logger = currentProc->
getLogger
(
"parser"
);
140
logger->
fatal
(e.
what
(), file,
saxContext
->input->line);
141
saxContext
= 0;
142
return
currentProc
;
143
}
144
}
145
146
YACSLoader::~YACSLoader
()
147
{
148
}
149
150
}
src
yacsloader
parsers.cxx
Copyright © 2006-2017 CEA/DEN, EDF R&D