diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-04-30 22:06:16 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-04-30 22:06:16 +0200 |
commit | c1d53ec11fbe085932df911bda5686b7bf671f53 (patch) | |
tree | 97ae6db641eb79ec9b061af136a0b2e3c549db55 /lib/models | |
parent | 36b49c66c6b75515bc84dd678fd52121a313e8d2 (diff) | |
download | gitbook-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.js | 2 | ||||
-rw-r--r-- | lib/models/glossary.js | 2 | ||||
-rw-r--r-- | lib/models/parser.js | 113 | ||||
-rw-r--r-- | lib/models/summary.js | 2 |
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() }); }; |