@ansi-tools/parser 1.0.13 → 1.0.14

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.
Files changed (48) hide show
  1. package/dist/escaped.d.ts +10 -6
  2. package/dist/escaped.js +1 -4
  3. package/dist/index.d.ts +7 -5
  4. package/dist/index.js +1 -3
  5. package/dist/parse-BXzmEfiO.d.ts +85 -0
  6. package/dist/parse-DOrPQ1A8.js +1 -0
  7. package/package.json +6 -4
  8. package/dist/constants.d.ts +0 -56
  9. package/dist/constants.d.ts.map +0 -1
  10. package/dist/constants.js +0 -55
  11. package/dist/escaped.d.ts.map +0 -1
  12. package/dist/index.d.ts.map +0 -1
  13. package/dist/parse.d.ts +0 -4
  14. package/dist/parse.d.ts.map +0 -1
  15. package/dist/parse.escaped.d.ts +0 -3
  16. package/dist/parse.escaped.d.ts.map +0 -1
  17. package/dist/parse.escaped.js +0 -5
  18. package/dist/parse.js +0 -109
  19. package/dist/parsers/apc.d.ts +0 -3
  20. package/dist/parsers/apc.d.ts.map +0 -1
  21. package/dist/parsers/apc.js +0 -6
  22. package/dist/parsers/csi.d.ts +0 -3
  23. package/dist/parsers/csi.d.ts.map +0 -1
  24. package/dist/parsers/csi.js +0 -63
  25. package/dist/parsers/dcs.d.ts +0 -3
  26. package/dist/parsers/dcs.d.ts.map +0 -1
  27. package/dist/parsers/dcs.js +0 -26
  28. package/dist/parsers/esc.d.ts +0 -3
  29. package/dist/parsers/esc.d.ts.map +0 -1
  30. package/dist/parsers/esc.js +0 -8
  31. package/dist/parsers/osc.d.ts +0 -3
  32. package/dist/parsers/osc.d.ts.map +0 -1
  33. package/dist/parsers/osc.js +0 -28
  34. package/dist/parsers/pm.d.ts +0 -3
  35. package/dist/parsers/pm.d.ts.map +0 -1
  36. package/dist/parsers/pm.js +0 -6
  37. package/dist/parsers/sos.d.ts +0 -3
  38. package/dist/parsers/sos.d.ts.map +0 -1
  39. package/dist/parsers/sos.js +0 -6
  40. package/dist/tokenize.d.ts +0 -4
  41. package/dist/tokenize.d.ts.map +0 -1
  42. package/dist/tokenize.escaped.d.ts +0 -4
  43. package/dist/tokenize.escaped.d.ts.map +0 -1
  44. package/dist/tokenize.escaped.js +0 -295
  45. package/dist/tokenize.js +0 -314
  46. package/dist/types.d.ts +0 -23
  47. package/dist/types.d.ts.map +0 -1
  48. package/dist/types.js +0 -1
