2023-10-16 21:52:21 -07:00
|
|
|
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
|
|
|
|
)
|
|
|
|
}
|