diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-04-24 00:15:38 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-04-24 00:15:38 +0200 |
commit | c3275a4aa985710c0fcc9d3f7104bc5ebed2eb04 (patch) | |
tree | e072d9aa0bdc59879d105a777a60010491971b56 /lib/parse | |
parent | 927185d95c9875a9b74d176b93669ebdbceecd14 (diff) | |
download | gitbook-c3275a4aa985710c0fcc9d3f7104bc5ebed2eb04.zip gitbook-c3275a4aa985710c0fcc9d3f7104bc5ebed2eb04.tar.gz gitbook-c3275a4aa985710c0fcc9d3f7104bc5ebed2eb04.tar.bz2 |
Parse multilingual books
Diffstat (limited to 'lib/parse')
-rw-r--r-- | lib/parse/index.js | 3 | ||||
-rw-r--r-- | lib/parse/parseBook.js | 55 | ||||
-rw-r--r-- | lib/parse/parseLanguages.js | 22 |
3 files changed, 74 insertions, 6 deletions
diff --git a/lib/parse/index.js b/lib/parse/index.js index 58561fb..785b67e 100644 --- a/lib/parse/index.js +++ b/lib/parse/index.js @@ -7,5 +7,6 @@ module.exports = { parseConfig: require('./parseConfig'), parsePagesList: require('./parsePagesList'), parseIgnore: require('./parseIgnore'), - listAssets: require('./listAssets') + listAssets: require('./listAssets'), + parseLanguages: require('./parseLanguages') }; diff --git a/lib/parse/parseBook.js b/lib/parse/parseBook.js index 4af1768..3a7d845 100644 --- a/lib/parse/parseBook.js +++ b/lib/parse/parseBook.js @@ -1,11 +1,52 @@ var Promise = require('../utils/promise'); +var Book = require('../models/book'); var parseIgnore = require('./parseIgnore'); var parseConfig = require('./parseConfig'); var parseGlossary = require('./parseGlossary'); var parseSummary = require('./parseSummary'); var parseReadme = require('./parseReadme'); -//var parseLanguages = require('./parseLanguages'); +var parseLanguages = require('./parseLanguages'); + +/** + Parse content of a book + + @param {Book} book + @return {Promise<Book>} +*/ +function parseBookContent(book) { + return Promise(book) + .then(parseReadme) + .then(parseSummary) + .then(parseGlossary); +} + +/** + Parse a multilingual book + + @param {Book} book + @return {Promise<Book>} +*/ +function parseMultilingualBook(book) { + var languages = book.getLanguages(); + var langList = languages.getList(); + + return Promise.reduce(langList, function(currentBook, lang) { + var child = Book.createFromParent(currentBook, lang.getPath()); + + return Promise(child) + .then(parseIgnore) + .then(parseConfig) + .then(parseBookContent) + .then(function(result) { + var books = currentBook.getBooks(); + books = books.push(result); + + return currentBook.set('books', books); + }); + }, book); +} + /** Parse a whole book from a filesystem @@ -17,10 +58,14 @@ function parseBook(book) { return Promise(book) .then(parseIgnore) .then(parseConfig) - //.then(parseLanguages) - .then(parseReadme) - .then(parseSummary) - .then(parseGlossary); + .then(parseLanguages) + .then(function(resultBook) { + if (book.isMultilingual()) { + return parseMultilingualBook(resultBook); + } else { + return parseBookContent(resultBook); + } + }); } module.exports = parseBook; diff --git a/lib/parse/parseLanguages.js b/lib/parse/parseLanguages.js new file mode 100644 index 0000000..d78881f --- /dev/null +++ b/lib/parse/parseLanguages.js @@ -0,0 +1,22 @@ +var parseStructureFile = require('./parseStructureFile'); +var Languages = require('../models/languages'); + +/** + Parse languages list from book + + @param {Book} book + @return {Promise<Book>} +*/ +function parseLanguages(book) { + return parseStructureFile(book, 'langs') + .spread(function(file, result) { + if (!file) { + return; + } + + var languages = Languages.createFromList(file, result); + return book.set('languages', languages); + }); +} + +module.exports = parseLanguages; |