diff options
Diffstat (limited to 'lib/parse/page.js')
-rw-r--r-- | lib/parse/page.js | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/lib/parse/page.js b/lib/parse/page.js index 79f5e7e..7c188eb 100644 --- a/lib/parse/page.js +++ b/lib/parse/page.js @@ -33,6 +33,19 @@ function sectionType(nodes, idx) { return 'normal'; } +// Render a section using our custom renderer +function render(section) { + // 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() + }); + + return marked.parser(section, options); +} + function parsePage(src) { var nodes = marked.lexer(src); @@ -45,23 +58,29 @@ function parsePage(src) { .map(function(section) { // Transform given type if(section.type === 'exercise') { + var nonCodeNodes = _.reject(section, { + 'type': 'code' + }); + + var codeNodes = _.filter(section, { + 'type': 'code' + }); + return { type: section.type, + content: render(nonCodeNodes), + code: { + base: codeNodes[0].text, + solution: codeNodes[1].text, + validation: codeNodes[2].text, + } }; } - // 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, options) + content: render(section) }; }) .value(); |