asciidoctor-gettext
Version:
gettext/po string extraction tool for asciidoc documents
163 lines • 6.43 kB
JavaScript
;
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