From 02f4d3e4200292d484f81f2563d48d7a1ccdf4bb Mon Sep 17 00:00:00 2001 From: garak Date: Tue, 30 Jul 2019 16:20:20 -0400 Subject: add jsonproc tool --- tools/jsonproc/jsonproc.cpp | 119 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100755 tools/jsonproc/jsonproc.cpp (limited to 'tools/jsonproc/jsonproc.cpp') diff --git a/tools/jsonproc/jsonproc.cpp b/tools/jsonproc/jsonproc.cpp new file mode 100755 index 000000000..15eae9dcb --- /dev/null +++ b/tools/jsonproc/jsonproc.cpp @@ -0,0 +1,119 @@ +// jsonproc.cpp + +#include "jsonproc.h" + +#include + +#include +using std::string; using std::to_string; + +#include +using namespace inja; +using json = nlohmann::json; + +std::map customVars; + +void set_custom_var(string key, string value) +{ + customVars[key] = value; +} + +string get_custom_var(string key) +{ + return customVars[key]; +} + +int main(int argc, char *argv[]) +{ + if (argc != 4) + FATAL_ERROR("USAGE: jsonproc \n"); + + string jsonfilepath = argv[1]; + string templateFilepath = argv[2]; + string outputFilepath = argv[3]; + + Environment env; + + // Add custom command callbacks. + env.add_callback("doNotModifyHeader", 0, [jsonfilepath, templateFilepath](Arguments& args) { + return "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from " + jsonfilepath +" and Inja template " + templateFilepath + "\n//\n"; + }); + + env.add_callback("subtract", 2, [](Arguments& args) { + int minuend = args.at(0)->get(); + int subtrahend = args.at(1)->get(); + + return minuend - subtrahend; + }); + + env.add_callback("setVar", 2, [=](Arguments& args) { + string key = args.at(0)->get(); + string value = args.at(1)->get(); + set_custom_var(key, value); + return ""; + }); + + env.add_callback("setVarInt", 2, [=](Arguments& args) { + string key = args.at(0)->get(); + string value = to_string(args.at(1)->get()); + set_custom_var(key, value); + return ""; + }); + + env.add_callback("getVar", 1, [=](Arguments& args) { + string key = args.at(0)->get(); + return get_custom_var(key); + }); + + env.add_callback("trackVar", 2, [](Arguments& args) { + static int counter = 0; + + int addValue = args.at(0)->get(); + int checkValue = args.at(1)->get(); + + bool over = false; + + counter = (counter + addValue) % (checkValue + 1); + + if (counter <= addValue) over = true; + + return over; + }); + + env.add_callback("concat", 2, [](Arguments& args) { + string first = args.at(0)->get(); + string second = args.at(1)->get(); + return first + second; + }); + + env.add_callback("removePrefix", 2, [](Arguments& args) { + string rawValue = args.at(0)->get(); + string prefix = args.at(1)->get(); + string::size_type i = rawValue.find(prefix); + if (i != 0) + return rawValue; + + return rawValue.erase(0, prefix.length()); + }); + + env.add_callback("removeSuffix", 2, [](Arguments& args) { + string rawValue = args.at(0)->get(); + string suffix = args.at(1)->get(); + string::size_type i = rawValue.rfind(suffix); + if (i == string::npos) + return rawValue; + + return rawValue.substr(0, i); + }); + + try + { + env.write_with_json_file(templateFilepath, jsonfilepath, outputFilepath); + } + catch (const std::exception& e) + { + FATAL_ERROR("JSONPROC_ERROR: %s\n", e.what()); + } + + return 0; +} -- cgit v1.2.3 From c73de8bed752ca538d90cfc93c4a9e8c7965f8c9 Mon Sep 17 00:00:00 2001 From: garak Date: Thu, 1 Aug 2019 18:13:42 -0400 Subject: convert wild encounters to json --- tools/jsonproc/jsonproc.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'tools/jsonproc/jsonproc.cpp') diff --git a/tools/jsonproc/jsonproc.cpp b/tools/jsonproc/jsonproc.cpp index 15eae9dcb..428d8e6e9 100755 --- a/tools/jsonproc/jsonproc.cpp +++ b/tools/jsonproc/jsonproc.cpp @@ -39,6 +39,13 @@ int main(int argc, char *argv[]) return "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from " + jsonfilepath +" and Inja template " + templateFilepath + "\n//\n"; }); + env.add_callback("contains", 2, [](Arguments& args) { + string word = args.at(0)->get(); + string check = args.at(1)->get(); + + return word.find(check) != std::string::npos; + }); + env.add_callback("subtract", 2, [](Arguments& args) { int minuend = args.at(0)->get(); int subtrahend = args.at(1)->get(); -- cgit v1.2.3