X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConfig%2FConfig_XMLReader.cpp;h=002c9df493ab611ef9d22774d6147ce70e2800e3;hb=29b4b1b5e692ebc45e8a27703b9307b075d2cff2;hp=adce851dc03fb2da012c3e1473c44ef7d80eb65e;hpb=733ef3a952e2cd2d5df92667569eb9096200da27;p=modules%2Fshaper.git diff --git a/src/Config/Config_XMLReader.cpp b/src/Config/Config_XMLReader.cpp index adce851dc..002c9df49 100644 --- a/src/Config/Config_XMLReader.cpp +++ b/src/Config/Config_XMLReader.cpp @@ -7,53 +7,48 @@ #include -#include -#include -#include +#include +#include +#include +/* #ifdef WIN32 //For GetModuleFileNameW #include #endif +*/ #ifdef _DEBUG #include #endif - Config_XMLReader::Config_XMLReader(const std::string& theXmlFileName) + : myXmlDoc(NULL) { - std::string prefix; - //Get path to *.xml files (typically ./bin/../plugins/) -#ifdef WIN32 - HMODULE hModule = GetModuleHandleW(NULL); - WCHAR wchar_path[MAX_PATH]; - GetModuleFileNameW(hModule, wchar_path, MAX_PATH); - char char_path[MAX_PATH]; - char DefChar = ' '; - WideCharToMultiByte(CP_ACP, 0, wchar_path, -1, char_path, MAX_PATH, &DefChar, NULL); - prefix = std::string(char_path); - //chop "bin\XGUI.exe" - unsigned found = prefix.rfind("bin"); - if(found != std::string::npos) - prefix.replace(found, prefix.length(), "plugins\\"); -#else - //TODO(sbh): Find full path to binary on linux - prefix = "../plugins/"; -#endif + std::string prefix = ""; + /* + * Get path to *.xml files (typically ./bin/../plugins/) + + * the problem: application may be launched using python executable, + * to use environment variable (at least for the current moment) + */ + char* anEnv = getenv("NEW_GEOM_CONFIG_FILE"); + if (anEnv) { + prefix = std::string(anEnv) + "/"; + } - m_DocumentPath = prefix + theXmlFileName; + myDocumentPath = prefix + theXmlFileName; } - Config_XMLReader::~Config_XMLReader() { + xmlFreeDoc(myXmlDoc); } /* - * Read all nodes (recursively if processChildren() is true - * for a node). For each read node the processNode will be - * called. + * Read all nodes in associated xml file, + * recursively if processChildren(xmlNode) is true for the xmlNode. + * For each read node the processNode will be called. */ void Config_XMLReader::readAll() { @@ -68,39 +63,42 @@ void Config_XMLReader::readAll() */ void Config_XMLReader::processNode(xmlNodePtr aNode) { - #ifdef _DEBUG - std::cout << "Config_XMLReader::processNode: " - << aNode->name << " content: " - << aNode->content << std::endl; - #endif +#ifdef _DEBUG + std::cout << "Config_XMLReader::processNode: " + << aNode->name << " content: " + << aNode->content << std::endl; +#endif } /* * Defines which nodes should be processed recursively. Virtual. - * The default implementation to read all nodes. + * The default implementation is to read all nodes. */ bool Config_XMLReader::processChildren(xmlNodePtr aNode) { return true; } +/* + * + */ xmlNodePtr Config_XMLReader::findRoot() { - xmlDocPtr aDoc; - aDoc = xmlParseFile(m_DocumentPath.c_str()); - if(aDoc == NULL) { - #ifdef _DEBUG - std::cout << "Config_XMLReader::import: " << "Document " << m_DocumentPath - << " is not parsed successfully." << std::endl; - #endif + myXmlDoc = xmlParseFile(myDocumentPath.c_str()); + if (myXmlDoc == NULL) { +#ifdef _DEBUG + std::cout << "Config_XMLReader::import: " << "Document " << myDocumentPath + << " is not parsed successfully." << std::endl; +#endif return NULL; } - xmlNodePtr aRoot = xmlDocGetRootElement(aDoc); - #ifdef _DEBUG + + xmlNodePtr aRoot = xmlDocGetRootElement(myXmlDoc); +#ifdef _DEBUG if(aRoot == NULL) { std::cout << "Config_XMLReader::import: " << "Error: empty document"; } - #endif +#endif return aRoot; } @@ -111,12 +109,12 @@ xmlNodePtr Config_XMLReader::findRoot() */ void Config_XMLReader::readRecursively(xmlNodePtr theParent) { - if(!theParent) + if (!theParent) return; xmlNodePtr aNode = theParent->xmlChildrenNode; for(; aNode; aNode = aNode->next) { processNode(aNode); - if(processChildren(aNode)) { + if (processChildren(aNode)) { readRecursively(aNode); } } @@ -137,18 +135,9 @@ std::string Config_XMLReader::getProperty(xmlNodePtr theNode, const char* name) { std::string result = ""; char* aPropChars = (char*) xmlGetProp(theNode, BAD_CAST name); - if(!aPropChars || aPropChars[0] == 0) + if (!aPropChars || aPropChars[0] == 0) return result; result = std::string(aPropChars); return result; } -/* - * Returns true if theNode is XML node with a given name. - */ -bool Config_XMLReader::isNode(xmlNodePtr theNode, const char* theNodeName) -{ - const char* emptyLine = ""; - return theNode->type == XML_ELEMENT_NODE - && !xmlStrcmp(theNode->name, (const xmlChar *) theNodeName); -}