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

91 lines
2.7 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 error_1 = __importDefault(require("../utils/error"));
const file_1 = __importDefault(require("./file"));
const glossaryEntry_1 = __importDefault(require("./glossaryEntry"));
const parsers_1 = __importDefault(require("../parsers"));
class Glossary extends immutable_1.default.Record({
file: new file_1.default(),
entries: immutable_1.default.OrderedMap()
}) {
getFile() {
return this.get("file");
}
getEntries() {
return this.get("entries");
}
/**
Return an entry by its name
@param {string} name
@return {GlossaryEntry}
*/
getEntry(name) {
const entries = this.getEntries();
const id = glossaryEntry_1.default.nameToID(name);
return entries.get(id);
}
/**
Render glossary as text
@return {Promise<String>}
*/
toText(parser) {
const file = this.getFile();
const entries = this.getEntries();
parser = parser ? parsers_1.default.getByExt(parser) : file.getParser();
if (!parser) {
throw error_1.default.FileNotParsableError({
filename: file.getPath()
});
}
return parser.renderGlossary(entries.toJS());
}
/**
Add/Replace an entry to a glossary
@param {Glossary} glossary
@param {GlossaryEntry} entry
@return {Glossary}
*/
static addEntry(glossary, entry) {
const id = entry.getID();
let entries = glossary.getEntries();
entries = entries.set(id, entry);
return glossary.set("entries", entries);
}
/**
Add/Replace an entry to a glossary by name/description
*/
static addEntryByName(glossary, name, description) {
const entry = new glossaryEntry_1.default({
name: name,
description: description
});
return Glossary.addEntry(glossary, entry);
}
/**
Create a glossary from a list of entries
@param file
@param {Array|List} entries
@return {Glossary}
*/
static createFromEntries(file, entries) {
entries = entries.map((entry) => {
if (!(entry instanceof glossaryEntry_1.default)) {
entry = new glossaryEntry_1.default(entry);
}
return [entry.getID(), entry];
});
return new Glossary({
file: file,
entries: immutable_1.default.OrderedMap(entries)
});
}
}
exports.default = Glossary;