summaryrefslogtreecommitdiffstats
path: root/lib/models
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-04-30 22:06:16 +0200
committerSamy Pesse <samypesse@gmail.com>2016-04-30 22:06:16 +0200
commitc1d53ec11fbe085932df911bda5686b7bf671f53 (patch)
tree97ae6db641eb79ec9b061af136a0b2e3c549db55 /lib/models
parent36b49c66c6b75515bc84dd678fd52121a313e8d2 (diff)
downloadgitbook-c1d53ec11fbe085932df911bda5686b7bf671f53.zip
gitbook-c1d53ec11fbe085932df911bda5686b7bf671f53.tar.gz
gitbook-c1d53ec11fbe085932df911bda5686b7bf671f53.tar.bz2
Switch parsers to a model
Diffstat (limited to 'lib/models')
-rw-r--r--lib/models/file.js2
-rw-r--r--lib/models/glossary.js2
-rw-r--r--lib/models/parser.js113
-rw-r--r--lib/models/summary.js2
4 files changed, 116 insertions, 3 deletions
diff --git a/lib/models/file.js b/lib/models/file.js
index d1726a7..8ddd4af 100644
--- a/lib/models/file.js
+++ b/lib/models/file.js
@@ -36,7 +36,7 @@ File.prototype.exists = function() {
File.prototype.getType = function() {
var parser = this.getParser();
if (parser) {
- return parser.name;
+ return parser.getName();
} else {
return undefined;
}
diff --git a/lib/models/glossary.js b/lib/models/glossary.js
index bb4407d..0033248 100644
--- a/lib/models/glossary.js
+++ b/lib/models/glossary.js
@@ -48,7 +48,7 @@ Glossary.prototype.toText = function(parser) {
});
}
- return parser.glossary.toText(entries.toJS());
+ return parser.renderGlossary(entries.toJS());
};
diff --git a/lib/models/parser.js b/lib/models/parser.js
new file mode 100644
index 0000000..e776582
--- /dev/null
+++ b/lib/models/parser.js
@@ -0,0 +1,113 @@
+var Immutable = require('immutable');
+var Promise = require('../utils/promise');
+
+var Parser = Immutable.Record({
+ name: String(),
+
+ // List of extensions that can be processed using this parser
+ extensions: Immutable.List(),
+
+ // Parsing functions
+ readme: Function(),
+ langs: Function(),
+ summary: Function(),
+ glossary: Function(),
+ page: Function(),
+ inline: Function()
+});
+
+Parser.prototype.getName = function() {
+ return this.get('name');
+};
+
+Parser.prototype.getExtensions = function() {
+ return this.get('extensions');
+};
+
+// PARSE
+
+Parser.prototype.parseReadme = function(content) {
+ var readme = this.get('readme');
+ return Promise(readme(content));
+};
+
+Parser.prototype.parseSummary = function(content) {
+ var summary = this.get('summary');
+ return Promise(summary(content));
+};
+
+Parser.prototype.parseGlossary = function(content) {
+ var glossary = this.get('glossary');
+ return Promise(glossary(content));
+};
+
+Parser.prototype.preparePage = function(content) {
+ var page = this.get('page');
+ return Promise(page.prepare(content));
+};
+
+Parser.prototype.parsePage = function(content) {
+ var page = this.get('page');
+ return Promise(page(content));
+};
+
+Parser.prototype.parseLanguages = function(content) {
+ var langs = this.get('langs');
+ return Promise(langs(content));
+};
+
+Parser.prototype.parseInline = function(content) {
+ var inline = this.get('inline');
+ return Promise(inline(content));
+};
+
+// TO TEXT
+
+Parser.prototype.renderLanguages = function(content) {
+ var langs = this.get('langs');
+ return Promise(langs.toText(content));
+};
+
+Parser.prototype.renderSummary = function(content) {
+ var summary = this.get('summary');
+ return Promise(summary.toText(content));
+};
+
+Parser.prototype.renderGlossary = function(content) {
+ var glossary = this.get('glossary');
+ return Promise(glossary.toText(content));
+};
+
+/**
+ Test if this parser matches an extension
+
+ @param {String} ext
+ @return {Boolean}
+*/
+Parser.prototype.matchExtension = function(ext) {
+ var exts = this.getExtensions();
+ return exts.includes(ext.toLowerCase());
+};
+
+/**
+ Create a new parser using a module (gitbook-markdown, etc)
+
+ @param {String} name
+ @param {Array<String>} extensions
+ @param {Object} module
+ @return {Parser}
+*/
+Parser.create = function(name, extensions, module) {
+ return new Parser({
+ name: name,
+ extensions: Immutable.List(extensions),
+ readme: module.readme,
+ langs: module.langs,
+ summary: module.summary,
+ glossary: module.glossary,
+ page: module.page,
+ inline: module.inline
+ });
+};
+
+module.exports = Parser;
diff --git a/lib/models/summary.js b/lib/models/summary.js
index 5314bb0..9f1701e 100644
--- a/lib/models/summary.js
+++ b/lib/models/summary.js
@@ -146,7 +146,7 @@ Summary.prototype.toText = function(parser) {
});
}
- return parser.summary.toText({
+ return parser.renderSummary({
parts: parts.toJS()
});
};