AnsiColor.kt
package com.hexagonkt.core.text
import com.hexagonkt.core.text.Ansi.CSI
object AnsiColor {
/** Set black as the foreground color. */
const val BLACK = "${CSI}30m"
/** Set red as the foreground color. */
const val RED = "${CSI}31m"
/** Set green as the foreground color. */
const val GREEN = "${CSI}32m"
/** Set yellow as the foreground color. */
const val YELLOW = "${CSI}33m"
/** Set blue as the foreground color. */
const val BLUE = "${CSI}34m"
/** Set magenta as the foreground color. */
const val MAGENTA = "${CSI}35m"
/** Set cyan as the foreground color. */
const val CYAN = "${CSI}36m"
/** Set white as the foreground color. */
const val WHITE = "${CSI}37m"
/** Set back the default foreground color. */
const val DEFAULT = "${CSI}39m"
/** Set black as the background color. */
const val BLACK_BG = "${CSI}40m"
/** Set red as the background color. */
const val RED_BG = "${CSI}41m"
/** Set green as the background color. */
const val GREEN_BG = "${CSI}42m"
/** Set yellow as the background color. */
const val YELLOW_BG = "${CSI}43m"
/** Set blue as the background color. */
const val BLUE_BG = "${CSI}44m"
/** Set magenta as the background color. */
const val MAGENTA_BG = "${CSI}45m"
/** Set cyan as the background color. */
const val CYAN_BG = "${CSI}46m"
/** Set white as the background color. */
const val WHITE_BG = "${CSI}47m"
/** Set back the default background color. */
const val DEFAULT_BG = "${CSI}49m"
/** Set bright black as the foreground color. */
const val BRIGHT_BLACK = "${CSI}90m"
/** Set bright red as the foreground color. */
const val BRIGHT_RED = "${CSI}91m"
/** Set bright green as the foreground color. */
const val BRIGHT_GREEN = "${CSI}92m"
/** Set bright yellow as the foreground color. */
const val BRIGHT_YELLOW = "${CSI}93m"
/** Set bright blue as the foreground color. */
const val BRIGHT_BLUE = "${CSI}94m"
/** Set bright magenta as the foreground color. */
const val BRIGHT_MAGENTA = "${CSI}95m"
/** Set bright cyan as the foreground color. */
const val BRIGHT_CYAN = "${CSI}96m"
/** Set bright white as the foreground color. */
const val BRIGHT_WHITE = "${CSI}97m"
/** Set bright black as the background color. */
const val BRIGHT_BLACK_BG = "${CSI}100m"
/** Set bright red as the background color. */
const val BRIGHT_RED_BG = "${CSI}101m"
/** Set bright green as the background color. */
const val BRIGHT_GREEN_BG = "${CSI}102m"
/** Set bright yellow as the background color. */
const val BRIGHT_YELLOW_BG = "${CSI}103m"
/** Set bright blue as the background color. */
const val BRIGHT_BLUE_BG = "${CSI}104m"
/** Set bright magenta as the background color. */
const val BRIGHT_MAGENTA_BG = "${CSI}105m"
/** Set bright cyan as the background color. */
const val BRIGHT_CYAN_BG = "${CSI}106m"
/** Set bright white as the background color. */
const val BRIGHT_WHITE_BG = "${CSI}107m"
/**
* Set true color (24 bit) foreground.
*
* @param r Red intensity. Must be in the 0..255 range.
* @param g Green intensity. Must be in the 0..255 range.
* @param b Blue intensity. Must be in the 0..255 range.
*
* @return Escape code to set the foreground color.
*/
fun fg(r: Int = 0, g: Int = 0, b: Int = 0): String {
requireRange(r, 0..255, "Red")
requireRange(g, 0..255, "Green")
requireRange(b, 0..255, "Blue")
return "${CSI}38;2;$r;$g;${b}m"
}
/**
* Set true color (24 bit) background.
*
* @param r Red intensity. Must be in the 0..255 range.
* @param g Green intensity. Must be in the 0..255 range.
* @param b Blue intensity. Must be in the 0..255 range.
*
* @return Escape code to set the background color.
*/
fun bg(r: Int = 0, g: Int = 0, b: Int = 0): String {
requireRange(r, 0..255, "Red")
requireRange(g, 0..255, "Green")
requireRange(b, 0..255, "Blue")
return "${CSI}48;2;$r;$g;${b}m"
}
private fun requireRange(value: Int, range: IntRange, name: String) {
require(value in range) { "$name value must be in the $range range: $value" }
}
}