summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/parse/index.js1
-rw-r--r--lib/parse/readme.js32
-rw-r--r--test/fixtures/README.md7
-rw-r--r--test/readme.js28
4 files changed, 68 insertions, 0 deletions
diff --git a/lib/parse/index.js b/lib/parse/index.js
index 0e333e4..0ebb03a 100644
--- a/lib/parse/index.js
+++ b/lib/parse/index.js
@@ -5,4 +5,5 @@ module.exports = {
lex: require('./lex'),
progress: require('./progress'),
navigation: require('./navigation'),
+ readme: require('./readme')
};
diff --git a/lib/parse/readme.js b/lib/parse/readme.js
new file mode 100644
index 0000000..aab094d
--- /dev/null
+++ b/lib/parse/readme.js
@@ -0,0 +1,32 @@
+var _ = require('lodash');
+var marked = require('marked');
+
+function extractFirstNode(nodes, nType) {
+ return _.chain(nodes)
+ .filter(function(node) {
+ return node.type == nType;
+ })
+ .pluck("text")
+ .first()
+ .value();
+}
+
+
+function parseReadme(src) {
+ var nodes, title, description;
+
+ // Parse content
+ nodes = marked.lexer(src);
+
+ var title = extractFirstNode(nodes, "heading");
+ var description = extractFirstNode(nodes, "paragraph");
+
+ return {
+ title: title,
+ description: description
+ };
+}
+
+
+// Exports
+module.exports = parseReadme;
diff --git a/test/fixtures/README.md b/test/fixtures/README.md
new file mode 100644
index 0000000..7e20198
--- /dev/null
+++ b/test/fixtures/README.md
@@ -0,0 +1,7 @@
+# This is the title
+
+This is the book description.
+
+other content
+...
+
diff --git a/test/readme.js b/test/readme.js
new file mode 100644
index 0000000..811591c
--- /dev/null
+++ b/test/readme.js
@@ -0,0 +1,28 @@
+var fs = require('fs');
+var path = require('path');
+var assert = require('assert');
+
+var readme = require('../').parse.readme;
+
+
+var CONTENT = fs.readFileSync(path.join(__dirname, './fixtures/README.md'), 'utf8');
+var LEXED = readme(CONTENT);
+
+describe('Readme parsing', function () {
+
+ it('should contain a title', function() {
+ assert(LEXED.title);
+ });
+
+ it('should contain a description', function() {
+ assert(LEXED.description);
+ });
+
+ it('should extract the right title', function() {
+ assert.equal(LEXED.title, "This is the title");
+ });
+
+ it('should extract the right description', function() {
+ assert.equal(LEXED.description, "This is the book description.");
+ });
+});