parser-combinator
Version:
Parser combinators
92 lines (74 loc) • 2.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _index = require('../../parsec/index');
var _index2 = require('../../stream/index');
var _index3 = _interopRequireDefault(_index2);
var _token = require('./token');
var _token2 = _interopRequireDefault(_token);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function sharps() {
return _index.C.char('#').rep().map(function (string) {
return string.array().length;
});
}
// a white is a sequence of at least one space, tab or non-breakable space
/**
* Created by Simon on 14/12/2016.
*/
/*
* This module try parse a title. The folowing will be recognised as titles:
* "#foo\n" "##foo\n" "foo\n===" "foo\n---" "########## foo \n"
*
* Limits and axiomes
* A \n in the markdown source ends the parsing of a title. #foo\nbar -> {title:foo},{text:bar}
*/
function white() {
return _index.C.charIn(' \t\xA0').rep();
}
function equals() {
return _index.C.string('===').then(_token2.default.rawTextUntil(_token2.default.eol())).then(_token2.default.eol()).thenReturns(1); // this mean a level 1 title
}
function minuses() {
return _index.C.string('---').then(_token2.default.rawTextUntil(_token2.default.eol())).then(_token2.default.eol()).thenReturns(2); // this mean a level 2 title
}
function titleSharp() {
return sharps().thenLeft(white()).then(_token2.default.rawTextUntil(_token2.default.eol())).thenLeft(_token2.default.eol().or(_index.F.eos)).map(function (array) {
return {
title: {
level: array[0],
text: array[1]
}
};
});
}
function titleLine() {
return _token2.default.blank().thenRight(_token2.default.rawTextUntilChar('\r\n').thenLeft(_token2.default.eol()).then(equals().or(minuses())).map(function (array) {
return {
title: {
level: array[1],
text: array[0]
}
};
}));
}
function title() {
return titleSharp().or(titleLine());
}
function parseTitle(line) {
var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
return title().parse(_index3.default.ofString(line), offset);
}
exports.default = {
titleLine: titleLine,
titleSharp: titleSharp,
title: title,
parse: function parse(line) {
return parseTitle(line, 0);
}
};
/* SHORTCOMINGS :
* Can not have formatted text in a title. "##2*3*4 = 24\n" will display "2*3*4 = 24"
*/
//# sourceMappingURL=title-parser.js.map