summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-markdown
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gitbook-markdown')
-rw-r--r--packages/gitbook-markdown/lib/index.js3
-rw-r--r--packages/gitbook-markdown/lib/page.js36
-rw-r--r--packages/gitbook-markdown/lib/utils/lang.js19
-rw-r--r--packages/gitbook-markdown/package.json4
-rw-r--r--packages/gitbook-markdown/test/fixtures/PAGE.md14
-rw-r--r--packages/gitbook-markdown/test/page.js22
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:
+![Pretty](../assets/my-pretty-picture.png "Pretty")
+
+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);
+ });
+});