minetestmapper/util.cpp

56 lines
1.2 KiB
C++
Raw Permalink Normal View History

2018-03-25 14:32:11 +02:00
#include <stdexcept>
#include <sstream>
2014-07-08 14:54:27 +02:00
#include "util.h"
2022-02-09 22:46:07 +01:00
static std::string trim(const std::string &s)
2014-07-08 14:54:27 +02:00
{
auto isspace = [] (char c) -> bool { return c == ' ' || c == '\t' || c == '\r' || c == '\n'; };
2014-07-08 14:54:27 +02:00
size_t front = 0;
2022-02-09 22:46:07 +01:00
while (isspace(s[front]))
++front;
size_t back = s.size() - 1;
2022-02-09 22:46:07 +01:00
while (back > front && isspace(s[back]))
--back;
2014-07-08 14:54:27 +02:00
return s.substr(front, back - front + 1);
2014-07-08 14:54:27 +02:00
}
2018-03-25 14:32:11 +02:00
std::string read_setting(const std::string &name, std::istream &is)
2014-07-08 14:54:27 +02:00
{
char linebuf[512];
while (is.good()) {
is.getline(linebuf, sizeof(linebuf));
2022-02-09 22:46:07 +01:00
for (char *p = linebuf; *p; p++) {
if(*p != '#')
continue;
*p = '\0'; // Cut off at the first #
break;
}
std::string line(linebuf);
auto pos = line.find('=');
if (pos == std::string::npos)
continue;
auto key = trim(line.substr(0, pos));
if (key != name)
continue;
return trim(line.substr(pos+1));
}
std::ostringstream oss;
oss << "Setting '" << name << "' not found";
throw std::runtime_error(oss.str());
2014-07-08 14:54:27 +02:00
}
std::string read_setting_default(const std::string &name, std::istream &is,
const std::string &def)
{
try {
return read_setting(name, is);
} catch(const std::runtime_error &e) {
return def;
}
}