"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const immutable_1 = __importDefault(require("immutable")); const promise_1 = __importDefault(require("../utils/promise")); class Parser extends immutable_1.default.Record({ name: String(), // List of extensions that can be processed using this parser extensions: immutable_1.default.List(), // Parsing functions readme: Function(), langs: Function(), summary: Function(), glossary: Function(), page: Function(), inline: Function() }) { getName() { return this.get("name"); } getExtensions() { return this.get("extensions"); } // PARSE parseReadme(content, options) { const readme = this.get("readme"); return (0, promise_1.default)(readme(content, options)); } parseSummary(content, options) { const summary = this.get("summary"); return (0, promise_1.default)(summary(content)); } parseGlossary(content, options) { const glossary = this.get("glossary"); return (0, promise_1.default)(glossary(content, options)); } preparePage(content) { const page = this.get("page"); if (!page.prepare) { return (0, promise_1.default)(content); } return (0, promise_1.default)(page.prepare(content)); } parsePage(content, options) { const page = this.get("page"); return (0, promise_1.default)(page(content, options)); } parseInline(content, options) { const inline = this.get("inline"); return (0, promise_1.default)(inline(content, options)); } parseLanguages(content, options) { const langs = this.get("langs"); return (0, promise_1.default)(langs(content, options)); } // TO TEXT renderLanguages(content) { const langs = this.get("langs"); return (0, promise_1.default)(langs.toText(content)); } renderSummary(content) { const summary = this.get("summary"); return (0, promise_1.default)(summary.toText(content)); } renderGlossary(content) { const glossary = this.get("glossary"); return (0, promise_1.default)(glossary.toText(content)); } /** Test if this parser matches an extension @param {string} ext @return {boolean} */ matchExtension(ext) { const exts = this.getExtensions(); return exts.includes(ext.toLowerCase()); } /** Create a new parser using a module (gitbook-markdown, etc) @param {string} name @param {Array} extensions @param {Object} module @return {Parsers} */ static create(name, extensions, module) { return new Parser({ name: name, extensions: immutable_1.default.List(extensions), readme: module.readme, langs: module.langs, summary: module.summary, glossary: module.glossary, page: module.page, inline: module.inline }); } } exports.default = Parser;