@orz/ui-ansi 0.0.0-stage → 0.0.0

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 (100) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +232 -2
  3. package/dist/content.d.ts +20 -0
  4. package/dist/content.d.ts.map +1 -0
  5. package/dist/content.js +90 -0
  6. package/dist/content.js.map +1 -0
  7. package/dist/index.d.ts +5 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +3 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/parse/index.d.ts +6 -0
  12. package/dist/parse/index.d.ts.map +1 -0
  13. package/dist/parse/index.js +5 -0
  14. package/dist/parse/index.js.map +1 -0
  15. package/dist/parse/level-tracker.d.ts +14 -0
  16. package/dist/parse/level-tracker.d.ts.map +1 -0
  17. package/dist/parse/level-tracker.js +87 -0
  18. package/dist/parse/level-tracker.js.map +1 -0
  19. package/dist/parse/levels.d.ts +19 -0
  20. package/dist/parse/levels.d.ts.map +1 -0
  21. package/dist/parse/levels.js +167 -0
  22. package/dist/parse/levels.js.map +1 -0
  23. package/dist/parse/line.d.ts +49 -0
  24. package/dist/parse/line.d.ts.map +1 -0
  25. package/dist/parse/line.js +289 -0
  26. package/dist/parse/line.js.map +1 -0
  27. package/dist/parse/palette.d.ts +12 -0
  28. package/dist/parse/palette.d.ts.map +1 -0
  29. package/dist/parse/palette.js +40 -0
  30. package/dist/parse/palette.js.map +1 -0
  31. package/dist/parse/parser.d.ts +18 -0
  32. package/dist/parse/parser.d.ts.map +1 -0
  33. package/dist/parse/parser.js +178 -0
  34. package/dist/parse/parser.js.map +1 -0
  35. package/dist/parse/sgr.d.ts +7 -0
  36. package/dist/parse/sgr.d.ts.map +1 -0
  37. package/dist/parse/sgr.js +179 -0
  38. package/dist/parse/sgr.js.map +1 -0
  39. package/dist/parse/styles.d.ts +15 -0
  40. package/dist/parse/styles.d.ts.map +1 -0
  41. package/dist/parse/styles.js +75 -0
  42. package/dist/parse/styles.js.map +1 -0
  43. package/dist/parse/tokenizer.d.ts +36 -0
  44. package/dist/parse/tokenizer.d.ts.map +1 -0
  45. package/dist/parse/tokenizer.js +287 -0
  46. package/dist/parse/tokenizer.js.map +1 -0
  47. package/dist/parse/types.d.ts +50 -0
  48. package/dist/parse/types.d.ts.map +1 -0
  49. package/dist/parse/types.js +2 -0
  50. package/dist/parse/types.js.map +1 -0
  51. package/dist/view/ansi-view.d.ts +27 -0
  52. package/dist/view/ansi-view.d.ts.map +1 -0
  53. package/dist/view/ansi-view.js +675 -0
  54. package/dist/view/ansi-view.js.map +1 -0
  55. package/dist/view/geometry.d.ts +30 -0
  56. package/dist/view/geometry.d.ts.map +1 -0
  57. package/dist/view/geometry.js +125 -0
  58. package/dist/view/geometry.js.map +1 -0
  59. package/dist/view/metrics.d.ts +17 -0
  60. package/dist/view/metrics.d.ts.map +1 -0
  61. package/dist/view/metrics.js +69 -0
  62. package/dist/view/metrics.js.map +1 -0
  63. package/dist/view/row.d.ts +41 -0
  64. package/dist/view/row.d.ts.map +1 -0
  65. package/dist/view/row.js +113 -0
  66. package/dist/view/row.js.map +1 -0
  67. package/dist/view/run-style.d.ts +11 -0
  68. package/dist/view/run-style.d.ts.map +1 -0
  69. package/dist/view/run-style.js +87 -0
  70. package/dist/view/run-style.js.map +1 -0
  71. package/dist/view/search.d.ts +28 -0
  72. package/dist/view/search.d.ts.map +1 -0
  73. package/dist/view/search.js +76 -0
  74. package/dist/view/search.js.map +1 -0
  75. package/dist/view/shown-lines.d.ts +15 -0
  76. package/dist/view/shown-lines.d.ts.map +1 -0
  77. package/dist/view/shown-lines.js +50 -0
  78. package/dist/view/shown-lines.js.map +1 -0
  79. package/dist/view/time-slices.d.ts +9 -0
  80. package/dist/view/time-slices.d.ts.map +1 -0
  81. package/dist/view/time-slices.js +35 -0
  82. package/dist/view/time-slices.js.map +1 -0
  83. package/dist/view/toolbar.d.ts +47 -0
  84. package/dist/view/toolbar.d.ts.map +1 -0
  85. package/dist/view/toolbar.js +58 -0
  86. package/dist/view/toolbar.js.map +1 -0
  87. package/dist/view/use-ansi-lines.d.ts +28 -0
  88. package/dist/view/use-ansi-lines.d.ts.map +1 -0
  89. package/dist/view/use-ansi-lines.js +103 -0
  90. package/dist/view/use-ansi-lines.js.map +1 -0
  91. package/dist/view/use-search.d.ts +37 -0
  92. package/dist/view/use-search.d.ts.map +1 -0
  93. package/dist/view/use-search.js +205 -0
  94. package/dist/view/use-search.js.map +1 -0
  95. package/dist/view/virtual-rows.d.ts +36 -0
  96. package/dist/view/virtual-rows.d.ts.map +1 -0
  97. package/dist/view/virtual-rows.js +156 -0
  98. package/dist/view/virtual-rows.js.map +1 -0
  99. package/package.json +58 -3
  100. package/styles.css +110 -0
