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

# Conflicts:
#	app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeByJSonPath.kt
#	app/src/main/java/io/legado/app/model/analyzeRule/RuleAnalyzer.kt
pull/1114/head
bushixuanqi 3 years ago
commit 4341f3b6f8
  1. 2
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeByJSonPath.kt
  2. 14
      app/src/main/java/io/legado/app/model/analyzeRule/RuleAnalyzer.kt

@ -25,7 +25,7 @@ class AnalyzeByJSonPath(json: Any) {
/** /**
* 改进解析方法 * 改进解析方法
* 解决阅读&&||与jsonPath支持的&&||之间的冲突 * 解决阅读&&||与jsonPath支持的&&||之间的冲突
* 解决{$.rule}形式规则可能匹配错误的问题旧规则用正则解析内容含}的json文本时用规则中的字段去匹配这种内容会匹配错误.现改用平衡嵌套方法解决这个问题 * 解决{$.rule}形式规则可能匹配错误的问题旧规则用正则解析内容含}的json文本时用规则中的字段去匹配这种内容会匹配错误.现改用平衡嵌套方法解决这个问题
* */ * */
fun getString(rule: String): String? { fun getString(rule: String): String? {
if (rule.isEmpty()) return null if (rule.isEmpty()) return null

@ -98,9 +98,9 @@ class RuleAnalyzer(data: String) {
} }
/** /**
* 从剩余字串中拉出一个字符串直到包括匹配序列匹配参数列表中一项即为匹配或剩余字串用完 * 从剩余字串中拉出一个字符串直到但不包括匹配序列匹配参数列表中一项即为匹配或剩余字串用完
* @param seq 匹配字符串序列 * @param seq 匹配字符串序列
* @return 成功返回true并推移pos失败返回fasle而不推移pos * @return 成功返回true并设置间隔失败则直接返回fasle
*/ */
fun consumeToAny(vararg seq:String): Boolean { fun consumeToAny(vararg seq:String): Boolean {
@ -126,7 +126,7 @@ class RuleAnalyzer(data: String) {
/** /**
* 从剩余字串中拉出一个字符串直到但不包括匹配序列匹配参数列表中一项即为匹配或剩余字串用完 * 从剩余字串中拉出一个字符串直到但不包括匹配序列匹配参数列表中一项即为匹配或剩余字串用完
* @param seq 匹配字符序列 * @param seq 匹配字符序列
* @return 匹配到的位置 * @return 返回匹配位置
*/ */
private fun findToAny(vararg seq:Char): Int { private fun findToAny(vararg seq:Char): Int {
@ -255,7 +255,7 @@ class RuleAnalyzer(data: String) {
/** /**
* 不用正则,不到最后不切片也不用中间变量存储,只在序列中标记当前查找字段的开头结尾,到返回时才切片,高效快速准确切割规则 * 不用正则,不到最后不切片也不用中间变量存储,只在序列中标记当前查找字段的开头结尾,到返回时才切片,高效快速准确切割规则
* 解决jsonPath自带的"&&""||"与阅读的规则冲突,以及规则正则或字符串中包含"&&""||""%%"导致的冲突 * 解决jsonPath自带的"&&""||"与阅读的规则冲突,以及规则正则或字符串中包含"&&""||""%%""@"导致的冲突
*/ */
tailrec fun splitRule(vararg split: String): Array<String>{ //首段匹配,elementsType为空 tailrec fun splitRule(vararg split: String): Array<String>{ //首段匹配,elementsType为空
@ -284,7 +284,7 @@ class RuleAnalyzer(data: String) {
return rule return rule
} }
val rule = if(st >pos ){ //先匹配到st1pos,表明"&&","||"不在选择器中,将选择器前"&&","||"分隔的字段依次压入数组 val rule = if(st >pos ){ //先匹配到st1pos,表明分隔字串不在选择器中,将选择器前分隔字串分隔的字段依次压入数组
var rule = arrayOf(queue.substring(0, pos)) //压入分隔的首段规则到数组 var rule = arrayOf(queue.substring(0, pos)) //压入分隔的首段规则到数组
@ -337,7 +337,7 @@ class RuleAnalyzer(data: String) {
return rule return rule
} }
val rule = if(st > pos ){//先匹配到st1pos,表明"&&","||"不在选择器中,将选择器前"&&","||"分隔的字段依次压入数组 val rule = if(st > pos ){//先匹配到st1pos,表明分隔字串不在选择器中,将选择器前分隔字串分隔的字段依次压入数组
var rule = rules + queue.substring(start, pos) //压入本次分隔的首段规则到数组 var rule = rules + queue.substring(start, pos) //压入本次分隔的首段规则到数组
pos += step //跳过分隔符 pos += step //跳过分隔符
while (consumeTo(elementsType) && pos < st) { //循环切分规则压入数组 while (consumeTo(elementsType) && pos < st) { //循环切分规则压入数组
@ -518,4 +518,4 @@ class RuleAnalyzer(data: String) {
val splitListDefault = arrayOf("-",".","!","@","@@") val splitListDefault = arrayOf("-",".","!","@","@@")
} }
} }

Loading…
Cancel
Save