From e6f74c56f80d67b2bd0ab5fcbd214231ec4c34c5 Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Tue, 12 Dec 2023 11:35:37 +0300 Subject: [PATCH] Superscript support #138 --- .../com/sadellie/unitto/data/common/StringUtils.kt | 12 ++++++++++++ .../unitto/data/common/NormalizeSuperscriptTest.kt | 13 +++++++++++++ .../sadellie/unitto/data/model/unit/AbstractUnit.kt | 11 +++++++++-- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 data/common/src/test/java/com/sadellie/unitto/data/common/NormalizeSuperscriptTest.kt diff --git a/data/common/src/main/java/com/sadellie/unitto/data/common/StringUtils.kt b/data/common/src/main/java/com/sadellie/unitto/data/common/StringUtils.kt index dea0e339..345a3e18 100644 --- a/data/common/src/main/java/com/sadellie/unitto/data/common/StringUtils.kt +++ b/data/common/src/main/java/com/sadellie/unitto/data/common/StringUtils.kt @@ -75,3 +75,15 @@ fun String.isExpression(): Boolean { // Rest of the string must be just like positive return this.drop(1).isExpression() } + +fun String.normalizeSuperscript(): String = this + .replace('⁰', '0') + .replace('¹', '1') + .replace('²', '2') + .replace('³', '3') + .replace('⁴', '4') + .replace('⁵', '5') + .replace('⁶', '6') + .replace('⁷', '7') + .replace('⁸', '8') + .replace('⁹', '9') diff --git a/data/common/src/test/java/com/sadellie/unitto/data/common/NormalizeSuperscriptTest.kt b/data/common/src/test/java/com/sadellie/unitto/data/common/NormalizeSuperscriptTest.kt new file mode 100644 index 00000000..2f7cbd73 --- /dev/null +++ b/data/common/src/test/java/com/sadellie/unitto/data/common/NormalizeSuperscriptTest.kt @@ -0,0 +1,13 @@ +package com.sadellie.unitto.data.common + +import org.junit.Assert.assertEquals +import org.junit.Test + +class NormalizeSuperscriptTest { + + @Test + fun normalizeSuperscript() { + val input = "⁰¹²³⁴⁵⁶⁷⁸⁹" + assertEquals("0123456789", input.normalizeSuperscript()) + } +} diff --git a/data/model/src/main/java/com/sadellie/unitto/data/model/unit/AbstractUnit.kt b/data/model/src/main/java/com/sadellie/unitto/data/model/unit/AbstractUnit.kt index d6a3a48e..34027af8 100644 --- a/data/model/src/main/java/com/sadellie/unitto/data/model/unit/AbstractUnit.kt +++ b/data/model/src/main/java/com/sadellie/unitto/data/model/unit/AbstractUnit.kt @@ -20,6 +20,7 @@ package com.sadellie.unitto.data.model.unit import android.content.Context import com.sadellie.unitto.data.common.lev +import com.sadellie.unitto.data.common.normalizeSuperscript import com.sadellie.unitto.data.model.UnitGroup import java.math.BigDecimal @@ -52,7 +53,10 @@ fun Sequence.filterByLev(stringA: String, context: Context): Seque // List of pair: Unit and it's levDist val unitsWithDist = mutableListOf>() this.forEach { unit -> - val unitShortName: String = context.getString(unit.shortName).lowercase() + val unitShortName: String = context + .getString(unit.shortName) + .lowercase() + .normalizeSuperscript() /** * There is a chance that we search for unit with a specific short name. Such cases are * should be higher in the list. Best possible match. @@ -62,7 +66,10 @@ fun Sequence.filterByLev(stringA: String, context: Context): Seque return@forEach } - val unitFullName: String = context.getString(unit.displayName).lowercase() + val unitFullName: String = context + .getString(unit.displayName) + .lowercase() + .normalizeSuperscript() /** * There is chance that unit name doesn't need any edits (contains part of the query)