diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 33c4b1d..f090cec 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ kotlin = "2.0.0" bignum = "0.3.10" maven-publish = "0.29.0" -calkt = "0.0.4" +calkt = "0.0.5" [libraries] diff --git a/units/src/commonMain/kotlin/me/y9san9/calkt/units/parse/UnitsMathParseOperand.kt b/units/src/commonMain/kotlin/me/y9san9/calkt/units/parse/UnitsMathParseOperand.kt index 47d50af..5a6dab1 100644 --- a/units/src/commonMain/kotlin/me/y9san9/calkt/units/parse/UnitsMathParseOperand.kt +++ b/units/src/commonMain/kotlin/me/y9san9/calkt/units/parse/UnitsMathParseOperand.kt @@ -49,7 +49,7 @@ public class UnitsMathParseOperand( val unitKey = parseUnitKey(context) return UnitsExpression.Conversion( - value = MathExpression.Number(PreciseNumber.Companion.of(1)), + value = MathExpression.Number(PreciseNumber.of(1)), key = unitKey ) } diff --git a/units/src/commonMain/kotlin/me/y9san9/calkt/units/parse/UnitsParseUnitKeyFunction.kt b/units/src/commonMain/kotlin/me/y9san9/calkt/units/parse/UnitsParseUnitKeyFunction.kt index 69d4be2..8f725c1 100644 --- a/units/src/commonMain/kotlin/me/y9san9/calkt/units/parse/UnitsParseUnitKeyFunction.kt +++ b/units/src/commonMain/kotlin/me/y9san9/calkt/units/parse/UnitsParseUnitKeyFunction.kt @@ -16,6 +16,8 @@ public fun interface UnitsParseUnitKeyFunction { context.token { for (string in strings) { if (context.startsWith(string)) { + val nextChar = context.string.getOrNull(index = context.position + string.length) + if (nextChar?.isLetter() == true) continue context.drop(string.length) return@UnitsParseUnitKeyFunction key } diff --git a/units/src/commonTest/kotlin/me/y9san9/calkt/units/parse/UnitsParseUnitKeyFunction.kt b/units/src/commonTest/kotlin/me/y9san9/calkt/units/parse/UnitsParseUnitKeyFunction.kt new file mode 100644 index 0000000..b67c8b8 --- /dev/null +++ b/units/src/commonTest/kotlin/me/y9san9/calkt/units/parse/UnitsParseUnitKeyFunction.kt @@ -0,0 +1,33 @@ +package me.y9san9.calkt.units.parse + +import me.y9san9.calkt.Expression +import me.y9san9.calkt.annotation.ExpressionSubclass +import me.y9san9.calkt.calculate.CalculateResult +import me.y9san9.calkt.parse.ParseContext +import me.y9san9.calkt.parse.ParseResult +import me.y9san9.calkt.parse.tryParse +import me.y9san9.calkt.units.UnitKey +import me.y9san9.calkt.units.annotation.UnitKeySubclass +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertIs + +class UnitsParseUnitKeyFunctionTest { + @Test + fun testDefaultImplementationChecksForNextChar() { + val function = create() + + val result = tryParse("prefixtest") { context -> + function(context) as Expression + } + assertIs>(result) + assertEquals(TestKey, result.value) + } + + private fun create(): UnitsParseUnitKeyFunction { + return UnitsParseUnitKeyFunction.ofStrings(TestKey, "prefix", "prefixtest") + } + + @OptIn(UnitKeySubclass::class, ExpressionSubclass::class) + private data object TestKey : UnitKey, Expression +}