parser-combinator
Version:
Parser combinators
60 lines (50 loc) • 1.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _index = require('../parsec/index');
function _inQuote() {
return _index.C.char('"').then(_index.C.notChar('"').rep().map(function (item) {
return item.array();
})).then(_index.C.char('"'));
}
// accept simon@gmail.com, but also simon"le gr@nd"@gmail.com
function email() {
var illegalCharSet1 = ' @\xA0\n\t';
var illegalCharSet2 = ' @\xA0\n\t.';
return _inQuote().or(_index.C.charNotIn(illegalCharSet1)).rep().map(function (item) {
return item.array();
}) // this mean: repeat(inQuote or anyCharacter)
.then(_index.C.char('@')).then(_index.C.charNotIn(illegalCharSet2).rep().map(function (item) {
return item.array();
})).then(_index.C.char('.')).then(_index.C.charNotIn(illegalCharSet2).rep().map(function (item) {
return item.array();
})).map(function (characters) {
return { email: characters.join('') };
});
}
function date() {
return _index.N.digits.then(_index.C.charIn('-/').thenReturns('-')).then(_index.N.digits).then(_index.C.charIn('-/').thenReturns('-')).then(_index.N.digits).map(function (dateValues) {
return dateValues[4] > 2000 ? dateValues.reverse() : dateValues;
}).map(function (dateArray) {
return dateArray.join('');
});
}
function blank() {
var charsOrParser = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ' \t';
if (typeof charsOrParser === 'string') {
return _index.C.charIn(charsOrParser).optrep().thenReturns('');
} else {
return charsOrParser.optrep().thenReturns('');
}
}
function eol() {
return _index.C.char('\n').or(_index.C.string('\r\n'));
}
exports.default = {
email: email,
date: date,
blank: blank,
eol: eol()
};
//# sourceMappingURL=token-bundle.js.map