diff --git a/html_test.js b/html_test.js index d2a2b01..c9adea0 100644 --- a/html_test.js +++ b/html_test.js @@ -10,6 +10,7 @@ var readFile = Q.denodeify(fs.readFile); var bitDocsHTML = require("./bit-docs"); require("./build/build_test"); +require("./stmd_test"); describe("bit-docs-generate-html", function(){ beforeEach(function(){ diff --git a/stmd.js b/stmd.js index 934937b..07f6919 100644 --- a/stmd.js +++ b/stmd.js @@ -1476,8 +1476,12 @@ var renderBlock = function(block, in_tight_list) { this.innersep); case 'ATXHeader': case 'SetextHeader': + var rendered = this.renderInlines(block.inline_content); tag = 'h' + block.level; - return inTags(tag, [], this.renderInlines(block.inline_content)); + attr = [ + ['id', makeHeadingId(rendered)] + ]; + return inTags(tag, attr, rendered); case 'IndentedCode': return inTags('pre', [], inTags('code', [], this.escape(block.string_content))); @@ -1544,4 +1548,11 @@ function HtmlRenderer(){ exports.DocParser = DocParser; exports.HtmlRenderer = HtmlRenderer; -})(typeof exports === 'undefined' ? this.stmd = {} : exports); \ No newline at end of file +})(typeof exports === 'undefined' ? this.stmd = {} : exports); + +function makeHeadingId(text) { + return (text || "") + .replace(/\s/g, "-") // replace spaces with dashes + .replace(/[^\w\-]/g, "") // remove punctuation + .toLowerCase(); +} diff --git a/stmd_test.js b/stmd_test.js new file mode 100644 index 0000000..ddc5951 --- /dev/null +++ b/stmd_test.js @@ -0,0 +1,14 @@ +var assert = require('assert'); + +var stmd = require("./stmd"); + +describe("bit-docs-generate-html/stmd", function () { + it("adds id attributes to heading elements", function () { + var parser = new stmd.DocParser(); + var renderer = new stmd.HtmlRenderer(); + var markdown = "# Hello world" + var rendered = renderer.render(parser.parse(markdown)); + var expected = '

Hello world

'; + assert.equal(rendered.trim(), expected, "id attributes are present"); + }); +});