// generatedy by JSX compiler 0.9.24 (2013-04-05 13:45:00 +0900; 1b229cc6a411f674f0f7cf7a79b7a8b3f8eb7414) var JSX = {}; (function (JSX) { /** * copies the implementations from source interface to target */ function $__jsx_merge_interface(target, source) { for (var k in source.prototype) if (source.prototype.hasOwnProperty(k)) target.prototype[k] = source.prototype[k]; } /** * defers the initialization of the property */ function $__jsx_lazy_init(obj, prop, func) { function reset(obj, prop, value) { delete obj[prop]; obj[prop] = value; return value; } Object.defineProperty(obj, prop, { get: function () { return reset(obj, prop, func()); }, set: function (v) { reset(obj, prop, v); }, enumerable: true, configurable: true }); } /** * sideeffect().a /= b */ function $__jsx_div_assign(obj, prop, divisor) { return obj[prop] = (obj[prop] / divisor) | 0; } /* * global functions, renamed to avoid conflict with local variable names */ var $__jsx_parseInt = parseInt; var $__jsx_parseFloat = parseFloat; var $__jsx_isNaN = isNaN; var $__jsx_isFinite = isFinite; var $__jsx_encodeURIComponent = encodeURIComponent; var $__jsx_decodeURIComponent = decodeURIComponent; var $__jsx_encodeURI = encodeURI; var $__jsx_decodeURI = decodeURI; var $__jsx_ObjectToString = Object.prototype.toString; var $__jsx_ObjectHasOwnProperty = Object.prototype.hasOwnProperty; /* * profiler object, initialized afterwards */ function $__jsx_profiler() { } /* * public interface to JSX code */ JSX.require = function (path) { var m = $__jsx_classMap[path]; return m !== undefined ? m : null; }; JSX.profilerIsRunning = function () { return $__jsx_profiler.getResults != null; }; JSX.getProfileResults = function () { return ($__jsx_profiler.getResults || function () { return {}; })(); }; JSX.postProfileResults = function (url, cb) { if ($__jsx_profiler.postResults == null) throw new Error("profiler has not been turned on"); return $__jsx_profiler.postResults(url, cb); }; JSX.resetProfileResults = function () { if ($__jsx_profiler.resetResults == null) throw new Error("profiler has not been turned on"); return $__jsx_profiler.resetResults(); }; JSX.DEBUG = false; /** * class _Main extends Object * @constructor */ function _Main() { } /** * @constructor */ function _Main$() { }; _Main$.prototype = new _Main; /** * @param {Array.} args */ _Main.main$AS = function (args) { OktaviaSearch$setStemmer$LStemmer$(new GermanStemmer$()); }; var _Main$main$AS = _Main.main$AS; /** * class _Result extends Object * @constructor */ function _Result() { } /** * @constructor * @param {!string} title * @param {!string} url * @param {!string} content * @param {!number} score */ function _Result$SSSI(title, url, content, score) { this.title = title; this.url = url; this.content = content; this.score = score; }; _Result$SSSI.prototype = new _Result; /** * class _Proposal extends Object * @constructor */ function _Proposal() { } /** * @constructor * @param {!string} options * @param {!string} label * @param {!number} count */ function _Proposal$SSI(options, label, count) { this.options = options; this.label = label; this.count = count; }; _Proposal$SSI.prototype = new _Proposal; /** * class OktaviaSearch extends Object * @constructor */ function OktaviaSearch() { } /** * @constructor * @param {!number} entriesPerPage */ function OktaviaSearch$I(entriesPerPage) { this._queries = null; this._highlight = ""; this._result = null; this._proposals = null; this._currentFolderDepth = 0; this._oktavia = new Oktavia$(); this._entriesPerPage = entriesPerPage; this._currentPage = 1; this._queryString = null; this._callback = null; OktaviaSearch._instance = this; }; OktaviaSearch$I.prototype = new OktaviaSearch; /** * @param {Stemmer} stemmer */ OktaviaSearch.setStemmer$LStemmer$ = function (stemmer) { /** @type {Oktavia} */ var this$0; if (OktaviaSearch._instance) { this$0 = OktaviaSearch._instance._oktavia; this$0._stemmer = stemmer; } else { OktaviaSearch._stemmer = stemmer; } }; var OktaviaSearch$setStemmer$LStemmer$ = OktaviaSearch.setStemmer$LStemmer$; /** * @param {!string} index */ OktaviaSearch.prototype.loadIndex$S = function (index) { /** @type {Oktavia} */ var this$0; /** @type {Stemmer} */ var stemmer$0; if (OktaviaSearch._stemmer) { this$0 = this._oktavia; stemmer$0 = OktaviaSearch._stemmer; this$0._stemmer = stemmer$0; } this._oktavia.load$S(Binary$base64decode$S(index)); if (this._queryString) { this.search$SF$IIV$(this._queryString, this._callback); this._queryString = null; this._callback = null; } }; /** * @param {!string} queryString * @param {*} callback */ OktaviaSearch.prototype.search$SF$IIV$ = function (queryString, callback) { /** @type {QueryStringParser} */ var queryParser; /** @type {SearchSummary} */ var summary; /** @type {Array.} */ var _result$0; if (this._oktavia) { queryParser = ({queries: [ ]}); this._queries = QueryStringParser$parse$LQueryStringParser$S(queryParser, queryString); this._highlight = QueryStringParser$highlight$LQueryStringParser$(queryParser); summary = this._oktavia.search$ALQuery$(this._queries); if (SearchSummary$size$LSearchSummary$(summary) > 0) { this._result = this._sortResult$LSearchSummary$(summary); this._proposals = [ ]; this._currentPage = 1; } else { this._result = [ ]; if (this._queries.length > 1) { this._proposals = SearchSummary$getProposal$LSearchSummary$(summary); } else { this._proposals = [ ]; } this._currentPage = 1; } callback((_result$0 = this._result).length, Math.ceil(_result$0.length / this._entriesPerPage)); } else { this._queryString = queryString; this._callback = callback; } }; /** * @return {!number} */ OktaviaSearch.prototype.resultSize$ = function () { return (this._result.length | 0); }; /** * @return {!number} */ OktaviaSearch.prototype.totalPages$ = function () { return (Math.ceil(this._result.length / this._entriesPerPage) | 0); }; /** * @return {!number} */ OktaviaSearch.prototype.currentPage$ = function () { return this._currentPage; }; /** * @param {!number} page */ OktaviaSearch.prototype.setCurrentPage$I = function (page) { this._currentPage = page; }; /** * @return {!boolean} */ OktaviaSearch.prototype.hasPrevPage$ = function () { return this._currentPage !== 1; }; /** * @return {!boolean} */ OktaviaSearch.prototype.hasNextPage$ = function () { return this._currentPage !== Math.ceil(this._result.length / this._entriesPerPage); }; /** * @return {Array.} */ OktaviaSearch.prototype.pageIndexes$ = function () { /** @type {Array.} */ var result; /** @type {!number} */ var total; /** @type {!number} */ var i; result = [ ]; total = Math.ceil(this._result.length / this._entriesPerPage); if (total < 10) { for (i = 1; i <= total; i++) { result.push(i + ""); } } else { if (this._currentPage <= 5) { for (i = 1; i <= 7; i++) { result.push(i + ""); } result.push('...', total + ""); } else { if (total - 5 <= this._currentPage) { result.push('1', '...'); for (i = total - 8; i <= total; i++) { result.push(i + ""); } } else { result.push('1', '...'); for (i = this._currentPage - 3; i <= this._currentPage + 3; i++) { result.push(i + ""); } result.push('...', total + ""); } } } return result; }; /** * @return {Array.} */ OktaviaSearch.prototype.getResult$ = function () { /** @type {Style} */ var style; /** @type {!number} */ var start; /** @type {!number} */ var last; /** @type {Metadata} */ var metadata; /** @type {!number} */ var num; /** @type {Array.} */ var results; /** @type {!number} */ var i; /** @type {SearchUnit} */ var unit; /** @type {Array.} */ var info; /** @type {!string} */ var content; /** @type {Array.} */ var positions; /** @type {!number} */ var end; /** @type {!boolean} */ var split; /** @type {!number} */ var j; /** @type {Position} */ var pos; /** @type {!string} */ var text; /** @type {Oktavia} */ var this$0; /** @type {!number} */ var position$0; /** @type {!number} */ var _currentPage$0; /** @type {!number} */ var _entriesPerPage$0; style = new Style$S('html'); start = ((_currentPage$0 = this._currentPage) - 1) * (_entriesPerPage$0 = this._entriesPerPage); last = Math.min(_currentPage$0 * _entriesPerPage$0, this._result.length); this$0 = this._oktavia; metadata = this$0._metadatas[this$0._metadataLabels[0]]; num = 250; results = [ ]; for (i = start; i < last; i++) { unit = this._result[i]; info = metadata.getInformation$I(unit.id).split(Oktavia.eob); content = metadata.getContent$I(unit.id); start = 0; positions = SearchUnit$getPositions$LSearchUnit$(unit); if (content.indexOf(info[0]) === 1) { content = content.slice(info[0].length + 2, content.length); start += info[0].length + 2; } end = start + num; split = false; if (positions[0].position > end - positions[0].word.length) { end = positions[0].position + Math.floor(num / 2); split = true; } for (j = positions.length - 1; j > -1; j--) { pos = positions[j]; if (pos.position + pos.word.length < end) { content = [ content.slice(0, pos.position - start), style.convert$S('*').replace('*', content.slice((position$0 = pos.position) - start, position$0 + pos.word.length - start)), content.slice(pos.position + pos.word.length - start, content.length) ].join(''); } } if (split) { text = [ content.slice(0, Math.floor(num / 2)) + ' ...', content.slice(- Math.floor(num / 2), end - start) ].join('
'); } else { text = content.slice(0, end - start) + ' ...
'; } text = text.replace(Oktavia.eob, ' ').replace(/()()+/, '

