mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-11 14:01:49 +00:00
commit
777a267c7c
9 changed files with 80 additions and 20 deletions
|
|
@ -57,3 +57,7 @@ std::string parsing_error::errorLog() const {
|
||||||
ss << "^";
|
ss << "^";
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::runtime_error parsing_error::toRuntimeError() const {
|
||||||
|
return std::runtime_error("parsing error: " + errorLog());
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -73,4 +73,6 @@ public:
|
||||||
uint linestart
|
uint linestart
|
||||||
);
|
);
|
||||||
std::string errorLog() const;
|
std::string errorLog() const;
|
||||||
|
|
||||||
|
std::runtime_error toRuntimeError() const;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -385,10 +385,22 @@ public:
|
||||||
}
|
}
|
||||||
if (c == '(') {
|
if (c == '(') {
|
||||||
nextChar();
|
nextChar();
|
||||||
// TODO: replace with array parsing after moving to dv::value's
|
int depth = 1;
|
||||||
std::string value = std::string(readUntil(')'));
|
size_t start = pos;
|
||||||
|
while (hasNext()) {
|
||||||
|
char c = nextChar();
|
||||||
|
if (c == '(') {
|
||||||
|
depth++;
|
||||||
|
} else if (c == ')') {
|
||||||
|
depth--;
|
||||||
|
if (depth == 0) {
|
||||||
|
goBack(1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
expect(')');
|
expect(')');
|
||||||
return value;
|
return std::string(source.substr(start, pos - start - 1));
|
||||||
}
|
}
|
||||||
return std::string(readUntilWhitespace());
|
return std::string(readUntilWhitespace());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,16 @@ void ContentUnitLoader<DefT>::loadUnit(
|
||||||
) {
|
) {
|
||||||
auto folder = pack.folder;
|
auto folder = pack.folder;
|
||||||
auto configFile = folder / (defsDir + "/" + name + ".json");
|
auto configFile = folder / (defsDir + "/" + name + ".json");
|
||||||
if (io::exists(configFile)) loadUnit(def, full, configFile);
|
if (io::exists(configFile)) {
|
||||||
|
try {
|
||||||
|
loadUnit(def, full, configFile);
|
||||||
|
} catch (const std::runtime_error& err) {
|
||||||
|
throw std::runtime_error(
|
||||||
|
"file " + util::quote(configFile.string()) + ": " +
|
||||||
|
std::string(err.what())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContentLoader::loadBlockMaterial(
|
void ContentLoader::loadBlockMaterial(
|
||||||
|
|
|
||||||
|
|
@ -173,8 +173,12 @@ bool io::write_binary_json(
|
||||||
}
|
}
|
||||||
|
|
||||||
dv::value io::read_json(const path& filename) {
|
dv::value io::read_json(const path& filename) {
|
||||||
std::string text = io::read_string(filename);
|
auto text = io::read_string(filename);
|
||||||
return json::parse(filename.string(), text);
|
try {
|
||||||
|
return json::parse(filename.string(), text);
|
||||||
|
} catch (const parsing_error& err) {
|
||||||
|
throw err.toRuntimeError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dv::value io::read_binary_json(const path& file) {
|
dv::value io::read_binary_json(const path& file) {
|
||||||
|
|
@ -184,7 +188,12 @@ dv::value io::read_binary_json(const path& file) {
|
||||||
}
|
}
|
||||||
|
|
||||||
dv::value io::read_toml(const path& file) {
|
dv::value io::read_toml(const path& file) {
|
||||||
return toml::parse(file.string(), io::read_string(file));
|
auto text = io::read_string(file);
|
||||||
|
try {
|
||||||
|
return toml::parse(file.string(), text);
|
||||||
|
} catch (const parsing_error& err) {
|
||||||
|
throw err.toRuntimeError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> io::read_list(const io::path& filename) {
|
std::vector<std::string> io::read_list(const io::path& filename) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#include "coders/json.hpp"
|
#include "coders/json.hpp"
|
||||||
|
#include "coders/commons.hpp"
|
||||||
#include "api_lua.hpp"
|
#include "api_lua.hpp"
|
||||||
|
|
||||||
static int l_json_stringify(lua::State* L) {
|
static int l_json_stringify(lua::State* L) {
|
||||||
|
|
@ -12,8 +13,12 @@ static int l_json_stringify(lua::State* L) {
|
||||||
|
|
||||||
static int l_json_parse(lua::State* L) {
|
static int l_json_parse(lua::State* L) {
|
||||||
auto string = lua::require_string(L, 1);
|
auto string = lua::require_string(L, 1);
|
||||||
auto element = json::parse("[string]", string);
|
try {
|
||||||
return lua::pushvalue(L, element);
|
auto element = json::parse("[string]", string);
|
||||||
|
return lua::pushvalue(L, element);
|
||||||
|
} catch (const parsing_error& err) {
|
||||||
|
throw err.toRuntimeError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const luaL_Reg jsonlib[] = {
|
const luaL_Reg jsonlib[] = {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#include "coders/toml.hpp"
|
#include "coders/toml.hpp"
|
||||||
|
#include "coders/commons.hpp"
|
||||||
#include "api_lua.hpp"
|
#include "api_lua.hpp"
|
||||||
|
|
||||||
using namespace scripting;
|
using namespace scripting;
|
||||||
|
|
@ -16,8 +17,12 @@ static int l_toml_stringify(lua::State* L) {
|
||||||
|
|
||||||
static int l_toml_parse(lua::State* L) {
|
static int l_toml_parse(lua::State* L) {
|
||||||
auto string = lua::require_string(L, 1);
|
auto string = lua::require_string(L, 1);
|
||||||
auto element = toml::parse("[string]", string);
|
try {
|
||||||
return lua::pushvalue(L, element);
|
auto element = toml::parse("[string]", string);
|
||||||
|
return lua::pushvalue(L, element);
|
||||||
|
} catch (const parsing_error& err) {
|
||||||
|
throw err.toRuntimeError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const luaL_Reg tomllib[] = {
|
const luaL_Reg tomllib[] = {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
#include "coders/xml.hpp"
|
#include "coders/xml.hpp"
|
||||||
|
#include "coders/commons.hpp"
|
||||||
#include "api_lua.hpp"
|
#include "api_lua.hpp"
|
||||||
|
|
||||||
static const char* TAG_ATTR = "#";
|
static const char* TAG_ATTR = "#";
|
||||||
static const char* DEFAULT_ROOT_TAG = "root";
|
|
||||||
|
|
||||||
static int push_xml(lua::State* L, const xml::xmlelement& elem) {
|
static int push_xml(lua::State* L, const xml::xmlelement& elem) {
|
||||||
if (elem.isText()) {
|
if (elem.isText()) {
|
||||||
|
|
@ -73,17 +73,26 @@ static int l_tostring(lua::State* L) {
|
||||||
|
|
||||||
static int l_parse(lua::State* L) {
|
static int l_parse(lua::State* L) {
|
||||||
auto string = lua::require_string(L, 1);
|
auto string = lua::require_string(L, 1);
|
||||||
auto document = xml::parse("[string]", string);
|
try {
|
||||||
return push_xml(L, *document->getRoot());
|
auto document = xml::parse("[string]", string);
|
||||||
|
return push_xml(L, *document->getRoot());
|
||||||
|
} catch (const parsing_error& err) {
|
||||||
|
throw err.toRuntimeError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int l_parse_vcd(lua::State* L) {
|
static int l_parse_vcd(lua::State* L) {
|
||||||
auto string = lua::require_string(L, 1);
|
auto string = lua::require_string(L, 1);
|
||||||
auto rootTag = lua::tostring(L, 2);
|
auto rootTag = lua::tostring(L, 2);
|
||||||
auto document = xml::parse_vcm(
|
|
||||||
"[string]", string, rootTag ? rootTag : ""
|
std::unique_ptr<xml::Document> document;
|
||||||
);
|
try {
|
||||||
|
document = xml::parse_vcm(
|
||||||
|
"[string]", string, rootTag ? rootTag : ""
|
||||||
|
);
|
||||||
|
} catch (const parsing_error& err) {
|
||||||
|
throw err.toRuntimeError();
|
||||||
|
}
|
||||||
const auto& root = *document->getRoot();
|
const auto& root = *document->getRoot();
|
||||||
if (rootTag != nullptr) {
|
if (rootTag != nullptr) {
|
||||||
return push_xml(L, root);
|
return push_xml(L, root);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#include "coders/yaml.hpp"
|
#include "coders/yaml.hpp"
|
||||||
|
#include "coders/commons.hpp"
|
||||||
#include "api_lua.hpp"
|
#include "api_lua.hpp"
|
||||||
|
|
||||||
static int l_stringify(lua::State* L) {
|
static int l_stringify(lua::State* L) {
|
||||||
|
|
@ -9,8 +10,12 @@ static int l_stringify(lua::State* L) {
|
||||||
|
|
||||||
static int l_parse(lua::State* L) {
|
static int l_parse(lua::State* L) {
|
||||||
auto string = lua::require_string(L, 1);
|
auto string = lua::require_string(L, 1);
|
||||||
auto element = yaml::parse("[string]", string);
|
try {
|
||||||
return lua::pushvalue(L, element);
|
auto element = yaml::parse("[string]", string);
|
||||||
|
return lua::pushvalue(L, element);
|
||||||
|
} catch (const parsing_error& err) {
|
||||||
|
throw err.toRuntimeError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const luaL_Reg yamllib[] = {
|
const luaL_Reg yamllib[] = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue