summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-markdown/lib
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gitbook-markdown/lib')
-rw-r--r--packages/gitbook-markdown/lib/index.js3
-rw-r--r--packages/gitbook-markdown/lib/readme.js45
2 files changed, 47 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;