summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/parse/page.js9
-rw-r--r--lib/parse/renderer.js27
-rw-r--r--lib/parse/summary.js7
3 files changed, 41 insertions, 2 deletions
diff --git a/lib/parse/page.js b/lib/parse/page.js
index 047f3e4..b1e4332 100644
--- a/lib/parse/page.js
+++ b/lib/parse/page.js
@@ -1,6 +1,8 @@
var _ = require('lodash');
var marked = require('marked');
+var renderer = require('./renderer');
+
// Split a page up into sections (lesson, exercises, ...)
function splitSections(nodes) {
@@ -49,10 +51,15 @@ function parsePage(src) {
// marked's Render expects this, we don't use it yet
section.links = {};
+ // Build options using defaults and our custom renderer
+ var options = _.extend({}, marked.defaults, {
+ renderer: renderer()
+ });
+
// Render normal pages
return {
type: section.type,
- content: marked.parser(section)
+ content: marked.parser(section, options)
};
})
.value();
diff --git a/lib/parse/renderer.js b/lib/parse/renderer.js
new file mode 100644
index 0000000..66aad46
--- /dev/null
+++ b/lib/parse/renderer.js
@@ -0,0 +1,27 @@
+var inherits = require('util').inherits;
+
+var marked = require('marked');
+
+
+function GitBookRenderer(options) {
+ if(!(this instanceof GitBookRenderer)) {
+ return new GitBookRenderer(options);
+ }
+ GitBookRenderer.super_.call(this, options);
+}
+inherits(GitBookRenderer, marked.Renderer);
+
+
+GitBookRenderer.prototype.link = function(href, title, text) {
+ // Replace .md extensions by .html
+ return GitBookRenderer.super_.prototype.link.call(
+ this,
+ href.replace(/\.md$/, '.html'),
+ title,
+ text
+ );
+};
+
+
+// Exports
+module.exports = GitBookRenderer;
diff --git a/lib/parse/summary.js b/lib/parse/summary.js
index 8787554..f021401 100644
--- a/lib/parse/summary.js
+++ b/lib/parse/summary.js
@@ -76,7 +76,12 @@ function parseTitle(src) {
return {
title: matches[1],
- path: matches[2],
+
+ // Replace .md references with .html
+ path: matches[2].replace(/\.md$/, '.html'),
+
+ // Original, non normalized path
+ _path: matches[2],
};
}