From f1fe73e974a4beddabfd1d5c9e61ffbd06abba9f Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey <chjjeffrey@gmail.com> Date: Wed, 27 Feb 2013 16:34:57 -0600 Subject: [PATCH] termcap compilation --- lib/tput.js | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/lib/tput.js b/lib/tput.js index be146ba..e1c431f 100644 --- a/lib/tput.js +++ b/lib/tput.js @@ -1032,11 +1032,67 @@ Tput.prototype.parseTermcap = function(data) { * man termcap */ -Tput.prototype.compileTermcap = function() { +Tput.prototype.compileTermcap = function(info) { + var self = this; + + info.all = {}; + + ['bools', 'numbers', 'strings'].forEach(function(key) { + Object.keys(info[key]).forEach(function(cap) { + info.all[cap] = self._compile(info[key][cap]); + }); + }); + + Object.keys(Tput.alias).forEach(function(ti) { + var a = Tput.alias[ti] + , tia = a[0] + , tc = a.termcap || a[1]; + + if (info.all[tc]) { + if (!a.termcap) { + a = a.slice(); + a.splice(1, 1); + } + info.all[ti] = info.all[tc]; + a.forEach(function(k) { + info.all[k] = info.all[tc]; + }); + } + }); + + Object.keys(info.all).forEach(function(key) { + self[key] = info.all[key]; + }); + + return info.all; }; -Tput.prototype._compileTermcap = function() { -}; +/*Tput.prototype.compileTermcap = function(info) { + var self = this + , alias = Tput.talias; + + info.all = {}; + + ['bools', 'numbers', 'strings'].forEach(function(key) { + Object.keys(info[key]).forEach(function(cap) { + var val = self._compile(info[key][cap]); + info[key][cap] = val; + info.all[cap] = val; + if (alias[cap]) { + alias.forEach(function(k) { + info[key][k] = val; + info.all[k] = val; + }); + } + }); + }); + + Object.keys(info.all).forEach(function(key) { + self[key] = info.all[key]; + }); + + return info.all; +};*/ /** * Helpers @@ -1183,6 +1239,20 @@ delete Tput.alias.numbers; merge(Tput.alias, Tput.alias.strings); delete Tput.alias.strings; +// Separate aliases for termcap +/*Tput.talias = (function() { + var alias = Tput.alias + , out = {}; + + Object.keys(alias).forEach(function(key) { + var a = alias[key].slice() + , tc = a.splice(1, 1)[0]; + out[tc] = [key].concat(a); + }); + + return out; +})();*/ + // Make sure there are no collisions between cap and tcap. Tput._vec = Object.keys(Tput.alias).map(function(key) { return Array.isArray(Tput.alias[key]) @@ -1201,6 +1271,7 @@ Object.keys(Tput.alias).forEach(function(key) { if (!tcap) return; if (~Tput._vec.indexOf(tcap)) { + alias.termcap = tcap; alias.splice(1, 1); } });