From f5734198a8e74299dae0d966d3418e57bdca7d67 Mon Sep 17 00:00:00 2001 From: Goooler Date: Tue, 20 Feb 2024 16:39:59 +0800 Subject: [PATCH 1/6] Add countdown case --- src/test/resources/res/values-it/strings.xml | 6 +++++- src/test/resources/res/values/strings.xml | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/test/resources/res/values-it/strings.xml b/src/test/resources/res/values-it/strings.xml index e9e2ba4..14d24e3 100755 --- a/src/test/resources/res/values-it/strings.xml +++ b/src/test/resources/res/values-it/strings.xml @@ -1,5 +1,5 @@ - + @@ -7,6 +7,10 @@ quarto settimo + + %1$s fino alle vacanze + + diff --git a/src/test/resources/res/values/strings.xml b/src/test/resources/res/values/strings.xml index 0705421..767bc30 100755 --- a/src/test/resources/res/values/strings.xml +++ b/src/test/resources/res/values/strings.xml @@ -1,5 +1,5 @@ - + @@ -11,6 +11,10 @@ Sixth + + %1$s until holiday + + From 2b2c504231dd34fa739e0db67ea52ef504f50c05 Mon Sep 17 00:00:00 2001 From: Goooler Date: Wed, 1 May 2024 22:11:21 +0800 Subject: [PATCH 2/6] Try to fix parseString --- .../io/github/goooler/exporter/Res2Xls.kt | 24 ++++++++++++++++++- .../io/github/goooler/exporter/MappingTest.kt | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/io/github/goooler/exporter/Res2Xls.kt b/src/main/kotlin/io/github/goooler/exporter/Res2Xls.kt index aa49803..cfc5af3 100755 --- a/src/main/kotlin/io/github/goooler/exporter/Res2Xls.kt +++ b/src/main/kotlin/io/github/goooler/exporter/Res2Xls.kt @@ -13,6 +13,7 @@ import kotlin.io.path.name import kotlin.io.path.outputStream import org.apache.poi.hssf.usermodel.HSSFWorkbook import org.jdom2.Element +import org.jdom2.Text import org.jdom2.input.SAXBuilder fun res2xls(inputPath: String, outputPath: String) { @@ -135,9 +136,30 @@ fun res2xls(inputPath: String, outputPath: String) { internal fun Element.toStringResOrNull(): StringRes? { if (name != "string") return null val key = getAttributeValue("name") ?: return null + val containsXlff = content.any { it.toString().contains("xliff") } + val rawText = if (containsXlff) { + buildString { + content.forEach { + when { + it is Text -> append(it.value) + it is Element && it.toString().contains("xliff") -> { + val tag = "xliff:${it.name}" + append("<$tag ") + append(it.attributes.joinToString(" ") { attr -> "${attr.name}=\"${attr.value}\"" }) + append(">") + append((it.content.single() as Text).value) + append("") + } + else -> append(it.toString()) + } + } + } + } else { + text + } return StringRes( name = key, - value = text, + value = rawText, ) } diff --git a/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt b/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt index 1280b7c..6d2986b 100644 --- a/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt +++ b/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt @@ -20,6 +20,7 @@ class MappingTest { StringRes("first", "primo"), StringRes("forth", "quarto"), StringRes("seventh", "settimo"), + StringRes("countdown", "\n %1\$s fino alle vacanze\n"), ) assertThat(stringResList).containsExactly(*actual) } From af39f9eb89d44047e7abfc4414da21927a62b267 Mon Sep 17 00:00:00 2001 From: Goooler Date: Thu, 2 May 2024 17:03:48 +0800 Subject: [PATCH 3/6] Fix --- src/test/kotlin/io/github/goooler/exporter/MappingTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt b/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt index 6d2986b..aaeee0f 100644 --- a/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt +++ b/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt @@ -20,7 +20,7 @@ class MappingTest { StringRes("first", "primo"), StringRes("forth", "quarto"), StringRes("seventh", "settimo"), - StringRes("countdown", "\n %1\$s fino alle vacanze\n"), + StringRes("countdown", "\n %1\$s fino alle vacanze\n "), ) assertThat(stringResList).containsExactly(*actual) } From 300364616882dcd0ee9a6534a0437ade0311b486 Mon Sep 17 00:00:00 2001 From: Goooler Date: Thu, 2 May 2024 17:07:02 +0800 Subject: [PATCH 4/6] Tweak case --- src/test/kotlin/io/github/goooler/exporter/MappingTest.kt | 2 +- src/test/resources/res/values-it/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt b/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt index aaeee0f..fff54bc 100644 --- a/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt +++ b/src/test/kotlin/io/github/goooler/exporter/MappingTest.kt @@ -20,7 +20,7 @@ class MappingTest { StringRes("first", "primo"), StringRes("forth", "quarto"), StringRes("seventh", "settimo"), - StringRes("countdown", "\n %1\$s fino alle vacanze\n "), + StringRes("countdown", "\n %1\$s fino alle vacanze %1\$s all.\n "), ) assertThat(stringResList).containsExactly(*actual) } diff --git a/src/test/resources/res/values-it/strings.xml b/src/test/resources/res/values-it/strings.xml index 14d24e3..0ec3b04 100755 --- a/src/test/resources/res/values-it/strings.xml +++ b/src/test/resources/res/values-it/strings.xml @@ -8,7 +8,7 @@ settimo - %1$s fino alle vacanze + %1$s fino alle vacanze %1$s all. From da9afa6be812120e3dc9b9b8f3b2bdf77b34c430 Mon Sep 17 00:00:00 2001 From: Goooler Date: Fri, 3 May 2024 11:34:12 +0800 Subject: [PATCH 5/6] Add htmlDecode --- src/main/kotlin/io/github/goooler/exporter/Xls2Res.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/io/github/goooler/exporter/Xls2Res.kt b/src/main/kotlin/io/github/goooler/exporter/Xls2Res.kt index a218249..9970d15 100644 --- a/src/main/kotlin/io/github/goooler/exporter/Xls2Res.kt +++ b/src/main/kotlin/io/github/goooler/exporter/Xls2Res.kt @@ -179,7 +179,7 @@ internal val Cell.stringValue: String } catch (_: IllegalStateException) { outputError("Cell in sheet ${sheet.sheetName} row $rowIndex and column $columnIndex is not a string.") } - return original.trim().replace(NBSP, SPACE) + return original.trim().htmlDecode() } internal const val NBSP = '\u00A0' @@ -189,3 +189,12 @@ private fun Row.isEmpty(): Boolean = all { it.stringCellValue.trim().isEmpty() } private fun List.mutate(): MutableList = this as? MutableList ?: outputError("List $this is not mutable.") + +private fun String.htmlDecode(): String { + return replace("<", "<") + .replace(">", ">") + .replace("&", "&") + .replace("'", "'") + .replace(""", "\"") + .replace(NBSP, SPACE) +} From 5e48fac977e8a093f1631265aefd37d8c5641954 Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 4 May 2024 22:58:09 +0800 Subject: [PATCH 6/6] Revert "Add htmlDecode" This reverts commit da9afa6be812120e3dc9b9b8f3b2bdf77b34c430. --- src/main/kotlin/io/github/goooler/exporter/Xls2Res.kt | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/kotlin/io/github/goooler/exporter/Xls2Res.kt b/src/main/kotlin/io/github/goooler/exporter/Xls2Res.kt index 9970d15..a218249 100644 --- a/src/main/kotlin/io/github/goooler/exporter/Xls2Res.kt +++ b/src/main/kotlin/io/github/goooler/exporter/Xls2Res.kt @@ -179,7 +179,7 @@ internal val Cell.stringValue: String } catch (_: IllegalStateException) { outputError("Cell in sheet ${sheet.sheetName} row $rowIndex and column $columnIndex is not a string.") } - return original.trim().htmlDecode() + return original.trim().replace(NBSP, SPACE) } internal const val NBSP = '\u00A0' @@ -189,12 +189,3 @@ private fun Row.isEmpty(): Boolean = all { it.stringCellValue.trim().isEmpty() } private fun List.mutate(): MutableList = this as? MutableList ?: outputError("List $this is not mutable.") - -private fun String.htmlDecode(): String { - return replace("<", "<") - .replace(">", ">") - .replace("&", "&") - .replace("'", "'") - .replace(""", "\"") - .replace(NBSP, SPACE) -}