diff options
author | Samy Pessé <samypesse@gmail.com> | 2015-01-19 09:47:36 +0100 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2015-01-19 09:47:36 +0100 |
commit | ec586dd3cdf06e9567f5d3e4961022ddc3c94778 (patch) | |
tree | cc7825ab73110b4e6fbedee404427b052edffa17 /lib/generate/site/glossary_indexer.js | |
parent | 80432161708357bdcf0e00533d9e6d327636dab6 (diff) | |
download | gitbook-ec586dd3cdf06e9567f5d3e4961022ddc3c94778.zip gitbook-ec586dd3cdf06e9567f5d3e4961022ddc3c94778.tar.gz gitbook-ec586dd3cdf06e9567f5d3e4961022ddc3c94778.tar.bz2 |
Clear folder
Diffstat (limited to 'lib/generate/site/glossary_indexer.js')
-rw-r--r-- | lib/generate/site/glossary_indexer.js | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/lib/generate/site/glossary_indexer.js b/lib/generate/site/glossary_indexer.js deleted file mode 100644 index 46ac9a4..0000000 --- a/lib/generate/site/glossary_indexer.js +++ /dev/null @@ -1,101 +0,0 @@ -var _ = require("lodash"); -var kramed = require('kramed'); -var textRenderer = require('kramed-text-renderer'); - -var entryId = require('../../parse/glossary').entryId; - - -function Indexer(glossary) { - if(!(this instanceof Indexer)) { - return new Indexer(glossary); - } - - _.bindAll(this); - - this.glossary = glossary || []; - - this.glossaryTerms = _.pluck(this.glossary, "id"); - - // Regex for searching for terms through body - this.termsRegex = new RegExp( - // Match any of the terms - "("+ - this.glossaryTerms.map(regexEscape).join('|') + - ")", - - // Flags - "gi" - ); - - // page url => terms - this.idx = { - /* - "a/b.html": ["one word", "second word"] - */ - }; - - // term => page urls - this.invertedIdx = { - /* - "word1": ["page1.html", "page2.html"] - */ - }; - - // Use text renderer - this.renderer = textRenderer(); -} - -Indexer.prototype.text = function(nodes) { - // Copy section - var section = _.toArray(nodes); - - // kramed's Render expects this, we don't use it yet - section.links = {}; - - var options = _.extend({}, kramed.defaults, { - renderer: this.renderer - }); - - return kramed.parser(section, options); -}; - -// Add page to glossary index -Indexer.prototype.add = function(sections, url) { - if(!(this.glossary && this.glossary.length > 0)) { - return; - } - - var textblob = - _.where(sections, { type: 'normal' }) - .map(this.text) - .join('\n'); - - var matches = _(textblob.match(this.termsRegex) || []) - .map(entryId) - .uniq() - .value(); - - // Add idx for book - this.idx[url] = matches; - - // Add to inverted idx - matches.forEach(function(match) { - if(!this.invertedIdx[match]) { - this.invertedIdx[match] = []; - } - this.invertedIdx[match].push(url); - }.bind(this)); -}; - -// Dump index as a string -Indexer.prototype.dump = function() { - return JSON.stringify(this.idx); -}; - - -function regexEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); -} - -// Exports -module.exports = Indexer; |