26 #define SYNTAX_ERROR(line) yFatal() << "Syntax error while loading" << curr_filename << "at line" << line << "."
27 #define SYNTAX_WARNING(line) yWarning() << "Invalid syntax while loading" << curr_filename << "at line" << line << "."
30 namespace robotinterface {
41 if (type ==
"robot") {
44 if (type ==
"devices") {
47 if (type ==
"params") {
50 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);
119 if (tokens.size() != 5) {
120 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown node found" << tokens.size();
123 if (tokens.at(0) !=
"!DOCTYPE") {
129 SYNTAX_WARNING(unknownNode->Row()) << R
"(Unknown document type. Supported document types are: "robot", "devices", "params")";
132 if (tokens.at(2) !=
"PUBLIC") {
133 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Expected \"PUBLIC\", found" << tokens.at(2);
141 if (end1 == std::string::npos) {
142 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Unknown url" <<
uri;
146 if (end2 == std::string::npos) {
147 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Unknown url" <<
uri;
149 std::string versionString =
uri.substr(start, end2 - start);
151 if (
dot == std::string::npos) {
152 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Unknown url" <<
uri;
154 std::string majorVersionString = versionString.substr(0,
dot);
155 std::string minorVersionString = versionString.substr(
dot + 1);
156 std::istringstream majiss(majorVersionString);
158 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Missing version in Url" <<
uri;
160 std::istringstream miniss(minorVersionString);
162 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.