mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-21 01:53:26 +00:00
Parse langs and glossary
This commit is contained in:
+70
-4
@@ -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() {
|
||||
|
||||
.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;
|
||||
|
||||
@@ -6,7 +6,7 @@ var fs = require("./utils/fs");
|
||||
|
||||
var Configuration = function(book, options) {
|
||||
this.book = book;
|
||||
this.options = _.defaults(options || {}, Configuration.DEFAULT);
|
||||
this.options = _.extend({}, Configuration.DEFAULT, options || {});
|
||||
};
|
||||
|
||||
// Read and parse the configuration
|
||||
@@ -16,7 +16,7 @@ Configuration.prototype.load = function() {
|
||||
return Q()
|
||||
.then(function() {
|
||||
try {
|
||||
var _config = require(path.resolve(that.book.root, "book"));
|
||||
var _config = require(path.resolve(that.book.root, that.options.));
|
||||
that.options = _.merge(
|
||||
that.options,
|
||||
_.omit(_config, 'input', 'configFile', 'defaultsPlugins', 'generator')
|
||||
@@ -30,16 +30,16 @@ Configuration.prototype.load = function() {
|
||||
|
||||
// Default configuration
|
||||
Configuration.DEFAULT = {
|
||||
// Options that can't be extend
|
||||
"configFile": "book",
|
||||
"generator": "site",
|
||||
"extension": null,
|
||||
|
||||
// Book metadats (somes are extracted from the README by default)
|
||||
"title": null,
|
||||
"description": null,
|
||||
"isbn": null,
|
||||
|
||||
// For ebook format, the extension to use for generation (default is detected from output extension)
|
||||
// "epub", "pdf", "mobi"
|
||||
// Caution: it overrides the value from the command line
|
||||
// It's not advised this option in the book.json
|
||||
"extension": null,
|
||||
"lang": "en",
|
||||
|
||||
// Plugins list, can contain "-name" for removing default plugins
|
||||
"plugins": [],
|
||||
|
||||
Reference in New Issue
Block a user