diff --git a/color/basic_color.v b/color/basic_color.v deleted file mode 100644 index 35bc1ef..0000000 --- a/color/basic_color.v +++ /dev/null @@ -1,76 +0,0 @@ -module color - -import term - -enum BasicColor { - black - red - green - yellow - blue - magenta - cyan - white - bright_black - bright_red - bright_green - bright_yellow - bright_blue - bright_magenta - bright_cyan - bright_white -} - -fn (c BasicColor) render(msg string) string { - return if no_color { - msg - } else { - func := match c { - .black { term.black } - .red { term.red } - .green { term.green } - .yellow { term.yellow } - .blue { term.blue } - .magenta { term.magenta } - .cyan { term.cyan } - .white { term.white } - .bright_black { term.bright_black } - .bright_red { term.bright_red } - .bright_green { term.bright_green } - .bright_yellow { term.bright_yellow } - .bright_blue { term.bright_blue } - .bright_magenta { term.bright_magenta } - .bright_cyan { term.bright_cyan } - .bright_white { term.bright_white } - } - - func(msg) - } -} - -fn (c BasicColor) render_bg(msg string) string { - return if no_color { - msg - } else { - func := match c { - .black { term.bg_black } - .red { term.bg_red } - .green { term.bg_green } - .yellow { term.bg_yellow } - .blue { term.bg_blue } - .magenta { term.bg_magenta } - .cyan { term.bg_cyan } - .white { term.bg_white } - .bright_black { term.bright_bg_black } - .bright_red { term.bright_bg_red } - .bright_green { term.bright_bg_green } - .bright_yellow { term.bright_bg_yellow } - .bright_blue { term.bright_bg_blue } - .bright_magenta { term.bright_bg_magenta } - .bright_cyan { term.bright_bg_cyan } - .bright_white { term.bright_bg_white } - } - - func(msg) - } -} diff --git a/color/color.v b/color/color.v index a40d6c1..bcca390 100644 --- a/color/color.v +++ b/color/color.v @@ -1,16 +1,8 @@ module color -pub interface Style { - render(string) string -} +import term -pub fn (s Style) cprint(msg string) { - print(s.render(msg)) -} - -pub fn (s Style) cprintln(msg string) { - println(s.render(msg)) -} +// Interface pub interface Color { Style @@ -24,3 +16,114 @@ pub fn (c Color) cprint_bg(msg string) { pub fn (c Color) cprintln_bg(msg string) { println(c.render_bg(msg)) } + +// TrueColor Initialization + +pub fn rgb(r u8, g u8, b u8) Color { + return TrueColor{ + r: r + g: g + b: b + } +} + +pub fn hex(hex int) Color { + return rgb(u8(hex >> 16), u8(hex >> 8 & 0xFF), u8(hex & 0xFF)) +} + +// Implementations + +struct TrueColor { + r u8 + g u8 + b u8 +} + +fn (c TrueColor) render(msg string) string { + return if no_color { + msg + } else { + term.rgb(c.r, c.g, c.b, msg) + } +} + +fn (c TrueColor) render_bg(msg string) string { + return if no_color { + msg + } else { + term.bg_rgb(c.r, c.g, c.b, msg) + } +} + +enum BasicColor { + black + red + green + yellow + blue + magenta + cyan + white + bright_black + bright_red + bright_green + bright_yellow + bright_blue + bright_magenta + bright_cyan + bright_white +} + +fn (c BasicColor) render(msg string) string { + return if no_color { + msg + } else { + func := match c { + .black { term.black } + .red { term.red } + .green { term.green } + .yellow { term.yellow } + .blue { term.blue } + .magenta { term.magenta } + .cyan { term.cyan } + .white { term.white } + .bright_black { term.bright_black } + .bright_red { term.bright_red } + .bright_green { term.bright_green } + .bright_yellow { term.bright_yellow } + .bright_blue { term.bright_blue } + .bright_magenta { term.bright_magenta } + .bright_cyan { term.bright_cyan } + .bright_white { term.bright_white } + } + + func(msg) + } +} + +fn (c BasicColor) render_bg(msg string) string { + return if no_color { + msg + } else { + func := match c { + .black { term.bg_black } + .red { term.bg_red } + .green { term.bg_green } + .yellow { term.bg_yellow } + .blue { term.bg_blue } + .magenta { term.bg_magenta } + .cyan { term.bg_cyan } + .white { term.bg_white } + .bright_black { term.bright_bg_black } + .bright_red { term.bright_bg_red } + .bright_green { term.bright_bg_green } + .bright_yellow { term.bright_bg_yellow } + .bright_blue { term.bright_bg_blue } + .bright_magenta { term.bright_bg_magenta } + .bright_cyan { term.bright_bg_cyan } + .bright_white { term.bright_bg_white } + } + + func(msg) + } +} diff --git a/color/style.v b/color/style.v index fd7821d..891fe37 100644 --- a/color/style.v +++ b/color/style.v @@ -2,6 +2,22 @@ module color import term +// Interface + +pub interface Style { + render(string) string +} + +pub fn (s Style) cprint(msg string) { + print(s.render(msg)) +} + +pub fn (s Style) cprintln(msg string) { + println(s.render(msg)) +} + +// Implementation + enum BasicStyle { reset bold diff --git a/color/true_color.v b/color/true_color.v deleted file mode 100644 index 1904f92..0000000 --- a/color/true_color.v +++ /dev/null @@ -1,37 +0,0 @@ -module color - -import term - -pub fn rgb(r u8, g u8, b u8) Color { - return TrueColor{ - r: r - g: g - b: b - } -} - -pub fn hex(hex int) Color { - return rgb(u8(hex >> 16), u8(hex >> 8 & 0xFF), u8(hex & 0xFF)) -} - -struct TrueColor { - r u8 - g u8 - b u8 -} - -fn (c TrueColor) render(msg string) string { - return if no_color { - msg - } else { - term.rgb(c.r, c.g, c.b, msg) - } -} - -fn (c TrueColor) render_bg(msg string) string { - return if no_color { - msg - } else { - term.bg_rgb(c.r, c.g, c.b, msg) - } -}