2025-05-12 05:38:44 +09:00

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;