@@ -0,0 +1,178 @@
1
+ import { LineBuilder } from "./line.js";
2
+ import { applySgr } from "./sgr.js";
3
+ import { StyleTable } from "./styles.js";
4
+ import { Tokenizer } from "./tokenizer.js";
5
+ /** The longest OSC 8 URI that becomes a link. */
6
+ export const LINK_URI_MAX = 2048;
7
+ /**
8
+ * The furthest one `CSI C` or `CSI G` moves. It pads with real spaces, so an
9
+ * unbounded count would let a few bytes allocate gigabytes.
10
+ */
11
+ export const CURSOR_MOVE_MAX = 1024;
12
+ const LINK_SCHEME = /^(?:https?|mailto):/i;
13
+ /**
14
+ * Cached SGR transitions per state. Truecolor gradients can make every
15
+ * parameter string distinct; past this many the rest are applied uncached.
16
+ */
17
+ const TRANSITIONS_MAX = 256;
18
+ function firstParam(params, fallback) {
19
+ const n = Number.parseInt(params, 10);
20
+ return Number.isNaN(n) ? fallback : n;
21
+ }
22
+ class Parser {
23
+ lines = [];
24
+ table = new StyleTable();
25
+ line = new LineBuilder();
26
+ tokenizer = new Tokenizer(this);
27
+ sgr = this.table.canonical({});
28
+ // A log repeats a handful of SGR sequences; splitting, applying and
29
+ // interning each one again was most of the parse time.
30
+ transitions = new Map();
31
+ plainIds = new Map();
32
+ href;
33
+ // -1 until the next write needs the current style interned.
34
+ id = 0;
35
+ widest = 0;
36
+ ended = false;
37
+ get styles() {
38
+ return this.table.styles;
39
+ }
40
+ get maxCells() {
41
+ return this.widest;
42
+ }
43
+ push(chunk) {
44
+ if (this.ended)
45
+ throw new Error("AnsiParser: push after end");
46
+ this.tokenizer.push(chunk);
47
+ }
48
+ end() {
49
+ if (this.ended)
50
+ return;
51
+ this.ended = true;
52
+ this.tokenizer.end();
53
+ this.newline();
54
+ }
55
+ print(chunk, start, end, cells) {
56
+ this.line.write(chunk, start, end, cells, this.styleId());
57
+ }
58
+ control(code) {
59
+ switch (code) {
60
+ case 0x0a:
61
+ this.newline();
62
+ break;
63
+ case 0x0d:
64
+ this.line.carriageReturn();
65
+ break;
66
+ case 0x08:
67
+ this.line.backspace();
68
+ break;
69
+ case 0x09:
70
+ this.line.tab(this.styleId());
71
+ break;
72
+ }
73
+ }
74
+ csi(params, final) {
75
+ switch (final) {
76
+ case 0x6d: {
77
+ let cached = this.transitions.get(this.sgr);
78
+ if (!cached) {
79
+ cached = new Map();
80
+ this.transitions.set(this.sgr, cached);
81
+ }
82
+ let next = cached.get(params);
83
+ if (!next) {
84
+ next = this.table.canonical(applySgr(this.sgr, params.split(";").map((param) => param.split(":"))));
85
+ if (cached.size < TRANSITIONS_MAX)
86
+ cached.set(params, next);
87
+ }
88
+ if (next !== this.sgr) {
89
+ this.sgr = next;
90
+ this.id = -1;
91
+ }
92
+ break;
93
+ }
94
+ case 0x43:
95
+ this.line.forward(this.count(params));
96
+ break;
97
+ case 0x44:
98
+ this.line.backward(this.count(params));
99
+ break;
100
+ case 0x47:
101
+ this.line.column(this.count(params) - 1);
102
+ break;
103
+ case 0x4b: {
104
+ const mode = firstParam(params, 0);
105
+ if (mode >= 0 && mode <= 2)
106
+ this.line.erase(mode);
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ osc(body) {
112
+ if (!body.startsWith("8;"))
113
+ return;
114
+ const semicolon = body.indexOf(";", 2);
115
+ if (semicolon < 0)
116
+ return;
117
+ const uri = body.slice(semicolon + 1);
118
+ // A refused link still ends the one before it, so its text is not
119
+ // credited to the wrong target.
120
+ const href = uri !== "" && uri.length <= LINK_URI_MAX && LINK_SCHEME.test(uri)
121
+ ? uri
122
+ : undefined;
123
+ if (href !== this.href) {
124
+ this.href = href;
125
+ this.id = -1;
126
+ }
127
+ }
128
+ count(params) {
129
+ return Math.min(Math.max(1, firstParam(params, 1)), CURSOR_MOVE_MAX);
130
+ }
131
+ styleId() {
132
+ if (this.id >= 0)
133
+ return this.id;
134
+ if (this.href !== undefined) {
135
+ this.id = this.table.intern(this.sgr, this.href);
136
+ }
137
+ else {
138
+ let id = this.plainIds.get(this.sgr);
139
+ if (id === undefined) {
140
+ id = this.table.intern(this.sgr);
141
+ this.plainIds.set(this.sgr, id);
142
+ }
143
+ this.id = id;
144
+ }
145
+ return this.id;
146
+ }
147
+ newline() {
148
+ const line = this.line.finish();
149
+ if (line.cells > this.widest)
150
+ this.widest = line.cells;
151
+ this.lines.push(line);
152
+ }
153
+ }
154
+ /**
155
+ * An incremental parser: `push` the text in chunks split anywhere, then
156
+ * `end`. `lines` holds the complete lines so far.
157
+ */
158
+ export function createAnsiParser() {
159
+ return new Parser();
160
+ }
161
+ /** Parses a whole text at once. */
162
+ export function parseAnsi(text) {
163
+ const parser = new Parser();
164
+ parser.push(text);
165
+ parser.end();
166
+ return {
167
+ lines: parser.lines,
168
+ styles: parser.styles,
169
+ maxCells: parser.maxCells,
170
+ };
171
+ }
172
+ /** The text with every escape removed and cursor moves applied, lines joined with `\n`. */
173
+ export function stripAnsi(text) {
174
+ return parseAnsi(text)
175
+ .lines.map((line) => line.text)
176
+ .join("\n");
177
+ }
178
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parse/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { AnsiStyle } from "./types.ts";
2
+ /**
3
+ * The SGR state after `CSI params m`. `params` is already split on `;` and
4
+ * then on `:`. The link is not SGR state, so it is not here.
5
+ */
6
+ export declare function applySgr(style: AnsiStyle, params: readonly (readonly string[])[]): AnsiStyle;
7
+ //# sourceMappingURL=sgr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sgr.d.ts","sourceRoot":"","sources":["../../src/parse/sgr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,SAAS,EAAkB,MAAM,YAAY,CAAC;AA0EvE;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,GACrC,SAAS,CAyGX"}
@@ -0,0 +1,179 @@
1
+ const UNDERLINES = [
2
+ undefined,
3
+ "single",
4
+ "double",
5
+ "curly",
6
+ "dotted",
7
+ "dashed",
8
+ ];
9
+ // An empty parameter means 0; a missing one is NaN, so it fails every check.
10
+ function num(value) {
11
+ return value === undefined ? Number.NaN : Number(value);
12
+ }
13
+ function byte(value) {
14
+ return Number.isInteger(value) && value >= 0 && value <= 255;
15
+ }
16
+ function paletteColor(index) {
17
+ return byte(index) ? { kind: "palette", index } : undefined;
18
+ }
19
+ function rgbColor(r, g, b) {
20
+ const [rn, gn, bn] = [num(r), num(g), num(b)];
21
+ return byte(rn) && byte(gn) && byte(bn)
22
+ ? { kind: "rgb", r: rn, g: gn, b: bn }
23
+ : undefined;
24
+ }
25
+ /**
26
+ * Reads the colour of a `38`/`48`/`58` at `params[i]`. A malformed one still
27
+ * consumes its arguments, so they are never read again as codes of their own.
28
+ */
29
+ function readColor(params, i) {
30
+ const param = params[i];
31
+ if (param.length > 1) {
32
+ const mode = num(param[1]);
33
+ if (mode === 5)
34
+ return { color: paletteColor(num(param[2])), next: i + 1 };
35
+ if (mode === 2) {
36
+ // `38:2::r:g:b` names a colour space before the components; `38:2:r:g:b` does not.
37
+ const at = param.length >= 6 ? 3 : 2;
38
+ return {
39
+ color: rgbColor(param[at], param[at + 1], param[at + 2]),
40
+ next: i + 1,
41
+ };
42
+ }
43
+ return { color: undefined, next: i + 1 };
44
+ }
45
+ const main = (k) => params[k]?.[0];
46
+ const mode = num(main(i + 1));
47
+ if (mode === 5) {
48
+ return {
49
+ color: paletteColor(num(main(i + 2))),
50
+ next: Math.min(i + 3, params.length),
51
+ };
52
+ }
53
+ if (mode === 2) {
54
+ return {
55
+ color: rgbColor(main(i + 2), main(i + 3), main(i + 4)),
56
+ next: Math.min(i + 5, params.length),
57
+ };
58
+ }
59
+ return { color: undefined, next: Math.min(i + 2, params.length) };
60
+ }
61
+ /**
62
+ * The SGR state after `CSI params m`. `params` is already split on `;` and
63
+ * then on `:`. The link is not SGR state, so it is not here.
64
+ */
65
+ export function applySgr(style, params) {
66
+ const s = { ...style };
67
+ if (params.length === 0)
68
+ return {};
69
+ let i = 0;
70
+ while (i < params.length) {
71
+ const param = params[i];
72
+ const code = num(param[0]);
73
+ if (code === 38 || code === 48 || code === 58) {
74
+ const { color, next } = readColor(params, i);
75
+ if (color) {
76
+ if (code === 38)
77
+ s.fg = color;
78
+ else if (code === 48)
79
+ s.bg = color;
80
+ else
81
+ s.underlineColor = color;
82
+ }
83
+ i = next;
84
+ continue;
85
+ }
86
+ i++;
87
+ if (code >= 30 && code <= 37)
88
+ s.fg = { kind: "palette", index: code - 30 };
89
+ else if (code >= 90 && code <= 97)
90
+ s.fg = { kind: "palette", index: code - 90 + 8 };
91
+ else if (code >= 40 && code <= 47)
92
+ s.bg = { kind: "palette", index: code - 40 };
93
+ else if (code >= 100 && code <= 107)
94
+ s.bg = { kind: "palette", index: code - 100 + 8 };
95
+ else
96
+ switch (code) {
97
+ case 0:
98
+ for (const key of Object.keys(s))
99
+ delete s[key];
100
+ break;
101
+ case 1:
102
+ s.bold = true;
103
+ break;
104
+ case 2:
105
+ s.dim = true;
106
+ break;
107
+ case 3:
108
+ s.italic = true;
109
+ break;
110
+ case 4: {
111
+ if (param.length === 1) {
112
+ s.underline = "single";
113
+ break;
114
+ }
115
+ const sub = num(param[1]);
116
+ if (sub === 0)
117
+ delete s.underline;
118
+ else if (sub >= 1 && sub <= 5)
119
+ s.underline = UNDERLINES[sub];
120
+ break;
121
+ }
122
+ case 5:
123
+ case 6:
124
+ s.blink = true;
125
+ break;
126
+ case 7:
127
+ s.inverse = true;
128
+ break;
129
+ case 8:
130
+ s.hidden = true;
131
+ break;
132
+ case 9:
133
+ s.strike = true;
134
+ break;
135
+ case 21:
136
+ s.underline = "double";
137
+ break;
138
+ case 22:
139
+ delete s.bold;
140
+ delete s.dim;
141
+ break;
142
+ case 23:
143
+ delete s.italic;
144
+ break;
145
+ case 24:
146
+ delete s.underline;
147
+ break;
148
+ case 25:
149
+ delete s.blink;
150
+ break;
151
+ case 27:
152
+ delete s.inverse;
153
+ break;
154
+ case 28:
155
+ delete s.hidden;
156
+ break;
157
+ case 29:
158
+ delete s.strike;
159
+ break;
160
+ case 39:
161
+ delete s.fg;
162
+ break;
163
+ case 49:
164
+ delete s.bg;
165
+ break;
166
+ case 53:
167
+ s.overline = true;
168
+ break;
169
+ case 55:
170
+ delete s.overline;
171
+ break;
172
+ case 59:
173
+ delete s.underlineColor;
174
+ break;
175
+ }
176
+ }
177
+ return s;
178
+ }
179
+ //# sourceMappingURL=sgr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sgr.js","sourceRoot":"","sources":["../../src/parse/sgr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { AnsiStyle } from "./types.ts";
2
+ /** Gives equal styles one shared id; id 0 is the empty style. */
3
+ export declare class StyleTable {
4
+ readonly styles: AnsiStyle[];
5
+ private readonly ids;
6
+ private readonly states;
7
+ /**
8
+ * One shared object per distinct SGR state, so a state can key a cache by
9
+ * identity rather than by a key built on every lookup.
10
+ */
11
+ canonical(style: AnsiStyle): AnsiStyle;
12
+ /** The id of the SGR state `style` with the open link, if any, folded in. */
13
+ intern(style: AnsiStyle, href?: string): number;
14
+ }
15
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/parse/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,YAAY,CAAC;AAyCvD,iEAAiE;AACjE,qBAAa,UAAU;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6C;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEvD;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAMrC;IAED,6EAA6E;IAC7E,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAU9C;CACF"}
@@ -0,0 +1,75 @@
1
+ const FLAGS = [
2
+ "bold",
3
+ "dim",
4
+ "italic",
5
+ "blink",
6
+ "inverse",
7
+ "hidden",
8
+ "strike",
9
+ "overline",
10
+ ];
11
+ function colorKey(color) {
12
+ if (!color)
13
+ return "";
14
+ return color.kind === "palette"
15
+ ? `p${color.index}`
16
+ : `${color.r},${color.g},${color.b}`;
17
+ }
18
+ function keyOf(style) {
19
+ let flags = 0;
20
+ for (let i = 0; i < FLAGS.length; i++) {
21
+ if (style[FLAGS[i]])
22
+ flags |= 1 << i;
23
+ }
24
+ // href goes last and unescaped: no field after it can blur its boundary.
25
+ return `${colorKey(style.fg)}|${colorKey(style.bg)}|${colorKey(style.underlineColor)}|${flags}|${style.underline ?? ""}|${style.href ?? ""}`;
26
+ }
27
+ // Only the set fields are stored, so interned styles compare cleanly.
28
+ function compact(style) {
29
+ const out = {};
30
+ if (style.fg)
31
+ out.fg = style.fg;
32
+ if (style.bg)
33
+ out.bg = style.bg;
34
+ if (style.underlineColor)
35
+ out.underlineColor = style.underlineColor;
36
+ for (const flag of FLAGS)
37
+ if (style[flag])
38
+ out[flag] = true;
39
+ if (style.underline)
40
+ out.underline = style.underline;
41
+ if (style.href !== undefined)
42
+ out.href = style.href;
43
+ return out;
44
+ }
45
+ /** Gives equal styles one shared id; id 0 is the empty style. */
46
+ export class StyleTable {
47
+ styles = [{}];
48
+ ids = new Map([[keyOf({}), 0]]);
49
+ states = new Map();
50
+ /**
51
+ * One shared object per distinct SGR state, so a state can key a cache by
52
+ * identity rather than by a key built on every lookup.
53
+ */
54
+ canonical(style) {
55
+ const key = keyOf(style);
56
+ const known = this.states.get(key);
57
+ if (known)
58
+ return known;
59
+ this.states.set(key, style);
60
+ return style;
61
+ }
62
+ /** The id of the SGR state `style` with the open link, if any, folded in. */
63
+ intern(style, href) {
64
+ const full = href === undefined ? style : { ...style, href };
65
+ const key = keyOf(full);
66
+ let id = this.ids.get(key);
67
+ if (id === undefined) {
68
+ id = this.styles.length;
69
+ this.styles.push(compact(full));
70
+ this.ids.set(key, id);
71
+ }
72
+ return id;
73
+ }
74
+ }
75
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/parse/styles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /** What the tokenizer finds, in input order. */
2
+ export interface TokenSink {
3
+ /** Printable code points `chunk[start, end)`, `cells` wide. */
4
+ print(chunk: string, start: number, end: number, cells: number): void;
5
+ /** `\n`, `\r`, `\b` or `\t`. */
6
+ control(code: number): void;
7
+ /** A CSI with no private marker and no intermediate. */
8
+ csi(params: string, final: number): void;
9
+ /** An OSC body, without its terminator. */
10
+ osc(body: string): void;
11
+ }
12
+ /** How long an OSC or DCS/SOS/PM/APC body may grow before it is abandoned. */
13
+ export declare const STRING_MAX = 4096;
14
+ /** How long CSI parameters may grow before the sequence is dropped. */
15
+ export declare const CSI_PARAMS_MAX = 256;
16
+ /**
17
+ * A VT500-style escape-sequence state machine. Its state survives between
18
+ * `push` calls, so the input may be split anywhere, even inside a surrogate
19
+ * pair.
20
+ */
21
+ export declare class Tokenizer {
22
+ private state;
23
+ private params;
24
+ private csiDropped;
25
+ private body;
26
+ private bodyLength;
27
+ private highSurrogate;
28
+ private readonly sink;
29
+ constructor(sink: TokenSink);
30
+ push(input: string): void;
31
+ /** Flushes a carried high surrogate and drops an unfinished sequence. */
32
+ end(): void;
33
+ /** The character after an ESC; returns the index to read next. */
34
+ private escape;
35
+ }
36
+ //# sourceMappingURL=tokenizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/parse/tokenizer.ts"],"names":[],"mappings":"AAEA,gDAAgD;AAChD,MAAM,WAAW,SAAS;IACxB,+DAA+D;IAC/D,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtE,gCAAgC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wDAAwD;IACxD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,2CAA2C;IAC3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,8EAA8E;AAC9E,eAAO,MAAM,UAAU,OAAO,CAAC;AAC/B,uEAAuE;AACvE,eAAO,MAAM,cAAc,MAAM,CAAC;AAwBlC;;;;GAIG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAM;IAE3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IAEjC,YAAY,IAAI,EAAE,SAAS,EAE1B;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAuKxB;IAED,yEAAyE;IACzE,GAAG,IAAI,IAAI,CAQV;IAED,kEAAkE;IAClE,OAAO,CAAC,MAAM;CA+Bf"}