summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-markdown
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-02-03 14:23:50 +0100
committerSamy Pessé <samypesse@gmail.com>2016-12-22 15:00:33 +0100
commitfc675de6aad69370d0713b6c79aa614334b2bb53 (patch)
tree4b6bf142c73c82a368eedeff281c7c4944cc7107 /packages/gitbook-markdown
parente6a0fb856a6e4476534c96e5168f6693ec3d91ba (diff)
downloadgitbook-fc675de6aad69370d0713b6c79aa614334b2bb53.zip
gitbook-fc675de6aad69370d0713b6c79aa614334b2bb53.tar.gz
gitbook-fc675de6aad69370d0713b6c79aa614334b2bb53.tar.bz2
Handle whitespace between lists in SUMMARY.md
Diffstat (limited to 'packages/gitbook-markdown')
-rw-r--r--packages/gitbook-markdown/lib/summary.js22
-rw-r--r--packages/gitbook-markdown/test/fixtures/SUMMARY_WHITESPACE.md15
-rw-r--r--packages/gitbook-markdown/test/summary.js17
3 files changed, 51 insertions, 3 deletions
diff --git a/packages/gitbook-markdown/lib/summary.js b/packages/gitbook-markdown/lib/summary.js
index 3953cb8..8d90e14 100644
--- a/packages/gitbook-markdown/lib/summary.js
+++ b/packages/gitbook-markdown/lib/summary.js
@@ -34,6 +34,26 @@ function splitBy(list, starter, ender) {
}, []);
}
+function skipSpace(nodes) {
+ return _.filter(nodes, function(node) {
+ return node && node.type != 'space';
+ });
+}
+
+function correctLoose(nodes) {
+ return _.map(nodes, function(node) {
+ // Return normal nodes
+ if(!node || node.type != 'loose_item_start') {
+ return node
+ }
+
+ // Correct loose items
+ node.type = 'list_item_start';
+
+ return node;
+ })
+}
+
function listSplit(nodes, start_type, end_type) {
return splitBy(nodes, function(el) {
return el.type === start_type;
@@ -97,7 +117,7 @@ function listGroups(src) {
// Get out groups of lists
return listSplit(
- filterList(nodes),
+ filterList(correctLoose(skipSpace(nodes))),
'list_item_start', 'list_item_end'
);
}
diff --git a/packages/gitbook-markdown/test/fixtures/SUMMARY_WHITESPACE.md b/packages/gitbook-markdown/test/fixtures/SUMMARY_WHITESPACE.md
new file mode 100644
index 0000000..c1c87e6
--- /dev/null
+++ b/packages/gitbook-markdown/test/fixtures/SUMMARY_WHITESPACE.md
@@ -0,0 +1,15 @@
+# Summary
+
+* [Chapter 1](chapter-1/README.md)
+ * [Article 1](chapter-1/ARTICLE1.md)
+ * [Article 2](chapter-1/ARTICLE2.md)
+ * [article 1.2.1](\chapter-1\ARTICLE-1-2-1.md)
+ * [article 1.2.2](/chapter-1/ARTICLE-1-2-2.md)
+
+* [Chapter 2](chapter-2/README.md)
+* [Chapter 3](chapter-3/README.md)
+* [Chapter 4](chapter-4/README.md)
+
+ * Unfinished article
+
+* Unfinished Chapter \ No newline at end of file
diff --git a/packages/gitbook-markdown/test/summary.js b/packages/gitbook-markdown/test/summary.js
index 2794f27..86c7e90 100644
--- a/packages/gitbook-markdown/test/summary.js
+++ b/packages/gitbook-markdown/test/summary.js
@@ -4,8 +4,16 @@ var assert = require('assert');
var summary = require('../').summary;
-var CONTENT = fs.readFileSync(path.join(__dirname, './fixtures/SUMMARY.md'), 'utf8');
-var LEXED = summary(CONTENT);
+function lex(fixtureFile) {
+ return summary(
+ fs.readFileSync(
+ path.join(__dirname, 'fixtures', fixtureFile),
+ 'utf8'
+ )
+ );
+}
+
+var LEXED = lex('SUMMARY.md');
describe('Summary parsing', function () {
it('should detect chapters', function() {
@@ -37,4 +45,9 @@ describe('Summary parsing', function () {
assert.equal(LEXED.chapters[1].path,'chapter-2/README.md');
assert.equal(LEXED.chapters[2].path,'chapter-3/README.md');
});
+
+ it('should allow lists separated by whitespace', function() {
+ var l = lex('SUMMARY_WHITESPACE.md');
+ assert.equal(l.chapters.length, 5);
+ });
});