refactor: addTextを使用するように
This commit is contained in:
parent
4ce6832379
commit
6c580cfe0e
|
@ -68,24 +68,9 @@ class Lexer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
next == '~' || next == '~' -> {
|
next == '~' || next == '~' -> strike(iterator, next, tokens)
|
||||||
if (iterator.peekOrNull() == next) {
|
|
||||||
iterator.next()
|
|
||||||
val peekString = peekString(iterator, next, next)
|
|
||||||
if (peekString == null) {
|
|
||||||
addText(tokens, "$next$next")
|
|
||||||
} else {
|
|
||||||
tokens.add(Strike(peekString))
|
|
||||||
iterator.skip(peekString.length + 2)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
addText(tokens, next.toString())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
else -> addText(tokens, next.toString())
|
||||||
addText(tokens, next.toString())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!inline && tokens.lastOrNull() !is Whitespace) { //行頭が空白の場合は一旦無視する
|
if (!inline && tokens.lastOrNull() !is Whitespace) { //行頭が空白の場合は一旦無視する
|
||||||
inline = true
|
inline = true
|
||||||
|
@ -113,6 +98,25 @@ class Lexer {
|
||||||
return tokens
|
return tokens
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun strike(
|
||||||
|
iterator: PeekableCharIterator,
|
||||||
|
next: Char,
|
||||||
|
tokens: MutableList<Token>,
|
||||||
|
) {
|
||||||
|
if (iterator.peekOrNull() == next) {
|
||||||
|
iterator.next()
|
||||||
|
val peekString = peekString(iterator, next, next)
|
||||||
|
if (peekString == null) {
|
||||||
|
addText(tokens, "$next$next")
|
||||||
|
} else {
|
||||||
|
tokens.add(Strike(peekString))
|
||||||
|
iterator.skip(peekString.length + 2)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
addText(tokens, next.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun addText(tokens: MutableList<Token>, next: String) {
|
private fun addText(tokens: MutableList<Token>, next: String) {
|
||||||
val lastToken = tokens.lastOrNull()
|
val lastToken = tokens.lastOrNull()
|
||||||
if (lastToken is Text) {
|
if (lastToken is Text) {
|
||||||
|
@ -254,7 +258,7 @@ class Lexer {
|
||||||
) {
|
) {
|
||||||
val comma = iterator.peekOrNull()
|
val comma = iterator.peekOrNull()
|
||||||
if (comma == null) {
|
if (comma == null) {
|
||||||
tokens.add(Text(next.toString()))
|
addText(tokens, next.toString())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (comma == '.' || comma == '。' || comma == '、') {
|
if (comma == '.' || comma == '。' || comma == '、') {
|
||||||
|
@ -265,7 +269,7 @@ class Lexer {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tokens.add(Text(next + "" + comma))
|
addText(tokens, next + "" + comma)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun list(
|
private fun list(
|
||||||
|
@ -283,7 +287,7 @@ class Lexer {
|
||||||
val checkedChar = iterator.peekOrNull() ?: return
|
val checkedChar = iterator.peekOrNull() ?: return
|
||||||
iterator.next()
|
iterator.next()
|
||||||
if ((checkedChar == 'x' || checkedChar == ' ' || checkedChar == ' ').not()) {
|
if ((checkedChar == 'x' || checkedChar == ' ' || checkedChar == ' ').not()) {
|
||||||
tokens.add(Text("[$checkedChar"))
|
addText(tokens, "[$checkedChar")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val checked = checkedChar == 'x'
|
val checked = checkedChar == 'x'
|
||||||
|
@ -295,7 +299,7 @@ class Lexer {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tokens.add(Text("[$checkedChar"))
|
addText(tokens, "[$checkedChar")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,12 +317,7 @@ class Lexer {
|
||||||
if (iterator.peekOrNull() == null && builder.length >= 3) { //行末まで到達していてかつ長さが3以上か
|
if (iterator.peekOrNull() == null && builder.length >= 3) { //行末まで到達していてかつ長さが3以上か
|
||||||
tokens.add(Separator(builder.length, next)) //セパレーターとして追加
|
tokens.add(Separator(builder.length, next)) //セパレーターとして追加
|
||||||
} else {
|
} else {
|
||||||
val token = tokens.lastOrNull() //ただの文字として追加
|
addText(tokens, builder.toString())
|
||||||
if (token is Text) {
|
|
||||||
tokens[tokens.lastIndex] = Text(token.text + builder.toString())
|
|
||||||
} else {
|
|
||||||
tokens.add(Text(builder.toString()))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -885,4 +885,19 @@ class LexerTest {
|
||||||
), actual
|
), actual
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun 打ち消し線かと思ったら違った2() {
|
||||||
|
val lexer = Lexer()
|
||||||
|
|
||||||
|
val actual = lexer.lex("aiueo~abcd")
|
||||||
|
|
||||||
|
println(actual)
|
||||||
|
|
||||||
|
assertContentEquals(
|
||||||
|
listOf(
|
||||||
|
Text("aiueo~abcd")
|
||||||
|
), actual
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue