123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- package style
- import (
- "servitor/ansi"
- "strconv"
- "strings"
- "servitor/config"
- )
- func background(text string, rgb string) string {
- prefix := "48;2;" + rgb
- return ansi.Apply(text, prefix)
- }
- func foreground(text string, rgb string) string {
- prefix := "38;2;" + rgb
- return ansi.Apply(text, prefix)
- }
- func Bold(text string) string {
- return ansi.Apply(text, "1")
- }
- func Strikethrough(text string) string {
- return ansi.Apply(text, "9")
- }
- func Underline(text string) string {
- return ansi.Apply(text, "4")
- }
- func Italic(text string) string {
- return ansi.Apply(text, "3")
- }
- func Code(text string) string {
- return background(text, config.Parsed.Style.Colors.Code)
- }
- func Highlight(text string) string {
- return background(text, config.Parsed.Style.Colors.Highlight)
- }
- func Color(text string) string {
- return foreground(text, config.Parsed.Style.Colors.Primary)
- }
- func Problem(issue error) string {
- return Red(issue.Error())
- }
- func Red(text string) string {
- return foreground(text, config.Parsed.Style.Colors.Error)
- }
- func Link(text string, number int) string {
- return Color(Underline(text) + superscript(number))
- }
- func CodeBlock(text string) string {
- return Code(text)
- }
- func QuoteBlock(text string) string {
- prefixed := ansi.Indent(text, "▌", true)
- return Color(prefixed)
- }
- func LinkBlock(text string, number int) string {
- return "‣ " + ansi.Indent(Link(text, number), " ", false)
- }
- func Header(text string, level uint) string {
- indented := ansi.Indent(text, strings.Repeat(" ", int(level+1)), false)
- withPrefix := strings.Repeat("⯁", int(level)) + " " + indented
- return Color(Bold(withPrefix))
- }
- func Bullet(text string) string {
- return "• " + ansi.Indent(text, " ", false)
- }
- func superscript(value int) string {
- text := strconv.Itoa(value)
- return strings.Map(func(input rune) rune {
- switch input {
- case '0':
- return '\u2070'
- case '1':
- return '\u00B9'
- case '2':
- return '\u00B2'
- case '3':
- return '\u00B3'
- case '4':
- return '\u2074'
- case '5':
- return '\u2075'
- case '6':
- return '\u2076'
- case '7':
- return '\u2077'
- case '8':
- return '\u2078'
- case '9':
- return '\u2079'
- default:
- panic("can't superscript non-digit")
- }
- }, text)
- }
|