@@ -1,6 +0,0 @@
1
- import { CODE_TYPES } from "../constants.js";
2
- export function parsePM(introducer, dataTokens, final) {
3
- const data = dataTokens.map((t) => t.raw).join("");
4
- const raw = introducer.raw + data + (final?.raw || "");
5
- return { type: CODE_TYPES.STRING, pos: introducer.pos, raw, command: "PM", params: data ? [data] : [] };
6
- }
@@ -1,3 +0,0 @@
1
- import type { CODE, TOKEN } from "../types.ts";
2
- export declare function parseSOS(introducer: TOKEN, dataTokens: TOKEN[], final: TOKEN | undefined): CODE;
3
- //# sourceMappingURL=sos.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sos.d.ts","sourceRoot":"","sources":["../../src/parsers/sos.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAgB,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,CAI/F"}
@@ -1,6 +0,0 @@
1
- import { CODE_TYPES } from "../constants.js";
2
- export function parseSOS(introducer, dataTokens, final) {
3
- const data = dataTokens.map((t) => t.raw).join("");
4
- const raw = introducer.raw + data + (final?.raw || "");
5
- return { type: CODE_TYPES.STRING, pos: introducer.pos, raw, command: "SOS", params: data ? [data] : [] };
6
- }
@@ -1,4 +0,0 @@
1
- import type { TOKEN } from "./types.ts";
2
- export declare function tokenizer(input: string): IterableIterator<TOKEN>;
3
- export declare function tokenize(input: string): TOKEN[];
4
- //# sourceMappingURL=tokenize.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../src/tokenize.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAoBxC,wBAAiB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAsIjE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CA8I/C"}
@@ -1,4 +0,0 @@
1
- import type { TOKEN } from "./types.ts";
2
- export declare function tokenizer(input: string): IterableIterator<TOKEN>;
3
- export declare function tokenize(input: string): TOKEN[];
4
- //# sourceMappingURL=tokenize.escaped.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenize.escaped.d.ts","sourceRoot":"","sources":["../src/tokenize.escaped.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAgDxC,wBAAiB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAsPjE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAE/C"}
@@ -1,295 +0,0 @@
1
- import { BACKSLASH, BACKSLASH_CODE, CSI, CSI_CODE, CSI_OPEN_CODE, ESC, ESC_CODE, OSC, OSC_CODE, OSC_OPEN_CODE, STRING_OPENERS, TOKEN_TYPES, } from "./constants.js";
2
- const debug = false;
3
- const CSI_ESCAPED = "\\u009b";
4
- const CSI_ESCAPED_HEX = "\\x9b";
5
- const ABANDONED = "ABANDONED";
6
- const INTRODUCERS = [
7
- ["\\u001b", 6],
8
- [CSI_ESCAPED, 6],
9
- [CSI_ESCAPED_HEX, 4],
10
- ["\\x1b", 4],
11
- ["\\033", 4],
12
- ["\\e", 2],
13
- ];
14
- const INTERRUPTERS_ESCAPED = [
15
- ["\\x18", 4],
16
- ["\\x1a", 4],
17
- ["\\u0018", 6],
18
- ["\\u001a", 6],
19
- ];
20
- const INTERRUPTER_LOOKUP = new Map();
21
- for (const [sequence, len] of INTERRUPTERS_ESCAPED) {
22
- const secondChar = sequence[1];
23
- if (!INTERRUPTER_LOOKUP.has(secondChar))
24
- INTERRUPTER_LOOKUP.set(secondChar, []);
25
- INTERRUPTER_LOOKUP.get(secondChar)?.push([sequence, len]);
26
- }
27
- const INTRODUCER_LOOKUP = new Map();
28
- const INTRODUCER_FIRST_CHAR_CACHE = new Map();
29
- for (const [sequence, len] of INTRODUCERS) {
30
- const secondChar = sequence[1];
31
- if (!INTRODUCER_LOOKUP.has(secondChar))
32
- INTRODUCER_LOOKUP.set(secondChar, []);
33
- INTRODUCER_LOOKUP.get(secondChar)?.push([sequence, len]);
34
- INTRODUCER_FIRST_CHAR_CACHE.set(sequence, true);
35
- }
36
- function emit(token) {
37
- if (debug)
38
- console.log("token", token);
39
- return token;
40
- }
41
- export function* tokenizer(input) {
42
- const l = input.length;
43
- let i = 0;
44
- let state = "GROUND";
45
- let currentCode;
46
- let backslashIndex = input.indexOf(BACKSLASH_CODE);
47
- function setState(next, code) {
48
- if (debug)
49
- console.log(`state ${state} → ${next}`);
50
- state = next;
51
- currentCode = code;
52
- }
53
- while (i < l) {
54
- if (state === "GROUND") {
55
- const textStart = i;
56
- while (i < l) {
57
- if (backslashIndex === -1) {
58
- i = l;
59
- break;
60
- }
61
- if (backslashIndex < i) {
62
- backslashIndex = input.indexOf(BACKSLASH_CODE, i);
63
- }
64
- if (backslashIndex === -1) {
65
- i = l;
66
- break;
67
- }
68
- let isIntroducer = false;
69
- const candidates = INTRODUCER_LOOKUP.get(input[backslashIndex + 1]);
70
- if (candidates) {
71
- for (const [seq, len] of candidates) {
72
- if (backslashIndex + len > l)
73
- continue;
74
- const matched = input.startsWith(seq, backslashIndex);
75
- if (matched) {
76
- isIntroducer = true;
77
- break;
78
- }
79
- }
80
- }
81
- if (isIntroducer) {
82
- i = backslashIndex;
83
- break;
84
- }
85
- else {
86
- i = backslashIndex + 1;
87
- }
88
- }
89
- if (i > textStart) {
90
- yield emit({ type: TOKEN_TYPES.TEXT, pos: textStart, raw: input.substring(textStart, i) });
91
- }
92
- if (i < l) {
93
- const candidates = INTRODUCER_LOOKUP.get(input[i + 1]);
94
- if (candidates) {
95
- let isMatch = false;
96
- for (const [seq, len] of candidates) {
97
- if (i + len > l)
98
- continue;
99
- const isSeqMatch = input.startsWith(seq, i);
100
- if (isSeqMatch) {
101
- isMatch = true;
102
- if (seq === CSI_ESCAPED || seq === CSI_ESCAPED_HEX) {
103
- yield emit({ type: TOKEN_TYPES.INTRODUCER, pos: i, raw: seq, code: CSI_CODE });
104
- i += len;
105
- setState("SEQUENCE", CSI);
106
- }
107
- else {
108
- const next = input[i + len];
109
- if (next === CSI_OPEN_CODE) {
110
- yield emit({ type: TOKEN_TYPES.INTRODUCER, pos: i, raw: seq + next, code: CSI_CODE });
111
- i += len + 1;
112
- setState("SEQUENCE", CSI);
113
- }
114
- else if (next === OSC_OPEN_CODE) {
115
- yield emit({ type: TOKEN_TYPES.INTRODUCER, pos: i, raw: seq + next, code: OSC_CODE });
116
- i += len + 1;
117
- setState("SEQUENCE", OSC);
118
- }
119
- else if (STRING_OPENERS.has(next)) {
120
- yield emit({ type: TOKEN_TYPES.INTRODUCER, pos: i, raw: seq + next, code: next });
121
- i += len + 1;
122
- setState("SEQUENCE", next.charCodeAt(0));
123
- }
124
- else if (next) {
125
- let j = i + len;
126
- while (j < l && input.charCodeAt(j) >= 0x20 && input.charCodeAt(j) <= 0x2f)
127
- j++;
128
- if (j < l) {
129
- const is = input.slice(i + len, j);
130
- if (is)
131
- yield emit({
132
- type: TOKEN_TYPES.INTRODUCER,
133
- pos: i,
134
- raw: seq + is,
135
- code: ESC_CODE,
136
- intermediate: is,
137
- });
138
- else
139
- yield emit({ type: TOKEN_TYPES.INTRODUCER, pos: i, raw: seq, code: ESC_CODE });
140
- i = j;
141
- setState("SEQUENCE", ESC);
142
- }
143
- else {
144
- i = j;
145
- }
146
- }
147
- else {
148
- i += len;
149
- }
150
- }
151
- break;
152
- }
153
- }
154
- if (!isMatch) {
155
- i++;
156
- }
157
- }
158
- else {
159
- i++;
160
- }
161
- }
162
- }
163
- else if (state === "SEQUENCE") {
164
- let terminator = "";
165
- let terminatorPos = -1;
166
- const pos = i;
167
- while (!terminator && i < l) {
168
- if (input.charCodeAt(i) === BACKSLASH) {
169
- const next = input[i + 1];
170
- if (next) {
171
- const interrupters = INTERRUPTER_LOOKUP.get(next);
172
- if (interrupters) {
173
- for (const [seq, len] of interrupters) {
174
- if (i + len <= l) {
175
- let matched = true;
176
- for (let k = 0; k < len; k++) {
177
- if (input[i + k] !== seq[k]) {
178
- matched = false;
179
- break;
180
- }
181
- }
182
- if (matched) {
183
- terminator = ABANDONED;
184
- terminatorPos = i;
185
- i += len;
186
- break;
187
- }
188
- }
189
- }
190
- }
191
- }
192
- if (terminator)
193
- break;
194
- if (currentCode !== CSI && currentCode !== ESC) {
195
- if (next === "a" && i + 2 <= l) {
196
- if (currentCode === OSC && input[i + 1] === "a") {
197
- terminator = "\\a";
198
- terminatorPos = i;
199
- i += 2;
200
- }
201
- }
202
- else if (next === "x") {
203
- if (i + 4 <= l) {
204
- const char3 = input[i + 2];
205
- const char4 = input[i + 3];
206
- if (char3 === "0" && char4 === "7" && currentCode === OSC) {
207
- terminator = "\\x07";
208
- terminatorPos = i;
209
- i += 4;
210
- }
211
- else if (char3 === "9" && char4 === "c") {
212
- terminator = "\\x9c";
213
- terminatorPos = i;
214
- i += 4;
215
- }
216
- else if (char3 === "1" &&
217
- char4 === "b" &&
218
- i + 6 <= l &&
219
- input.charCodeAt(i + 4) === BACKSLASH &&
220
- input.charCodeAt(i + 5) === BACKSLASH) {
221
- terminator = "\\x1b\\\\";
222
- terminatorPos = i;
223
- i += 6;
224
- }
225
- }
226
- }
227
- else if (next === "u" && currentCode === OSC && i + 6 <= l) {
228
- if (input[i + 2] === "0" && input[i + 3] === "0" && input[i + 4] === "0" && input[i + 5] === "7") {
229
- terminator = "\\u0007";
230
- terminatorPos = i;
231
- i += 6;
232
- }
233
- }
234
- else if (next === "e" && i + 4 <= l) {
235
- if (input.charCodeAt(i + 2) === BACKSLASH && input.charCodeAt(i + 3) === BACKSLASH) {
236
- terminator = "\\e\\\\";
237
- terminatorPos = i;
238
- i += 4;
239
- }
240
- }
241
- }
242
- if (!terminator) {
243
- if (next) {
244
- const candidates = INTRODUCER_LOOKUP.get(next);
245
- if (candidates) {
246
- for (const [seq, len] of candidates) {
247
- if (i + len > l)
248
- continue;
249
- let matched = true;
250
- for (let k = 0; k < len && matched; k += 2) {
251
- matched = input[i + k] === seq[k];
252
- if (matched && k + 1 < len) {
253
- matched = input[i + k + 1] === seq[k + 1];
254
- }
255
- }
256
- if (matched) {
257
- terminator = ABANDONED;
258
- terminatorPos = i;
259
- break;
260
- }
261
- }
262
- }
263
- }
264
- }
265
- }
266
- else if (currentCode === CSI) {
267
- const charCode = input.charCodeAt(i);
268
- if (charCode >= 0x40 && charCode <= 0x7e) {
269
- terminator = input[i];
270
- terminatorPos = i;
271
- i++;
272
- }
273
- }
274
- else if (currentCode === ESC) {
275
- terminator = input[i];
276
- terminatorPos = i;
277
- i++;
278
- }
279
- if (!terminator) {
280
- i++;
281
- }
282
- }
283
- if (terminatorPos > pos) {
284
- yield emit({ type: TOKEN_TYPES.DATA, pos, raw: input.substring(pos, terminatorPos) });
285
- }
286
- if (terminator && terminator !== ABANDONED) {
287
- yield emit({ type: TOKEN_TYPES.FINAL, pos: terminatorPos, raw: terminator });
288
- }
289
- setState("GROUND");
290
- }
291
- }
292
- }
293
- export function tokenize(input) {
294
- return Array.from(tokenizer(input));
295
- }
package/dist/tokenize.js DELETED
@@ -1,314 +0,0 @@
1
- import { APC, BACKSLASH, BACKSLASH_CODE, BELL, BELL_CODE, CAN, CSI, CSI_CODE, CSI_OPEN, DCS, ESC, ESC_CODE, OSC, OSC_CODE, OSC_OPEN, PM, SOS, ST, ST_CODE, STRING_OPENERS, SUB, TOKEN_TYPES, } from "./constants.js";
2
- function isInterrupter(c) {
3
- return (c === CAN || c === SUB || c === ESC || c === CSI || c === OSC || c === DCS || c === APC || c === PM || c === SOS);
4
- }
5
- function isC0Interrupter(c) {
6
- return c === CAN || c === SUB;
7
- }
8
- function isSequenceStart(c) {
9
- return c === ESC || c === CSI || c === OSC || c === DCS || c === APC || c === PM || c === SOS;
10
- }
11
- function is8BitIntroducer(c) {
12
- return c === CSI || c === OSC || c === DCS || c === APC || c === PM || c === SOS;
13
- }
14
- export function* tokenizer(input) {
15
- let i = 0;
16
- let state = 0; // 0 = GROUND, 1 = SEQUENCE
17
- let currentCode = 0;
18
- const len = input.length;
19
- while (i < len) {
20
- if (state === 0) {
21
- const textStart = i;
22
- let charCode = input.charCodeAt(i);
23
- while (i < len && !isSequenceStart(charCode)) {
24
- charCode = input.charCodeAt(++i);
25
- }
26
- if (i > textStart) {
27
- yield { type: TOKEN_TYPES.TEXT, pos: textStart, raw: input.substring(textStart, i) };
28
- }
29
- if (i >= len)
30
- break;
31
- if (is8BitIntroducer(charCode)) {
32
- yield { type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input[i], code: input[i] };
33
- i++;
34
- state = 1;
35
- currentCode = charCode;
36
- }
37
- else {
38
- // ESC
39
- const nextCode = input.charCodeAt(i + 1);
40
- if (nextCode === CSI_OPEN) {
41
- yield { type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input.substring(i, i + 2), code: CSI_CODE };
42
- i += 2;
43
- state = 1;
44
- currentCode = CSI;
45
- }
46
- else if (nextCode === OSC_OPEN) {
47
- yield { type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input.substring(i, i + 2), code: OSC_CODE };
48
- i += 2;
49
- state = 1;
50
- currentCode = OSC;
51
- }
52
- else if (i + 1 < len && STRING_OPENERS.has(input[i + 1])) {
53
- yield { type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input.substring(i, i + 2), code: input[i + 1] };
54
- i += 2;
55
- state = 1;
56
- currentCode = nextCode;
57
- }
58
- else if (i + 1 < len) {
59
- let j = i + 1;
60
- while (j < len && input.charCodeAt(j) >= 0x20 && input.charCodeAt(j) <= 0x2f)
61
- j++;
62
- if (j < len) {
63
- if (j > i + 1) {
64
- const intermediate = input.substring(i + 1, j);
65
- yield { type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input.substring(i, j), code: ESC_CODE, intermediate };
66
- }
67
- else {
68
- yield { type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input[i], code: ESC_CODE };
69
- }
70
- i = j;
71
- state = 1;
72
- currentCode = ESC;
73
- }
74
- else {
75
- i = j;
76
- }
77
- }
78
- else {
79
- i++;
80
- }
81
- }
82
- }
83
- else {
84
- const pos = i;
85
- if (currentCode === CSI) {
86
- const dataStart = i;
87
- while (i < len) {
88
- const charCode = input.charCodeAt(i);
89
- if (isInterrupter(charCode)) {
90
- if (i > dataStart)
91
- yield { type: TOKEN_TYPES.DATA, pos, raw: input.substring(dataStart, i) };
92
- state = 0;
93
- if (isC0Interrupter(charCode))
94
- i++;
95
- break;
96
- }
97
- if (charCode >= 0x40 && charCode <= 0x7e) {
98
- if (i > dataStart)
99
- yield { type: TOKEN_TYPES.DATA, pos, raw: input.substring(dataStart, i) };
100
- yield { type: TOKEN_TYPES.FINAL, pos: i, raw: input[i] };
101
- i++;
102
- state = 0;
103
- break;
104
- }
105
- i++;
106
- }
107
- }
108
- else if (currentCode === ESC) {
109
- if (i < len) {
110
- const charCode = input.charCodeAt(i);
111
- if (isInterrupter(charCode)) {
112
- state = 0;
113
- if (isC0Interrupter(charCode))
114
- i++;
115
- }
116
- else {
117
- yield { type: TOKEN_TYPES.FINAL, pos: i, raw: input[i] };
118
- i++;
119
- state = 0;
120
- }
121
- }
122
- }
123
- else {
124
- const dataStart = i;
125
- while (i < len) {
126
- const charCode = input.charCodeAt(i);
127
- let terminator;
128
- if (charCode === ESC && input.charCodeAt(i + 1) === BACKSLASH) {
129
- terminator = ESC_CODE + BACKSLASH_CODE;
130
- }
131
- else if (charCode === ST) {
132
- terminator = ST_CODE;
133
- }
134
- else if (charCode === BELL && currentCode === OSC) {
135
- terminator = BELL_CODE;
136
- }
137
- if (terminator) {
138
- if (i > dataStart)
139
- yield { type: TOKEN_TYPES.DATA, pos, raw: input.substring(dataStart, i) };
140
- yield { type: TOKEN_TYPES.FINAL, pos: i, raw: terminator };
141
- i += terminator.length;
142
- state = 0;
143
- break;
144
- }
145
- if (isInterrupter(charCode)) {
146
- if (i > dataStart)
147
- yield { type: TOKEN_TYPES.DATA, pos, raw: input.substring(dataStart, i) };
148
- state = 0;
149
- if (isC0Interrupter(charCode))
150
- i++;
151
- break;
152
- }
153
- i++;
154
- }
155
- }
156
- if (state === 1)
157
- state = 0;
158
- }
159
- }
160
- }
161
- export function tokenize(input) {
162
- const result = [];
163
- let i = 0;
164
- let state = 0;
165
- let currentCode = 0;
166
- const len = input.length;
167
- while (i < len) {
168
- if (state === 0) {
169
- const textStart = i;
170
- let charCode = input.charCodeAt(i);
171
- while (i < len && !isSequenceStart(charCode)) {
172
- charCode = input.charCodeAt(++i);
173
- }
174
- if (i > textStart) {
175
- result.push({ type: TOKEN_TYPES.TEXT, pos: textStart, raw: input.substring(textStart, i) });
176
- }
177
- if (i >= len)
178
- break;
179
- if (is8BitIntroducer(charCode)) {
180
- result.push({ type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input[i], code: input[i] });
181
- i++;
182
- state = 1;
183
- currentCode = charCode;
184
- }
185
- else {
186
- const nextCode = input.charCodeAt(i + 1);
187
- if (nextCode === CSI_OPEN) {
188
- result.push({ type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input.substring(i, i + 2), code: CSI_CODE });
189
- i += 2;
190
- state = 1;
191
- currentCode = CSI;
192
- }
193
- else if (nextCode === OSC_OPEN) {
194
- result.push({ type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input.substring(i, i + 2), code: OSC_CODE });
195
- i += 2;
196
- state = 1;
197
- currentCode = OSC;
198
- }
199
- else if (i + 1 < len && STRING_OPENERS.has(input[i + 1])) {
200
- result.push({ type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input.substring(i, i + 2), code: input[i + 1] });
201
- i += 2;
202
- state = 1;
203
- currentCode = nextCode;
204
- }
205
- else if (i + 1 < len) {
206
- let j = i + 1;
207
- while (j < len && input.charCodeAt(j) >= 0x20 && input.charCodeAt(j) <= 0x2f)
208
- j++;
209
- if (j < len) {
210
- if (j > i + 1) {
211
- const intermediate = input.substring(i + 1, j);
212
- result.push({
213
- type: TOKEN_TYPES.INTRODUCER,
214
- pos: i,
215
- raw: input.substring(i, j),
216
- code: ESC_CODE,
217
- intermediate,
218
- });
219
- }
220
- else {
221
- result.push({ type: TOKEN_TYPES.INTRODUCER, pos: i, raw: input[i], code: ESC_CODE });
222
- }
223
- i = j;
224
- state = 1;
225
- currentCode = ESC;
226
- }
227
- else {
228
- i = j;
229
- }
230
- }
231
- else {
232
- i++;
233
- }
234
- }
235
- }
236
- else {
237
- const pos = i;
238
- if (currentCode === CSI) {
239
- const dataStart = i;
240
- while (i < len) {
241
- const charCode = input.charCodeAt(i);
242
- if (isInterrupter(charCode)) {
243
- if (i > dataStart)
244
- result.push({ type: TOKEN_TYPES.DATA, pos, raw: input.substring(dataStart, i) });
245
- state = 0;
246
- if (isC0Interrupter(charCode))
247
- i++;
248
- break;
249
- }
250
- if (charCode >= 0x40 && charCode <= 0x7e) {
251
- if (i > dataStart)
252
- result.push({ type: TOKEN_TYPES.DATA, pos, raw: input.substring(dataStart, i) });
253
- result.push({ type: TOKEN_TYPES.FINAL, pos: i, raw: input[i] });
254
- i++;
255
- state = 0;
256
- break;
257
- }
258
- i++;
259
- }
260
- }
261
- else if (currentCode === ESC) {
262
- if (i < len) {
263
- const charCode = input.charCodeAt(i);
264
- if (isInterrupter(charCode)) {
265
- state = 0;
266
- if (isC0Interrupter(charCode))
267
- i++;
268
- }
269
- else {
270
- result.push({ type: TOKEN_TYPES.FINAL, pos: i, raw: input[i] });
271
- i++;
272
- state = 0;
273
- }
274
- }
275
- }
276
- else {
277
- const dataStart = i;
278
- while (i < len) {
279
- const charCode = input.charCodeAt(i);
280
- let terminator;
281
- if (charCode === ESC && input.charCodeAt(i + 1) === BACKSLASH) {
282
- terminator = ESC_CODE + BACKSLASH_CODE;
283
- }
284
- else if (charCode === ST) {
285
- terminator = ST_CODE;
286
- }
287
- else if (charCode === BELL && currentCode === OSC) {
288
- terminator = BELL_CODE;
289
- }
290
- if (terminator) {
291
- if (i > dataStart)
292
- result.push({ type: TOKEN_TYPES.DATA, pos, raw: input.substring(dataStart, i) });
293
- result.push({ type: TOKEN_TYPES.FINAL, pos: i, raw: terminator });
294
- i += terminator.length;
295
- state = 0;
296
- break;
297
- }
298
- if (isInterrupter(charCode)) {
299
- if (i > dataStart)
300
- result.push({ type: TOKEN_TYPES.DATA, pos, raw: input.substring(dataStart, i) });
301
- state = 0;
302
- if (isC0Interrupter(charCode))
303
- i++;
304
- break;
305
- }
306
- i++;
307
- }
308
- }
309
- if (state === 1)
310
- state = 0;
311
- }
312
- }
313
- return result;
314
- }
package/dist/types.d.ts DELETED
@@ -1,23 +0,0 @@
1
- import type { CODE_TYPES, TOKEN_TYPES } from "./constants.ts";
2
- export type TOKEN = {
3
- type: keyof typeof TOKEN_TYPES;
4
- pos: number;
5
- raw: string;
6
- code?: string;
7
- intermediate?: string;
8
- };
9
- export type CONTROL_CODE_TYPE = Exclude<keyof typeof CODE_TYPES, TEXT["type"]>;
10
- export type CONTROL_CODE = {
11
- type: CONTROL_CODE_TYPE;
12
- command: string;
13
- raw: string;
14
- params: string[];
15
- pos: number;
16
- };
17
- export type TEXT = {
18
- type: "TEXT";
19
- raw: string;
20
- pos: number;
21
- };
22
- export type CODE = CONTROL_CODE | TEXT;
23
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,MAAM,OAAO,WAAW,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,OAAO,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAE/E,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG,YAAY,GAAG,IAAI,CAAC"}
package/dist/types.js DELETED
@@ -1 +0,0 @@
1
- export {};