diff --git a/src/common/parser/EscapeSequenceParser.ts b/src/common/parser/EscapeSequenceParser.ts index 8cf54d479..a5eea2e8e 100644 --- a/src/common/parser/EscapeSequenceParser.ts +++ b/src/common/parser/EscapeSequenceParser.ts @@ -470,8 +470,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP this._oscParser.reset(); this._dcsParser.reset(); this._apcParser.reset(); - this._params.reset(); - this._params.addParam(0); // ZDM + this._params.resetZdm(); this._collect = 0; this.precedingJoinState = 0; // abort pending continuation from async handler @@ -620,8 +619,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP return handlerResult; } if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE; - this._params.reset(); - this._params.addParam(0); // ZDM + this._params.resetZdm(); this._collect = 0; break; case ParserStackType.OSC: @@ -631,8 +629,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP return handlerResult; } if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE; - this._params.reset(); - this._params.addParam(0); // ZDM + this._params.resetZdm(); this._collect = 0; break; case ParserStackType.APC: @@ -642,8 +639,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP return handlerResult; } if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE; - this._params.reset(); - this._params.addParam(0); // ZDM + this._params.resetZdm(); this._collect = 0; break; } @@ -673,8 +669,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP && this.currentState < ParserState.OSC_STRING && i + 2 < length && data[i + 1] === 0x5b ) { - this._params.reset(); - this._params.addParam(0); // ZDM + this._params.resetZdm(); this._collect = 0; let k = i + 2; let ch = data[k]; @@ -824,8 +819,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP this.precedingJoinState = 0; break; case ParserAction.CLEAR: - this._params.reset(); - this._params.addParam(0); // ZDM + this._params.resetZdm(); this._collect = 0; break; case ParserAction.DCS_HOOK: @@ -849,8 +843,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP return handlerResult; } if (code === 0x1b) transition |= ParserState.ESCAPE; - this._params.reset(); - this._params.addParam(0); // ZDM + this._params.resetZdm(); this._collect = 0; this.precedingJoinState = 0; break; @@ -874,8 +867,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP return handlerResult; } if (code === 0x1b) transition |= ParserState.ESCAPE; - this._params.reset(); - this._params.addParam(0); // ZDM + this._params.resetZdm(); this._collect = 0; this.precedingJoinState = 0; break; @@ -899,8 +891,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP return handlerResult; } if (code === 0x1b) transition |= ParserState.ESCAPE; - this._params.reset(); - this._params.addParam(0); // ZDM + this._params.resetZdm(); this._collect = 0; this.precedingJoinState = 0; break; diff --git a/src/common/parser/Params.ts b/src/common/parser/Params.ts index 7071453d0..31872a0b2 100644 --- a/src/common/parser/Params.ts +++ b/src/common/parser/Params.ts @@ -129,6 +129,19 @@ export class Params implements IParams { this._digitIsSub = false; } + /** + * Reset and add 0 as first param (ZDM). + */ + public resetZdm(): void { + this.length = 1; + this._subParamsLength = 0; + this._rejectDigits = false; + this._rejectSubDigits = false; + this._digitIsSub = false; + this._subParamsIdx[0] = 0; + this.params[0] = 0; + } + /** * Add a parameter value. * `Params` only stores up to `maxLength` parameters, any later diff --git a/src/common/parser/Types.ts b/src/common/parser/Types.ts index 5d1d8b53e..cfa00c1a8 100644 --- a/src/common/parser/Types.ts +++ b/src/common/parser/Types.ts @@ -32,6 +32,7 @@ export interface IParams { clone(): IParams; toArray(): ParamsArray; reset(): void; + resetZdm(): void; addParam(value: number): void; addSubParam(value: number): void; hasSubParams(idx: number): boolean;