summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-markdown/lib
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gitbook-markdown/lib')
-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
3 files changed, 57 insertions, 1 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
+};