User:Quarl/shortcuts.js

// User:Quarl/shortcuts.js - shortcut utilities

//

// Defines the Shortcuts class.

// Input is an associative array like this:

//

/*

s = Shortcuts({

'x1' : 'str 1',

'x2 ' : 'str 2', // the space after x2 prevents msg() from displaying this entry

'x3,x4': 'str 34' // x3 and x4 are aliases; msg() only displays x3

});

  • /

function Shortcuts(input) {

if (!(this instanceof Shortcuts)) return new Shortcuts(input);

this.shortcuts = {};

for (k in input) {

var keys = k.toUpperCase().split(',');

this.shortcuts[keys[0]] = input[k];

for (var i=1; i < keys.length; ++i) {

this.shortcuts[keys[i]] = input[k] + ' ';

}

}

}

Shortcuts.prototype.msg = function() {

var msg = 'Shortcuts available:\n';

for (var key in this.shortcuts) {

if (this.shortcuts[key].match(/ $/)) continue;

msg += key + ': ' + this.shortcuts[key] + '\n';

}

return msg;

}

Shortcuts.prototype.subst = function(word) {

return trimspaces(this.shortcuts[word.toUpperCase()]) || word;

}

Shortcuts.prototype.substP = function(word) {

return Boolean(this.shortcuts[word.toUpperCase()]);

}

// replace the first word (doesn't require uppercase)

Shortcuts.prototype.substFirstWord = function(msg) {

if (!msg) return msg;

if (msg.match(/^([a-zA-Z]+)(.*)$/)) {

return this.subst(RegExp.$1) + RegExp.$2;

}

return msg;

}

// replace all UPPERCASE words

Shortcuts.prototype.substUppercaseWords = function(msg) {

if (!msg) return msg;

var ret = '';

var m;

while (msg && (m = msg.match(/^(.*?)\b([A-Z]+)\b(.*)$/)) ) {

ret += m[1] + this.subst(m[2]);

msg = m[3];

}

ret += msg;

return ret;

}

// replace all words (ignoring case)

Shortcuts.prototype.substWords = function(msg) {

if (!msg) return msg;

var ret = '';

var m;

while (msg && (m = msg.match(/^(.*?)\b([A-Za-z]+)\b(.*)$/)) ) {

ret += m[1] + this.subst(m[2]);

msg = m[3];

}

ret += msg;

return ret;

}

//