Skip to content

Commit

Permalink
remove dependency of apache commons text
Browse files Browse the repository at this point in the history
  • Loading branch information
plateaukao committed Oct 27, 2024
1 parent 06ff740 commit 5cbf5d6
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 17 deletions.
15 changes: 6 additions & 9 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ android {
applicationId = "info.plateaukao.einkbro"
minSdk = 24
targetSdk = 34
versionCode = 12_03_00
versionName = "12.3.0"
versionCode = 12_04_00
versionName = "12.4.0"

buildConfigField("String", "builtDateTime", "\"${getCurrentTimestamp()}\"")
buildConfigField("boolean", "showUpdateButton", showUpdateButton())
Expand Down Expand Up @@ -87,21 +87,18 @@ android {
}

dependencies {
implementation("com.google.android.material:material:1.12.0")
implementation(libs.material)

// epublib
implementation("com.positiondev.epublib:epublib-core:3.1") {
exclude(group = "org.slf4j")
exclude(group = "xmlpull")
}
implementation("org.slf4j:slf4j-api:1.7.32")
implementation("net.sf.kxml:kxml2:2.3.0")

// common lang
implementation("org.apache.commons:commons-text:1.9")
implementation(libs.slf4j.api)
implementation(libs.kxml2)

// for epub saving: html processing
implementation("org.jsoup:jsoup:1.15.3")
implementation(libs.jsoup)
implementation("androidx.constraintlayout:constraintlayout:2.1.4")

implementation("androidx.room:room-runtime:2.6.1")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,6 @@ open class BrowserActivity : FragmentActivity(), BrowserController {
bookmarkManager.getArticleByUrl(url) ?: bookmarkManager.insertArticle(article)

val selectedText = actionModeMenuViewModel.selectedText.value
.replace("\\\"", "\"")
val highlight = Highlight(articleInDb.id, selectedText)
bookmarkManager.insertHighlight(highlight)
}
Expand Down Expand Up @@ -2696,7 +2695,7 @@ open class BrowserActivity : FragmentActivity(), BrowserController {
mode.finish()

lifecycleScope.launch {
actionModeMenuViewModel.updateSelectedText(ebWebView.getSelectedText())
actionModeMenuViewModel.updateSelectedText(HelperUnit.unescapeJava(ebWebView.getSelectedText()))
showActionModeView(translationViewModel) {
ebWebView.removeTextSelection()
}
Expand Down
37 changes: 37 additions & 0 deletions app/src/main/java/info/plateaukao/einkbro/unit/HelperUnit.kt
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,42 @@ object HelperUnit {
}
}

/**
* re-implementation of org.apache.commons.text.StringEscapeUtils.unescapeJava
*/
fun unescapeJava(input: String): String {
val stringBuilder = StringBuilder()
var i = 0
while (i < input.length) {
val ch = input[i]
if (ch == '\\' && i + 1 < input.length) {
val nextChar = input[i + 1]
when (nextChar) {
'n' -> stringBuilder.append('\n')
't' -> stringBuilder.append('\t')
'b' -> stringBuilder.append('\b')
'r' -> stringBuilder.append('\r')
'f' -> stringBuilder.append('\u000C')
'\'' -> stringBuilder.append('\'')
'"' -> stringBuilder.append('\"')
'\\' -> stringBuilder.append('\\')
'u' -> {
if (i + 5 < input.length) {
val hexCode = input.substring(i + 2, i + 6)
stringBuilder.append(hexCode.toInt(16).toChar())
i += 4
}
}
else -> stringBuilder.append(nextChar) // if it's not an escape sequence, keep the original
}
i += 1 // skip next character
} else {
stringBuilder.append(ch)
}
i++
}
return stringBuilder.toString()
}
}

fun processedTextToChunks(text: String): MutableList<String> {
Expand Down Expand Up @@ -762,3 +798,4 @@ fun String.pruneWebTitle(): String =
} else {
this
}

5 changes: 2 additions & 3 deletions app/src/main/java/info/plateaukao/einkbro/view/EBWebView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ import info.plateaukao.einkbro.util.PdfDocumentAdapter
import info.plateaukao.einkbro.viewmodel.TRANSLATE_API
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import org.apache.commons.text.StringEscapeUtils
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import java.io.ByteArrayOutputStream
Expand Down Expand Up @@ -661,7 +660,7 @@ open class EBWebView(
} else if (!isReaderModeOn && !isTranslatePage) {
injectMozReaderModeJs(false)
evaluateJavascript(String.format(getReaderModeBodyHtmlJs, url)) { html ->
val processedHtml = StringEscapeUtils.unescapeJava(html)
val processedHtml = HelperUnit.unescapeJava(html)
val rawHtml =
processedHtml.substring(1, processedHtml.length - 1) // handle prefix/postfix
rawHtmlCache = rawHtml
Expand All @@ -671,7 +670,7 @@ open class EBWebView(
evaluateJavascript(
"(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();"
) { html ->
val processedHtml = StringEscapeUtils.unescapeJava(html)
val processedHtml = HelperUnit.unescapeJava(html)
val rawHtml =
processedHtml.substring(1, processedHtml.length - 1) // handle prefix/postfix
// keep html cache when it's still null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import org.apache.commons.text.StringEscapeUtils
import org.jsoup.Jsoup
import org.jsoup.nodes.Element
import org.jsoup.nodes.TextNode
Expand Down Expand Up @@ -79,11 +78,11 @@ class TranslationViewModel : ViewModel(), KoinComponent {
fun hasOpenAiApiKey(): Boolean = config.gptApiKey.isNotBlank()

fun updateMessageWithContext(userMessage: String) {
_messageWithContext.value = StringEscapeUtils.unescapeJava(userMessage)
_messageWithContext.value = HelperUnit.unescapeJava(userMessage)
}

fun updateInputMessage(userMessage: String) {
_inputMessage.value = StringEscapeUtils.unescapeJava(userMessage)
_inputMessage.value = HelperUnit.unescapeJava(userMessage)
_responseMessage.value = AnnotatedString("...")
}

Expand Down
8 changes: 8 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@
[versions]
accompanistDrawablepainter = "0.31.0-alpha"
jsoup = "1.15.3"
kotlin = "2.0.0"
foundationAndroid = "1.6.8"
kotlinxSerializationJson = "1.6.3"
kxml2 = "2.3.0"
material = "1.12.0"
mediationTestSuite = "3.0.0"
okhttp = "4.12.0"
okhttpSse = "4.11.0"
reorderable = "2.3.3"
slf4jApi = "1.7.36"
[libraries]
accompanist-drawablepainter = { module = "com.google.accompanist:accompanist-drawablepainter", version.ref = "accompanistDrawablepainter" }
androidx-foundation-android = { group = "androidx.compose.foundation", name = "foundation-android", version.ref = "foundationAndroid" }
jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" }
kxml2 = { module = "net.sf.kxml:kxml2", version.ref = "kxml2" }
material = { module = "com.google.android.material:material", version.ref = "material" }
mediation-test-suite = { group = "com.google.android.ads", name = "mediation-test-suite", version.ref = "mediationTestSuite" }
okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }
okhttp-sse = { group = "com.squareup.okhttp3", name = "okhttp-sse", version.ref = "okhttpSse" }
reorderable = { group = "sh.calvin.reorderable", name = "reorderable", version.ref = "reorderable" }
slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4jApi" }

[plugins]
org-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
Expand Down

0 comments on commit 5cbf5d6

Please sign in to comment.