From 5a211619fac2b63b7a6662b4e79e35d4ef3a4dd9 Mon Sep 17 00:00:00 2001 From: bushixuanqi <2208877960@qq.com> Date: Sun, 18 Jul 2021 18:28:26 +0800 Subject: [PATCH 01/21] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/utils/HtmlFormatter.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index 3e6fa92b1..72c7c252f 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -50,10 +50,10 @@ object HtmlFormatter { var appendPos0 = 0 val matcher0 = Pattern.compile("]*src *= *\"([^\"]+)\"[^>]*>", Pattern.CASE_INSENSITIVE).matcher(strBefore) //格式化普通图片标签 while (matcher0.find()) { - val strBefore0 = strBefore.substring(appendPos0, matcher.start()) + val strBefore0 = strBefore.substring(appendPos0, matcher0.start()) sb.append( if (strBefore0.isBlank()) strBefore0 else strBefore0.replace("\n","\n  ")) - sb.append("") - appendPos0 = matcher.end() + sb.append("") + appendPos0 = matcher0.end() } strBefore = if (appendPos0 < strBefore.length) strBefore.substring(appendPos0, strBefore.length) else "" } From d27a4f99ed201db2617ae4fcebb9f57fe545a003 Mon Sep 17 00:00:00 2001 From: bushixuanqi <2208877960@qq.com> Date: Sun, 18 Jul 2021 19:06:43 +0800 Subject: [PATCH 02/21] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/utils/HtmlFormatter.kt | 39 ++++++++++++++++--- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index 72c7c252f..2fa883f4d 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -27,7 +27,7 @@ object HtmlFormatter { .replace("[\\n\\s]+\$|^[\\n\\s]+".toRegex(), "") .replace("\\s*\\n+\\s*".toRegex(), "\n") - var str = "" + var str = StringBuffer() var endPos = 0 var hasMatch = true //普通图片标签是否还未处理过 var hasMatchX = false //是否存在带参数或带数据属性的图片标签 @@ -81,12 +81,41 @@ object HtmlFormatter { if (appendPos != 0) { hasMatchX = true //存在带参数或带数据属性的图片标签 endPos = appendPos //存在匹配,更新位置 - str = sb.toString() //存在匹配,更新字符串 + str = sb //存在匹配,更新字符串 } } - return if (endPos < keepImgHtml.length) { - str + keepImgHtml.substring( endPos, keepImgHtml.length ).replace("\n","\n  ") //缩进图片之后的非空白段落 - }else str + if (endPos < keepImgHtml.length) { + str.append( ( + if(hasMatchX){ //处理末尾的普通图片标签 + var appendPos0 = 0 + val strBefore = keepImgHtml.substring(endPos, keepImgHtml.length) + val matcher0 = + Pattern.compile("]*src *= *\"([^\"]+)\"[^>]*>", Pattern.CASE_INSENSITIVE) + .matcher(strBefore) //格式化普通图片标签 + while (matcher0.find()) { + val strBefore0 = strBefore.substring(appendPos0, matcher0.start()) + str.append( + if (strBefore0.isBlank()) strBefore0 else strBefore0.replace( + "\n", + "\n  " + ) + ) + str.append( + "" + ) + appendPos0 = matcher0.end() + } + if (appendPos0 < strBefore.length) strBefore.substring( appendPos0, strBefore.length ) else "" + }else keepImgHtml.substring( endPos, keepImgHtml.length ) + ).replace("\n","\n  ") ) //缩进图片之后的非空白段落 + } + + return str.toString() } } From 0ba230a0610c2a190cb8a6b80abd31cea92ab2d7 Mon Sep 17 00:00:00 2001 From: bushixuanqi <2208877960@qq.com> Date: Sun, 18 Jul 2021 20:18:32 +0800 Subject: [PATCH 03/21] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/utils/HtmlFormatter.kt | 52 +++++-------------- 1 file changed, 14 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index 2fa883f4d..46789b13b 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -24,8 +24,7 @@ object HtmlFormatter { html ?: return "" val keepImgHtml = html.replace(wrapHtmlRegex, "\n") .replace(notImgHtmlRegex, "") - .replace("[\\n\\s]+\$|^[\\n\\s]+".toRegex(), "") - .replace("\\s*\\n+\\s*".toRegex(), "\n") + .replace("\\n\\s*\\n".toRegex(), "\n") var str = StringBuffer() var endPos = 0 @@ -50,28 +49,20 @@ object HtmlFormatter { var appendPos0 = 0 val matcher0 = Pattern.compile("]*src *= *\"([^\"]+)\"[^>]*>", Pattern.CASE_INSENSITIVE).matcher(strBefore) //格式化普通图片标签 while (matcher0.find()) { - val strBefore0 = strBefore.substring(appendPos0, matcher0.start()) - sb.append( if (strBefore0.isBlank()) strBefore0 else strBefore0.replace("\n","\n  ")) - sb.append("") + sb.append(strBefore.substring(appendPos0, matcher0.start()),"") appendPos0 = matcher0.end() } - strBefore = if (appendPos0 < strBefore.length) strBefore.substring(appendPos0, strBefore.length) else "" + strBefore = strBefore.substring(appendPos0, strBefore.length) } - sb.append( - if (strBefore.isBlank()) strBefore else strBefore.replace("\n","\n  ") //缩进图片之间的非空白段落 - ) - - if (pos == 0) { - val url = matcher.group(1)!! - val urlMatcher = AnalyzeUrl.paramPattern.matcher(url) - val find = urlMatcher.find() - sb.append("") - - } else sb.append("") + }else NetworkUtils.getAbsoluteURL(redirectUrl,matcher.group(1)!!) + }\">") appendPos = matcher.end() } while (matcher.find()) @@ -86,7 +77,7 @@ object HtmlFormatter { } if (endPos < keepImgHtml.length) { - str.append( ( + str.append( if(hasMatchX){ //处理末尾的普通图片标签 var appendPos0 = 0 val strBefore = keepImgHtml.substring(endPos, keepImgHtml.length) @@ -94,28 +85,13 @@ object HtmlFormatter { Pattern.compile("]*src *= *\"([^\"]+)\"[^>]*>", Pattern.CASE_INSENSITIVE) .matcher(strBefore) //格式化普通图片标签 while (matcher0.find()) { - val strBefore0 = strBefore.substring(appendPos0, matcher0.start()) - str.append( - if (strBefore0.isBlank()) strBefore0 else strBefore0.replace( - "\n", - "\n  " - ) - ) - str.append( - "" - ) + str.append(strBefore.substring(appendPos0, matcher0.start()),"") appendPos0 = matcher0.end() } - if (appendPos0 < strBefore.length) strBefore.substring( appendPos0, strBefore.length ) else "" + strBefore.substring( appendPos0, strBefore.length ) }else keepImgHtml.substring( endPos, keepImgHtml.length ) - ).replace("\n","\n  ") ) //缩进图片之后的非空白段落 + ) //缩进图片之后的非空白段落 } - return str.toString() } } From daaef84ee18e8cdd4ffb4ff44e4e2136092ee95c Mon Sep 17 00:00:00 2001 From: bushixuanqi <2208877960@qq.com> Date: Sun, 18 Jul 2021 20:21:41 +0800 Subject: [PATCH 04/21] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/utils/HtmlFormatter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index 46789b13b..325eefdf0 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -24,7 +24,7 @@ object HtmlFormatter { html ?: return "" val keepImgHtml = html.replace(wrapHtmlRegex, "\n") .replace(notImgHtmlRegex, "") - .replace("\\n\\s*\\n".toRegex(), "\n") + .replace("\\n\\s*\\n|\\n$|^\\n".toRegex(), "\n") var str = StringBuffer() var endPos = 0 From 4e5fbae0af3e82c1c5abbd1ad8075438bc82fbc0 Mon Sep 17 00:00:00 2001 From: bushixuanqi <2208877960@qq.com> Date: Sun, 18 Jul 2021 21:09:40 +0800 Subject: [PATCH 05/21] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/utils/HtmlFormatter.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index 325eefdf0..268db37f2 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -24,14 +24,15 @@ object HtmlFormatter { html ?: return "" val keepImgHtml = html.replace(wrapHtmlRegex, "\n") .replace(notImgHtmlRegex, "") - .replace("\\n\\s*\\n|\\n$|^\\n".toRegex(), "\n") + .replace("\\n\\s*$|^\\s*\\n".toRegex(), "") + .replace("\\n\\s*\\n".toRegex(), "\n") var str = StringBuffer() var endPos = 0 var hasMatch = true //普通图片标签是否还未处理过 var hasMatchX = false //是否存在带参数或带数据属性的图片标签 var pos = -1 - val list = listOf("]*src *= *\"([^\"{]+\\{(?:[^{}]|\\{[^}]+\\})+\\})\"[^>]*>","]*data-[^=]*= *\"([^\"]+)\"[^>]*>","]*src *= *\"([^\"]+)\"[^>]*>") //优先匹配用户处理过所以带参数的图片标签,其次匹配带数据属性的图片标签 + val list = listOf("]*src *= *\"([^\"]*?,\\s*\\{(?:[^{}]|\\{[^}]+\\})+\\})\"[^>]*>","]*data-[^=]*= *\"([^\"]*)\"[^>]*>","]*src *= *\"([^\"]*)\"[^>]*>") //优先匹配用户处理过所以带参数的图片标签,其次匹配带数据属性的图片标签 while(++pos<3){ if(pos == 2) { if(hasMatchX)break //普通图片标签只在不存在存在带参数或带数据属性的图片标签的时候匹配 @@ -47,7 +48,7 @@ object HtmlFormatter { if (hasMatch) { //格式化不带参数和数据属性的普通图片标签 var appendPos0 = 0 - val matcher0 = Pattern.compile("]*src *= *\"([^\"]+)\"[^>]*>", Pattern.CASE_INSENSITIVE).matcher(strBefore) //格式化普通图片标签 + val matcher0 = Pattern.compile("]*src *= *\"([^\"]*)\"[^>]*>", Pattern.CASE_INSENSITIVE).matcher(strBefore) //格式化普通图片标签 while (matcher0.find()) { sb.append(strBefore.substring(appendPos0, matcher0.start()),"") appendPos0 = matcher0.end() @@ -59,8 +60,7 @@ object HtmlFormatter { if (pos == 0) { val url = matcher.group(1)!! val urlMatcher = AnalyzeUrl.paramPattern.matcher(url) - if(urlMatcher.find()) NetworkUtils.getAbsoluteURL(redirectUrl,url.substring(0,urlMatcher.start())) + ',' + url.substring(urlMatcher.end()) - else url + NetworkUtils.getAbsoluteURL(redirectUrl,url.substring(0,urlMatcher.start())) + ',' + url.substring(urlMatcher.end()) }else NetworkUtils.getAbsoluteURL(redirectUrl,matcher.group(1)!!) }\">") @@ -82,7 +82,7 @@ object HtmlFormatter { var appendPos0 = 0 val strBefore = keepImgHtml.substring(endPos, keepImgHtml.length) val matcher0 = - Pattern.compile("]*src *= *\"([^\"]+)\"[^>]*>", Pattern.CASE_INSENSITIVE) + Pattern.compile("]*src *= *\"([^\"]*)\"[^>]*>", Pattern.CASE_INSENSITIVE) .matcher(strBefore) //格式化普通图片标签 while (matcher0.find()) { str.append(strBefore.substring(appendPos0, matcher0.start()),"") From 014d8969c38de79020617f0abf9e5878da6883af Mon Sep 17 00:00:00 2001 From: bushixuanqi <2208877960@qq.com> Date: Sun, 18 Jul 2021 21:15:23 +0800 Subject: [PATCH 06/21] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/utils/HtmlFormatter.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index 268db37f2..4ba022a73 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -32,7 +32,7 @@ object HtmlFormatter { var hasMatch = true //普通图片标签是否还未处理过 var hasMatchX = false //是否存在带参数或带数据属性的图片标签 var pos = -1 - val list = listOf("]*src *= *\"([^\"]*?,\\s*\\{(?:[^{}]|\\{[^}]+\\})+\\})\"[^>]*>","]*data-[^=]*= *\"([^\"]*)\"[^>]*>","]*src *= *\"([^\"]*)\"[^>]*>") //优先匹配用户处理过所以带参数的图片标签,其次匹配带数据属性的图片标签 + val list = listOf("]*src *= *\"([^\"{]*\\{(?:[^{}]|\\{[^}]+\\})+\\})\"[^>]*>","]*data-[^=]*= *\"([^\"]*)\"[^>]*>","]*src *= *\"([^\"]*)\"[^>]*>") //优先匹配用户处理过所以带参数的图片标签,其次匹配带数据属性的图片标签 while(++pos<3){ if(pos == 2) { if(hasMatchX)break //普通图片标签只在不存在存在带参数或带数据属性的图片标签的时候匹配 @@ -60,7 +60,8 @@ object HtmlFormatter { if (pos == 0) { val url = matcher.group(1)!! val urlMatcher = AnalyzeUrl.paramPattern.matcher(url) - NetworkUtils.getAbsoluteURL(redirectUrl,url.substring(0,urlMatcher.start())) + ',' + url.substring(urlMatcher.end()) + if(urlMatcher.find()) NetworkUtils.getAbsoluteURL(redirectUrl,url.substring(0,urlMatcher.start())) + ',' + url.substring(urlMatcher.end()) + else NetworkUtils.getAbsoluteURL(redirectUrl,url) }else NetworkUtils.getAbsoluteURL(redirectUrl,matcher.group(1)!!) }\">") From 092e1d11abae82ce13e20902ebb6e5b659ec3140 Mon Sep 17 00:00:00 2001 From: bushixuanqi <2208877960@qq.com> Date: Sun, 18 Jul 2021 23:10:21 +0800 Subject: [PATCH 07/21] =?UTF-8?q?=E7=AE=80=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/utils/HtmlFormatter.kt | 86 ++++--------------- 1 file changed, 19 insertions(+), 67 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index 4ba022a73..0ac6827b6 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -26,73 +26,25 @@ object HtmlFormatter { .replace(notImgHtmlRegex, "") .replace("\\n\\s*$|^\\s*\\n".toRegex(), "") .replace("\\n\\s*\\n".toRegex(), "\n") - - var str = StringBuffer() - var endPos = 0 - var hasMatch = true //普通图片标签是否还未处理过 - var hasMatchX = false //是否存在带参数或带数据属性的图片标签 - var pos = -1 - val list = listOf("]*src *= *\"([^\"{]*\\{(?:[^{}]|\\{[^}]+\\})+\\})\"[^>]*>","]*data-[^=]*= *\"([^\"]*)\"[^>]*>","]*src *= *\"([^\"]*)\"[^>]*>") //优先匹配用户处理过所以带参数的图片标签,其次匹配带数据属性的图片标签 - while(++pos<3){ - if(pos == 2) { - if(hasMatchX)break //普通图片标签只在不存在存在带参数或带数据属性的图片标签的时候匹配 - else hasMatch = false //匹配带参数或带数据属性的图片标签同时也会格式化普通图片标签 - } - var appendPos = 0 - val matcher = - Pattern.compile(list[pos], Pattern.CASE_INSENSITIVE).matcher(keepImgHtml) - val sb = StringBuffer() - if (matcher.find()) { - do { - var strBefore = keepImgHtml.substring(appendPos, matcher.start()) - - if (hasMatch) { //格式化不带参数和数据属性的普通图片标签 - var appendPos0 = 0 - val matcher0 = Pattern.compile("]*src *= *\"([^\"]*)\"[^>]*>", Pattern.CASE_INSENSITIVE).matcher(strBefore) //格式化普通图片标签 - while (matcher0.find()) { - sb.append(strBefore.substring(appendPos0, matcher0.start()),"") - appendPos0 = matcher0.end() - } - strBefore = strBefore.substring(appendPos0, strBefore.length) - } - - sb.append( strBefore,"") - - appendPos = matcher.end() - } while (matcher.find()) - hasMatch = false //普通图片标签已经处理过 - } - - if (appendPos != 0) { - hasMatchX = true //存在带参数或带数据属性的图片标签 - endPos = appendPos //存在匹配,更新位置 - str = sb //存在匹配,更新字符串 - } - } - - if (endPos < keepImgHtml.length) { - str.append( - if(hasMatchX){ //处理末尾的普通图片标签 - var appendPos0 = 0 - val strBefore = keepImgHtml.substring(endPos, keepImgHtml.length) - val matcher0 = - Pattern.compile("]*src *= *\"([^\"]*)\"[^>]*>", Pattern.CASE_INSENSITIVE) - .matcher(strBefore) //格式化普通图片标签 - while (matcher0.find()) { - str.append(strBefore.substring(appendPos0, matcher0.start()),"") - appendPos0 = matcher0.end() - } - strBefore.substring( appendPos0, strBefore.length ) - }else keepImgHtml.substring( endPos, keepImgHtml.length ) - ) //缩进图片之后的非空白段落 + var appendPos = 0 + //正则中,若“|”处于顶端,而不处于()中时,具有类似||的熔断效果,故以此机制简化原来的代码 + val matcher = Pattern.compile("]*src *= *\"([^\"{]*\\{(?:[^{}]|\\{[^}]+\\})+\\})\"[^>]*>|]*data-[^=]*= *\"([^\"]*)\"[^>]*>|]*src *= *\"([^\"]*)\"[^>]*>", Pattern.CASE_INSENSITIVE).matcher(keepImgHtml) + val sb = StringBuffer() + while (matcher.find()){ + var param = "" + sb.append( keepImgHtml.substring(appendPos, matcher.start()),"") + appendPos = matcher.end() } - return str.toString() + if (appendPos < keepImgHtml.length) sb.append(keepImgHtml.substring( appendPos, keepImgHtml.length )) + return sb.toString() } } From 9ccaf37a4efa05c41fd3c8abdc33145ec35fe4db Mon Sep 17 00:00:00 2001 From: bushixuanqi <2208877960@qq.com> Date: Sun, 18 Jul 2021 23:14:48 +0800 Subject: [PATCH 08/21] =?UTF-8?q?=E7=AE=80=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/utils/HtmlFormatter.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index 0ac6827b6..664525973 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -26,9 +26,9 @@ object HtmlFormatter { .replace(notImgHtmlRegex, "") .replace("\\n\\s*$|^\\s*\\n".toRegex(), "") .replace("\\n\\s*\\n".toRegex(), "\n") - var appendPos = 0 - //正则中,若“|”处于顶端,而不处于()中时,具有类似||的熔断效果,故以此机制简化原来的代码 + //正则的“|”处于顶端而不处于()中时,具有类似||的熔断效果,故以此机制简化原来的代码 val matcher = Pattern.compile("]*src *= *\"([^\"{]*\\{(?:[^{}]|\\{[^}]+\\})+\\})\"[^>]*>|]*data-[^=]*= *\"([^\"]*)\"[^>]*>|]*src *= *\"([^\"]*)\"[^>]*>", Pattern.CASE_INSENSITIVE).matcher(keepImgHtml) + var appendPos = 0 val sb = StringBuffer() while (matcher.find()){ var param = "" From 46aa0de7a0625b6ec5b6cf637e2352e02f0a21f6 Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Mon, 19 Jul 2021 15:01:43 +0800 Subject: [PATCH 09/21] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=B8=80=E5=B1=82?= =?UTF-8?q?=E6=8B=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 去掉一层括号 --- app/src/main/java/io/legado/app/utils/HtmlFormatter.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index a88a59995..cae9b2251 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -38,7 +38,7 @@ object HtmlFormatter { var param = "" sb.append( keepImgHtml.substring(appendPos, matcher.start()), "" ) appendPos = matcher.end() From 1161384e09278a135a486c56091aba715c510b48 Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Mon, 19 Jul 2021 19:04:38 +0800 Subject: [PATCH 10/21] =?UTF-8?q?=E6=8F=90=E5=89=8D=E5=88=A4=E6=96=ADMode.?= =?UTF-8?q?js=E9=81=BF=E5=85=8Dmode=E5=80=BC=E8=A2=AB=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=B1=BB=E5=9E=8B=E5=88=A4=E6=96=AD=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提前判断Mode.js避免mode值被覆盖导致类型判断错 --- .../main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index b959987b3..cf3d3a4ee 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -410,7 +410,8 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { init { this.mode = mainMode - rule = when { + rule = if(mode == Mode.Js)ruleStr //避免被后面的值覆盖,加个判断 + else when { ruleStr.startsWith("@CSS:", true) -> { mode = Mode.Default ruleStr @@ -431,7 +432,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { mode = Mode.Json ruleStr.substring(6) } - (ruleStr[1] == '.' || ruleStr[1] == '[') && ruleStr.startsWith("$.") || isJSON -> { + ruleStr.startsWith("$.") || ruleStr.startsWith("$[") || isJSON -> { mode = Mode.Json ruleStr } From 0c0fc9b9a9a85eda4ed5060ab410742649d88857 Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Mon, 19 Jul 2021 19:10:14 +0800 Subject: [PATCH 11/21] Update AnalyzeRule.kt --- .../main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index cf3d3a4ee..ec0b4692f 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -396,7 +396,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { */ inner class SourceRule internal constructor(ruleStr: String, mainMode: Mode = Mode.Default) { - internal var mode: Mode + internal var mode = mainMode internal var rule: String internal var replaceRegex = "" internal var replacement = "" @@ -409,7 +409,6 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { private val defaultRuleType = 0 init { - this.mode = mainMode rule = if(mode == Mode.Js)ruleStr //避免被后面的值覆盖,加个判断 else when { ruleStr.startsWith("@CSS:", true) -> { From 694900ba6f6fe854df566bd1a8953d5da2b5f6fe Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Mon, 19 Jul 2021 19:15:11 +0800 Subject: [PATCH 12/21] Update AnalyzeRule.kt --- .../java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index ec0b4692f..6570c75f1 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -409,8 +409,10 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { private val defaultRuleType = 0 init { - rule = if(mode == Mode.Js)ruleStr //避免被后面的值覆盖,加个判断 - else when { + rule = when { + mode == Mode.Js->{//避免被后面的值覆盖,先判断js + ruleStr + } ruleStr.startsWith("@CSS:", true) -> { mode = Mode.Default ruleStr From 1f7afeb58870dcafccea022a7f9bcc206bf1bc3d Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Mon, 19 Jul 2021 19:19:41 +0800 Subject: [PATCH 13/21] Update AnalyzeRule.kt --- .../main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 6570c75f1..494b5d1a8 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -410,7 +410,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { init { rule = when { - mode == Mode.Js->{//避免被后面的值覆盖,先判断js + mode == Mode.Js || mode == Mode.Regex->{//避免被后面的值覆盖,先判断js ruleStr } ruleStr.startsWith("@CSS:", true) -> { From 3d65e670dc462445b9834876fe8040c89300c40b Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Mon, 19 Jul 2021 19:22:49 +0800 Subject: [PATCH 14/21] Update AnalyzeRule.kt --- .../main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 494b5d1a8..0c872c95d 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -410,7 +410,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { init { rule = when { - mode == Mode.Js || mode == Mode.Regex->{//避免被后面的值覆盖,先判断js + mode == Mode.Js || mode == Mode.Regex->{//splitSourceRule处预先处理了,Mode.Js和Mode.Regex,避免被后面的值覆盖先进行判断 ruleStr } ruleStr.startsWith("@CSS:", true) -> { From 92fcd858cfbaf81920403aab362d4e5f11755b94 Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Mon, 19 Jul 2021 19:25:59 +0800 Subject: [PATCH 15/21] Update AnalyzeRule.kt --- .../main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 0c872c95d..acc668711 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -410,7 +410,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { init { rule = when { - mode == Mode.Js || mode == Mode.Regex->{//splitSourceRule处预先处理了,Mode.Js和Mode.Regex,避免被后面的值覆盖先进行判断 + mode == Mode.Js || mode == Mode.Regex->{//splitSourceRule可能预先确定了Mode.Js和Mode.Regex两种mode,避免被后面的值覆盖先进行判断 ruleStr } ruleStr.startsWith("@CSS:", true) -> { From a16ab6e643c5e4fd5ff7503990e026bc454cf4a8 Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Mon, 19 Jul 2021 19:32:30 +0800 Subject: [PATCH 16/21] Update AnalyzeRule.kt --- .../main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index acc668711..f9e0024c0 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -410,7 +410,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { init { rule = when { - mode == Mode.Js || mode == Mode.Regex->{//splitSourceRule可能预先确定了Mode.Js和Mode.Regex两种mode,避免被后面的值覆盖先进行判断 + mode == Mode.Js || mode == Mode.Regex -> { //splitSourceRule预先确定了Mode.Js和Mode.Regex两种mode,避免被后面的值覆盖先进行判断 ruleStr } ruleStr.startsWith("@CSS:", true) -> { From 8562ca64048272fee769c1edbd9e67cd2b44e9c9 Mon Sep 17 00:00:00 2001 From: bushixuanqi <2208877960@qq.com> Date: Mon, 19 Jul 2021 19:43:32 +0800 Subject: [PATCH 17/21] =?UTF-8?q?=E7=AE=80=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index b959987b3..f9e0024c0 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -396,7 +396,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { */ inner class SourceRule internal constructor(ruleStr: String, mainMode: Mode = Mode.Default) { - internal var mode: Mode + internal var mode = mainMode internal var rule: String internal var replaceRegex = "" internal var replacement = "" @@ -409,8 +409,10 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { private val defaultRuleType = 0 init { - this.mode = mainMode rule = when { + mode == Mode.Js || mode == Mode.Regex -> { //splitSourceRule预先确定了Mode.Js和Mode.Regex两种mode,避免被后面的值覆盖先进行判断 + ruleStr + } ruleStr.startsWith("@CSS:", true) -> { mode = Mode.Default ruleStr @@ -431,7 +433,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { mode = Mode.Json ruleStr.substring(6) } - (ruleStr[1] == '.' || ruleStr[1] == '[') && ruleStr.startsWith("$.") || isJSON -> { + ruleStr.startsWith("$.") || ruleStr.startsWith("$[") || isJSON -> { mode = Mode.Json ruleStr } From fb07c53f444ef53c720d9c438c1eec5e0f14a149 Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Wed, 21 Jul 2021 21:42:35 +0800 Subject: [PATCH 18/21] Update autoupdatefork.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 强制更新 --- .github/workflows/autoupdatefork.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/autoupdatefork.yml b/.github/workflows/autoupdatefork.yml index 9fa5d6425..c10bdd2cc 100644 --- a/.github/workflows/autoupdatefork.yml +++ b/.github/workflows/autoupdatefork.yml @@ -28,5 +28,5 @@ jobs: git remote -v git fetch upstream git checkout master - git merge upstream/master + git merge --no-ff upstream/master git push origin master From 1275a8efc1dd6c4f98db19fdfdb4dd2f2a0e36ef Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Wed, 21 Jul 2021 22:00:36 +0800 Subject: [PATCH 19/21] Update autoupdatefork.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 恢复 --- .github/workflows/autoupdatefork.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/autoupdatefork.yml b/.github/workflows/autoupdatefork.yml index c10bdd2cc..9fa5d6425 100644 --- a/.github/workflows/autoupdatefork.yml +++ b/.github/workflows/autoupdatefork.yml @@ -28,5 +28,5 @@ jobs: git remote -v git fetch upstream git checkout master - git merge --no-ff upstream/master + git merge upstream/master git push origin master From 0154d10dff040789614ab1df43f01b318f014acf Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Wed, 21 Jul 2021 22:07:40 +0800 Subject: [PATCH 20/21] Update AnalyzeRule.kt --- .../app/model/analyzeRule/AnalyzeRule.kt | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index f9e0024c0..e205e4e40 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.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,6 +367,8 @@ 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) @@ -395,8 +397,10 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { * 规则类 */ - inner class SourceRule internal constructor(ruleStr: String, mainMode: Mode = Mode.Default) { - internal var mode = mainMode + inner class SourceRule internal constructor( + ruleStr: String, + internal var mode: Mode = Mode.Default + ) { internal var rule: String internal var replaceRegex = "" internal var replacement = "" @@ -410,9 +414,7 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { init { rule = when { - mode == Mode.Js || mode == Mode.Regex -> { //splitSourceRule预先确定了Mode.Js和Mode.Regex两种mode,避免被后面的值覆盖先进行判断 - ruleStr - } + mode == Mode.Js || mode == Mode.Regex -> ruleStr ruleStr.startsWith("@CSS:", true) -> { mode = Mode.Default ruleStr @@ -433,13 +435,11 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions { mode = Mode.Json ruleStr.substring(6) } - ruleStr.startsWith("$.") || ruleStr.startsWith("$[") || isJSON -> { + isJSON || ruleStr.startsWith("$.") || ruleStr.startsWith("$[") -> { mode = Mode.Json ruleStr } - else -> { - ruleStr - } + else -> ruleStr } //分离put rule = splitPutRule(rule, putMap) From 71bd3b866289e6e1d76e4c776041ea7612fc5ebd Mon Sep 17 00:00:00 2001 From: bushixuanqi <57338301+bushixuanqi@users.noreply.github.com> Date: Wed, 21 Jul 2021 22:09:31 +0800 Subject: [PATCH 21/21] Update HtmlFormatter.kt --- .../main/java/io/legado/app/utils/HtmlFormatter.kt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index cae9b2251..52763a41f 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -22,14 +22,10 @@ object HtmlFormatter { .replace("[\\n\\s]+$".toRegex(), "") } - fun formatKeepImg(html: String?) = format(html, notImgHtmlRegex) - - fun formatKeepImg(html: String?, redirectUrl: URL?): String { + fun formatKeepImg(html: String?, redirectUrl: URL? = null): String { html ?: return "" - val keepImgHtml = html.replace(wrapHtmlRegex, "\n") - .replace(notImgHtmlRegex, "") - .replace("\\n\\s*$|^\\s*\\n".toRegex(), "") - .replace("\\n\\s*\\n".toRegex(), "\n") + val keepImgHtml = format(html, notImgHtmlRegex) + //正则的“|”处于顶端而不处于()中时,具有类似||的熔断效果,故以此机制简化原来的代码 val matcher = formatImagePattern.matcher(keepImgHtml) var appendPos = 0 @@ -38,7 +34,8 @@ object HtmlFormatter { var param = "" sb.append( keepImgHtml.substring(appendPos, matcher.start()), "