summaryrefslogtreecommitdiffstats
path: root/packages/gitbook/lib/parse/parseStructureFile.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gitbook/lib/parse/parseStructureFile.js')
-rw-r--r--packages/gitbook/lib/parse/parseStructureFile.js67
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;