@ansi-tools/parser 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/escaped.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { APC, APC_OPEN, BACKSLASH, BELL, CODE, CODE_TYPES, CONTROL_CODE, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, OSC, OSC_OPEN, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, TEXT, TOKEN, TOKEN_TYPES, parser } from "./parse-
|
|
1
|
+
import { APC, APC_OPEN, BACKSLASH, BELL, C0_INTERRUPTERS, CAN, CODE, CODE_TYPES, CONTROL_CODE, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, INTERRUPTERS, OSC, OSC_OPEN, PARAM_SEPARATOR, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, SUB, TEXT, TOKEN, TOKEN_TYPES, parser } from "./parse-BLVd8fU0.js";
|
|
2
2
|
|
|
3
3
|
//#region src/parse.escaped.d.ts
|
|
4
4
|
declare function parse(input: string): CODE[];
|
|
@@ -7,4 +7,4 @@ declare function parse(input: string): CODE[];
|
|
|
7
7
|
declare function tokenizer(input: string): Generator<TOKEN>;
|
|
8
8
|
declare function tokenize(input: string): TOKEN[];
|
|
9
9
|
//#endregion
|
|
10
|
-
export { APC, APC_OPEN, BACKSLASH, BELL, CODE, CODE_TYPES, CONTROL_CODE, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, OSC, OSC_OPEN, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, TEXT, TOKEN, TOKEN_TYPES, parse, parser, tokenize, tokenizer };
|
|
10
|
+
export { APC, APC_OPEN, BACKSLASH, BELL, C0_INTERRUPTERS, CAN, CODE, CODE_TYPES, CONTROL_CODE, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, INTERRUPTERS, OSC, OSC_OPEN, PARAM_SEPARATOR, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, SUB, TEXT, TOKEN, TOKEN_TYPES, parse, parser, tokenize, tokenizer };
|
package/dist/escaped.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { APC, APC_OPEN, BACKSLASH, BELL, CODE_TYPES, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, OSC, OSC_OPEN, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, TOKEN_TYPES, parser } from "./parse-
|
|
1
|
+
import { APC, APC_OPEN, BACKSLASH, BELL, C0_INTERRUPTERS, CAN, CODE_TYPES, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, INTERRUPTERS, OSC, OSC_OPEN, PARAM_SEPARATOR, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, SUB, TOKEN_TYPES, parser } from "./parse-DmFIqYg6.js";
|
|
2
2
|
|
|
3
3
|
//#region src/tokenize.escaped.ts
|
|
4
4
|
const CSI_ESCAPED = "\\u009b";
|
|
@@ -10,6 +10,18 @@ const INTRODUCERS = [
|
|
|
10
10
|
["\\033", 4],
|
|
11
11
|
["\\e", 2]
|
|
12
12
|
];
|
|
13
|
+
const INTERRUPTERS_ESCAPED = [
|
|
14
|
+
["\\x18", 4],
|
|
15
|
+
["\\x1a", 4],
|
|
16
|
+
["\\u0018", 6],
|
|
17
|
+
["\\u001a", 6]
|
|
18
|
+
];
|
|
19
|
+
const INTERRUPTER_LOOKUP = /* @__PURE__ */ new Map();
|
|
20
|
+
for (const [sequence, len] of INTERRUPTERS_ESCAPED) {
|
|
21
|
+
const secondChar = sequence[1];
|
|
22
|
+
if (!INTERRUPTER_LOOKUP.has(secondChar)) INTERRUPTER_LOOKUP.set(secondChar, []);
|
|
23
|
+
INTERRUPTER_LOOKUP.get(secondChar)?.push([sequence, len]);
|
|
24
|
+
}
|
|
13
25
|
const INTRODUCER_LOOKUP = /* @__PURE__ */ new Map();
|
|
14
26
|
const INTRODUCER_FIRST_CHAR_CACHE = /* @__PURE__ */ new Map();
|
|
15
27
|
for (const [sequence, len] of INTRODUCERS) {
|
|
@@ -150,8 +162,27 @@ function* tokenizer(input) {
|
|
|
150
162
|
while (!terminator && i < l) {
|
|
151
163
|
const char = input[i];
|
|
152
164
|
if (char === BACKSLASH) {
|
|
165
|
+
const next = input[i + 1];
|
|
166
|
+
if (next) {
|
|
167
|
+
const interrupters = INTERRUPTER_LOOKUP.get(next);
|
|
168
|
+
if (interrupters) {
|
|
169
|
+
for (const [seq, len] of interrupters) if (i + len <= l) {
|
|
170
|
+
let matched = true;
|
|
171
|
+
for (let k = 0; k < len; k++) if (input[i + k] !== seq[k]) {
|
|
172
|
+
matched = false;
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
if (matched) {
|
|
176
|
+
terminator = ABANDONED;
|
|
177
|
+
terminatorPos = i;
|
|
178
|
+
i += len;
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (terminator) break;
|
|
153
185
|
if (code !== CSI && code !== ESC) {
|
|
154
|
-
const next = input[i + 1];
|
|
155
186
|
if (next === "a" && i + 2 <= l) {
|
|
156
187
|
if (code === OSC && input[i + 1] === "a") {
|
|
157
188
|
terminator = "\\a";
|
|
@@ -191,7 +222,6 @@ function* tokenizer(input) {
|
|
|
191
222
|
}
|
|
192
223
|
}
|
|
193
224
|
if (!terminator) {
|
|
194
|
-
const next = input[i + 1];
|
|
195
225
|
if (next) {
|
|
196
226
|
const candidates = INTRODUCER_LOOKUP.get(next);
|
|
197
227
|
if (candidates) for (const [seq, len] of candidates) {
|
|
@@ -250,4 +280,4 @@ function parse(input) {
|
|
|
250
280
|
}
|
|
251
281
|
|
|
252
282
|
//#endregion
|
|
253
|
-
export { APC, APC_OPEN, BACKSLASH, BELL, CODE_TYPES, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, OSC, OSC_OPEN, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, TOKEN_TYPES, parse, parser, tokenize, tokenizer };
|
|
283
|
+
export { APC, APC_OPEN, BACKSLASH, BELL, C0_INTERRUPTERS, CAN, CODE_TYPES, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, INTERRUPTERS, OSC, OSC_OPEN, PARAM_SEPARATOR, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, SUB, TOKEN_TYPES, parse, parser, tokenize, tokenizer };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { APC, APC_OPEN, BACKSLASH, BELL, CODE, CODE_TYPES, CONTROL_CODE, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, OSC, OSC_OPEN, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, TEXT, TOKEN, TOKEN_TYPES, parse, parser } from "./parse-
|
|
1
|
+
import { APC, APC_OPEN, BACKSLASH, BELL, C0_INTERRUPTERS, CAN, CODE, CODE_TYPES, CONTROL_CODE, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, INTERRUPTERS, OSC, OSC_OPEN, PARAM_SEPARATOR, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, SUB, TEXT, TOKEN, TOKEN_TYPES, parse, parser } from "./parse-BLVd8fU0.js";
|
|
2
2
|
|
|
3
3
|
//#region src/tokenize.d.ts
|
|
4
4
|
declare function tokenizer(input: string): Generator<TOKEN>;
|
|
5
5
|
declare function tokenize(input: string): TOKEN[];
|
|
6
6
|
//#endregion
|
|
7
|
-
export { APC, APC_OPEN, BACKSLASH, BELL, CODE, CODE_TYPES, CONTROL_CODE, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, OSC, OSC_OPEN, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, TEXT, TOKEN, TOKEN_TYPES, parse, parser, tokenize, tokenizer };
|
|
7
|
+
export { APC, APC_OPEN, BACKSLASH, BELL, C0_INTERRUPTERS, CAN, CODE, CODE_TYPES, CONTROL_CODE, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, INTERRUPTERS, OSC, OSC_OPEN, PARAM_SEPARATOR, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, SUB, TEXT, TOKEN, TOKEN_TYPES, parse, parser, tokenize, tokenizer };
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { APC, APC_OPEN, BACKSLASH, BELL, CODE_TYPES, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, OSC, OSC_OPEN, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, TOKEN_TYPES, parse, parser, tokenize, tokenizer } from "./parse-
|
|
1
|
+
import { APC, APC_OPEN, BACKSLASH, BELL, C0_INTERRUPTERS, CAN, CODE_TYPES, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, INTERRUPTERS, OSC, OSC_OPEN, PARAM_SEPARATOR, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, SUB, TOKEN_TYPES, parse, parser, tokenize, tokenizer } from "./parse-DmFIqYg6.js";
|
|
2
2
|
|
|
3
|
-
export { APC, APC_OPEN, BACKSLASH, BELL, CODE_TYPES, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, OSC, OSC_OPEN, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, TOKEN_TYPES, parse, parser, tokenize, tokenizer };
|
|
3
|
+
export { APC, APC_OPEN, BACKSLASH, BELL, C0_INTERRUPTERS, CAN, CODE_TYPES, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, INTERRUPTERS, OSC, OSC_OPEN, PARAM_SEPARATOR, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, SUB, TOKEN_TYPES, parse, parser, tokenize, tokenizer };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
//#region src/constants.d.ts
|
|
2
2
|
declare const BELL: string;
|
|
3
|
+
declare const CAN: string;
|
|
4
|
+
declare const SUB: string;
|
|
3
5
|
declare const ESC: string;
|
|
4
6
|
declare const BACKSLASH: string;
|
|
5
7
|
declare const DCS: string;
|
|
@@ -18,6 +20,9 @@ declare const APC_OPEN = "_";
|
|
|
18
20
|
declare const SOS_OPEN = "^";
|
|
19
21
|
declare const PM_OPEN = "X";
|
|
20
22
|
declare const STRING_OPENERS: Set<string>;
|
|
23
|
+
declare const INTERRUPTERS: Set<string>;
|
|
24
|
+
declare const C0_INTERRUPTERS: Set<string>;
|
|
25
|
+
declare const PARAM_SEPARATOR: RegExp;
|
|
21
26
|
declare const TOKEN_TYPES: {
|
|
22
27
|
readonly TEXT: "TEXT";
|
|
23
28
|
readonly INTRODUCER: "INTRODUCER";
|
|
@@ -44,8 +49,9 @@ type TOKEN = {
|
|
|
44
49
|
code?: string;
|
|
45
50
|
intermediate?: string;
|
|
46
51
|
};
|
|
52
|
+
type CONTROL_CODE_TYPE = Exclude<keyof typeof CODE_TYPES, TEXT["type"]>;
|
|
47
53
|
type CONTROL_CODE = {
|
|
48
|
-
type:
|
|
54
|
+
type: CONTROL_CODE_TYPE;
|
|
49
55
|
command: string;
|
|
50
56
|
raw: string;
|
|
51
57
|
params: string[];
|
|
@@ -62,4 +68,4 @@ type CODE = CONTROL_CODE | TEXT;
|
|
|
62
68
|
declare function parser(tokens: Generator<TOKEN>): Generator<CODE>;
|
|
63
69
|
declare function parse(input: string): CODE[];
|
|
64
70
|
//#endregion
|
|
65
|
-
export { APC, APC_OPEN, BACKSLASH, BELL, CODE, CODE_TYPES, CONTROL_CODE, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, OSC, OSC_OPEN, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, TEXT, TOKEN, TOKEN_TYPES, parse, parser };
|
|
71
|
+
export { APC, APC_OPEN, BACKSLASH, BELL, C0_INTERRUPTERS, CAN, CODE, CODE_TYPES, CONTROL_CODE, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, INTERRUPTERS, OSC, OSC_OPEN, PARAM_SEPARATOR, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, SUB, TEXT, TOKEN, TOKEN_TYPES, parse, parser };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
//#region src/constants.ts
|
|
2
2
|
const BELL = String.fromCharCode(7);
|
|
3
|
+
const CAN = String.fromCharCode(24);
|
|
4
|
+
const SUB = String.fromCharCode(26);
|
|
3
5
|
const ESC = String.fromCharCode(27);
|
|
4
6
|
const BACKSLASH = String.fromCharCode(92);
|
|
5
7
|
const DCS = String.fromCharCode(144);
|
|
@@ -27,6 +29,19 @@ const STRING_OPENERS = new Set([
|
|
|
27
29
|
SOS_OPEN,
|
|
28
30
|
PM_OPEN
|
|
29
31
|
]);
|
|
32
|
+
const INTERRUPTERS = new Set([
|
|
33
|
+
CAN,
|
|
34
|
+
SUB,
|
|
35
|
+
ESC,
|
|
36
|
+
CSI,
|
|
37
|
+
OSC,
|
|
38
|
+
DCS,
|
|
39
|
+
APC,
|
|
40
|
+
PM,
|
|
41
|
+
SOS
|
|
42
|
+
]);
|
|
43
|
+
const C0_INTERRUPTERS = new Set([CAN, SUB]);
|
|
44
|
+
const PARAM_SEPARATOR = /[;:]/;
|
|
30
45
|
const TOKEN_TYPES = {
|
|
31
46
|
TEXT: "TEXT",
|
|
32
47
|
INTRODUCER: "INTRODUCER",
|
|
@@ -49,51 +64,57 @@ const CODE_TYPES = {
|
|
|
49
64
|
//#region src/parsers/csi.ts
|
|
50
65
|
function parseCSI(introducer, dataTokens, final) {
|
|
51
66
|
const data = dataTokens.map((t) => t.raw).join("");
|
|
52
|
-
const raw = introducer.raw + data + final
|
|
67
|
+
const raw = introducer.raw + data + (final?.raw || "");
|
|
53
68
|
const params = [];
|
|
69
|
+
let type = CODE_TYPES.CSI;
|
|
54
70
|
let intermediates = "";
|
|
71
|
+
let paramSection = "";
|
|
55
72
|
if (data) {
|
|
56
73
|
let i = 0;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
74
|
+
while (i < data.length) {
|
|
75
|
+
const charCode = data.charCodeAt(i);
|
|
76
|
+
if (charCode >= 48 && charCode <= 63) {
|
|
77
|
+
paramSection += data[i];
|
|
78
|
+
i++;
|
|
79
|
+
} else break;
|
|
61
80
|
}
|
|
62
81
|
intermediates = data.slice(i);
|
|
63
|
-
if (paramSection) {
|
|
64
|
-
const parts = paramSection.replace(/:/g, ";").split(";");
|
|
65
|
-
for (const part of parts) params.push(part || "-1");
|
|
66
|
-
}
|
|
67
82
|
}
|
|
83
|
+
if (paramSection) for (const part of paramSection.split(PARAM_SEPARATOR)) params.push(part || "0");
|
|
68
84
|
const command = intermediates + (final?.raw ?? "");
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const withoutIndicator = data.slice(1);
|
|
82
|
-
const match = withoutIndicator.match(/^([\d;:]*)(.*)/);
|
|
83
|
-
const paramsRaw = match?.[1] ?? "";
|
|
84
|
-
const intermediates = match?.[2] ?? "";
|
|
85
|
-
const command = `${privateIndicator}${intermediates}${finalToken.raw}`;
|
|
86
|
-
const params = [];
|
|
87
|
-
if (paramsRaw) {
|
|
88
|
-
let current = "";
|
|
89
|
-
for (let i = 0; i < paramsRaw.length; i++) if (paramsRaw[i] === ";") {
|
|
90
|
-
params.push(current || "-1");
|
|
91
|
-
current = "";
|
|
92
|
-
} else current += paramsRaw[i];
|
|
93
|
-
params.push(current || "-1");
|
|
85
|
+
const start = params[0];
|
|
86
|
+
if (start?.startsWith("?")) {
|
|
87
|
+
type = CODE_TYPES.DEC;
|
|
88
|
+
if (start.length > 1) params[0] = start.slice(1);
|
|
89
|
+
else params.shift();
|
|
90
|
+
return {
|
|
91
|
+
type,
|
|
92
|
+
pos: introducer.pos,
|
|
93
|
+
raw,
|
|
94
|
+
command,
|
|
95
|
+
params
|
|
96
|
+
};
|
|
94
97
|
}
|
|
98
|
+
for (const param of params) if (param && param.length > 0 && PRIVATE_OPENERS.has(param[0])) {
|
|
99
|
+
type = CODE_TYPES.PRIVATE;
|
|
100
|
+
const privateCommand = param[0] + command;
|
|
101
|
+
for (let i = 0; i < params.length; i++) if (params[i] && params[i].length > 0 && PRIVATE_OPENERS.has(params[i][0])) {
|
|
102
|
+
if (params[i].length > 1) params[i] = params[i].slice(1);
|
|
103
|
+
else params.splice(i, 1);
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
type,
|
|
108
|
+
pos: introducer.pos,
|
|
109
|
+
raw,
|
|
110
|
+
command: privateCommand,
|
|
111
|
+
params
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
if (command === "m" && params.length === 5 && params[1] === "2" && (start === "38" || start === "48")) params.splice(2, 0, "0");
|
|
115
|
+
if (command === "r" && params.length === 2 && params[1] === "0") params[1] = "-1";
|
|
95
116
|
return {
|
|
96
|
-
type
|
|
117
|
+
type,
|
|
97
118
|
pos: introducer.pos,
|
|
98
119
|
raw,
|
|
99
120
|
command,
|
|
@@ -123,14 +144,7 @@ function parseDCS(introducer, dataTokens, final) {
|
|
|
123
144
|
for (const [pattern, length] of DCS_PATTERNS) if (data.startsWith(pattern)) {
|
|
124
145
|
const remainder = data.slice(length);
|
|
125
146
|
const params = [];
|
|
126
|
-
if (remainder)
|
|
127
|
-
let current = "";
|
|
128
|
-
for (let i = 0; i < remainder.length; i++) if (remainder[i] === ";") {
|
|
129
|
-
params.push(current || "-1");
|
|
130
|
-
current = "";
|
|
131
|
-
} else current += remainder[i];
|
|
132
|
-
params.push(current || "-1");
|
|
133
|
-
}
|
|
147
|
+
if (remainder) for (const part of remainder.split(PARAM_SEPARATOR)) params.push(part || "-1");
|
|
134
148
|
return {
|
|
135
149
|
type: CODE_TYPES.DCS,
|
|
136
150
|
pos: introducer.pos,
|
|
@@ -148,41 +162,11 @@ function parseDCS(introducer, dataTokens, final) {
|
|
|
148
162
|
};
|
|
149
163
|
}
|
|
150
164
|
|
|
151
|
-
//#endregion
|
|
152
|
-
//#region src/parsers/dec.ts
|
|
153
|
-
function parseDEC(introducer, dataTokens, final) {
|
|
154
|
-
const data = dataTokens.map((t) => t.raw).join("");
|
|
155
|
-
const raw = introducer.raw + data + final.raw;
|
|
156
|
-
let i = 0;
|
|
157
|
-
let paramsRaw = "";
|
|
158
|
-
while (i < data.length && data.charCodeAt(i) >= 48 && data.charCodeAt(i) <= 63) {
|
|
159
|
-
paramsRaw += data[i];
|
|
160
|
-
i++;
|
|
161
|
-
}
|
|
162
|
-
const command = data.slice(i) + final.raw;
|
|
163
|
-
const params = [];
|
|
164
|
-
if (paramsRaw) {
|
|
165
|
-
let current = "";
|
|
166
|
-
for (let j = 0; j < paramsRaw.length; j++) if (paramsRaw[j] === ";") {
|
|
167
|
-
params.push(current || "-1");
|
|
168
|
-
current = "";
|
|
169
|
-
} else current += paramsRaw[j];
|
|
170
|
-
params.push(current || "-1");
|
|
171
|
-
}
|
|
172
|
-
return {
|
|
173
|
-
type: CODE_TYPES.DEC,
|
|
174
|
-
pos: introducer.pos,
|
|
175
|
-
raw,
|
|
176
|
-
command,
|
|
177
|
-
params
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
|
|
181
165
|
//#endregion
|
|
182
166
|
//#region src/parsers/esc.ts
|
|
183
167
|
function parseESC(introducer, dataTokens, final) {
|
|
184
168
|
const data = dataTokens.map((t) => t.raw).join("");
|
|
185
|
-
const command = introducer.intermediate || (dataTokens[0]?.raw ?? final?.raw);
|
|
169
|
+
const command = introducer.intermediate || (dataTokens[0]?.raw ?? final?.raw ?? "");
|
|
186
170
|
const params = introducer.intermediate ? final?.raw ? [final.raw] : [] : [];
|
|
187
171
|
const raw = introducer.raw + data + (final?.raw ?? "");
|
|
188
172
|
return {
|
|
@@ -198,7 +182,7 @@ function parseESC(introducer, dataTokens, final) {
|
|
|
198
182
|
//#region src/parsers/osc.ts
|
|
199
183
|
function parseOSC(introducer, dataTokens, final) {
|
|
200
184
|
const data = dataTokens.map((t) => t.raw).join("");
|
|
201
|
-
const raw = introducer.raw + data + final
|
|
185
|
+
const raw = introducer.raw + data + (final?.raw || "");
|
|
202
186
|
const semicolonIndex = data.indexOf(";");
|
|
203
187
|
if (semicolonIndex === -1) return {
|
|
204
188
|
type: CODE_TYPES.OSC,
|
|
@@ -238,7 +222,7 @@ function parseOSC(introducer, dataTokens, final) {
|
|
|
238
222
|
//#region src/parsers/apc.ts
|
|
239
223
|
function parseAPC(introducer, dataTokens, final) {
|
|
240
224
|
const data = dataTokens.map((t) => t.raw).join("");
|
|
241
|
-
const raw = introducer.raw + data + final
|
|
225
|
+
const raw = introducer.raw + data + (final?.raw || "");
|
|
242
226
|
return {
|
|
243
227
|
type: CODE_TYPES.STRING,
|
|
244
228
|
pos: introducer.pos,
|
|
@@ -252,7 +236,7 @@ function parseAPC(introducer, dataTokens, final) {
|
|
|
252
236
|
//#region src/parsers/pm.ts
|
|
253
237
|
function parsePM(introducer, dataTokens, final) {
|
|
254
238
|
const data = dataTokens.map((t) => t.raw).join("");
|
|
255
|
-
const raw = introducer.raw + data + final
|
|
239
|
+
const raw = introducer.raw + data + (final?.raw || "");
|
|
256
240
|
return {
|
|
257
241
|
type: CODE_TYPES.STRING,
|
|
258
242
|
pos: introducer.pos,
|
|
@@ -266,7 +250,7 @@ function parsePM(introducer, dataTokens, final) {
|
|
|
266
250
|
//#region src/parsers/sos.ts
|
|
267
251
|
function parseSOS(introducer, dataTokens, final) {
|
|
268
252
|
const data = dataTokens.map((t) => t.raw).join("");
|
|
269
|
-
const raw = introducer.raw + data + final
|
|
253
|
+
const raw = introducer.raw + data + (final?.raw || "");
|
|
270
254
|
return {
|
|
271
255
|
type: CODE_TYPES.STRING,
|
|
272
256
|
pos: introducer.pos,
|
|
@@ -380,13 +364,14 @@ function* tokenizer(input) {
|
|
|
380
364
|
let data = "";
|
|
381
365
|
if (code === CSI) while (i < input.length) {
|
|
382
366
|
const char = input[i];
|
|
383
|
-
if (
|
|
367
|
+
if (INTERRUPTERS.has(char)) {
|
|
384
368
|
if (data) yield emit$1({
|
|
385
369
|
type: TOKEN_TYPES.DATA,
|
|
386
370
|
pos,
|
|
387
371
|
raw: data
|
|
388
372
|
});
|
|
389
373
|
setState("GROUND");
|
|
374
|
+
if (C0_INTERRUPTERS.has(char)) i++;
|
|
390
375
|
break;
|
|
391
376
|
}
|
|
392
377
|
const charCode = char.charCodeAt(0);
|
|
@@ -411,8 +396,10 @@ function* tokenizer(input) {
|
|
|
411
396
|
else if (code === ESC) {
|
|
412
397
|
if (i < input.length) {
|
|
413
398
|
const char = input[i];
|
|
414
|
-
if (
|
|
415
|
-
|
|
399
|
+
if (INTERRUPTERS.has(char)) {
|
|
400
|
+
setState("GROUND");
|
|
401
|
+
if (C0_INTERRUPTERS.has(char)) i++;
|
|
402
|
+
} else {
|
|
416
403
|
yield emit$1({
|
|
417
404
|
type: TOKEN_TYPES.FINAL,
|
|
418
405
|
pos: i,
|
|
@@ -443,13 +430,14 @@ function* tokenizer(input) {
|
|
|
443
430
|
setState("GROUND");
|
|
444
431
|
break;
|
|
445
432
|
}
|
|
446
|
-
if (
|
|
433
|
+
if (INTERRUPTERS.has(char)) {
|
|
447
434
|
if (data) yield emit$1({
|
|
448
435
|
type: TOKEN_TYPES.DATA,
|
|
449
436
|
pos,
|
|
450
437
|
raw: data
|
|
451
438
|
});
|
|
452
439
|
setState("GROUND");
|
|
440
|
+
if (C0_INTERRUPTERS.has(char)) i++;
|
|
453
441
|
break;
|
|
454
442
|
}
|
|
455
443
|
data += char;
|
|
@@ -493,13 +481,12 @@ function* parser(tokens) {
|
|
|
493
481
|
current = tokens.next();
|
|
494
482
|
break;
|
|
495
483
|
} else if (nextToken.type === TOKEN_TYPES.INTRODUCER) break;
|
|
484
|
+
else if (nextToken.type === TOKEN_TYPES.TEXT) break;
|
|
496
485
|
current = tokens.next();
|
|
497
486
|
}
|
|
498
|
-
|
|
487
|
+
switch (introducer.code) {
|
|
499
488
|
case CSI:
|
|
500
|
-
|
|
501
|
-
else if (data[0]?.raw && PRIVATE_OPENERS.has(data[0].raw[0])) yield emit(parsePrivateCSI(introducer, data, final));
|
|
502
|
-
else yield emit(parseCSI(introducer, data, final));
|
|
489
|
+
yield emit(parseCSI(introducer, data, final));
|
|
503
490
|
break;
|
|
504
491
|
case OSC:
|
|
505
492
|
yield emit(parseOSC(introducer, data, final));
|
|
@@ -524,7 +511,6 @@ function* parser(tokens) {
|
|
|
524
511
|
yield emit(parseESC(introducer, data, final));
|
|
525
512
|
break;
|
|
526
513
|
}
|
|
527
|
-
else if (introducer.code === ESC) yield emit(parseESC(introducer, data, void 0));
|
|
528
514
|
} else current = tokens.next();
|
|
529
515
|
}
|
|
530
516
|
}
|
|
@@ -533,4 +519,4 @@ function parse(input) {
|
|
|
533
519
|
}
|
|
534
520
|
|
|
535
521
|
//#endregion
|
|
536
|
-
export { APC, APC_OPEN, BACKSLASH, BELL, CODE_TYPES, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, OSC, OSC_OPEN, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, TOKEN_TYPES, parse, parser, tokenize, tokenizer };
|
|
522
|
+
export { APC, APC_OPEN, BACKSLASH, BELL, C0_INTERRUPTERS, CAN, CODE_TYPES, CSI, CSI_OPEN, DCS, DCS_OPEN, DEC_OPEN, ESC, INTERRUPTERS, OSC, OSC_OPEN, PARAM_SEPARATOR, PM, PM_OPEN, PRIVATE_OPENERS, SOS, SOS_OPEN, ST, STRING_OPENERS, SUB, TOKEN_TYPES, parse, parser, tokenize, tokenizer };
|