UNPKG

lirc

Version:

An old IRC client for node

189 lines (178 loc) 4.71 kB
// 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);