|
|
|
@ -1,18 +1,21 @@ |
|
|
|
|
package io.legado.app.help |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Suppress("RegExpRedundantEscape") |
|
|
|
|
object RuleComplete { |
|
|
|
|
// 需要补全 |
|
|
|
|
private val needComplete =Regex( |
|
|
|
|
"""(?<!(@|/|^|[|%&]{2})(attr|text|ownText|textNodes|href|content|html|alt|all|value|src)(\(\))?)(?<seq>\&{2}|%%|\|{2}|$)""") |
|
|
|
|
private val needComplete = Regex( |
|
|
|
|
"""(?<!(@|/|^|[|%&]{2})(attr|text|ownText|textNodes|href|content|html|alt|all|value|src)(\(\))?)(?<seq>\&{2}|%%|\|{2}|$)""" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
// 不能补全 存在js/json/{{xx}}的复杂情况 |
|
|
|
|
private val notComplete = Regex("""^:|^##|\{\{|@js:|<js>|@Json:|\$\.""") |
|
|
|
|
|
|
|
|
|
// 修正从图片获取信息 |
|
|
|
|
private val fixImgInfo = Regex("""(?<=(^|tag\.|[\+/@>~| &]))img(?<at>(\[@?.+\]|\.[-\w]+)?)[@/]+text(\(\))?(?<seq>\&{2}|%%|\|{2}|$)""") |
|
|
|
|
private val fixImgInfo = |
|
|
|
|
Regex("""(?<=(^|tag\.|[\+/@>~| &]))img(?<at>(\[@?.+\]|\.[-\w]+)?)[@/]+text(\(\))?(?<seq>\&{2}|%%|\|{2}|$)""") |
|
|
|
|
|
|
|
|
|
private val isXpath= Regex("^//|^@Xpath:") |
|
|
|
|
private val isXpath = Regex("^//|^@Xpath:") |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 对简单规则进行补全,简化部分书源规则的编写 |
|
|
|
@ -31,33 +34,38 @@ object RuleComplete { |
|
|
|
|
preRule: String? = null, |
|
|
|
|
type: Int = 1 |
|
|
|
|
): String? { |
|
|
|
|
if (rules.isNullOrEmpty()||rules.contains(notComplete) || preRule?.contains(notComplete) ?: false){ |
|
|
|
|
if (rules.isNullOrEmpty() || rules.contains(notComplete) || preRule?.contains(notComplete) == true) { |
|
|
|
|
return rules |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** 尾部##分割的正则或由,分割的参数 */ |
|
|
|
|
val tailStr: String |
|
|
|
|
|
|
|
|
|
/** 分割字符 */ |
|
|
|
|
val splitStr:String |
|
|
|
|
val splitStr: String |
|
|
|
|
|
|
|
|
|
/** 用于获取文字时添加的规则 */ |
|
|
|
|
val textRule: String |
|
|
|
|
|
|
|
|
|
/** 用于获取链接时添加的规则 */ |
|
|
|
|
val linkRule: String |
|
|
|
|
|
|
|
|
|
/** 用于获取图片时添加的规则 */ |
|
|
|
|
val imgRule: String |
|
|
|
|
|
|
|
|
|
/** 用于获取图片alt属性时添加的规则 */ |
|
|
|
|
val imgText: String |
|
|
|
|
|
|
|
|
|
// 分离尾部规则 |
|
|
|
|
val regexSplit=rules.split("""##|,\{""".toRegex(),2) |
|
|
|
|
val cleanedRule=regexSplit[0] |
|
|
|
|
if (regexSplit.size>1){ |
|
|
|
|
splitStr="""##|,\{""".toRegex().find(rules)?.value ?: "" |
|
|
|
|
val regexSplit = rules.split("""##|,\{""".toRegex(), 2) |
|
|
|
|
val cleanedRule = regexSplit[0] |
|
|
|
|
if (regexSplit.size > 1) { |
|
|
|
|
splitStr = """##|,\{""".toRegex().find(rules)?.value ?: "" |
|
|
|
|
tailStr = splitStr + regexSplit[1] |
|
|
|
|
}else{ |
|
|
|
|
} else { |
|
|
|
|
tailStr = "" |
|
|
|
|
} |
|
|
|
|
if (cleanedRule.contains(isXpath)){ |
|
|
|
|
if (cleanedRule.contains(isXpath)) { |
|
|
|
|
textRule = "//text()\${seq}" |
|
|
|
|
linkRule = "//@href\${seq}" |
|
|
|
|
imgRule = "//@src\${seq}" |
|
|
|
|