diff options
Diffstat (limited to 'lib/book.js')
-rw-r--r-- | lib/book.js | 72 |
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; |