This commit is contained in:
Horis 2023-11-28 22:25:38 +08:00
parent 87c89b588c
commit a84d6e2178
9 changed files with 95 additions and 10 deletions

View File

@ -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------------------------------------

View File

@ -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)
}
//调整排序序号

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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<String>()

View File

@ -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("路易斯")
}
}
}
}

View File

@ -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 <T> Trie<T>.getRoot(): TrieNode<T> {
val rootField = javaClass.getDeclaredField("root")
.apply { isAccessible = true }
@Suppress("UNCHECKED_CAST")
return rootField.get(this) as TrieNode<T>
}
fun <T> TrieNode<T>.getChildren(): HashMap<Char, TrieNode<T>> {
val childrenField = javaClass.getDeclaredField("children")
.apply { isAccessible = true }
@Suppress("UNCHECKED_CAST")
return childrenField.get(this) as HashMap<Char, TrieNode<T>>
}
fun <T> Trie<T>.remove(value: String) {
var node = getRoot()
val nodes = arrayListOf<TrieNode<T>>()
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
}
}
}
}