From 8f936d00b72d038b5153734ffc0953a1b522662e Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Tue, 23 Jul 2013 00:37:13 -0500 Subject: [PATCH] tput.js refactor. rename variables. --- lib/tput.js | 65 +++++++++++++++++++++-------------------------------- 1 file changed, 25 insertions(+), 40 deletions(-) diff --git a/lib/tput.js b/lib/tput.js index e3aad48..6be45ee 100644 --- a/lib/tput.js +++ b/lib/tput.js @@ -526,8 +526,7 @@ Tput.prototype.compile = function(info) { ['bools', 'numbers', 'strings'].forEach(function(type) { Object.keys(info[type]).forEach(function(key) { info.all[key] = info[type][key]; - self._debug('Compiling %s: %s', key, JSON.stringify(info.all[key])); - info.methods[key] = self._compile(info.all[key], key, info); + info.methods[key] = self._compile(info, key, info.all[key]); }); }); @@ -594,7 +593,11 @@ Tput.prototype.inject = function(info) { // See: // ~/ncurses/ncurses/tinfo/lib_tparm.c // ~/ncurses/ncurses/tinfo/comp_scan.c -Tput.prototype._compile = function(str, key, info) { +Tput.prototype._compile = function(info, key, str) { + var self = this; + + this._debug('Compiling %s: %s', key, JSON.stringify(str)); + switch (typeof str) { case 'boolean': return str; @@ -629,30 +632,18 @@ Tput.prototype._compile = function(str, key, info) { , code = header , val = str , buff = '' - , cap; - - var ch - , op - , i - , v - - var fi + , cap + , ch + , fi , then , els , end; - function clear() { - if (buff) { - echo(JSON.stringify(buff).replace(/\\u00([0-9a-fA-F]{2})/g, '\\x$1')); - buff = ''; - } - } - function read(regex, no) { cap = regex.exec(val); if (!cap) return; val = val.substring(cap[0].length); - ch = op = i = v = cap[1]; + ch = cap[1]; if (!no) clear(); return cap; } @@ -681,12 +672,11 @@ Tput.prototype._compile = function(str, key, info) { buff += c; } - function push(c) { - expr('(stack.push(v = ' + c + '), v)'); - } - - function pop(c) { - expr((c ? c + ' = ' : '') + 'stack.pop()'); + function clear() { + if (buff) { + echo(JSON.stringify(buff).replace(/\\u00([0-9a-fA-F]{2})/g, '\\x$1')); + buff = ''; + } } while (val) { @@ -818,28 +808,28 @@ Tput.prototype._compile = function(str, key, info) { // %p[1-9] // push i'th parameter if (read(/^%p([1-9])/)) { - expr('(stack.push(v = params[' + (i - 1) + ']), v)'); + expr('(stack.push(v = params[' + (ch - 1) + ']), v)'); continue; } // %P[a-z] // set dynamic variable [a-z] to pop() if (read(/^%P([a-z])/)) { - expr('dyn.' + v + ' = stack.pop()'); + expr('dyn.' + ch + ' = stack.pop()'); continue; } // %g[a-z] // get dynamic variable [a-z] and push it if (read(/^%g([a-z])/)) { - expr('(stack.push(dyn.' + v + '), dyn.' + v + ')'); + expr('(stack.push(dyn.' + ch + '), dyn.' + ch + ')'); continue; } // %P[A-Z] // set static variable [a-z] to pop() if (read(/^%P([A-Z])/)) { - expr('stat.' + v + ' = stack.pop()'); + expr('stat.' + ch + ' = stack.pop()'); continue; } @@ -851,7 +841,7 @@ Tput.prototype._compile = function(str, key, info) { // documented in other implementations. Relying on it will adversely // impact portability to other implementations. if (read(/^%g([A-Z])/)) { - expr('(stack.push(v = stat.' + v + '), v)'); + expr('(stack.push(v = stat.' + ch + '), v)'); continue; } @@ -883,9 +873,9 @@ Tput.prototype._compile = function(str, key, info) { // %= %> %< // logical operations: push(pop() op pop()) if (read(/^%([+\-*\/m&|\^=><])/)) { - if (op === '=') op = '==='; - else if (op === 'm') op = '%'; - expr('(stack.push(v = (stack.pop() ' + op + ' stack.pop()) || 0), v)'); + if (ch === '=') ch = '==='; + else if (ch === 'm') ch = '%'; + expr('(stack.push(v = (stack.pop() ' + ch + ' stack.pop()) || 0), v)'); continue; } @@ -894,7 +884,7 @@ Tput.prototype._compile = function(str, key, info) { if (read(/^%([AO])/)) { // Are we supposed to store the result on the stack? expr('(stack.push(v = (stack.pop() ' - + (op === 'A' ? '&&' : '||') + + (ch === 'A' ? '&&' : '||') + ' stack.pop())), v)'); continue; } @@ -902,7 +892,7 @@ Tput.prototype._compile = function(str, key, info) { // %! %~ // unary operations (logical and bit complement): push(op pop()) if (read(/^%([!~])/)) { - expr('(stack.push(v = ' + op + 'stack.pop()), v)'); + expr('(stack.push(v = ' + ch + 'stack.pop()), v)'); continue; } @@ -926,10 +916,6 @@ Tput.prototype._compile = function(str, key, info) { // It is possible to form else-if's a la Algol 68: // %? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e %; // where ci are conditions, bi are bodies. - // Use the -f option of tic or infocmp to see the structure of - // if-then-else's. Some strings, e.g., sgr can be very complicated when - // written on one line. The -f option splits the string into lines with - // the parts indented. if (read(/^%\?/)) { end = -1; stmt(';if ('); @@ -949,7 +935,6 @@ Tput.prototype._compile = function(str, key, info) { continue; } - // if/then/else/end // Terminfo does elseif's like // this: %?[expr]%t...%e[expr]%t...%; if (read(/^%e/)) {