summaryrefslogtreecommitdiff
path: root/vendor/github.com/Azure/go-ansiterm/constants.go
blob: 96504a33bc9ece527eb46534a496ff0f9a40ec8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
package ansiterm

const LogEnv = "DEBUG_TERMINAL"

// ANSI constants
// References:
// -- http://www.ecma-international.org/publications/standards/Ecma-048.htm
// -- http://man7.org/linux/man-pages/man4/console_codes.4.html
// -- http://manpages.ubuntu.com/manpages/intrepid/man4/console_codes.4.html
// -- http://en.wikipedia.org/wiki/ANSI_escape_code
// -- http://vt100.net/emu/dec_ansi_parser
// -- http://vt100.net/emu/vt500_parser.svg
// -- http://invisible-island.net/xterm/ctlseqs/ctlseqs.html
// -- http://www.inwap.com/pdp10/ansicode.txt
const (
	// ECMA-48 Set Graphics Rendition
	// Note:
	// -- Constants leading with an underscore (e.g., _ANSI_xxx) are unsupported or reserved
	// -- Fonts could possibly be supported via SetCurrentConsoleFontEx
	// -- Windows does not expose the per-window cursor (i.e., caret) blink times
	ANSI_SGR_RESET              = 0
	ANSI_SGR_BOLD               = 1
	ANSI_SGR_DIM                = 2
	_ANSI_SGR_ITALIC            = 3
	ANSI_SGR_UNDERLINE          = 4
	_ANSI_SGR_BLINKSLOW         = 5
	_ANSI_SGR_BLINKFAST         = 6
	ANSI_SGR_REVERSE            = 7
	_ANSI_SGR_INVISIBLE         = 8
	_ANSI_SGR_LINETHROUGH       = 9
	_ANSI_SGR_FONT_00           = 10
	_ANSI_SGR_FONT_01           = 11
	_ANSI_SGR_FONT_02           = 12
	_ANSI_SGR_FONT_03           = 13
	_ANSI_SGR_FONT_04           = 14
	_ANSI_SGR_FONT_05           = 15
	_ANSI_SGR_FONT_06           = 16
	_ANSI_SGR_FONT_07           = 17
	_ANSI_SGR_FONT_08           = 18
	_ANSI_SGR_FONT_09           = 19
	_ANSI_SGR_FONT_10           = 20
	_ANSI_SGR_DOUBLEUNDERLINE   = 21
	ANSI_SGR_BOLD_DIM_OFF       = 22
	_ANSI_SGR_ITALIC_OFF        = 23
	ANSI_SGR_UNDERLINE_OFF      = 24
	_ANSI_SGR_BLINK_OFF         = 25
	_ANSI_SGR_RESERVED_00       = 26
	ANSI_SGR_REVERSE_OFF        = 27
	_ANSI_SGR_INVISIBLE_OFF     = 28
	_ANSI_SGR_LINETHROUGH_OFF   = 29
	ANSI_SGR_FOREGROUND_BLACK   = 30
	ANSI_SGR_FOREGROUND_RED     = 31
	ANSI_SGR_FOREGROUND_GREEN   = 32
	ANSI_SGR_FOREGROUND_YELLOW  = 33
	ANSI_SGR_FOREGROUND_BLUE    = 34
	ANSI_SGR_FOREGROUND_MAGENTA = 35
	ANSI_SGR_FOREGROUND_CYAN    = 36
	ANSI_SGR_FOREGROUND_WHITE   = 37
	_ANSI_SGR_RESERVED_01       = 38
	ANSI_SGR_FOREGROUND_DEFAULT = 39
	ANSI_SGR_BACKGROUND_BLACK   = 40
	ANSI_SGR_BACKGROUND_RED     = 41
	ANSI_SGR_BACKGROUND_GREEN   = 42
	ANSI_SGR_BACKGROUND_YELLOW  = 43
	ANSI_SGR_BACKGROUND_BLUE    = 44
	ANSI_SGR_BACKGROUND_MAGENTA = 45
	ANSI_SGR_BACKGROUND_CYAN    = 46
	ANSI_SGR_BACKGROUND_WHITE   = 47
	_ANSI_SGR_RESERVED_02       = 48
	ANSI_SGR_BACKGROUND_DEFAULT = 49
	// 50 - 65: Unsupported

	ANSI_MAX_CMD_LENGTH = 4096

	MAX_INPUT_EVENTS = 128
	DEFAULT_WIDTH    = 80
	DEFAULT_HEIGHT   = 24

	ANSI_BEL              = 0x07
	ANSI_BACKSPACE        = 0x08
	ANSI_TAB              = 0x09
	ANSI_LINE_FEED        = 0x0A
	ANSI_VERTICAL_TAB     = 0x0B
	ANSI_FORM_FEED        = 0x0C
	ANSI_CARRIAGE_RETURN  = 0x0D
	ANSI_ESCAPE_PRIMARY   = 0x1B
	ANSI_ESCAPE_SECONDARY = 0x5B
	ANSI_OSC_STRING_ENTRY = 0x5D
	ANSI_COMMAND_FIRST    = 0x40
	ANSI_COMMAND_LAST     = 0x7E
	DCS_ENTRY             = 0x90
	CSI_ENTRY             = 0x9B
	OSC_STRING            = 0x9D
	ANSI_PARAMETER_SEP    = ";"
	ANSI_CMD_G0           = '('
	ANSI_CMD_G1           = ')'
	ANSI_CMD_G2           = '*'
	ANSI_CMD_G3           = '+'
	ANSI_CMD_DECPNM       = '>'
	ANSI_CMD_DECPAM       = '='
	ANSI_CMD_OSC          = ']'
	ANSI_CMD_STR_TERM     = '\\'

	KEY_CONTROL_PARAM_2 = ";2"
	KEY_CONTROL_PARAM_3 = ";3"
	KEY_CONTROL_PARAM_4 = ";4"
	KEY_CONTROL_PARAM_5 = ";5"
	KEY_CONTROL_PARAM_6 = ";6"
	KEY_CONTROL_PARAM_7 = ";7"
	KEY_CONTROL_PARAM_8 = ";8"
	KEY_ESC_CSI         = "\x1B["
	KEY_ESC_N           = "\x1BN"
	KEY_ESC_O           = "\x1BO"

	FILL_CHARACTER = ' '
)

