From e895d542245b8a1489a192c99335e54c7190d084 Mon Sep 17 00:00:00 2001 From: Vse Mozhet Byt Date: Thu, 22 Mar 2018 22:39:49 +0200 Subject: [PATCH] tools: simplify tools/doc/preprocess.js PR-URL: https://github.com/nodejs/node/pull/19539 Reviewed-By: Trivikram Kamat Reviewed-By: Luigi Pinca Reviewed-By: Daijiro Wachi --- tools/doc/preprocess.js | 56 +++++++++++++---------------------------- 1 file changed, 18 insertions(+), 38 deletions(-) diff --git a/tools/doc/preprocess.js b/tools/doc/preprocess.js index 5b6901153dc61f..f8d394735dd30b 100644 --- a/tools/doc/preprocess.js +++ b/tools/doc/preprocess.js @@ -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--; - - // Add comments to let the HTML generator know how the anchors for - // headings should look like. - includeData[fname] = `\n` + - `${inc}\n\n`; - input = input.split(`${include}\n`).join(`${includeData[fname]}\n`); - if (incCount === 0) { - return cb(null, input); - } - }); + incCount--; + + // Add comments to let the HTML generator know + // how the anchors for headings should look like. + inc = `\n` + + `${inc}\n\n`; + input = input.split(`${include}\n`).join(`${inc}\n`); + + if (incCount === 0) + return cb(null, input.replace(commentExpr, '')); }); }); }