summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-markdown/lib/readme.js
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 /packages/gitbook-markdown/lib/readme.js
parent6568acc992edf405b976a88e3c8abad82fdfd91d (diff)
downloadgitbook-5f9380568d34323cdc570d03d91f8c18b4d07326.zip
gitbook-5f9380568d34323cdc570d03d91f8c18b4d07326.tar.gz
gitbook-5f9380568d34323cdc570d03d91f8c18b4d07326.tar.bz2
Add readme parsing and tests
Diffstat (limited to 'packages/gitbook-markdown/lib/readme.js')
-rw-r--r--packages/gitbook-markdown/lib/readme.js45
1 files changed, 45 insertions, 0 deletions
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;