func getByteRange(start byte, end byte) []byte {
	bytes := make([]byte, 0, 32)
	for i := start; i <= end; i++ {
		bytes = append(bytes, byte(i))
	}

	return bytes
}

var toGroundBytes = getToGroundBytes()
var executors = getExecuteBytes()

// SPACE		  20+A0 hex  Always and everywhere a blank space
// Intermediate	  20-2F hex   !"#$%&'()*+,-./
var intermeds = getByteRange(0x20, 0x2F)

// Parameters	  30-3F hex  0123456789:;<=>?
// CSI Parameters 30-39, 3B hex 0123456789;
var csiParams = getByteRange(0x30, 0x3F)

var csiCollectables = append(getByteRange(0x30, 0x39), getByteRange(0x3B, 0x3F)...)

// Uppercase	  40-5F hex  @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
var upperCase = getByteRange(0x40, 0x5F)

// Lowercase	  60-7E hex  `abcdefghijlkmnopqrstuvwxyz{|}~
var lowerCase = getByteRange(0x60, 0x7E)

// Alphabetics	  40-7E hex  (all of upper and lower case)
var alphabetics = append(upperCase, lowerCase...)

var printables = getByteRange(0x20, 0x7F)

var escapeIntermediateToGroundBytes = getByteRange(0x30, 0x7E)
var escapeToGroundBytes = getEscapeToGroundBytes()

// See http://www.vt100.net/emu/vt500_parser.png for description of the complex
// byte ranges below

func getEscapeToGroundBytes() []byte {
	escapeToGroundBytes := getByteRange(0x30, 0x4F)
	escapeToGroundBytes = append(escapeToGroundBytes, getByteRange(0x51, 0x57)...)
	escapeToGroundBytes = append(escapeToGroundBytes, 0x59)
	escapeToGroundBytes = append(escapeToGroundBytes, 0x5A)
	escapeToGroundBytes = append(escapeToGroundBytes, 0x5C)
	escapeToGroundBytes = append(escapeToGroundBytes, getByteRange(0x60, 0x7E)...)
	return escapeToGroundBytes
}

func getExecuteBytes() []byte {
	executeBytes := getByteRange(0x00, 0x17)
	executeBytes = append(executeBytes, 0x19)
	executeBytes = append(executeBytes, getByteRange(0x1C, 0x1F)...)
	return executeBytes
}

func getToGroundBytes() []byte {
	groundBytes := []byte{0x18}
	groundBytes = append(groundBytes, 0x1A)
	groundBytes = append(groundBytes, getByteRange(0x80, 0x8F)...)
	groundBytes = append(groundBytes, getByteRange(0x91, 0x97)...)
	groundBytes = append(groundBytes, 0x99)
	groundBytes = append(groundBytes, 0x9A)
	groundBytes = append(groundBytes, 0x9C)
	return groundBytes
}

// Delete		     7F hex  Always and everywhere ignored
// C1 Control	  80-9F hex  32 additional control characters
// G1 Displayable A1-FE hex  94 additional displayable characters
// Special		  A0+FF hex  Same as SPACE and DELETE