diff options
Diffstat (limited to 'packages/gitbook-markdown')
-rw-r--r-- | packages/gitbook-markdown/lib/page.js | 28 | ||||
-rw-r--r-- | packages/gitbook-markdown/package.json | 1 | ||||
-rw-r--r-- | packages/gitbook-markdown/test/page.js | 13 |
3 files changed, 20 insertions, 22 deletions
diff --git a/packages/gitbook-markdown/lib/page.js b/packages/gitbook-markdown/lib/page.js index de0ed98..b7af03b 100644 --- a/packages/gitbook-markdown/lib/page.js +++ b/packages/gitbook-markdown/lib/page.js @@ -3,30 +3,26 @@ var kramed = require('kramed'); var hljs = require('highlight.js'); var lnormalize = require('./utils/lang').normalize; +var mdRenderer = require('kramed-markdown-renderer'); var RAW_START = "{% raw %}"; var RAW_END = "{% endraw %}"; -var CODEBLOCKS = { - md: /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/, - fences: /(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm -}; function preparePage(src) { - // GFM Fences - src = src.replace(CODEBLOCKS.fences, function(wholeMatch, m1, m2, m3, m4) { - wholeMatch = wholeMatch.slice(m1.length); - return m1+RAW_START+wholeMatch+RAW_END; - }); + var renderer = mdRenderer(); + + var escape = function(func, code, lang, escaped) { + return RAW_START+func(code, lang, escaped)+RAW_END; + }; - // Normal codeblocks - src += "~0"; - src = src.replace(CODEBLOCKS.md, function(all, m1, m2) { - all = all.slice(0, -m2.length); - return RAW_START+all+RAW_END+m2; + renderer.code = _.wrap(renderer.code, escape); + renderer.codespan = _.wrap(renderer.codespan, escape); + + var options = _.extend({}, kramed.defaults, { + renderer: renderer }); - src = src.replace(/~0/, ""); - return src; + return kramed(src, options); } function parsePage(src) { diff --git a/packages/gitbook-markdown/package.json b/packages/gitbook-markdown/package.json index 6383024..d76386b 100644 --- a/packages/gitbook-markdown/package.json +++ b/packages/gitbook-markdown/package.json @@ -8,6 +8,7 @@ "lodash": "^3.2.0", "kramed": "0.4.6", "kramed-text-renderer": "0.2.1", + "kramed-markdown-renderer": "0.1.1", "highlight.js": "8.4.0" }, "devDependencies": { diff --git a/packages/gitbook-markdown/test/page.js b/packages/gitbook-markdown/test/page.js index 67c209d..3bc5cd2 100644 --- a/packages/gitbook-markdown/test/page.js +++ b/packages/gitbook-markdown/test/page.js @@ -21,20 +21,21 @@ describe('Page parsing', function() { }); it('should escape codeblocks in preparation (1)', function() { - assert.equal(page.prepare("Hello `world`"), "Hello {% raw %}`world`{% endraw %}"); - assert.equal(page.prepare("Hello `world test`"), "Hello {% raw %}`world test`{% endraw %}"); - assert.equal(page.prepare("Hello ```world test```"), "Hello {% raw %}```world test```{% endraw %}"); - assert.equal(page.prepare("Hello\n```js\nworld test\n```\n"), "Hello\n{% raw %}```js\nworld test\n```{% endraw %}\n"); + assert.equal(page.prepare("Hello `world`"), "\nHello {% raw %}`world`{% endraw %}\n"); + assert.equal(page.prepare("Hello `world test`"), "\nHello {% raw %}`world test`{% endraw %}\n"); + assert.equal(page.prepare("Hello ```world test```"), "\nHello {% raw %}`world test`{% endraw %}\n"); + assert.equal(page.prepare("Hello\n```js\nworld test\n```\n"), "\nHello\n{% raw %}\n```js\nworld test\n```\n{% endraw %}"); + assert.equal(page.prepare("Hello\n```\ntest\n\tworld\n\ttest\n```"), "\nHello\n{% raw %}\n```\ntest\n world\n test\n```\n{% endraw %}"); }); it('should escape codeblocks in preparation (2)', function() { assert.equal( page.prepare("Hello\n\n\n\tworld\n\thello\n\n\ntest"), - "Hello\n{% raw %}\n\n\tworld\n\thello\n\n\n{% endraw %}test" + "\nHello\n{% raw %}\n```\nworld\nhello\n```\n{% endraw %}\ntest\n" ); assert.equal( page.prepare("Hello\n\n\n\tworld\n\thello\n\n\n"), - "Hello\n{% raw %}\n\n\tworld\n\thello\n\n\n{% endraw %}" + "\nHello\n{% raw %}\n```\nworld\nhello\n```\n{% endraw %}" ); }); }); |