diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-06-29 13:42:12 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-12-22 15:00:59 +0100 |
commit | ba25a60e913466cee035a63752380baba32229a6 (patch) | |
tree | 74404023d2b60e12d4287e527dce0f653c35ca24 | |
parent | c619a1a742fa73544c3dbe897f5cb544c270dea9 (diff) | |
download | gitbook-ba25a60e913466cee035a63752380baba32229a6.zip gitbook-ba25a60e913466cee035a63752380baba32229a6.tar.gz gitbook-ba25a60e913466cee035a63752380baba32229a6.tar.bz2 |
Start switching to markup-it
-rw-r--r-- | packages/gitbook-markdown/lib/page.js | 75 | ||||
-rw-r--r-- | packages/gitbook-markdown/lib/toHTML.js | 64 | ||||
-rw-r--r-- | packages/gitbook-markdown/lib/toMarkdown.js | 6 | ||||
-rw-r--r-- | packages/gitbook-markdown/package.json | 71 | ||||
-rw-r--r-- | packages/gitbook-markdown/test/page.js | 4 |
5 files changed, 92 insertions, 128 deletions
diff --git a/packages/gitbook-markdown/lib/page.js b/packages/gitbook-markdown/lib/page.js index 5ea7c21..12848ed 100644 --- a/packages/gitbook-markdown/lib/page.js +++ b/packages/gitbook-markdown/lib/page.js @@ -1,73 +1,56 @@ var _ = require('lodash'); -var kramed = require('kramed'); -var annotate = require('kramed/lib/annotate/'); +var MarkupIt = require('markup-it'); +var gitbookSyntax = require('markup-it/syntaxes/gitbook'); var RAW_START = '{% raw %}'; -var RAW_END = '{% endraw %}'; +var RAW_END = '{% endraw %}'; +var gitbook = new MarkupIt(gitbookSyntax); /** - Escape a code block's content using raw blocks - - @param {String} - @return {String} -*/ + * Escape a code block's content using raw blocks + * + * @param {String} + * @return {String} + */ function escape(str) { return RAW_START + str + RAW_END; } -/** - Combines annotated nodes - - @param {Array} - @return {String} -*/ -function combine(nodes) { - return _.map(nodes, 'raw').join(''); -} /** - Add templating "raw" to code blocks to - avoid nunjucks processing their content. - - @param {String} src - @return {String} -*/ + * Add templating "raw" to code blocks to + * avoid nunjucks processing their content. + * + * @param {String} src + * @return {String} + */ function preparePage(src) { - var lexed = annotate.blocks(src); var levelRaw = 0; - function escapeCodeElement(el) { - if (el.type == 'code' && levelRaw == 0) { - el.raw = escape(el.raw); - } else if (el.type == 'tplexpr') { - var expr = el.matches[0]; - if(expr === 'raw') { + return gitbook.annotate(src, function(token) { + var tokenType = token.getType(); + + if (tokenType === MarkupIt.BLOCKS.TEMPLATE && tokenType === MarkupIt.STYLES.TEMPLATE) { + var expr = token.getData().get('type'); + if (expr === 'raw') { levelRaw = levelRaw + 1; - } else if(expr === 'endraw') { + } else if (expr == 'endraw') { levelRaw = 0; } + + return true; } - return el; - } - var escaped = _.map(lexed, function(el) { - // Only escape paragraphs and headings - if(el.type == 'paragraph' || el.type == 'heading') { - var line = annotate.inline(el.raw); + if (token.isBlock() && ) - // Escape inline code blocks - line = line.map(escapeCodeElement); - // Change raw source code - el.raw = combine(line); - return el; - } else { - return escapeCodeElement(el); + if (tokenType !== MarkupIt.BLOCKS.CODE && tokenType !== MarkupIt.STYLES.CODE && levelRaw == 0) { + return; } - }); - return combine(escaped); + return escape(token.getRaw()); + }); } module.exports = { diff --git a/packages/gitbook-markdown/lib/toHTML.js b/packages/gitbook-markdown/lib/toHTML.js index c40c545..9140624 100644 --- a/packages/gitbook-markdown/lib/toHTML.js +++ b/packages/gitbook-markdown/lib/toHTML.js @@ -1,54 +1,34 @@ -var _ = require('lodash'); -var kramed = require('kramed'); +var MarkupIt = require('markup-it'); +var markdownSyntax = require('markup-it/syntaxes/markdown'); +var htmlSyntax = require('markup-it/syntaxes/html'); -/** - Get renderer for kramed with correct configuration - - @return {kramed.Renderer} -*/ -function getRenderer() { - return new kramed.Renderer({ - langPrefix: 'lang-', - smartypants: false, - headerPrefix: '', - headerAutoId: false, - xhtml: false - }); -} - -/** - Get options for markdown parsing - - @return {Object} -*/ -function getOption() { - return _.extend({}, kramed.defaults, { - mathjax: false - }); -} +var markdown = new MarkupIt(markdownSyntax); +var html = new MarkupIt(htmlSyntax); /** - Convert Markdown block to HTML - - @param {String} src (markdown) - @return {String} (html) -*/ + * Convert Markdown block to HTML + * + * @param {String} src (markdown) + * @return {String} (html) + */ function convertMdToHTMLBlock(src) { - var options = _.extend(getOption(), { - renderer: getRenderer() - }); + var content = markdown.toContent(src); + var textHtml = html.toText(content); - return kramed(src, options); + return textHtml; } /** - Convert Markdown inline to HTML - - @param {String} src (markdown) - @return {String} (html) -*/ + * Convert Markdown inline to HTML + * + * @param {String} src (markdown) + * @return {String} (html) + */ function convertMdToHTMLInline(src) { - return kramed.inlineLexer(src, getOption(), getRenderer()); + var content = markdown.toInlineContent(src); + var textHtml = html.toInlineText(content); + + return textHtml; } module.exports = { diff --git a/packages/gitbook-markdown/lib/toMarkdown.js b/packages/gitbook-markdown/lib/toMarkdown.js index aab642c..2dd0581 100644 --- a/packages/gitbook-markdown/lib/toMarkdown.js +++ b/packages/gitbook-markdown/lib/toMarkdown.js @@ -5,9 +5,9 @@ function ns(s, n) { } /* - This module provides markup rules for gitbook-html - These rules are being used to generate SUMMARY/GLOSSARY/LANGS -*/ + * This module provides markup rules for gitbook-html + * These rules are being used to generate SUMMARY/GLOSSARY/LANGS + */ module.exports = { onTitleStart: function(level) { return ns('#', level) + ' '; diff --git a/packages/gitbook-markdown/package.json b/packages/gitbook-markdown/package.json index 0e69e22..8ea2b0b 100644 --- a/packages/gitbook-markdown/package.json +++ b/packages/gitbook-markdown/package.json @@ -1,38 +1,39 @@ { - "name": "gitbook-markdown", - "version": "1.3.2", - "homepage": "https://www.gitbook.com", - "description": "Parse markdown content for gitbook", - "main": "lib/index.js", - "dependencies": { - "lodash": "^4.13.1", - "kramed": "0.5.6", - "kramed-text-renderer": "0.2.1", - "gitbook-html": "1.3.3" + "name": "gitbook-markdown", + "version": "1.3.2", + "homepage": "https://www.gitbook.com", + "description": "Parse markdown content for gitbook", + "main": "lib/index.js", + "dependencies": { + "gitbook-html": "1.3.3", + "kramed": "0.5.6", + "kramed-text-renderer": "0.2.1", + "lodash": "^4.13.1", + "markup-it": "^2.0.1" + }, + "devDependencies": { + "mocha": "^2.5.3" + }, + "scripts": { + "test": "export TESTING=true; mocha --reporter list --bail" + }, + "repository": { + "type": "git", + "url": "https://github.com/GitbookIO/gitbook-markdown.git" + }, + "author": "FriendCode Inc. <contact@gitbook.com>", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/GitbookIO/gitbook-markdown/issues" + }, + "contributors": [ + { + "name": "Aaron O'Mullan", + "email": "aaron@gitbook.com" }, - "devDependencies": { - "mocha": "^2.5.3" - }, - "scripts": { - "test": "export TESTING=true; mocha --reporter list --bail" - }, - "repository": { - "type": "git", - "url": "https://github.com/GitbookIO/gitbook-markdown.git" - }, - "author": "FriendCode Inc. <contact@gitbook.com>", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/GitbookIO/gitbook-markdown/issues" - }, - "contributors": [ - { - "name": "Aaron O'Mullan", - "email": "aaron@gitbook.com" - }, - { - "name": "Samy Pessé", - "email": "samy@gitbook.com" - } - ] + { + "name": "Samy Pessé", + "email": "samy@gitbook.com" + } + ] } diff --git a/packages/gitbook-markdown/test/page.js b/packages/gitbook-markdown/test/page.js index 8b882d8..fac5ec4 100644 --- a/packages/gitbook-markdown/test/page.js +++ b/packages/gitbook-markdown/test/page.js @@ -18,8 +18,8 @@ describe('Page parsing', function() { }); it('should not add id to headings', function() { - assert.equal(page('# Hello').content, '<h1>Hello</h1>\n'); - assert.equal(page('# Hello {#test}').content, '<h1 id="test">Hello </h1>\n'); + assert.equal(page('# Hello').content, '<h1>Hello</h1>'); + assert.equal(page('# Hello {#test}').content, '<h1 id="test">Hello</h1>'); }); it('should escape codeblocks in preparation (1)', function() { |