Skip to content

Commit b154f6b

Browse files
authored
Merge pull request #30 from javecs/feature/string-template
StringTemplateを使って、結果を表示しました。
2 parents 60b6e96 + 86bc94d commit b154f6b

5 files changed

Lines changed: 22 additions & 8 deletions

File tree

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ plugins {
1616
}
1717

1818
group 'xyz.javecs.tools'
19-
version '0.0.10'
19+
version '0.1.0'
2020

2121
apply plugin: 'kotlin'
2222
apply plugin: 'antlr'
@@ -39,6 +39,7 @@ dependencies {
3939
compile "xyz.javecs.tools:expr:0.2.3"
4040
compile "com.google.guava:guava:21.0"
4141
compile "com.atilika.kuromoji:kuromoji-ipadic:0.9.0"
42+
compile "org.antlr:stringtemplate:4.0.2"
4243
compile "org.reflections:reflections:0.9.11"
4344
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
4445
testCompile 'junit:junit:4.12'

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,15 @@ class Text2Expr(rulePath: String = "rules") {
1414
resources(rulePath).forEach { rules.add(RuleBuilder(read(it))) }
1515
}
1616

17-
fun eval(text: String): String {
17+
fun eval(text: String, rendered: Boolean = false): String {
1818
rules.forEach {
1919
try {
2020
val evaluation = it.eval(text)
21-
if (evaluation.value != Double.NaN) return evaluation.value.toString()
21+
if (evaluation.value != Double.NaN) return if (rendered) {
22+
evaluation.rendered
23+
} else {
24+
evaluation.value.toString()
25+
}
2226
} catch (e: Exception) {
2327
}
2428
}

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@ package xyz.javecs.tools.text2expr.parsers
22

33
import com.atilika.kuromoji.ipadic.Token
44
import com.atilika.kuromoji.ipadic.Tokenizer
5+
import org.stringtemplate.v4.ST
56
import xyz.javecs.tools.expr.Calculator
67
import xyz.javecs.tools.text2expr.utils.normalize
78

89
private val tokenizer = Tokenizer()
10+
private val printValue = "これかな?\n<value>"
911

10-
data class Evaluation(val value: Number = Double.NaN)
11-
class RuleBuilder(source: String) {
12+
data class Evaluation(val value: Number = Double.NaN, val rendered: String = "")
13+
class RuleBuilder(source: String, template: String = printValue) {
1214
private val parser = RuleParser()
13-
15+
private val renderer = ST(template)
1416
init {
1517
parser.visit(parser(source).text2expr())
1618
}
@@ -61,9 +63,11 @@ class RuleBuilder(source: String) {
6163
return if (matches(norm, { (key, value) -> args.add("$key = $value") })) {
6264
args.forEach { calc.eval(it) }
6365
expr().forEach { calc.eval(it) }
64-
Evaluation(calc.value)
66+
renderer.add("value", calc.value)
67+
Evaluation(calc.value, renderer.render())
6568
} else {
6669
Evaluation()
6770
}
6871
}
72+
6973
}

src/test/java/xyz/javecs/tools/text2expr/test/java/Text2ExprTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class Text2ExprTest {
88
@Test
99
public void testExpr() {
1010
Text2Expr text2Expr = new Text2Expr();
11-
Assert.assertEquals("5", text2Expr.eval("3+2"));
11+
Assert.assertEquals("5", text2Expr.eval("3+2", false));
1212
}
1313

1414
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,9 @@ class Text2ExprTest {
1717
assertEquals("1", Text2Expr().eval("1"))
1818
}
1919

20+
@Test fun eval2() {
21+
assertEquals("2", Text2Expr().eval("1足す1"))
22+
assertEquals("これかな?\n2", Text2Expr().eval("1足す1", rendered = true))
23+
}
24+
2025
}

0 commit comments

Comments
 (0)