From c401c6e1fc4f457cb6702a479d8f9a4ab9bc4bfb Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Fri, 23 Jul 2021 12:27:48 +0800 Subject: [PATCH] Update AnalyzeRule.kt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 改回原来的插入方式 --- .../app/model/analyzeRule/AnalyzeRule.kt | 49 ++++++++++--------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index a2fa29e03..f4adcbd17 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -193,9 +193,9 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { @JvmOverloads fun getString( - ruleList: List, - isUrl: Boolean = false, - value: String? = null + ruleList: List, + isUrl: Boolean = false, + value: String? = null ): String { var result: Any? = value val content = this.content @@ -259,8 +259,8 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { result?.let { result = when (sourceRule.mode) { Mode.Regex -> AnalyzeByRegex.getElement( - result.toString(), - sourceRule.rule.splitNotBlank("&&") + result.toString(), + sourceRule.rule.splitNotBlank("&&") ) Mode.Js -> evalJS(sourceRule.rule, it) Mode.Json -> getAnalyzeByJSonPath(it).getObject(sourceRule.rule) @@ -290,8 +290,8 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { result?.let { result = when (sourceRule.mode) { Mode.Regex -> AnalyzeByRegex.getElements( - result.toString(), - sourceRule.rule.splitNotBlank("&&") + result.toString(), + sourceRule.rule.splitNotBlank("&&") ) Mode.Js -> evalJS(sourceRule.rule, result) Mode.Json -> getAnalyzeByJSonPath(it).getList(sourceRule.rule) @@ -398,8 +398,8 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { */ inner class SourceRule internal constructor( - ruleStr: String, - internal var mode: Mode = Mode.Default + ruleStr: String, + internal var mode: Mode = Mode.Default ) { internal var rule: String internal var replaceRegex = "" @@ -453,7 +453,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { val mMode = mode == Mode.Js || mode == Mode.Regex if(!mMode) { //首次匹配,start为0 if(evalMatcher.start() == 0 //仅首次匹配时evalMatcher.start()可能为0 - ||!rule.substring(0, evalMatcher.start()).contains("##") //此处start为0 + ||!rule.substring(0, evalMatcher.start()).contains("##") //此处start为0 )mode = Mode.Regex } do { @@ -515,10 +515,11 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { /** * 替换@get,{{ }} */ - fun makeUpRule(result: Any?) { //追加比插入快 + fun makeUpRule(result: Any?) { val infoVal = StringBuilder() if (ruleParam.isNotEmpty()) { - for (index in 0 until ruleParam.size) { + var index = ruleParam.size + for (index-- > 0) { val regType = ruleType[index] when { regType > defaultRuleType -> { @@ -526,17 +527,17 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { (result as? List)?.run { if (this.size > regType) { this[regType]?.let { - infoVal.append(it) + infoVal.insert(0, it) } } - }?:infoVal.append(ruleParam[index]) + }?:infoVal.insert(0, ruleParam[index]) } regType == jsRuleType -> { if (isRule(ruleParam[index])) { - infoVal.append( getString(arrayListOf(SourceRule(ruleParam[index]))) ) + infoVal.insert(0, getString(arrayListOf(SourceRule(ruleParam[index])))) } else { evalJS(ruleParam[index], result)?.run{ - infoVal.append(when(this){ + infoVal.insert(0, when(this){ is String -> this this is Double && this % 1.0 == 0.0 -> String.format("%.0f", this) else -> toString() @@ -545,9 +546,9 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { } } regType == getRuleType -> { - infoVal.append(get(ruleParam[index])) + infoVal.insert(0, get(ruleParam[index])) } - else -> infoVal.append(ruleParam[index]) + else -> infoVal.insert(0, ruleParam[index]) } } rule = infoVal.toString() @@ -580,8 +581,8 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { fun put(key: String, value: String): String { chapter?.putVariable(key, value) - ?: book?.putVariable(key, value) - ?: ruleData.putVariable(key, value) + ?: book?.putVariable(key, value) + ?: ruleData.putVariable(key, value) return value } @@ -595,9 +596,9 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { } } return chapter?.variableMap?.get(key) - ?: book?.variableMap?.get(key) - ?: ruleData.variableMap[key] - ?: "" + ?: book?.variableMap?.get(key) + ?: ruleData.variableMap[key] + ?: "" } /** @@ -650,7 +651,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { private val innerRuleChar = listOf('@','.',':','>','#','*') private val putPattern = Pattern.compile("@put:(\\{[^}]+?\\})", Pattern.CASE_INSENSITIVE) private val evalPattern = - Pattern.compile("@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}", Pattern.CASE_INSENSITIVE) + Pattern.compile("@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}", Pattern.CASE_INSENSITIVE) private val regexPattern = Pattern.compile("\\$\\d{1,2}") private val titleNumPattern = Pattern.compile("第(.+?)([章节回话篇])") }