diff options
Diffstat (limited to 'packages/gitbook-markdown')
-rw-r--r-- | packages/gitbook-markdown/lib/index.js | 3 | ||||
-rw-r--r-- | packages/gitbook-markdown/lib/page.js | 36 | ||||
-rw-r--r-- | packages/gitbook-markdown/lib/utils/lang.js | 19 | ||||
-rw-r--r-- | packages/gitbook-markdown/package.json | 4 | ||||
-rw-r--r-- | packages/gitbook-markdown/test/fixtures/PAGE.md | 14 | ||||
-rw-r--r-- | packages/gitbook-markdown/test/page.js | 22 |
6 files changed, 96 insertions, 2 deletions
diff --git a/packages/gitbook-markdown/lib/index.js b/packages/gitbook-markdown/lib/index.js index 4af6ac5..764448b 100644 --- a/packages/gitbook-markdown/lib/index.js +++ b/packages/gitbook-markdown/lib/index.js @@ -5,5 +5,6 @@ module.exports = { summary: require("./summary"), glossary: require("./glossary"), langs: require("./langs"), - readme: require("./readme") + readme: require("./readme"), + page: require("./page") }; diff --git a/packages/gitbook-markdown/lib/page.js b/packages/gitbook-markdown/lib/page.js new file mode 100644 index 0000000..1adfcf8 --- /dev/null +++ b/packages/gitbook-markdown/lib/page.js @@ -0,0 +1,36 @@ +var Q = require('q'); +var _ = require('lodash'); +var kramed = require('kramed'); +var hljs = require('highlight.js'); + +var lnormalize = require('./utils/lang').normalize; + +function parsePage(src) { + var options = _.extend({}, kramed.defaults, { + // Synchronous highlighting with highlight.js + highlight: function (code, lang) { + if(!lang) return code; + + // Normalize lang + lang = lnormalize(lang); + + try { + return hljs.highlight(lang, code).value; + } catch(e) { } + + return code; + } + }); + + return { + sections: [ + { + type: "normal", + content: kramed(src, options) + } + ] + }; +} + +// Exports +module.exports = parsePage; diff --git a/packages/gitbook-markdown/lib/utils/lang.js b/packages/gitbook-markdown/lib/utils/lang.js new file mode 100644 index 0000000..9da737b --- /dev/null +++ b/packages/gitbook-markdown/lib/utils/lang.js @@ -0,0 +1,19 @@ +var MAP = { + 'py': 'python', + 'js': 'javascript', + 'rb': 'ruby', + 'csharp': 'cs', +}; + +function normalize(lang) { + if(!lang) { return null; } + + var lower = lang.toLowerCase(); + return MAP[lower] || lower; +} + +// Exports +module.exports = { + normalize: normalize, + MAP: MAP +}; diff --git a/packages/gitbook-markdown/package.json b/packages/gitbook-markdown/package.json index 2ed9efe..48bb8f8 100644 --- a/packages/gitbook-markdown/package.json +++ b/packages/gitbook-markdown/package.json @@ -5,9 +5,11 @@ "description": "Parse markdown content for gitbook", "main": "lib/index.js", "dependencies": { + "q": "1.0.1", "lodash": "2.4.1", "kramed": "0.4.3", - "kramed-text-renderer": "0.2.1" + "kramed-text-renderer": "0.2.1", + "highlight.js": "8.4.0" }, "devDependencies": { "mocha": "1.18.2" diff --git a/packages/gitbook-markdown/test/fixtures/PAGE.md b/packages/gitbook-markdown/test/fixtures/PAGE.md new file mode 100644 index 0000000..98b2721 --- /dev/null +++ b/packages/gitbook-markdown/test/fixtures/PAGE.md @@ -0,0 +1,14 @@ +# Python basics + +Python is a nice language, you can add stuff. Bla bla bla. + +Some more nice content .... + +[Cool stuff](http://gitbook.io) + +[Link to another Markdown file](./xyz/file.md) + +And look at this pretty picture: + + +Lets go for another exercise but this time with some context : diff --git a/packages/gitbook-markdown/test/page.js b/packages/gitbook-markdown/test/page.js new file mode 100644 index 0000000..158f09f --- /dev/null +++ b/packages/gitbook-markdown/test/page.js @@ -0,0 +1,22 @@ +var fs = require('fs'); +var path = require('path'); +var assert = require('assert'); + +var page = require('../').page; + +function loadPage (name, options) { + var CONTENT = fs.readFileSync(path.join(__dirname, './fixtures/' + name + '.md'), 'utf8'); + return page(CONTENT, options).sections; +} + +var LEXED = loadPage('PAGE'); + +describe('Page parsing', function() { + it('should detect sections', function() { + assert.equal(LEXED.length, 1); + }); + + it('should gen content for normal sections', function() { + assert(LEXED[0].content); + }); +}); |