diff options
Diffstat (limited to 'packages/gitbook/lib/parse/parseStructureFile.js')
-rw-r--r-- | packages/gitbook/lib/parse/parseStructureFile.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/packages/gitbook/lib/parse/parseStructureFile.js b/packages/gitbook/lib/parse/parseStructureFile.js new file mode 100644 index 0000000..718f731 --- /dev/null +++ b/packages/gitbook/lib/parse/parseStructureFile.js @@ -0,0 +1,67 @@ +var Promise = require('../utils/promise'); +var error = require('../utils/error'); +var lookupStructureFile = require('./lookupStructureFile'); + +/** + Parse a ParsableFile using a specific method + + @param {FS} fs + @param {ParsableFile} file + @param {String} type + @return {Promise<Array<String, List|Map>>} +*/ +function parseFile(fs, file, type) { + var filepath = file.getPath(); + var parser = file.getParser(); + + if (!parser) { + return Promise.reject( + error.FileNotParsableError({ + filename: filepath + }) + ); + } + + return fs.readAsString(filepath) + .then(function(content) { + if (type === 'readme') { + return parser.parseReadme(content); + } else if (type === 'glossary') { + return parser.parseGlossary(content); + } else if (type === 'summary') { + return parser.parseSummary(content); + } else if (type === 'langs') { + return parser.parseLanguages(content); + } else { + throw new Error('Parsing invalid type "' + type + '"'); + } + }) + .then(function(result) { + return [ + file, + result + ]; + }); +} + + +/** + Parse a structure file (ex: SUMMARY.md, GLOSSARY.md). + It uses the configuration to find the specified file. + + @param {Book} book + @param {String} type: one of ["glossary", "readme", "summary"] + @return {Promise<List|Map>} +*/ +function parseStructureFile(book, type) { + var fs = book.getContentFS(); + + return lookupStructureFile(book, type) + .then(function(file) { + if (!file) return [undefined, undefined]; + + return parseFile(fs, file, type); + }); +} + +module.exports = parseStructureFile; |