ansi.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package richtext
  2. import (
  3. "os"
  4. "runtime"
  5. )
  6. type AnsiPalette (func(string) string)
  7. var defaultPalette = (func() AnsiPalette {
  8. if runtime.GOOS == "windows" {
  9. var _, is_mintty = os.LookupEnv("TERM")
  10. var _, is_wt = os.LookupEnv("WT_SESSION")
  11. if is_mintty || is_wt {
  12. return lightPalette
  13. } else {
  14. return nil
  15. }
  16. } else {
  17. return lightPalette
  18. }
  19. })()
  20. const bold = "\033[1m"
  21. const red = "\033[31m"
  22. const green = "\033[32m"
  23. const orange = "\033[33m"
  24. const blue = "\033[34m"
  25. const magenta = "\033[35m"
  26. const cyan = "\033[36m"
  27. const reset = "\033[0m"
  28. func LightPalette() AnsiPalette { return lightPalette }
  29. var lightPalette AnsiPalette = func(tag string) string {
  30. switch tag {
  31. case TAG_EM: return bold
  32. case TAG_HIGHLIGHT: return (bold + red)
  33. case TAG_ERR_NORMAL: return bold
  34. case TAG_ERR_INLINE: return (bold + red)
  35. case TAG_ERR_NOTE: return (bold + magenta)
  36. default: return ""
  37. }
  38. }
  39. func DarkPalette() AnsiPalette { return darkPalette }
  40. var darkPalette AnsiPalette = func(tag string) string {
  41. switch tag {
  42. case TAG_EM: return bold
  43. case TAG_HIGHLIGHT: return (bold + orange)
  44. case TAG_ERR_NORMAL: return bold
  45. case TAG_ERR_INLINE: return (bold + orange)
  46. case TAG_ERR_NOTE: return (bold + cyan)
  47. default: return ""
  48. }
  49. }