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
fun getString(
ruleList: List<SourceRule>,
isUrl: Boolean = false,
value: String? = null
ruleList: List<SourceRule>,
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<String?>)?.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("第(.+?)([章节回话篇])")
}

Loading…
Cancel
Save