diff --git a/lib/tput.js b/lib/tput.js index 8e6fb57..20d3b87 100644 --- a/lib/tput.js +++ b/lib/tput.js @@ -656,16 +656,14 @@ Tput.prototype.compile = function(info) { }); Object.keys(info.methods).forEach(function(key) { - var alias = Tput.alias[key]; - if (!alias) return; - if (!Array.isArray(alias)) alias = [alias]; - alias.forEach(function(alias) { - if (info.methods[alias] && alias !== key && alias !== 'ML') { - // We can ignore `lines` and `ML` here. - throw new Error('Alias collision: ' + key + ' -> ' + alias); - } + if (!Tput.alias[key]) return; + Tput.alias[key].forEach(function(alias) { info.methods[alias] = info.methods[key]; }); + // Could just use: + // Object.keys(Tput.aliasMap).forEach(function(key) { + // info.methods[key] = info.methods[Tput.aliasMap[key]]; + // }); }); return info; @@ -1435,19 +1433,12 @@ Tput.prototype.translateTermcap = function(info) { }); // Separate aliases for termcap - var talias = (function() { - var alias = Tput.alias - , out = {}; + var map = (function() { + var out = {}; - Object.keys(alias).forEach(function(key) { - var a = alias[key] - , n = a.slice(); - - if (!a._termcapRemoved) { - n.splice(1, 1); - } - - out[a.termcap] = [key].concat(n); + Object.keys(Tput.alias).forEach(function(key) { + var aliases = Tput.alias[key]; + out[aliases.termcap] = key; }); return out; @@ -1461,8 +1452,8 @@ Tput.prototype.translateTermcap = function(info) { if (key === 'strings') { info.strings[cap] = self._captoinfo(cap, info.strings[cap], 1); } - if (talias[cap]) { - out[key][talias[cap][0]] = info[key][cap]; + if (map[cap]) { + out[key][map[cap]] = info[key][cap]; } else { // NOTE: Possibly include all termcap names // in a separate alias.js file. Some are @@ -2274,62 +2265,25 @@ function sprintf(src) { * Aliases */ -Tput.alias = require('./alias'); +Tput._alias = require('./alias'); + +Tput.alias = {}; + +['bools', 'numbers', 'strings'].forEach(function(type) { + Object.keys(Tput._alias[type]).forEach(function(key) { + var aliases = Tput._alias[type][key]; + Tput.alias[key] = [aliases[0]]; + Tput.alias[key].terminfo = aliases[0]; + Tput.alias[key].termcap = aliases[1]; + }); +}); // Bools -Tput.alias.bools.no_esc_ctlc.push('beehive_glitch'); -Tput.alias.bools.dest_tabs_magic_smso.push('teleray_glitch'); +Tput.alias.no_esc_ctlc.push('beehive_glitch'); +Tput.alias.dest_tabs_magic_smso.push('teleray_glitch'); // Numbers -Tput.alias.numbers.micro_col_size.push('micro_char_size'); - -// Merge into one object -merge(Tput.alias, Tput.alias.bools); -delete Tput.alias.bools; - -merge(Tput.alias, Tput.alias.numbers); -delete Tput.alias.numbers; - -merge(Tput.alias, Tput.alias.strings); -delete Tput.alias.strings; - -// Make sure there are no collisions between terminfo names -// and termcap names. Terminfo takes precedence. -Tput._vec = Object.keys(Tput.alias).map(function(key) { - return Array.isArray(Tput.alias[key]) - ? Tput.alias[key][0] - : Tput.alias[key]; -}); - -Object.keys(Tput.alias).forEach(function(key) { - if (!Array.isArray(Tput.alias[key])) { - return; - } - - var alias = Tput.alias[key] - , tcap = alias[1]; - - alias.name = key; - alias.terminfo = alias[0]; - alias.termcap = alias[1]; - - if (!tcap) return; - - if (~Tput._vec.indexOf(tcap)) { - alias._termcapRemoved = true; - alias.splice(1, 1); - } -}); - -assert.notEqual(Tput.alias.exit_delete_mode[1], 'ed'); -assert.equal(Tput.alias.exit_delete_mode.termcap, 'ed'); -// assert.notEqual(Tput.alias.lines[0], 'lines'); -// assert.notEqual(Tput.alias.set_lr_margin[1], 'ML'); - -// Possibly just ignore certain aliases like so: -// Tput.alias.exit_delete_mode.ignore = 1; -// Tput.alias.lines.ignore = 0; -// Tput.alias.set_lr_margin.ignore = 1; +Tput.alias.micro_col_size.push('micro_char_size'); /** * Feature Checking @@ -2338,11 +2292,8 @@ assert.equal(Tput.alias.exit_delete_mode.termcap, 'ed'); Tput.aliasMap = {}; Object.keys(Tput.alias).forEach(function(key) { - var aliases = Array.isArray(Tput.alias[key]) - ? Tput.alias[key] - : [Tput.alias[key]]; Tput.aliasMap[key] = key; - aliases.forEach(function(k) { + Tput.alias[key].forEach(function(k) { Tput.aliasMap[k] = key; }); });