From a84d6e217836c9cefaa18f00ceda42cd4210658c Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Tue, 28 Nov 2023 22:25:38 +0800 Subject: [PATCH] =?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/proguard-rules.pro | 4 +- app/src/main/java/io/legado/app/App.kt | 7 ++- .../legado/app/data/entities/BookChapter.kt | 1 - .../java/io/legado/app/help/JsExtensions.kt | 2 +- .../legado/app/help/book/ContentProcessor.kt | 2 +- .../ui/book/read/config/ReadStyleDialog.kt | 1 - .../searchContent/SearchContentViewModel.kt | 4 +- .../java/io/legado/app/utils/ChineseUtils.kt | 45 +++++++++++++++++++ .../io/legado/app/utils/TrieExtensions.kt | 39 ++++++++++++++++ 9 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/io/legado/app/utils/ChineseUtils.kt create mode 100644 app/src/main/java/io/legado/app/utils/TrieExtensions.kt diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 5db9efc06..3104daffc 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -250,8 +250,8 @@ ## 对外提供api -keep class io.legado.app.api.ReturnData{*;} -# Apache Commons Compress --keep class org.apache.commons.compress.archivers.** {*;} +# 繁简转换 +-keep class com.github.liuyueyi.quick.transfer.** {*;} #-------------------Cronet------------------------------------ diff --git a/app/src/main/java/io/legado/app/App.kt b/app/src/main/java/io/legado/app/App.kt index 550162a56..245a57904 100644 --- a/app/src/main/java/io/legado/app/App.kt +++ b/app/src/main/java/io/legado/app/App.kt @@ -7,7 +7,6 @@ import android.content.Context import android.content.pm.ActivityInfo import android.content.res.Configuration import android.os.Build -import com.github.liuyueyi.quick.transfer.ChineseUtils import com.github.liuyueyi.quick.transfer.constants.TransType import com.jeremyliao.liveeventbus.LiveEventBus import io.legado.app.base.AppContextWrapper @@ -31,6 +30,7 @@ import io.legado.app.help.http.okHttpClient import io.legado.app.help.source.SourceHelp import io.legado.app.help.storage.Backup import io.legado.app.model.BookCover +import io.legado.app.utils.ChineseUtils import io.legado.app.utils.defaultSharedPreferences import io.legado.app.utils.getPrefBoolean import kotlinx.coroutines.launch @@ -73,7 +73,10 @@ class App : Application() { Backup.clearCache() //初始化简繁转换引擎 when (AppConfig.chineseConverterType) { - 1 -> ChineseUtils.preLoad(true, TransType.TRADITIONAL_TO_SIMPLE) + 1 -> launch { + ChineseUtils.fixT2sDict() + } + 2 -> ChineseUtils.preLoad(true, TransType.SIMPLE_TO_TRADITIONAL) } //调整排序序号 diff --git a/app/src/main/java/io/legado/app/data/entities/BookChapter.kt b/app/src/main/java/io/legado/app/data/entities/BookChapter.kt index 02169943d..705efcd84 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookChapter.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookChapter.kt @@ -5,7 +5,6 @@ import androidx.room.Entity import androidx.room.ForeignKey import androidx.room.Ignore import androidx.room.Index -import com.github.liuyueyi.quick.transfer.ChineseUtils import io.legado.app.R import io.legado.app.constant.AppLog import io.legado.app.constant.AppPattern diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt index 2ef43fd90..a464c2a96 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -5,7 +5,7 @@ import android.webkit.WebSettings import androidx.annotation.Keep import cn.hutool.core.codec.Base64 import cn.hutool.core.util.HexUtil -import com.github.liuyueyi.quick.transfer.ChineseUtils +import io.legado.app.utils.ChineseUtils import io.legado.app.constant.AppConst import io.legado.app.constant.AppConst.dateFormat import io.legado.app.constant.AppLog diff --git a/app/src/main/java/io/legado/app/help/book/ContentProcessor.kt b/app/src/main/java/io/legado/app/help/book/ContentProcessor.kt index 9c913d59d..e48451dc2 100644 --- a/app/src/main/java/io/legado/app/help/book/ContentProcessor.kt +++ b/app/src/main/java/io/legado/app/help/book/ContentProcessor.kt @@ -1,6 +1,5 @@ package io.legado.app.help.book -import com.github.liuyueyi.quick.transfer.ChineseUtils import io.legado.app.constant.AppLog import io.legado.app.constant.AppPattern.spaceRegex import io.legado.app.data.appDb @@ -10,6 +9,7 @@ import io.legado.app.data.entities.ReplaceRule import io.legado.app.exception.RegexTimeoutException import io.legado.app.help.config.AppConfig import io.legado.app.help.config.ReadBookConfig +import io.legado.app.utils.ChineseUtils import io.legado.app.utils.escapeRegex import io.legado.app.utils.replace import io.legado.app.utils.stackTraceStr diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt index 95bffaf46..40eecd230 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt @@ -7,7 +7,6 @@ import android.view.View import android.view.ViewGroup import android.view.WindowManager import androidx.core.view.get -import com.github.liuyueyi.quick.transfer.ChineseUtils import com.github.liuyueyi.quick.transfer.constants.TransType import io.legado.app.R import io.legado.app.base.BaseDialogFragment diff --git a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentViewModel.kt b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentViewModel.kt index 3a72eb280..f5d774795 100644 --- a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentViewModel.kt @@ -2,7 +2,6 @@ package io.legado.app.ui.book.searchContent import android.app.Application -import com.github.liuyueyi.quick.transfer.ChineseUtils import io.legado.app.base.BaseViewModel import io.legado.app.data.appDb import io.legado.app.data.entities.Book @@ -10,13 +9,14 @@ import io.legado.app.data.entities.BookChapter import io.legado.app.help.book.BookHelp import io.legado.app.help.book.ContentProcessor import io.legado.app.help.config.AppConfig +import io.legado.app.utils.ChineseUtils import kotlinx.coroutines.ensureActive import kotlin.coroutines.coroutineContext class SearchContentViewModel(application: Application) : BaseViewModel(application) { var bookUrl: String = "" var book: Book? = null - var contentProcessor: ContentProcessor? = null + private var contentProcessor: ContentProcessor? = null var lastQuery: String = "" var searchResultCounts = 0 val cacheChapterNames = hashSetOf() diff --git a/app/src/main/java/io/legado/app/utils/ChineseUtils.kt b/app/src/main/java/io/legado/app/utils/ChineseUtils.kt new file mode 100644 index 000000000..7f18abecb --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/ChineseUtils.kt @@ -0,0 +1,45 @@ +package io.legado.app.utils + +import com.github.liuyueyi.quick.transfer.ChineseUtils +import com.github.liuyueyi.quick.transfer.constants.TransType +import com.github.liuyueyi.quick.transfer.dictionary.DictionaryContainer + +object ChineseUtils { + + private var fixed = false + + fun s2t(content: String): String { + return ChineseUtils.s2t(content) + } + + fun t2s(content: String): String { + if (!fixed) { + fixed = true + fixT2sDict() + } + return ChineseUtils.t2s(content) + } + + fun preLoad(async: Boolean, vararg transType: TransType) { + ChineseUtils.preLoad(async, *transType) + } + + fun unLoad(vararg transType: TransType) { + ChineseUtils.unLoad(*transType) + } + + fun fixT2sDict() { + val dict = DictionaryContainer.getInstance().getDictionary(TransType.TRADITIONAL_TO_SIMPLE) + dict.chars.run { + remove('劈') + remove('脊') + } + kotlin.runCatching { + dict.dict.run { + remove("支援") + remove("路易斯") + } + } + } + +} diff --git a/app/src/main/java/io/legado/app/utils/TrieExtensions.kt b/app/src/main/java/io/legado/app/utils/TrieExtensions.kt new file mode 100644 index 000000000..e5627e7dc --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/TrieExtensions.kt @@ -0,0 +1,39 @@ +package io.legado.app.utils + +import com.github.liuyueyi.quick.transfer.Trie +import com.github.liuyueyi.quick.transfer.TrieNode +import java.util.HashMap + +fun Trie.getRoot(): TrieNode { + val rootField = javaClass.getDeclaredField("root") + .apply { isAccessible = true } + @Suppress("UNCHECKED_CAST") + return rootField.get(this) as TrieNode +} + +fun TrieNode.getChildren(): HashMap> { + val childrenField = javaClass.getDeclaredField("children") + .apply { isAccessible = true } + @Suppress("UNCHECKED_CAST") + return childrenField.get(this) as HashMap> +} + +fun Trie.remove(value: String) { + var node = getRoot() + val nodes = arrayListOf>() + val chars = value.toCharArray() + for (c in chars) { + nodes.add(node) + node = node.getChildren()[c] ?: break + if (!node.isLeaf) { + continue + } + for ((ch, n) in chars.reversed().zip(nodes.reversed())) { + val children = n.getChildren() + children.remove(ch) + if (children.isNotEmpty()) { + break + } + } + } +}