From c554f3f6bc5b36fab800ba6fb01b58dddbdf64ab Mon Sep 17 00:00:00 2001 From: KahWee Teng Date: Wed, 24 Feb 2016 01:45:53 -0800 Subject: [PATCH] doc: add in guide generation using remark *Do not merge.* I did not commit in node_modules. This intends to generate guides, it is related to #4866. This generates HTML from MD and implements highlight.js. --- Makefile | 4 ++++ doc/template-guide.html | 32 +++++++++++++++++++++++++ tools/doc/guide.js | 53 +++++++++++++++++++++++++++++++++++++++++ tools/doc/package.json | 6 ++++- 4 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 doc/template-guide.html create mode 100644 tools/doc/guide.js diff --git a/Makefile b/Makefile index bcb434d6a5576e..787d0ca83ec91d 100644 --- a/Makefile +++ b/Makefile @@ -239,6 +239,10 @@ apidoc_dirs = out/doc out/doc/api/ out/doc/api/assets apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*))) +docguide: + mkdir -p out/doc/guides + $(NODE) tools/doc/guide.js + doc: $(apidoc_dirs) $(apiassets) $(apidocs) tools/doc/ $(NODE_EXE) $(apidoc_dirs): diff --git a/doc/template-guide.html b/doc/template-guide.html new file mode 100644 index 00000000000000..76decad59f4a13 --- /dev/null +++ b/doc/template-guide.html @@ -0,0 +1,32 @@ + + + + + Node.js __VERSION__ Manual & Guide + + + + + + +
+
+ + __GTOC__ +
+ +
+
+ __CONTENT__ +
+
+
+ + + + + diff --git a/tools/doc/guide.js b/tools/doc/guide.js new file mode 100644 index 00000000000000..614670aab50d45 --- /dev/null +++ b/tools/doc/guide.js @@ -0,0 +1,53 @@ +const path = require('path'); +const fs = require('fs'); + +const remark = require('remark'); +const html = require('remark-html'); +const toc = require('remark-toc'); +const hljs = require('remark-highlight.js'); + +const processor = remark() + .use(toc) + .use(html) + .use(hljs) +const remarkOptions = { + yaml: true, + bullet: '*' +} + +const guidesDir = path.join(__dirname, '../../', 'doc', 'guides'); +const outputDir = path.join(__dirname, '../../', 'out', 'doc', 'guides'); +const templateFile = path.join(__dirname, '../../', 'doc', 'template-guide.html'); +const template = fs.readFileSync(templateFile, { encoding: 'utf8' }) + +fs.readdir(guidesDir, function(err, files) { + if (err) { + throw err; + } + files.forEach(function(fileName) { + const pageSlug = path.basename(fileName, '.md'); + fs.readFile(path.join(guidesDir, fileName), { encoding: 'utf8' }, function(err, content) { + var mdast = processor.parse(content, remarkOptions); + mdast = processor.run(mdast); + const html = processor.stringify(mdast, remarkOptions); + // Locate YAML front matter + if (mdast.children[0] && mdast.children[0].type === 'yaml') { + // Found YAML + var yamlData = {} + mdast.children[0].value.split('\n').forEach(function(line) { + const keyValue = line.match(/(\w+):\s?(.+)/) + yamlData[keyValue[1]] = keyValue[2] + }) + // console.log(yamlData) + } + var output = template.replace(/__VERSION__/g, process.version); + output = output.replace(/__CONTENT__/g, html); + output = output.replace(/__FILENAME__/g, pageSlug); + fs.writeFile(path.join(outputDir, pageSlug + '.html'), output, function(err) { + if (err) { + throw err; + } + }) + }) + }) +}) \ No newline at end of file diff --git a/tools/doc/package.json b/tools/doc/package.json index d87c9345b33f2e..f3662e8cac7d1d 100644 --- a/tools/doc/package.json +++ b/tools/doc/package.json @@ -7,7 +7,11 @@ "node": ">=0.6.10" }, "dependencies": { - "marked": "~0.1.9" + "marked": "~0.1.9", + "remark": "^3.2.2", + "remark-highlight.js": "^3.0.0", + "remark-html": "^3.0.0", + "remark-toc": "^3.0.0" }, "devDependencies": {}, "optionalDependencies": {},