|
|
|
@ -406,6 +406,9 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { |
|
|
|
internal val putMap = HashMap<String, String>() |
|
|
|
internal val putMap = HashMap<String, String>() |
|
|
|
private val ruleParam = ArrayList<String>() |
|
|
|
private val ruleParam = ArrayList<String>() |
|
|
|
private val ruleType = ArrayList<Int>() |
|
|
|
private val ruleType = ArrayList<Int>() |
|
|
|
|
|
|
|
private val getRuleType = -2 |
|
|
|
|
|
|
|
private val jsRuleType = -1 |
|
|
|
|
|
|
|
private val defaultRuleType = 0 |
|
|
|
|
|
|
|
|
|
|
|
init { |
|
|
|
init { |
|
|
|
this.mode = mainMode |
|
|
|
this.mode = mainMode |
|
|
|
@ -444,48 +447,76 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { |
|
|
|
else -> rule = ruleStr |
|
|
|
else -> rule = ruleStr |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (mode == Mode.Js) { |
|
|
|
|
|
|
|
ruleType.add(defaultRuleType) |
|
|
|
|
|
|
|
ruleParam.add(rule) |
|
|
|
|
|
|
|
} else { |
|
|
|
//分离put |
|
|
|
//分离put |
|
|
|
rule = splitPutRule(rule, putMap) |
|
|
|
rule = splitPutRule(rule, putMap) |
|
|
|
//@get,{{ }},$1, 拆分 |
|
|
|
//@get,{{ }}, 拆分 |
|
|
|
var start = 0 |
|
|
|
var start = 0 |
|
|
|
var tmp: String |
|
|
|
var tmp: String |
|
|
|
val evalMatcher = evalPattern.matcher(rule) |
|
|
|
val evalMatcher = evalPattern.matcher(rule) |
|
|
|
while (evalMatcher.find()) { |
|
|
|
while (evalMatcher.find()) { |
|
|
|
if (evalMatcher.start() > start) { |
|
|
|
if (evalMatcher.start() > start) { |
|
|
|
tmp = rule.substring(start, evalMatcher.start()) |
|
|
|
tmp = rule.substring(start, evalMatcher.start()) |
|
|
|
ruleType.add(0) |
|
|
|
if (start == 0 && !tmp.contains("##")) { |
|
|
|
ruleParam.add(tmp) |
|
|
|
mode = Mode.Regex |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
splitRegex(tmp) |
|
|
|
} |
|
|
|
} |
|
|
|
tmp = evalMatcher.group() |
|
|
|
tmp = evalMatcher.group() |
|
|
|
when { |
|
|
|
when { |
|
|
|
tmp.startsWith("$") -> { |
|
|
|
|
|
|
|
ruleType.add(tmp.substring(1).toInt()) |
|
|
|
|
|
|
|
ruleParam.add(tmp) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
tmp.startsWith("@get:", true) -> { |
|
|
|
tmp.startsWith("@get:", true) -> { |
|
|
|
ruleType.add(-2) |
|
|
|
ruleType.add(getRuleType) |
|
|
|
ruleParam.add(tmp.substring(6, tmp.lastIndex)) |
|
|
|
ruleParam.add(tmp.substring(6, tmp.lastIndex)) |
|
|
|
} |
|
|
|
} |
|
|
|
tmp.startsWith("{{") -> { |
|
|
|
tmp.startsWith("{{") -> { |
|
|
|
ruleType.add(-1) |
|
|
|
ruleType.add(jsRuleType) |
|
|
|
ruleParam.add(tmp.substring(2, tmp.length - 2)) |
|
|
|
ruleParam.add(tmp.substring(2, tmp.length - 2)) |
|
|
|
} |
|
|
|
} |
|
|
|
else -> { |
|
|
|
else -> { |
|
|
|
ruleType.add(0) |
|
|
|
splitRegex(tmp) |
|
|
|
ruleParam.add(tmp) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
start = evalMatcher.end() |
|
|
|
start = evalMatcher.end() |
|
|
|
} |
|
|
|
} |
|
|
|
if (rule.length > start) { |
|
|
|
if (rule.length > start) { |
|
|
|
tmp = rule.substring(start) |
|
|
|
tmp = rule.substring(start) |
|
|
|
ruleType.add(0) |
|
|
|
splitRegex(tmp) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* 拆分\$\d{1,2} |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private fun splitRegex(ruleStr: String) { |
|
|
|
|
|
|
|
var start = 0 |
|
|
|
|
|
|
|
var tmp: String |
|
|
|
|
|
|
|
val ruleStrArray = ruleStr.split("##") |
|
|
|
|
|
|
|
val regexMatcher = regexPattern.matcher(ruleStrArray[0]) |
|
|
|
|
|
|
|
while (regexMatcher.find()) { |
|
|
|
|
|
|
|
mode = Mode.Regex |
|
|
|
|
|
|
|
if (regexMatcher.start() > start) { |
|
|
|
|
|
|
|
tmp = ruleStr.substring(start, regexMatcher.start()) |
|
|
|
|
|
|
|
ruleType.add(defaultRuleType) |
|
|
|
|
|
|
|
ruleParam.add(tmp) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
tmp = regexMatcher.group() |
|
|
|
|
|
|
|
ruleType.add(tmp.substring(1).toInt()) |
|
|
|
|
|
|
|
ruleParam.add(tmp) |
|
|
|
|
|
|
|
start = regexMatcher.end() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (ruleStr.length > start) { |
|
|
|
|
|
|
|
tmp = ruleStr.substring(start) |
|
|
|
|
|
|
|
ruleType.add(defaultRuleType) |
|
|
|
ruleParam.add(tmp) |
|
|
|
ruleParam.add(tmp) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 替换@get,{{ }},$1, |
|
|
|
* 替换@get,{{ }} |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
fun makeUpRule(result: Any?) { |
|
|
|
fun makeUpRule(result: Any?) { |
|
|
|
val infoVal = StringBuilder() |
|
|
|
val infoVal = StringBuilder() |
|
|
|
@ -494,7 +525,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { |
|
|
|
while (index-- > 0) { |
|
|
|
while (index-- > 0) { |
|
|
|
val regType = ruleType[index] |
|
|
|
val regType = ruleType[index] |
|
|
|
when { |
|
|
|
when { |
|
|
|
regType > 0 -> { |
|
|
|
regType > defaultRuleType -> { |
|
|
|
@Suppress("UNCHECKED_CAST") |
|
|
|
@Suppress("UNCHECKED_CAST") |
|
|
|
val resultList = result as? List<String?> |
|
|
|
val resultList = result as? List<String?> |
|
|
|
if (resultList != null) { |
|
|
|
if (resultList != null) { |
|
|
|
@ -507,7 +538,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { |
|
|
|
infoVal.insert(0, ruleParam[index]) |
|
|
|
infoVal.insert(0, ruleParam[index]) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
regType == -1 -> { |
|
|
|
regType == jsRuleType -> { |
|
|
|
if (isRule(ruleParam[index])) { |
|
|
|
if (isRule(ruleParam[index])) { |
|
|
|
getString(arrayListOf(SourceRule(ruleParam[index]))).let { |
|
|
|
getString(arrayListOf(SourceRule(ruleParam[index]))).let { |
|
|
|
infoVal.insert(0, it) |
|
|
|
infoVal.insert(0, it) |
|
|
|
@ -525,7 +556,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
regType == -2 -> { |
|
|
|
regType == getRuleType -> { |
|
|
|
infoVal.insert(0, get(ruleParam[index])) |
|
|
|
infoVal.insert(0, get(ruleParam[index])) |
|
|
|
} |
|
|
|
} |
|
|
|
else -> infoVal.insert(0, ruleParam[index]) |
|
|
|
else -> infoVal.insert(0, ruleParam[index]) |
|
|
|
@ -631,14 +662,9 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { |
|
|
|
companion object { |
|
|
|
companion object { |
|
|
|
private val putPattern = Pattern.compile("@put:(\\{[^}]+?\\})", Pattern.CASE_INSENSITIVE) |
|
|
|
private val putPattern = Pattern.compile("@put:(\\{[^}]+?\\})", Pattern.CASE_INSENSITIVE) |
|
|
|
private val getPattern = Pattern.compile("@get:\\{([^}]+?)\\}", Pattern.CASE_INSENSITIVE) |
|
|
|
private val getPattern = Pattern.compile("@get:\\{([^}]+?)\\}", Pattern.CASE_INSENSITIVE) |
|
|
|
private val evalPattern = Pattern.compile( |
|
|
|
private val evalPattern = |
|
|
|
"@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}|\\$\\d{1,2}", |
|
|
|
Pattern.compile("@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}", Pattern.CASE_INSENSITIVE) |
|
|
|
Pattern.CASE_INSENSITIVE |
|
|
|
private val regexPattern = Pattern.compile("\\$\\d{1,2}") |
|
|
|
) |
|
|
|
|
|
|
|
private val replacePattern = Pattern.compile( |
|
|
|
|
|
|
|
"@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}", |
|
|
|
|
|
|
|
Pattern.CASE_INSENSITIVE |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|