...
1
2
3 package winterm
4
5 import "github.com/Azure/go-ansiterm"
6
7 const (
8 FOREGROUND_COLOR_MASK = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE
9 BACKGROUND_COLOR_MASK = BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE
10 )
11
12
13
14 func collectAnsiIntoWindowsAttributes(windowsMode uint16, inverted bool, baseMode uint16, ansiMode int16) (uint16, bool) {
15 switch ansiMode {
16
17
18 case ansiterm.ANSI_SGR_BOLD:
19 windowsMode = windowsMode | FOREGROUND_INTENSITY
20
21 case ansiterm.ANSI_SGR_DIM, ansiterm.ANSI_SGR_BOLD_DIM_OFF:
22 windowsMode &^= FOREGROUND_INTENSITY
23
24 case ansiterm.ANSI_SGR_UNDERLINE:
25 windowsMode = windowsMode | COMMON_LVB_UNDERSCORE
26
27 case ansiterm.ANSI_SGR_REVERSE:
28 inverted = true
29
30 case ansiterm.ANSI_SGR_REVERSE_OFF:
31 inverted = false
32
33 case ansiterm.ANSI_SGR_UNDERLINE_OFF:
34 windowsMode &^= COMMON_LVB_UNDERSCORE
35
36
37 case ansiterm.ANSI_SGR_FOREGROUND_DEFAULT:
38 windowsMode = (windowsMode &^ FOREGROUND_MASK) | (baseMode & FOREGROUND_MASK)
39
40 case ansiterm.ANSI_SGR_FOREGROUND_BLACK:
41 windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK)
42
43 case ansiterm.ANSI_SGR_FOREGROUND_RED:
44 windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED
45
46 case ansiterm.ANSI_SGR_FOREGROUND_GREEN:
47 windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_GREEN
48
49 case ansiterm.ANSI_SGR_FOREGROUND_YELLOW:
50 windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED | FOREGROUND_GREEN
51
52 case ansiterm.ANSI_SGR_FOREGROUND_BLUE:
53 windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_BLUE
54
55 case ansiterm.ANSI_SGR_FOREGROUND_MAGENTA:
56 windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED | FOREGROUND_BLUE
57
58 case ansiterm.ANSI_SGR_FOREGROUND_CYAN:
59 windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_GREEN | FOREGROUND_BLUE
60
61 case ansiterm.ANSI_SGR_FOREGROUND_WHITE:
62 windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE
63
64
65 case ansiterm.ANSI_SGR_BACKGROUND_DEFAULT:
66
67 windowsMode = (windowsMode &^ BACKGROUND_MASK) | (baseMode & BACKGROUND_MASK)
68
69 case ansiterm.ANSI_SGR_BACKGROUND_BLACK:
70 windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK)
71
72 case ansiterm.ANSI_SGR_BACKGROUND_RED:
73 windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED
74
75 case ansiterm.ANSI_SGR_BACKGROUND_GREEN:
76 windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_GREEN
77
78 case ansiterm.ANSI_SGR_BACKGROUND_YELLOW:
79 windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED | BACKGROUND_GREEN
80
81 case ansiterm.ANSI_SGR_BACKGROUND_BLUE:
82 windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_BLUE
83
84 case ansiterm.ANSI_SGR_BACKGROUND_MAGENTA:
85 windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED | BACKGROUND_BLUE
86
87 case ansiterm.ANSI_SGR_BACKGROUND_CYAN:
88 windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_GREEN | BACKGROUND_BLUE
89
90 case ansiterm.ANSI_SGR_BACKGROUND_WHITE:
91 windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE
92 }
93
94 return windowsMode, inverted
95 }
96
97
98 func invertAttributes(windowsMode uint16) uint16 {
99 return (COMMON_LVB_MASK & windowsMode) | ((FOREGROUND_MASK & windowsMode) << 4) | ((BACKGROUND_MASK & windowsMode) >> 4)
100 }
101
View as plain text