From 6189b03ede982d4ee19e8972dc134f7f708aa8fc Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 4 Feb 2015 19:37:40 +0000 Subject: Escape special markdown characters --- lib/writers/markdown-writer.js | 8 +++++++- tests/writers/markdown-writer.tests.js | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/writers/markdown-writer.js b/lib/writers/markdown-writer.js index 77bae94..9bafc98 100644 --- a/lib/writers/markdown-writer.js +++ b/lib/writers/markdown-writer.js @@ -151,7 +151,7 @@ function markdownWriter() { } function text(value) { - fragments.push(value); + fragments.push(escapeMarkdown(value)); } function append(html) { @@ -174,3 +174,9 @@ function markdownWriter() { } exports.writer = markdownWriter; + +function escapeMarkdown(value) { + return value + .replace(/\\/g, '\\\\') + .replace(/([\`\*_\{\}\[\]\(\)\#\+\-\.\!])/g, '\\$1'); +} diff --git a/tests/writers/markdown-writer.tests.js b/tests/writers/markdown-writer.tests.js index e13046a..7912acf 100644 --- a/tests/writers/markdown-writer.tests.js +++ b/tests/writers/markdown-writer.tests.js @@ -4,6 +4,12 @@ var test = require("../testing").test; var mdWriter = require("../../lib/writers/markdown-writer"); describe('markdown-writer', function() { + test('special markdown characters are escaped', function() { + var writer = mdWriter.writer(); + writer.text("\\*"); + return assert.equal(writer.asString(), "\\\\\\*"); + }); + test('can generate a paragraph', function() { var writer = mdWriter.writer(); writer.open("p"); -- cgit v1.2.3