feat: リストを追加
This commit is contained in:
parent
9a9de9e062
commit
a14906e729
|
@ -20,12 +20,23 @@ class Lexer {
|
||||||
'>', '>' -> quote(iterator, tokens)
|
'>', '>' -> quote(iterator, tokens)
|
||||||
'-', '=', 'ー', '=' -> {
|
'-', '=', 'ー', '=' -> {
|
||||||
if (iterator.peekOrNull()?.isWhitespace() == true) { //-の直後がスペースならリストの可能性
|
if (iterator.peekOrNull()?.isWhitespace() == true) { //-の直後がスペースならリストの可能性
|
||||||
list(iterator, tokens, next)
|
list(iterator, tokens)
|
||||||
} else {//それ以外ならセパレーターの可能性
|
} else {//それ以外ならセパレーターの可能性
|
||||||
separator(next, iterator, tokens)
|
separator(next, iterator, tokens)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ->
|
||||||
|
decimalList(iterator, tokens, next)
|
||||||
|
|
||||||
|
'[', '「' -> {
|
||||||
|
tokens.add(SquareBracketStart)
|
||||||
|
}
|
||||||
|
|
||||||
|
']', '」' -> {
|
||||||
|
tokens.add(SquareBracketEnd)
|
||||||
|
}
|
||||||
|
|
||||||
' ', ' ' -> {
|
' ', ' ' -> {
|
||||||
tokens.add(Whitespace(skipWhitespace(iterator) + 1, next)) //nextの分1足す
|
tokens.add(Whitespace(skipWhitespace(iterator) + 1, next)) //nextの分1足す
|
||||||
}
|
}
|
||||||
|
@ -53,11 +64,31 @@ class Lexer {
|
||||||
return tokens
|
return tokens
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun list(
|
private fun decimalList(
|
||||||
iterator: PeekableCharIterator,
|
iterator: PeekableCharIterator,
|
||||||
tokens: MutableList<Token>,
|
tokens: MutableList<Token>,
|
||||||
next: Char
|
next: Char
|
||||||
) {
|
) {
|
||||||
|
val comma = iterator.peekOrNull()
|
||||||
|
if (comma == null) {
|
||||||
|
tokens.add(Text(next.toString()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (comma == '.' || comma == '。' || comma == '、') {
|
||||||
|
iterator.next()
|
||||||
|
if (iterator.peekOrNull()?.isWhitespace() == true) {
|
||||||
|
iterator.next()
|
||||||
|
tokens.add(DecimalList(next))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tokens.add(Text(next + "" + comma))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun list(
|
||||||
|
iterator: PeekableCharIterator,
|
||||||
|
tokens: MutableList<Token>
|
||||||
|
) {
|
||||||
|
|
||||||
if (iterator.peekOrNull()?.isWhitespace() == true) {
|
if (iterator.peekOrNull()?.isWhitespace() == true) {
|
||||||
tokens.add(DiscList)
|
tokens.add(DiscList)
|
||||||
|
|
|
@ -16,5 +16,7 @@ abstract class List(val type: ListType) : Token() {
|
||||||
}
|
}
|
||||||
|
|
||||||
data object DiscList : List(ListType.DISC)
|
data object DiscList : List(ListType.DISC)
|
||||||
data class DecimalList(val number: Int) : List(ListType.DECIMAL)
|
data class DecimalList(val number: Char) : List(ListType.DECIMAL)
|
||||||
data class CheckBox(val checked:Boolean): Token()
|
data class CheckBox(val checked: Boolean) : Token()
|
||||||
|
data object SquareBracketStart : Token()
|
||||||
|
data object SquareBracketEnd : Token()
|
|
@ -331,4 +331,81 @@ class LexerTest {
|
||||||
|
|
||||||
assertContentEquals(listOf(DiscList, Text("aiueo"), Break(1), DiscList, Text("abcd")), actual)
|
assertContentEquals(listOf(DiscList, Text("aiueo"), Break(1), DiscList, Text("abcd")), actual)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun ディスクリストネスト() {
|
||||||
|
val lexer = Lexer()
|
||||||
|
|
||||||
|
val actual = lexer.lex("- aiueo\n - abcd")
|
||||||
|
|
||||||
|
println(actual)
|
||||||
|
|
||||||
|
assertContentEquals(
|
||||||
|
listOf(DiscList, Text("aiueo"), Break(1), Whitespace(4, ' '), DiscList, Text("abcd")),
|
||||||
|
actual
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun 数字リスト() {
|
||||||
|
val lexer = Lexer()
|
||||||
|
|
||||||
|
val actual = lexer.lex("1. aiueo\n 2. abcd")
|
||||||
|
|
||||||
|
println(actual)
|
||||||
|
|
||||||
|
assertContentEquals(
|
||||||
|
listOf(
|
||||||
|
DecimalList('1'),
|
||||||
|
Text("aiueo"),
|
||||||
|
Break(1),
|
||||||
|
Whitespace(4, ' '),
|
||||||
|
DecimalList('2'),
|
||||||
|
Text("abcd")
|
||||||
|
),
|
||||||
|
actual
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun 全角数字リスト() {
|
||||||
|
val lexer = Lexer()
|
||||||
|
|
||||||
|
val actual = lexer.lex("1. aiueo\n 2. abcd")
|
||||||
|
|
||||||
|
println(actual)
|
||||||
|
|
||||||
|
assertContentEquals(
|
||||||
|
listOf(
|
||||||
|
DecimalList('1'),
|
||||||
|
Text("aiueo"),
|
||||||
|
Break(1),
|
||||||
|
Whitespace(4, ' '),
|
||||||
|
DecimalList('2'),
|
||||||
|
Text("abcd")
|
||||||
|
),
|
||||||
|
actual
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun 全角コンマリスト() {
|
||||||
|
val lexer = Lexer()
|
||||||
|
|
||||||
|
val actual = lexer.lex("1。 aiueo\n 2、 abcd")
|
||||||
|
|
||||||
|
println(actual)
|
||||||
|
|
||||||
|
assertContentEquals(
|
||||||
|
listOf(
|
||||||
|
DecimalList('1'),
|
||||||
|
Text("aiueo"),
|
||||||
|
Break(1),
|
||||||
|
Whitespace(4, ' '),
|
||||||
|
DecimalList('2'),
|
||||||
|
Text("abcd")
|
||||||
|
),
|
||||||
|
actual
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue