29 #define SYNTAX_ERROR(line) yFatal() << "Syntax error while loading" << curr_filename << "at line" << line << "."
30 #define SYNTAX_WARNING(line) yWarning() << "Invalid syntax while loading" << curr_filename << "at line" << line << "."
33 namespace robotinterface {
44 if (type ==
"robot") {
46 }
else if (type ==
"devices") {
48 }
else if (type ==
"params") {
50 }
else if (type ==
"actions") {
60 return std::string(
"robot");
62 return std::string(
"devices");
64 return std::string(
"params");
66 return std::string(
"actions");
80 identifier =
"-//YARP//DTD yarprobotinterface 3.0//EN";
81 uri =
"http://www.yarp.it/DTD/yarprobotinterfaceV3.0.dtd";
92 std::istringstream iss(unknownNode->ValueStr());
93 std::vector<std::string> tokens;
94 std::copy(std::istream_iterator<std::string>(iss),
95 std::istream_iterator<std::string>(),
96 std::back_inserter<std::vector<std::string>>(tokens));
99 for (
auto it = tokens.begin(); it != tokens.end(); ++it) {
100 if (it->at(0) ==
'"') {
101 if (it->at(it->size() - 1) ==
'"') {
102 *it = it->substr(1, it->size() - 2);
104 std::string s = it->substr(1) +
" ";
105 for (
auto cit = it + 1; cit != tokens.end();) {
106 if (cit->at(cit->size() - 1) ==
'"') {
107 s += cit->substr(0, cit->size() - 1);
108 cit = tokens.erase(cit);
112 cit = tokens.erase(cit);
120 if (tokens.size() != 5) {
121 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown node found" << tokens.size();
124 if (tokens.at(0) !=
"!DOCTYPE") {
130 SYNTAX_WARNING(unknownNode->Row()) << R
"(Unknown document type. Supported document types are: "robot", "devices", "params")";
133 if (tokens.at(2) !=
"PUBLIC") {
134 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Expected \"PUBLIC\", found" << tokens.at(2);
142 if (end1 == std::string::npos) {
143 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Unknown url" <<
uri;
147 if (end2 == std::string::npos) {
148 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Unknown url" <<
uri;
150 std::string versionString =
uri.substr(start, end2 - start);
151 std::size_t
dot = versionString.find(
'.');
152 if (
dot == std::string::npos) {
153 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Unknown url" <<
uri;
155 std::string majorVersionString = versionString.substr(0,
dot);
156 std::string minorVersionString = versionString.substr(
dot + 1);
157 std::istringstream majiss(majorVersionString);
159 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Missing version in Url" <<
uri;
161 std::istringstream miniss(minorVersionString);
163 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Missing version in Url" <<
uri;
#define SYNTAX_WARNING(line)
unsigned int majorVersion
bool parse(TiXmlUnknown *unknownNode, const std::string &curr_filename)
static const std::string ext
unsigned int minorVersion
static const std::string baseUri
double dot(const yarp::sig::Vector &a, const yarp::sig::Vector &b)
Scalar product between vectors (defined in Math.h).
std::string DocTypeToString(RobotInterfaceDTD::DocType doctype)
RobotInterfaceDTD::DocType StringToDocType(const std::string &type)
The main, catch-all namespace for YARP.