mirror of
https://github.com/asdlokj1qpi233/subconverter.git
synced 2025-10-28 12:22:37 +00:00
Enhancements
Fix support for converting Quantumult X rulesets to Surge format. Add support for exporting Trojan nodes to Loon configurations. Optimize codes.
This commit is contained in:
@@ -161,8 +161,8 @@ std::string convertRuleset(const std::string &content, int type)
|
||||
}
|
||||
else /// QuanX
|
||||
{
|
||||
output = regReplace(regReplace(content, "(?i:host)", "DOMAIN", true), "(?i:ip6-cidr)", "IP-CIDR6", true); //translate type
|
||||
output = regReplace(output, "^((?i:DOMAIN(?:-(?:SUFFIX|KEYWORD))?|IP-CIDR6?),.*?)(?:,(?!no-resolve).*?)(,no-resolve)?$", "$1$2", true); //remove group
|
||||
output = regReplace(regReplace(content, "^(?i:host)", "DOMAIN", true), "^(?i:ip6-cidr)", "IP-CIDR6", true); //translate type
|
||||
output = regReplace(output, "^((?i:DOMAIN(?:-(?:SUFFIX|KEYWORD))?|IP-CIDR6?|USER-AGENT),)\\s*?(\\S*?)(?:,(?!no-resolve).*?)(,no-resolve)?$", "\\U$1\\E$2${3:-}", true); //remove group
|
||||
return output;
|
||||
}
|
||||
}
|
||||
|
||||
16
src/misc.cpp
16
src/misc.cpp
@@ -658,28 +658,28 @@ int regGetMatch(const std::string &src, const std::string &match, size_t group_c
|
||||
bool regMatch(const std::string &src, const std::string &match)
|
||||
{
|
||||
jp::Regex reg;
|
||||
reg.setPattern(match).addModifier("gm").addPcre2Option(PCRE2_ANCHORED|PCRE2_ENDANCHORED|PCRE2_UTF).compile();
|
||||
reg.setPattern(match).addModifier("m").addPcre2Option(PCRE2_ANCHORED|PCRE2_ENDANCHORED|PCRE2_UTF).compile();
|
||||
if(!reg)
|
||||
return false;
|
||||
return reg.match(src);
|
||||
return reg.match(src, "g");
|
||||
}
|
||||
|
||||
bool regFind(const std::string &src, const std::string &match)
|
||||
{
|
||||
jp::Regex reg;
|
||||
reg.setPattern(match).addModifier("gm").addPcre2Option(PCRE2_UTF).compile();
|
||||
reg.setPattern(match).addModifier("m").addPcre2Option(PCRE2_UTF).compile();
|
||||
if(!reg)
|
||||
return false;
|
||||
return reg.match(src);
|
||||
return reg.match(src, "g");
|
||||
}
|
||||
|
||||
std::string regReplace(const std::string &src, const std::string &match, const std::string &rep, bool global)
|
||||
{
|
||||
jp::Regex reg;
|
||||
reg.setPattern(match).addModifier("gm").addPcre2Option(PCRE2_UTF).compile();
|
||||
reg.setPattern(match).addModifier("m").addPcre2Option(PCRE2_UTF|PCRE2_MULTILINE).compile();
|
||||
if(!reg)
|
||||
return src;
|
||||
return reg.replace(src, rep, global ? "g" : "");
|
||||
return reg.replace(src, rep, global ? "gx" : "x");
|
||||
}
|
||||
|
||||
bool regValid(const std::string ®)
|
||||
@@ -691,10 +691,10 @@ bool regValid(const std::string ®)
|
||||
int regGetMatch(const std::string &src, const std::string &match, size_t group_count, ...)
|
||||
{
|
||||
jp::Regex reg;
|
||||
reg.setPattern(match).addModifier("gm").addPcre2Option(PCRE2_UTF).compile();
|
||||
reg.setPattern(match).addModifier("m").addPcre2Option(PCRE2_UTF).compile();
|
||||
jp::VecNum vec_num;
|
||||
jp::RegexMatch rm;
|
||||
size_t count = rm.setRegexObject(®).setSubject(src).setNumberedSubstringVector(&vec_num).match();
|
||||
size_t count = rm.setRegexObject(®).setSubject(src).setNumberedSubstringVector(&vec_num).setModifier("g").match();
|
||||
if(!count)
|
||||
return -1;
|
||||
va_list vl;
|
||||
|
||||
@@ -2851,6 +2851,14 @@ std::string netchToLoon(std::vector<nodeInfo> &nodes, std::string &base_conf, st
|
||||
case SPEEDTEST_MESSAGE_FOUNDHTTP:
|
||||
proxy = "http," + hostname + "," + port + "," + username + "," + password;
|
||||
break;
|
||||
case SPEEDTEST_MESSAGE_FOUNDTROJAN:
|
||||
host = GetMember(json, "Host");
|
||||
proxy = "trojan," + hostname + "," + port + "," + password;
|
||||
if(host.size())
|
||||
proxy += ",tls-name:" + host;
|
||||
if(scv)
|
||||
proxy += ",skip-cert-verify:1";
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user