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 << "."
40 if (type ==
"robot") {
43 if (type ==
"devices") {
46 if (type ==
"params") {
49 if (type ==
"actions") {
59 return std::string(
"robot");
61 return std::string(
"devices");
63 return std::string(
"params");
65 return std::string(
"actions");
79 identifier =
"-//YARP//DTD yarprobotinterface 3.0//EN";
80 uri =
"http://www.yarp.it/DTD/yarprobotinterfaceV3.0.dtd";
91 std::istringstream iss(unknownNode->ValueStr());
92 std::vector<std::string> tokens;
93 std::copy(std::istream_iterator<std::string>(iss),
94 std::istream_iterator<std::string>(),
95 std::back_inserter<std::vector<std::string>>(tokens));
98 for (
auto it = tokens.begin(); it != tokens.end(); ++it) {
99 if (it->at(0) ==
'"') {
100 if (it->at(it->size() - 1) ==
'"') {
101 *it = it->substr(1, it->size() - 2);
103 std::string s = it->substr(1) +
" ";
104 for (
auto cit = it + 1; cit != tokens.end();) {
105 if (cit->at(cit->size() - 1) ==
'"') {
106 s += cit->substr(0, cit->size() - 1);
107 cit = tokens.erase(cit);
111 cit = tokens.erase(cit);
118 if (tokens.size() != 5) {
119 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown node found" << tokens.size();
122 if (tokens.at(0) !=
"!DOCTYPE") {
128 SYNTAX_WARNING(unknownNode->Row()) << R
"(Unknown document type. Supported document types are: "robot", "devices", "params")";
131 if (tokens.at(2) !=
"PUBLIC") {
132 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Expected \"PUBLIC\", found" << tokens.at(2);
140 if (end1 == std::string::npos) {
141 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Unknown url" <<
uri;
145 if (end2 == std::string::npos) {
146 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Unknown url" <<
uri;
148 std::string versionString =
uri.substr(start, end2 - start);
150 if (
dot == std::string::npos) {
151 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Unknown url" <<
uri;
153 std::string majorVersionString = versionString.substr(0,
dot);
154 std::string minorVersionString = versionString.substr(
dot + 1);
155 std::istringstream majiss(majorVersionString);
157 SYNTAX_WARNING(unknownNode->Row()) <<
"Unknown document type. Missing version in Url" <<
uri;
159 std::istringstream miniss(minorVersionString);
161 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)