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

修复<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") @Suppress("RegExpRedundantEscape")
object AppPattern { object AppPattern {
val JS_PATTERN: Pattern = 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 = 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]*?)\\}\\}") 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(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() start = jsMatcher.end()
} }
if (ruleStr.length > start){ if (ruleStr.length > start){
val jsMatcherEnd = AppPattern.JS_PATTERN_END.matcher(ruleStr.substring(start)) val jsMatcherEnd = AppPattern.JS_PATTERN_END.matcher(ruleStr.substring(start))
if(jsMatcherEnd.find()){ if(jsMatcherEnd.find()){
tmp = ruleStr.substring(start, jsMatcher.start()).trim { it <= ' ' } tmp = ruleStr.substring(start, jsMatcherEnd.start()).trim { it <= ' ' }
if (tmp.isNotEmpty()) { if (tmp.isNotEmpty()) {
ruleList.add(SourceRule(mode(tmp), mMode)) ruleList.add(SourceRule(mode(tmp), mMode))
} }
} ruleList.add(SourceRule(jsMatcherEnd.group(1)!!, Mode.Js))
ruleList.add(SourceRule(jsMatcher.group().substring(4), Mode.Js))
}else{ }else{
tmp = ruleStr.substring(start).trim { it <= ' ' } tmp = ruleStr.substring(start).trim { it <= ' ' }
if (tmp.isNotEmpty()) { if (tmp.isNotEmpty()) {
ruleList.add(SourceRule(mode(tmp), mMode)) ruleList.add(SourceRule(mode(tmp), mMode))
} }
} }
}
return ruleList return ruleList
} }

@ -73,7 +73,6 @@ class AnalyzeUrl(
} }
private fun analyzeJs() { private fun analyzeJs() {
val ruleList = arrayListOf<String>()
var start = 0 var start = 0
var tmp: String var tmp: String
val jsMatcher = JS_PATTERN.matcher(ruleUrl) val jsMatcher = JS_PATTERN.matcher(ruleUrl)
@ -82,10 +81,10 @@ class AnalyzeUrl(
tmp = tmp =
ruleUrl.substring(start, jsMatcher.start()).trim { it <= ' ' } ruleUrl.substring(start, jsMatcher.start()).trim { it <= ' ' }
if (tmp.isNotEmpty()) { 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() start = jsMatcher.end()
} }
if (ruleUrl.length > start) { if (ruleUrl.length > start) {
@ -95,32 +94,17 @@ class AnalyzeUrl(
tmp = tmp =
ruleUrl.substring(start, jsMatcherEnd.start()).trim { it <= ' ' } ruleUrl.substring(start, jsMatcherEnd.start()).trim { it <= ' ' }
if (tmp.isNotEmpty()) { if (tmp.isNotEmpty()) {
ruleList.add(tmp) ruleUrl = tmp.replace("@result", ruleUrl)
} }
} }
ruleList.add(jsMatcherEnd.group()) ruleUrl = evalJS(jsMatcherEnd.group(1)!!, ruleUrl) as String
}else{ }else{
tmp = ruleUrl.substring(start).trim { it <= ' ' } tmp = ruleUrl.substring(start).trim { it <= ' ' }
if (tmp.isNotEmpty()) { 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