mirror of
https://github.com/asdlokj1qpi233/subconverter.git
synced 2026-11-03 02:02:24 +00:00
Enhancements
Add support for adding proxy provider to custom group in Clash configurations. Add and, or, bool as template function. Add support for any amount of argument for template function join. inja: Add variadic function callback support.
This commit is contained in:
4 files changed
+71
-21
No files matched your search
+35
-12
@@ -14,7 +14,8 @@ extern std::string managed_config_prefix;
|
||||
|
||||
static inline void parse_json_pointer(nlohmann::json &json, const std::string &path, const std::string &value)
|
||||
{
|
||||
std::string pointer = "/" + replace_all_distinct(path, ".", "/");
|
||||
std::string pointer;
|
||||
inja::convert_dot_to_json_pointer(path, pointer);
|
||||
try
|
||||
{
|
||||
json[nlohmann::json::json_pointer(pointer)] = value;
|
||||
@@ -97,21 +98,17 @@ int render_template(const std::string &content, const template_args &vars, std::
|
||||
parse_json_pointer(data, dest + "." + std::to_string(index), vArray[index]);
|
||||
return std::string();
|
||||
});
|
||||
m_callbacks.add_callback("join", 2, [](inja::Arguments &args)
|
||||
m_callbacks.add_callback("join", INJA_VARARGS, [](inja::Arguments &args)
|
||||
{
|
||||
std::string str1 = args.at(0)->get<std::string>(), str2 = args.at(1)->get<std::string>();
|
||||
return std::move(str1) + std::move(str2);
|
||||
});
|
||||
m_callbacks.add_callback("join", 3, [](inja::Arguments &args)
|
||||
{
|
||||
std::string str1 = args.at(0)->get<std::string>(), str2 = args.at(1)->get<std::string>(), str3 = args.at(2)->get<std::string>();
|
||||
return std::move(str1) + std::move(str2) + std::move(str3);
|
||||
std::string result;
|
||||
for(auto iter = args.begin(); iter != args.end(); iter++)
|
||||
result += (*iter)->get<std::string>();
|
||||
return result;
|
||||
});
|
||||
m_callbacks.add_callback("append", 2, [&data](inja::Arguments &args)
|
||||
{
|
||||
std::string path = args.at(0)->get<std::string>(), value = args.at(1)->get<std::string>();
|
||||
std::string pointer = "/" + replace_all_distinct(path, ".", "/");
|
||||
std::string output_content;
|
||||
std::string path = args.at(0)->get<std::string>(), value = args.at(1)->get<std::string>(), pointer, output_content;
|
||||
inja::convert_dot_to_json_pointer(path, pointer);
|
||||
try
|
||||
{
|
||||
output_content = data[nlohmann::json::json_pointer(pointer)].get<std::string>();
|
||||
@@ -136,6 +133,32 @@ int render_template(const std::string &content, const template_args &vars, std::
|
||||
{
|
||||
return endsWith(args.at(0)->get<std::string>(), args.at(1)->get<std::string>());
|
||||
});
|
||||
m_callbacks.add_callback("or", INJA_VARARGS, [](inja::Arguments &args)
|
||||
{
|
||||
for(auto iter = args.begin(); iter != args.end(); iter++)
|
||||
if((*iter)->get<int>())
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
m_callbacks.add_callback("and", INJA_VARARGS, [](inja::Arguments &args)
|
||||
{
|
||||
for(auto iter = args.begin(); iter != args.end(); iter++)
|
||||
if(!(*iter)->get<int>())
|
||||
return false;
|
||||
return true;
|
||||
});
|
||||
m_callbacks.add_callback("bool", 1, [](inja::Arguments &args)
|
||||
{
|
||||
std::string value = args.at(0)->get<std::string>();
|
||||
std::transform(value.begin(), value.end(), value.begin(), [](unsigned char c) { return std::tolower(c); });
|
||||
switch(hash_(value))
|
||||
{
|
||||
case "true"_hash:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
m_callbacks.add_callback("fetch", 1, template_webGet);
|
||||
m_callbacks.add_callback("parseHostname", 1, parseHostname);
|
||||
m_parser_config.include_scope_limit = true;
|
||||
|
||||
Reference in new issue
Block a user