Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2011-07-10 19:29:57 +0000
committerStijn Buys <ingar@osirion.org>2011-07-10 19:29:57 +0000
commitaf5404ea593d460d3ae843a23b295e3cfeade5bc (patch)
tree71b52f1700c82e970e6b49d786612825cc714887 /src/filesystem/inifile.cc
parent5b9baa97e65314454005edb1231e18cf0f5bfb43 (diff)
Split the ini file reader into a stream decoder and a file wrapper.
Diffstat (limited to 'src/filesystem/inifile.cc')
-rw-r--r--src/filesystem/inifile.cc232
1 files changed, 2 insertions, 230 deletions
diff --git a/src/filesystem/inifile.cc b/src/filesystem/inifile.cc
index 5f87591..b0cab02 100644
--- a/src/filesystem/inifile.cc
+++ b/src/filesystem/inifile.cc
@@ -46,12 +46,7 @@ bool IniFile::open(const char *ininame)
if (inifile_stream.is_open())
return false;
- last_read_was_section = false;
- last_read_was_key = false;
- key_current = "";
- value_current = "";
- section_current = "";
- line_number = 0;
+ clear();
std::string inifile_name(ininame);
inifile_name.append(".ini");
@@ -65,232 +60,9 @@ bool IniFile::open(const char *ininame)
}
-bool IniFile::got_section() const
-{
- return last_read_was_section;
-}
-
-bool IniFile::got_section(const char * sectionlabel) const
-{
- return (last_read_was_section && (section_current.compare(sectionlabel) == 0));
-}
-
-bool IniFile::in_section(const char * sectionlabel) const
-{
- return ((section_current.compare(sectionlabel) == 0));
-}
-
bool IniFile::getline()
{
- char line[1024];
-
- last_read_was_section = false;
- last_read_was_key = false;
- key_current = "";
- value_current = "";
-
- if (!inifile_stream.is_open())
- return false;
-
- if (inifile_stream.getline(line, 1023)) {
- std::string s(line);
- aux::trim(s);
- line_number++;
-
- if (s.size() == 0) {
- // empty line
- } else
- // strip trailing EOL / FF characters
- if ( (s[s.size() -1] == 0x0a) || (s[s.size() -1] == 0x0d))
- s.erase(s.size() -1);
-
- // comment
- if (s[0] == '#' || s[0] == ';') {
- // condebug << "IniFile got comment " << s << std::endl;
- } else
- // section header
- if (s.size() > 2 && s[0] == '[' && s[s.size()-1] == ']') {
- // condebug << "Inifile got section header " << s << std::endl;
- section_current = s.substr(1, s.size() - 2);
-
- aux::trim(section_current);
- aux::to_lowercase(section_current);
-
- last_read_was_section = true;
- return true;
- } else {
- // key=value pair
- size_t found = s.find('=');
- if (found != std::string::npos && found > 0) {
- // make lowercase and strip spaces
- key_current = s.substr(0, found);
-
- aux::trim(key_current);
- aux::to_lowercase(key_current);
-
- if (key_current.size()) {
- value_current = s.substr(found + 1, s.size() - found - 1);
- aux::trim(value_current);
- last_read_was_key = true;
- //con_debug << "IniFile got " << key_current << "=" << value_current << std::endl;
- return true;
- }
-
- }
- }
- return true;
- } else
- return false;
-}
-
-bool IniFile::got_key() const
-{
- return last_read_was_key;
-}
-
-bool IniFile::got_key_string(const char * keylabel, std::string & valuestring)
-{
- if (last_read_was_key && (key_current.compare(keylabel) == 0)) {
- valuestring.assign(value_current);
- return true;
- } else {
- return false;
- }
-}
-
-bool IniFile::got_key_label(const char * keylabel, std::string & labelstring)
-{
- if (last_read_was_key && (key_current.compare(keylabel) == 0)) {
- labelstring.assign(value_current);
- aux::to_label(labelstring);
- return true;
- } else {
- return false;
- }
-}
-
-bool IniFile::got_key_vector3f(const char * keylabel, math::Vector3f & v)
-{
- if (last_read_was_key && (key_current.compare(keylabel) == 0)) {
- std::istringstream is(value_current);
- float x, y, z;
- if ((is >> x) && (is >> y) && (is >> z)) {
- v = math::Vector3f(x, y, z);
- } else {
- v = math::Vector3f();
- }
- return true;
- } else {
- return false;
- }
-}
-
-bool IniFile::got_key_float(const char * keylabel, float & f)
-{
- if (last_read_was_key && (key_current.compare(keylabel) == 0)) {
- std::istringstream is(value_current);
- if (!(is >> f)) {
- f = 0;
- }
- return true;
- } else {
- return false;
- }
-}
-
-bool IniFile::got_key_long(const char * keylabel, long & l)
-{
- if (last_read_was_key && (key_current.compare(keylabel) == 0)) {
- std::istringstream is(value_current);
- if (!(is >> l)) {
- l = 0;
- }
- return true;
- } else {
- return false;
- }
-}
-
-bool IniFile::got_key(const char * keylabel)
-{
- return (last_read_was_key && (key_current.compare(keylabel) == 0));
-}
-
-bool IniFile::got_key_angle(const char * keylabel, float & f)
-{
- if (last_read_was_key && (key_current.compare(keylabel) == 0)) {
- std::istringstream is(value_current);
- if ((is >> f)) {
- f = math::degrees360f(f);
- } else {
- f = 0;
- }
- return true;
- } else {
- return false;
- }
-}
-
-bool IniFile::got_key_color(const char * keylabel, math::Color & color)
-{
- if (last_read_was_key && (key_current.compare(keylabel) == 0)) {
- std::istringstream is(value_current);
- float r, g, b, a;
- if ((is >> r) && (is >> g) && (is >> b)) {
- if ((r > 1.0f) || (g > 1.0f) || (b > 1.0f)) {
- if (is >> a) {
- a /= 255.0f;
- }
- r /= 255.0f;
- g /= 255.0f;
- b /= 255.0f;
- } else {
- if (!(is >> a)) {
- a = 1.0f;
- }
- }
- color = math::Color(r, g, b, a);
- } else {
- color = math::Color();
- }
- return true;
- } else {
- return false;
- }
-}
-
-bool IniFile::got_key_bool(const char * keylabel, bool & b)
-{
- if (last_read_was_key && (key_current.compare(keylabel) == 0)) {
- std::istringstream is(value_current);
-
- unsigned int i;
- if (is >> i) {
- if (i) b = true;
- else b = false;
- return true;
- }
-
- std::string val(value_current);
- aux::trim(val);
- aux::lowercase(val);
-
- if (val.compare("yes") == 0) {
- b = true;
- return true;
- } else if (val.compare("true") == 0) {
- b = true;
- return true;
- } else if (val.compare("no") == 0) {
- b = false;
- return true;
- } else if (val.compare("false") == 0) {
- b = false;
- return true;
- }
- }
-
- return false;
+ return IniStream::getline(inifile_stream);
}
void IniFile::unknown_value() const