summaryrefslogtreecommitdiffstats
path: root/lib/book.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-01-19 12:06:04 +0100
committerSamy Pessé <samypesse@gmail.com>2015-01-19 12:06:04 +0100
commit60993d3123ef81f72e028dd496f26d3bbba0eec0 (patch)
tree0282d581d0469eb7e0dde645ff08985dc0736968 /lib/book.js
parent39b2aaf4898921fc845ffa165d038fa58404548d (diff)
downloadgitbook-60993d3123ef81f72e028dd496f26d3bbba0eec0.zip
gitbook-60993d3123ef81f72e028dd496f26d3bbba0eec0.tar.gz
gitbook-60993d3123ef81f72e028dd496f26d3bbba0eec0.tar.bz2
Parse langs and glossary
Diffstat (limited to 'lib/book.js')
-rw-r--r--lib/book.js72
1 files changed, 69 insertions, 3 deletions
diff --git a/lib/book.js b/lib/book.js
index 9c489f1..50ef252 100644
--- a/lib/book.js
+++ b/lib/book.js
@@ -6,12 +6,12 @@ var fs = require("./utils/fs");
var Configuration = require("./configuration");
var parser = require("./parser");
-var Book = function(root) {
+var Book = function(root, options) {
// Root folder of the book
this.root = root;
// Configuration
- this.config = new Configuration(this);
+ this.config = new Configuration(this, options);
Object.defineProperty(this, "options", {
get: function () {
return this.config.options;
@@ -19,20 +19,68 @@ var Book = function(root) {
});
// Summary
- this.summary = [];
+ this.summary = {};
+
+ // Glossary
+ this.glossary = {};
+
+ // Langs
+ this.langs = {};
};
// Initialize and parse the book: config, summary, glossary
Book.prototype.init = function() {
var that = this;
+ var multilingal = false;
return this.config.load()
+
.then(function() {
+ return that.parseLangs()
+ .then(function() {
+ multilingal = that.langs.list.length > 0;
+
+ // Sub-books that inherit from the current book configuration
+ that.books = _.map(that.langs.list, function(lang) {
+ return new Book(
+ path.join(that.root, lang.path),
+ _.extend({}, that.options, {
+ 'lang': lang.lang
+ })
+ )
+ });
+ });
+ })
+ .then(function() {
+ if (multilingal) return;
+ return that.parseSummary();
+ })
+ .then(function() {
+ if (multilingal) return;
+ return that.parseGlossary();
})
.thenResolve(this);
};
+// Parse langs
+Book.prototype.parseLangs = function() {
+ var that = this;
+
+ return that.findFile("LANGS")
+ .then(function(langs) {
+ if (!langs) return {};
+
+ return that.readFile(langs.path)
+ .then(function(content) {
+ return langs.parser.langs(content);
+ });
+ })
+ .then(function(langs) {
+ that.langs = langs;
+ });
+};
+
// Parse summary
Book.prototype.parseSummary = function() {
var that = this;
@@ -51,6 +99,24 @@ Book.prototype.parseSummary = function() {
});
};
+// Parse glossary
+Book.prototype.parseGlossary = function() {
+ var that = this;
+
+ return that.findFile("GLOSSARY")
+ .then(function(glossary) {
+ if (!glossary) return {};
+
+ return that.readFile(glossary.path)
+ .then(function(content) {
+ return glossary.parser.glossary(content);
+ });
+ })
+ .then(function(glossary) {
+ that.glossary = glossaryy;
+ });
+};
+
// Find file that can be parsed with a specific filename
Book.prototype.findFile = function(filename) {
var that = this;