color.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package door
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func Color(arg ...int) string {
  7. var result string = "\x1b["
  8. for i := range arg {
  9. result += fmt.Sprintf("%d;", arg[i])
  10. }
  11. result = result[:len(result)-1]
  12. result += "m"
  13. return result
  14. }
  15. func ColorText(color string) string {
  16. // split on spaces, uppercase, match first 3 letter
  17. var result []int
  18. var bg bool
  19. result = append(result, 0)
  20. parts := strings.Fields(strings.ToUpper(color))
  21. for _, part := range parts {
  22. switch part {
  23. case "BLACK", "BLA":
  24. if bg {
  25. result = append(result, 40)
  26. } else {
  27. result = append(result, 30)
  28. }
  29. case "RED":
  30. if bg {
  31. result = append(result, 41)
  32. } else {
  33. result = append(result, 31)
  34. }
  35. case "GREEN", "GRE":
  36. if bg {
  37. result = append(result, 42)
  38. } else {
  39. result = append(result, 32)
  40. }
  41. case "BROWN", "BRO":
  42. if bg {
  43. result = append(result, 43)
  44. } else {
  45. result = append(result, 33)
  46. }
  47. case "YELLOW", "YEL":
  48. if bg {
  49. result = append(result, 43)
  50. } else {
  51. result = append(result, 33)
  52. }
  53. case "BLUE", "BLU":
  54. if bg {
  55. result = append(result, 44)
  56. } else {
  57. result = append(result, 34)
  58. }
  59. case "MAGENTA", "MAG":
  60. if bg {
  61. result = append(result, 45)
  62. } else {
  63. result = append(result, 35)
  64. }
  65. case "CYAN", "CYA":
  66. if bg {
  67. result = append(result, 46)
  68. } else {
  69. result = append(result, 36)
  70. }
  71. case "WHITE", "WHI":
  72. if bg {
  73. result = append(result, 47)
  74. } else {
  75. result = append(result, 37)
  76. }
  77. case "BOLD", "BOL", "BRIGHT", "BRI":
  78. result = append(result, 1)
  79. case "ON":
  80. bg = true
  81. case "BLINK", "BLI":
  82. result = append(result, 5)
  83. case "INVERT", "INVERSE", "INV":
  84. result = append(result, 7)
  85. default:
  86. fmt.Println("ColorText Unknown:", part)
  87. }
  88. }
  89. // fmt.Println("ColorText:", result)
  90. return Color(result...)
  91. }