toml format is now used for settings file

This commit is contained in:
MihailRis
2023-11-14 15:51:26 +03:00
parent 3723cf491f
commit 69b309dc60
5 changed files with 63 additions and 353 deletions
+8 -45
View File
@@ -7,33 +7,16 @@
#include <stdexcept>
#include <unordered_map>
#include "commons.h"
typedef unsigned int uint;
namespace json {
typedef double number_t;
class JObject;
class JArray;
class Value;
extern std::string escape(std::string s);
extern std::string stringify(JObject* obj, bool nice, std::string indent);
class parsing_error : public std::runtime_error {
public:
std::string filename;
std::string source;
uint pos;
uint line;
uint linestart;
parsing_error(std::string message,
std::string filename,
std::string source,
uint pos,
uint line,
uint linestart);
std::string errorLog() const;
};
enum class valtype {
object, array, number, string, boolean
@@ -43,7 +26,7 @@ namespace json {
JObject* obj;
JArray* arr;
std::string* str;
number_t num;
double num;
bool boolean;
};
@@ -61,7 +44,7 @@ namespace json {
~JArray();
std::string str(size_t index) const;
number_t num(size_t index) const;
double num(size_t index) const;
JObject* obj(size_t index) const;
JArray* arr(size_t index) const;
bool flag(size_t index) const;
@@ -73,7 +56,7 @@ namespace json {
JArray& put(uint value);
JArray& put(int value);
JArray& put(float value);
JArray& put(number_t value);
JArray& put(double value);
JArray& put(std::string value);
JArray& put(JObject* value);
JArray& put(JArray* value);
@@ -89,7 +72,7 @@ namespace json {
void num(std::string key, int& dst) const;
void num(std::string key, float& dst) const;
void num(std::string key, uint& dst) const;
void num(std::string key, number_t& dst) const;
void num(std::string key, double& dst) const;
JObject* obj(std::string key) const;
JArray* arr(std::string key) const;
void flag(std::string key, bool& dst) const;
@@ -97,37 +80,17 @@ namespace json {
JObject& put(std::string key, uint value);
JObject& put(std::string key, int value);
JObject& put(std::string key, float value);
JObject& put(std::string key, number_t value);
JObject& put(std::string key, double value);
JObject& put(std::string key, std::string value);
JObject& put(std::string key, JObject* value);
JObject& put(std::string key, JArray* value);
JObject& put(std::string key, bool value);
};
class Parser {
std::string filename;
std::string source;
uint pos = 0;
uint line = 0;
uint linestart = 0;
void skipWhitespace();
void expect(char expected);
char peek();
char nextChar();
bool hasNext();
std::string parseName();
int64_t parseSimpleInt(int base);
number_t parseNumber(int sign);
std::string parseString(char chr);
class Parser : public BasicParser {
JArray* parseArray();
JObject* parseObject();
Value* parseValue();
parsing_error error(std::string message);
public:
Parser(std::string filename, std::string source);