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);
149 std::size_t dot = versionString.find(
'.');
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;