Skip to content

Commit 3650763

Browse files
committed
add final page parsing
1 parent e87de1a commit 3650763

24 files changed

+194
-102
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
All notable changes to this project will be documented in this file.
33
This project adheres to [Semantic Versioning](http://semver.org/).
44

5+
## [0.10.0] - 2016-09-16
6+
- add to parser:
7+
- `@resource([link to resource](http://path/to/link))` - collect helpful resource links
8+
- `## Final` fill in the content for the final page after tutorial completion. Matches on page title "Final".
9+
510
## [0.9.1] - 2016-09-15
611
- find tutorials now returns "isLatest" (bool) & "latest": (string of version)
712

lib/build/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ function parseAndBuild(dir, lines) {
1717
page: -1,
1818
task: -1,
1919
};
20-
return info_1.info({ dir: dir, result: result, lines: lines, index: index });
20+
return info_1.default({ dir: dir, result: result, lines: lines, index: index });
2121
}
2222
function build(_a) {
2323
var dir = _a.dir, filePath = _a.filePath, _b = _a.output, output = _b === void 0 ? './coderoad.json' : _b;

lib/build/lint.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
var chalk_1 = require('chalk');
33
var validKeys = {
44
info: ['title', 'description'],
5-
page: ['title', 'description', 'onPageComplete', 'tasks', 'video', 'link'],
5+
page: ['title', 'description', 'onPageComplete', 'tasks', 'video', 'resource'],
66
task: ['description', 'tests', 'actions', 'hints']
77
};
88
function lintOutput(json) {

lib/build/parser/actions.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,16 @@ function addToTasks(_a) {
4747
task: task,
4848
});
4949
break;
50+
case 'resource':
51+
result = doAction({
52+
type: 'resource',
53+
isArray: isActionArray,
54+
actionValue: actionValue,
55+
result: result,
56+
page: page,
57+
task: task
58+
});
59+
break;
5060
case 'continue':
5161
break;
5262
case 'action':

lib/build/parser/final.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"use strict";
2+
var Match = require('./match');
3+
var import_1 = require('./import');
4+
function final(_a) {
5+
var dir = _a.dir, result = _a.result, lines = _a.lines;
6+
var inCodeBlock = false;
7+
var currentPageComplete = null;
8+
var bracketCount = 0;
9+
result.final = {
10+
description: '',
11+
};
12+
var i = 0;
13+
while (i < lines.length - 1) {
14+
i += 1;
15+
var line = lines[i];
16+
switch (true) {
17+
case !!Match.isImport(line):
18+
lines = import_1.default({ dir: dir, lines: lines, pathToMd: Match.isImport(line) });
19+
continue;
20+
case !!Match.codeBlock(line):
21+
if (line.length > 3) {
22+
result.final.description += '\n' + line;
23+
}
24+
else {
25+
inCodeBlock = !inCodeBlock;
26+
}
27+
continue;
28+
case inCodeBlock:
29+
continue;
30+
default:
31+
if (i > 1) {
32+
result.final.description += '\n';
33+
}
34+
result.final.description += line;
35+
continue;
36+
}
37+
}
38+
return result;
39+
}
40+
Object.defineProperty(exports, "__esModule", { value: true });
41+
exports.default = final;

lib/build/parser/import.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ function loadImport(_a) {
2424
var splitLines = importLines.split('\n');
2525
return lines.concat(splitLines);
2626
}
27-
exports.loadImport = loadImport;
27+
Object.defineProperty(exports, "__esModule", { value: true });
28+
exports.default = loadImport;

lib/build/parser/info.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ function info(_a) {
1111
var line = lines[i];
1212
switch (true) {
1313
case !!Match.isImport(line):
14-
lines = import_1.loadImport({ dir: dir, lines: lines, pathToMd: Match.isImport(line) });
14+
lines = import_1.default({ dir: dir, lines: lines, pathToMd: Match.isImport(line) });
1515
continue;
1616
case !!Match.codeBlock(line):
1717
if (line.length > 3) {
@@ -25,7 +25,7 @@ function info(_a) {
2525
result.info.title = Match.info(line).trim();
2626
continue;
2727
case !!Match.page(line):
28-
return page_1.page({ dir: dir, result: result, lines: lines.slice(i), index: index });
28+
return page_1.default({ dir: dir, result: result, lines: lines.slice(i), index: index });
2929
default:
3030
if (i > 1) {
3131
result.info.description += '\n';
@@ -35,4 +35,5 @@ function info(_a) {
3535
}
3636
return result;
3737
}
38-
exports.info = info;
38+
Object.defineProperty(exports, "__esModule", { value: true });
39+
exports.default = info;

lib/build/parser/match.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ var regex = {
88
'##': match('#', 2),
99
'+': match('\\+', 1),
1010
'```': match('`', 3),
11-
'action': /^@(action|test|hint|openConsole|write|writeFromFile)/,
11+
'action': /^@(action|test|hint|openConsole|resource)/,
1212
'import': /^@import\((.+)\)$/,
13-
'onPageComplete': /^(@onPageComplete.+)/
13+
'onPageComplete': /^(@onPageComplete.+)/,
1414
};
1515
function parseWithCode(code) {
1616
return function (line) {

lib/build/parser/page.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@
22
var Match = require('./match');
33
var task_1 = require('./task');
44
var import_1 = require('./import');
5+
var final_1 = require('./final');
56
var cleanup_1 = require('./cleanup');
67
function page(_a) {
78
var dir = _a.dir, result = _a.result, lines = _a.lines, index = _a.index;
89
index.page += 1;
910
index.task = -1;
11+
var title = Match.page(lines[0]);
12+
if (title === 'Final') {
13+
return final_1.default({ dir: dir, result: result, lines: lines });
14+
}
1015
result.pages.push({
11-
title: Match.page(lines[0]),
16+
title: title,
1217
description: ''
1318
});
1419
var inCodeBlock = false;
@@ -20,7 +25,7 @@ function page(_a) {
2025
var line = lines[i];
2126
switch (true) {
2227
case !!Match.isImport(line):
23-
lines = import_1.loadImport({ dir: dir, lines: lines, pathToMd: Match.isImport(line) });
28+
lines = import_1.default({ dir: dir, lines: lines, pathToMd: Match.isImport(line) });
2429
continue;
2530
case (!!Match.isPageComplete(line) || !!currentPageComplete):
2631
currentPageComplete = !!currentPageComplete
@@ -48,7 +53,7 @@ function page(_a) {
4853
if (result.pages[index.page].tasks === undefined) {
4954
result.pages[index.page].tasks = [];
5055
}
51-
return task_1.task({ dir: dir, result: result, lines: lines.slice(i), index: index });
56+
return task_1.default({ dir: dir, result: result, lines: lines.slice(i), index: index });
5257
default:
5358
if (i > 1) {
5459
result.pages[index.page].description += '\n';
@@ -59,4 +64,5 @@ function page(_a) {
5964
}
6065
return result;
6166
}
62-
exports.page = page;
67+
Object.defineProperty(exports, "__esModule", { value: true });
68+
exports.default = page;

lib/build/parser/task.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function task(_a) {
2020
var line = lines[i];
2121
switch (true) {
2222
case !!Match.isImport(line):
23-
lines = import_1.loadImport({ dir: dir, lines: lines, pathToMd: Match.isImport(line) });
23+
lines = import_1.default({ dir: dir, lines: lines, pathToMd: Match.isImport(line) });
2424
continue;
2525
case (!!Match.isPageComplete(line) || !!currentPageComplete):
2626
currentPageComplete = !!currentPageComplete
@@ -69,7 +69,7 @@ function task(_a) {
6969
case !!Match.task(line):
7070
return task({ dir: dir, result: result, lines: lines.slice(i), index: index });
7171
case !!Match.page(line):
72-
return page_1.page({ dir: dir, result: result, lines: lines.slice(i), index: index });
72+
return page_1.default({ dir: dir, result: result, lines: lines.slice(i), index: index });
7373
default:
7474
if (i > 0) {
7575
result.pages[index.page].tasks[index.task].description += '\n';
@@ -79,4 +79,5 @@ function task(_a) {
7979
}
8080
return result;
8181
}
82-
exports.task = task;
82+
Object.defineProperty(exports, "__esModule", { value: true });
83+
exports.default = task;

0 commit comments

Comments
 (0)