UNPKG

parser-combinator

Version:
92 lines (74 loc) 2.62 kB
'use strict'; 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