Skip to content

Commit 425454a

Browse files
committed
テンプレートを指定して簡易な回答を出力しました。
1 parent 049e70e commit 425454a

8 files changed

Lines changed: 35 additions & 21 deletions

File tree

src/main/kotlin/xyz/javecs/tools/text2expr/Text2Expr.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,25 @@ import xyz.javecs.tools.expr.Calculator
44
import xyz.javecs.tools.text2expr.parsers.RuleBuilder
55
import xyz.javecs.tools.text2expr.parsers.RuleRenderer
66
import xyz.javecs.tools.text2expr.parsers.Variable
7+
import xyz.javecs.tools.text2expr.utils.TemplateLoader
78
import xyz.javecs.tools.text2expr.utils.normalize
89
import xyz.javecs.tools.text2expr.utils.read
910
import xyz.javecs.tools.text2expr.utils.resources
1011

1112
class Text2Expr(rulePath: String = "rules") {
1213
private val rules = ArrayList<RuleBuilder>()
13-
private val calc = Calculator()
14-
private val renderer = RuleRenderer(read("templates/reply.st"))
14+
private val templates = TemplateLoader(defaultTemplate = read("templates/reply.st"))
1515

1616
init {
17-
resources(rulePath).forEach { rules.add(RuleBuilder(read(it))) }
17+
resources(rulePath).forEach { rules.add(RuleBuilder(source = read(it), name = it)) }
1818
}
1919

2020
fun eval(text: String, rendered: Boolean = false): String {
2121
rules.forEach {
2222
try {
2323
val evaluation = it.eval(text)
2424
if (evaluation.value != Double.NaN) return if (rendered) {
25+
val renderer = RuleRenderer(templates.templateOf(it.name))
2526
renderer.add("variables", evaluation.variables.map { Variable(it.key, it.value) }.toList())
2627
renderer.add("expr", evaluation.expr)
2728
renderer.add("text", text)
@@ -33,6 +34,6 @@ class Text2Expr(rulePath: String = "rules") {
3334
} catch (e: Exception) {
3435
}
3536
}
36-
return calc.eval(normalize(text)).value.toString()
37+
return Calculator().eval(normalize(text)).value.toString()
3738
}
3839
}

src/main/kotlin/xyz/javecs/tools/text2expr/parsers/RuleBuilder.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ import xyz.javecs.tools.text2expr.utils.normalize
77

88
private val tokenizer = Tokenizer()
99
data class Evaluation(val value: Number = Double.NaN, val expr: List<String> = ArrayList(), val variables: Map<String, Double> = HashMap())
10-
class RuleBuilder(source: String) {
10+
class RuleBuilder(source: String, val name: String = "") {
1111
private val parser = RuleParser()
12-
1312
init {
1413
parser.visit(parser(source).text2expr())
1514
}
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
templates:
2-
- rule: default
3-
template: templates/reply.st
42
- rule: rules/length/mileToKilometer.txt
53
template: templates/simple-expr.st

src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/TemplateLoaderTest.kt

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,12 @@ class TemplateLoaderTest {
3131

3232
@Test fun template5() {
3333
val expected = """
34-
|<if(variables)>
35-
|<variables:{v|<v.key> = <v.value>
36-
|}>
37-
|<endif>
38-
|<if(expr)>
39-
|こうだから、
40-
|<expr:{e|<e>
41-
|}>
42-
|<endif>
4334
|答えは、
4435
|<value>
4536
|
4637
""".trimMargin("|")
4738
val config = TemplateLoader()
48-
assertEquals(expected, config.templateOf("default"))
39+
assertEquals(expected, config.templateOf("rules/length/mileToKilometer.txt"))
4940
}
5041

5142
}

src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/arithmetic/ArithmeticTest.kt renamed to src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/rules/arithmetic/ArithmeticTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package xyz.javecs.tools.text2expr.test.kotlin
1+
package xyz.javecs.tools.text2expr.test.kotlin.rules.arithmetic
22

33
import org.junit.Test
44
import xyz.javecs.tools.text2expr.Text2Expr

src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/unit/LengthTest.kt renamed to src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/rules/length/LengthTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package xyz.javecs.tools.text2expr.test.kotlin.unit
1+
package xyz.javecs.tools.text2expr.test.kotlin.rules.length
22

33
import org.junit.Test
44
import xyz.javecs.tools.text2expr.Text2Expr

src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/speed/SpeedTest.kt renamed to src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/rules/speed/SpeedTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package xyz.javecs.tools.text2expr.test.kotlin.unit
1+
package xyz.javecs.tools.text2expr.test.kotlin.rules.speed
22

33
import org.junit.Test
44
import xyz.javecs.tools.text2expr.Text2Expr
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package xyz.javecs.tools.text2expr.test.kotlin.templates
2+
3+
import org.junit.Test
4+
import xyz.javecs.tools.text2expr.Text2Expr
5+
import kotlin.test.assertEquals
6+
7+
class SimpleExprTest {
8+
@Test fun simpleExpr1() {
9+
val expected = """
10+
|答えは、
11+
|151.27796
12+
|
13+
""".trimMargin("|")
14+
val text2Expr = Text2Expr()
15+
assertEquals(expected, text2Expr.eval("94マイルは何キロメートルですか?", rendered = true))
16+
}
17+
18+
@Test fun simpleExpr2() {
19+
val expected = """
20+
|151.27796
21+
""".trimMargin("|")
22+
val text2Expr = Text2Expr()
23+
assertEquals(expected, text2Expr.eval("94マイルは何キロメートルですか?", rendered = false))
24+
}
25+
}

0 commit comments

Comments
 (0)