| 41 | } |
| 42 | |
| 43 | func (s *ansiState) ToString() string { |
| 44 | if !s.colored() { |
| 45 | return "" |
| 46 | } |
| 47 | |
| 48 | ret := "" |
| 49 | if s.attr&tui.Bold > 0 || s.attr&tui.BoldForce > 0 { |
| 50 | ret += "1;" |
| 51 | } |
| 52 | if s.attr&tui.Dim > 0 { |
| 53 | ret += "2;" |
| 54 | } |
| 55 | if s.attr&tui.Italic > 0 { |
| 56 | ret += "3;" |
| 57 | } |
| 58 | if s.attr&tui.Underline > 0 { |
| 59 | switch s.attr.UnderlineStyle() { |
| 60 | case tui.UlStyleDouble: |
| 61 | ret += "4:2;" |
| 62 | case tui.UlStyleCurly: |
| 63 | ret += "4:3;" |
| 64 | case tui.UlStyleDotted: |
| 65 | ret += "4:4;" |
| 66 | case tui.UlStyleDashed: |
| 67 | ret += "4:5;" |
| 68 | default: |
| 69 | ret += "4;" |
| 70 | } |
| 71 | } |
| 72 | if s.attr&tui.Blink > 0 { |
| 73 | ret += "5;" |
| 74 | } |
| 75 | if s.attr&tui.Reverse > 0 { |
| 76 | ret += "7;" |
| 77 | } |
| 78 | if s.attr&tui.StrikeThrough > 0 { |
| 79 | ret += "9;" |
| 80 | } |
| 81 | ret += toAnsiString(s.fg, 30) + toAnsiString(s.bg, 40) |
| 82 | if s.ul != -1 { |
| 83 | ret += toAnsiStringUl(s.ul) |
| 84 | } |
| 85 | |
| 86 | ret = "\x1b[" + strings.TrimSuffix(ret, ";") + "m" |
| 87 | if s.url != nil { |
| 88 | ret = fmt.Sprintf("\x1b]8;%s;%s\x1b\\%s\x1b]8;;\x1b", s.url.params, s.url.uri, ret) |
| 89 | } |
| 90 | return ret |
| 91 | } |
| 92 | |
| 93 | func toAnsiStringUl(color tui.Color) string { |
| 94 | col := int(color) |