summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-01-19 15:08:07 +0100
committerSamy Pessé <samypesse@gmail.com>2016-12-22 15:00:30 +0100
commit5f9380568d34323cdc570d03d91f8c18b4d07326 (patch)
treec7b025bba4c0997cfa419dddbf6fa28599a47746
parent6568acc992edf405b976a88e3c8abad82fdfd91d (diff)
downloadgitbook-5f9380568d34323cdc570d03d91f8c18b4d07326.zip
gitbook-5f9380568d34323cdc570d03d91f8c18b4d07326.tar.gz
gitbook-5f9380568d34323cdc570d03d91f8c18b4d07326.tar.bz2
Add readme parsing and tests
-rw-r--r--packages/gitbook-markdown/lib/index.js3
-rw-r--r--packages/gitbook-markdown/lib/readme.js45
-rw-r--r--packages/gitbook-markdown/test/fixtures/README.md7
-rw-r--r--packages/gitbook-markdown/test/readme.js28
4 files changed, 82 insertions, 1 deletions
diff --git a/packages/gitbook-markdown/lib/index.js b/packages/gitbook-markdown/lib/index.js
index c9e0105..4af6ac5 100644
--- a/packages/gitbook-markdown/lib/index.js
+++ b/packages/gitbook-markdown/lib/index.js
@@ -4,5 +4,6 @@ var _ = require("lodash");
module.exports = {
summary: require("./summary"),
glossary: require("./glossary"),
- langs: require("./langs")
+ langs: require("./langs"),
+ readme: require("./readme")
};
diff --git a/packages/gitbook-markdown/lib/readme.js b/packages/gitbook-markdown/lib/readme.js
new file mode 100644
index 0000000..9d8f552
--- /dev/null
+++ b/packages/gitbook-markdown/lib/readme.js
@@ -0,0 +1,45 @@
+var _ = require('lodash');
+var kramed = require('kramed');
+var textRenderer = require('kramed-text-renderer');
+
+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;
+ var renderer = textRenderer();
+
+ // Parse content
+ nodes = kramed.lexer(src);
+
+ title = extractFirstNode(nodes, "heading") || '';
+ description = extractFirstNode(nodes, "paragraph") || '';
+
+ var convert = _.compose(
+ function(text) {
+ return _.unescape(text.replace(/(\r\n|\n|\r)/gm, ""));
+ },
+ function(text) {
+ return kramed.parse(text, _.extend({}, kramed.defaults, {
+ renderer: renderer
+ }));
+ }
+ );
+
+ return {
+ title: convert(title),
+ description: convert(description)
+ };
+}
+
+
+// Exports
+module.exports = parseReadme;
diff --git a/packages/gitbook-markdown/test/fixtures/README.md b/packages/gitbook-markdown/test/fixtures/README.md
new file mode 100644
index 0000000..7e20198
--- /dev/null
+++ b/packages/gitbook-markdown/test/fixtures/README.md
@@ -0,0 +1,7 @@
+# This is the title
+
+This is the book description.
+
+other content
+...
+
diff --git a/packages/gitbook-markdown/test/readme.js b/packages/gitbook-markdown/test/readme.js
new file mode 100644
index 0000000..b3a5952
--- /dev/null
+++ b/packages/gitbook-markdown/test/readme.js
@@ -0,0 +1,28 @@
+var fs = require('fs');
+var path = require('path');
+var assert = require('assert');
+
+var readme = require('../').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.");
+ });
+});