summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/parse/page.js37
-rw-r--r--test/page.js9
2 files changed, 36 insertions, 10 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();
diff --git a/test/page.js b/test/page.js
index 831d8b1..082cda6 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);
+ });
});