From 96de4ff62063b2bb68281ad383fd72622ca319fb Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 24 Jul 2019 22:05:29 +0800 Subject: [PATCH] up --- .../app/model/analyzeRule/AnalyzeByJSoup.kt | 127 ++++++------------ 1 file changed, 44 insertions(+), 83 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeByJSoup.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeByJSoup.kt index 879d18b05..ecece26a6 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeByJSoup.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeByJSoup.kt @@ -73,59 +73,45 @@ class AnalyzeByJSoup { return textS } //拆分规则 - val sourceRule = SourceRule(ruleStr) - if (isEmpty(sourceRule.elementsRule)) { - textS.add(element!!.data()) - } else { - val elementsType: String - val ruleStrS: Array - when { - sourceRule.elementsRule.contains("&&") -> { - elementsType = "&" - ruleStrS = sourceRule.elementsRule.splitNotBlank("&&") - } - sourceRule.elementsRule.contains("%%") -> { - elementsType = "%" - ruleStrS = sourceRule.elementsRule.splitNotBlank("%%") - } - else -> { - elementsType = "|" - ruleStrS = sourceRule.elementsRule.splitNotBlank("||") - } + val elementsType: String + val ruleStrS: Array + when { + ruleStr.contains("&&") -> { + elementsType = "&" + ruleStrS = ruleStr.splitNotBlank("&&") } - val results = ArrayList>() - for (ruleStrX in ruleStrS) { - val temp: List? - temp = if (sourceRule.isCss) { - val lastIndex = ruleStrX.lastIndexOf('@') - getResultLast( - element!!.select(ruleStrX.substring(0, lastIndex)), - ruleStrX.substring(lastIndex + 1) - ) - } else { - getResultList(ruleStrX) - } - if (temp != null && temp.isNotEmpty()) { - results.add(temp) - if (results.isNotEmpty() && elementsType == "|") { - break - } + ruleStr.contains("%%") -> { + elementsType = "%" + ruleStrS = ruleStr.splitNotBlank("%%") + } + else -> { + elementsType = "|" + ruleStrS = ruleStr.splitNotBlank("||") + } + } + val results = ArrayList>() + for (ruleStrX in ruleStrS) { + val temp: List? = getResultList(ruleStrX) + if (temp != null && temp.isNotEmpty()) { + results.add(temp) + if (results.isNotEmpty() && elementsType == "|") { + break } } - if (results.size > 0) { - if ("%" == elementsType) { - for (i in 0 until results[0].size) { - for (temp in results) { - if (i < temp.size) { - textS.add(temp[i]) - } - } - } - } else { + } + if (results.size > 0) { + if ("%" == elementsType) { + for (i in 0 until results[0].size) { for (temp in results) { - textS.addAll(temp) + if (i < temp.size) { + textS.add(temp[i]) + } } } + } else { + for (temp in results) { + textS.addAll(temp) + } } } return textS @@ -139,39 +125,28 @@ class AnalyzeByJSoup { if (temp == null || isEmpty(rule)) { return elements } - val sourceRule = SourceRule(rule) val elementsType: String val ruleStrS: Array when { - sourceRule.elementsRule.contains("&&") -> { + rule.contains("&&") -> { elementsType = "&" - ruleStrS = sourceRule.elementsRule.splitNotBlank("&&") + ruleStrS = rule.splitNotBlank("&&") } - sourceRule.elementsRule.contains("%%") -> { + rule.contains("%%") -> { elementsType = "%" - ruleStrS = sourceRule.elementsRule.splitNotBlank("%%") + ruleStrS = rule.splitNotBlank("%%") } else -> { elementsType = "|" - ruleStrS = sourceRule.elementsRule.splitNotBlank("||") + ruleStrS = rule.splitNotBlank("||") } } val elementsList = ArrayList() - if (sourceRule.isCss) { - for (ruleStr in ruleStrS) { - val tempS = temp.select(ruleStr) - elementsList.add(tempS) - if (tempS.size > 0 && elementsType == "|") { - break - } - } - } else { - for (ruleStr in ruleStrS) { - val tempS = getElementsSingle(temp, ruleStr) - elementsList.add(tempS) - if (tempS.size > 0 && elementsType == "|") { - break - } + for (ruleStr in ruleStrS) { + val tempS = getElementsSingle(temp, ruleStr) + elementsList.add(tempS) + if (tempS.size > 0 && elementsType == "|") { + break } } if (elementsList.size > 0) { @@ -302,7 +277,7 @@ class AnalyzeByJSoup { elementsByText = filterElements(elementsByText, filterRules) elements.addAll(elementsByText) } - else -> elements.addAll(temp.select(rulePcx[0])) + else -> elements.addAll(temp.select(rule)) } if (rulePcx.size > 1) { val rulePcs = rulePcx[1].splitNotBlank(":") @@ -386,18 +361,4 @@ class AnalyzeByJSoup { return textS } - internal inner class SourceRule(ruleStr: String) { - var isCss = false - var elementsRule: String - - init { - if (ruleStr.startsWith("@CSS:", true)) { - isCss = true - elementsRule = ruleStr.substring(5).trim { it <= ' ' } - } else { - elementsRule = ruleStr - } - } - } - }