From 9a32852e613ab65dc564b193eabe27c5ba71b133 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Tue, 1 May 2018 21:07:13 +0200 Subject: [PATCH] single arg for DCS and ESC handler registration --- src/EscapeSequenceParser.ts | 20 ++++++++-------- src/InputHandler.ts | 46 ++++++++++++++++++------------------- src/Types.ts | 8 +++---- 3 files changed, 36 insertions(+), 38 deletions(-) diff --git a/src/EscapeSequenceParser.ts b/src/EscapeSequenceParser.ts index 9c35f255..a3ee6b84 100644 --- a/src/EscapeSequenceParser.ts +++ b/src/EscapeSequenceParser.ts @@ -278,11 +278,11 @@ export class EscapeSequenceParser implements IEscapeSequenceParser { this._csiHandlerFb = callback; } - setEscHandler(collect: string, flag: string, callback: (collect: string, flag: number) => void): void { - this._escHandlers[collect + flag] = callback; + setEscHandler(collectAndFlag: string, callback: () => void): void { + this._escHandlers[collectAndFlag] = callback; } - clearEscHandler(collect: string, flag: string): void { - if (this._escHandlers[collect + flag]) delete this._escHandlers[collect + flag]; + clearEscHandler(collectAndFlag: string): void { + if (this._escHandlers[collectAndFlag]) delete this._escHandlers[collectAndFlag]; } setEscHandlerFallback(callback: (...params: any[]) => void): void { this._escHandlerFb = callback; @@ -298,11 +298,11 @@ export class EscapeSequenceParser implements IEscapeSequenceParser { this._oscHandlerFb = callback; } - setDcsHandler(collect: string, flag: string, handler: IDcsHandler): void { - this._dcsHandlers[collect + flag] = handler; + setDcsHandler(collectAndFlag: string, handler: IDcsHandler): void { + this._dcsHandlers[collectAndFlag] = handler; } - clearDcsHandler(collect: string, flag: string): void { - if (this._dcsHandlers[collect + flag]) delete this._dcsHandlers[collect + flag]; + clearDcsHandler(collectAndFlag: string): void { + if (this._dcsHandlers[collectAndFlag]) delete this._dcsHandlers[collectAndFlag]; } setDcsHandlerFallback(handler: IDcsHandler): void { this._dcsHandlerFb = handler; @@ -336,7 +336,6 @@ export class EscapeSequenceParser implements IEscapeSequenceParser { let params = this.params; const table: Uint8Array | number[] = this.transitions.table; let dcsHandler: IDcsHandler | null = this._activeDcsHandler; - let ident: string = ''; // ugly workaround for ESC and DCS lookup keys let callback: Function | null = null; // process input string @@ -459,8 +458,7 @@ export class EscapeSequenceParser implements IEscapeSequenceParser { dcs = -1; break; case ParserAction.DCS_HOOK: - ident = collect + String.fromCharCode(code); - dcsHandler = this._dcsHandlers[ident]; + dcsHandler = this._dcsHandlers[collect + String.fromCharCode(code)]; if (!dcsHandler) dcsHandler = this._dcsHandlerFb; dcsHandler.hook(collect, params, code); break; diff --git a/src/InputHandler.ts b/src/InputHandler.ts index 7b601d28..59b98cf8 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -158,30 +158,30 @@ export class InputHandler implements IInputHandler { /** * ESC handlers */ - this._parser.setEscHandler('', '7', () => this.saveCursor([])); - this._parser.setEscHandler('', '8', () => this.restoreCursor([])); - this._parser.setEscHandler('', 'D', () => this.index()); - this._parser.setEscHandler('', 'E', () => this.nextLine()); - this._parser.setEscHandler('', 'H', () => this.tabSet()); - this._parser.setEscHandler('', 'M', () => this.reverseIndex()); - this._parser.setEscHandler('', '=', () => this.keypadApplicationMode()); - this._parser.setEscHandler('', '>', () => this.keypadNumericMode()); - this._parser.setEscHandler('', 'c', () => this.reset()); - this._parser.setEscHandler('', 'n', () => this.setgLevel(2)); - this._parser.setEscHandler('', 'o', () => this.setgLevel(3)); - this._parser.setEscHandler('', '|', () => this.setgLevel(3)); - this._parser.setEscHandler('', '}', () => this.setgLevel(2)); - this._parser.setEscHandler('', '~', () => this.setgLevel(1)); - this._parser.setEscHandler('%', '@', () => this.selectDefaultCharset()); - this._parser.setEscHandler('%', 'G', () => this.selectDefaultCharset()); + this._parser.setEscHandler('7', () => this.saveCursor([])); + this._parser.setEscHandler('8', () => this.restoreCursor([])); + this._parser.setEscHandler('D', () => this.index()); + this._parser.setEscHandler('E', () => this.nextLine()); + this._parser.setEscHandler('H', () => this.tabSet()); + this._parser.setEscHandler('M', () => this.reverseIndex()); + this._parser.setEscHandler('=', () => this.keypadApplicationMode()); + this._parser.setEscHandler('>', () => this.keypadNumericMode()); + this._parser.setEscHandler('c', () => this.reset()); + this._parser.setEscHandler('n', () => this.setgLevel(2)); + this._parser.setEscHandler('o', () => this.setgLevel(3)); + this._parser.setEscHandler('|', () => this.setgLevel(3)); + this._parser.setEscHandler('}', () => this.setgLevel(2)); + this._parser.setEscHandler('~', () => this.setgLevel(1)); + this._parser.setEscHandler('%@', () => this.selectDefaultCharset()); + this._parser.setEscHandler('%G', () => this.selectDefaultCharset()); for (let flag in CHARSETS) { - this._parser.setEscHandler('(', flag, () => this.selectCharset('(' + flag)); - this._parser.setEscHandler(')', flag, () => this.selectCharset(')' + flag)); - this._parser.setEscHandler('*', flag, () => this.selectCharset('*' + flag)); - this._parser.setEscHandler('+', flag, () => this.selectCharset('+' + flag)); - this._parser.setEscHandler('-', flag, () => this.selectCharset('-' + flag)); - this._parser.setEscHandler('.', flag, () => this.selectCharset('.' + flag)); - this._parser.setEscHandler('/', flag, () => this.selectCharset('/' + flag)); // FIXME: supported? + this._parser.setEscHandler('(' + flag, () => this.selectCharset('(' + flag)); + this._parser.setEscHandler(')' + flag, () => this.selectCharset(')' + flag)); + this._parser.setEscHandler('*' + flag, () => this.selectCharset('*' + flag)); + this._parser.setEscHandler('+' + flag, () => this.selectCharset('+' + flag)); + this._parser.setEscHandler('-' + flag, () => this.selectCharset('-' + flag)); + this._parser.setEscHandler('.' + flag, () => this.selectCharset('.' + flag)); + this._parser.setEscHandler('/' + flag, () => this.selectCharset('/' + flag)); // FIXME: supported? } /** diff --git a/src/Types.ts b/src/Types.ts index 8166ead4..bbe98475 100644 --- a/src/Types.ts +++ b/src/Types.ts @@ -479,16 +479,16 @@ export interface IEscapeSequenceParser { clearCsiHandler(flag: string): void; setCsiHandlerFallback(callback: (...params: any[]) => void): void; - setEscHandler(collect: string, flag: string, callback: (collect: string, flag: number) => void): void; - clearEscHandler(collect: string, flag: string): void; + setEscHandler(collectAndFlag: string, callback: () => void): void; + clearEscHandler(collectAndFlag: string): void; setEscHandlerFallback(callback: (...params: any[]) => void): void; setOscHandler(ident: number, callback: (data: string) => void): void; clearOscHandler(ident: number): void; setOscHandlerFallback(callback: (...params: any[]) => void): void; - setDcsHandler(collect: string, flag: string, handler: IDcsHandler): void; - clearDcsHandler(collect: string, flag: string): void; + setDcsHandler(collectAndFlag: string, handler: IDcsHandler): void; + clearDcsHandler(collectAndFlag: string): void; setDcsHandlerFallback(handler: IDcsHandler): void; setErrorHandler(callback: (state: IParsingState) => IParsingState): void;