Merge remote-tracking branch 'origin/master' into master

# Conflicts:
#	app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt
#	app/src/main/java/io/legado/app/utils/HtmlFormatter.kt
pull/1155/head
bushixuanqi 4 years ago
commit fd54c78f4c
  1. 20
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt
  2. 13
      app/src/main/java/io/legado/app/utils/HtmlFormatter.kt

@ -66,7 +66,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
fun setRedirectUrl(url: String): URL? {
kotlin.runCatching {
val urlMatcher = AnalyzeUrl.paramPattern.matcher(url)
redirectUrl = URL(if (urlMatcher.find()) url.substring(0, urlMatcher.start()) else url)
redirectUrl = URL( if(urlMatcher.find())url.substring(0,urlMatcher.start()) else url)
}
return redirectUrl
}
@ -367,8 +367,6 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
mMode = Mode.Regex
isRegex = true
start = 1
} else if (isRegex) {
mMode = Mode.Regex
}
var tmp: String
val jsMatcher = JS_PATTERN.matcher(ruleStr)
@ -397,10 +395,8 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
* 规则类
*/
inner class SourceRule internal constructor(
ruleStr: String,
internal var mode: Mode = Mode.Default
) {
inner class SourceRule internal constructor(ruleStr: String, mainMode: Mode = Mode.Default) {
internal var mode = mainMode
internal var rule: String
internal var replaceRegex = ""
internal var replacement = ""
@ -414,7 +410,9 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
init {
rule = when {
mode == Mode.Js || mode == Mode.Regex -> ruleStr
mode == Mode.Js || mode == Mode.Regex -> { //splitSourceRule预先确定了Mode.Js和Mode.Regex两种mode,避免被后面的值覆盖先进行判断
ruleStr
}
ruleStr.startsWith("@CSS:", true) -> {
mode = Mode.Default
ruleStr
@ -435,11 +433,13 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
mode = Mode.Json
ruleStr.substring(6)
}
isJSON || ruleStr.startsWith("$.") || ruleStr.startsWith("$[") -> {
ruleStr.startsWith("$.") || ruleStr.startsWith("$[") || isJSON -> {
mode = Mode.Json
ruleStr
}
else -> ruleStr
else -> {
ruleStr
}
}
//分离put
rule = splitPutRule(rule, putMap)

@ -22,10 +22,14 @@ object HtmlFormatter {
.replace("[\\n\\s]+$".toRegex(), "")
}
fun formatKeepImg(html: String?, redirectUrl: URL? = null): String {
html ?: return ""
val keepImgHtml = format(html, notImgHtmlRegex)
fun formatKeepImg(html: String?) = format(html, notImgHtmlRegex)
fun formatKeepImg(html: String?, redirectUrl: URL?): String {
html ?: return ""
val keepImgHtml = html.replace(wrapHtmlRegex, "\n")
.replace(notImgHtmlRegex, "")
.replace("\\n\\s*$|^\\s*\\n".toRegex(), "")
.replace("\\n\\s*\\n".toRegex(), "\n")
//正则的“|”处于顶端而不处于()中时,具有类似||的熔断效果,故以此机制简化原来的代码
val matcher = formatImagePattern.matcher(keepImgHtml)
var appendPos = 0
@ -34,8 +38,7 @@ object HtmlFormatter {
var param = ""
sb.append(
keepImgHtml.substring(appendPos, matcher.start()), "<img src=\"${
NetworkUtils.getAbsoluteURL(
redirectUrl,
NetworkUtils.getAbsoluteURL(redirectUrl,
matcher.group(1)?.let {
val urlMatcher = AnalyzeUrl.paramPattern.matcher(it)
if (urlMatcher.find()) {

Loading…
Cancel
Save