jsedn
Version:
js implementation of edn
77 lines (70 loc) • 1.75 kB
JavaScript
// Generated by CoffeeScript 1.6.1
(function() {
var Char, StringObj, Tag, bigInt, char, handleToken, kw, sym, tokenHandlers, _ref;
_ref = require("./atoms"), Char = _ref.Char, StringObj = _ref.StringObj, char = _ref.char, kw = _ref.kw, sym = _ref.sym, bigInt = _ref.bigInt;
Tag = require("./tags").Tag;
handleToken = function(token) {
var handler, name;
if (token instanceof StringObj) {
return token.toString();
}
for (name in tokenHandlers) {
handler = tokenHandlers[name];
if (handler.pattern.test(token)) {
return handler.action(token);
}
}
return sym(token);
};
tokenHandlers = {
nil: {
pattern: /^nil$/,
action: function(token) {
return null;
}
},
boolean: {
pattern: /^true$|^false$/,
action: function(token) {
return token === "true";
}
},
keyword: {
pattern: /^[\:].*$/,
action: function(token) {
return kw(token);
}
},
char: {
pattern: /^\\.*$/,
action: function(token) {
return char(token.slice(1));
}
},
integer: {
pattern: /^[\-\+]?[0-9]+N?$/,
action: function(token) {
if (/\d{15,}/.test(token)) {
return bigInt(token);
}
return parseInt(token === "-0" ? "0" : token);
}
},
float: {
pattern: /^[\-\+]?[0-9]+(\.[0-9]*)?([eE][-+]?[0-9]+)?M?$/,
action: function(token) {
return parseFloat(token);
}
},
tagged: {
pattern: /^#.*$/,
action: function(token) {
return new Tag(token.slice(1));
}
}
};
module.exports = {
handleToken: handleToken,
tokenHandlers: tokenHandlers
};
}).call(this);