优化链接分割规则,避免附加参数中存在 ,{ 时导致规则切错

修复<str0,str2,...{{js}}>这种页数列表写法中,js部分内含 < 或 > 会切割错误的问题

优化格式化图片标签操作和匹配图片标签操作,加快图片处理速度。
pull/1121/head
bushixuanqi 4 years ago
parent b0c40772d4
commit cccfee70ab
  1. 4
      app/src/main/java/io/legado/app/constant/AppPattern.kt
  2. 8
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt
  3. 26
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt

@ -5,9 +5,9 @@ import java.util.regex.Pattern
@Suppress("RegExpRedundantEscape")
object AppPattern {
val JS_PATTERN: Pattern =
Pattern.compile("(<js>[\\w\\W]+?</js>)", Pattern.CASE_INSENSITIVE)
Pattern.compile("<js>([\\w\\W]+?)</js>", Pattern.CASE_INSENSITIVE)
val JS_PATTERN_END: Pattern =
Pattern.compile("(@js:[\\w\\W]+)", Pattern.CASE_INSENSITIVE)
Pattern.compile("@js:([\\w\\W]+)", Pattern.CASE_INSENSITIVE)
val EXP_PATTERN: Pattern = Pattern.compile("\\{\\{([\\w\\W]*?)\\}\\}")
//匹配格式化后的图片格式

@ -406,25 +406,25 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
ruleList.add(SourceRule(mode(tmp), mMode))
}
}
ruleList.add(SourceRule(jsMatcher.group().run{ substring(4, lastIndexOf("<")) }, Mode.Js))
ruleList.add(SourceRule(jsMatcher.group(1)!!, Mode.Js))
start = jsMatcher.end()
}
if (ruleStr.length > start){
val jsMatcherEnd = AppPattern.JS_PATTERN_END.matcher(ruleStr.substring(start))
if(jsMatcherEnd.find()){
tmp = ruleStr.substring(start, jsMatcher.start()).trim { it <= ' ' }
tmp = ruleStr.substring(start, jsMatcherEnd.start()).trim { it <= ' ' }
if (tmp.isNotEmpty()) {
ruleList.add(SourceRule(mode(tmp), mMode))
}
}
ruleList.add(SourceRule(jsMatcher.group().substring(4), Mode.Js))
ruleList.add(SourceRule(jsMatcherEnd.group(1)!!, Mode.Js))
}else{
tmp = ruleStr.substring(start).trim { it <= ' ' }
if (tmp.isNotEmpty()) {
ruleList.add(SourceRule(mode(tmp), mMode))
}
}
}
return ruleList
}

@ -73,7 +73,6 @@ class AnalyzeUrl(
}
private fun analyzeJs() {
val ruleList = arrayListOf<String>()
var start = 0
var tmp: String
val jsMatcher = JS_PATTERN.matcher(ruleUrl)
@ -82,10 +81,10 @@ class AnalyzeUrl(
tmp =
ruleUrl.substring(start, jsMatcher.start()).trim { it <= ' ' }
if (tmp.isNotEmpty()) {
ruleList.add(tmp)
ruleUrl = tmp.replace("@result", ruleUrl)
}
}
ruleList.add(jsMatcher.group())
ruleUrl = evalJS(jsMatcher.group(1)!!, ruleUrl) as String
start = jsMatcher.end()
}
if (ruleUrl.length > start) {
@ -95,32 +94,17 @@ class AnalyzeUrl(
tmp =
ruleUrl.substring(start, jsMatcherEnd.start()).trim { it <= ' ' }
if (tmp.isNotEmpty()) {
ruleList.add(tmp)
ruleUrl = tmp.replace("@result", ruleUrl)
}
}
ruleList.add(jsMatcherEnd.group())
ruleUrl = evalJS(jsMatcherEnd.group(1)!!, ruleUrl) as String
}else{
tmp = ruleUrl.substring(start).trim { it <= ' ' }
if (tmp.isNotEmpty()) {
ruleList.add(tmp)
ruleUrl = tmp.replace("@result", ruleUrl)
}
}
}
for (rule in ruleList) {
var ruleStr = rule
when {
ruleStr.startsWith("<js>") -> {
ruleStr = ruleStr.substring(4, ruleStr.lastIndexOf("<"))
ruleUrl = evalJS(ruleStr, ruleUrl) as String
}
ruleStr.startsWith("@js", true) -> {
ruleStr = ruleStr.substring(4)
ruleUrl = evalJS(ruleStr, ruleUrl) as String
}
else -> ruleUrl = ruleStr.replace("@result", ruleUrl)
}
}
}
/**

Loading…
Cancel
Save