RobotInterface::ParamList RobotInterface::XMLReader::Private::readParams(TiXmlElement* paramsElem) { const std::string &valueStr = paramsElem->ValueStr(); if (valueStr.compare("param") != 0 && valueStr.compare("group") != 0 && valueStr.compare("paramlist") != 0 && valueStr.compare("subdevice") != 0 && valueStr.compare("params") != 0) { SYNTAX_ERROR(paramsElem->Row()) << "Expected \"param\", \"group\", \"paramlist\"," << "\"subdevice\", or \"params\". Found" << valueStr; } if (valueStr.compare("param") == 0) { ParamList params; params.push_back(readParamTag(paramsElem)); return params; } else if (valueStr.compare("group") == 0) { ParamList params; params.push_back(readGroupTag(paramsElem)); return params; } else if (valueStr.compare("paramlist") == 0) { return readParamListTag(paramsElem); } else if (valueStr.compare("subdevice") == 0) { return readSubDeviceTag(paramsElem); } // "params" return readParamsTag(paramsElem); }
RobotInterface::ParamList RobotInterface::XMLReader::Private::readParamListTag(TiXmlElement* paramListElem) { if (paramListElem->ValueStr().compare("paramlist") != 0) { SYNTAX_ERROR(paramListElem->Row()) << "Expected \"paramlist\". Found" << paramListElem->ValueStr(); } ParamList params; Param mainparam; if (paramListElem->QueryStringAttribute("name", &mainparam.name()) != TIXML_SUCCESS) { SYNTAX_ERROR(paramListElem->Row()) << "\"paramlist\" element should contain the \"name\" attribute"; } params.push_back(mainparam); // yDebug() << "Found paramlist [" << params.at(0).name() << "]"; for (TiXmlElement* childElem = paramListElem->FirstChildElement(); childElem != 0; childElem = childElem->NextSiblingElement()) { if (childElem->ValueStr().compare("elem") != 0) { SYNTAX_ERROR(childElem->Row()) << "Expected \"elem\". Found" << childElem->ValueStr(); } Param childParam; if (childElem->QueryStringAttribute("name", &childParam.name()) != TIXML_SUCCESS) { SYNTAX_ERROR(childElem->Row()) << "\"elem\" element should contain the \"name\" attribute"; } const char *valueText = childElem->GetText(); if (!valueText) { SYNTAX_ERROR(childElem->Row()) << "\"elem\" element should have a value [ \"name\" = " << childParam.name() << "]"; } childParam.value() = valueText; params.push_back(childParam); } if (params.empty()) { SYNTAX_ERROR(paramListElem->Row()) << "\"paramlist\" cannot be empty"; } // +1 skips the first element, that is the main param for (ParamList::iterator it = params.begin() + 1; it != params.end(); ++it) { Param ¶m = *it; params.at(0).value() += (params.at(0).value().empty() ? "(" : " ") + param.name(); } params.at(0).value() += ")"; // yDebug() << params; return params; }
Parser::ParamList Parser::parameters(istream* input) { ParamList list; for(;;) { get_token(input); if(curr_sym.curr_tok == Lexer::NAME) { list.push_back(curr_sym.string_value); } else if (curr_sym.curr_tok == Lexer::SEP) { continue; } else if (curr_sym.curr_tok == Lexer::RP) { return list; } else if (curr_sym.curr_tok == Lexer::PRINT || curr_sym.curr_tok == Lexer::END) { throw Error::SyntaxError(") expected"); return list; } } }
RobotInterface::ParamList RobotInterface::XMLReader::Private::readParamsTag(TiXmlElement *paramsElem) { const std::string &valueStr = paramsElem->ValueStr(); if (valueStr.compare("params") != 0) { SYNTAX_ERROR(paramsElem->Row()) << "Expected \"params\". Found" << valueStr; } std::string filename; if (paramsElem->QueryStringAttribute("file", &filename) == TIXML_SUCCESS) { // yDebug() << "Found params file [" << filename << "]"; #ifdef WIN32 std::replace(filename.begin(), filename.end(), '/', '\\'); filename = path + "\\" + filename; #else // WIN32 filename = path + "/" + filename; #endif //WIN32 return readParamsFile(filename); } std::string robotName; if (paramsElem->QueryStringAttribute("robot", &robotName) != TIXML_SUCCESS) { SYNTAX_WARNING(paramsElem->Row()) << "\"params\" element should contain the \"robot\" attribute"; } if (robotName != robot.name()) { SYNTAX_WARNING(paramsElem->Row()) << "Trying to import a file for the wrong robot. Found" << robotName << "instead of" << robot.name(); } unsigned int build; #if TINYXML_UNSIGNED_INT_BUG if (paramsElem->QueryUnsignedAttribute("build", &build()) != TIXML_SUCCESS) { // No build attribute. Assuming build="0" SYNTAX_WARNING(paramsElem->Row()) << "\"params\" element should contain the \"build\" attribute [unsigned int]. Assuming 0"; } #else int tmp; if (paramsElem->QueryIntAttribute("build", &tmp) != TIXML_SUCCESS || tmp < 0) { // No build attribute. Assuming build="0" SYNTAX_WARNING(paramsElem->Row()) << "\"params\" element should contain the \"build\" attribute [unsigned int]. Assuming 0"; tmp = 0; } build = (unsigned)tmp; #endif if (build != robot.build()) { SYNTAX_WARNING(paramsElem->Row()) << "Import a file for a different robot build. Found" << build << "instead of" << robot.build(); } ParamList params; for (TiXmlElement* childElem = paramsElem->FirstChildElement(); childElem != 0; childElem = childElem->NextSiblingElement()) { ParamList childParams = readParams(childElem); for (ParamList::const_iterator it = childParams.begin(); it != childParams.end(); ++it) { params.push_back(*it); } } return params; }
RobotInterface::ParamList RobotInterface::XMLReader::Private::readSubDeviceTag(TiXmlElement *subDeviceElem) { if (subDeviceElem->ValueStr().compare("subdevice") != 0) { SYNTAX_ERROR(subDeviceElem->Row()) << "Expected \"subdevice\". Found" << subDeviceElem->ValueStr(); } ParamList params; //FIXME Param featIdParam; Param subDeviceParam; //FIXME featIdParam.name() = "FeatId"; subDeviceParam.name() = "subdevice"; //FIXME if (subDeviceElem->QueryStringAttribute("name", &featIdParam.value()) != TIXML_SUCCESS) { // SYNTAX_ERROR(subDeviceElem->Row()) << "\"subdevice\" element should contain the \"name\" attribute"; // } if (subDeviceElem->QueryStringAttribute("type", &subDeviceParam.value()) != TIXML_SUCCESS) { SYNTAX_ERROR(subDeviceElem->Row()) << "\"subdevice\" element should contain the \"type\" attribute"; } //FIXME params.push_back(featIdParam); params.push_back(subDeviceParam); // yDebug() << "Found subdevice [" << params.at(0).value() << "]"; for (TiXmlElement* childElem = subDeviceElem->FirstChildElement(); childElem != 0; childElem = childElem->NextSiblingElement()) { ParamList childParams = readParams(childElem); for (ParamList::const_iterator it = childParams.begin(); it != childParams.end(); ++it) { params.push_back(Param(it->name(), it->value())); } } // yDebug() << params; return params; }
ParamList defineParams(istream* input) { ParamList list; Token tok; while((tok = get_token(input, true, true)).token != TOK_NEWLINE && tok.token != TOK_END) { if(tok.token == TOK_ID) { cout << tok.value; list.push_back(tok.value); tok = get_token(input, true, true); if (tok.token == TOK_SEP) continue; else if (tok.token == TOK_RPAREN) break; cerr << "Unexpected token in macro arguments" << endl; } } return list; }
ParamList Calculator::parameters(Lexer& lexer) { ParamList list; for(;;) { Token tok = lexer.pop(); switch(tok.Type) { case Token::NAME: list.push_back(tok.StringValue); break; case Token::SEP: continue; case Token::RP: return list; default: throw Error::SyntaxError("')' expected"); } } }
RobotInterface::Param RobotInterface::XMLReader::Private::readGroupTag(TiXmlElement* groupElem) { if (groupElem->ValueStr().compare("group") != 0) { SYNTAX_ERROR(groupElem->Row()) << "Expected \"group\". Found" << groupElem->ValueStr(); } Param group(true); if (groupElem->QueryStringAttribute("name", &group.name()) != TIXML_SUCCESS) { SYNTAX_ERROR(groupElem->Row()) << "\"group\" element should contain the \"name\" attribute"; } // yDebug() << "Found group [" << group.name() << "]"; ParamList params; for (TiXmlElement* childElem = groupElem->FirstChildElement(); childElem != 0; childElem = childElem->NextSiblingElement()) { ParamList childParams = readParams(childElem); for (ParamList::const_iterator it = childParams.begin(); it != childParams.end(); ++it) { params.push_back(*it); } } if (params.empty()) { SYNTAX_ERROR(groupElem->Row()) << "\"group\" cannot be empty"; } std::string groupString; for (ParamList::iterator it = params.begin(); it != params.end(); ++it) { if (!groupString.empty()) { groupString += " "; } groupString += "(" + it->name() + " " + it->value() + ")"; } group.value() = groupString; return group; }
ParamList DeEncryptProcessor::paramList() { ParamList ret; ret.push_back(string_); return ret; }