parser-combinator
Version:
Parser combinators
77 lines (57 loc) • 2.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _index = require('../../parsec/index');
var _index2 = require('../../stream/index');
var _index3 = _interopRequireDefault(_index2);
var _textParser = require('./text-parser');
var _textParser2 = _interopRequireDefault(_textParser);
var _token = require('./token');
var _token2 = _interopRequireDefault(_token);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Created by Simon on 24/12/2016.
*/
function stop() {
return _index.F.eos.or(_index.C.charIn('\r\n*`'));
}
function pureText() {
return _index.F.not(stop()).rep().map(function (chars) {
return chars.join('');
});
}
function formattedSequence() {
return _textParser2.default.formattedSequence(pureText(), stop());
}
function bulletLv1() {
return _index.C.char('\n').optrep().then(_index.C.charIn('*-')) //first character of a bullet is * or -
.then(_index.C.charIn(' \xA0')) // second character of a bullet is space or non-breakable space
.thenRight(formattedSequence()).map(function (someText) {
return { bullet: { level: 1, content: someText.array() } };
});
}
function bulletLv2() {
return _index.C.char('\n').optrep().then(_token2.default.fourSpacesBlock()).then(_index.C.char(' ').optrep()) //careful. This will accept 8 space. therefore the code-parser must have higher priority
.then(_index.C.charIn('*-')) //first character of a bullet is * or -
.then(_index.C.charIn(' \xA0')) // second character of a bullet is space or non-breakable space
.thenRight(formattedSequence()).map(function (someText) {
return { bullet: { level: 2, content: someText.array() } };
});
}
function bullet() {
return _index.F.try(bulletLv2()).or(bulletLv1());
}
function parseBullet(line) {
var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
return bullet().parse(_index3.default.ofString(line), offset);
}
exports.default = {
bulletLv1: bulletLv1,
bulletLv2: bulletLv2,
bullet: bullet,
parse: function parse(line) {
return parseBullet(line, 0);
}
};
//# sourceMappingURL=bullet-parser.js.map