103 lines
3.2 KiB
JavaScript
103 lines
3.2 KiB
JavaScript
"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<String>} 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;
|