summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/generate/index.js66
-rw-r--r--lib/generate/json/index.js17
-rw-r--r--lib/parse/readme.js23
3 files changed, 82 insertions, 24 deletions
diff --git a/lib/generate/index.js b/lib/generate/index.js
index 6a07a21..8c6450c 100644
--- a/lib/generate/index.js
+++ b/lib/generate/index.js
@@ -67,7 +67,9 @@ var generate = function(options) {
// Links
"links": {
- "about": null
+ "about": null,
+ "issues": null,
+ "contribue": null,
}
});
@@ -82,7 +84,24 @@ var generate = function(options) {
}
// Check files to get folder type (book, multilanguage book or neither)
- return containsFiles(options.input, ['LANGS.md'])
+ return Q()
+
+ // Read readme
+ .then(function() {
+ return fs.readFile(path.join(options.input, "README.md"), "utf-8")
+ .then(function(_readme) {
+ _readme = parse.readme(_readme);
+
+ options.title = options.title || _readme.title;
+ options.description = options.description || _readme.description || defaultDescription;
+ });
+ })
+
+ // Detect multi-languages book
+ .then(function() {
+ return containsFiles(options.input, ['LANGS.md'])
+ })
+
.then(function(isMultiLang) {
// Multi language book
if(isMultiLang) {
@@ -96,24 +115,34 @@ var generate = function(options) {
var generateMultiLang = function(options) {
+ var langsSummary;
options.output = options.output || path.join(options.input, "_book");
// Multi-languages book
return fs.readFile(path.join(options.input, "LANGS.md"), "utf-8")
- // Generate sub-books
+ // Clean output folder
.then(function(_langsSummary) {
- options.langsSummary = parse.langs(_langsSummary);
+ langsSummary = _langsSummary;
+ return fs.remove(options.output);
+ })
+ .then(function() {
+ return fs.mkdirp(options.output);
+ })
+
+ // Generate sub-books
+ .then(function() {
+ options.langsSummary = parse.langs(langsSummary);
// Generated a book for each valid entry
- return Q.all(
- _.map(options.langsSummary.list, function(entry) {
+ return _.reduce(options.langsSummary.list, function(prev, entry) {
+ return prev.then(function() {
return generate(_.extend({}, options, {
input: path.join(options.input, entry.path),
output: path.join(options.output, entry.path)
}));
})
- );
+ }, Q());
})
.then(function() {
@@ -170,6 +199,16 @@ var generateBook = function(options) {
// Get repo's URL
.then(function() {
+ // Git deactivated
+ if(options.github === false) {
+ options.github = null;
+ return null;
+ } else if(options.github) {
+ // Git already specified in options
+ return options.github;
+ }
+
+ // Try auto detecting
return parse.git.url(options.input)
.then(function(_url) {
// Get ID of repo
@@ -178,7 +217,7 @@ var generateBook = function(options) {
return null;
})
.then(function(repoId) {
- options.github = options.github || repoId;
+ options.github = repoId;
});
})
@@ -203,17 +242,6 @@ var generateBook = function(options) {
// Generate the book
return Q()
- // Read readme
- .then(function() {
- return fs.readFile(path.join(options.input, "README.md"), "utf-8")
- .then(function(_readme) {
- _readme = parse.readme(_readme);
-
- options.title = options.title || _readme.title;
- options.description = options.description || _readme.description || defaultDescription;
- });
- })
-
// Get summary
.then(function() {
return fs.readFile(path.join(options.input, "SUMMARY.md"), "utf-8")
diff --git a/lib/generate/json/index.js b/lib/generate/json/index.js
index f301a7e..9e61532 100644
--- a/lib/generate/json/index.js
+++ b/lib/generate/json/index.js
@@ -40,6 +40,23 @@ Generator.prototype.convertFile = function(content, input) {
});
};
+// Generate languages index
+Generator.prototype.langsIndex = function(langs) {
+ var that = this;
+
+ var json = {
+ langs: langs.list
+ };
+
+ return Q()
+ .then(function() {
+ return fs.writeFile(
+ path.join(that.options.output, "langs.json"),
+ JSON.stringify(json, null, 4)
+ );
+ });
+};
+
Generator.prototype.finish = function() {
// ignore
};
diff --git a/lib/parse/readme.js b/lib/parse/readme.js
index aab094d..85a8749 100644
--- a/lib/parse/readme.js
+++ b/lib/parse/readme.js
@@ -1,5 +1,6 @@
var _ = require('lodash');
var marked = require('marked');
+var textRenderer = require('marked-text-renderer');
function extractFirstNode(nodes, nType) {
return _.chain(nodes)
@@ -14,16 +15,28 @@ function extractFirstNode(nodes, nType) {
function parseReadme(src) {
var nodes, title, description;
+ var renderer = textRenderer();
// Parse content
nodes = marked.lexer(src);
-
- var title = extractFirstNode(nodes, "heading");
- var description = extractFirstNode(nodes, "paragraph");
+
+ 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 marked.parse(text, _.extend({}, marked.defaults, {
+ renderer: renderer
+ }));
+ }
+ );
return {
- title: title,
- description: description
+ title: convert(title),
+ description: convert(description)
};
}