Skip to content

Commit 0311563

Browse files
committed
Optimize parsing of OSC_STRING to minimize string concatenation.
1 parent b689745 commit 0311563

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/EscapeSequenceParser.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,11 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
439439
}
440440

441441
// normal transition & action lookup
442-
transition = (code < 0xa0) ? (table[currentState << 8 | code]) : DEFAULT_TRANSITION;
442+
transition = (code < 0xa0
443+
? (table[currentState << 8 | code])
444+
: currentState === ParserState.OSC_STRING
445+
? (ParserAction.OSC_PUT << 4) | ParserState.OSC_STRING
446+
: DEFAULT_TRANSITION);
443447
switch (transition >> 4) {
444448
case ParserAction.PRINT:
445449
print = (~print) ? print : i;
@@ -471,10 +475,6 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
471475
case ParserState.GROUND:
472476
print = (~print) ? print : i;
473477
break;
474-
case ParserState.OSC_STRING:
475-
osc += String.fromCharCode(code);
476-
transition |= ParserState.OSC_STRING;
477-
break;
478478
case ParserState.CSI_IGNORE:
479479
transition |= ParserState.CSI_IGNORE;
480480
break;
@@ -570,7 +570,16 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
570570
osc = '';
571571
break;
572572
case ParserAction.OSC_PUT:
573-
osc += data.charAt(i);
573+
for (let j = i + 1; ; j++) {
574+
if (j >= l
575+
|| ((code = data.charCodeAt(j)) <= 0x9f
576+
&& (table[ParserState.OSC_STRING << 8 | code] >> 4
577+
!== ParserAction.OSC_PUT))) {
578+
osc += data.substring(i, j);
579+
i = j - 1;
580+
break;
581+
}
582+
}
574583
break;
575584
case ParserAction.OSC_END:
576585
if (osc && code !== 0x18 && code !== 0x1a) {

0 commit comments

Comments
 (0)