Update AnalyzeRule.kt

改回原来的插入方式
pull/1155/head
bushixuanqi 4 years ago committed by GitHub
parent d296482d0e
commit c401c6e1fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 49
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt

@ -193,9 +193,9 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
@JvmOverloads @JvmOverloads
fun getString( fun getString(
ruleList: List<SourceRule>, ruleList: List<SourceRule>,
isUrl: Boolean = false, isUrl: Boolean = false,
value: String? = null value: String? = null
): String { ): String {
var result: Any? = value var result: Any? = value
val content = this.content val content = this.content
@ -259,8 +259,8 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
result?.let { result?.let {
result = when (sourceRule.mode) { result = when (sourceRule.mode) {
Mode.Regex -> AnalyzeByRegex.getElement( Mode.Regex -> AnalyzeByRegex.getElement(
result.toString(), result.toString(),
sourceRule.rule.splitNotBlank("&&") sourceRule.rule.splitNotBlank("&&")
) )
Mode.Js -> evalJS(sourceRule.rule, it) Mode.Js -> evalJS(sourceRule.rule, it)
Mode.Json -> getAnalyzeByJSonPath(it).getObject(sourceRule.rule) Mode.Json -> getAnalyzeByJSonPath(it).getObject(sourceRule.rule)
@ -290,8 +290,8 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
result?.let { result?.let {
result = when (sourceRule.mode) { result = when (sourceRule.mode) {
Mode.Regex -> AnalyzeByRegex.getElements( Mode.Regex -> AnalyzeByRegex.getElements(
result.toString(), result.toString(),
sourceRule.rule.splitNotBlank("&&") sourceRule.rule.splitNotBlank("&&")
) )
Mode.Js -> evalJS(sourceRule.rule, result) Mode.Js -> evalJS(sourceRule.rule, result)
Mode.Json -> getAnalyzeByJSonPath(it).getList(sourceRule.rule) Mode.Json -> getAnalyzeByJSonPath(it).getList(sourceRule.rule)
@ -398,8 +398,8 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
*/ */
inner class SourceRule internal constructor( inner class SourceRule internal constructor(
ruleStr: String, ruleStr: String,
internal var mode: Mode = Mode.Default internal var mode: Mode = Mode.Default
) { ) {
internal var rule: String internal var rule: String
internal var replaceRegex = "" internal var replaceRegex = ""
@ -453,7 +453,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
val mMode = mode == Mode.Js || mode == Mode.Regex val mMode = mode == Mode.Js || mode == Mode.Regex
if(!mMode) { //首次匹配,start为0 if(!mMode) { //首次匹配,start为0
if(evalMatcher.start() == 0 //仅首次匹配时evalMatcher.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 )mode = Mode.Regex
} }
do { do {
@ -515,10 +515,11 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
/** /**
* 替换@get,{{ }} * 替换@get,{{ }}
*/ */
fun makeUpRule(result: Any?) { //追加比插入快 fun makeUpRule(result: Any?) {
val infoVal = StringBuilder() val infoVal = StringBuilder()
if (ruleParam.isNotEmpty()) { if (ruleParam.isNotEmpty()) {
for (index in 0 until ruleParam.size) { var index = ruleParam.size
for (index-- > 0) {
val regType = ruleType[index] val regType = ruleType[index]
when { when {
regType > defaultRuleType -> { regType > defaultRuleType -> {
@ -526,17 +527,17 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
(result as? List<String?>)?.run { (result as? List<String?>)?.run {
if (this.size > regType) { if (this.size > regType) {
this[regType]?.let { this[regType]?.let {
infoVal.append(it) infoVal.insert(0, it)
} }
} }
}?:infoVal.append(ruleParam[index]) }?:infoVal.insert(0, ruleParam[index])
} }
regType == jsRuleType -> { regType == jsRuleType -> {
if (isRule(ruleParam[index])) { if (isRule(ruleParam[index])) {
infoVal.append( getString(arrayListOf(SourceRule(ruleParam[index]))) ) infoVal.insert(0, getString(arrayListOf(SourceRule(ruleParam[index]))))
} else { } else {
evalJS(ruleParam[index], result)?.run{ evalJS(ruleParam[index], result)?.run{
infoVal.append(when(this){ infoVal.insert(0, when(this){
is String -> this is String -> this
this is Double && this % 1.0 == 0.0 -> String.format("%.0f", this) this is Double && this % 1.0 == 0.0 -> String.format("%.0f", this)
else -> toString() else -> toString()
@ -545,9 +546,9 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
} }
} }
regType == getRuleType -> { 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() rule = infoVal.toString()
@ -580,8 +581,8 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
fun put(key: String, value: String): String { fun put(key: String, value: String): String {
chapter?.putVariable(key, value) chapter?.putVariable(key, value)
?: book?.putVariable(key, value) ?: book?.putVariable(key, value)
?: ruleData.putVariable(key, value) ?: ruleData.putVariable(key, value)
return value return value
} }
@ -595,9 +596,9 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
} }
} }
return chapter?.variableMap?.get(key) return chapter?.variableMap?.get(key)
?: book?.variableMap?.get(key) ?: book?.variableMap?.get(key)
?: ruleData.variableMap[key] ?: ruleData.variableMap[key]
?: "" ?: ""
} }
/** /**
@ -650,7 +651,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
private val innerRuleChar = listOf('@','.',':','>','#','*') private val innerRuleChar = listOf('@','.',':','>','#','*')
private val putPattern = Pattern.compile("@put:(\\{[^}]+?\\})", Pattern.CASE_INSENSITIVE) private val putPattern = Pattern.compile("@put:(\\{[^}]+?\\})", Pattern.CASE_INSENSITIVE)
private val evalPattern = 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 regexPattern = Pattern.compile("\\$\\d{1,2}")
private val titleNumPattern = Pattern.compile("第(.+?)([章节回话篇])") private val titleNumPattern = Pattern.compile("第(.+?)([章节回话篇])")
} }

Loading…
Cancel
Save