]> git.proxmox.com Git - mirror_xterm.js.git/commitdiff
Start pulling CSI handlers out
authorDaniel Imms <daimms@microsoft.com>
Mon, 9 Jan 2017 23:11:05 +0000 (15:11 -0800)
committerDaniel Imms <daimms@microsoft.com>
Mon, 9 Jan 2017 23:17:15 +0000 (15:17 -0800)
src/Parser.ts

index 42d429a3e220f9b35ba3cceb299ce863bbdaa332..9e02818d3a3e9a115073e47085689e5b3271fb5f 100644 (file)
@@ -12,6 +12,22 @@ normalStateHandler[C0.BS] = (handler) => handler.backspace();
 normalStateHandler[C0.HT] = (handler) => handler.tab();
 normalStateHandler[C0.SO] = (handler) => handler.shiftOut();
 normalStateHandler[C0.SI] = (handler) => handler.shiftIn();
+// TODO: Add ESC and Default cases to normalStateHandler
+
+const csiStateHandler: {[key: string]: (handler: IInputHandler, parser: Parser) => void} = {};
+csiStateHandler['?'] = (_, parser) => parser.setPrefix('?');
+csiStateHandler['>'] = (_, parser) => parser.setPrefix('>');
+csiStateHandler['!'] = (_, parser) => parser.setPrefix('!');
+csiStateHandler['0'] = (_, parser) => parser.setParam(parser.getParam() * 10);
+csiStateHandler['1'] = (_, parser) => parser.setParam(parser.getParam() * 10 + 1);
+csiStateHandler['2'] = (_, parser) => parser.setParam(parser.getParam() * 10 + 2);
+csiStateHandler['3'] = (_, parser) => parser.setParam(parser.getParam() * 10 + 3);
+csiStateHandler['4'] = (_, parser) => parser.setParam(parser.getParam() * 10 + 4);
+csiStateHandler['5'] = (_, parser) => parser.setParam(parser.getParam() * 10 + 5);
+csiStateHandler['6'] = (_, parser) => parser.setParam(parser.getParam() * 10 + 6);
+csiStateHandler['7'] = (_, parser) => parser.setParam(parser.getParam() * 10 + 7);
+csiStateHandler['8'] = (_, parser) => parser.setParam(parser.getParam() * 10 + 8);
+csiStateHandler['9'] = (_, parser) => parser.setParam(parser.getParam() * 10 + 9);
 
 enum ParserState {
   NORMAL = 0,
@@ -487,15 +503,9 @@ export class Parser {
           break;
 
         case ParserState.CSI:
-          // '?', '>', '!'
-          if (ch === '?' || ch === '>' || ch === '!') {
-            this._terminal.prefix = ch;
-            break;
-          }
-
-          // 0 - 9
-          if (ch >= '0' && ch <= '9') {
-            this._terminal.currentParam = this._terminal.currentParam * 10 + ch.charCodeAt(0) - 48;
+          if (ch in csiStateHandler) {
+            csiStateHandler[ch](this._inputHandler, this);
+            // Skip below switch as this has handled these codes (eventually everything will be handled here
             break;
           }
 
@@ -1036,6 +1046,18 @@ export class Parser {
       }
     }
   }
+
+  public setPrefix(prefix: string) {
+    this._terminal.prefix = prefix;
+  }
+
+  public setParam(param: number) {
+    this._terminal.currentParam = param;
+  }
+
+  public getParam(): number {
+    return this._terminal.currentParam;
+  }
 }
 
 const wcwidth = (function(opts) {