UNPKG

asciidoctor-gettext

Version:

gettext/po string extraction tool for asciidoc documents

163 lines 6.43 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var attributes_1 = require("./attributes"); var opal_utils_1 = require("./opal-utils"); var common_1 = require("./common"); var conditionals_1 = require("./conditionals"); var asciidoctor_js_1 = __importDefault(require("asciidoctor.js")); function defaultAttributeFilter(key) { return (-1 === attributes_1.nonLocalizableBuiltinAttributeKeys.indexOf(key)); } exports.defaultAttributeFilter = defaultAttributeFilter; function allBuiltinsAttributeFilter(key) { return (-1 === attributes_1.allBuiltinsAttributeKeys.indexOf(key)); } exports.allBuiltinsAttributeFilter = allBuiltinsAttributeFilter; function extend(base, sub) { return function (block) { return base(block).concat(sub(block)); }; } function extractAbstractBlock(block) { var extractions = []; var title = block.title; if (!opal_utils_1.isNil(title) && title !== '') { extractions.push({ text: title, }); } return extractions; } var extractVerbatimBlock = extend(extractAbstractBlock, function (block) { var literal = block; return [{ text: literal.getSource(), }]; }); function load(input, isPath, options) { var asciidoctor = asciidoctor_js_1.default(); asciidoctor.Extensions.register('extract', function () { this.preprocessor(conditionals_1.extractPreprocessor); }); var document = isPath ? asciidoctor.loadFile(input, options) : asciidoctor.load(input, options); asciidoctor.Extensions.unregister(['extract']); return document; } function extract(input, extractOptions, asciidocOptions) { if (extractOptions === void 0) { extractOptions = {}; } if (asciidocOptions === void 0) { asciidocOptions = {}; } var document = load(input, false, asciidocOptions); return extractBlock(document, extractOptions); } exports.extract = extract; function extractFile(path, extractOptions, asciidocOptions) { if (extractOptions === void 0) { extractOptions = {}; } if (asciidocOptions === void 0) { asciidocOptions = {}; } var document = load(path, true, asciidocOptions); return extractBlock(document, extractOptions); } exports.extractFile = extractFile; function extractBlock(block, options) { if (options === void 0) { options = {}; } var ignore = function (block) { return []; }; var extractMap = { admonition: extractAbstractBlock, dlist: extractAbstractBlock, document: function (block) { var document = block; var attributes = document.getAttributes(); var attributeFilter = options.attributeFilter || defaultAttributeFilter; var extractions = Object.keys(attributes).filter(attributeFilter).map(function (key) { return { text: attributes[key], }; }); return extractions; }, floating_title: extractAbstractBlock, image: extend(extractAbstractBlock, function (block) { var image = block; var attributes = image.getAttributes(); // Add the target file name to the localizable strings. This is useful // in case alternative image files need to be provided. var extractions = [{ text: attributes.target, }]; var altKeys = ['alt', 'default-alt']; altKeys.forEach(function (key) { // Only if the alt attributes are not just the base of the target file // name add them to the extractions: if (attributes[key] && attributes.target.substr(0, attributes[key].length) !== attributes[key]) { extractions.push({ text: attributes[key], }); } }); return extractions; }), list_item: function (block) { var li = block; var text = li.text; if (opal_utils_1.isNil(text) || text === '') { return []; } return [{ text: text, }]; }, listing: extractVerbatimBlock, literal: extractVerbatimBlock, olist: extractAbstractBlock, page_break: ignore, paragraph: extend(extractAbstractBlock, function (block) { var paragraphBlock = block; return [{ text: paragraphBlock.getSource(), }]; }), preamble: extractAbstractBlock, quote: extractAbstractBlock, section: extractAbstractBlock, sidebar: extractAbstractBlock, table: extend(extractAbstractBlock, function (block) { var table = block; var rowsKeys = ['head', 'body', 'foot']; return rowsKeys.reduce(function (extractions, key) { return extractions.concat(table.rows[key].reduce(function (extractions, cells) { return extractions.concat(cells.map(function (cell) { return { text: cell.text, }; })); }, [])); }, []); }), thematic_break: ignore, toc: ignore, ulist: extractAbstractBlock, verse: extractVerbatimBlock, }; var extraction = (function () { var extractFn = extractMap[block.node_name]; if (!extractFn) { console.error("Unknown node name: '" + block.node_name + "'"); return []; } return extractFn(block); })(); var childExtractions = extractBlocks(block.getBlocks(), options = {}); return extraction.concat(childExtractions); } exports.extractBlock = extractBlock; function extractBlocks(blocks, options) { return blocks.reduce(function (extractions, block) { // Oddly, the blocks of a dlist are arrays of arrays of blocks... if (common_1.isArrayOfBlocks(block)) { return extractions.concat(extractBlocks(block, options)); } return extractions.concat(extractBlock(block, options)); }, []); } exports.extractBlocks = extractBlocks; //# sourceMappingURL=extract.js.map