'); results.push(({title: info[0], url: info[1], content: text, score: unit.score})); } return results; }; /** * @return {!string} */ OktaviaSearch.prototype.getHighlight$ = function () { return this._highlight; }; /** * @return {Array.} */ OktaviaSearch.prototype.getProposals$ = function () { /** @type {Style} */ var style; /** @type {Array.} */ var results; /** @type {!number} */ var i; /** @type {Proposal} */ var proposal; /** @type {Array.} */ var label; /** @type {Array.} */ var option; /** @type {!number} */ var j; style = new Style$S('html'); results = [ ]; if (this._queries.length > 1) { for (i = 0; i < this._proposals.length; i++) { proposal = this._proposals[i]; if (proposal.expect > 0) { label = [ ]; option = [ ]; for (j = 0; j < this._queries.length; j++) { if (j !== proposal.omit) { label.push(style.convert$S('' + this._queries[j].toString() + '')); option.push(this._queries[j].toString()); } else { label.push(style.convert$S('' + this._queries[j].toString() + '')); } } results.push(({options: option.join(' '), label: label.join(' '), count: proposal.expect})); } } } return results; }; /** * @param {SearchSummary} summary * @return {Array.} */ OktaviaSearch.prototype._sortResult$LSearchSummary$ = function (summary) { /** @type {!number} */ var i; /** @type {!number} */ var score; /** @type {SearchUnit} */ var unit; /** @type {!string} */ var pos; /** @type {Position} */ var position; for (i = 0; i < summary.result.units.length; i++) { score = 0; unit = summary.result.units[i]; for (pos in unit.positions) { position = unit.positions[pos]; if (this._oktavia.wordPositionType$I(position.position)) { score += 10; } else { score += 1; } if (! position.stemmed) { score += 2; } } unit.score = (score | 0); } return SearchSummary$getSortedResult$LSearchSummary$(summary); }; /** * class _Main$0 extends Object * @constructor */ function _Main$0() { } /** * @constructor */ function _Main$0$() { }; _Main$0$.prototype = new _Main$0; /** * @param {Array.} args */ _Main$0.main$AS = function (args) { }; var _Main$0$main$AS = _Main$0.main$AS; /** * class Oktavia extends Object * @constructor */ function Oktavia() { } /** * @constructor */ function Oktavia$() { /** @type {Array.} */ var _utf162compressCode$0; this._compressCode2utf16 = null; this._fmindex = new FMIndex$(); this._metadatas = ({ }); this._metadataLabels = [ ]; this._stemmer = null; this._stemmingResult = ({ }); _utf162compressCode$0 = this._utf162compressCode = [ Oktavia.eof, Oktavia.eob, Oktavia.unknown ]; _utf162compressCode$0.length = 65536; this._compressCode2utf16 = [ Oktavia.eof, Oktavia.eob, Oktavia.unknown ]; }; Oktavia$.prototype = new Oktavia; /** * @param {Stemmer} stemmer */ Oktavia.prototype.setStemmer$LStemmer$ = function (stemmer) { this._stemmer = stemmer; }; /** * @return {Metadata} */ Oktavia.prototype.getPrimaryMetadata$ = function () { return this._metadatas[this._metadataLabels[0]]; }; /** * @param {!string} key * @return {Section} */ Oktavia.prototype.addSection$S = function (key) { /** @type {Section} */ var section; if (this._metadataLabels.indexOf(key) !== -1) { throw new Error('Metadata name ' + key + ' is already exists'); } this._metadataLabels.push(key); section = new Section$LOktavia$(this); this._metadatas[key] = section; return section; }; /** * @param {!string} key * @return {Section} */ Oktavia.prototype.getSection$S = function (key) { if (this._metadataLabels.indexOf(key) === -1) { throw new Error('Metadata name ' + key + " does't exists"); } return this._metadatas[key]; }; /** * @param {!string} key * @return {Splitter} */ Oktavia.prototype.addSplitter$S = function (key) { /** @type {Splitter} */ var splitter; if (this._metadataLabels.indexOf(key) !== -1) { throw new Error('Metadata name ' + key + ' is already exists'); } this._metadataLabels.push(key); splitter = new Splitter$LOktavia$(this); this._metadatas[key] = splitter; return splitter; }; /** * @param {!string} key * @return {Splitter} */ Oktavia.prototype.getSplitter$S = function (key) { if (this._metadataLabels.indexOf(key) === -1) { throw new Error('Metadata name ' + key + " does't exists"); } return this._metadatas[key]; }; /** * @param {!string} key * @param {Array.} headers * @return {Table} */ Oktavia.prototype.addTable$SAS = function (key, headers) { /** @type {Table} */ var table; if (this._metadataLabels.indexOf(key) !== -1) { throw new Error('Metadata name ' + key + ' is already exists'); } this._metadataLabels.push(key); table = new Table$LOktavia$AS(this, headers); this._metadatas[key] = table; return table; }; /** * @param {!string} key * @return {Table} */ Oktavia.prototype.getTable$S = function (key) { if (this._metadataLabels.indexOf(key) === -1) { throw new Error('Metadata name ' + key + " does't exists"); } return this._metadatas[key]; }; /** * @param {!string} key * @return {Block} */ Oktavia.prototype.addBlock$S = function (key) { /** @type {Block} */ var block; if (this._metadataLabels.indexOf(key) !== -1) { throw new Error('Metadata name ' + key + ' is already exists'); } this._metadataLabels.push(key); block = new Block$LOktavia$(this); this._metadatas[key] = block; return block; }; /** * @param {!string} key * @return {Block} */ Oktavia.prototype.getBlock$S = function (key) { if (this._metadataLabels.indexOf(key) === -1) { throw new Error('Metadata name ' + key + " does't exists"); } return this._metadatas[key]; }; /** */ Oktavia.prototype.addEndOfBlock$ = function () { this._fmindex.push$S(Oktavia.eob); }; /** * @param {!string} words */ Oktavia.prototype.addWord$S = function (words) { /** @type {Array.} */ var str; /** @type {!number} */ var i; /** @type {!number} */ var charCode; /** @type {undefined|!string} */ var newCharCode; str = [ ]; str.length = words.length; for (i = 0; i < words.length; i++) { charCode = words.charCodeAt(i); newCharCode = this._utf162compressCode[charCode]; if (newCharCode == null) { newCharCode = String.fromCharCode(this._compressCode2utf16.length); this._utf162compressCode[charCode] = newCharCode; this._compressCode2utf16.push(String.fromCharCode(charCode)); } str.push(newCharCode); } this._fmindex.push$S(str.join('')); }; /** * @param {!string} words * @param {!boolean} stemming */ Oktavia.prototype.addWord$SB = function (words, stemming) { /** @type {Array.} */ var wordList; /** @type {!number} */ var i; /** @type {undefined|!string} */ var originalWord; /** @type {!string} */ var smallWord; /** @type {undefined|!string} */ var registerWord; /** @type {!string} */ var baseWord; /** @type {!string} */ var compressedCodeWord; /** @type {Array.} */ var stemmedList; this.addWord$S(words); wordList = words.split(/\s+/); for (i = 0; i < wordList.length; i++) { originalWord = wordList[i]; smallWord = originalWord.slice(0, 1).toLowerCase() + originalWord.slice(1); registerWord = null; if (stemming && this._stemmer) { baseWord = this._stemmer.stemWord$S(originalWord.toLowerCase()); if (originalWord.indexOf(baseWord) === -1) { registerWord = baseWord; } } else { if (originalWord != smallWord) { registerWord = smallWord; } } if (registerWord) { compressedCodeWord = this._convertToCompressionCode$S(originalWord); stemmedList = this._stemmingResult[registerWord]; if (! stemmedList) { stemmedList = [ compressedCodeWord ]; this._stemmingResult[registerWord] = stemmedList; } else { if (stemmedList.indexOf(compressedCodeWord) === -1) { stemmedList.push(compressedCodeWord); } } } } }; /** * @param {!string} keyword * @return {!string} */ Oktavia.prototype._convertToCompressionCode$S = function (keyword) { /** @type {Array.} */ var resultChars; /** @type {!number} */ var i; /** @type {undefined|!string} */ var chr; resultChars = [ ]; for (i = 0; i < keyword.length; i++) { chr = this._utf162compressCode[keyword.charCodeAt(i)]; if (chr == null) { resultChars.push(Oktavia.unknown); } else { resultChars.push(chr); } } return resultChars.join(''); }; /** * @param {!string} keyword * @param {!boolean} stemming * @return {Array.} */ Oktavia.prototype.rawSearch$SB = function (keyword, stemming) { /** @type {Array.} */ var result; /** @type {!string} */ var baseWord; /** @type {Array.} */ var stemmedList; /** @type {!number} */ var i; /** @type {undefined|!string} */ var word; if (stemming) { result = [ ]; if (this._stemmer) { baseWord = this._stemmer.stemWord$S(keyword.toLowerCase()); stemmedList = this._stemmingResult[baseWord]; if (stemmedList) { for (i = 0; i < stemmedList.length; i++) { word = stemmedList[i]; result = result.concat(this._fmindex.search$S(word)); } } } } else { result = this._fmindex.search$S(this._convertToCompressionCode$S(keyword)); } return result; }; /** * @param {Array.} queries * @return {SearchSummary} */ Oktavia.prototype.search$ALQuery$ = function (queries) { /** @type {SearchSummary} */ var summary; /** @type {!number} */ var i; /** @type {SingleResult} */ var result$0; summary = ({sourceResults: [ ], result: null, oktavia: this}); for (i = 0; i < queries.length; i++) { result$0 = this._searchQuery$LQuery$(queries[i]); summary.sourceResults.push(result$0); } summary.result = SearchSummary$mergeResult$LSearchSummary$ALSingleResult$(summary, summary.sourceResults); return summary; }; /** * @param {Query} query * @return {SingleResult} */ Oktavia.prototype._searchQuery$LQuery$ = function (query) { /** @type {SingleResult} */ var result; /** @type {Array.} */ var positions; result = new SingleResult$SBB(query.word, query.or, query.not); if (query.raw) { positions = this.rawSearch$SB(query.word, false); } else { positions = this.rawSearch$SB(query.word, false).concat(this.rawSearch$SB(query.word, true)); } this._metadatas[this._metadataLabels[0]].grouping$LSingleResult$AISB(result, positions, query.word, ! query.raw); return result; }; /** */ Oktavia.prototype.build$ = function () { this.build$IB(5, false); }; /** * @param {!number} cacheDensity * @param {!boolean} verbose */ Oktavia.prototype.build$IB = function (cacheDensity, verbose) { /** @type {!string} */ var key; /** @type {!number} */ var cacheRange; /** @type {!number} */ var maxChar; for (key in this._metadatas) { this._metadatas[key]._build$(); } cacheRange = Math.round(Math.max(1, 100 / Math.min(100, Math.max(0.01, cacheDensity)))); maxChar = this._compressCode2utf16.length; this._fmindex.build$SIIB(Oktavia.eof, maxChar, cacheRange, verbose); }; /** * @return {!string} */ Oktavia.prototype.dump$ = function () { return this.dump$B(false); }; /** * @param {!boolean} verbose * @return {!string} */ Oktavia.prototype.dump$B = function (verbose) { /** @type {!string} */ var header; /** @type {!string} */ var fmdata; /** @type {Array.} */ var result; /** @type {!number} */ var i; /** @type {CompressionReport} */ var report; /** @type {undefined|!string} */ var name; /** @type {!string} */ var data; header = Binary$dumpString$SLCompressionReport$("oktavia-01", null).slice(1); if (verbose) { console.log("Source text size: " + (this._fmindex.size$() * 2 + "") + ' bytes'); } fmdata = this._fmindex.dump$B(verbose); result = [ header, fmdata ]; result.push(Binary$dump16bitNumber$I(this._compressCode2utf16.length)); for (i = 3; i < this._compressCode2utf16.length; i++) { result.push(this._compressCode2utf16[i]); } if (verbose) { console.log('Char Code Map: ' + (this._compressCode2utf16.length * 2 - 2 + "") + ' bytes'); } report = ({source: 0, result: 0}); result.push(Binary$dumpStringListMap$HASLCompressionReport$(this._stemmingResult, report)); if (verbose) { console.log('Stemmed Word Table: ' + (result[result.length - 1].length + "") + ' bytes (' + (Math.round(report.result * 100.0 / report.source) + "") + '%)'); } result.push(Binary$dump16bitNumber$I(this._metadataLabels.length)); for (i = 0; i < this._metadataLabels.length; i++) { report = ({source: 0, result: 0}); name = this._metadataLabels[i]; data = this._metadatas[name]._dump$LCompressionReport$(report); result.push(Binary$dumpString$SLCompressionReport$(name, report), data); if (verbose) { console.log('Meta Data ' + name + ': ' + (data.length * 2 + "") + ' bytes (' + (Math.round(report.result * 100.0 / report.source) + "") + '%)'); } } return result.join(''); }; /** * @param {!string} data */ Oktavia.prototype.load$S = function (data) { /** @type {!string} */ var header; /** @type {!number} */ var offset; /** @type {!number} */ var charCodeCount; /** @type {!number} */ var i; /** @type {!number} */ var charCode; /** @type {LoadedStringListMapResult} */ var stemmedWords; /** @type {!number} */ var metadataCount; /** @type {LoadedStringResult} */ var nameResult; /** @type {!string} */ var name; /** @type {!number} */ var type; header = Binary$dumpString$SLCompressionReport$("oktavia-01", null).slice(1); if (data.slice(0, 5) !== header) { throw new Error('Invalid data file'); } this._metadatas = ({ }); this._metadataLabels = [ ]; offset = 5; offset = this._fmindex.load$SI(data, offset); charCodeCount = Binary$load16bitNumber$SI(data, offset++); this._compressCode2utf16 = [ Oktavia.eof, Oktavia.eob, Oktavia.unknown ]; this._utf162compressCode = [ Oktavia.eof, Oktavia.eob, Oktavia.unknown ]; for (i = 3; i < charCodeCount; i++) { charCode = Binary$load16bitNumber$SI(data, offset++); this._compressCode2utf16.push(String.fromCharCode(charCode)); this._utf162compressCode[charCode] = String.fromCharCode(i); } stemmedWords = Binary$loadStringListMap$SI(data, offset); this._stemmingResult = stemmedWords.result; offset = stemmedWords.offset; metadataCount = Binary$load16bitNumber$SI(data, offset++); for (i = 0; i < metadataCount; i++) { nameResult = Binary$loadString$SI(data, offset); name = nameResult.result; offset = nameResult.offset; type = Binary$load16bitNumber$SI(data, offset++); switch (type) { case 0: offset = Section$_load$LOktavia$SSI(this, name, data, offset); break; case 1: offset = Splitter$_load$LOktavia$SSI(this, name, data, offset); break; case 2: offset = Table$_load$LOktavia$SSI(this, name, data, offset); break; case 3: offset = Block$_load$LOktavia$SSI(this, name, data, offset); break; } } }; /** * @return {!number} */ Oktavia.prototype.contentSize$ = function () { /** @type {FMIndex} */ var this$0; this$0 = this._fmindex; return this$0._substr.length; }; /** * @param {!number} position * @return {!number} */ Oktavia.prototype.wordPositionType$I = function (position) { /** @type {!number} */ var result; /** @type {!string} */ var ahead; result = 0; if (position === 0) { result = 4; } else { ahead = this._fmindex.getSubstring$II(position - 1, 1); if (/\s/.test(ahead)) { result = 2; } else { if (/\W/.test(ahead)) { result = 1; } else { if (Oktavia.eob === ahead) { result = 3; } } } } return (result | 0); }; /** * @param {!number} position * @param {!number} length * @return {!string} */ Oktavia.prototype._getSubstring$II = function (position, length) { /** @type {!string} */ var result; /** @type {Array.} */ var str; /** @type {!number} */ var i; result = this._fmindex.getSubstring$II(position, length); str = [ ]; for (i = 0; i < result.length; i++) { str.push(this._compressCode2utf16[result.charCodeAt(i)]); } return str.join(''); }; /** * class Binary extends Object * @constructor */ function Binary() { } /** * @constructor */ function Binary$() { }; Binary$.prototype = new Binary; /** * @param {!number} num * @return {!string} */ Binary.dump32bitNumber$N = function (num) { /** @type {Array.} */ var result; result = [ String.fromCharCode(Math.floor(num / 65536)) ]; result.push(String.fromCharCode(num % 65536)); return result.join(""); }; var Binary$dump32bitNumber$N = Binary.dump32bitNumber$N; /** * @param {!string} buffer * @param {!number} offset * @return {!number} */ Binary.load32bitNumber$SI = function (buffer, offset) { /** @type {!number} */ var result; result = buffer.charCodeAt(offset) * 65536 + buffer.charCodeAt(offset + 1); return result; }; var Binary$load32bitNumber$SI = Binary.load32bitNumber$SI; /** * @param {!number} num * @return {!string} */ Binary.dump16bitNumber$I = function (num) { return String.fromCharCode(num % 65536); }; var Binary$dump16bitNumber$I = Binary.dump16bitNumber$I; /** * @param {!string} buffer * @param {!number} offset * @return {!number} */ Binary.load16bitNumber$SI = function (buffer, offset) { return (buffer.charCodeAt(offset) | 0); }; var Binary$load16bitNumber$SI = Binary.load16bitNumber$SI; /** * @param {!string} str * @return {!string} */ Binary.dumpString$S = function (str) { return Binary$dumpString$SLCompressionReport$(str, null); }; var Binary$dumpString$S = Binary.dumpString$S; /** * @param {!string} str * @param {CompressionReport} report * @return {!string} */ Binary.dumpString$SLCompressionReport$ = function (str, report) { /** @type {!number} */ var length; /** @type {!boolean} */ var compress; /** @type {Array.} */ var charCodes; /** @type {!number} */ var i; /** @type {!number} */ var charCode; /** @type {Array.} */ var result; /** @type {undefined|!number} */ var bytes; if (str.length > 32768) { str = str.slice(0, 32768); } length = str.length; compress = true; charCodes = [ ]; for (i = 0; i < length; i++) { charCode = str.charCodeAt(i); if (charCode > 255) { compress = false; break; } charCodes.push(charCode); } if (compress) { result = [ Binary$dump16bitNumber$I(length + 32768) ]; for (i = 0; i < length; i += 2) { bytes = charCodes[i]; if (i !== length - 1) { bytes += charCodes[i + 1] << 8; } result.push(String.fromCharCode(bytes % 65536)); } if (report) { CompressionReport$add$LCompressionReport$II(report, length, Math.ceil(length / 2)); } } else { result = [ Binary$dump16bitNumber$I(length), str ]; if (report) { CompressionReport$add$LCompressionReport$II(report, length, length); } } return result.join(''); }; var Binary$dumpString$SLCompressionReport$ = Binary.dumpString$SLCompressionReport$; /** * @param {!string} buffer * @param {!number} offset * @return {LoadedStringResult} */ Binary.loadString$SI = function (buffer, offset) { return new LoadedStringResult$SI(buffer, offset); }; var Binary$loadString$SI = Binary.loadString$SI; /** * @param {Array.} strList * @return {!string} */ Binary.dumpStringList$AS = function (strList) { return Binary$dumpStringList$ASLCompressionReport$(strList, null); }; var Binary$dumpStringList$AS = Binary.dumpStringList$AS; /** * @param {Array.} strList * @param {CompressionReport} report * @return {!string} */ Binary.dumpStringList$ASLCompressionReport$ = function (strList, report) { /** @type {Array.} */ var result; /** @type {!number} */ var i; result = [ Binary$dump32bitNumber$N(strList.length) ]; for (i = 0; i < strList.length; i++) { result.push(Binary$dumpString$SLCompressionReport$(strList[i], report)); } return result.join(''); }; var Binary$dumpStringList$ASLCompressionReport$ = Binary.dumpStringList$ASLCompressionReport$; /** * @param {!string} buffer * @param {!number} offset * @return {LoadedStringListResult} */ Binary.loadStringList$SI = function (buffer, offset) { return new LoadedStringListResult$SI(buffer, offset); }; var Binary$loadStringList$SI = Binary.loadStringList$SI; /** * @param {Object.>} strMap * @return {!string} */ Binary.dumpStringListMap$HAS = function (strMap) { return Binary$dumpStringListMap$HASLCompressionReport$(strMap, null); }; var Binary$dumpStringListMap$HAS = Binary.dumpStringListMap$HAS; /** * @param {Object.>} strMap * @param {CompressionReport} report * @return {!string} */ Binary.dumpStringListMap$HASLCompressionReport$ = function (strMap, report) { /** @type {Array.} */ var result; /** @type {!number} */ var counter; /** @type {!string} */ var key; result = [ ]; counter = 0; for (key in strMap) { result.push(Binary$dumpString$SLCompressionReport$(key, report)); result.push(Binary$dumpStringList$ASLCompressionReport$(strMap[key], report)); counter++; } return Binary$dump32bitNumber$N(counter) + result.join(''); }; var Binary$dumpStringListMap$HASLCompressionReport$ = Binary.dumpStringListMap$HASLCompressionReport$; /** * @param {!string} buffer * @param {!number} offset * @return {LoadedStringListMapResult} */ Binary.loadStringListMap$SI = function (buffer, offset) { return new LoadedStringListMapResult$SI(buffer, offset); }; var Binary$loadStringListMap$SI = Binary.loadStringListMap$SI; /** * @param {Array.} array * @return {!string} */ Binary.dump32bitNumberList$AN = function (array) { return Binary$dump32bitNumberList$ANLCompressionReport$(array, null); }; var Binary$dump32bitNumberList$AN = Binary.dump32bitNumberList$AN; /** * @param {Array.} array * @param {CompressionReport} report * @return {!string} */ Binary.dump32bitNumberList$ANLCompressionReport$ = function (array, report) { /** @type {Array.} */ var result; /** @type {!number} */ var index; /** @type {!number} */ var inputLength; /** @type {!number} */ var length; /** @type {!string} */ var resultString; /** @type {!number} */ var value1$0; /** @type {!number} */ var value2$0; result = [ Binary$dump32bitNumber$N(array.length) ]; index = 0; inputLength = array.length; while (index < inputLength) { if (array[index] == 0) { length = Binary$_countZero$ANI(array, index); result.push(Binary$_zeroBlock$I(length)); index += length; } else { if (Binary$_shouldZebraCode$ANI(array, index)) { result.push(Binary$_createZebraCode$ANI(array, index)); value1$0 = array.length; value2$0 = index + 15; index = (value1$0 <= value2$0 ? value1$0 : value2$0); } else { length = Binary$_searchDoubleZero$ANI(array, index); result.push(Binary$_nonZeroBlock$ANII(array, index, length)); if (length === 0) { throw new Error(''); } index += length; } } } resultString = result.join(''); if (report) { CompressionReport$add$LCompressionReport$II(report, array.length * 2 + 2, resultString.length); } return resultString; }; var Binary$dump32bitNumberList$ANLCompressionReport$ = Binary.dump32bitNumberList$ANLCompressionReport$; /** * @param {!string} buffer * @param {!number} offset * @return {LoadedNumberListResult} */ Binary.load32bitNumberList$SI = function (buffer, offset) { return new LoadedNumberListResult$SI(buffer, offset); }; var Binary$load32bitNumberList$SI = Binary.load32bitNumberList$SI; /** * @param {Array.} array * @param {!number} offset * @return {!number} */ Binary._countZero$ANI = function (array, offset) { /** @type {!number} */ var i; /** @type {!number} */ var array$len$0; for ((i = offset, array$len$0 = array.length); i < array$len$0; i++) { if (array[i] != 0) { return (i - offset | 0); } } return (array.length - offset | 0); }; var Binary$_countZero$ANI = Binary._countZero$ANI; /** * @param {!number} length * @return {!string} */ Binary._zeroBlock$I = function (length) { /** @type {Array.} */ var result; result = [ ]; while (length > 0) { if (length > 16384) { result.push(Binary$dump16bitNumber$I(16383)); length -= 16384; } else { result.push(Binary$dump16bitNumber$I(length - 1)); length = 0; } } return result.join(''); }; var Binary$_zeroBlock$I = Binary._zeroBlock$I; /** * @param {Array.} array * @param {!number} offset * @return {!boolean} */ Binary._shouldZebraCode$ANI = function (array, offset) { /** @type {!number} */ var change; /** @type {!boolean} */ var isLastZero; /** @type {!number} */ var i; if (array.length - offset < 16) { return true; } change = 0; isLastZero = false; for (i = offset; i < offset + 15; i++) { if (array[i] == 0) { if (! isLastZero) { isLastZero = true; change++; } } else { if (isLastZero) { isLastZero = false; change++; } } } return change > 2; }; var Binary$_shouldZebraCode$ANI = Binary._shouldZebraCode$ANI; /** * @param {Array.} array * @param {!number} offset * @return {!number} */ Binary._searchDoubleZero$ANI = function (array, offset) { /** @type {!boolean} */ var isLastZero; /** @type {!number} */ var i; /** @type {!number} */ var array$len$0; isLastZero = false; for ((i = offset, array$len$0 = array.length); i < array$len$0; i++) { if (array[i] == 0) { if (isLastZero) { return (i - offset - 1 | 0); } isLastZero = true; } else { isLastZero = false; } } return (array.length - offset | 0); }; var Binary$_searchDoubleZero$ANI = Binary._searchDoubleZero$ANI; /** * @param {Array.} array * @param {!number} offset * @param {!number} length * @return {!string} */ Binary._nonZeroBlock$ANII = function (array, offset, length) { /** @type {Array.} */ var result; /** @type {!number} */ var blockLength; /** @type {!number} */ var i; result = [ ]; while (length > 0) { if (length > 16384) { blockLength = 16384; length -= 16384; } else { blockLength = length; length = 0; } result.push(Binary$dump16bitNumber$I(blockLength - 1 + 0x4000)); for (i = offset; i < offset + blockLength; i++) { result.push(Binary$dump32bitNumber$N(array[i])); } offset += blockLength; } return result.join(''); }; var Binary$_nonZeroBlock$ANII = Binary._nonZeroBlock$ANII; /** * @param {Array.} array * @param {!number} offset * @return {!string} */ Binary._createZebraCode$ANI = function (array, offset) { /** @type {!number} */ var last; /** @type {!number} */ var code; /** @type {Array.} */ var result; /** @type {!number} */ var i; /** @type {!number} */ var value1$0; /** @type {!number} */ var value2$0; value1$0 = offset + 15; value2$0 = array.length; last = (value1$0 <= value2$0 ? value1$0 : value2$0); code = 0x8000; result = [ ]; for (i = offset; i < last; i++) { if (array[i] != 0) { result.push(Binary$dump32bitNumber$N(array[i])); code = code + (0x1 << i - offset); } } return String.fromCharCode(code) + result.join(''); }; var Binary$_createZebraCode$ANI = Binary._createZebraCode$ANI; /** * @param {!string} str * @return {!string} */ Binary.base64encode$S = function (str) { /** @type {Array.} */ var out; /** @type {Array.} */ var source; /** @type {!number} */ var i; /** @type {!number} */ var code; /** @type {!number} */ var len; /** @type {!number} */ var c1; /** @type {undefined|!number} */ var c2; /** @type {undefined|!number} */ var c3; out = [ ]; source = [ ]; for (i = 0; i < str.length; i++) { code = str.charCodeAt(i); source.push(code & 0x00ff, code >>> 8); } len = str.length * 2; i = 0; while (i < len) { c1 = source[i++] & 0xff; if (i === len) { out.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(c1 >> 2)); out.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt((c1 & 0x3) << 4)); out.push("=="); break; } c2 = source[i++]; if (i === len) { out.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(c1 >> 2)); out.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt((c1 & 0x3) << 4 | (c2 & 0xF0) >> 4)); out.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt((c2 & 0xF) << 2)); out.push("="); break; } c3 = source[i++]; out.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(c1 >> 2)); out.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt((c1 & 0x3) << 4 | (c2 & 0xF0) >> 4)); out.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt((c2 & 0xF) << 2 | (c3 & 0xC0) >> 6)); out.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(c3 & 0x3F)); } return out.join(''); }; var Binary$base64encode$S = Binary.base64encode$S; /** * @param {Array.} source * @return {!string} */ Binary._mergeCharCode$AI = function (source) { /** @type {Array.} */ var result; /** @type {!number} */ var i; result = [ ]; for (i = 0; i < source.length; i += 2) { result.push(String.fromCharCode(source[i] + (source[i + 1] << 8))); } return result.join(''); }; var Binary$_mergeCharCode$AI = Binary._mergeCharCode$AI; /** * @param {!string} str * @return {!string} */ Binary.base64decode$S = function (str) { /** @type {!number} */ var len; /** @type {!number} */ var i; /** @type {Array.} */ var out; /** @type {undefined|!number} */ var c1; /** @type {undefined|!number} */ var c2; /** @type {!number} */ var c3; /** @type {!number} */ var c4; len = str.length; i = 0; out = [ ]; while (i < len) { do { c1 = Binary._base64DecodeChars[str.charCodeAt(i++) & 0xff]; } while (i < len && c1 == -1); if (c1 == -1) { break; } do { c2 = Binary._base64DecodeChars[str.charCodeAt(i++) & 0xff]; } while (i < len && c2 == -1); if (c2 == -1) { break; } out.push(c1 << 2 | (c2 & 0x30) >> 4); do { c3 = str.charCodeAt(i++) & 0xff; if (c3 === 61) { return Binary$_mergeCharCode$AI(out); } c3 = Binary._base64DecodeChars[c3]; } while (i < len && c3 === -1); if (c3 === -1) { break; } out.push((c2 & 0XF) << 4 | (c3 & 0x3C) >> 2); do { c4 = str.charCodeAt(i++) & 0xff; if (c4 === 61) { return Binary$_mergeCharCode$AI(out); } c4 = (Binary._base64DecodeChars[c4] | 0); } while (i < len && c4 === -1); if (c4 === -1) { break; } out.push((c3 & 0x03) << 6 | c4); } return Binary$_mergeCharCode$AI(out); }; var Binary$base64decode$S = Binary.base64decode$S; /** * class LoadedStringResult extends Object * @constructor */ function LoadedStringResult() { } /** * @constructor * @param {!string} data * @param {!number} offset */ function LoadedStringResult$SI(data, offset) { /** @type {!number} */ var strLength; /** @type {Array.} */ var bytes; /** @type {!number} */ var i; /** @type {!number} */ var code; /** @type {!number} */ var offset$0; this.result = ""; this.offset = 0; offset$0 = offset++; strLength = data.charCodeAt(offset$0); if (strLength > 32767) { strLength = strLength - 32768; bytes = [ ]; for (i = 0; i < strLength; i += 2) { code = data.charCodeAt(offset); bytes.push(String.fromCharCode(code & 0x00ff)); if (i !== strLength - 1) { bytes.push(String.fromCharCode(code >>> 8)); } offset++; } this.result = bytes.join(''); this.offset = offset; } else { this.result = data.slice(offset, offset + strLength); this.offset = (offset + strLength | 0); } }; LoadedStringResult$SI.prototype = new LoadedStringResult; /** * class LoadedStringListResult extends Object * @constructor */ function LoadedStringListResult() { } /** * @constructor * @param {!string} data * @param {!number} offset */ function LoadedStringListResult$SI(data, offset) { /** @type {!number} */ var length; /** @type {!number} */ var i; /** @type {!number} */ var strLength; /** @type {!string} */ var resultStr; /** @type {Array.} */ var bytes; /** @type {!number} */ var j; /** @type {!number} */ var code; /** @type {!number} */ var result$0; /** @type {!number} */ var offset$0; this.offset = 0; this.result = [ ]; result$0 = data.charCodeAt(offset) * 65536 + data.charCodeAt(offset + 1); length = result$0; offset += 2; for (i = 0; i < length; i++) { offset$0 = offset++; strLength = data.charCodeAt(offset$0); if (strLength > 32767) { strLength = strLength - 32768; bytes = [ ]; for (j = 0; j < strLength; j += 2) { code = data.charCodeAt(offset); bytes.push(String.fromCharCode(code & 0x00ff)); if (j !== strLength - 1) { bytes.push(String.fromCharCode(code >>> 8)); } offset++; } resultStr = bytes.join(''); } else { resultStr = data.slice(offset, offset + strLength); offset = (offset + strLength | 0); } this.result.push(resultStr); } this.offset = offset; }; LoadedStringListResult$SI.prototype = new LoadedStringListResult; /** * class LoadedStringListMapResult extends Object * @constructor */ function LoadedStringListMapResult() { } /** * @constructor * @param {!string} data * @param {!number} offset */ function LoadedStringListMapResult$SI(data, offset) { /** @type {!number} */ var length; /** @type {!number} */ var i; /** @type {LoadedStringResult} */ var keyResult; /** @type {LoadedStringListResult} */ var valueResult; /** @type {!number} */ var result$0; /** @type {!number} */ var offset$0; this.offset = 0; this.result = ({ }); result$0 = data.charCodeAt(offset) * 65536 + data.charCodeAt(offset + 1); length = result$0; offset += 2; for (i = 0; i < length; i++) { keyResult = new LoadedStringResult$SI(data, offset); offset$0 = keyResult.offset; valueResult = new LoadedStringListResult$SI(data, offset$0); this.result[keyResult.result] = valueResult.result; offset = valueResult.offset; } this.offset = offset; }; LoadedStringListMapResult$SI.prototype = new LoadedStringListMapResult; /** * class LoadedNumberListResult extends Object * @constructor */ function LoadedNumberListResult() { } /** * @constructor * @param {!string} data * @param {!number} offset */ function LoadedNumberListResult$SI(data, offset) { /** @type {!number} */ var resultLength; /** @type {!number} */ var originalOffset; /** @type {Array.} */ var result; /** @type {!number} */ var tag; /** @type {!number} */ var length; /** @type {!number} */ var i; /** @type {!number} */ var result$0; /** @type {!number} */ var value1$0; this.result = null; this.offset = 0; result$0 = data.charCodeAt(offset) * 65536 + data.charCodeAt(offset + 1); resultLength = result$0; originalOffset = offset; offset += 2; result = [ ]; while (result.length < resultLength) { tag = data.charCodeAt(offset++); if (tag >>> 15 === 1) { value1$0 = resultLength - result.length; length = (value1$0 <= 15 ? value1$0 : 15); for (i = 0; i < length; i++) { if (tag >>> i & 0x1) { result.push(Binary$load32bitNumber$SI(data, offset)); offset += 2; } else { result.push(0); } } } else { if (tag >>> 14 === 1) { length = tag - 0x4000 + 1; for (i = 0; i < length; i++) { result.push(Binary$load32bitNumber$SI(data, offset)); offset += 2; } } else { length = tag + 1; for (i = 0; i < length; i++) { result.push(0); } } } } this.result = result; this.offset = offset; }; LoadedNumberListResult$SI.prototype = new LoadedNumberListResult; /** * class CompressionReport extends Object * @constructor */ function CompressionReport() { } /** * @constructor */ function CompressionReport$() { this.source = 0; this.result = 0; }; CompressionReport$.prototype = new CompressionReport; /** * @param {CompressionReport} $this * @param {!number} source * @param {!number} result */ CompressionReport.add$LCompressionReport$II = function ($this, source, result) { $this.source += source; $this.result += result; }; var CompressionReport$add$LCompressionReport$II = CompressionReport.add$LCompressionReport$II; /** * @param {CompressionReport} $this * @return {!number} */ CompressionReport.rate$LCompressionReport$ = function ($this) { return (Math.round($this.result * 100.0 / $this.source) | 0); }; var CompressionReport$rate$LCompressionReport$ = CompressionReport.rate$LCompressionReport$; /** * class Query extends Object * @constructor */ function Query() { } /** * @constructor */ function Query$() { this.word = ''; this.or = false; this.not = false; this.raw = false; }; Query$.prototype = new Query; /** * @return {!string} */ Query.prototype.toString = function () { /** @type {Array.} */ var result; result = [ ]; if (this.or) { result.push("OR "); } if (this.not) { result.push("-"); } if (this.raw) { result.push('"', this.word, '"'); } else { result.push(this.word); } return result.join(''); }; /** * class QueryStringParser extends Object * @constructor */ function QueryStringParser() { } /** * @constructor */ function QueryStringParser$() { this.queries = [ ]; }; QueryStringParser$.prototype = new QueryStringParser; /** * @param {QueryStringParser} $this * @param {!string} queryString * @return {Array.} */ QueryStringParser.parse$LQueryStringParser$S = function ($this, queryString) { /** @type {!boolean} */ var nextOr; /** @type {!boolean} */ var nextNot; /** @type {!number} */ var currentWordStart; /** @type {!number} */ var status; /** @type {RegExp} */ var isSpace; /** @type {!number} */ var i; /** @type {!string} */ var ch; /** @type {!string} */ var word; /** @type {Query} */ var query; nextOr = false; nextNot = false; currentWordStart = 0; status = 0; isSpace = /[\s\u3000]/; for (i = 0; i < queryString.length; i++) { ch = queryString.charAt(i); switch (status) { case 0: if (! isSpace.test(ch)) { if (ch === '-') { nextNot = true; } else { if (ch === '"') { currentWordStart = i + 1; status = 2; } else { currentWordStart = i; status = 1; } } } else { nextNot = false; } break; case 1: if (isSpace.test(ch)) { word = queryString.slice(currentWordStart, i); if (word === 'OR') { nextOr = true; } else { query = new Query$(); query.word = word; query.or = nextOr; query.not = nextNot; $this.queries.push(query); nextOr = false; nextNot = false; } status = 0; } break; case 2: if (ch === '"') { word = queryString.slice(currentWordStart, i); query = new Query$(); query.word = word; query.or = nextOr; query.not = nextNot; query.raw = true; $this.queries.push(query); nextOr = false; nextNot = false; status = 0; } break; } } switch (status) { case 0: break; case 1: query = new Query$(); word = queryString.slice(currentWordStart, queryString.length); if (word !== 'OR') { query.word = word; query.or = nextOr; query.not = nextNot; $this.queries.push(query); } break; case 2: query = new Query$(); query.word = queryString.slice(currentWordStart, queryString.length); query.or = nextOr; query.not = nextNot; query.raw = true; $this.queries.push(query); break; } return $this.queries; }; var QueryStringParser$parse$LQueryStringParser$S = QueryStringParser.parse$LQueryStringParser$S; /** * @param {QueryStringParser} $this * @return {!string} */ QueryStringParser.highlight$LQueryStringParser$ = function ($this) { /** @type {Array.} */ var result; /** @type {!number} */ var i; /** @type {Query} */ var query; result = [ ]; for (i = 0; i < $this.queries.length; i++) { query = $this.queries[i]; if (! query.not) { result.push("highlight=" + $__jsx_encodeURIComponent(query.word)); } } return '?' + result.join('&'); }; var QueryStringParser$highlight$LQueryStringParser$ = QueryStringParser.highlight$LQueryStringParser$; /** * class Proposal extends Object * @constructor */ function Proposal() { } /** * @constructor * @param {!number} omit * @param {!number} expect */ function Proposal$II(omit, expect) { this.omit = omit; this.expect = expect; }; Proposal$II.prototype = new Proposal; /** * class Position extends Object * @constructor */ function Position() { } /** * @constructor * @param {!string} word * @param {!number} position * @param {!boolean} stemmed */ function Position$SIB(word, position, stemmed) { this.word = word; this.position = position; this.stemmed = stemmed; }; Position$SIB.prototype = new Position; /** * class SearchUnit extends Object * @constructor */ function SearchUnit() { } /** * @constructor * @param {!number} id */ function SearchUnit$I(id) { this.positions = ({ }); this.id = id; this._size = 0; this.score = 0; this.startPosition = -1; }; SearchUnit$I.prototype = new SearchUnit; /** * @param {SearchUnit} $this * @param {!string} word * @param {!number} position * @param {!boolean} stemmed */ SearchUnit.addPosition$LSearchUnit$SIB = function ($this, word, position, stemmed) { /** @type {Position} */ var positionObj; positionObj = $this.positions[position + ""]; if (! positionObj) { $this._size++; $this.positions[position + ""] = ({word: word, position: position, stemmed: stemmed}); } else { if (positionObj.word.length < word.length) { positionObj.word = word; } positionObj.stemmed = positionObj.stemmed && stemmed; } }; var SearchUnit$addPosition$LSearchUnit$SIB = SearchUnit.addPosition$LSearchUnit$SIB; /** * @param {SearchUnit} $this * @param {!number} position * @return {Position} */ SearchUnit.get$LSearchUnit$I = function ($this, position) { return $this.positions[position + ""]; }; var SearchUnit$get$LSearchUnit$I = SearchUnit.get$LSearchUnit$I; /** * @param {SearchUnit} $this * @return {!number} */ SearchUnit.size$LSearchUnit$ = function ($this) { return $this._size; }; var SearchUnit$size$LSearchUnit$ = SearchUnit.size$LSearchUnit$; /** * @param {SearchUnit} $this * @param {SearchUnit} rhs */ SearchUnit.merge$LSearchUnit$LSearchUnit$ = function ($this, rhs) { /** @type {!string} */ var position; /** @type {Position} */ var pos; for (position in rhs.positions) { pos = rhs.positions[position]; SearchUnit$addPosition$LSearchUnit$SIB($this, pos.word, pos.position, pos.stemmed); } }; var SearchUnit$merge$LSearchUnit$LSearchUnit$ = SearchUnit.merge$LSearchUnit$LSearchUnit$; /** * @param {SearchUnit} $this * @return {Array.} */ SearchUnit.getPositions$LSearchUnit$ = function ($this) { /** @type {Array.} */ var result; /** @type {!string} */ var pos; result = [ ]; for (pos in $this.positions) { result.push($this.positions[pos]); } result.sort((function (a, b) { return a.position - b.position; })); return result; }; var SearchUnit$getPositions$LSearchUnit$ = SearchUnit.getPositions$LSearchUnit$; /** * class SingleResult extends Object * @constructor */ function SingleResult() { } /** * @constructor */ function SingleResult$() { this.units = [ ]; this.unitIds = [ ]; this.or = false; this.not = false; this.searchWord = ''; }; SingleResult$.prototype = new SingleResult; /** * @constructor * @param {!string} searchWord * @param {!boolean} or * @param {!boolean} not */ function SingleResult$SBB(searchWord, or, not) { this.units = [ ]; this.unitIds = [ ]; this.or = or; this.not = not; this.searchWord = searchWord; }; SingleResult$SBB.prototype = new SingleResult; /** * @param {SingleResult} $this * @param {!number} unitId * @return {SearchUnit} */ SingleResult.getSearchUnit$LSingleResult$I = function ($this, unitId) { /** @type {!number} */ var existing; /** @type {SearchUnit} */ var result; existing = $this.unitIds.indexOf(unitId); if (existing === -1) { result = ({positions: ({ }), id: unitId, _size: 0, score: 0, startPosition: -1}); $this.units.push(result); $this.unitIds.push(unitId); } else { result = $this.units[existing]; } return result; }; var SingleResult$getSearchUnit$LSingleResult$I = SingleResult.getSearchUnit$LSingleResult$I; /** * @param {SingleResult} $this * @param {SingleResult} rhs * @return {SingleResult} */ SingleResult.merge$LSingleResult$LSingleResult$ = function ($this, rhs) { /** @type {SingleResult} */ var result; result = ({units: [ ], unitIds: [ ], or: false, not: false, searchWord: ''}); if (rhs.or) { SingleResult$_orMerge$LSingleResult$LSingleResult$LSingleResult$($this, result, rhs); } else { if (rhs.not) { SingleResult$_notMerge$LSingleResult$LSingleResult$LSingleResult$($this, result, rhs); } else { SingleResult$_andMerge$LSingleResult$LSingleResult$LSingleResult$($this, result, rhs); } } return result; }; var SingleResult$merge$LSingleResult$LSingleResult$ = SingleResult.merge$LSingleResult$LSingleResult$; /** * @param {SingleResult} $this * @return {!number} */ SingleResult.size$LSingleResult$ = function ($this) { return ($this.units.length | 0); }; var SingleResult$size$LSingleResult$ = SingleResult.size$LSingleResult$; /** * @param {SingleResult} $this * @param {SingleResult} result * @param {SingleResult} rhs */ SingleResult._andMerge$LSingleResult$LSingleResult$LSingleResult$ = function ($this, result, rhs) { /** @type {!number} */ var i; /** @type {undefined|!number} */ var id; /** @type {SearchUnit} */ var lhsSection; for (i = 0; i < $this.unitIds.length; i++) { id = $this.unitIds[i]; if (rhs.unitIds.indexOf(id) !== -1) { lhsSection = $this.units[i]; result.unitIds.push(id); result.units.push(lhsSection); } } }; var SingleResult$_andMerge$LSingleResult$LSingleResult$LSingleResult$ = SingleResult._andMerge$LSingleResult$LSingleResult$LSingleResult$; /** * @param {SingleResult} $this * @param {SingleResult} result * @param {SingleResult} rhs */ SingleResult._orMerge$LSingleResult$LSingleResult$LSingleResult$ = function ($this, result, rhs) { /** @type {!number} */ var i; /** @type {undefined|!number} */ var id; /** @type {SearchUnit} */ var rhsSection; /** @type {SearchUnit} */ var lhsSection; /** @type {Array.} */ var unitIds$0; /** @type {Array.} */ var units$0; result.unitIds = (unitIds$0 = $this.unitIds).slice(0, unitIds$0.length); result.units = (units$0 = $this.units).slice(0, units$0.length); for (i = 0; i < rhs.unitIds.length; i++) { id = rhs.unitIds[i]; rhsSection = rhs.units[i]; if (result.unitIds.indexOf(id) !== -1) { lhsSection = result.units[result.unitIds.indexOf(id)]; SearchUnit$merge$LSearchUnit$LSearchUnit$(lhsSection, rhsSection); } else { result.unitIds.push(id); result.units.push(rhsSection); } } }; var SingleResult$_orMerge$LSingleResult$LSingleResult$LSingleResult$ = SingleResult._orMerge$LSingleResult$LSingleResult$LSingleResult$; /** * @param {SingleResult} $this * @param {SingleResult} result * @param {SingleResult} rhs */ SingleResult._notMerge$LSingleResult$LSingleResult$LSingleResult$ = function ($this, result, rhs) { /** @type {!number} */ var i; /** @type {undefined|!number} */ var id; /** @type {SearchUnit} */ var lhsSection; for (i = 0; i < $this.unitIds.length; i++) { id = $this.unitIds[i]; if (rhs.unitIds.indexOf(id) === -1) { lhsSection = $this.units[i]; result.unitIds.push(id); result.units.push(lhsSection); } } }; var SingleResult$_notMerge$LSingleResult$LSingleResult$LSingleResult$ = SingleResult._notMerge$LSingleResult$LSingleResult$LSingleResult$; /** * class SearchSummary extends Object * @constructor */ function SearchSummary() { } /** * @constructor */ function SearchSummary$() { this.sourceResults = [ ]; this.result = null; this.oktavia = null; }; SearchSummary$.prototype = new SearchSummary; /** * @constructor * @param {Oktavia} oktavia */ function SearchSummary$LOktavia$(oktavia) { this.sourceResults = [ ]; this.result = null; this.oktavia = oktavia; }; SearchSummary$LOktavia$.prototype = new SearchSummary; /** * @param {SearchSummary} $this * @param {SingleResult} result */ SearchSummary.addQuery$LSearchSummary$LSingleResult$ = function ($this, result) { $this.sourceResults.push(result); }; var SearchSummary$addQuery$LSearchSummary$LSingleResult$ = SearchSummary.addQuery$LSearchSummary$LSingleResult$; /** * @param {SearchSummary} $this */ SearchSummary.mergeResult$LSearchSummary$ = function ($this) { $this.result = SearchSummary$mergeResult$LSearchSummary$ALSingleResult$($this, $this.sourceResults); }; var SearchSummary$mergeResult$LSearchSummary$ = SearchSummary.mergeResult$LSearchSummary$; /** * @param {SearchSummary} $this * @param {Array.} results * @return {SingleResult} */ SearchSummary.mergeResult$LSearchSummary$ALSingleResult$ = function ($this, results) { /** @type {SingleResult} */ var rhs; /** @type {!number} */ var i; /** @type {!number} */ var results$len$0; rhs = results[0]; for ((i = 1, results$len$0 = results.length); i < results$len$0; i++) { rhs = SingleResult$merge$LSingleResult$LSingleResult$(rhs, results[i]); } return rhs; }; var SearchSummary$mergeResult$LSearchSummary$ALSingleResult$ = SearchSummary.mergeResult$LSearchSummary$ALSingleResult$; /** * @param {SearchSummary} $this * @return {Array.} */ SearchSummary.getProposal$LSearchSummary$ = function ($this) { /** @type {Array.} */ var proposals; /** @type {!number} */ var i; /** @type {Array.} */ var tmpSource; /** @type {!number} */ var j; /** @type {SingleResult} */ var result; proposals = [ ]; for (i = 0; i < $this.sourceResults.length; i++) { tmpSource = [ ]; for (j = 0; j < $this.sourceResults.length; j++) { if (i !== j) { tmpSource.push($this.sourceResults[j]); } } result = SearchSummary$mergeResult$LSearchSummary$ALSingleResult$($this, tmpSource); proposals.push(({omit: i, expect: result.units.length})); } proposals.sort((function (a, b) { return b.expect - a.expect; })); return proposals; }; var SearchSummary$getProposal$LSearchSummary$ = SearchSummary.getProposal$LSearchSummary$; /** * @param {SearchSummary} $this * @return {Array.} */ SearchSummary.getSortedResult$LSearchSummary$ = function ($this) { /** @type {Array.} */ var result; /** @type {Array.} */ var units$0; result = (units$0 = $this.result.units).slice(0, units$0.length); result.sort((function (a, b) { return b.score - a.score; })); return result; }; var SearchSummary$getSortedResult$LSearchSummary$ = SearchSummary.getSortedResult$LSearchSummary$; /** * @param {SearchSummary} $this * @return {!number} */ SearchSummary.size$LSearchSummary$ = function ($this) { /** @type {SingleResult} */ var this$0; this$0 = $this.result; return (this$0.units.length | 0); }; var SearchSummary$size$LSearchSummary$ = SearchSummary.size$LSearchSummary$; /** * @param {SearchSummary} $this * @param {SingleResult} result */ SearchSummary.add$LSearchSummary$LSingleResult$ = function ($this, result) { $this.sourceResults.push(result); }; var SearchSummary$add$LSearchSummary$LSingleResult$ = SearchSummary.add$LSearchSummary$LSingleResult$; /** * class Style extends Object * @constructor */ function Style() { } /** * @constructor * @param {!string} mode */ function Style$S(mode) { this.styles = null; this.escapeHTML = false; switch (mode) { case 'console': this.styles = Style.console; break; case 'html': this.styles = Style.html; break; case 'ignore': this.styles = Style.ignore; break; default: this.styles = Style.ignore; break; } this.escapeHTML = mode === 'html'; }; Style$S.prototype = new Style; /** * @param {!string} source * @return {!string} */ Style.prototype.convert$S = function (source) { /** @type {_HTMLHandler} */ var handler; /** @type {SAXParser} */ var parser; handler = new _HTMLHandler$HASB(this.styles, this.escapeHTML); parser = new SAXParser$LSAXHandler$(handler); parser.parse$S(source); return handler.text.join(''); }; /** * class Stemmer * @constructor */ function Stemmer() { } Stemmer.prototype.$__jsx_implements_Stemmer = true; /** * @constructor */ function Stemmer$() { }; Stemmer$.prototype = new Stemmer; /** * class BaseStemmer extends Object * @constructor */ function BaseStemmer() { } $__jsx_merge_interface(BaseStemmer, Stemmer); /** * @constructor */ function BaseStemmer$() { /** @type {!string} */ var current$0; /** @type {!number} */ var cursor$0; /** @type {!number} */ var limit$0; this.cache = ({ }); current$0 = this.current = ""; cursor$0 = this.cursor = 0; limit$0 = this.limit = current$0.length; this.limit_backward = 0; this.bra = cursor$0; this.ket = limit$0; }; BaseStemmer$.prototype = new BaseStemmer; /** * @param {!string} value */ BaseStemmer.prototype.setCurrent$S = function (value) { /** @type {!string} */ var current$0; /** @type {!number} */ var cursor$0; /** @type {!number} */ var limit$0; current$0 = this.current = value; cursor$0 = this.cursor = 0; limit$0 = this.limit = current$0.length; this.limit_backward = 0; this.bra = cursor$0; this.ket = limit$0; }; /** * @return {!string} */ BaseStemmer.prototype.getCurrent$ = function () { return this.current; }; /** * @param {BaseStemmer} other */ BaseStemmer.prototype.copy_from$LBaseStemmer$ = function (other) { this.current = other.current; this.cursor = other.cursor; this.limit = other.limit; this.limit_backward = other.limit_backward; this.bra = other.bra; this.ket = other.ket; }; /** * @param {Array.} s * @param {!number} min * @param {!number} max * @return {!boolean} */ BaseStemmer.prototype.in_grouping$AIII = function (s, min, max) { /** @type {!number} */ var ch; if (this.cursor >= this.limit) { return false; } ch = this.current.charCodeAt(this.cursor); if (ch > max || ch < min) { return false; } ch -= min; if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) { return false; } this.cursor++; return true; }; /** * @param {Array.} s * @param {!number} min * @param {!number} max * @return {!boolean} */ BaseStemmer.prototype.in_grouping_b$AIII = function (s, min, max) { /** @type {!number} */ var ch; if (this.cursor <= this.limit_backward) { return false; } ch = this.current.charCodeAt(this.cursor - 1); if (ch > max || ch < min) { return false; } ch -= min; if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) { return false; } this.cursor--; return true; }; /** * @param {Array.} s * @param {!number} min * @param {!number} max * @return {!boolean} */ BaseStemmer.prototype.out_grouping$AIII = function (s, min, max) { /** @type {!number} */ var ch; if (this.cursor >= this.limit) { return false; } ch = this.current.charCodeAt(this.cursor); if (ch > max || ch < min) { this.cursor++; return true; } ch -= min; if ((s[ch >>> 3] & 0X1 << (ch & 0x7)) === 0) { this.cursor++; return true; } return false; }; /** * @param {Array.} s * @param {!number} min * @param {!number} max * @return {!boolean} */ BaseStemmer.prototype.out_grouping_b$AIII = function (s, min, max) { /** @type {!number} */ var ch; if (this.cursor <= this.limit_backward) { return false; } ch = this.current.charCodeAt(this.cursor - 1); if (ch > max || ch < min) { this.cursor--; return true; } ch -= min; if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) { this.cursor--; return true; } return false; }; /** * @param {!number} min * @param {!number} max * @return {!boolean} */ BaseStemmer.prototype.in_range$II = function (min, max) { /** @type {!number} */ var ch; if (this.cursor >= this.limit) { return false; } ch = this.current.charCodeAt(this.cursor); if (ch > max || ch < min) { return false; } this.cursor++; return true; }; /** * @param {!number} min * @param {!number} max * @return {!boolean} */ BaseStemmer.prototype.in_range_b$II = function (min, max) { /** @type {!number} */ var ch; if (this.cursor <= this.limit_backward) { return false; } ch = this.current.charCodeAt(this.cursor - 1); if (ch > max || ch < min) { return false; } this.cursor--; return true; }; /** * @param {!number} min * @param {!number} max * @return {!boolean} */ BaseStemmer.prototype.out_range$II = function (min, max) { /** @type {!number} */ var ch; if (this.cursor >= this.limit) { return false; } ch = this.current.charCodeAt(this.cursor); if (! (ch > max || ch < min)) { return false; } this.cursor++; return true; }; /** * @param {!number} min * @param {!number} max * @return {!boolean} */ BaseStemmer.prototype.out_range_b$II = function (min, max) { /** @type {!number} */ var ch; if (this.cursor <= this.limit_backward) { return false; } ch = this.current.charCodeAt(this.cursor - 1); if (! (ch > max || ch < min)) { return false; } this.cursor--; return true; }; /** * @param {!number} s_size * @param {!string} s * @return {!boolean} */ BaseStemmer.prototype.eq_s$IS = function (s_size, s) { /** @type {!number} */ var cursor$0; if (this.limit - this.cursor < s_size) { return false; } if (this.current.slice(cursor$0 = this.cursor, cursor$0 + s_size) !== s) { return false; } this.cursor += s_size; return true; }; /** * @param {!number} s_size * @param {!string} s * @return {!boolean} */ BaseStemmer.prototype.eq_s_b$IS = function (s_size, s) { /** @type {!number} */ var cursor$0; if (this.cursor - this.limit_backward < s_size) { return false; } if (this.current.slice((cursor$0 = this.cursor) - s_size, cursor$0) !== s) { return false; } this.cursor -= s_size; return true; }; /** * @param {!string} s * @return {!boolean} */ BaseStemmer.prototype.eq_v$S = function (s) { return this.eq_s$IS(s.length, s); }; /** * @param {!string} s * @return {!boolean} */ BaseStemmer.prototype.eq_v_b$S = function (s) { return this.eq_s_b$IS(s.length, s); }; /** * @param {Array.} v * @param {!number} v_size * @return {!number} */ BaseStemmer.prototype.find_among$ALAmong$I = function (v, v_size) { /** @type {!number} */ var i; /** @type {!number} */ var j; /** @type {!number} */ var c; /** @type {!number} */ var l; /** @type {!number} */ var common_i; /** @type {!number} */ var common_j; /** @type {!boolean} */ var first_key_inspected; /** @type {!number} */ var k; /** @type {!number} */ var diff; /** @type {!number} */ var common; /** @type {Among} */ var w; /** @type {!number} */ var i2; /** @type {!boolean} */ var res; i = 0; j = v_size; c = this.cursor; l = this.limit; common_i = 0; common_j = 0; first_key_inspected = false; while (true) { k = i + (j - i >>> 1); diff = 0; common = (common_i < common_j ? common_i : common_j); w = v[k]; for (i2 = common; i2 < w.s_size; i2++) { if (c + common === l) { diff = -1; break; } diff = this.current.charCodeAt(c + common) - w.s.charCodeAt(i2); if (diff !== 0) { break; } common++; } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0) { break; } if (j === i) { break; } if (first_key_inspected) { break; } first_key_inspected = true; } } while (true) { w = v[i]; if (common_i >= w.s_size) { this.cursor = (c + w.s_size | 0); if (w.method == null) { return w.result; } res = w.method(w.instance); this.cursor = (c + w.s_size | 0); if (res) { return w.result; } } i = w.substring_i; if (i < 0) { return 0; } } return -1; }; /** * @param {Array.} v * @param {!number} v_size * @return {!number} */ BaseStemmer.prototype.find_among_b$ALAmong$I = function (v, v_size) { /** @type {!number} */ var i; /** @type {!number} */ var j; /** @type {!number} */ var c; /** @type {!number} */ var lb; /** @type {!number} */ var common_i; /** @type {!number} */ var common_j; /** @type {!boolean} */ var first_key_inspected; /** @type {!number} */ var k; /** @type {!number} */ var diff; /** @type {!number} */ var common; /** @type {Among} */ var w; /** @type {!number} */ var i2; /** @type {!boolean} */ var res; i = 0; j = v_size; c = this.cursor; lb = this.limit_backward; common_i = 0; common_j = 0; first_key_inspected = false; while (true) { k = i + (j - i >> 1); diff = 0; common = (common_i < common_j ? common_i : common_j); w = v[k]; for (i2 = w.s_size - 1 - common; i2 >= 0; i2--) { if (c - common === lb) { diff = -1; break; } diff = this.current.charCodeAt(c - 1 - common) - w.s.charCodeAt(i2); if (diff !== 0) { break; } common++; } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0) { break; } if (j === i) { break; } if (first_key_inspected) { break; } first_key_inspected = true; } } while (true) { w = v[i]; if (common_i >= w.s_size) { this.cursor = (c - w.s_size | 0); if (w.method == null) { return w.result; } res = w.method(this); this.cursor = (c - w.s_size | 0); if (res) { return w.result; } } i = w.substring_i; if (i < 0) { return 0; } } return -1; }; /** * @param {!number} c_bra * @param {!number} c_ket * @param {!string} s * @return {!number} */ BaseStemmer.prototype.replace_s$IIS = function (c_bra, c_ket, s) { /** @type {!number} */ var adjustment; adjustment = s.length - (c_ket - c_bra); this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket); this.limit += (adjustment | 0); if (this.cursor >= c_ket) { this.cursor += (adjustment | 0); } else { if (this.cursor > c_bra) { this.cursor = c_bra; } } return (adjustment | 0); }; /** * @return {!boolean} */ BaseStemmer.prototype.slice_check$ = function () { /** @type {!number} */ var bra$0; /** @type {!number} */ var ket$0; /** @type {!number} */ var limit$0; return ((bra$0 = this.bra) < 0 || bra$0 > (ket$0 = this.ket) || ket$0 > (limit$0 = this.limit) || limit$0 > this.current.length ? false : true); }; /** * @param {!string} s * @return {!boolean} */ BaseStemmer.prototype.slice_from$S = function (s) { /** @type {!boolean} */ var result; /** @type {!number} */ var bra$0; /** @type {!number} */ var ket$0; /** @type {!number} */ var limit$0; result = false; if ((bra$0 = this.bra) < 0 || bra$0 > (ket$0 = this.ket) || ket$0 > (limit$0 = this.limit) || limit$0 > this.current.length ? false : true) { this.replace_s$IIS(this.bra, this.ket, s); result = true; } return result; }; /** * @return {!boolean} */ BaseStemmer.prototype.slice_del$ = function () { return this.slice_from$S(""); }; /** * @param {!number} c_bra * @param {!number} c_ket * @param {!string} s */ BaseStemmer.prototype.insert$IIS = function (c_bra, c_ket, s) { /** @type {!number} */ var adjustment; adjustment = this.replace_s$IIS(c_bra, c_ket, s); if (c_bra <= this.bra) { this.bra += (adjustment | 0); } if (c_bra <= this.ket) { this.ket += (adjustment | 0); } }; /** * @param {!string} s * @return {!string} */ BaseStemmer.prototype.slice_to$S = function (s) { /** @type {!string} */ var result; /** @type {!number} */ var bra$0; /** @type {!number} */ var ket$0; /** @type {!number} */ var limit$0; result = ''; if ((bra$0 = this.bra) < 0 || bra$0 > (ket$0 = this.ket) || ket$0 > (limit$0 = this.limit) || limit$0 > this.current.length ? false : true) { result = this.current.slice(this.bra, this.ket); } return result; }; /** * @param {!string} s * @return {!string} */ BaseStemmer.prototype.assign_to$S = function (s) { return this.current.slice(0, this.limit); }; /** * @return {!boolean} */ BaseStemmer.prototype.stem$ = function () { return false; }; /** * @param {!string} word * @return {!string} */ BaseStemmer.prototype.stemWord$S = function (word) { /** @type {undefined|!string} */ var result; /** @type {!string} */ var current$0; /** @type {!number} */ var cursor$0; /** @type {!number} */ var limit$0; result = this.cache['.' + word]; if (result == null) { current$0 = this.current = word; cursor$0 = this.cursor = 0; limit$0 = this.limit = current$0.length; this.limit_backward = 0; this.bra = cursor$0; this.ket = limit$0; this.stem$(); result = this.current; this.cache['.' + word] = result; } return result; }; /** * @param {Array.} words * @return {Array.} */ BaseStemmer.prototype.stemWords$AS = function (words) { /** @type {Array.} */ var results; /** @type {!number} */ var i; /** @type {undefined|!string} */ var word; /** @type {undefined|!string} */ var result; /** @type {!string} */ var current$0; /** @type {!number} */ var cursor$0; /** @type {!number} */ var limit$0; results = [ ]; for (i = 0; i < words.length; i++) { word = words[i]; result = this.cache['.' + word]; if (result == null) { current$0 = this.current = word; cursor$0 = this.cursor = 0; limit$0 = this.limit = current$0.length; this.limit_backward = 0; this.bra = cursor$0; this.ket = limit$0; this.stem$(); result = this.current; this.cache['.' + word] = result; } results.push(result); } return results; }; /** * class GermanStemmer extends BaseStemmer * @constructor */ function GermanStemmer() { } GermanStemmer.prototype = new BaseStemmer; /** * @constructor */ function GermanStemmer$() { BaseStemmer$.call(this); this.I_x = 0; this.I_p2 = 0; this.I_p1 = 0; }; GermanStemmer$.prototype = new GermanStemmer; /** * @param {GermanStemmer} other */ GermanStemmer.prototype.copy_from$LGermanStemmer$ = function (other) { this.I_x = other.I_x; this.I_p2 = other.I_p2; this.I_p1 = other.I_p1; BaseStemmer.prototype.copy_from$LBaseStemmer$.call(this, other); }; /** * @return {!boolean} */ GermanStemmer.prototype.r_prelude$ = function () { /** @type {!number} */ var v_1; /** @type {!number} */ var v_2; /** @type {!number} */ var v_3; /** @type {!number} */ var v_4; /** @type {!number} */ var v_5; /** @type {!number} */ var v_6; /** @type {!boolean} */ var lab1; /** @type {!boolean} */ var lab2; /** @type {!boolean} */ var lab3; /** @type {!boolean} */ var lab5; /** @type {!boolean} */ var lab7; /** @type {!boolean} */ var lab8; /** @type {!boolean} */ var lab9; /** @type {!number} */ var cursor$0; /** @type {!number} */ var cursor$1; v_1 = this.cursor; replab0: while (true) { v_2 = this.cursor; lab1 = true; lab1: while (lab1 === true) { lab1 = false; lab2 = true; lab2: while (lab2 === true) { lab2 = false; v_3 = this.cursor; lab3 = true; lab3: while (lab3 === true) { lab3 = false; this.bra = this.cursor; if (! this.eq_s$IS(1, "\u00DF")) { break lab3; } this.ket = this.cursor; if (! this.slice_from$S("ss")) { return false; } break lab2; } cursor$0 = this.cursor = v_3; if (cursor$0 >= this.limit) { break lab1; } this.cursor++; } continue replab0; } this.cursor = v_2; break replab0; } this.cursor = v_1; replab4: while (true) { v_4 = this.cursor; lab5 = true; lab5: while (lab5 === true) { lab5 = false; golab6: while (true) { v_5 = this.cursor; lab7 = true; lab7: while (lab7 === true) { lab7 = false; if (! this.in_grouping$AIII(GermanStemmer.g_v, 97, 252)) { break lab7; } this.bra = this.cursor; lab8 = true; lab8: while (lab8 === true) { lab8 = false; v_6 = this.cursor; lab9 = true; lab9: while (lab9 === true) { lab9 = false; if (! this.eq_s$IS(1, "u")) { break lab9; } this.ket = this.cursor; if (! this.in_grouping$AIII(GermanStemmer.g_v, 97, 252)) { break lab9; } if (! this.slice_from$S("U")) { return false; } break lab8; } this.cursor = v_6; if (! this.eq_s$IS(1, "y")) { break lab7; } this.ket = this.cursor; if (! this.in_grouping$AIII(GermanStemmer.g_v, 97, 252)) { break lab7; } if (! this.slice_from$S("Y")) { return false; } } this.cursor = v_5; break golab6; } cursor$1 = this.cursor = v_5; if (cursor$1 >= this.limit) { break lab5; } this.cursor++; } continue replab4; } this.cursor = v_4; break replab4; } return true; }; /** * @return {!boolean} */ GermanStemmer.prototype.r_mark_regions$ = function () { /** @type {!number} */ var v_1; /** @type {!number} */ var c; /** @type {!boolean} */ var lab1; /** @type {!boolean} */ var lab3; /** @type {!boolean} */ var lab4; /** @type {!boolean} */ var lab6; /** @type {!boolean} */ var lab8; /** @type {!number} */ var limit$0; /** @type {!number} */ var cursor$0; /** @type {!number} */ var cursor$1; this.I_p1 = limit$0 = this.limit; this.I_p2 = limit$0; v_1 = cursor$0 = this.cursor; c = (cursor$0 + 3 | 0); if (0 > c || c > limit$0) { return false; } cursor$1 = this.cursor = c; this.I_x = cursor$1; this.cursor = v_1; golab0: while (true) { lab1 = true; lab1: while (lab1 === true) { lab1 = false; if (! this.in_grouping$AIII(GermanStemmer.g_v, 97, 252)) { break lab1; } break golab0; } if (this.cursor >= this.limit) { return false; } this.cursor++; } golab2: while (true) { lab3 = true; lab3: while (lab3 === true) { lab3 = false; if (! this.out_grouping$AIII(GermanStemmer.g_v, 97, 252)) { break lab3; } break golab2; } if (this.cursor >= this.limit) { return false; } this.cursor++; } this.I_p1 = this.cursor; lab4 = true; lab4: while (lab4 === true) { lab4 = false; if (! (this.I_p1 < this.I_x)) { break lab4; } this.I_p1 = this.I_x; } golab5: while (true) { lab6 = true; lab6: while (lab6 === true) { lab6 = false; if (! this.in_grouping$AIII(GermanStemmer.g_v, 97, 252)) { break lab6; } break golab5; } if (this.cursor >= this.limit) { return false; } this.cursor++; } golab7: while (true) { lab8 = true; lab8: while (lab8 === true) { lab8 = false; if (! this.out_grouping$AIII(GermanStemmer.g_v, 97, 252)) { break lab8; } break golab7; } if (this.cursor >= this.limit) { return false; } this.cursor++; } this.I_p2 = this.cursor; return true; }; /** * @return {!boolean} */ GermanStemmer.prototype.r_postlude$ = function () { /** @type {!number} */ var among_var; /** @type {!number} */ var v_1; /** @type {!boolean} */ var lab1; replab0: while (true) { v_1 = this.cursor; lab1 = true; lab1: while (lab1 === true) { lab1 = false; this.bra = this.cursor; among_var = this.find_among$ALAmong$I(GermanStemmer.a_0, 6); if (among_var === 0) { break lab1; } this.ket = this.cursor; switch (among_var) { case 0: break lab1; case 1: if (! this.slice_from$S("y")) { return false; } break; case 2: if (! this.slice_from$S("u")) { return false; } break; case 3: if (! this.slice_from$S("a")) { return false; } break; case 4: if (! this.slice_from$S("o")) { return false; } break; case 5: if (! this.slice_from$S("u")) { return false; } break; case 6: if (this.cursor >= this.limit) { break lab1; } this.cursor++; break; } continue replab0; } this.cursor = v_1; break replab0; } return true; }; /** * @return {!boolean} */ GermanStemmer.prototype.r_R1$ = function () { return (! (this.I_p1 <= this.cursor) ? false : true); }; /** * @return {!boolean} */ GermanStemmer.prototype.r_R2$ = function () { return (! (this.I_p2 <= this.cursor) ? false : true); }; /** * @return {!boolean} */ GermanStemmer.prototype.r_standard_suffix$ = function () { /** @type {!number} */ var among_var; /** @type {!number} */ var v_1; /** @type {!number} */ var v_2; /** @type {!number} */ var v_3; /** @type {!number} */ var v_4; /** @type {!number} */ var v_5; /** @type {!number} */ var v_6; /** @type {!number} */ var v_7; /** @type {!number} */ var v_8; /** @type {!number} */ var v_9; /** @type {!number} */ var v_10; /** @type {!boolean} */ var lab0; /** @type {!boolean} */ var lab1; /** @type {!boolean} */ var lab2; /** @type {!number} */ var c; /** @type {!boolean} */ var lab3; /** @type {!boolean} */ var lab4; /** @type {!boolean} */ var lab5; /** @type {!boolean} */ var lab6; /** @type {!boolean} */ var lab7; /** @type {!boolean} */ var lab8; /** @type {!boolean} */ var lab9; /** @type {!boolean} */ var lab10; /** @type {!number} */ var cursor$0; /** @type {!number} */ var cursor$1; /** @type {!number} */ var limit$0; /** @type {!number} */ var cursor$2; /** @type {!number} */ var cursor$3; /** @type {!number} */ var cursor$4; /** @type {!number} */ var cursor$5; /** @type {!number} */ var cursor$6; /** @type {!number} */ var cursor$7; /** @type {!number} */ var limit$1; /** @type {!number} */ var cursor$8; v_1 = this.limit - this.cursor; lab0 = true; lab0: while (lab0 === true) { lab0 = false; this.ket = this.cursor; among_var = this.find_among_b$ALAmong$I(GermanStemmer.a_1, 7); if (among_var === 0) { break lab0; } this.bra = cursor$0 = this.cursor; if (! (! (this.I_p1 <= cursor$0) ? false : true)) { break lab0; } switch (among_var) { case 0: break lab0; case 1: if (! this.slice_from$S("")) { return false; } break; case 2: if (! this.slice_from$S("")) { return false; } v_2 = this.limit - this.cursor; lab1 = true; lab1: while (lab1 === true) { lab1 = false; this.ket = this.cursor; if (! this.eq_s_b$IS(1, "s")) { this.cursor = this.limit - v_2; break lab1; } this.bra = this.cursor; if (! this.eq_s_b$IS(3, "nis")) { this.cursor = this.limit - v_2; break lab1; } if (! this.slice_from$S("")) { return false; } } break; case 3: if (! this.in_grouping_b$AIII(GermanStemmer.g_s_ending, 98, 116)) { break lab0; } if (! this.slice_from$S("")) { return false; } break; } } cursor$2 = this.cursor = (limit$0 = this.limit) - v_1; v_3 = limit$0 - cursor$2; lab2 = true; lab2: while (lab2 === true) { lab2 = false; this.ket = this.cursor; among_var = this.find_among_b$ALAmong$I(GermanStemmer.a_2, 4); if (among_var === 0) { break lab2; } this.bra = cursor$1 = this.cursor; if (! (! (this.I_p1 <= cursor$1) ? false : true)) { break lab2; } switch (among_var) { case 0: break lab2; case 1: if (! this.slice_from$S("")) { return false; } break; case 2: if (! this.in_grouping_b$AIII(GermanStemmer.g_st_ending, 98, 116)) { break lab2; } c = (this.cursor - 3 | 0); if (this.limit_backward > c || c > this.limit) { break lab2; } this.cursor = c; if (! this.slice_from$S("")) { return false; } break; } } cursor$8 = this.cursor = (limit$1 = this.limit) - v_3; v_4 = limit$1 - cursor$8; lab3 = true; lab3: while (lab3 === true) { lab3 = false; this.ket = this.cursor; among_var = this.find_among_b$ALAmong$I(GermanStemmer.a_4, 8); if (among_var === 0) { break lab3; } this.bra = cursor$3 = this.cursor; if (! (! (this.I_p2 <= cursor$3) ? false : true)) { break lab3; } switch (among_var) { case 0: break lab3; case 1: if (! this.slice_from$S("")) { return false; } v_5 = this.limit - this.cursor; lab4 = true; lab4: while (lab4 === true) { lab4 = false; this.ket = this.cursor; if (! this.eq_s_b$IS(2, "ig")) { this.cursor = this.limit - v_5; break lab4; } this.bra = cursor$4 = this.cursor; v_6 = this.limit - cursor$4; lab5 = true; lab5: while (lab5 === true) { lab5 = false; if (! this.eq_s_b$IS(1, "e")) { break lab5; } this.cursor = this.limit - v_5; break lab4; } cursor$5 = this.cursor = this.limit - v_6; if (! (! (this.I_p2 <= cursor$5) ? false : true)) { this.cursor = this.limit - v_5; break lab4; } if (! this.slice_from$S("")) { return false; } } break; case 2: v_7 = this.limit - this.cursor; lab6 = true; lab6: while (lab6 === true) { lab6 = false; if (! this.eq_s_b$IS(1, "e")) { break lab6; } break lab3; } this.cursor = this.limit - v_7; if (! this.slice_from$S("")) { return false; } break; case 3: if (! this.slice_from$S("")) { return false; } v_8 = this.limit - this.cursor; lab7 = true; lab7: while (lab7 === true) { lab7 = false; this.ket = this.cursor; lab8 = true; lab8: while (lab8 === true) { lab8 = false; v_9 = this.limit - this.cursor; lab9 = true; lab9: while (lab9 === true) { lab9 = false; if (! this.eq_s_b$IS(2, "er")) { break lab9; } break lab8; } this.cursor = this.limit - v_9; if (! this.eq_s_b$IS(2, "en")) { this.cursor = this.limit - v_8; break lab7; } } this.bra = cursor$6 = this.cursor; if (! (! (this.I_p1 <= cursor$6) ? false : true)) { this.cursor = this.limit - v_8; break lab7; } if (! this.slice_from$S("")) { return false; } } break; case 4: if (! this.slice_from$S("")) { return false; } v_10 = this.limit - this.cursor; lab10 = true; lab10: while (lab10 === true) { lab10 = false; this.ket = this.cursor; among_var = this.find_among_b$ALAmong$I(GermanStemmer.a_3, 2); if (among_var === 0) { this.cursor = this.limit - v_10; break lab10; } this.bra = cursor$7 = this.cursor; if (! (! (this.I_p2 <= cursor$7) ? false : true)) { this.cursor = this.limit - v_10; break lab10; } switch (among_var) { case 0: this.cursor = this.limit - v_10; break lab10; case 1: if (! this.slice_from$S("")) { return false; } break; } } break; } } this.cursor = this.limit - v_4; return true; }; /** * @return {!boolean} */ GermanStemmer.prototype.stem$ = function () { /** @type {!number} */ var v_1; /** @type {!number} */ var v_2; /** @type {!number} */ var v_4; /** @type {!boolean} */ var lab0; /** @type {!boolean} */ var lab1; /** @type {!boolean} */ var lab2; /** @type {!boolean} */ var lab3; /** @type {!number} */ var cursor$0; /** @type {!number} */ var cursor$1; /** @type {!number} */ var cursor$2; v_1 = this.cursor; lab0 = true; lab0: while (lab0 === true) { lab0 = false; if (! this.r_prelude$()) { break lab0; } } cursor$0 = this.cursor = v_1; v_2 = cursor$0; lab1 = true; lab1: while (lab1 === true) { lab1 = false; if (! this.r_mark_regions$()) { break lab1; } } cursor$1 = this.cursor = v_2; this.limit_backward = cursor$1; this.cursor = this.limit; lab2 = true; lab2: while (lab2 === true) { lab2 = false; if (! this.r_standard_suffix$()) { break lab2; } } cursor$2 = this.cursor = this.limit_backward; v_4 = cursor$2; lab3 = true; lab3: while (lab3 === true) { lab3 = false; if (! this.r_postlude$()) { break lab3; } } this.cursor = v_4; return true; }; /** * @param {*} o * @return {!boolean} */ GermanStemmer.prototype.equals$X = function (o) { return o instanceof GermanStemmer; }; /** * @return {!number} */ GermanStemmer.prototype.hashCode$ = function () { /** @type {!string} */ var classname; /** @type {!number} */ var hash; /** @type {!number} */ var i; /** @type {!number} */ var char; classname = "GermanStemmer"; hash = 0; if ("GermanStemmer".length === 0) { return (hash | 0); } for (i = 0; i < classname.length; i++) { char = classname.charCodeAt(i); hash = (hash << 5) - hash + char; hash = hash & hash; } return (hash | 0); }; /** * class Among extends Object * @constructor */ function Among() { } /** * @constructor * @param {!string} s * @param {!number} substring_i * @param {!number} result */ function Among$SII(s, substring_i, result) { this.s_size = s.length; this.s = s; this.substring_i = substring_i; this.result = result; this.method = null; this.instance = null; }; Among$SII.prototype = new Among; /** * @constructor * @param {!string} s * @param {!number} substring_i * @param {!number} result * @param {*} method * @param {BaseStemmer} instance */ function Among$SIIF$LBaseStemmer$B$LBaseStemmer$(s, substring_i, result, method, instance) { this.s_size = s.length; this.s = s; this.substring_i = substring_i; this.result = result; this.method = method; this.instance = instance; }; Among$SIIF$LBaseStemmer$B$LBaseStemmer$.prototype = new Among; /** * class Metadata extends Object * @constructor */ function Metadata() { } /** * @constructor * @param {Oktavia} parent */ function Metadata$LOktavia$(parent) { this._parent = parent; this._bitVector = new BitVector$(); }; Metadata$LOktavia$.prototype = new Metadata; /** * @return {!number} */ Metadata.prototype._size$ = function () { /** @type {BitVector} */ var this$0; /** @type {!number} */ var i$0; /** @type {BitVector} */ var _bitVector$0; this$0 = _bitVector$0 = this._bitVector; i$0 = _bitVector$0._size; return this$0.rank$IB(i$0, true); }; /** * @param {!number} index * @return {!string} */ Metadata.prototype.getContent$I = function (index) { /** @type {!number} */ var startPosition; /** @type {!number} */ var length; if (index < 0 || this._size$() <= index) { throw new Error("Section.getContent() : range error " + (index + "")); } startPosition = 0; if (index > 0) { startPosition = this._bitVector.select$I(index - 1) + 1; } length = this._bitVector.select$I(index) - startPosition + 1; return this._parent._getSubstring$II(startPosition, length); }; /** * @param {!number} index * @return {!number} */ Metadata.prototype.getStartPosition$I = function (index) { /** @type {!number} */ var startPosition; if (index < 0 || this._size$() <= index) { throw new Error("Section.getContent() : range error " + (index + "")); } startPosition = 0; if (index > 0) { startPosition = this._bitVector.select$I(index - 1) + 1; } return (startPosition | 0); }; /** * @param {SingleResult} result * @param {Array.} positions * @param {!string} word * @param {!boolean} stemmed */ Metadata.prototype.grouping$LSingleResult$AISB = function (result, positions, word, stemmed) { }; /** * @param {!number} index * @return {!string} */ Metadata.prototype.getInformation$I = function (index) { return ''; }; /** */ Metadata.prototype._build$ = function () { this._bitVector.build$(); }; /** * @param {!string} name * @param {!string} data * @param {!number} offset * @return {!number} */ Metadata.prototype._load$SSI = function (name, data, offset) { offset = this._bitVector.load$SI(data, offset); this._parent._metadataLabels.push(name); this._parent._metadatas[name] = this; return offset; }; /** * @return {!string} */ Metadata.prototype._dump$ = function () { /** @type {BitVector} */ var this$0; /** @type {Array.} */ var contents$0; this$0 = this._bitVector; contents$0 = [ ]; contents$0.push(Binary$dump32bitNumber$N(this$0._size)); contents$0.push(Binary$dump32bitNumberList$AN(this$0._v)); return contents$0.join(''); }; /** * @param {CompressionReport} report * @return {!string} */ Metadata.prototype._dump$LCompressionReport$ = function (report) { /** @type {BitVector} */ var this$0; /** @type {Array.} */ var contents$0; this$0 = this._bitVector; contents$0 = [ ]; contents$0.push(Binary$dump32bitNumber$N(this$0._size)); CompressionReport$add$LCompressionReport$II(report, 2, 2); contents$0.push(Binary$dump32bitNumberList$ANLCompressionReport$(this$0._v, report)); return contents$0.join(''); }; /** * class Section extends Metadata * @constructor */ function Section() { } Section.prototype = new Metadata; /** * @constructor * @param {Oktavia} parent */ function Section$LOktavia$(parent) { this._parent = parent; this._bitVector = new BitVector$(); this._names = [ ]; }; Section$LOktavia$.prototype = new Section; /** * @param {!string} name */ Section.prototype.setTail$S = function (name) { /** @type {!number} */ var index$0; /** @type {Oktavia} */ var this$0; /** @type {FMIndex} */ var this$0$0; this$0 = this._parent; this$0$0 = this$0._fmindex; index$0 = this$0$0._substr.length; this._names.push(name); this._bitVector.set$I(index$0 - 1); }; /** * @param {!string} name * @param {!number} index */ Section.prototype.setTail$SI = function (name, index) { this._names.push(name); this._bitVector.set$I(index - 1); }; /** * @return {!number} */ Section.prototype.size$ = function () { return (this._names.length | 0); }; /** * @param {!number} position * @return {!number} */ Section.prototype.getSectionIndex$I = function (position) { /** @type {BitVector} */ var this$0; if (position < 0 || this._bitVector.size$() <= position) { throw new Error("Section.getSectionIndex() : range error " + (position + "")); } this$0 = this._bitVector; return this$0.rank$IB(position, true); }; /** * @param {!number} index * @return {!string} */ Section.prototype.getName$I = function (index) { if (index < 0 || this._names.length <= index) { throw new Error("Section.getName() : range error"); } return this._names[index]; }; /** * @param {SingleResult} result * @param {Array.} positions * @param {!string} word * @param {!boolean} stemmed */ Section.prototype.grouping$LSingleResult$AISB = function (result, positions, word, stemmed) { /** @type {!number} */ var i; /** @type {undefined|!number} */ var position; /** @type {!number} */ var index; /** @type {SearchUnit} */ var unit; for (i = 0; i < positions.length; i++) { position = positions[i]; index = this.getSectionIndex$I(position); unit = SingleResult$getSearchUnit$LSingleResult$I(result, index); if (unit.startPosition < 0) { unit.startPosition = this.getStartPosition$I(index); } SearchUnit$addPosition$LSearchUnit$SIB(unit, word, position - unit.startPosition, stemmed); } }; /** * @param {!number} index * @return {!string} */ Section.prototype.getInformation$I = function (index) { return this.getName$I(index); }; /** * @param {Oktavia} parent * @param {!string} name * @param {!string} data * @param {!number} offset * @return {!number} */ Section._load$LOktavia$SSI = function (parent, name, data, offset) { /** @type {LoadedStringListResult} */ var strs; /** @type {Section} */ var section; /** @type {!number} */ var offset$0; strs = new LoadedStringListResult$SI(data, offset); section = new Section$LOktavia$(parent); section._names = strs.result; offset$0 = strs.offset; offset$0 = section._bitVector.load$SI(data, offset$0); section._parent._metadataLabels.push(name); section._parent._metadatas[name] = section; return offset$0; }; var Section$_load$LOktavia$SSI = Section._load$LOktavia$SSI; /** * @return {!string} */ Section.prototype._dump$ = function () { return [ Binary$dump16bitNumber$I(0), Binary$dumpStringList$AS(this._names), Metadata.prototype._dump$.call(this) ].join(''); }; /** * @param {CompressionReport} report * @return {!string} */ Section.prototype._dump$LCompressionReport$ = function (report) { CompressionReport$add$LCompressionReport$II(report, 1, 1); return [ Binary$dump16bitNumber$I(0), Binary$dumpStringList$ASLCompressionReport$(this._names, report), Metadata.prototype._dump$LCompressionReport$.call(this, report) ].join(''); }; /** * class Splitter extends Metadata * @constructor */ function Splitter() { } Splitter.prototype = new Metadata; /** * @constructor * @param {Oktavia} parent */ function Splitter$LOktavia$(parent) { this._parent = parent; this._bitVector = new BitVector$(); this.name = null; }; Splitter$LOktavia$.prototype = new Splitter; /** * @constructor * @param {Oktavia} parent * @param {!string} name */ function Splitter$LOktavia$S(parent, name) { this._parent = parent; this._bitVector = new BitVector$(); this.name = name; }; Splitter$LOktavia$S.prototype = new Splitter; /** * @return {!number} */ Splitter.prototype.size$ = function () { /** @type {BitVector} */ var this$0$0; /** @type {!number} */ var i$0$0; /** @type {BitVector} */ var _bitVector$0; this$0$0 = _bitVector$0 = this._bitVector; i$0$0 = _bitVector$0._size; return this$0$0.rank$IB(i$0$0, true); }; /** */ Splitter.prototype.split$ = function () { /** @type {!number} */ var index$0; /** @type {Oktavia} */ var this$0; /** @type {FMIndex} */ var this$0$0; this$0 = this._parent; this$0$0 = this$0._fmindex; index$0 = this$0$0._substr.length; this._bitVector.set$I(index$0 - 1); }; /** * @param {!number} index */ Splitter.prototype.split$I = function (index) { this._bitVector.set$I(index - 1); }; /** * @param {!number} position * @return {!number} */ Splitter.prototype.getIndex$I = function (position) { /** @type {BitVector} */ var this$0; if (position < 0 || this._bitVector.size$() <= position) { throw new Error("Section.getSectionIndex() : range error"); } this$0 = this._bitVector; return this$0.rank$IB(position, true); }; /** * @param {SingleResult} result * @param {Array.} positions * @param {!string} word * @param {!boolean} stemmed */ Splitter.prototype.grouping$LSingleResult$AISB = function (result, positions, word, stemmed) { /** @type {!number} */ var i; /** @type {undefined|!number} */ var position; /** @type {!number} */ var index; /** @type {SearchUnit} */ var unit; for (i = 0; i < positions.length; i++) { position = positions[i]; index = this.getIndex$I(position); unit = SingleResult$getSearchUnit$LSingleResult$I(result, index); if (unit.startPosition < 0) { unit.startPosition = this.getStartPosition$I(index); } SearchUnit$addPosition$LSearchUnit$SIB(unit, word, position - unit.startPosition, stemmed); } }; /** * @param {!number} index * @return {!string} */ Splitter.prototype.getInformation$I = function (index) { return (this.name != null ? this.name + (index + 1 + "") : ''); }; /** * @param {Oktavia} parent * @param {!string} name * @param {!string} data * @param {!number} offset * @return {!number} */ Splitter._load$LOktavia$SSI = function (parent, name, data, offset) { /** @type {Splitter} */ var section; section = new Splitter$LOktavia$(parent); offset = section._bitVector.load$SI(data, offset); section._parent._metadataLabels.push(name); section._parent._metadatas[name] = section; return offset; }; var Splitter$_load$LOktavia$SSI = Splitter._load$LOktavia$SSI; /** * @return {!string} */ Splitter.prototype._dump$ = function () { return [ Binary$dump16bitNumber$I(1), Metadata.prototype._dump$.call(this) ].join(''); }; /** * @param {CompressionReport} report * @return {!string} */ Splitter.prototype._dump$LCompressionReport$ = function (report) { CompressionReport$add$LCompressionReport$II(report, 1, 1); return [ Binary$dump16bitNumber$I(1), Metadata.prototype._dump$LCompressionReport$.call(this, report) ].join(''); }; /** * class Table extends Metadata * @constructor */ function Table() { } Table.prototype = new Metadata; /** * @constructor * @param {Oktavia} parent * @param {Array.} headers */ function Table$LOktavia$AS(parent, headers) { this._parent = parent; this._bitVector = new BitVector$(); this._headers = headers; this._columnTails = new BitVector$(); }; Table$LOktavia$AS.prototype = new Table; /** * @return {!number} */ Table.prototype.rowSize$ = function () { /** @type {BitVector} */ var this$0$0; /** @type {!number} */ var i$0$0; /** @type {BitVector} */ var _bitVector$0; this$0$0 = _bitVector$0 = this._bitVector; i$0$0 = _bitVector$0._size; return this$0$0.rank$IB(i$0$0, true); }; /** * @return {!number} */ Table.prototype.columnSize$ = function () { return (this._headers.length | 0); }; /** */ Table.prototype.setColumnTail$ = function () { /** @type {!number} */ var index; /** @type {Oktavia} */ var this$0; /** @type {FMIndex} */ var this$0$0; /** @type {Oktavia} */ var _parent$0; this$0 = _parent$0 = this._parent; this$0$0 = this$0._fmindex; index = this$0$0._substr.length; _parent$0._fmindex.push$S(Oktavia.eob); this._columnTails.set$I(index - 1); }; /** */ Table.prototype.setRowTail$ = function () { /** @type {!number} */ var index; /** @type {Oktavia} */ var this$0; /** @type {FMIndex} */ var this$0$0; this$0 = this._parent; this$0$0 = this$0._fmindex; index = this$0$0._substr.length; this._bitVector.set$I(index - 1); }; /** * @param {!number} position * @return {Array.} */ Table.prototype.getCell$I = function (position) { /** @type {!number} */ var row; /** @type {!number} */ var currentColumn; /** @type {!number} */ var lastRowColumn; /** @type {!number} */ var startPosition; /** @type {Array.} */ var result; /** @type {BitVector} */ var this$0; /** @type {BitVector} */ var this$1; if (position < 0 || this._bitVector.size$() <= position) { throw new Error("Section.getSectionIndex() : range error " + (position + "")); } this$0 = this._bitVector; row = this$0.rank$IB(position, true); this$1 = this._columnTails; currentColumn = this$1.rank$IB(position, true); lastRowColumn = 0; if (row > 0) { startPosition = this._bitVector.select$I(row - 1) + 1; lastRowColumn = this._columnTails.rank$I(startPosition); } result = [ row, currentColumn - lastRowColumn ]; return result; }; /** * @param {!number} rowIndex * @return {Object.} */ Table.prototype.getRowContent$I = function (rowIndex) { /** @type {!string} */ var content; /** @type {Array.} */ var values; /** @type {Object.} */ var result; /** @type {!number} */ var i; content = this.getContent$I(rowIndex); values = content.split(Oktavia.eob, this._headers.length); result = ({ }); for (i in this._headers) { if (i < values.length) { result[this._headers[i]] = values[i]; } else { result[this._headers[i]] = ''; } } return result; }; /** * @param {SingleResult} result * @param {Array.} positions * @param {!string} word * @param {!boolean} stemmed */ Table.prototype.grouping$LSingleResult$AISB = function (result, positions, word, stemmed) { }; /** * @param {!number} index * @return {!string} */ Table.prototype.getInformation$I = function (index) { return ''; }; /** */ Table.prototype._build$ = function () { this._bitVector.build$(); this._columnTails.build$(); }; /** * @param {Oktavia} parent * @param {!string} name * @param {!string} data * @param {!number} offset * @return {!number} */ Table._load$LOktavia$SSI = function (parent, name, data, offset) { /** @type {LoadedStringListResult} */ var strs; /** @type {Table} */ var table; /** @type {!number} */ var offset$0; strs = new LoadedStringListResult$SI(data, offset); table = new Table$LOktavia$AS(parent, strs.result); offset$0 = strs.offset; offset$0 = table._bitVector.load$SI(data, offset$0); table._parent._metadataLabels.push(name); table._parent._metadatas[name] = table; offset = offset$0; return table._columnTails.load$SI(data, offset$0); }; var Table$_load$LOktavia$SSI = Table._load$LOktavia$SSI; /** * @return {!string} */ Table.prototype._dump$ = function () { return [ Binary$dump16bitNumber$I(2), Binary$dumpStringList$AS(this._headers), Metadata.prototype._dump$.call(this), this._columnTails.dump$() ].join(''); }; /** * @param {CompressionReport} report * @return {!string} */ Table.prototype._dump$LCompressionReport$ = function (report) { CompressionReport$add$LCompressionReport$II(report, 1, 1); return [ Binary$dump16bitNumber$I(2), Binary$dumpStringList$ASLCompressionReport$(this._headers, report), Metadata.prototype._dump$LCompressionReport$.call(this, report), this._columnTails.dump$LCompressionReport$(report) ].join(''); }; /** * class Block extends Metadata * @constructor */ function Block() { } Block.prototype = new Metadata; /** * @constructor * @param {Oktavia} parent */ function Block$LOktavia$(parent) { this._parent = parent; this._bitVector = new BitVector$(); this._names = [ ]; this._start = false; }; Block$LOktavia$.prototype = new Block; /** * @param {!string} blockName */ Block.prototype.startBlock$S = function (blockName) { this.startBlock$SI(blockName, this._parent.contentSize$()); }; /** * @param {!string} blockName * @param {!number} index */ Block.prototype.startBlock$SI = function (blockName, index) { if (this._start) { throw new Error('Splitter `' + this._names[this._names.length - 1] + '` is not closed'); } this._start = true; this._names.push(blockName); this._bitVector.set$I(index - 1); }; /** */ Block.prototype.endBlock$ = function () { this.endBlock$I(this._parent.contentSize$()); }; /** * @param {!number} index */ Block.prototype.endBlock$I = function (index) { if (! this._start) { throw new Error('Splitter is not started'); } this._start = false; this._bitVector.set$I(index - 1); }; /** * @return {!number} */ Block.prototype.size$ = function () { return (this._names.length | 0); }; /** * @param {!number} position * @return {!number} */ Block.prototype.blockIndex$I = function (position) { /** @type {!number} */ var result; /** @type {BitVector} */ var this$0; if (position < 0 || this._parent._fmindex.size$() - 1 <= position) { throw new Error("Block.blockIndex() : range error " + (position + "")); } if (position >= this._bitVector.size$()) { position = (this._bitVector.size$() - 1 | 0); result = (this._bitVector.rank$I(position) + 1 | 0); } else { this$0 = this._bitVector; result = this$0.rank$IB(position, true); } return result; }; /** * @param {!number} position * @return {!boolean} */ Block.prototype.inBlock$I = function (position) { /** @type {!number} */ var blockIndex; blockIndex = this.blockIndex$I(position); return blockIndex % 2 !== 0; }; /** * @param {!number} position * @return {!string} */ Block.prototype.getBlockContent$I = function (position) { /** @type {!number} */ var blockIndex; /** @type {!string} */ var result; blockIndex = this.blockIndex$I(position); if (blockIndex % 2 !== 0) { result = this.getContent$I(blockIndex); } else { result = ''; } return result; }; /** * @param {!number} position * @return {!string} */ Block.prototype.getBlockName$I = function (position) { /** @type {!number} */ var blockIndex; /** @type {!string} */ var result; blockIndex = this.blockIndex$I(position); if (blockIndex % 2 !== 0) { result = this._names[blockIndex >>> 1]; } else { result = ''; } return result; }; /** * @param {SingleResult} result * @param {Array.} positions * @param {!string} word * @param {!boolean} stemmed */ Block.prototype.grouping$LSingleResult$AISB = function (result, positions, word, stemmed) { }; /** * @param {!number} index * @return {!string} */ Block.prototype.getInformation$I = function (index) { return ''; }; /** * @param {Oktavia} parent * @param {!string} name * @param {!string} data * @param {!number} offset * @return {!number} */ Block._load$LOktavia$SSI = function (parent, name, data, offset) { /** @type {LoadedStringListResult} */ var strs; /** @type {Block} */ var block; /** @type {!number} */ var offset$0; strs = new LoadedStringListResult$SI(data, offset); block = new Block$LOktavia$(parent); block._names = strs.result; offset$0 = strs.offset; offset$0 = block._bitVector.load$SI(data, offset$0); block._parent._metadataLabels.push(name); block._parent._metadatas[name] = block; return offset$0; }; var Block$_load$LOktavia$SSI = Block._load$LOktavia$SSI; /** * @return {!string} */ Block.prototype._dump$ = function () { return [ Binary$dump16bitNumber$I(3), Binary$dumpStringList$AS(this._names), Metadata.prototype._dump$.call(this) ].join(''); }; /** * @param {CompressionReport} report * @return {!string} */ Block.prototype._dump$LCompressionReport$ = function (report) { CompressionReport$add$LCompressionReport$II(report, 1, 1); return [ Binary$dump16bitNumber$I(3), Binary$dumpStringList$ASLCompressionReport$(this._names, report), Metadata.prototype._dump$LCompressionReport$.call(this, report) ].join(''); }; /** * class FMIndex extends Object * @constructor */ function FMIndex() { } /** * @constructor */ function FMIndex$() { /** @type {Array.} */ var _rlt$0; this._ssize = 0; (this._ddic = 0, this._head = 0); this._substr = ""; this._sv = new WaveletMatrix$(); this._posdic = [ ]; this._idic = [ ]; _rlt$0 = this._rlt = [ ]; _rlt$0.length = 65536; }; FMIndex$.prototype = new FMIndex; /** */ FMIndex.prototype.clear$ = function () { /** @type {WaveletMatrix} */ var this$0; this$0 = this._sv; this$0._bv.length = 0; this$0._seps.length = 0; this$0._size = 0; this._posdic.length = 0; this._idic.length = 0; this._ddic = 0; this._head = 0; this._substr = ""; }; /** * @return {!number} */ FMIndex.prototype.size$ = function () { /** @type {WaveletMatrix} */ var this$0; this$0 = this._sv; return this$0._size; }; /** * @return {!number} */ FMIndex.prototype.contentSize$ = function () { return this._substr.length; }; /** * @param {!string} key * @return {!number} */ FMIndex.prototype.getRows$S = function (key) { /** @type {Array.} */ var pos; pos = [ ]; return this.getRows$SAI(key, pos); }; /** * @param {!string} key * @param {Array.} pos * @return {!number} */ FMIndex.prototype.getRows$SAI = function (key, pos) { /** @type {!number} */ var i; /** @type {!number} */ var code; /** @type {!number} */ var first; /** @type {undefined|!number} */ var last; /** @type {!number} */ var c; /** @type {Array.} */ var _rlt$0; i = key.length - 1; code = key.charCodeAt(i); first = (_rlt$0 = this._rlt)[code] + 1; last = _rlt$0[code + 1]; while (first <= last) { if (i === 0) { pos[0] = (-- first | 0); pos[1] = -- last; return (last - first + 1 | 0); } i--; c = key.charCodeAt(i); first = this._rlt[c] + this._sv.rank$II(first - 1, c) + 1; last = this._rlt[c] + this._sv.rank$II(last, c); } return 0; }; /** * @param {!number} i * @return {!number} */ FMIndex.prototype.getPosition$I = function (i) { /** @type {!number} */ var pos; /** @type {!number} */ var c; if (i >= this.size$()) { throw new Error("FMIndex.getPosition() : range error"); } pos = 0; while (i !== this._head) { if (i % this._ddic === 0) { pos += this._posdic[i / this._ddic] + 1; break; } c = this._sv.get$I(i); i = this._rlt[c] + this._sv.rank$II(i, c); pos++; } return (pos % this.size$() | 0); }; /** * @param {!number} pos * @param {!number} len * @return {!string} */ FMIndex.prototype.getSubstring$II = function (pos, len) { /** @type {!number} */ var pos_end; /** @type {!number} */ var pos_tmp; /** @type {!number} */ var i; /** @type {!number} */ var pos_idic; /** @type {!string} */ var substr; /** @type {!number} */ var c; /** @type {!number} */ var _ddic$0; if (pos >= this.size$()) { throw new Error("FMIndex.getSubstring() : range error"); } pos_end = Math.min(pos + len, this.size$()); pos_tmp = this.size$() - 1; i = this._head; pos_idic = Math.floor((pos_end + (_ddic$0 = this._ddic) - 2) / _ddic$0); if (pos_idic < this._idic.length) { pos_tmp = pos_idic * this._ddic; i = this._idic[pos_idic]; } substr = ""; while (pos_tmp >= pos) { c = this._sv.get$I(i); i = this._rlt[c] + this._sv.rank$II(i, c); if (pos_tmp < pos_end) { substr = String.fromCharCode(c) + substr; } if (pos_tmp === 0) { break; } pos_tmp--; } return substr; }; /** */ FMIndex.prototype.build$ = function () { this.build$SIIB(String.fromCharCode(0), 65535, 20, false); }; /** * @param {!string} end_marker * @param {!number} ddic * @param {!boolean} verbose */ FMIndex.prototype.build$SIB = function (end_marker, ddic, verbose) { this.build$SIIB(end_marker, 65535, ddic, verbose); }; /** * @param {!string} end_marker * @param {!number} maxChar * @param {!number} ddic * @param {!boolean} verbose */ FMIndex.prototype.build$SIIB = function (end_marker, maxChar, ddic, verbose) { /** @type {BurrowsWheelerTransform} */ var b; /** @type {!string} */ var s; /** @type {!number} */ var c; /** @type {!string} */ var str$0; /** @type {WaveletMatrix} */ var this$0; /** @type {!string} */ var _str$0; /** @type {Array.} */ var _suffixarray$0; if (verbose) { console.time("building burrows-wheeler transform"); } this._substr += end_marker; b = ({_str: "", _size: 0, _head: 0, _suffixarray: [ ]}); str$0 = this._substr; _str$0 = b._str = str$0; b._size = _str$0.length; _suffixarray$0 = b._suffixarray = SAIS$make$S(str$0); b._head = (_suffixarray$0.indexOf(0) | 0); s = BurrowsWheelerTransform$get$LBurrowsWheelerTransform$(b); this._ssize = s.length; this._head = b._head; b._str = ""; b._size = 0; b._head = 0; b._suffixarray.length = 0; this._substr = ""; if (verbose) { console.timeEnd("building burrows-wheeler transform"); } if (verbose) { console.time("building wavelet matrix"); } this$0 = this._sv; this$0._bitsize = (Math.ceil(Math.log(maxChar) / 0.6931471805599453) | 0); if (verbose) { console.log(" maxCharCode: ", maxChar); console.log(" bitSize: ", this._sv.bitsize$()); } this._sv.build$S(s); if (verbose) { console.timeEnd("building wavelet matrix"); } if (verbose) { console.time("caching rank less than"); } for (c = 0; c < maxChar; c++) { this._rlt[c] = this._sv.rank_less_than$II(this._sv.size$(), c); } if (verbose) { console.timeEnd("caching rank less than"); } this._ddic = ddic; if (verbose) { console.time("building dictionaries"); } this._buildDictionaries$(); if (verbose) { console.timeEnd("building dictionaries"); console.log(''); } }; /** */ FMIndex.prototype._buildDictionaries$ = function () { /** @type {!number} */ var i; /** @type {!number} */ var pos; /** @type {!number} */ var c; for (i = 0; i < this._ssize / this._ddic + 1; i++) { this._posdic.push(0); this._idic.push(0); } i = this._head; pos = this.size$() - 1; do { if (i % this._ddic === 0) { this._posdic[Math.floor(i / this._ddic)] = (pos | 0); } if (pos % this._ddic === 0) { this._idic[Math.floor(pos / this._ddic)] = (i | 0); } c = this._sv.get$I(i); i = this._rlt[c] + this._sv.rank$II(i, c); pos--; } while (i !== this._head); }; /** * @param {!string} doc */ FMIndex.prototype.push$S = function (doc) { if (doc.length <= 0) { throw new Error("FMIndex::push(): empty string"); } this._substr += doc; }; /** * @param {!string} keyword * @return {Array.} */ FMIndex.prototype.search$S = function (keyword) { /** @type {Array.} */ var result; /** @type {Array.} */ var position; /** @type {!number} */ var rows; /** @type {undefined|!number} */ var first; /** @type {undefined|!number} */ var last; /** @type {undefined|!number} */ var i; result = [ ]; position = [ ]; rows = this.getRows$SAI(keyword, position); if (rows > 0) { first = position[0]; last = position[1]; for (i = first; i <= last; i++) { result.push(this.getPosition$I(i)); } } return result; }; /** * @return {!string} */ FMIndex.prototype.dump$ = function () { return this.dump$B(false); }; /** * @param {!boolean} verbose * @return {!string} */ FMIndex.prototype.dump$B = function (verbose) { /** @type {Array.} */ var contents; /** @type {CompressionReport} */ var report; /** @type {!number} */ var i; contents = [ ]; report = ({source: 0, result: 0}); contents.push(Binary$dump32bitNumber$N(this._ddic)); contents.push(Binary$dump32bitNumber$N(this._ssize)); contents.push(Binary$dump32bitNumber$N(this._head)); CompressionReport$add$LCompressionReport$II(report, 6, 6); contents.push(this._sv.dump$LCompressionReport$(report)); if (verbose) { console.log("Serializing FM-index"); console.log(' Wavelet Matrix: ' + (contents[3].length * 2 + "") + ' bytes (' + (Math.round(report.result * 100.0 / report.source) + "") + '%)'); } contents.push(Binary$dump32bitNumber$N(this._posdic.length)); for (i in this._posdic) { contents.push(Binary$dump32bitNumber$N(this._posdic[i])); } for (i in this._idic) { contents.push(Binary$dump32bitNumber$N(this._idic[i])); } if (verbose) { console.log(' Dictionary Cache: ' + (this._idic.length * 16 + "") + ' bytes'); } return contents.join(""); }; /** * @param {!string} data * @return {!number} */ FMIndex.prototype.load$S = function (data) { return this.load$SI(data, 0); }; /** * @param {!string} data * @param {!number} offset * @return {!number} */ FMIndex.prototype.load$SI = function (data, offset) { /** @type {!number} */ var maxChar; /** @type {!number} */ var c; /** @type {!number} */ var size; /** @type {!number} */ var i; /** @type {!number} */ var result$0; /** @type {!number} */ var result$1; result$0 = data.charCodeAt(offset) * 65536 + data.charCodeAt(offset + 1); this._ddic = (result$0 | 0); this._ssize = (Binary$load32bitNumber$SI(data, offset + 2) | 0); this._head = (Binary$load32bitNumber$SI(data, offset + 4) | 0); offset = this._sv.load$SI(data, offset + 6); maxChar = Math.pow(2, this._sv.bitsize$()); for (c = 0; c < maxChar; c++) { this._rlt[c] = this._sv.rank_less_than$II(this._sv.size$(), c); } result$1 = data.charCodeAt(offset) * 65536 + data.charCodeAt(offset + 1); size = result$1; offset += 2; for (i = 0; i < size; (i++, offset += 2)) { this._posdic.push(Binary$load32bitNumber$SI(data, offset)); } for (i = 0; i < size; (i++, offset += 2)) { this._idic.push(Binary$load32bitNumber$SI(data, offset)); } return offset; }; /** * class Tag extends Object * @constructor */ function Tag() { } /** * @constructor * @param {!string} name */ function Tag$S(name) { this.name = name; this.attributes = ({ }); this.isSelfClosing = false; }; Tag$S.prototype = new Tag; /** * class _Common extends Object * @constructor */ function _Common() { } /** * @constructor */ function _Common$() { }; _Common$.prototype = new _Common; /** * class _State extends Object * @constructor */ function _State() { } /** * @constructor */ function _State$() { }; _State$.prototype = new _State; /** * class SAXHandler extends Object * @constructor */ function SAXHandler() { } /** * @constructor */ function SAXHandler$() { this.position = 0; this.column = 0; this.line = 0; }; SAXHandler$.prototype = new SAXHandler; /** * @param {Error} error */ SAXHandler.prototype.onerror$LError$ = function (error) { }; /** * @param {!string} text */ SAXHandler.prototype.ontext$S = function (text) { }; /** * @param {!string} doctype */ SAXHandler.prototype.ondoctype$S = function (doctype) { }; /** * @param {!string} name * @param {!string} body */ SAXHandler.prototype.onprocessinginstruction$SS = function (name, body) { }; /** * @param {!string} sgmlDecl */ SAXHandler.prototype.onsgmldeclaration$S = function (sgmlDecl) { }; /** * @param {!string} tagname * @param {Object.} attributes */ SAXHandler.prototype.onopentag$SHS = function (tagname, attributes) { }; /** * @param {!string} tagname */ SAXHandler.prototype.onclosetag$S = function (tagname) { }; /** * @param {!string} name * @param {!string} value */ SAXHandler.prototype.onattribute$SS = function (name, value) { }; /** * @param {!string} comment */ SAXHandler.prototype.oncomment$S = function (comment) { }; /** */ SAXHandler.prototype.onopencdata$ = function () { }; /** * @param {!string} cdata */ SAXHandler.prototype.oncdata$S = function (cdata) { }; /** */ SAXHandler.prototype.onclosecdata$ = function () { }; /** */ SAXHandler.prototype.onend$ = function () { }; /** */ SAXHandler.prototype.onready$ = function () { }; /** * @param {!string} script */ SAXHandler.prototype.onscript$S = function (script) { }; /** * class _HTMLHandler extends SAXHandler * @constructor */ function _HTMLHandler() { } _HTMLHandler.prototype = new SAXHandler; /** * @constructor * @param {Object.>} styles * @param {!boolean} escape */ function _HTMLHandler$HASB(styles, escape) { this.position = 0; this.column = 0; this.line = 0; this.text = [ ]; this.escape = escape; this.styles = styles; }; _HTMLHandler$HASB.prototype = new _HTMLHandler; /** * @param {!string} str * @return {!string} */ _HTMLHandler.escapeHTML$S = function (str) { return str.replace(/\n/g, "
").replace(/&/g, "&").replace(/"/g, """).replace(//g, ">"); }; var _HTMLHandler$escapeHTML$S = _HTMLHandler.escapeHTML$S; /** * @param {!string} tagname * @param {Object.} attributes */ _HTMLHandler.prototype.onopentag$SHS = function (tagname, attributes) { this.text.push(this.styles[tagname][0]); }; /** * @param {!string} tagname */ _HTMLHandler.prototype.onclosetag$S = function (tagname) { this.text.push(this.styles[tagname][1]); }; /** * @param {!string} text */ _HTMLHandler.prototype.ontext$S = function (text) { if (this.escape) { this.text.push(text.replace(/\n/g, "
").replace(/&/g, "&").replace(/"/g, """).replace(//g, ">")); } else { this.text.push(text); } }; /** * @return {!string} */ _HTMLHandler.prototype.result$ = function () { return this.text.join(''); }; /** * class SAXParser extends Object * @constructor */ function SAXParser() { } /** * @constructor * @param {SAXHandler} handler */ function SAXParser$LSAXHandler$(handler) { this.q = ""; this.c = ""; this.bufferCheckPosition = 0; this.looseCase = ""; this.tags = [ ]; this.closed = false; this.closedRoot = false; this.sawRoot = false; this.tag = null; this.error = null; this.handler = null; this.ENTITIES = null; this.strict = false; this.tagName = ""; this.state = 0; this.line = 0; this.column = 0; this.position = 0; this.startTagPosition = 0; this.attribName = ""; this.attribValue = ""; this.script = ""; this.textNode = ""; this.attribList = null; this.noscript = false; this.cdata = ""; this.procInstBody = ""; this.procInstName = ""; this.doctype = ""; this.entity = ""; this.sgmlDecl = ""; this.comment = ""; this.preTags = 0; this._init$LSAXHandler$B(handler, false); }; SAXParser$LSAXHandler$.prototype = new SAXParser; /** * @constructor * @param {SAXHandler} handler * @param {!boolean} strict */ function SAXParser$LSAXHandler$B(handler, strict) { this.q = ""; this.c = ""; this.bufferCheckPosition = 0; this.looseCase = ""; this.tags = [ ]; this.closed = false; this.closedRoot = false; this.sawRoot = false; this.tag = null; this.error = null; this.handler = null; this.ENTITIES = null; this.strict = false; this.tagName = ""; this.state = 0; this.line = 0; this.column = 0; this.position = 0; this.startTagPosition = 0; this.attribName = ""; this.attribValue = ""; this.script = ""; this.textNode = ""; this.attribList = null; this.noscript = false; this.cdata = ""; this.procInstBody = ""; this.procInstName = ""; this.doctype = ""; this.entity = ""; this.sgmlDecl = ""; this.comment = ""; this.preTags = 0; this._init$LSAXHandler$B(handler, strict); }; SAXParser$LSAXHandler$B.prototype = new SAXParser; /** * @param {SAXHandler} handler * @param {!boolean} strict */ SAXParser.prototype._init$LSAXHandler$B = function (handler, strict) { this.handler = handler; this.clearBuffers$(); this.q = ""; this.bufferCheckPosition = 65536; this.looseCase = 'toLowerCase'; this.tags = [ ]; this.closed = this.closedRoot = this.sawRoot = false; this.tag = null; this.error = null; this.strict = strict; this.noscript = strict; this.state = 1; this.ENTITIES = _Entities$entity_list$(); this.attribList = [ ]; this.noscript = false; this.preTags = 0; }; /** * @param {!boolean} flag */ SAXParser.prototype.set_noscript$B = function (flag) { this.noscript = flag; }; /** * @return {SAXParser} */ SAXParser.prototype.resume$ = function () { this.error = null; return this; }; /** * @return {SAXParser} */ SAXParser.prototype.close$ = function () { return this.parse$S(''); }; /** * @param {!string} chunk * @return {SAXParser} */ SAXParser.prototype.parse$S = function (chunk) { /** @type {Char} */ var _; /** @type {!number} */ var i; /** @type {!string} */ var c; /** @type {!number} */ var starti; /** @type {!number} */ var pad; /** @type {!number} */ var returnState; /** @type {Object.} */ var charclass$0; /** @type {Object.} */ var charclass$1; /** @type {RegExp} */ var charclass$2; /** @type {Object.} */ var charclass$3; /** @type {Object.} */ var charclass$4; /** @type {Object.} */ var charclass$5; /** @type {!string} */ var text$0; /** @type {Object.} */ var charclass$6; /** @type {RegExp} */ var charclass$7; /** @type {Object.} */ var charclass$8; /** @type {Object.} */ var charclass$9; /** @type {RegExp} */ var charclass$10; /** @type {Object.} */ var charclass$11; /** @type {RegExp} */ var charclass$12; /** @type {Object.} */ var charclass$13; /** @type {RegExp} */ var charclass$14; /** @type {Object.} */ var charclass$15; /** @type {Object.} */ var charclass$16; /** @type {Object.} */ var charclass$17; /** @type {Object.} */ var charclass$18; /** @type {RegExp} */ var charclass$19; /** @type {RegExp} */ var charclass$20; /** @type {Object.} */ var charclass$21; /** @type {Object.} */ var charclass$22; /** @type {Object.} */ var charclass$23; /** @type {Object.} */ var charclass$24; /** @type {!string} */ var comment$0; _ = new Char$(); if (this.error) { throw this.error; } if (this.closed) { return this.emiterror$S("Cannot write after close. Assign an onready handler."); } (i = 0, c = ""); while (this.c = c = chunk.charAt(i++)) { this.position++; if (c === "\n") { this.handler.line++; this.handler.column = 0; } else { this.handler.column++; } switch (this.state) { case 1: if (c === "<") { this.state = 4; this.startTagPosition = this.position; } else { charclass$0 = _.whitespace; if (! $__jsx_ObjectHasOwnProperty.call(charclass$0, c)) { this.strictFail$S("Non-whitespace before first tag."); this.textNode = c; this.state = 2; } } continue; case 2: if (this.sawRoot && ! this.closedRoot) { starti = i - 1; while (c && c !== "<" && c !== "&") { c = chunk.charAt(i++); if (c) { this.position++; if (c === "\n") { this.handler.line++; this.handler.column = 0; } else { this.handler.column++; } } } this.textNode += chunk.substring(starti, i - 1); } if (c === "<") { this.state = 4; this.startTagPosition = this.position; } else { if (_.not$HBS(_.whitespace, c) && (! this.sawRoot || this.closedRoot)) { this.strictFail$S("Text data outside of root node."); } if (c === "&") { this.state = 3; } else { this.textNode += c; } } continue; case 33: if (c === "<") { this.state = 34; } else { this.script += c; } continue; case 34: if (c === "/") { this.state = 31; } else { this.script += "<" + c; this.state = 33; } continue; case 4: if (c === "!") { this.state = 5; this.sgmlDecl = ""; } else { charclass$1 = _.whitespace; if ($__jsx_ObjectHasOwnProperty.call(charclass$1, c)) { } else { charclass$2 = _.nameStart; if (charclass$2.test(c)) { this.state = 21; this.tagName = c; } else { if (c === "/") { this.state = 31; this.tagName = ""; } else { if (c === "?") { this.state = 18; this.procInstName = this.procInstBody = ""; } else { this.strictFail$S("Unencoded <"); if (this.startTagPosition + 1 < this.position) { pad = this.position - this.startTagPosition; for (i = 0; i < pad; i++) { c = " " + c; } } this.textNode += "<" + c; this.state = 2; } } } } } continue; case 5: if ((this.sgmlDecl + c).toUpperCase() === _.CDATA) { this.closetext_if_exist$(); this.state = 15; this.sgmlDecl = ""; this.cdata = ""; } else { if (this.sgmlDecl + c === "--") { this.state = 12; this.comment = ""; this.sgmlDecl = ""; } else { if ((this.sgmlDecl + c).toUpperCase() === _.DOCTYPE) { this.state = 7; if (this.doctype || this.sawRoot) { this.strictFail$S("Inappropriately located doctype declaration"); } this.doctype = ""; this.sgmlDecl = ""; } else { if (c === ">") { this.closetext_if_exist$(); this.sgmlDecl = ""; this.state = 2; } else { charclass$3 = _.quote; if ($__jsx_ObjectHasOwnProperty.call(charclass$3, c)) { this.state = 6; this.sgmlDecl += c; } else { this.sgmlDecl += c; } } } } } continue; case 6: if (c === this.q) { this.state = 5; this.q = ""; } this.sgmlDecl += c; continue; case 7: if (c === ">") { this.state = 2; this.closetext_if_exist$(); this.doctype.trim(); } else { this.doctype += c; if (c === "[") { this.state = 9; } else { charclass$4 = _.quote; if ($__jsx_ObjectHasOwnProperty.call(charclass$4, c)) { this.state = 8; this.q = c; } } } continue; case 8: this.doctype += c; if (c === this.q) { this.q = ""; this.state = 7; } continue; case 9: this.doctype += c; if (c === "]") { this.state = 7; } else { charclass$5 = _.quote; if ($__jsx_ObjectHasOwnProperty.call(charclass$5, c)) { this.state = 10; this.q = c; } } continue; case 10: this.doctype += c; if (c === this.q) { this.state = 9; this.q = ""; } continue; case 12: if (c === "-") { this.state = 13; } else { this.comment += c; } continue; case 13: if (c === "-") { this.state = 14; text$0 = this.comment; text$0 = text$0.replace(/[\n\t]/g, ' '); text$0 = text$0.replace(/\s\s+/g, " "); comment$0 = this.comment = text$0; if (comment$0) { this.closetext_if_exist$(); this.comment.trim(); } this.comment = ""; } else { this.comment += "-" + c; this.state = 12; } continue; case 14: if (c !== ">") { this.strictFail$S("Malformed comment"); this.comment += "--" + c; this.state = 12; } else { this.state = 2; } continue; case 15: if (c === "]") { this.state = 16; } else { this.cdata += c; } continue; case 16: if (c === "]") { this.state = 17; } else { this.cdata += "]" + c; this.state = 15; } continue; case 17: if (c === ">") { if (this.cdata) { this.closetext_if_exist$(); } this.cdata = ""; this.state = 2; } else { if (c === "]") { this.cdata += "]"; } else { this.cdata += "]]" + c; this.state = 15; } } continue; case 18: if (c === "?") { this.state = 20; } else { charclass$6 = _.whitespace; if ($__jsx_ObjectHasOwnProperty.call(charclass$6, c)) { this.state = 19; } else { this.procInstName += c; } } continue; case 19: if (! this.procInstBody && _.is$HBS(_.whitespace, c)) { continue; } else { if (c === "?") { this.state = 20; } else { this.procInstBody += c; } } continue; case 20: if (c === ">") { this.closetext_if_exist$(); this.procInstName = this.procInstBody = ""; this.state = 2; } else { this.procInstBody += "?" + c; this.state = 19; } continue; case 21: charclass$7 = _.nameBody; if (charclass$7.test(c)) { this.tagName += c; } else { this.newTag$(); if (c === ">") { this.openTag$B(false); } else { if (c === "/") { this.state = 22; } else { charclass$8 = _.whitespace; if (! $__jsx_ObjectHasOwnProperty.call(charclass$8, c)) { this.strictFail$S("Invalid character in tag name"); } this.state = 23; } } } continue; case 22: if (c === ">") { this.openTag$B(true); this.closeTag$(); } else { this.strictFail$S("Forward-slash in opening tag not followed by >"); this.state = 23; } continue; case 23: charclass$9 = _.whitespace; if ($__jsx_ObjectHasOwnProperty.call(charclass$9, c)) { continue; } else { if (c === ">") { this.openTag$B(false); } else { if (c === "/") { this.state = 22; } else { charclass$10 = _.nameStart; if (charclass$10.test(c)) { this.attribName = c; this.attribValue = ""; this.state = 24; } else { this.strictFail$S("Invalid attribute name"); } } } } continue; case 24: if (c === "=") { this.state = 26; } else { if (c === ">") { this.strictFail$S("Attribute without value"); this.attribValue = this.attribName; this.attrib$(); this.openTag$B(false); } else { charclass$11 = _.whitespace; if ($__jsx_ObjectHasOwnProperty.call(charclass$11, c)) { this.state = 25; } else { charclass$12 = _.nameBody; if (charclass$12.test(c)) { this.attribName += c; } else { this.strictFail$S("Invalid attribute name"); } } } } continue; case 25: if (c === "=") { this.state = 26; } else { charclass$13 = _.whitespace; if ($__jsx_ObjectHasOwnProperty.call(charclass$13, c)) { continue; } else { this.strictFail$S("Attribute without value"); this.tag.attributes[this.attribName] = ""; this.attribValue = ""; this.closetext_if_exist$(); this.attribName = ""; if (c === ">") { this.openTag$B(false); } else { charclass$14 = _.nameStart; if (charclass$14.test(c)) { this.attribName = c; this.state = 24; } else { this.strictFail$S("Invalid attribute name"); this.state = 23; } } } } continue; case 26: charclass$15 = _.whitespace; if ($__jsx_ObjectHasOwnProperty.call(charclass$15, c)) { continue; } else { charclass$16 = _.quote; if ($__jsx_ObjectHasOwnProperty.call(charclass$16, c)) { this.q = c; this.state = 27; } else { this.strictFail$S("Unquoted attribute value"); this.state = 28; this.attribValue = c; } } continue; case 27: if (c !== this.q) { if (c === "&") { this.state = 29; } else { this.attribValue += c; } continue; } this.attrib$(); this.q = ""; this.state = 23; continue; case 28: charclass$17 = _.attribEnd; if (! $__jsx_ObjectHasOwnProperty.call(charclass$17, c)) { if (c === "&") { this.state = 30; } else { this.attribValue += c; } continue; } this.attrib$(); if (c === ">") { this.openTag$B(false); } else { this.state = 23; } continue; case 31: if (! this.tagName) { charclass$18 = _.whitespace; if ($__jsx_ObjectHasOwnProperty.call(charclass$18, c)) { continue; } else { charclass$19 = _.nameStart; if (! charclass$19.test(c)) { if (this.script) { this.script += "") { this.closeTag$(); } else { charclass$20 = _.nameBody; if (charclass$20.test(c)) { this.tagName += c; } else { if (this.script) { this.script += "") { this.closeTag$(); } else { this.strictFail$S("Invalid characters in closing tag"); } continue; case 3: if (c === ";") { this.textNode += this.parseEntity$(); this.entity = ""; this.state = 2; } else { charclass$23 = _.entity; if ($__jsx_ObjectHasOwnProperty.call(charclass$23, c)) { this.entity += c; } else { this.strictFail$S("Invalid character entity"); this.textNode += "&" + this.entity + c; this.entity = ""; this.state = 2; } } continue; case 29: case 30: if (this.state === 29) { returnState = 27; } else { returnState = 28; } if (c === ";") { this.attribValue += this.parseEntity$(); this.entity = ""; this.state = (returnState | 0); } else { charclass$24 = _.entity; if ($__jsx_ObjectHasOwnProperty.call(charclass$24, c)) { this.entity += c; } else { this.strictFail$S("Invalid character entity"); this.attribValue += "&" + this.entity + c; this.entity = ""; this.state = (returnState | 0); } } continue; default: throw new Error("Unknown state: " + (this.state + "")); } } this.end$(); return this; }; /** */ SAXParser.prototype.clearBuffers$ = function () { this.comment = ''; this.sgmlDecl = ''; this.textNode = ''; this.tagName = ''; this.doctype = ''; this.procInstName = ''; this.procInstBody = ''; this.entity = ''; this.attribName = ''; this.attribValue = ''; this.cdata = ''; this.script = ''; }; /** */ SAXParser.prototype.closetext_if_exist$ = function () { if (this.textNode !== '') { this.closetext$(); } }; /** */ SAXParser.prototype.closetext$ = function () { /** @type {!string} */ var text; /** @type {!string} */ var text$0; if (this.preTags === 0) { text$0 = this.textNode; text$0 = text$0.replace(/[\n\t]/g, ' '); text$0 = text$0.replace(/\s\s+/g, " "); text = text$0; if (text$0) { this.handler.ontext$S(text); } } else { if (this.textNode) { this.handler.ontext$S(this.textNode); } } this.textNode = ""; }; /** * @param {!string} text * @return {!string} */ SAXParser.prototype.textopts$S = function (text) { text = text.replace(/[\n\t]/g, ' '); text = text.replace(/\s\s+/g, " "); return text; }; /** * @param {!string} er * @return {SAXParser} */ SAXParser.prototype.emiterror$S = function (er) { /** @type {Error} */ var error; this.closetext$(); er += "\nLine: " + (this.line + "") + "\nColumn: " + (this.column + "") + "\nChar: " + this.c; error = new Error(er); this.error = error; return this; }; /** */ SAXParser.prototype.end$ = function () { if (! this.closedRoot) { this.strictFail$S("Unclosed root tag"); } if (this.state !== 2) { this.emiterror$S("Unexpected end"); } this.closetext$(); this.c = ""; this.closed = true; }; /** * @param {!string} message */ SAXParser.prototype.strictFail$S = function (message) { if (this.strict) { this.emiterror$S(message); } }; /** */ SAXParser.prototype.newTag$ = function () { if (! this.strict) { this.tagName = this.tagName.toLowerCase(); } this.tag = ({name: this.tagName, attributes: ({ }), isSelfClosing: false}); this.attribList.length = 0; }; /** */ SAXParser.prototype.attrib$ = function () { if (! this.strict) { this.attribName = this.attribName.toLowerCase(); } if ($__jsx_ObjectHasOwnProperty.call(this.tag.attributes, this.attribName)) { this.attribName = this.attribValue = ""; return; } this.tag.attributes[this.attribName] = this.attribValue; this.closetext_if_exist$(); this.attribName = this.attribValue = ""; }; /** */ SAXParser.prototype.openTag$ = function () { this.openTag$B(false); }; /** * @param {!boolean} selfClosing */ SAXParser.prototype.openTag$B = function (selfClosing) { /** @type {Tag} */ var tag$0; /** @type {Tag} */ var tag$1; (tag$0 = this.tag).isSelfClosing = selfClosing; this.sawRoot = true; this.tags.push(tag$0); this.closetext_if_exist$(); this.handler.onopentag$SHS((tag$1 = this.tag).name, tag$1.attributes); if (this.tag.name === 'pre') { this.preTags++; } if (! selfClosing) { if (! this.noscript && this.tagName.toLowerCase() === "script") { this.state = 33; } else { this.state = 2; } this.tag = null; this.tagName = ""; } this.attribName = this.attribValue = ""; this.attribList.length = 0; }; /** */ SAXParser.prototype.closeTag$ = function () { /** @type {!number} */ var t; /** @type {!string} */ var tagName; /** @type {!string} */ var closeTo; /** @type {Tag} */ var close; /** @type {!number} */ var s; /** @type {Tag} */ var tag$0; if (! this.tagName) { this.strictFail$S("Weird empty close tag."); this.textNode += ""; this.state = 2; return; } if (this.script) { if (this.tagName !== "script") { this.script += ""; this.tagName = ""; this.state = 33; return; } this.closetext_if_exist$(); this.script = ""; } t = this.tags.length; tagName = this.tagName; if (! this.strict) { tagName = tagName.toLowerCase(); } closeTo = tagName; while (t--) { close = this.tags[t]; if (close.name !== closeTo) { this.strictFail$S("Unexpected close tag"); } else { break; } } if (t < 0) { this.strictFail$S("Unmatched closing tag: " + this.tagName); this.textNode += ""; this.state = 2; return; } this.tagName = tagName; s = this.tags.length; while (s-- > t) { tag$0 = this.tag = this.tags.pop(); this.tagName = tag$0.name; this.closetext_if_exist$(); this.handler.onclosetag$S(this.tagName); if (this.tagName === 'pre') { this.preTags--; } } if (t === 0) { this.closedRoot = true; } this.tagName = this.attribValue = this.attribName = ""; this.attribList.length = 0; this.state = 2; }; /** * @return {!string} */ SAXParser.prototype.parseEntity$ = function () { /** @type {!string} */ var entity; /** @type {!string} */ var entityLC; /** @type {!number} */ var num; /** @type {!string} */ var numStr; entity = this.entity; entityLC = entity.toLowerCase(); num = 0; numStr = ""; if (this.ENTITIES[entity]) { return this.ENTITIES[entity]; } if (this.ENTITIES[entityLC]) { return this.ENTITIES[entityLC]; } entity = entityLC; if (entityLC.charAt(0) === "#") { if (entity.charAt(1) === "x") { entity = entity.slice(2); num = $__jsx_parseInt(entity, 16); numStr = num.toString(16); } else { entity = entity.slice(1); num = $__jsx_parseInt(entity, 10); numStr = num.toString(10); } } entity = entity.replace(/^0+/, ""); if (numStr.toLowerCase() !== entity) { this.strictFail$S("Invalid character entity"); return "&" + this.entity + ";"; } return String.fromCharCode(num); }; /** * class Char extends Object * @constructor */ function Char() { } /** * @constructor */ function Char$() { this.CDATA = "[CDATA["; this.DOCTYPE = "DOCTYPE"; this.XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"; this.whitespace = this._charClass$S("\r\n\t "); this.number = this._charClass$S("0124356789"); this.letter = this._charClass$S("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); this.quote = this._charClass$S("'\""); this.entity = this._charClass$S("0124356789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#"); this.attribEnd = this._charClass$S("\r\n\t >"); this.nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/; this.nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/; }; Char$.prototype = new Char; /** * @param {!string} str * @return {Object.} */ Char.prototype._charClass$S = function (str) { /** @type {Object.} */ var result; /** @type {!number} */ var i; result = ({ }); for (i = 0; i < str.length; i++) { result[str.slice(i, i + 1)] = true; } return result; }; /** * @param {RegExp} charclass * @param {!string} c * @return {!boolean} */ Char.prototype.is$LRegExp$S = function (charclass, c) { return charclass.test(c); }; /** * @param {Object.} charclass * @param {!string} c * @return {!boolean} */ Char.prototype.is$HBS = function (charclass, c) { return $__jsx_ObjectHasOwnProperty.call(charclass, c); }; /** * @param {RegExp} charclass * @param {!string} c * @return {!boolean} */ Char.prototype.not$LRegExp$S = function (charclass, c) { return ! charclass.test(c); }; /** * @param {Object.} charclass * @param {!string} c * @return {!boolean} */ Char.prototype.not$HBS = function (charclass, c) { return ! $__jsx_ObjectHasOwnProperty.call(charclass, c); }; /** * class _Entities extends Object * @constructor */ function _Entities() { } /** * @constructor */ function _Entities$() { }; _Entities$.prototype = new _Entities; /** * @return {Object.} */ _Entities.entity_list$ = function () { /** @type {Object.} */ var result; /** @type {!string} */ var key; /** @type {*} */ var value; result = ({ }); for (key in _Entities._entities) { value = _Entities._entities[key]; if (typeof value === 'string') { result[key] = value + ""; } else { if (typeof value === 'number') { result[key] = String.fromCharCode(value | 0); } } } return result; }; var _Entities$entity_list$ = _Entities.entity_list$; /** * class BitVector extends Object * @constructor */ function BitVector() { } /** * @constructor */ function BitVector$() { /** @type {Array.} */ var _v$0; /** @type {Array.} */ var _r$0; _r$0 = this._r = [ ]; _v$0 = this._v = [ ]; _v$0.length = 0; _r$0.length = 0; this._size = 0; this._size1 = 0; }; BitVector$.prototype = new BitVector; /** */ BitVector.prototype.build$ = function () { /** @type {!number} */ var i; this._size1 = 0; for (i = 0; i < this._v.length; i++) { if (i % 8 === 0) { this._r.push(true ? this._size1 : this._size - this._size1); } this._size1 += this._rank32$IIB(this._v[i], 32, true); } }; /** */ BitVector.prototype.clear$ = function () { this._v.length = 0; this._r.length = 0; this._size = 0; this._size1 = 0; }; /** * @return {!number} */ BitVector.prototype.size$ = function () { return this._size; }; /** * @param {!boolean} b * @return {!number} */ BitVector.prototype.size$B = function (b) { return (b ? this._size1 : this._size - this._size1); }; /** * @param {!number} value */ BitVector.prototype.set$I = function (value) { this.set$IB(value, true); }; /** * @param {!number} value * @param {!boolean} flag */ BitVector.prototype.set$IB = function (value, flag) { /** @type {!number} */ var q; /** @type {!number} */ var r; /** @type {!number} */ var m; if (value >= this._size) { this._size = (value + 1 | 0); } q = (value / 32 | 0); r = (value % 32 | 0); while (q >= this._v.length) { this._v.push(0); } m = 0x1 << r; if (flag) { this._v[q] |= m; } else { this._v[q] &= ~ m; } }; /** * @param {!number} value * @return {!boolean} */ BitVector.prototype.get$I = function (value) { /** @type {!number} */ var q; /** @type {!number} */ var r; /** @type {!number} */ var m; if (value >= this._size) { throw new Error("BitVector.get() : range error"); } q = (value / 32 | 0); r = (value % 32 | 0); m = 0x1 << r; return !! (this._v[q] & m); }; /** * @param {!number} i * @return {!number} */ BitVector.prototype.rank$I = function (i) { return this.rank$IB(i, true); }; /** * @param {!number} i * @param {!boolean} b * @return {!number} */ BitVector.prototype.rank$IB = function (i, b) { /** @type {!number} */ var q_large; /** @type {!number} */ var q_small; /** @type {!number} */ var r; /** @type {!number} */ var rank; /** @type {!number} */ var begin; /** @type {!number} */ var j; if (i > this._size) { throw new Error("BitVector.rank() : range error"); } if (i === 0) { return 0; } i--; q_large = (Math.floor(i / 256) | 0); q_small = (Math.floor(i / 32) | 0); r = (Math.floor(i % 32) | 0); rank = (this._r[q_large] | 0); if (! b) { rank = q_large * 256 - rank; } begin = q_large * 8; for (j = begin; j < q_small; j++) { rank += this._rank32$IIB(this._v[j], 32, b); } rank += this._rank32$IIB(this._v[q_small], r + 1, b); return rank; }; /** * @param {!number} i * @return {!number} */ BitVector.prototype.select$I = function (i) { return this.select$IB(i, true); }; /** * @param {!number} i * @param {!boolean} b * @return {!number} */ BitVector.prototype.select$IB = function (i, b) { /** @type {!number} */ var left; /** @type {!number} */ var right; /** @type {!number} */ var pivot; /** @type {undefined|!number} */ var rank; /** @type {!number} */ var j; if (i >= (b ? this._size1 : this._size - this._size1)) { throw new Error("BitVector.select() : range error"); } left = 0; right = this._r.length; while (left < right) { pivot = Math.floor((left + right) / 2); rank = this._r[pivot]; if (! b) { rank = pivot * 256 - rank; } if (i < rank) { right = pivot; } else { left = pivot + 1; } } right--; if (b) { i -= (this._r[right] | 0); } else { i -= (right * 256 - this._r[right] | 0); } j = right * 8; while (1) { rank = this._rank32$IIB(this._v[j], 32, b); if (i < rank) { break; } j++; i -= (rank | 0); } return (j * 32 + this._select32$IIB(this._v[j], i, b) | 0); }; /** * @param {!number} x * @param {!number} i * @param {!boolean} b * @return {!number} */ BitVector.prototype._rank32$IIB = function (x, i, b) { if (! b) { x = ~ x; } x <<= 32 - i; x = ((x & 0xaaaaaaaa) >>> 1) + (x & 0x55555555); x = ((x & 0xcccccccc) >>> 2) + (x & 0x33333333); x = ((x & 0xf0f0f0f0) >>> 4) + (x & 0x0f0f0f0f); x = ((x & 0xff00ff00) >>> 8) + (x & 0x00ff00ff); x = ((x & 0xffff0000) >>> 16) + (x & 0x0000ffff); return x; }; /** * @param {!number} x * @param {!number} i * @param {!boolean} b * @return {!number} */ BitVector.prototype._select32$IIB = function (x, i, b) { /** @type {!number} */ var x1; /** @type {!number} */ var x2; /** @type {!number} */ var x3; /** @type {!number} */ var x4; /** @type {!number} */ var x5; /** @type {!number} */ var pos; /** @type {!number} */ var v5; /** @type {!number} */ var v4; /** @type {!number} */ var v3; /** @type {!number} */ var v2; /** @type {!number} */ var v1; /** @type {!number} */ var v0; if (! b) { x = ~ x; } x1 = ((x & 0xaaaaaaaa) >>> 1) + (x & 0x55555555); x2 = ((x1 & 0xcccccccc) >>> 2) + (x1 & 0x33333333); x3 = ((x2 & 0xf0f0f0f0) >>> 4) + (x2 & 0x0f0f0f0f); x4 = ((x3 & 0xff00ff00) >>> 8) + (x3 & 0x00ff00ff); x5 = ((x4 & 0xffff0000) >>> 16) + (x4 & 0x0000ffff); i++; pos = 0; v5 = x5 & 0xffffffff; if (i > v5) { i -= (v5 | 0); pos += 32; } v4 = x4 >>> pos & 0x0000ffff; if (i > v4) { i -= (v4 | 0); pos += 16; } v3 = x3 >>> pos & 0x000000ff; if (i > v3) { i -= (v3 | 0); pos += 8; } v2 = x2 >>> pos & 0x0000000f; if (i > v2) { i -= (v2 | 0); pos += 4; } v1 = x1 >>> pos & 0x00000003; if (i > v1) { i -= (v1 | 0); pos += 2; } v0 = x >>> pos & 0x00000001; if (i > v0) { i -= (v0 | 0); pos += 1; } return (pos | 0); }; /** * @return {!string} */ BitVector.prototype.dump$ = function () { /** @type {Array.} */ var contents; contents = [ ]; contents.push(Binary$dump32bitNumber$N(this._size)); contents.push(Binary$dump32bitNumberList$AN(this._v)); return contents.join(''); }; /** * @param {CompressionReport} report * @return {!string} */ BitVector.prototype.dump$LCompressionReport$ = function (report) { /** @type {Array.} */ var contents; contents = [ ]; contents.push(Binary$dump32bitNumber$N(this._size)); CompressionReport$add$LCompressionReport$II(report, 2, 2); contents.push(Binary$dump32bitNumberList$ANLCompressionReport$(this._v, report)); return contents.join(''); }; /** * @param {!string} data * @return {!number} */ BitVector.prototype.load$S = function (data) { return this.load$SI(data, 0); }; /** * @param {!string} data * @param {!number} offset * @return {!number} */ BitVector.prototype.load$SI = function (data, offset) { /** @type {LoadedNumberListResult} */ var result; /** @type {!number} */ var result$0; this._v.length = 0; this._r.length = 0; this._size = 0; this._size1 = 0; result$0 = data.charCodeAt(offset) * 65536 + data.charCodeAt(offset + 1); this._size = (result$0 | 0); result = Binary$load32bitNumberList$SI(data, offset + 2); this._v = result.result; this.build$(); return result.offset; }; /** * class WaveletMatrix extends Object * @constructor */ function WaveletMatrix() { } /** * @constructor */ function WaveletMatrix$() { /** @type {Array.} */ var _bv$0; /** @type {Array.} */ var _seps$0; this._range = ({ }); _bv$0 = this._bv = [ ]; _seps$0 = this._seps = [ ]; this._bitsize = 16; _bv$0.length = 0; _seps$0.length = 0; this._size = 0; }; WaveletMatrix$.prototype = new WaveletMatrix; /** * @return {!number} */ WaveletMatrix.prototype.bitsize$ = function () { return this._bitsize; }; /** * @param {!number} charCode */ WaveletMatrix.prototype.setMaxCharCode$I = function (charCode) { this._bitsize = (Math.ceil(Math.log(charCode) / 0.6931471805599453) | 0); }; /** */ WaveletMatrix.prototype.clear$ = function () { this._bv.length = 0; this._seps.length = 0; this._size = 0; }; /** * @param {!string} v */ WaveletMatrix.prototype.build$S = function (v) { /** @type {!number} */ var size; /** @type {!number} */ var bitsize; /** @type {!number} */ var i; /** @type {!number} */ var depth; /** @type {Object.} */ var range_tmp; /** @type {!number} */ var code; /** @type {!boolean} */ var bit; /** @type {!number} */ var key; /** @type {Object.} */ var range_rev; /** @type {!string} */ var range_key; /** @type {!number} */ var value; /** @type {!number} */ var pos0; /** @type {undefined|!number} */ var pos1; /** @type {!string} */ var range_rev_key; /** @type {!number} */ var begin; /** @type {undefined|!number} */ var end; /** @type {!number} */ var num0; /** @type {!number} */ var num1; this._bv.length = 0; this._seps.length = 0; this._size = 0; size = v.length; bitsize = this._bitsize; for (i = 0; i < bitsize; i++) { this._bv.push(new BitVector$()); this._seps.push(0); } this._size = (size | 0); for (i = 0; i < size; i++) { this._bv[0].set$IB(i, this._uint2bit$II(v.charCodeAt(i), 0)); } this._bv[0].build$(); this._seps[0] = this._bv[0].size$B(false); this._range["0"] = 0; this._range["1"] = this._seps[0]; depth = 1; while (depth < bitsize) { range_tmp = WaveletMatrix$_shallow_copy$HI(this._range); for (i = 0; i < size; i++) { code = v.charCodeAt(i); bit = this._uint2bit$II(code, depth); key = code >>> bitsize - depth; this._bv[depth].set$IB(range_tmp[key + ""], bit); range_tmp[key + ""]++; } this._bv[depth].build$(); this._seps[depth] = this._bv[depth].size$B(false); range_rev = ({ }); for (range_key in this._range) { value = this._range[range_key]; if (value != range_tmp[range_key]) { range_rev[value + ""] = range_key | 0; } } this._range = ({ }); pos0 = 0; pos1 = this._seps[depth]; for (range_rev_key in range_rev) { begin = range_rev_key | 0; value = range_rev[range_rev_key]; end = range_tmp[value + ""]; num0 = this._bv[depth].rank$IB(end, false) - this._bv[depth].rank$IB(begin, false); num1 = end - begin - num0; if (num0 > 0) { this._range[(value << 1) + ""] = (pos0 | 0); pos0 += num0; } if (num1 > 0) { this._range[(value << 1) + 1 + ""] = pos1; pos1 += (num1 | 0); } } depth++; } }; /** * @return {!number} */ WaveletMatrix.prototype.size$ = function () { return this._size; }; /** * @param {!number} c * @return {!number} */ WaveletMatrix.prototype.size$I = function (c) { return this.rank$II(this._size, c); }; /** * @param {!number} i * @return {!number} */ WaveletMatrix.prototype.get$I = function (i) { /** @type {!number} */ var value; /** @type {!number} */ var depth; /** @type {!boolean} */ var bit; if (i >= this._size) { throw new Error("WaveletMatrix.get() : range error"); } value = 0; depth = 0; while (depth < this._bitsize) { bit = this._bv[depth].get$I(i); i = this._bv[depth].rank$IB(i, bit); value <<= 1; if (bit) { i += this._seps[depth]; value += 1; } depth++; } return (value | 0); }; /** * @param {!number} i * @param {!number} c * @return {!number} */ WaveletMatrix.prototype.rank$II = function (i, c) { /** @type {undefined|!number} */ var begin; /** @type {!number} */ var end; /** @type {!number} */ var depth; /** @type {!boolean} */ var bit; if (i > this._size) { throw new Error("WaveletMatrix.rank(): range error"); } if (i === 0) { return 0; } begin = this._range[c + ""]; if (begin == null) { return 0; } end = i; depth = 0; while (depth < this._bitsize) { bit = this._uint2bit$II(c, depth); end = this._bv[depth].rank$IB(end, bit); if (bit) { end += this._seps[depth]; } depth++; } return (end - begin | 0); }; /** * @param {!number} i * @param {!number} c * @return {!number} */ WaveletMatrix.prototype.rank_less_than$II = function (i, c) { /** @type {!number} */ var begin; /** @type {!number} */ var end; /** @type {!number} */ var depth; /** @type {!number} */ var rlt; /** @type {!number} */ var rank0_begin; /** @type {!number} */ var rank0_end; /** @type {Array.} */ var _seps$0; if (i > this._size) { throw new Error("WaveletMatrix.rank_less_than(): range error"); } if (i === 0) { return 0; } begin = 0; end = i; depth = 0; rlt = 0; while (depth < this._bitsize) { rank0_begin = this._bv[depth].rank$IB(begin, false); rank0_end = this._bv[depth].rank$IB(end, false); if (this._uint2bit$II(c, depth)) { rlt += rank0_end - rank0_begin; begin += (_seps$0 = this._seps)[depth] - rank0_begin; end += _seps$0[depth] - rank0_end; } else { begin = rank0_begin; end = rank0_end; } depth++; } return (rlt | 0); }; /** * @return {!string} */ WaveletMatrix.prototype.dump$ = function () { /** @type {Array.} */ var contents; /** @type {!number} */ var i; /** @type {Array.} */ var range_contents; /** @type {!number} */ var counter; /** @type {!string} */ var key; contents = [ Binary$dump16bitNumber$I(this._bitsize), Binary$dump32bitNumber$N(this._size) ]; for (i = 0; i < this._bitsize; i++) { contents.push(this._bv[i].dump$()); } for (i = 0; i < this._bitsize; i++) { contents.push(Binary$dump32bitNumber$N(this._seps[i])); } range_contents = [ ]; counter = 0; for (key in this._range) { range_contents.push(Binary$dump32bitNumber$N(key | 0)); range_contents.push(Binary$dump32bitNumber$N(this._range[key])); counter++; } contents.push(Binary$dump32bitNumber$N(counter)); return contents.join('') + range_contents.join(''); }; /** * @param {CompressionReport} report * @return {!string} */ WaveletMatrix.prototype.dump$LCompressionReport$ = function (report) { /** @type {Array.} */ var contents; /** @type {!number} */ var i; /** @type {Array.} */ var range_contents; /** @type {!number} */ var counter; /** @type {!string} */ var key; contents = [ Binary$dump16bitNumber$I(this._bitsize), Binary$dump32bitNumber$N(this._size) ]; CompressionReport$add$LCompressionReport$II(report, 3, 3); for (i = 0; i < this._bitsize; i++) { contents.push(this._bv[i].dump$LCompressionReport$(report)); } for (i = 0; i < this._bitsize; i++) { contents.push(Binary$dump32bitNumber$N(this._seps[i])); CompressionReport$add$LCompressionReport$II(report, 2, 2); } range_contents = [ ]; counter = 0; for (key in this._range) { range_contents.push(Binary$dump32bitNumber$N(key | 0)); range_contents.push(Binary$dump32bitNumber$N(this._range[key])); CompressionReport$add$LCompressionReport$II(report, 4, 4); counter++; } CompressionReport$add$LCompressionReport$II(report, 2, 2); contents.push(Binary$dump32bitNumber$N(counter)); return contents.join('') + range_contents.join(''); }; /** * @param {!string} data * @return {!number} */ WaveletMatrix.prototype.load$S = function (data) { return this.load$SI(data, 0); }; /** * @param {!string} data * @param {!number} offset * @return {!number} */ WaveletMatrix.prototype.load$SI = function (data, offset) { /** @type {!number} */ var i; /** @type {BitVector} */ var bit_vector; /** @type {!number} */ var range_size; /** @type {!number} */ var value; /** @type {!number} */ var offset$0; /** @type {!number} */ var result$0; /** @type {!number} */ var result$1; /** @type {!number} */ var result$2; this._bv.length = 0; this._seps.length = 0; this._size = 0; offset$0 = offset++; this._bitsize = (data.charCodeAt(offset$0) | 0); result$0 = data.charCodeAt(offset) * 65536 + data.charCodeAt(offset + 1); this._size = (result$0 | 0); offset += 2; for (i = 0; i < this._bitsize; i++) { bit_vector = new BitVector$(); offset = bit_vector.load$SI(data, offset); this._bv.push(bit_vector); } for (i = 0; i < this._bitsize; (i++, offset += 2)) { this._seps.push(Binary$load32bitNumber$SI(data, offset)); } result$1 = data.charCodeAt(offset) * 65536 + data.charCodeAt(offset + 1); range_size = result$1; offset += 2; for (i = 0; i < range_size; (i++, offset += 4)) { result$2 = data.charCodeAt(offset) * 65536 + data.charCodeAt(offset + 1); value = Binary$load32bitNumber$SI(data, offset + 2); this._range[result$2 + ""] = (value | 0); } return offset; }; /** * @param {Object.} input * @return {Object.} */ WaveletMatrix._shallow_copy$HI = function (input) { /** @type {Object.} */ var result; /** @type {!string} */ var key; result = ({ }); for (key in input) { result[key] = input[key]; } return result; }; var WaveletMatrix$_shallow_copy$HI = WaveletMatrix._shallow_copy$HI; /** * @param {!number} c * @param {!number} i * @return {!boolean} */ WaveletMatrix.prototype._uint2bit$II = function (c, i) { return (c >>> this._bitsize - 1 - i & 0x1) === 0x1; }; /** * class BurrowsWheelerTransform extends Object * @constructor */ function BurrowsWheelerTransform() { } /** * @constructor */ function BurrowsWheelerTransform$() { this._str = ""; this._size = 0; this._head = 0; this._suffixarray = [ ]; }; BurrowsWheelerTransform$.prototype = new BurrowsWheelerTransform; /** * @param {BurrowsWheelerTransform} $this * @return {!number} */ BurrowsWheelerTransform.size$LBurrowsWheelerTransform$ = function ($this) { return $this._size; }; var BurrowsWheelerTransform$size$LBurrowsWheelerTransform$ = BurrowsWheelerTransform.size$LBurrowsWheelerTransform$; /** * @param {BurrowsWheelerTransform} $this * @return {!number} */ BurrowsWheelerTransform.head$LBurrowsWheelerTransform$ = function ($this) { return $this._head; }; var BurrowsWheelerTransform$head$LBurrowsWheelerTransform$ = BurrowsWheelerTransform.head$LBurrowsWheelerTransform$; /** * @param {BurrowsWheelerTransform} $this */ BurrowsWheelerTransform.clear$LBurrowsWheelerTransform$ = function ($this) { $this._str = ""; $this._size = 0; $this._head = 0; $this._suffixarray.length = 0; }; var BurrowsWheelerTransform$clear$LBurrowsWheelerTransform$ = BurrowsWheelerTransform.clear$LBurrowsWheelerTransform$; /** * @param {BurrowsWheelerTransform} $this * @param {!string} str */ BurrowsWheelerTransform.build$LBurrowsWheelerTransform$S = function ($this, str) { /** @type {!string} */ var _str$0; /** @type {Array.} */ var _suffixarray$0; _str$0 = $this._str = str; $this._size = _str$0.length; _suffixarray$0 = $this._suffixarray = SAIS$make$S(str); $this._head = (_suffixarray$0.indexOf(0) | 0); }; var BurrowsWheelerTransform$build$LBurrowsWheelerTransform$S = BurrowsWheelerTransform.build$LBurrowsWheelerTransform$S; /** * @param {BurrowsWheelerTransform} $this * @param {!number} i * @return {!string} */ BurrowsWheelerTransform.get$LBurrowsWheelerTransform$I = function ($this, i) { /** @type {!number} */ var size; /** @type {!number} */ var index; size = $this._size; if (i >= size) { throw new Error("BurrowsWheelerTransform.get() : range error"); } index = ($this._suffixarray[i] + size - 1) % size; return $this._str.charAt(index); }; var BurrowsWheelerTransform$get$LBurrowsWheelerTransform$I = BurrowsWheelerTransform.get$LBurrowsWheelerTransform$I; /** * @param {BurrowsWheelerTransform} $this * @return {!string} */ BurrowsWheelerTransform.get$LBurrowsWheelerTransform$ = function ($this) { /** @type {Array.} */ var str; /** @type {!number} */ var size; /** @type {!number} */ var i; str = [ ]; size = $this._size; for (i = 0; i < size; i++) { str.push(BurrowsWheelerTransform$get$LBurrowsWheelerTransform$I($this, i)); } return str.join(""); }; var BurrowsWheelerTransform$get$LBurrowsWheelerTransform$ = BurrowsWheelerTransform.get$LBurrowsWheelerTransform$; /** * @param {BurrowsWheelerTransform} $this * @param {!string} replace * @return {!string} */ BurrowsWheelerTransform.get$LBurrowsWheelerTransform$S = function ($this, replace) { /** @type {!string} */ var result; result = BurrowsWheelerTransform$get$LBurrowsWheelerTransform$($this); return result.replace(BurrowsWheelerTransform.END_MARKER, replace); }; var BurrowsWheelerTransform$get$LBurrowsWheelerTransform$S = BurrowsWheelerTransform.get$LBurrowsWheelerTransform$S; /** * class OArray extends Object * @constructor */ function OArray() { } /** * @constructor * @param {Array.} array */ function OArray$AI(array) { this.array = array; this.offset = 0; }; OArray$AI.prototype = new OArray; /** * @constructor * @param {Array.} array * @param {!number} offset */ function OArray$AII(array, offset) { this.array = array; this.offset = offset; }; OArray$AII.prototype = new OArray; /** * @param {OArray} $this * @param {!number} index * @return {!number} */ OArray.get$LOArray$I = function ($this, index) { return $this.array[index + $this.offset]; }; var OArray$get$LOArray$I = OArray.get$LOArray$I; /** * @param {OArray} $this * @param {!number} index * @param {!number} value */ OArray.set$LOArray$II = function ($this, index, value) { $this.array[index + $this.offset] = value; }; var OArray$set$LOArray$II = OArray.set$LOArray$II; /** * @param {OArray} $this * @param {!number} index * @return {!boolean} */ OArray.isS$LOArray$I = function ($this, index) { /** @type {Array.} */ var array$0; /** @type {!number} */ var offset$0; return (array$0 = $this.array)[index + (offset$0 = $this.offset)] < array$0[index + offset$0 + 1]; }; var OArray$isS$LOArray$I = OArray.isS$LOArray$I; /** * @param {OArray} $this * @param {!number} index1 * @param {!number} index2 * @return {!boolean} */ OArray.compare$LOArray$II = function ($this, index1, index2) { /** @type {Array.} */ var array$0; /** @type {!number} */ var offset$0; return (array$0 = $this.array)[index1 + (offset$0 = $this.offset)] == array$0[index2 + offset$0]; }; var OArray$compare$LOArray$II = OArray.compare$LOArray$II; /** * class SAIS extends Object * @constructor */ function SAIS() { } /** * @constructor */ function SAIS$() { }; SAIS$.prototype = new SAIS; /** * @param {BitVector} t * @param {!number} i * @return {!boolean} */ SAIS._isLMS$LBitVector$I = function (t, i) { return i > 0 && t.get$I(i) && ! t.get$I(i - 1); }; var SAIS$_isLMS$LBitVector$I = SAIS._isLMS$LBitVector$I; /** * @param {OArray} s * @param {Array.} bkt * @param {!number} n * @param {!number} K * @param {!boolean} end */ SAIS._getBuckets$LOArray$AIIIB = function (s, bkt, n, K, end) { /** @type {!number} */ var sum; /** @type {!number} */ var i; sum = 0; for (i = 0; i <= K; i++) { bkt[i] = 0; } for (i = 0; i < n; i++) { bkt[OArray$get$LOArray$I(s, i)]++; } for (i = 0; i <= K; i++) { sum += bkt[i]; bkt[i] = ((end ? sum : sum - bkt[i]) | 0); } }; var SAIS$_getBuckets$LOArray$AIIIB = SAIS._getBuckets$LOArray$AIIIB; /** * @param {BitVector} t * @param {Array.} SA * @param {OArray} s * @param {Array.} bkt * @param {!number} n * @param {!number} K * @param {!boolean} end */ SAIS._induceSAl$LBitVector$AILOArray$AIIIB = function (t, SA, s, bkt, n, K, end) { /** @type {!number} */ var i; /** @type {!number} */ var j; SAIS$_getBuckets$LOArray$AIIIB(s, bkt, n, K, end); for (i = 0; i < n; i++) { j = SA[i] - 1; if (j >= 0 && ! t.get$I(j)) { SA[bkt[OArray$get$LOArray$I(s, j)]++] = (j | 0); } } }; var SAIS$_induceSAl$LBitVector$AILOArray$AIIIB = SAIS._induceSAl$LBitVector$AILOArray$AIIIB; /** * @param {BitVector} t * @param {Array.} SA * @param {OArray} s * @param {Array.} bkt * @param {!number} n * @param {!number} K * @param {!boolean} end */ SAIS._induceSAs$LBitVector$AILOArray$AIIIB = function (t, SA, s, bkt, n, K, end) { /** @type {!number} */ var i; /** @type {!number} */ var j; SAIS$_getBuckets$LOArray$AIIIB(s, bkt, n, K, end); for (i = n - 1; i >= 0; i--) { j = SA[i] - 1; if (j >= 0 && t.get$I(j)) { SA[-- bkt[OArray$get$LOArray$I(s, j)]] = (j | 0); } } }; var SAIS$_induceSAs$LBitVector$AILOArray$AIIIB = SAIS._induceSAs$LBitVector$AILOArray$AIIIB; /** * @param {!string} source * @return {Array.} */ SAIS.make$S = function (source) { /** @type {Array.} */ var charCodes; /** @type {!number} */ var maxCode; /** @type {!number} */ var i; /** @type {!number} */ var code; /** @type {Array.} */ var SA; /** @type {OArray} */ var s; charCodes = [ ]; charCodes.length = source.length; maxCode = 0; for (i = 0; i < source.length; i++) { code = source.charCodeAt(i); charCodes[i] = (code | 0); maxCode = (code > maxCode ? code : maxCode); } SA = [ ]; SA.length = source.length; s = ({offset: 0, array: charCodes}); SAIS$_make$LOArray$AIII(s, SA, source.length, maxCode); return SA; }; var SAIS$make$S = SAIS.make$S; /** * @param {OArray} s * @param {Array.} SA * @param {!number} n * @param {!number} K */ SAIS._make$LOArray$AIII = function (s, SA, n, K) { /** @type {BitVector} */ var t; /** @type {!number} */ var i; /** @type {Array.} */ var bkt; /** @type {!number} */ var n1; /** @type {!number} */ var name; /** @type {!number} */ var prev; /** @type {undefined|!number} */ var pos; /** @type {!boolean} */ var diff; /** @type {!number} */ var d; /** @type {!number} */ var j; /** @type {Array.} */ var SA1; /** @type {OArray} */ var s1; /** @type {!number} */ var i$0; /** @type {!number} */ var index$0; t = new BitVector$(); t.set$IB(n - 2, false); t.set$IB(n - 1, true); for (i = n - 3; i >= 0; i--) { t.set$IB(i, OArray$isS$LOArray$I(s, i) || OArray$compare$LOArray$II(s, i, i + 1) && t.get$I(i + 1)); } bkt = [ ]; bkt.length = K + 1; SAIS$_getBuckets$LOArray$AIIIB(s, bkt, n, K, true); for (i = 0; i < n; i++) { SA[i] = -1; } for (i = 1; i < n; i++) { if (SAIS$_isLMS$LBitVector$I(t, i)) { SA[-- bkt[OArray$get$LOArray$I(s, i)]] = (i | 0); } } SAIS$_induceSAl$LBitVector$AILOArray$AIIIB(t, SA, s, bkt, n, K, false); SAIS$_induceSAs$LBitVector$AILOArray$AIIIB(t, SA, s, bkt, n, K, true); n1 = 0; for (i = 0; i < n; i++) { i$0 = SA[i]; if (i$0 > 0 && t.get$I(i$0) && ! t.get$I(i$0 - 1)) { SA[n1++] = SA[i]; } } for (i = n1; i < n; i++) { SA[i] = -1; } name = 0; prev = -1; for (i = 0; i < n1; i++) { pos = SA[i]; diff = false; for (d = 0; d < n; d++) { if (prev === -1 || ! OArray$compare$LOArray$II(s, pos + d, prev + d) || t.get$I(pos + d) !== t.get$I(prev + d)) { diff = true; break; } else { if (d > 0 && (SAIS$_isLMS$LBitVector$I(t, pos + d) || SAIS$_isLMS$LBitVector$I(t, prev + d))) { break; } } } if (diff) { name++; prev = pos; } pos = ((pos % 2 === 0 ? pos / 2 : (pos - 1) / 2) | 0); SA[n1 + pos] = (name - 1 | 0); } for ((i = n - 1, j = n - 1); i >= n1; i--) { if (SA[i] >= 0) { SA[j--] = SA[i]; } } SA1 = SA; s1 = ({offset: n - n1, array: SA}); if (name < n1) { SAIS$_make$LOArray$AIII(s1, SA1, n1, name - 1); } else { for (i = 0; i < n1; i++) { SA1[OArray$get$LOArray$I(s1, i)] = (i | 0); } } bkt = [ ]; bkt.length = K + 1; SAIS$_getBuckets$LOArray$AIIIB(s, bkt, n, K, true); for ((i = 1, j = 0); i < n; i++) { if (SAIS$_isLMS$LBitVector$I(t, i)) { OArray$set$LOArray$II(s1, j++, i); } } for (i = 0; i < n1; i++) { index$0 = SA1[i]; SA1[i] = s1.array[index$0 + s1.offset]; } for (i = n1; i < n; i++) { SA[i] = -1; } for (i = n1 - 1; i >= 0; i--) { j = SA[i]; SA[i] = -1; SA[-- bkt[OArray$get$LOArray$I(s, j)]] = (j | 0); } SAIS$_induceSAl$LBitVector$AILOArray$AIIIB(t, SA, s, bkt, n, K, false); SAIS$_induceSAs$LBitVector$AILOArray$AIIIB(t, SA, s, bkt, n, K, true); }; var SAIS$_make$LOArray$AIII = SAIS._make$LOArray$AIII; OktaviaSearch._stemmer = null; OktaviaSearch._instance = null; $__jsx_lazy_init(Oktavia, "eof", function () { return String.fromCharCode(0); }); $__jsx_lazy_init(Oktavia, "eob", function () { return String.fromCharCode(1); }); $__jsx_lazy_init(Oktavia, "unknown", function () { return String.fromCharCode(3); }); Binary._base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; $__jsx_lazy_init(Binary, "_base64DecodeChars", function () { return [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 ]; }); $__jsx_lazy_init(Style, "console", function () { return ({ 'title': [ '\x1B[32m\x1b[4m', '\x1B[39m\x1b[0m' ], 'url': [ '\x1B[34m', '\x1B[39m' ], 'hit': [ '\x1B[4m', '\x1B[0m' ], 'del': [ '\x1B[9m', '\x1B[0m' ], 'summary': [ '\x1B[90m', '\x1B[39m' ] }); }); $__jsx_lazy_init(Style, "html", function () { return ({ 'title': [ '', '' ], 'url': [ '', '' ], 'hit': [ '', '' ], 'del': [ '', '' ], 'summary': [ '', '' ] }); }); $__jsx_lazy_init(Style, "ignore", function () { return ({ 'tilte': [ '', '' ], 'url': [ '', '' ], 'hit': [ '', '' ], 'del': [ '', '' ], 'summary': [ '', '' ] }); }); GermanStemmer.serialVersionUID = 1; $__jsx_lazy_init(GermanStemmer, "methodObject", function () { return new GermanStemmer$(); }); $__jsx_lazy_init(GermanStemmer, "a_0", function () { return [ new Among$SII("", -1, 6), new Among$SII("U", 0, 2), new Among$SII("Y", 0, 1), new Among$SII("\u00E4", 0, 3), new Among$SII("\u00F6", 0, 4), new Among$SII("\u00FC", 0, 5) ]; }); $__jsx_lazy_init(GermanStemmer, "a_1", function () { return [ new Among$SII("e", -1, 2), new Among$SII("em", -1, 1), new Among$SII("en", -1, 2), new Among$SII("ern", -1, 1), new Among$SII("er", -1, 1), new Among$SII("s", -1, 3), new Among$SII("es", 5, 2) ]; }); $__jsx_lazy_init(GermanStemmer, "a_2", function () { return [ new Among$SII("en", -1, 1), new Among$SII("er", -1, 1), new Among$SII("st", -1, 2), new Among$SII("est", 2, 1) ]; }); $__jsx_lazy_init(GermanStemmer, "a_3", function () { return [ new Among$SII("ig", -1, 1), new Among$SII("lich", -1, 1) ]; }); $__jsx_lazy_init(GermanStemmer, "a_4", function () { return [ new Among$SII("end", -1, 1), new Among$SII("ig", -1, 2), new Among$SII("ung", -1, 1), new Among$SII("lich", -1, 3), new Among$SII("isch", -1, 2), new Among$SII("ik", -1, 2), new Among$SII("heit", -1, 3), new Among$SII("keit", -1, 4) ]; }); $__jsx_lazy_init(GermanStemmer, "g_v", function () { return [ 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 ]; }); $__jsx_lazy_init(GermanStemmer, "g_s_ending", function () { return [ 117, 30, 5 ]; }); $__jsx_lazy_init(GermanStemmer, "g_st_ending", function () { return [ 117, 30, 4 ]; }); $__jsx_lazy_init(_Common, "buffers", function () { return [ "comment", "sgmlDecl", "textNode", "tagName", "doctype", "procInstName", "procInstBody", "entity", "attribName", "attribValue", "cdata", "script" ]; }); $__jsx_lazy_init(_Common, "EVENTS", function () { return [ "text", "processinginstruction", "sgmldeclaration", "doctype", "comment", "attribute", "opentag", "closetag", "opencdata", "cdata", "clo_State.CDATA", "error", "end", "ready", "script", "opennamespace", "closenamespace" ]; }); _Common.MAX_BUFFER_LENGTH = 65536; _State.BEGIN = 1; _State.TEXT = 2; _State.TEXT_ENTITY = 3; _State.OPEN_WAKA = 4; _State.SGML_DECL = 5; _State.SGML_DECL_QUOTED = 6; _State.DOCTYPE = 7; _State.DOCTYPE_QUOTED = 8; _State.DOCTYPE_DTD = 9; _State.DOCTYPE_DTD_QUOTED = 10; _State.COMMENT_STARTING = 11; _State.COMMENT = 12; _State.COMMENT_ENDING = 13; _State.COMMENT_ENDED = 14; _State.CDATA = 15; _State.CDATA_ENDING = 16; _State.CDATA_ENDING_2 = 17; _State.PROC_INST = 18; _State.PROC_INST_BODY = 19; _State.PROC_INST_ENDING = 20; _State.OPEN_TAG = 21; _State.OPEN_TAG_SLASH = 22; _State.ATTRIB = 23; _State.ATTRIB_NAME = 24; _State.ATTRIB_NAME_SAW_WHITE = 25; _State.ATTRIB_VALUE = 26; _State.ATTRIB_VALUE_QUOTED = 27; _State.ATTRIB_VALUE_UNQUOTED = 28; _State.ATTRIB_VALUE_ENTITY_Q = 29; _State.ATTRIB_VALUE_ENTITY_U = 30; _State.CLOSE_TAG = 31; _State.CLOSE_TAG_SAW_WHITE = 32; _State.SCRIPT = 33; _State.SCRIPT_ENDING = 34; $__jsx_lazy_init(_Entities, "_entities", function () { return ({ "amp": "&", "gt": ">", "lt": "<", "quot": "\"", "apos": "'", "AElig": 198, "Aacute": 193, "Acirc": 194, "Agrave": 192, "Aring": 197, "Atilde": 195, "Auml": 196, "Ccedil": 199, "ETH": 208, "Eacute": 201, "Ecirc": 202, "Egrave": 200, "Euml": 203, "Iacute": 205, "Icirc": 206, "Igrave": 204, "Iuml": 207, "Ntilde": 209, "Oacute": 211, "Ocirc": 212, "Ograve": 210, "Oslash": 216, "Otilde": 213, "Ouml": 214, "THORN": 222, "Uacute": 218, "Ucirc": 219, "Ugrave": 217, "Uuml": 220, "Yacute": 221, "aacute": 225, "acirc": 226, "aelig": 230, "agrave": 224, "aring": 229, "atilde": 227, "auml": 228, "ccedil": 231, "eacute": 233, "ecirc": 234, "egrave": 232, "eth": 240, "euml": 235, "iacute": 237, "icirc": 238, "igrave": 236, "iuml": 239, "ntilde": 241, "oacute": 243, "ocirc": 244, "ograve": 242, "oslash": 248, "otilde": 245, "ouml": 246, "szlig": 223, "thorn": 254, "uacute": 250, "ucirc": 251, "ugrave": 249, "uuml": 252, "yacute": 253, "yuml": 255, "copy": 169, "reg": 174, "nbsp": 160, "iexcl": 161, "cent": 162, "pound": 163, "curren": 164, "yen": 165, "brvbar": 166, "sect": 167, "uml": 168, "ordf": 170, "laquo": 171, "not": 172, "shy": 173, "macr": 175, "deg": 176, "plusmn": 177, "sup1": 185, "sup2": 178, "sup3": 179, "acute": 180, "micro": 181, "para": 182, "middot": 183, "cedil": 184, "ordm": 186, "raquo": 187, "frac14": 188, "frac12": 189, "frac34": 190, "iquest": 191, "times": 215, "divide": 247, "OElig": 338, "oelig": 339, "Scaron": 352, "scaron": 353, "Yuml": 376, "fnof": 402, "circ": 710, "tilde": 732, "Alpha": 913, "Beta": 914, "Gamma": 915, "Delta": 916, "Epsilon": 917, "Zeta": 918, "Eta": 919, "Theta": 920, "Iota": 921, "Kappa": 922, "Lambda": 923, "Mu": 924, "Nu": 925, "Xi": 926, "Omicron": 927, "Pi": 928, "Rho": 929, "Sigma": 931, "Tau": 932, "Upsilon": 933, "Phi": 934, "Chi": 935, "Psi": 936, "Omega": 937, "alpha": 945, "beta": 946, "gamma": 947, "delta": 948, "epsilon": 949, "zeta": 950, "eta": 951, "theta": 952, "iota": 953, "kappa": 954, "lambda": 955, "mu": 956, "nu": 957, "xi": 958, "omicron": 959, "pi": 960, "rho": 961, "sigmaf": 962, "sigma": 963, "tau": 964, "upsilon": 965, "phi": 966, "chi": 967, "psi": 968, "omega": 969, "thetasym": 977, "upsih": 978, "piv": 982, "ensp": 8194, "emsp": 8195, "thinsp": 8201, "zwnj": 8204, "zwj": 8205, "lrm": 8206, "rlm": 8207, "ndash": 8211, "mdash": 8212, "lsquo": 8216, "rsquo": 8217, "sbquo": 8218, "ldquo": 8220, "rdquo": 8221, "bdquo": 8222, "dagger": 8224, "Dagger": 8225, "bull": 8226, "hellip": 8230, "permil": 8240, "prime": 8242, "Prime": 8243, "lsaquo": 8249, "rsaquo": 8250, "oline": 8254, "frasl": 8260, "euro": 8364, "image": 8465, "weierp": 8472, "real": 8476, "trade": 8482, "alefsym": 8501, "larr": 8592, "uarr": 8593, "rarr": 8594, "darr": 8595, "harr": 8596, "crarr": 8629, "lArr": 8656, "uArr": 8657, "rArr": 8658, "dArr": 8659, "hArr": 8660, "forall": 8704, "part": 8706, "exist": 8707, "empty": 8709, "nabla": 8711, "isin": 8712, "notin": 8713, "ni": 8715, "prod": 8719, "sum": 8721, "minus": 8722, "lowast": 8727, "radic": 8730, "prop": 8733, "infin": 8734, "ang": 8736, "and": 8743, "or": 8744, "cap": 8745, "cup": 8746, "int": 8747, "there4": 8756, "sim": 8764, "cong": 8773, "asymp": 8776, "ne": 8800, "equiv": 8801, "le": 8804, "ge": 8805, "sub": 8834, "sup": 8835, "nsub": 8836, "sube": 8838, "supe": 8839, "oplus": 8853, "otimes": 8855, "perp": 8869, "sdot": 8901, "lceil": 8968, "rceil": 8969, "lfloor": 8970, "rfloor": 8971, "lang": 9001, "rang": 9002, "loz": 9674, "spades": 9824, "clubs": 9827, "hearts": 9829, "diams": 9830 }); }); BitVector.SMALL_BLOCK_SIZE = 32; BitVector.LARGE_BLOCK_SIZE = 256; BitVector.BLOCK_RATE = 8; $__jsx_lazy_init(BurrowsWheelerTransform, "END_MARKER", function () { return String.fromCharCode(0); }); var $__jsx_classMap = { "tool/web/oktavia-german-search.jsx": { _Main: _Main, _Main$: _Main$ }, "tool/web/oktavia-search.jsx": { _Result: _Result, _Result$SSSI: _Result$SSSI, _Proposal: _Proposal, _Proposal$SSI: _Proposal$SSI, OktaviaSearch: OktaviaSearch, OktaviaSearch$I: OktaviaSearch$I, _Main: _Main$0, _Main$: _Main$0$ }, "src/oktavia.jsx": { Oktavia: Oktavia, Oktavia$: Oktavia$ }, "src/binary-util.jsx": { Binary: Binary, Binary$: Binary$, LoadedStringResult: LoadedStringResult, LoadedStringResult$SI: LoadedStringResult$SI, LoadedStringListResult: LoadedStringListResult, LoadedStringListResult$SI: LoadedStringListResult$SI, LoadedStringListMapResult: LoadedStringListMapResult, LoadedStringListMapResult$SI: LoadedStringListMapResult$SI, LoadedNumberListResult: LoadedNumberListResult, LoadedNumberListResult$SI: LoadedNumberListResult$SI, CompressionReport: CompressionReport, CompressionReport$: CompressionReport$ }, "src/query.jsx": { Query: Query, Query$: Query$ }, "src/query-string-parser.jsx": { QueryStringParser: QueryStringParser, QueryStringParser$: QueryStringParser$ }, "src/search-result.jsx": { Proposal: Proposal, Proposal$II: Proposal$II, Position: Position, Position$SIB: Position$SIB, SearchUnit: SearchUnit, SearchUnit$I: SearchUnit$I, SingleResult: SingleResult, SingleResult$: SingleResult$, SingleResult$SBB: SingleResult$SBB, SearchSummary: SearchSummary, SearchSummary$: SearchSummary$, SearchSummary$LOktavia$: SearchSummary$LOktavia$ }, "src/style.jsx": { Style: Style, Style$S: Style$S, _HTMLHandler: _HTMLHandler, _HTMLHandler$HASB: _HTMLHandler$HASB }, "src/stemmer/stemmer.jsx": { Stemmer: Stemmer, Stemmer$: Stemmer$ }, "src/stemmer/base-stemmer.jsx": { BaseStemmer: BaseStemmer, BaseStemmer$: BaseStemmer$ }, "src/stemmer/german-stemmer.jsx": { GermanStemmer: GermanStemmer, GermanStemmer$: GermanStemmer$ }, "src/stemmer/among.jsx": { Among: Among, Among$SII: Among$SII, Among$SIIF$LBaseStemmer$B$LBaseStemmer$: Among$SIIF$LBaseStemmer$B$LBaseStemmer$ }, "src/metadata.jsx": { Metadata: Metadata, Metadata$LOktavia$: Metadata$LOktavia$, Section: Section, Section$LOktavia$: Section$LOktavia$, Splitter: Splitter, Splitter$LOktavia$: Splitter$LOktavia$, Splitter$LOktavia$S: Splitter$LOktavia$S, Table: Table, Table$LOktavia$AS: Table$LOktavia$AS, Block: Block, Block$LOktavia$: Block$LOktavia$ }, "src/fm-index.jsx": { FMIndex: FMIndex, FMIndex$: FMIndex$ }, "src/sax.jsx": { Tag: Tag, Tag$S: Tag$S, _Common: _Common, _Common$: _Common$, _State: _State, _State$: _State$, SAXHandler: SAXHandler, SAXHandler$: SAXHandler$, SAXParser: SAXParser, SAXParser$LSAXHandler$: SAXParser$LSAXHandler$, SAXParser$LSAXHandler$B: SAXParser$LSAXHandler$B, Char: Char, Char$: Char$, _Entities: _Entities, _Entities$: _Entities$ }, "src/bit-vector.jsx": { BitVector: BitVector, BitVector$: BitVector$ }, "src/wavelet-matrix.jsx": { WaveletMatrix: WaveletMatrix, WaveletMatrix$: WaveletMatrix$ }, "src/burrows-wheeler-transform.jsx": { BurrowsWheelerTransform: BurrowsWheelerTransform, BurrowsWheelerTransform$: BurrowsWheelerTransform$ }, "src/sais.jsx": { OArray: OArray, OArray$AI: OArray$AI, OArray$AII: OArray$AII, SAIS: SAIS, SAIS$: SAIS$ } }; /** * launches _Main.main(:string[]):void invoked by jsx --run|--executable */ JSX.runMain = function (sourceFile, args) { var module = JSX.require(sourceFile); if (! module) { throw new ReferenceError("entry point module not found in " + sourceFile); } if (! module._Main) { throw new ReferenceError("entry point _Main not found in " + sourceFile); } if (! module._Main.main$AS) { throw new ReferenceError("entry point _Main.main(:string[]):void not found in " + sourceFile); } module._Main.main$AS(args); }; /** * launches _Test#test*():void invoked by jsx --test */ JSX.runTests = function (sourceFile, tests) { var module = JSX.require(sourceFile); var testClass = module._Test$; if (!testClass) return; // skip if there's no test class if(tests.length === 0) { var p = testClass.prototype; for (var m in p) { if (p[m] instanceof Function && /^test.*[$]$/.test(m)) { tests.push(m); } } } else { // set as process arguments tests = tests.map(function (name) { return name + "$"; // mangle for function test*():void }); } var testCase = new testClass(); if (testCase.beforeClass$AS != null) testCase.beforeClass$AS(tests); for (var i = 0; i < tests.length; ++i) { (function (method) { if (method in testCase) { testCase.run$SF$V$(method, function() { testCase[method](); }); } else { throw new ReferenceError("No such test method: " + method); } }(tests[i])); } if (testCase.afterClass$ != null) testCase.afterClass$(); }; /** * call a function on load/DOMContentLoaded */ function $__jsx_onload (event) { window.removeEventListener("load", $__jsx_onload); document.removeEventListener("DOMContentLoaded", $__jsx_onload); JSX.runMain("tool/web/oktavia-german-search.jsx", []) } window.addEventListener("load", $__jsx_onload); document.addEventListener("DOMContentLoaded", $__jsx_onload); })(JSX);