Files
pork/tokenizer/src/main/kotlin/gay/pizza/pork/tokenizer/AnsiHighlightScheme.kt

37 lines
1.0 KiB
Kotlin
Raw Normal View History

package gay.pizza.pork.tokenizer
2023-08-21 20:15:31 -07:00
open class AnsiHighlightScheme : HighlightScheme {
override fun highlight(token: Token): Highlight {
val attributes = when (token.type.family) {
2023-08-22 21:58:56 -07:00
TokenFamily.StringLiteralFamily -> string()
2023-08-21 20:15:31 -07:00
TokenFamily.OperatorFamily -> operator()
TokenFamily.KeywordFamily -> keyword()
TokenFamily.SymbolFamily -> symbol()
TokenFamily.CommentFamily -> comment()
else -> null
}
return if (attributes != null) {
Highlight(token, ansi(attributes, token.text))
} else Highlight(token)
}
2023-09-04 01:56:24 -07:00
open fun string(): AnsiAttributes =
AnsiAttributes("32m")
open fun symbol(): AnsiAttributes =
AnsiAttributes("33m")
open fun operator(): AnsiAttributes =
AnsiAttributes("34m")
open fun keyword(): AnsiAttributes =
AnsiAttributes("35m")
open fun comment(): AnsiAttributes =
AnsiAttributes("37m")
2023-08-21 20:15:31 -07:00
private fun ansi(attributes: AnsiAttributes, text: String): String =
"\u001b[${attributes.color}${text}\u001b[0m"
class AnsiAttributes(
val color: String
)
}