tools: simplify tools/doc/preprocess.js
PR-URL: https://github.com/nodejs/node/pull/19539 Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Daijiro Wachi <daijiro.wachi@gmail.com>
This commit is contained in:
parent
50e5eff12a
commit
cde98ce147
@ -1,58 +1,38 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = preprocess;
|
||||
module.exports = processIncludes;
|
||||
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
|
||||
const includeExpr = /^@include\s+[\w-]+\.?[a-zA-Z]*$/gmi;
|
||||
const includeData = {};
|
||||
|
||||
function preprocess(inputFile, input, cb) {
|
||||
input = stripComments(input);
|
||||
processIncludes(inputFile, input, cb);
|
||||
}
|
||||
|
||||
function stripComments(input) {
|
||||
return input.replace(/^@\/\/.*$/gmi, '');
|
||||
}
|
||||
const includeExpr = /^@include\s+([\w-]+)(?:\.md)?$/gmi;
|
||||
const commentExpr = /^@\/\/.*$/gmi;
|
||||
|
||||
function processIncludes(inputFile, input, cb) {
|
||||
const includes = input.match(includeExpr);
|
||||
if (includes === null) return cb(null, input);
|
||||
if (includes === null)
|
||||
return cb(null, input.replace(commentExpr, ''));
|
||||
|
||||
let errState = null;
|
||||
let incCount = includes.length;
|
||||
|
||||
includes.forEach((include) => {
|
||||
let fname = include.replace(/^@include\s+/, '');
|
||||
if (!/\.md$/.test(fname)) fname = `${fname}.md`;
|
||||
|
||||
if (includeData.hasOwnProperty(fname)) {
|
||||
input = input.split(include).join(includeData[fname]);
|
||||
incCount--;
|
||||
if (incCount === 0) {
|
||||
return cb(null, input);
|
||||
}
|
||||
}
|
||||
|
||||
const fname = include.replace(includeExpr, '$1.md');
|
||||
const fullFname = path.resolve(path.dirname(inputFile), fname);
|
||||
|
||||
fs.readFile(fullFname, 'utf8', function(er, inc) {
|
||||
if (errState) return;
|
||||
if (er) return cb(errState = er);
|
||||
preprocess(inputFile, inc, function(er, inc) {
|
||||
if (errState) return;
|
||||
if (er) return cb(errState = er);
|
||||
incCount--;
|
||||
incCount--;
|
||||
|
||||
// Add comments to let the HTML generator know how the anchors for
|
||||
// headings should look like.
|
||||
includeData[fname] = `<!-- [start-include:${fname}] -->\n` +
|
||||
`${inc}\n<!-- [end-include:${fname}] -->\n`;
|
||||
input = input.split(`${include}\n`).join(`${includeData[fname]}\n`);
|
||||
if (incCount === 0) {
|
||||
return cb(null, input);
|
||||
}
|
||||
});
|
||||
// Add comments to let the HTML generator know
|
||||
// how the anchors for headings should look like.
|
||||
inc = `<!-- [start-include:${fname}] -->\n` +
|
||||
`${inc}\n<!-- [end-include:${fname}] -->\n`;
|
||||
input = input.split(`${include}\n`).join(`${inc}\n`);
|
||||
|
||||
if (incCount === 0)
|
||||
return cb(null, input.replace(commentExpr, ''));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user