lirc
Version:
An old IRC client for node
189 lines (178 loc) • 4.71 kB
JavaScript
// Generated by CoffeeScript 1.12.7
(function() {
var clone, codes, lirc, mappingIndexes, merge, rawBuffer, ref, typeOf;
lirc = require('./lirc');
codes = require('./codes');
ref = lirc.utils, merge = ref.merge, clone = ref.clone, typeOf = ref.typeOf;
rawBuffer = null;
mappingIndexes = {};
lirc.parse = {
raw: function(text) {
var i, len, line, lines, msg;
if (typeof text !== 'string') {
return text;
}
lines = text.split('\r\n');
if (rawBuffer) {
lines[0] = rawBuffer + lines[0];
rawBuffer = null;
}
if (!text.match(/\r\n$/)) {
rawBuffer = lines.slice(-1)[0];
}
lines.pop();
for (i = 0, len = lines.length; i < len; i++) {
line = lines[i];
msg = lirc.parse.msg(line);
lirc.parse.mapping('parsing', msg);
lirc.parse.mapping('actions', msg);
lirc.emit('msg', msg);
}
return true;
},
msg: function(raw) {
var m, msg;
if (raw == null) {
raw = '';
}
msg = {
raw: raw,
origin: '',
cmd: 'UNKNOWN',
args: '',
text: '',
time: new Date().getTime()
};
if (msg && (m = raw.match(/^(?::(\S+)\s)?(\S+)(?:\s(?:([^:]+))?(?::(.*))?)?/))) {
if (m[1]) {
msg.origin = m[1];
}
if (m[2]) {
msg.cmd = m[2];
}
if (m[3]) {
msg.args = m[3].replace(/\s$/, '');
}
if (m[4]) {
msg.text = m[4];
}
if (msg.cmd) {
msg.cmd = lirc.parse.command(msg.cmd);
}
}
return msg;
},
command: function(cmd) {
var key;
for (key in codes) {
if (cmd === key) {
return codes[key];
}
}
return cmd;
},
mapping: function(name, msg) {
var args, aryIndex, i, index, len, mapping, ref1;
mapping = lirc.mappings[name] || void 0;
if (!mapping) {
return msg;
}
index = (ref1 = mappingIndexes[name]) != null ? ref1[msg.cmd] : void 0;
if (index) {
msg = mapping[index][1](msg);
} else {
if (!(name in mappingIndexes)) {
mappingIndexes[name] = {};
}
for (aryIndex = i = 0, len = mapping.length; i < len; aryIndex = ++i) {
args = mapping[aryIndex];
if ((typeof args[0] === 'string' && args[0] === msg.cmd) || msg.cmd.match(args[0])) {
if (!(msg.cmd in mappingIndexes[name])) {
mappingIndexes[name][msg.cmd] = aryIndex;
}
args[1](msg);
break;
}
}
}
return msg;
},
mask: function(mask) {
var m, obj, ref1;
if (mask == null) {
mask = '';
}
obj = {
nick: '',
ident: '',
host: '',
domain: '',
raw: mask
};
if (m = mask.match(/^(.+)!~?(.+)@([^\.]+)\.(.+)/)) {
ref1 = m.slice(1), obj.nick = ref1[0], obj.ident = ref1[1], obj.host = ref1[2], obj.domain = ref1[3];
}
return obj;
}
};
lirc.format = {
nick: function(nick) {
if (nick == null) {
nick = '';
}
if (!nick) {
return nick;
}
nick = lirc.format.substitute.randomNumbers(nick, /[#?]/g);
return nick;
},
stripColors: function(str) {
return str.replace(/[\x02\x1f\x16\x0f]|\x03\d{0,2}(?:,\d{0,2})?/g, '');
},
substitute: {
vars: function(text) {
var ref1, val, varName;
ref1 = lirc.format.substitute.vars.vars;
for (varName in ref1) {
val = ref1[varName];
if (val) {
text = text.replace("\\b\\$" + varName + "\\b", val);
}
}
return text;
},
randomNumbers: function(str, subChar) {
var char, chars, i, index, len;
if (!str || !subChar) {
return str;
}
chars = str.split('');
for (index = i = 0, len = chars.length; i < len; index = ++i) {
char = chars[index];
if (char.match(subChar)) {
chars[index] = Math.floor(Math.random() * (9 - 0 + 1));
}
}
return chars.join('');
}
}
};
lirc.format.substitute.vars.vars = {};
lirc.bind = function(obj, emitter) {
var key, objType;
if (!emitter) {
return emitter;
}
objType = typeOf(obj);
if (objType === 'object') {
for (key in obj) {
emitter.on(key, obj[key]);
}
} else if (objType === 'array') {
for (key in obj) {
emitter.on(obj[key][0], obj[key][1]);
}
}
return emitter;
};
}).call(this);