From 8e22d80c7c4ba34aab39d645a57e2f70b666fdb7 Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Mon, 31 Mar 2014 14:59:58 -0700 Subject: [PATCH] Add content & code generation for exercise sections --- lib/parse/page.js | 37 ++++++++++++++++++++++++++++--------- test/page.js | 9 ++++++++- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/lib/parse/page.js b/lib/parse/page.js index 79f5e7e65..7c188eb31 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(); diff --git a/test/page.js b/test/page.js index 831d8b1d8..082cda6bf 100644 --- a/test/page.js +++ b/test/page.js @@ -21,7 +21,14 @@ describe('Page parsing', function() { it('should gen content for normal sections', function() { assert(LEXED[0].content); - assert(!LEXED[1].content); assert(LEXED[2].content); }); + + it('should gen code and content for exercise sections', function() { + assert(LEXED[1].content); + assert(LEXED[1].code); + assert(LEXED[1].code.base); + assert(LEXED[1].code.solution); + assert(LEXED[1].code.validation); + }); });