diff --git a/src/ParseSection.cpp b/src/ParseSection.cpp new file mode 100644 index 0000000000..5740698491 --- /dev/null +++ b/src/ParseSection.cpp @@ -0,0 +1,70 @@ +#include "ParseSection.h" + +#include +#include +#include + +#define SECTION_DEFAULT_NAME "" + +section ParseSection(const std::string strInput, const bool bTrim) +{ + std::string strData(strInput); + std::vector vLines; + section secResult; + + // Convert DOS format to unix. + boost::algorithm::replace_all(strData, "\r\n", "\n"); + + // Convert MacOS format to unix. + boost::algorithm::replace_all(strData, "\r", "\n"); + + boost::algorithm::split(vLines, strData, boost::algorithm::is_any_of("\n")); + + // Set the default section name. + std::string strSection = SECTION_DEFAULT_NAME; + + // Initialize the default section. + secResult[strSection] = section::mapped_type(); + + // Parse each line. + BOOST_FOREACH(std::string& strValue, vLines) + { + if (strValue.empty() || strValue[0] == '#') + { + // Blank line or comment, do nothing. + } + else if (strValue[0] == '[' && strValue[strValue.length()-1] == ']') { + // New section. + + strSection = strValue.substr(1, strValue.length()-2); + secResult[strSection] = section::mapped_type(); + } + else + { + // Another line in a section. + if (bTrim) + { + boost::algorithm::trim_right_if(strValue, boost::algorithm::is_space()); + boost::algorithm::trim_left_if(strValue, boost::algorithm::is_space()); + } + + secResult[strSection].push_back(strValue); + } + } + + return secResult; +} + +void PrintSection(section secInput) +{ + std::cerr << "PrintSection>" << std::endl; + BOOST_FOREACH(section::value_type& pairSection, secInput) + { + std::cerr << "[" << pairSection.first << "]" << std::endl; + BOOST_FOREACH(std::string& value, pairSection.second) + { + std::cerr << value << std::endl; + } + } + std::cerr << "PrintSection<" << std::endl; +} diff --git a/src/ParseSection.h b/src/ParseSection.h new file mode 100644 index 0000000000..754301983b --- /dev/null +++ b/src/ParseSection.h @@ -0,0 +1,13 @@ +#ifndef _PARSE_SECTION_ +#define _PARSE_SECTION_ + +#include +#include +#include + +typedef std::map > section; + +section ParseSection(const std::string strInput, const bool bTrim); +void PrintSection(section secInput); + +#endif