summaryrefslogtreecommitdiffstats
path: root/sphinx/search
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 17:25:40 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 17:25:40 +0000
commitcf7da1843c45a4c2df7a749f7886a2d2ba0ee92a (patch)
tree18dcde1a8d1f5570a77cd0c361de3b490d02c789 /sphinx/search
parentInitial commit. (diff)
downloadsphinx-cf7da1843c45a4c2df7a749f7886a2d2ba0ee92a.tar.xz
sphinx-cf7da1843c45a4c2df7a749f7886a2d2ba0ee92a.zip
Adding upstream version 7.2.6.upstream/7.2.6upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sphinx/search')
-rw-r--r--sphinx/search/__init__.py556
-rw-r--r--sphinx/search/da.py120
-rw-r--r--sphinx/search/de.py303
-rw-r--r--sphinx/search/en.py220
-rw-r--r--sphinx/search/es.py363
-rw-r--r--sphinx/search/fi.py113
-rw-r--r--sphinx/search/fr.py199
-rw-r--r--sphinx/search/hu.py226
-rw-r--r--sphinx/search/it.py316
-rw-r--r--sphinx/search/ja.py531
-rw-r--r--sphinx/search/minified-js/base-stemmer.js1
-rw-r--r--sphinx/search/minified-js/danish-stemmer.js1
-rw-r--r--sphinx/search/minified-js/dutch-stemmer.js1
-rw-r--r--sphinx/search/minified-js/finnish-stemmer.js1
-rw-r--r--sphinx/search/minified-js/french-stemmer.js1
-rw-r--r--sphinx/search/minified-js/german-stemmer.js1
-rw-r--r--sphinx/search/minified-js/hungarian-stemmer.js1
-rw-r--r--sphinx/search/minified-js/italian-stemmer.js1
-rw-r--r--sphinx/search/minified-js/norwegian-stemmer.js1
-rw-r--r--sphinx/search/minified-js/porter-stemmer.js1
-rw-r--r--sphinx/search/minified-js/portuguese-stemmer.js1
-rw-r--r--sphinx/search/minified-js/romanian-stemmer.js1
-rw-r--r--sphinx/search/minified-js/russian-stemmer.js1
-rw-r--r--sphinx/search/minified-js/spanish-stemmer.js1
-rw-r--r--sphinx/search/minified-js/swedish-stemmer.js1
-rw-r--r--sphinx/search/minified-js/turkish-stemmer.js1
-rw-r--r--sphinx/search/nl.py127
-rw-r--r--sphinx/search/no.py202
-rw-r--r--sphinx/search/non-minified-js/base-stemmer.js294
-rw-r--r--sphinx/search/non-minified-js/danish-stemmer.js310
-rw-r--r--sphinx/search/non-minified-js/dutch-stemmer.js685
-rw-r--r--sphinx/search/non-minified-js/finnish-stemmer.js790
-rw-r--r--sphinx/search/non-minified-js/french-stemmer.js1325
-rw-r--r--sphinx/search/non-minified-js/german-stemmer.js577
-rw-r--r--sphinx/search/non-minified-js/hungarian-stemmer.js711
-rw-r--r--sphinx/search/non-minified-js/italian-stemmer.js996
-rw-r--r--sphinx/search/non-minified-js/norwegian-stemmer.js261
-rw-r--r--sphinx/search/non-minified-js/porter-stemmer.js749
-rw-r--r--sphinx/search/non-minified-js/portuguese-stemmer.js914
-rw-r--r--sphinx/search/non-minified-js/romanian-stemmer.js872
-rw-r--r--sphinx/search/non-minified-js/russian-stemmer.js624
-rw-r--r--sphinx/search/non-minified-js/spanish-stemmer.js990
-rw-r--r--sphinx/search/non-minified-js/swedish-stemmer.js265
-rw-r--r--sphinx/search/non-minified-js/turkish-stemmer.js2439
-rw-r--r--sphinx/search/pt.py261
-rw-r--r--sphinx/search/ro.py22
-rw-r--r--sphinx/search/ru.py251
-rw-r--r--sphinx/search/sv.py140
-rw-r--r--sphinx/search/tr.py22
-rw-r--r--sphinx/search/zh.py262
50 files changed, 17052 insertions, 0 deletions
diff --git a/sphinx/search/__init__.py b/sphinx/search/__init__.py
new file mode 100644
index 0000000..21758d3
--- /dev/null
+++ b/sphinx/search/__init__.py
@@ -0,0 +1,556 @@
+"""Create a full-text search index for offline search."""
+from __future__ import annotations
+
+import dataclasses
+import functools
+import html
+import json
+import pickle
+import re
+from importlib import import_module
+from os import path
+from typing import IO, TYPE_CHECKING, Any
+
+from docutils import nodes
+from docutils.nodes import Element, Node
+
+from sphinx import addnodes, package_dir
+from sphinx.environment import BuildEnvironment
+from sphinx.util.index_entries import split_index_msg
+
+if TYPE_CHECKING:
+ from collections.abc import Iterable
+
+
+class SearchLanguage:
+ """
+ This class is the base class for search natural language preprocessors. If
+ you want to add support for a new language, you should override the methods
+ of this class.
+
+ You should override `lang` class property too (e.g. 'en', 'fr' and so on).
+
+ .. attribute:: stopwords
+
+ This is a set of stop words of the target language. Default `stopwords`
+ is empty. This word is used for building index and embedded in JS.
+
+ .. attribute:: js_splitter_code
+
+ Return splitter function of JavaScript version. The function should be
+ named as ``splitQuery``. And it should take a string and return list of
+ strings.
+
+ .. versionadded:: 3.0
+
+ .. attribute:: js_stemmer_code
+
+ Return stemmer class of JavaScript version. This class' name should be
+ ``Stemmer`` and this class must have ``stemWord`` method. This string is
+ embedded as-is in searchtools.js.
+
+ This class is used to preprocess search word which Sphinx HTML readers
+ type, before searching index. Default implementation does nothing.
+ """
+ lang: str | None = None
+ language_name: str | None = None
+ stopwords: set[str] = set()
+ js_splitter_code: str = ""
+ js_stemmer_rawcode: str | None = None
+ js_stemmer_code = """
+/**
+ * Dummy stemmer for languages without stemming rules.
+ */
+var Stemmer = function() {
+ this.stemWord = function(w) {
+ return w;
+ }
+}
+"""
+
+ _word_re = re.compile(r'\w+')
+
+ def __init__(self, options: dict) -> None:
+ self.options = options
+ self.init(options)
+
+ def init(self, options: dict) -> None:
+ """
+ Initialize the class with the options the user has given.
+ """
+
+ def split(self, input: str) -> list[str]:
+ """
+ This method splits a sentence into words. Default splitter splits input
+ at white spaces, which should be enough for most languages except CJK
+ languages.
+ """
+ return self._word_re.findall(input)
+
+ def stem(self, word: str) -> str:
+ """
+ This method implements stemming algorithm of the Python version.
+
+ Default implementation does nothing. You should implement this if the
+ language has any stemming rules.
+
+ This class is used to preprocess search words before registering them in
+ the search index. The stemming of the Python version and the JS version
+ (given in the js_stemmer_code attribute) must be compatible.
+ """
+ return word
+
+ def word_filter(self, word: str) -> bool:
+ """
+ Return true if the target word should be registered in the search index.
+ This method is called after stemming.
+ """
+ return (
+ len(word) == 0 or not (
+ ((len(word) < 3) and (12353 < ord(word[0]) < 12436)) or
+ (ord(word[0]) < 256 and (
+ word in self.stopwords
+ ))))
+
+
+# SearchEnglish imported after SearchLanguage is defined due to circular import
+from sphinx.search.en import SearchEnglish
+
+
+def parse_stop_word(source: str) -> set[str]:
+ """
+ Parse snowball style word list like this:
+
+ * http://snowball.tartarus.org/algorithms/finnish/stop.txt
+ """
+ result: set[str] = set()
+ for line in source.splitlines():
+ line = line.split('|')[0] # remove comment
+ result.update(line.split())
+ return result
+
+
+# maps language name to module.class or directly a class
+languages: dict[str, str | type[SearchLanguage]] = {
+ 'da': 'sphinx.search.da.SearchDanish',
+ 'de': 'sphinx.search.de.SearchGerman',
+ 'en': SearchEnglish,
+ 'es': 'sphinx.search.es.SearchSpanish',
+ 'fi': 'sphinx.search.fi.SearchFinnish',
+ 'fr': 'sphinx.search.fr.SearchFrench',
+ 'hu': 'sphinx.search.hu.SearchHungarian',
+ 'it': 'sphinx.search.it.SearchItalian',
+ 'ja': 'sphinx.search.ja.SearchJapanese',
+ 'nl': 'sphinx.search.nl.SearchDutch',
+ 'no': 'sphinx.search.no.SearchNorwegian',
+ 'pt': 'sphinx.search.pt.SearchPortuguese',
+ 'ro': 'sphinx.search.ro.SearchRomanian',
+ 'ru': 'sphinx.search.ru.SearchRussian',
+ 'sv': 'sphinx.search.sv.SearchSwedish',
+ 'tr': 'sphinx.search.tr.SearchTurkish',
+ 'zh': 'sphinx.search.zh.SearchChinese',
+}
+
+
+class _JavaScriptIndex:
+ """
+ The search index as JavaScript file that calls a function
+ on the documentation search object to register the index.
+ """
+
+ PREFIX = 'Search.setIndex('
+ SUFFIX = ')'
+
+ def dumps(self, data: Any) -> str:
+ return self.PREFIX + json.dumps(data) + self.SUFFIX
+
+ def loads(self, s: str) -> Any:
+ data = s[len(self.PREFIX):-len(self.SUFFIX)]
+ if not data or not s.startswith(self.PREFIX) or not \
+ s.endswith(self.SUFFIX):
+ raise ValueError('invalid data')
+ return json.loads(data)
+
+ def dump(self, data: Any, f: IO) -> None:
+ f.write(self.dumps(data))
+
+ def load(self, f: IO) -> Any:
+ return self.loads(f.read())
+
+
+js_index = _JavaScriptIndex()
+
+
+def _is_meta_keywords(
+ node: nodes.meta, # type: ignore[name-defined]
+ lang: str | None,
+) -> bool:
+ if node.get('name') == 'keywords':
+ meta_lang = node.get('lang')
+ if meta_lang is None: # lang not specified
+ return True
+ elif meta_lang == lang: # matched to html_search_language
+ return True
+
+ return False
+
+
+@dataclasses.dataclass
+class WordStore:
+ words: list[str] = dataclasses.field(default_factory=list)
+ titles: list[tuple[str, str]] = dataclasses.field(default_factory=list)
+ title_words: list[str] = dataclasses.field(default_factory=list)
+
+
+class WordCollector(nodes.NodeVisitor):
+ """
+ A special visitor that collects words for the `IndexBuilder`.
+ """
+
+ def __init__(self, document: nodes.document, lang: SearchLanguage) -> None:
+ super().__init__(document)
+ self.found_words: list[str] = []
+ self.found_titles: list[tuple[str, str]] = []
+ self.found_title_words: list[str] = []
+ self.lang = lang
+
+ def dispatch_visit(self, node: Node) -> None:
+ if isinstance(node, nodes.comment):
+ raise nodes.SkipNode
+ elif isinstance(node, nodes.raw):
+ if 'html' in node.get('format', '').split():
+ # Some people might put content in raw HTML that should be searched,
+ # so we just amateurishly strip HTML tags and index the remaining
+ # content
+ nodetext = re.sub(r'<style.*?</style>', '', node.astext(), flags=re.IGNORECASE|re.DOTALL)
+ nodetext = re.sub(r'<script.*?</script>', '', nodetext, flags=re.IGNORECASE|re.DOTALL)
+ nodetext = re.sub(r'<[^<]+?>', '', nodetext)
+ self.found_words.extend(self.lang.split(nodetext))
+ raise nodes.SkipNode
+ elif isinstance(node, nodes.Text):
+ self.found_words.extend(self.lang.split(node.astext()))
+ elif isinstance(node, nodes.title):
+ title = node.astext()
+ ids = node.parent['ids']
+ self.found_titles.append((title, ids[0] if ids else None))
+ self.found_title_words.extend(self.lang.split(title))
+ elif isinstance(node, Element) and _is_meta_keywords(node, self.lang.lang):
+ keywords = node['content']
+ keywords = [keyword.strip() for keyword in keywords.split(',')]
+ self.found_words.extend(keywords)
+
+
+class IndexBuilder:
+ """
+ Helper class that creates a search index based on the doctrees
+ passed to the `feed` method.
+ """
+ formats = {
+ 'json': json,
+ 'pickle': pickle
+ }
+
+ def __init__(self, env: BuildEnvironment, lang: str, options: dict, scoring: str) -> None:
+ self.env = env
+ # docname -> title
+ self._titles: dict[str, str] = env._search_index_titles
+ # docname -> filename
+ self._filenames: dict[str, str] = env._search_index_filenames
+ # stemmed words -> set(docname)
+ self._mapping: dict[str, set[str]] = env._search_index_mapping
+ # stemmed words in titles -> set(docname)
+ self._title_mapping: dict[str, set[str]] = env._search_index_title_mapping
+ # docname -> all titles in document
+ self._all_titles: dict[str, list[tuple[str, str]]] = env._search_index_all_titles
+ # docname -> list(index entry)
+ self._index_entries: dict[str, list[tuple[str, str, str]]] = env._search_index_index_entries
+ # objtype -> index
+ self._objtypes: dict[tuple[str, str], int] = env._search_index_objtypes
+ # objtype index -> (domain, type, objname (localized))
+ self._objnames: dict[int, tuple[str, str, str]] = env._search_index_objnames
+ # add language-specific SearchLanguage instance
+ lang_class = languages.get(lang)
+
+ # fallback; try again with language-code
+ if lang_class is None and '_' in lang:
+ lang_class = languages.get(lang.split('_')[0])
+
+ if lang_class is None:
+ self.lang: SearchLanguage = SearchEnglish(options)
+ elif isinstance(lang_class, str):
+ module, classname = lang_class.rsplit('.', 1)
+ lang_class: type[SearchLanguage] = getattr(import_module(module), classname) # type: ignore[no-redef]
+ self.lang = lang_class(options) # type: ignore[operator]
+ else:
+ # it's directly a class (e.g. added by app.add_search_language)
+ self.lang = lang_class(options)
+
+ if scoring:
+ with open(scoring, 'rb') as fp:
+ self.js_scorer_code = fp.read().decode()
+ else:
+ self.js_scorer_code = ''
+ self.js_splitter_code = ""
+
+ def load(self, stream: IO, format: Any) -> None:
+ """Reconstruct from frozen data."""
+ if isinstance(format, str):
+ format = self.formats[format]
+ frozen = format.load(stream)
+ # if an old index is present, we treat it as not existing.
+ if not isinstance(frozen, dict) or \
+ frozen.get('envversion') != self.env.version:
+ raise ValueError('old format')
+ index2fn = frozen['docnames']
+ self._filenames = dict(zip(index2fn, frozen['filenames']))
+ self._titles = dict(zip(index2fn, frozen['titles']))
+ self._all_titles = {}
+
+ for docname in self._titles.keys():
+ self._all_titles[docname] = []
+ for title, doc_tuples in frozen['alltitles'].items():
+ for doc, titleid in doc_tuples:
+ self._all_titles[index2fn[doc]].append((title, titleid))
+
+ def load_terms(mapping: dict[str, Any]) -> dict[str, set[str]]:
+ rv = {}
+ for k, v in mapping.items():
+ if isinstance(v, int):
+ rv[k] = {index2fn[v]}
+ else:
+ rv[k] = {index2fn[i] for i in v}
+ return rv
+
+ self._mapping = load_terms(frozen['terms'])
+ self._title_mapping = load_terms(frozen['titleterms'])
+ # no need to load keywords/objtypes
+
+ def dump(self, stream: IO, format: Any) -> None:
+ """Dump the frozen index to a stream."""
+ if isinstance(format, str):
+ format = self.formats[format]
+ format.dump(self.freeze(), stream)
+
+ def get_objects(self, fn2index: dict[str, int]
+ ) -> dict[str, list[tuple[int, int, int, str, str]]]:
+ rv: dict[str, list[tuple[int, int, int, str, str]]] = {}
+ otypes = self._objtypes
+ onames = self._objnames
+ for domainname, domain in sorted(self.env.domains.items()):
+ for fullname, dispname, type, docname, anchor, prio in \
+ sorted(domain.get_objects()):
+ if docname not in fn2index:
+ continue
+ if prio < 0:
+ continue
+ fullname = html.escape(fullname)
+ dispname = html.escape(dispname)
+ prefix, _, name = dispname.rpartition('.')
+ plist = rv.setdefault(prefix, [])
+ try:
+ typeindex = otypes[domainname, type]
+ except KeyError:
+ typeindex = len(otypes)
+ otypes[domainname, type] = typeindex
+ otype = domain.object_types.get(type)
+ if otype:
+ # use str() to fire translation proxies
+ onames[typeindex] = (domainname, type,
+ str(domain.get_type_name(otype)))
+ else:
+ onames[typeindex] = (domainname, type, type)
+ if anchor == fullname:
+ shortanchor = ''
+ elif anchor == type + '-' + fullname:
+ shortanchor = '-'
+ else:
+ shortanchor = anchor
+ plist.append((fn2index[docname], typeindex, prio, shortanchor, name))
+ return rv
+
+ def get_terms(self, fn2index: dict) -> tuple[dict[str, list[str]], dict[str, list[str]]]:
+ rvs: tuple[dict[str, list[str]], dict[str, list[str]]] = ({}, {})
+ for rv, mapping in zip(rvs, (self._mapping, self._title_mapping)):
+ for k, v in mapping.items():
+ if len(v) == 1:
+ fn, = v
+ if fn in fn2index:
+ rv[k] = fn2index[fn]
+ else:
+ rv[k] = sorted([fn2index[fn] for fn in v if fn in fn2index])
+ return rvs
+
+ def freeze(self) -> dict[str, Any]:
+ """Create a usable data structure for serializing."""
+ docnames, titles = zip(*sorted(self._titles.items()))
+ filenames = [self._filenames.get(docname) for docname in docnames]
+ fn2index = {f: i for (i, f) in enumerate(docnames)}
+ terms, title_terms = self.get_terms(fn2index)
+
+ objects = self.get_objects(fn2index) # populates _objtypes
+ objtypes = {v: k[0] + ':' + k[1] for (k, v) in self._objtypes.items()}
+ objnames = self._objnames
+
+ alltitles: dict[str, list[tuple[int, str]]] = {}
+ for docname, titlelist in self._all_titles.items():
+ for title, titleid in titlelist:
+ alltitles.setdefault(title, []).append((fn2index[docname], titleid))
+
+ index_entries: dict[str, list[tuple[int, str]]] = {}
+ for docname, entries in self._index_entries.items():
+ for entry, entry_id, main_entry in entries:
+ index_entries.setdefault(entry.lower(), []).append((fn2index[docname], entry_id))
+
+ return dict(docnames=docnames, filenames=filenames, titles=titles, terms=terms,
+ objects=objects, objtypes=objtypes, objnames=objnames,
+ titleterms=title_terms, envversion=self.env.version,
+ alltitles=alltitles, indexentries=index_entries)
+
+ def label(self) -> str:
+ return f"{self.lang.language_name} (code: {self.lang.lang})"
+
+ def prune(self, docnames: Iterable[str]) -> None:
+ """Remove data for all docnames not in the list."""
+ new_titles = {}
+ new_alltitles = {}
+ new_filenames = {}
+ for docname in docnames:
+ if docname in self._titles:
+ new_titles[docname] = self._titles[docname]
+ new_alltitles[docname] = self._all_titles[docname]
+ new_filenames[docname] = self._filenames[docname]
+ self._titles = new_titles
+ self._filenames = new_filenames
+ self._all_titles = new_alltitles
+ for wordnames in self._mapping.values():
+ wordnames.intersection_update(docnames)
+ for wordnames in self._title_mapping.values():
+ wordnames.intersection_update(docnames)
+
+ def feed(self, docname: str, filename: str, title: str, doctree: nodes.document) -> None:
+ """Feed a doctree to the index."""
+ self._titles[docname] = title
+ self._filenames[docname] = filename
+
+ word_store = self._word_collector(doctree)
+
+ _filter = self.lang.word_filter
+ _stem = self.lang.stem
+
+ # memoise self.lang.stem
+ @functools.lru_cache(maxsize=None)
+ def stem(word_to_stem: str) -> str:
+ return _stem(word_to_stem).lower()
+
+ self._all_titles[docname] = word_store.titles
+
+ for word in word_store.title_words:
+ # add stemmed and unstemmed as the stemmer must not remove words
+ # from search index.
+ stemmed_word = stem(word)
+ if _filter(stemmed_word):
+ self._title_mapping.setdefault(stemmed_word, set()).add(docname)
+ elif _filter(word):
+ self._title_mapping.setdefault(word, set()).add(docname)
+
+ for word in word_store.words:
+ # add stemmed and unstemmed as the stemmer must not remove words
+ # from search index.
+ stemmed_word = stem(word)
+ if not _filter(stemmed_word) and _filter(word):
+ stemmed_word = word
+ already_indexed = docname in self._title_mapping.get(stemmed_word, ())
+ if _filter(stemmed_word) and not already_indexed:
+ self._mapping.setdefault(stemmed_word, set()).add(docname)
+
+ # find explicit entries within index directives
+ _index_entries: set[tuple[str, str, str]] = set()
+ for node in doctree.findall(addnodes.index):
+ for entry_type, value, target_id, main, _category_key in node['entries']:
+ try:
+ result = split_index_msg(entry_type, value)
+ except ValueError:
+ pass
+ else:
+ target_id = target_id or ''
+ if entry_type in {'see', 'seealso'}:
+ _index_entries.add((result[0], target_id, main))
+ _index_entries |= {(x, target_id, main) for x in result}
+
+ self._index_entries[docname] = sorted(_index_entries)
+
+ def _word_collector(self, doctree: nodes.document) -> WordStore:
+ def _visit_nodes(node):
+ if isinstance(node, nodes.comment):
+ return
+ elif isinstance(node, nodes.raw):
+ if 'html' in node.get('format', '').split():
+ # Some people might put content in raw HTML that should be searched,
+ # so we just amateurishly strip HTML tags and index the remaining
+ # content
+ nodetext = re.sub(r'<style.*?</style>', '', node.astext(),
+ flags=re.IGNORECASE | re.DOTALL)
+ nodetext = re.sub(r'<script.*?</script>', '', nodetext,
+ flags=re.IGNORECASE | re.DOTALL)
+ nodetext = re.sub(r'<[^<]+?>', '', nodetext)
+ word_store.words.extend(split(nodetext))
+ return
+ elif (isinstance(node, nodes.meta) # type: ignore[attr-defined]
+ and _is_meta_keywords(node, language)):
+ keywords = [keyword.strip() for keyword in node['content'].split(',')]
+ word_store.words.extend(keywords)
+ elif isinstance(node, nodes.Text):
+ word_store.words.extend(split(node.astext()))
+ elif isinstance(node, nodes.title):
+ title = node.astext()
+ ids = node.parent['ids']
+ word_store.titles.append((title, ids[0] if ids else None))
+ word_store.title_words.extend(split(title))
+ for child in node.children:
+ _visit_nodes(child)
+ return
+
+ word_store = WordStore()
+ split = self.lang.split
+ language = self.lang.lang
+ _visit_nodes(doctree)
+ return word_store
+
+ def context_for_searchtool(self) -> dict[str, Any]:
+ if self.lang.js_splitter_code:
+ js_splitter_code = self.lang.js_splitter_code
+ else:
+ js_splitter_code = self.js_splitter_code
+
+ return {
+ 'search_language_stemming_code': self.get_js_stemmer_code(),
+ 'search_language_stop_words': json.dumps(sorted(self.lang.stopwords)),
+ 'search_scorer_tool': self.js_scorer_code,
+ 'search_word_splitter_code': js_splitter_code,
+ }
+
+ def get_js_stemmer_rawcodes(self) -> list[str]:
+ """Returns a list of non-minified stemmer JS files to copy."""
+ if self.lang.js_stemmer_rawcode:
+ return [
+ path.join(package_dir, 'search', 'non-minified-js', fname)
+ for fname in ('base-stemmer.js', self.lang.js_stemmer_rawcode)
+ ]
+ else:
+ return []
+
+ def get_js_stemmer_rawcode(self) -> str | None:
+ return None
+
+ def get_js_stemmer_code(self) -> str:
+ """Returns JS code that will be inserted into language_data.js."""
+ if self.lang.js_stemmer_rawcode:
+ js_dir = path.join(package_dir, 'search', 'minified-js')
+ with open(path.join(js_dir, 'base-stemmer.js'), encoding='utf-8') as js_file:
+ base_js = js_file.read()
+ with open(path.join(js_dir, self.lang.js_stemmer_rawcode), encoding='utf-8') as js_file:
+ language_js = js_file.read()
+ return ('%s\n%s\nStemmer = %sStemmer;' %
+ (base_js, language_js, self.lang.language_name))
+ else:
+ return self.lang.js_stemmer_code
diff --git a/sphinx/search/da.py b/sphinx/search/da.py
new file mode 100644
index 0000000..9b5b9f5
--- /dev/null
+++ b/sphinx/search/da.py
@@ -0,0 +1,120 @@
+"""Danish search language: includes the JS Danish stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+danish_stopwords = parse_stop_word('''
+| source: http://snowball.tartarus.org/algorithms/danish/stop.txt
+og | and
+i | in
+jeg | I
+det | that (dem. pronoun)/it (pers. pronoun)
+at | that (in front of a sentence)/to (with infinitive)
+en | a/an
+den | it (pers. pronoun)/that (dem. pronoun)
+til | to/at/for/until/against/by/of/into, more
+er | present tense of "to be"
+som | who, as
+på | on/upon/in/on/at/to/after/of/with/for, on
+de | they
+med | with/by/in, along
+han | he
+af | of/by/from/off/for/in/with/on, off
+for | at/for/to/from/by/of/ago, in front/before, because
+ikke | not
+der | who/which, there/those
+var | past tense of "to be"
+mig | me/myself
+sig | oneself/himself/herself/itself/themselves
+men | but
+et | a/an/one, one (number), someone/somebody/one
+har | present tense of "to have"
+om | round/about/for/in/a, about/around/down, if
+vi | we
+min | my
+havde | past tense of "to have"
+ham | him
+hun | she
+nu | now
+over | over/above/across/by/beyond/past/on/about, over/past
+da | then, when/as/since
+fra | from/off/since, off, since
+du | you
+ud | out
+sin | his/her/its/one's
+dem | them
+os | us/ourselves
+op | up
+man | you/one
+hans | his
+hvor | where
+eller | or
+hvad | what
+skal | must/shall etc.
+selv | myself/yourself/herself/ourselves etc., even
+her | here
+alle | all/everyone/everybody etc.
+vil | will (verb)
+blev | past tense of "to stay/to remain/to get/to become"
+kunne | could
+ind | in
+når | when
+være | present tense of "to be"
+dog | however/yet/after all
+noget | something
+ville | would
+jo | you know/you see (adv), yes
+deres | their/theirs
+efter | after/behind/according to/for/by/from, later/afterwards
+ned | down
+skulle | should
+denne | this
+end | than
+dette | this
+mit | my/mine
+også | also
+under | under/beneath/below/during, below/underneath
+have | have
+dig | you
+anden | other
+hende | her
+mine | my
+alt | everything
+meget | much/very, plenty of
+sit | his, her, its, one's
+sine | his, her, its, one's
+vor | our
+mod | against
+disse | these
+hvis | if
+din | your/yours
+nogle | some
+hos | by/at
+blive | be/become
+mange | many
+ad | by/through
+bliver | present tense of "to be/to become"
+hendes | her/hers
+været | be
+thi | for (conj)
+jer | you
+sådan | such, like this/like that
+''')
+
+
+class SearchDanish(SearchLanguage):
+ lang = 'da'
+ language_name = 'Danish'
+ js_stemmer_rawcode = 'danish-stemmer.js'
+ stopwords = danish_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('danish')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/de.py b/sphinx/search/de.py
new file mode 100644
index 0000000..1c253fd
--- /dev/null
+++ b/sphinx/search/de.py
@@ -0,0 +1,303 @@
+"""German search language: includes the JS German stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+german_stopwords = parse_stop_word('''
+|source: http://snowball.tartarus.org/algorithms/german/stop.txt
+aber | but
+
+alle | all
+allem
+allen
+aller
+alles
+
+als | than, as
+also | so
+am | an + dem
+an | at
+
+ander | other
+andere
+anderem
+anderen
+anderer
+anderes
+anderm
+andern
+anderr
+anders
+
+auch | also
+auf | on
+aus | out of
+bei | by
+bin | am
+bis | until
+bist | art
+da | there
+damit | with it
+dann | then
+
+der | the
+den
+des
+dem
+die
+das
+
+daß | that
+
+derselbe | the same
+derselben
+denselben
+desselben
+demselben
+dieselbe
+dieselben
+dasselbe
+
+dazu | to that
+
+dein | thy
+deine
+deinem
+deinen
+deiner
+deines
+
+denn | because
+
+derer | of those
+dessen | of him
+
+dich | thee
+dir | to thee
+du | thou
+
+dies | this
+diese
+diesem
+diesen
+dieser
+dieses
+
+
+doch | (several meanings)
+dort | (over) there
+
+
+durch | through
+
+ein | a
+eine
+einem
+einen
+einer
+eines
+
+einig | some
+einige
+einigem
+einigen
+einiger
+einiges
+
+einmal | once
+
+er | he
+ihn | him
+ihm | to him
+
+es | it
+etwas | something
+
+euer | your
+eure
+eurem
+euren
+eurer
+eures
+
+für | for
+gegen | towards
+gewesen | p.p. of sein
+hab | have
+habe | have
+haben | have
+hat | has
+hatte | had
+hatten | had
+hier | here
+hin | there
+hinter | behind
+
+ich | I
+mich | me
+mir | to me
+
+
+ihr | you, to her
+ihre
+ihrem
+ihren
+ihrer
+ihres
+euch | to you
+
+im | in + dem
+in | in
+indem | while
+ins | in + das
+ist | is
+
+jede | each, every
+jedem
+jeden
+jeder
+jedes
+
+jene | that
+jenem
+jenen
+jener
+jenes
+
+jetzt | now
+kann | can
+
+kein | no
+keine
+keinem
+keinen
+keiner
+keines
+
+können | can
+könnte | could
+machen | do
+man | one
+
+manche | some, many a
+manchem
+manchen
+mancher
+manches
+
+mein | my
+meine
+meinem
+meinen
+meiner
+meines
+
+mit | with
+muss | must
+musste | had to
+nach | to(wards)
+nicht | not
+nichts | nothing
+noch | still, yet
+nun | now
+nur | only
+ob | whether
+oder | or
+ohne | without
+sehr | very
+
+sein | his
+seine
+seinem
+seinen
+seiner
+seines
+
+selbst | self
+sich | herself
+
+sie | they, she
+ihnen | to them
+
+sind | are
+so | so
+
+solche | such
+solchem
+solchen
+solcher
+solches
+
+soll | shall
+sollte | should
+sondern | but
+sonst | else
+über | over
+um | about, around
+und | and
+
+uns | us
+unse
+unsem
+unsen
+unser
+unses
+
+unter | under
+viel | much
+vom | von + dem
+von | from
+vor | before
+während | while
+war | was
+waren | were
+warst | wast
+was | what
+weg | away, off
+weil | because
+weiter | further
+
+welche | which
+welchem
+welchen
+welcher
+welches
+
+wenn | when
+werde | will
+werden | will
+wie | how
+wieder | again
+will | want
+wir | we
+wird | will
+wirst | willst
+wo | where
+wollen | want
+wollte | wanted
+würde | would
+würden | would
+zu | to
+zum | zu + dem
+zur | zu + der
+zwar | indeed
+zwischen | between
+''')
+
+
+class SearchGerman(SearchLanguage):
+ lang = 'de'
+ language_name = 'German'
+ js_stemmer_rawcode = 'german-stemmer.js'
+ stopwords = german_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('german')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/en.py b/sphinx/search/en.py
new file mode 100644
index 0000000..caa6f66
--- /dev/null
+++ b/sphinx/search/en.py
@@ -0,0 +1,220 @@
+"""English search language: includes the JS porter stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage
+
+english_stopwords = set("""
+a and are as at
+be but by
+for
+if in into is it
+near no not
+of on or
+such
+that the their then there these they this to
+was will with
+""".split())
+
+js_porter_stemmer = """
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+ var step2list = {
+ ational: 'ate',
+ tional: 'tion',
+ enci: 'ence',
+ anci: 'ance',
+ izer: 'ize',
+ bli: 'ble',
+ alli: 'al',
+ entli: 'ent',
+ eli: 'e',
+ ousli: 'ous',
+ ization: 'ize',
+ ation: 'ate',
+ ator: 'ate',
+ alism: 'al',
+ iveness: 'ive',
+ fulness: 'ful',
+ ousness: 'ous',
+ aliti: 'al',
+ iviti: 'ive',
+ biliti: 'ble',
+ logi: 'log'
+ };
+
+ var step3list = {
+ icate: 'ic',
+ ative: '',
+ alize: 'al',
+ iciti: 'ic',
+ ical: 'ic',
+ ful: '',
+ ness: ''
+ };
+
+ var c = "[^aeiou]"; // consonant
+ var v = "[aeiouy]"; // vowel
+ var C = c + "[^aeiouy]*"; // consonant sequence
+ var V = v + "[aeiou]*"; // vowel sequence
+
+ var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
+ var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
+ var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
+ var s_v = "^(" + C + ")?" + v; // vowel in stem
+
+ this.stemWord = function (w) {
+ var stem;
+ var suffix;
+ var firstch;
+ var origword = w;
+
+ if (w.length < 3)
+ return w;
+
+ var re;
+ var re2;
+ var re3;
+ var re4;
+
+ firstch = w.substr(0,1);
+ if (firstch == "y")
+ w = firstch.toUpperCase() + w.substr(1);
+
+ // Step 1a
+ re = /^(.+?)(ss|i)es$/;
+ re2 = /^(.+?)([^s])s$/;
+
+ if (re.test(w))
+ w = w.replace(re,"$1$2");
+ else if (re2.test(w))
+ w = w.replace(re2,"$1$2");
+
+ // Step 1b
+ re = /^(.+?)eed$/;
+ re2 = /^(.+?)(ed|ing)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ re = new RegExp(mgr0);
+ if (re.test(fp[1])) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+ }
+ else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1];
+ re2 = new RegExp(s_v);
+ if (re2.test(stem)) {
+ w = stem;
+ re2 = /(at|bl|iz)$/;
+ re3 = new RegExp("([^aeiouylsz])\\\\1$");
+ re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+ if (re2.test(w))
+ w = w + "e";
+ else if (re3.test(w)) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+ else if (re4.test(w))
+ w = w + "e";
+ }
+ }
+
+ // Step 1c
+ re = /^(.+?)y$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(s_v);
+ if (re.test(stem))
+ w = stem + "i";
+ }
+
+ // Step 2
+ re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|\
+ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = new RegExp(mgr0);
+ if (re.test(stem))
+ w = stem + step2list[suffix];
+ }
+
+ // Step 3
+ re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = new RegExp(mgr0);
+ if (re.test(stem))
+ w = stem + step3list[suffix];
+ }
+
+ // Step 4
+ re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|\
+iti|ous|ive|ize)$/;
+ re2 = /^(.+?)(s|t)(ion)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(mgr1);
+ if (re.test(stem))
+ w = stem;
+ }
+ else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1] + fp[2];
+ re2 = new RegExp(mgr1);
+ if (re2.test(stem))
+ w = stem;
+ }
+
+ // Step 5
+ re = /^(.+?)e$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(mgr1);
+ re2 = new RegExp(meq1);
+ re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+ if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+ w = stem;
+ }
+ re = /ll$/;
+ re2 = new RegExp(mgr1);
+ if (re.test(w) && re2.test(w)) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+
+ // and turn initial Y back to y
+ if (firstch == "y")
+ w = firstch.toLowerCase() + w.substr(1);
+ return w;
+ }
+}
+"""
+
+
+class SearchEnglish(SearchLanguage):
+ lang = 'en'
+ language_name = 'English'
+ js_stemmer_code = js_porter_stemmer
+ stopwords = english_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('porter')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/es.py b/sphinx/search/es.py
new file mode 100644
index 0000000..c5d9a5c
--- /dev/null
+++ b/sphinx/search/es.py
@@ -0,0 +1,363 @@
+"""Spanish search language: includes the JS Spanish stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+spanish_stopwords = parse_stop_word('''
+|source: http://snowball.tartarus.org/algorithms/spanish/stop.txt
+de | from, of
+la | the, her
+que | who, that
+el | the
+en | in
+y | and
+a | to
+los | the, them
+del | de + el
+se | himself, from him etc
+las | the, them
+por | for, by, etc
+un | a
+para | for
+con | with
+no | no
+una | a
+su | his, her
+al | a + el
+ | es from SER
+lo | him
+como | how
+más | more
+pero | pero
+sus | su plural
+le | to him, her
+ya | already
+o | or
+ | fue from SER
+este | this
+ | ha from HABER
+sí | himself etc
+porque | because
+esta | this
+ | son from SER
+entre | between
+ | está from ESTAR
+cuando | when
+muy | very
+sin | without
+sobre | on
+ | ser from SER
+ | tiene from TENER
+también | also
+me | me
+hasta | until
+hay | there is/are
+donde | where
+ | han from HABER
+quien | whom, that
+ | están from ESTAR
+ | estado from ESTAR
+desde | from
+todo | all
+nos | us
+durante | during
+ | estados from ESTAR
+todos | all
+uno | a
+les | to them
+ni | nor
+contra | against
+otros | other
+ | fueron from SER
+ese | that
+eso | that
+ | había from HABER
+ante | before
+ellos | they
+e | and (variant of y)
+esto | this
+mí | me
+antes | before
+algunos | some
+qué | what?
+unos | a
+yo | I
+otro | other
+otras | other
+otra | other
+él | he
+tanto | so much, many
+esa | that
+estos | these
+mucho | much, many
+quienes | who
+nada | nothing
+muchos | many
+cual | who
+ | sea from SER
+poco | few
+ella | she
+estar | to be
+ | haber from HABER
+estas | these
+ | estaba from ESTAR
+ | estamos from ESTAR
+algunas | some
+algo | something
+nosotros | we
+
+ | other forms
+
+mi | me
+mis | mi plural
+tú | thou
+te | thee
+ti | thee
+tu | thy
+tus | tu plural
+ellas | they
+nosotras | we
+vosotros | you
+vosotras | you
+os | you
+mío | mine
+mía |
+míos |
+mías |
+tuyo | thine
+tuya |
+tuyos |
+tuyas |
+suyo | his, hers, theirs
+suya |
+suyos |
+suyas |
+nuestro | ours
+nuestra |
+nuestros |
+nuestras |
+vuestro | yours
+vuestra |
+vuestros |
+vuestras |
+esos | those
+esas | those
+
+ | forms of estar, to be (not including the infinitive):
+estoy
+estás
+está
+estamos
+estáis
+están
+esté
+estés
+estemos
+estéis
+estén
+estaré
+estarás
+estará
+estaremos
+estaréis
+estarán
+estaría
+estarías
+estaríamos
+estaríais
+estarían
+estaba
+estabas
+estábamos
+estabais
+estaban
+estuve
+estuviste
+estuvo
+estuvimos
+estuvisteis
+estuvieron
+estuviera
+estuvieras
+estuviéramos
+estuvierais
+estuvieran
+estuviese
+estuvieses
+estuviésemos
+estuvieseis
+estuviesen
+estando
+estado
+estada
+estados
+estadas
+estad
+
+ | forms of haber, to have (not including the infinitive):
+he
+has
+ha
+hemos
+habéis
+han
+haya
+hayas
+hayamos
+hayáis
+hayan
+habré
+habrás
+habrá
+habremos
+habréis
+habrán
+habría
+habrías
+habríamos
+habríais
+habrían
+había
+habías
+habíamos
+habíais
+habían
+hube
+hubiste
+hubo
+hubimos
+hubisteis
+hubieron
+hubiera
+hubieras
+hubiéramos
+hubierais
+hubieran
+hubiese
+hubieses
+hubiésemos
+hubieseis
+hubiesen
+habiendo
+habido
+habida
+habidos
+habidas
+
+ | forms of ser, to be (not including the infinitive):
+soy
+eres
+es
+somos
+sois
+son
+sea
+seas
+seamos
+seáis
+sean
+seré
+serás
+será
+seremos
+seréis
+serán
+sería
+serías
+seríamos
+seríais
+serían
+era
+eras
+éramos
+erais
+eran
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+fuera
+fueras
+fuéramos
+fuerais
+fueran
+fuese
+fueses
+fuésemos
+fueseis
+fuesen
+siendo
+sido
+ | sed also means 'thirst'
+
+ | forms of tener, to have (not including the infinitive):
+tengo
+tienes
+tiene
+tenemos
+tenéis
+tienen
+tenga
+tengas
+tengamos
+tengáis
+tengan
+tendré
+tendrás
+tendrá
+tendremos
+tendréis
+tendrán
+tendría
+tendrías
+tendríamos
+tendríais
+tendrían
+tenía
+tenías
+teníamos
+teníais
+tenían
+tuve
+tuviste
+tuvo
+tuvimos
+tuvisteis
+tuvieron
+tuviera
+tuvieras
+tuviéramos
+tuvierais
+tuvieran
+tuviese
+tuvieses
+tuviésemos
+tuvieseis
+tuviesen
+teniendo
+tenido
+tenida
+tenidos
+tenidas
+tened
+''')
+
+
+class SearchSpanish(SearchLanguage):
+ lang = 'es'
+ language_name = 'Spanish'
+ js_stemmer_rawcode = 'spanish-stemmer.js'
+ stopwords = spanish_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('spanish')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/fi.py b/sphinx/search/fi.py
new file mode 100644
index 0000000..70114f8
--- /dev/null
+++ b/sphinx/search/fi.py
@@ -0,0 +1,113 @@
+"""Finnish search language: includes the JS Finnish stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+finnish_stopwords = parse_stop_word('''
+| source: http://snowball.tartarus.org/algorithms/finnish/stop.txt
+| forms of BE
+
+olla
+olen
+olet
+on
+olemme
+olette
+ovat
+ole | negative form
+
+oli
+olisi
+olisit
+olisin
+olisimme
+olisitte
+olisivat
+olit
+olin
+olimme
+olitte
+olivat
+ollut
+olleet
+
+en | negation
+et
+ei
+emme
+ette
+eivät
+
+|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans
+minä minun minut minua minussa minusta minuun minulla minulta minulle | I
+sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you
+hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she
+me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we
+te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you
+he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they
+
+tämä tämän tätä tässä tästä tähän tällä tältä tälle tänä täksi | this
+tuo tuon tuota tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that
+se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it
+nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these
+nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those
+ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they
+
+kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who
+ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl)
+mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what
+mitkä | (pl)
+
+joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which
+jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl)
+
+| conjunctions
+
+että | that
+ja | and
+jos | if
+koska | because
+kuin | than
+mutta | but
+niin | so
+sekä | and
+sillä | for
+tai | or
+vaan | but
+vai | or
+vaikka | although
+
+
+| prepositions
+
+kanssa | with
+mukaan | according to
+noin | about
+poikki | across
+yli | over, across
+
+| other
+
+kun | when
+niin | so
+nyt | now
+itse | self
+''')
+
+
+class SearchFinnish(SearchLanguage):
+ lang = 'fi'
+ language_name = 'Finnish'
+ js_stemmer_rawcode = 'finnish-stemmer.js'
+ stopwords = finnish_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('finnish')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/fr.py b/sphinx/search/fr.py
new file mode 100644
index 0000000..01319dd
--- /dev/null
+++ b/sphinx/search/fr.py
@@ -0,0 +1,199 @@
+"""French search language: includes the JS French stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+french_stopwords = parse_stop_word('''
+| source: http://snowball.tartarus.org/algorithms/french/stop.txt
+au | a + le
+aux | a + les
+avec | with
+ce | this
+ces | these
+dans | with
+de | of
+des | de + les
+du | de + le
+elle | she
+en | `of them' etc
+et | and
+eux | them
+il | he
+je | I
+la | the
+le | the
+leur | their
+lui | him
+ma | my (fem)
+mais | but
+me | me
+même | same; as in moi-même (myself) etc
+mes | me (pl)
+moi | me
+mon | my (masc)
+ne | not
+nos | our (pl)
+notre | our
+nous | we
+on | one
+ou | where
+par | by
+pas | not
+pour | for
+qu | que before vowel
+que | that
+qui | who
+sa | his, her (fem)
+se | oneself
+ses | his (pl)
+son | his, her (masc)
+sur | on
+ta | thy (fem)
+te | thee
+tes | thy (pl)
+toi | thee
+ton | thy (masc)
+tu | thou
+un | a
+une | a
+vos | your (pl)
+votre | your
+vous | you
+
+ | single letter forms
+
+c | c'
+d | d'
+j | j'
+l | l'
+à | to, at
+m | m'
+n | n'
+s | s'
+t | t'
+y | there
+
+ | forms of être (not including the infinitive):
+été
+étée
+étées
+étés
+étant
+suis
+es
+est
+sommes
+êtes
+sont
+serai
+seras
+sera
+serons
+serez
+seront
+serais
+serait
+serions
+seriez
+seraient
+étais
+était
+étions
+étiez
+étaient
+fus
+fut
+fûmes
+fûtes
+furent
+sois
+soit
+soyons
+soyez
+soient
+fusse
+fusses
+fût
+fussions
+fussiez
+fussent
+
+ | forms of avoir (not including the infinitive):
+ayant
+eu
+eue
+eues
+eus
+ai
+as
+avons
+avez
+ont
+aurai
+auras
+aura
+aurons
+aurez
+auront
+aurais
+aurait
+aurions
+auriez
+auraient
+avais
+avait
+avions
+aviez
+avaient
+eut
+eûmes
+eûtes
+eurent
+aie
+aies
+ait
+ayons
+ayez
+aient
+eusse
+eusses
+eût
+eussions
+eussiez
+eussent
+
+ | Later additions (from Jean-Christophe Deschamps)
+ceci | this
+cela | that (added 11 Apr 2012. Omission reported by Adrien Grand)
+celà | that (incorrect, though common)
+cet | this
+cette | this
+ici | here
+ils | they
+les | the (pl)
+leurs | their (pl)
+quel | which
+quels | which
+quelle | which
+quelles | which
+sans | without
+soi | oneself
+''')
+
+
+class SearchFrench(SearchLanguage):
+ lang = 'fr'
+ language_name = 'French'
+ js_stemmer_rawcode = 'french-stemmer.js'
+ stopwords = french_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('french')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/hu.py b/sphinx/search/hu.py
new file mode 100644
index 0000000..eed08db
--- /dev/null
+++ b/sphinx/search/hu.py
@@ -0,0 +1,226 @@
+"""Hungarian search language: includes the JS Hungarian stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+hungarian_stopwords = parse_stop_word('''
+| source: http://snowball.tartarus.org/algorithms/hungarian/stop.txt
+| prepared by Anna Tordai
+a
+ahogy
+ahol
+aki
+akik
+akkor
+alatt
+által
+általában
+amely
+amelyek
+amelyekben
+amelyeket
+amelyet
+amelynek
+ami
+amit
+amolyan
+amíg
+amikor
+át
+abban
+ahhoz
+annak
+arra
+arról
+az
+azok
+azon
+azt
+azzal
+azért
+aztán
+azután
+azonban
+bár
+be
+belül
+benne
+cikk
+cikkek
+cikkeket
+csak
+de
+e
+eddig
+egész
+egy
+egyes
+egyetlen
+egyéb
+egyik
+egyre
+ekkor
+el
+elég
+ellen
+elő
+először
+előtt
+első
+én
+éppen
+ebben
+ehhez
+emilyen
+ennek
+erre
+ez
+ezt
+ezek
+ezen
+ezzel
+ezért
+és
+fel
+felé
+hanem
+hiszen
+hogy
+hogyan
+igen
+így
+illetve
+ill.
+ill
+ilyen
+ilyenkor
+ison
+ismét
+itt
+jó
+jól
+jobban
+kell
+kellett
+keresztül
+keressünk
+ki
+kívül
+között
+közül
+legalább
+lehet
+lehetett
+legyen
+lenne
+lenni
+lesz
+lett
+maga
+magát
+majd
+majd
+már
+más
+másik
+meg
+még
+mellett
+mert
+mely
+melyek
+mi
+mit
+míg
+miért
+milyen
+mikor
+minden
+mindent
+mindenki
+mindig
+mint
+mintha
+mivel
+most
+nagy
+nagyobb
+nagyon
+ne
+néha
+nekem
+neki
+nem
+néhány
+nélkül
+nincs
+olyan
+ott
+össze
+ők
+őket
+pedig
+persze
+rá
+s
+saját
+sem
+semmi
+sok
+sokat
+sokkal
+számára
+szemben
+szerint
+szinte
+talán
+tehát
+teljes
+tovább
+továbbá
+több
+úgy
+ugyanis
+új
+újabb
+újra
+után
+utána
+utolsó
+vagy
+vagyis
+valaki
+valami
+valamint
+való
+vagyok
+van
+vannak
+volt
+voltam
+voltak
+voltunk
+vissza
+vele
+viszont
+volna
+''')
+
+
+class SearchHungarian(SearchLanguage):
+ lang = 'hu'
+ language_name = 'Hungarian'
+ js_stemmer_rawcode = 'hungarian-stemmer.js'
+ stopwords = hungarian_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('hungarian')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/it.py b/sphinx/search/it.py
new file mode 100644
index 0000000..7bf712b
--- /dev/null
+++ b/sphinx/search/it.py
@@ -0,0 +1,316 @@
+"""Italian search language: includes the JS Italian stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+italian_stopwords = parse_stop_word('''
+| source: http://snowball.tartarus.org/algorithms/italian/stop.txt
+ad | a (to) before vowel
+al | a + il
+allo | a + lo
+ai | a + i
+agli | a + gli
+all | a + l'
+agl | a + gl'
+alla | a + la
+alle | a + le
+con | with
+col | con + il
+coi | con + i (forms collo, cogli etc are now very rare)
+da | from
+dal | da + il
+dallo | da + lo
+dai | da + i
+dagli | da + gli
+dall | da + l'
+dagl | da + gll'
+dalla | da + la
+dalle | da + le
+di | of
+del | di + il
+dello | di + lo
+dei | di + i
+degli | di + gli
+dell | di + l'
+degl | di + gl'
+della | di + la
+delle | di + le
+in | in
+nel | in + el
+nello | in + lo
+nei | in + i
+negli | in + gli
+nell | in + l'
+negl | in + gl'
+nella | in + la
+nelle | in + le
+su | on
+sul | su + il
+sullo | su + lo
+sui | su + i
+sugli | su + gli
+sull | su + l'
+sugl | su + gl'
+sulla | su + la
+sulle | su + le
+per | through, by
+tra | among
+contro | against
+io | I
+tu | thou
+lui | he
+lei | she
+noi | we
+voi | you
+loro | they
+mio | my
+mia |
+miei |
+mie |
+tuo |
+tua |
+tuoi | thy
+tue |
+suo |
+sua |
+suoi | his, her
+sue |
+nostro | our
+nostra |
+nostri |
+nostre |
+vostro | your
+vostra |
+vostri |
+vostre |
+mi | me
+ti | thee
+ci | us, there
+vi | you, there
+lo | him, the
+la | her, the
+li | them
+le | them, the
+gli | to him, the
+ne | from there etc
+il | the
+un | a
+uno | a
+una | a
+ma | but
+ed | and
+se | if
+perché | why, because
+anche | also
+come | how
+dov | where (as dov')
+dove | where
+che | who, that
+chi | who
+cui | whom
+non | not
+più | more
+quale | who, that
+quanto | how much
+quanti |
+quanta |
+quante |
+quello | that
+quelli |
+quella |
+quelle |
+questo | this
+questi |
+questa |
+queste |
+si | yes
+tutto | all
+tutti | all
+
+ | single letter forms:
+
+a | at
+c | as c' for ce or ci
+e | and
+i | the
+l | as l'
+o | or
+
+ | forms of avere, to have (not including the infinitive):
+
+ho
+hai
+ha
+abbiamo
+avete
+hanno
+abbia
+abbiate
+abbiano
+avrò
+avrai
+avrà
+avremo
+avrete
+avranno
+avrei
+avresti
+avrebbe
+avremmo
+avreste
+avrebbero
+avevo
+avevi
+aveva
+avevamo
+avevate
+avevano
+ebbi
+avesti
+ebbe
+avemmo
+aveste
+ebbero
+avessi
+avesse
+avessimo
+avessero
+avendo
+avuto
+avuta
+avuti
+avute
+
+ | forms of essere, to be (not including the infinitive):
+sono
+sei
+siamo
+siete
+sia
+siate
+siano
+sarò
+sarai
+sarà
+saremo
+sarete
+saranno
+sarei
+saresti
+sarebbe
+saremmo
+sareste
+sarebbero
+ero
+eri
+era
+eravamo
+eravate
+erano
+fui
+fosti
+fu
+fummo
+foste
+furono
+fossi
+fosse
+fossimo
+fossero
+essendo
+
+ | forms of fare, to do (not including the infinitive, fa, fat-):
+faccio
+fai
+facciamo
+fanno
+faccia
+facciate
+facciano
+farò
+farai
+farà
+faremo
+farete
+faranno
+farei
+faresti
+farebbe
+faremmo
+fareste
+farebbero
+facevo
+facevi
+faceva
+facevamo
+facevate
+facevano
+feci
+facesti
+fece
+facemmo
+faceste
+fecero
+facessi
+facesse
+facessimo
+facessero
+facendo
+
+ | forms of stare, to be (not including the infinitive):
+sto
+stai
+sta
+stiamo
+stanno
+stia
+stiate
+stiano
+starò
+starai
+starà
+staremo
+starete
+staranno
+starei
+staresti
+starebbe
+staremmo
+stareste
+starebbero
+stavo
+stavi
+stava
+stavamo
+stavate
+stavano
+stetti
+stesti
+stette
+stemmo
+steste
+stettero
+stessi
+stesse
+stessimo
+stessero
+''')
+
+
+class SearchItalian(SearchLanguage):
+ lang = 'it'
+ language_name = 'Italian'
+ js_stemmer_rawcode = 'italian-stemmer.js'
+ stopwords = italian_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('italian')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/ja.py b/sphinx/search/ja.py
new file mode 100644
index 0000000..de221ce
--- /dev/null
+++ b/sphinx/search/ja.py
@@ -0,0 +1,531 @@
+"""Japanese search language: includes routine to split words."""
+
+# Python Version of TinySegmenter
+# (http://chasen.org/~taku/software/TinySegmenter/)
+# TinySegmenter is super compact Japanese tokenizer.
+#
+# TinySegmenter was originally developed by Taku Kudo <taku(at)chasen.org>.
+# Python Version was developed by xnights <programming.magic(at)gmail.com>.
+# For details, see http://programming-magic.com/?id=170
+
+from __future__ import annotations
+
+import os
+import re
+import sys
+from typing import TYPE_CHECKING, Any, Dict, List
+
+try:
+ import MeCab
+ native_module = True
+except ImportError:
+ native_module = False
+
+try:
+ import janome.tokenizer
+ janome_module = True
+except ImportError:
+ janome_module = False
+
+from sphinx.errors import ExtensionError, SphinxError
+from sphinx.search import SearchLanguage
+from sphinx.util import import_object
+
+
+class BaseSplitter:
+ def __init__(self, options: dict) -> None:
+ self.options = options
+
+ def split(self, input: str) -> list[str]:
+ """
+ :param str input:
+ :return:
+ :rtype: list[str]
+ """
+ raise NotImplementedError
+
+
+class MecabSplitter(BaseSplitter):
+ def __init__(self, options: dict) -> None:
+ super().__init__(options)
+ self.ctypes_libmecab: Any = None
+ self.ctypes_mecab: Any = None
+ if not native_module:
+ self.init_ctypes(options)
+ else:
+ self.init_native(options)
+ self.dict_encode = options.get('dic_enc', 'utf-8')
+
+ def split(self, input: str) -> list[str]:
+ if native_module:
+ result = self.native.parse(input)
+ else:
+ result = self.ctypes_libmecab.mecab_sparse_tostr(
+ self.ctypes_mecab, input.encode(self.dict_encode))
+ return result.split(' ')
+
+ def init_native(self, options: dict) -> None:
+ param = '-Owakati'
+ dict = options.get('dict')
+ if dict:
+ param += ' -d %s' % dict
+ self.native = MeCab.Tagger(param)
+
+ def init_ctypes(self, options: dict) -> None:
+ import ctypes.util
+
+ lib = options.get('lib')
+
+ if lib is None:
+ if sys.platform.startswith('win'):
+ libname = 'libmecab.dll'
+ else:
+ libname = 'mecab'
+ libpath = ctypes.util.find_library(libname)
+ elif os.path.basename(lib) == lib:
+ libpath = ctypes.util.find_library(lib)
+ else:
+ libpath = None
+ if os.path.exists(lib):
+ libpath = lib
+ if libpath is None:
+ raise RuntimeError('MeCab dynamic library is not available')
+
+ param = 'mecab -Owakati'
+ dict = options.get('dict')
+ if dict:
+ param += ' -d %s' % dict
+
+ fs_enc = sys.getfilesystemencoding() or sys.getdefaultencoding()
+
+ self.ctypes_libmecab = ctypes.CDLL(libpath)
+ self.ctypes_libmecab.mecab_new2.argtypes = (ctypes.c_char_p,)
+ self.ctypes_libmecab.mecab_new2.restype = ctypes.c_void_p
+ self.ctypes_libmecab.mecab_sparse_tostr.argtypes = (ctypes.c_void_p, ctypes.c_char_p)
+ self.ctypes_libmecab.mecab_sparse_tostr.restype = ctypes.c_char_p
+ self.ctypes_mecab = self.ctypes_libmecab.mecab_new2(param.encode(fs_enc))
+ if self.ctypes_mecab is None:
+ raise SphinxError('mecab initialization failed')
+
+ def __del__(self) -> None:
+ if self.ctypes_libmecab:
+ self.ctypes_libmecab.mecab_destroy(self.ctypes_mecab)
+
+
+class JanomeSplitter(BaseSplitter):
+ def __init__(self, options: dict) -> None:
+ super().__init__(options)
+ self.user_dict = options.get('user_dic')
+ self.user_dict_enc = options.get('user_dic_enc', 'utf8')
+ self.init_tokenizer()
+
+ def init_tokenizer(self) -> None:
+ if not janome_module:
+ raise RuntimeError('Janome is not available')
+ self.tokenizer = janome.tokenizer.Tokenizer(udic=self.user_dict, udic_enc=self.user_dict_enc)
+
+ def split(self, input: str) -> list[str]:
+ result = ' '.join(token.surface for token in self.tokenizer.tokenize(input))
+ return result.split(' ')
+
+
+class DefaultSplitter(BaseSplitter):
+ patterns_ = {re.compile(pattern): value for pattern, value in {
+ '[一二三四五六七八九十百千万億兆]': 'M',
+ '[一-龠々〆ヵヶ]': 'H',
+ '[ぁ-ん]': 'I',
+ '[ァ-ヴーア-ン゙ー]': 'K',
+ '[a-zA-Za-zA-Z]': 'A',
+ '[0-90-9]': 'N',
+ }.items()}
+ BIAS__ = -332
+ BC1__ = {'HH': 6, 'II': 2461, 'KH': 406, 'OH': -1378}
+ BC2__ = {'AA': -3267, 'AI': 2744, 'AN': -878, 'HH': -4070, 'HM': -1711,
+ 'HN': 4012, 'HO': 3761, 'IA': 1327, 'IH': -1184, 'II': -1332,
+ 'IK': 1721, 'IO': 5492, 'KI': 3831, 'KK': -8741, 'MH': -3132,
+ 'MK': 3334, 'OO': -2920}
+ BC3__ = {'HH': 996, 'HI': 626, 'HK': -721, 'HN': -1307, 'HO': -836, 'IH': -301,
+ 'KK': 2762, 'MK': 1079, 'MM': 4034, 'OA': -1652, 'OH': 266}
+ BP1__ = {'BB': 295, 'OB': 304, 'OO': -125, 'UB': 352}
+ BP2__ = {'BO': 60, 'OO': -1762}
+ BQ1__ = {'BHH': 1150, 'BHM': 1521, 'BII': -1158, 'BIM': 886, 'BMH': 1208,
+ 'BNH': 449, 'BOH': -91, 'BOO': -2597, 'OHI': 451, 'OIH': -296,
+ 'OKA': 1851, 'OKH': -1020, 'OKK': 904, 'OOO': 2965}
+ BQ2__ = {'BHH': 118, 'BHI': -1159, 'BHM': 466, 'BIH': -919, 'BKK': -1720,
+ 'BKO': 864, 'OHH': -1139, 'OHM': -181, 'OIH': 153, 'UHI': -1146}
+ BQ3__ = {'BHH': -792, 'BHI': 2664, 'BII': -299, 'BKI': 419, 'BMH': 937,
+ 'BMM': 8335, 'BNN': 998, 'BOH': 775, 'OHH': 2174, 'OHM': 439, 'OII': 280,
+ 'OKH': 1798, 'OKI': -793, 'OKO': -2242, 'OMH': -2402, 'OOO': 11699}
+ BQ4__ = {'BHH': -3895, 'BIH': 3761, 'BII': -4654, 'BIK': 1348, 'BKK': -1806,
+ 'BMI': -3385, 'BOO': -12396, 'OAH': 926, 'OHH': 266, 'OHK': -2036,
+ 'ONN': -973}
+ BW1__ = {',と': 660, ',同': 727, 'B1あ': 1404, 'B1同': 542, '、と': 660,
+ '、同': 727, '」と': 1682, 'あっ': 1505, 'いう': 1743, 'いっ': -2055,
+ 'いる': 672, 'うし': -4817, 'うん': 665, 'から': 3472, 'がら': 600,
+ 'こう': -790, 'こと': 2083, 'こん': -1262, 'さら': -4143, 'さん': 4573,
+ 'した': 2641, 'して': 1104, 'すで': -3399, 'そこ': 1977, 'それ': -871,
+ 'たち': 1122, 'ため': 601, 'った': 3463, 'つい': -802, 'てい': 805,
+ 'てき': 1249, 'でき': 1127, 'です': 3445, 'では': 844, 'とい': -4915,
+ 'とみ': 1922, 'どこ': 3887, 'ない': 5713, 'なっ': 3015, 'など': 7379,
+ 'なん': -1113, 'にし': 2468, 'には': 1498, 'にも': 1671, 'に対': -912,
+ 'の一': -501, 'の中': 741, 'ませ': 2448, 'まで': 1711, 'まま': 2600,
+ 'まる': -2155, 'やむ': -1947, 'よっ': -2565, 'れた': 2369, 'れで': -913,
+ 'をし': 1860, 'を見': 731, '亡く': -1886, '京都': 2558, '取り': -2784,
+ '大き': -2604, '大阪': 1497, '平方': -2314, '引き': -1336, '日本': -195,
+ '本当': -2423, '毎日': -2113, '目指': -724, 'B1あ': 1404, 'B1同': 542,
+ '」と': 1682}
+ BW2__ = {'..': -11822, '11': -669, '――': -5730, '−−': -13175, 'いう': -1609,
+ 'うか': 2490, 'かし': -1350, 'かも': -602, 'から': -7194, 'かれ': 4612,
+ 'がい': 853, 'がら': -3198, 'きた': 1941, 'くな': -1597, 'こと': -8392,
+ 'この': -4193, 'させ': 4533, 'され': 13168, 'さん': -3977, 'しい': -1819,
+ 'しか': -545, 'した': 5078, 'して': 972, 'しな': 939, 'その': -3744,
+ 'たい': -1253, 'たた': -662, 'ただ': -3857, 'たち': -786, 'たと': 1224,
+ 'たは': -939, 'った': 4589, 'って': 1647, 'っと': -2094, 'てい': 6144,
+ 'てき': 3640, 'てく': 2551, 'ては': -3110, 'ても': -3065, 'でい': 2666,
+ 'でき': -1528, 'でし': -3828, 'です': -4761, 'でも': -4203, 'とい': 1890,
+ 'とこ': -1746, 'とと': -2279, 'との': 720, 'とみ': 5168, 'とも': -3941,
+ 'ない': -2488, 'なが': -1313, 'など': -6509, 'なの': 2614, 'なん': 3099,
+ 'にお': -1615, 'にし': 2748, 'にな': 2454, 'によ': -7236, 'に対': -14943,
+ 'に従': -4688, 'に関': -11388, 'のか': 2093, 'ので': -7059, 'のに': -6041,
+ 'のの': -6125, 'はい': 1073, 'はが': -1033, 'はず': -2532, 'ばれ': 1813,
+ 'まし': -1316, 'まで': -6621, 'まれ': 5409, 'めて': -3153, 'もい': 2230,
+ 'もの': -10713, 'らか': -944, 'らし': -1611, 'らに': -1897, 'りし': 651,
+ 'りま': 1620, 'れた': 4270, 'れて': 849, 'れば': 4114, 'ろう': 6067,
+ 'われ': 7901, 'を通': -11877, 'んだ': 728, 'んな': -4115, '一人': 602,
+ '一方': -1375, '一日': 970, '一部': -1051, '上が': -4479, '会社': -1116,
+ '出て': 2163, '分の': -7758, '同党': 970, '同日': -913, '大阪': -2471,
+ '委員': -1250, '少な': -1050, '年度': -8669, '年間': -1626, '府県': -2363,
+ '手権': -1982, '新聞': -4066, '日新': -722, '日本': -7068, '日米': 3372,
+ '曜日': -601, '朝鮮': -2355, '本人': -2697, '東京': -1543, '然と': -1384,
+ '社会': -1276, '立て': -990, '第に': -1612, '米国': -4268, '11': -669}
+ BW3__ = {'あた': -2194, 'あり': 719, 'ある': 3846, 'い.': -1185, 'い。': -1185,
+ 'いい': 5308, 'いえ': 2079, 'いく': 3029, 'いた': 2056, 'いっ': 1883,
+ 'いる': 5600, 'いわ': 1527, 'うち': 1117, 'うと': 4798, 'えと': 1454,
+ 'か.': 2857, 'か。': 2857, 'かけ': -743, 'かっ': -4098, 'かに': -669,
+ 'から': 6520, 'かり': -2670, 'が,': 1816, 'が、': 1816, 'がき': -4855,
+ 'がけ': -1127, 'がっ': -913, 'がら': -4977, 'がり': -2064, 'きた': 1645,
+ 'けど': 1374, 'こと': 7397, 'この': 1542, 'ころ': -2757, 'さい': -714,
+ 'さを': 976, 'し,': 1557, 'し、': 1557, 'しい': -3714, 'した': 3562,
+ 'して': 1449, 'しな': 2608, 'しま': 1200, 'す.': -1310, 'す。': -1310,
+ 'する': 6521, 'ず,': 3426, 'ず、': 3426, 'ずに': 841, 'そう': 428,
+ 'た.': 8875, 'た。': 8875, 'たい': -594, 'たの': 812, 'たり': -1183,
+ 'たる': -853, 'だ.': 4098, 'だ。': 4098, 'だっ': 1004, 'った': -4748,
+ 'って': 300, 'てい': 6240, 'てお': 855, 'ても': 302, 'です': 1437,
+ 'でに': -1482, 'では': 2295, 'とう': -1387, 'とし': 2266, 'との': 541,
+ 'とも': -3543, 'どう': 4664, 'ない': 1796, 'なく': -903, 'など': 2135,
+ 'に,': -1021, 'に、': -1021, 'にし': 1771, 'にな': 1906, 'には': 2644,
+ 'の,': -724, 'の、': -724, 'の子': -1000, 'は,': 1337, 'は、': 1337,
+ 'べき': 2181, 'まし': 1113, 'ます': 6943, 'まっ': -1549, 'まで': 6154,
+ 'まれ': -793, 'らし': 1479, 'られ': 6820, 'るる': 3818, 'れ,': 854,
+ 'れ、': 854, 'れた': 1850, 'れて': 1375, 'れば': -3246, 'れる': 1091,
+ 'われ': -605, 'んだ': 606, 'んで': 798, 'カ月': 990, '会議': 860,
+ '入り': 1232, '大会': 2217, '始め': 1681, '市': 965, '新聞': -5055,
+ '日,': 974, '日、': 974, '社会': 2024, 'カ月': 990}
+ TC1__ = {'AAA': 1093, 'HHH': 1029, 'HHM': 580, 'HII': 998, 'HOH': -390,
+ 'HOM': -331, 'IHI': 1169, 'IOH': -142, 'IOI': -1015, 'IOM': 467,
+ 'MMH': 187, 'OOI': -1832}
+ TC2__ = {'HHO': 2088, 'HII': -1023, 'HMM': -1154, 'IHI': -1965,
+ 'KKH': 703, 'OII': -2649}
+ TC3__ = {'AAA': -294, 'HHH': 346, 'HHI': -341, 'HII': -1088, 'HIK': 731,
+ 'HOH': -1486, 'IHH': 128, 'IHI': -3041, 'IHO': -1935, 'IIH': -825,
+ 'IIM': -1035, 'IOI': -542, 'KHH': -1216, 'KKA': 491, 'KKH': -1217,
+ 'KOK': -1009, 'MHH': -2694, 'MHM': -457, 'MHO': 123, 'MMH': -471,
+ 'NNH': -1689, 'NNO': 662, 'OHO': -3393}
+ TC4__ = {'HHH': -203, 'HHI': 1344, 'HHK': 365, 'HHM': -122, 'HHN': 182,
+ 'HHO': 669, 'HIH': 804, 'HII': 679, 'HOH': 446, 'IHH': 695,
+ 'IHO': -2324, 'IIH': 321, 'III': 1497, 'IIO': 656, 'IOO': 54,
+ 'KAK': 4845, 'KKA': 3386, 'KKK': 3065, 'MHH': -405, 'MHI': 201,
+ 'MMH': -241, 'MMM': 661, 'MOM': 841}
+ TQ1__ = {'BHHH': -227, 'BHHI': 316, 'BHIH': -132, 'BIHH': 60, 'BIII': 1595,
+ 'BNHH': -744, 'BOHH': 225, 'BOOO': -908, 'OAKK': 482, 'OHHH': 281,
+ 'OHIH': 249, 'OIHI': 200, 'OIIH': -68}
+ TQ2__ = {'BIHH': -1401, 'BIII': -1033, 'BKAK': -543, 'BOOO': -5591}
+ TQ3__ = {'BHHH': 478, 'BHHM': -1073, 'BHIH': 222, 'BHII': -504, 'BIIH': -116,
+ 'BIII': -105, 'BMHI': -863, 'BMHM': -464, 'BOMH': 620, 'OHHH': 346,
+ 'OHHI': 1729, 'OHII': 997, 'OHMH': 481, 'OIHH': 623, 'OIIH': 1344,
+ 'OKAK': 2792, 'OKHH': 587, 'OKKA': 679, 'OOHH': 110, 'OOII': -685}
+ TQ4__ = {'BHHH': -721, 'BHHM': -3604, 'BHII': -966, 'BIIH': -607, 'BIII': -2181,
+ 'OAAA': -2763, 'OAKK': 180, 'OHHH': -294, 'OHHI': 2446, 'OHHO': 480,
+ 'OHIH': -1573, 'OIHH': 1935, 'OIHI': -493, 'OIIH': 626, 'OIII': -4007,
+ 'OKAK': -8156}
+ TW1__ = {'につい': -4681, '東京都': 2026}
+ TW2__ = {'ある程': -2049, 'いった': -1256, 'ころが': -2434, 'しょう': 3873,
+ 'その後': -4430, 'だって': -1049, 'ていた': 1833, 'として': -4657,
+ 'ともに': -4517, 'もので': 1882, '一気に': -792, '初めて': -1512,
+ '同時に': -8097, '大きな': -1255, '対して': -2721, '社会党': -3216}
+ TW3__ = {'いただ': -1734, 'してい': 1314, 'として': -4314, 'につい': -5483,
+ 'にとっ': -5989, 'に当た': -6247, 'ので,': -727, 'ので、': -727,
+ 'のもの': -600, 'れから': -3752, '十二月': -2287}
+ TW4__ = {'いう.': 8576, 'いう。': 8576, 'からな': -2348, 'してい': 2958,
+ 'たが,': 1516, 'たが、': 1516, 'ている': 1538, 'という': 1349,
+ 'ました': 5543, 'ません': 1097, 'ようと': -4258, 'よると': 5865}
+ UC1__ = {'A': 484, 'K': 93, 'M': 645, 'O': -505}
+ UC2__ = {'A': 819, 'H': 1059, 'I': 409, 'M': 3987, 'N': 5775, 'O': 646}
+ UC3__ = {'A': -1370, 'I': 2311}
+ UC4__ = {'A': -2643, 'H': 1809, 'I': -1032, 'K': -3450, 'M': 3565,
+ 'N': 3876, 'O': 6646}
+ UC5__ = {'H': 313, 'I': -1238, 'K': -799, 'M': 539, 'O': -831}
+ UC6__ = {'H': -506, 'I': -253, 'K': 87, 'M': 247, 'O': -387}
+ UP1__ = {'O': -214}
+ UP2__ = {'B': 69, 'O': 935}
+ UP3__ = {'B': 189}
+ UQ1__ = {'BH': 21, 'BI': -12, 'BK': -99, 'BN': 142, 'BO': -56, 'OH': -95,
+ 'OI': 477, 'OK': 410, 'OO': -2422}
+ UQ2__ = {'BH': 216, 'BI': 113, 'OK': 1759}
+ UQ3__ = {'BA': -479, 'BH': 42, 'BI': 1913, 'BK': -7198, 'BM': 3160,
+ 'BN': 6427, 'BO': 14761, 'OI': -827, 'ON': -3212}
+ UW1__ = {',': 156, '、': 156, '「': -463, 'あ': -941, 'う': -127, 'が': -553,
+ 'き': 121, 'こ': 505, 'で': -201, 'と': -547, 'ど': -123, 'に': -789,
+ 'の': -185, 'は': -847, 'も': -466, 'や': -470, 'よ': 182, 'ら': -292,
+ 'り': 208, 'れ': 169, 'を': -446, 'ん': -137, '・': -135, '主': -402,
+ '京': -268, '区': -912, '午': 871, '国': -460, '大': 561, '委': 729,
+ '市': -411, '日': -141, '理': 361, '生': -408, '県': -386, '都': -718,
+ '「': -463, '・': -135}
+ UW2__ = {',': -829, '、': -829, '〇': 892, '「': -645, '」': 3145, 'あ': -538,
+ 'い': 505, 'う': 134, 'お': -502, 'か': 1454, 'が': -856, 'く': -412,
+ 'こ': 1141, 'さ': 878, 'ざ': 540, 'し': 1529, 'す': -675, 'せ': 300,
+ 'そ': -1011, 'た': 188, 'だ': 1837, 'つ': -949, 'て': -291, 'で': -268,
+ 'と': -981, 'ど': 1273, 'な': 1063, 'に': -1764, 'の': 130, 'は': -409,
+ 'ひ': -1273, 'べ': 1261, 'ま': 600, 'も': -1263, 'や': -402, 'よ': 1639,
+ 'り': -579, 'る': -694, 'れ': 571, 'を': -2516, 'ん': 2095, 'ア': -587,
+ 'カ': 306, 'キ': 568, 'ッ': 831, '三': -758, '不': -2150, '世': -302,
+ '中': -968, '主': -861, '事': 492, '人': -123, '会': 978, '保': 362,
+ '入': 548, '初': -3025, '副': -1566, '北': -3414, '区': -422, '大': -1769,
+ '天': -865, '太': -483, '子': -1519, '学': 760, '実': 1023, '小': -2009,
+ '市': -813, '年': -1060, '強': 1067, '手': -1519, '揺': -1033, '政': 1522,
+ '文': -1355, '新': -1682, '日': -1815, '明': -1462, '最': -630, '朝': -1843,
+ '本': -1650, '東': -931, '果': -665, '次': -2378, '民': -180, '気': -1740,
+ '理': 752, '発': 529, '目': -1584, '相': -242, '県': -1165, '立': -763,
+ '第': 810, '米': 509, '自': -1353, '行': 838, '西': -744, '見': -3874,
+ '調': 1010, '議': 1198, '込': 3041, '開': 1758, '間': -1257, '「': -645,
+ '」': 3145, 'ッ': 831, 'ア': -587, 'カ': 306, 'キ': 568}
+ UW3__ = {',': 4889, '1': -800, '−': -1723, '、': 4889, '々': -2311, '〇': 5827,
+ '」': 2670, '〓': -3573, 'あ': -2696, 'い': 1006, 'う': 2342, 'え': 1983,
+ 'お': -4864, 'か': -1163, 'が': 3271, 'く': 1004, 'け': 388, 'げ': 401,
+ 'こ': -3552, 'ご': -3116, 'さ': -1058, 'し': -395, 'す': 584, 'せ': 3685,
+ 'そ': -5228, 'た': 842, 'ち': -521, 'っ': -1444, 'つ': -1081, 'て': 6167,
+ 'で': 2318, 'と': 1691, 'ど': -899, 'な': -2788, 'に': 2745, 'の': 4056,
+ 'は': 4555, 'ひ': -2171, 'ふ': -1798, 'へ': 1199, 'ほ': -5516, 'ま': -4384,
+ 'み': -120, 'め': 1205, 'も': 2323, 'や': -788, 'よ': -202, 'ら': 727,
+ 'り': 649, 'る': 5905, 'れ': 2773, 'わ': -1207, 'を': 6620, 'ん': -518,
+ 'ア': 551, 'グ': 1319, 'ス': 874, 'ッ': -1350, 'ト': 521, 'ム': 1109,
+ 'ル': 1591, 'ロ': 2201, 'ン': 278, '・': -3794, '一': -1619, '下': -1759,
+ '世': -2087, '両': 3815, '中': 653, '主': -758, '予': -1193, '二': 974,
+ '人': 2742, '今': 792, '他': 1889, '以': -1368, '低': 811, '何': 4265,
+ '作': -361, '保': -2439, '元': 4858, '党': 3593, '全': 1574, '公': -3030,
+ '六': 755, '共': -1880, '円': 5807, '再': 3095, '分': 457, '初': 2475,
+ '別': 1129, '前': 2286, '副': 4437, '力': 365, '動': -949, '務': -1872,
+ '化': 1327, '北': -1038, '区': 4646, '千': -2309, '午': -783, '協': -1006,
+ '口': 483, '右': 1233, '各': 3588, '合': -241, '同': 3906, '和': -837,
+ '員': 4513, '国': 642, '型': 1389, '場': 1219, '外': -241, '妻': 2016,
+ '学': -1356, '安': -423, '実': -1008, '家': 1078, '小': -513, '少': -3102,
+ '州': 1155, '市': 3197, '平': -1804, '年': 2416, '広': -1030, '府': 1605,
+ '度': 1452, '建': -2352, '当': -3885, '得': 1905, '思': -1291, '性': 1822,
+ '戸': -488, '指': -3973, '政': -2013, '教': -1479, '数': 3222, '文': -1489,
+ '新': 1764, '日': 2099, '旧': 5792, '昨': -661, '時': -1248, '曜': -951,
+ '最': -937, '月': 4125, '期': 360, '李': 3094, '村': 364, '東': -805,
+ '核': 5156, '森': 2438, '業': 484, '氏': 2613, '民': -1694, '決': -1073,
+ '法': 1868, '海': -495, '無': 979, '物': 461, '特': -3850, '生': -273,
+ '用': 914, '町': 1215, '的': 7313, '直': -1835, '省': 792, '県': 6293,
+ '知': -1528, '私': 4231, '税': 401, '立': -960, '第': 1201, '米': 7767,
+ '系': 3066, '約': 3663, '級': 1384, '統': -4229, '総': 1163, '線': 1255,
+ '者': 6457, '能': 725, '自': -2869, '英': 785, '見': 1044, '調': -562,
+ '財': -733, '費': 1777, '車': 1835, '軍': 1375, '込': -1504, '通': -1136,
+ '選': -681, '郎': 1026, '郡': 4404, '部': 1200, '金': 2163, '長': 421,
+ '開': -1432, '間': 1302, '関': -1282, '雨': 2009, '電': -1045, '非': 2066,
+ '駅': 1620, '1': -800, '」': 2670, '・': -3794, 'ッ': -1350, 'ア': 551,
+ 'グ': 1319, 'ス': 874, 'ト': 521, 'ム': 1109, 'ル': 1591, 'ロ': 2201, 'ン': 278}
+ UW4__ = {',': 3930, '.': 3508, '―': -4841, '、': 3930, '。': 3508, '〇': 4999,
+ '「': 1895, '」': 3798, '〓': -5156, 'あ': 4752, 'い': -3435, 'う': -640,
+ 'え': -2514, 'お': 2405, 'か': 530, 'が': 6006, 'き': -4482, 'ぎ': -3821,
+ 'く': -3788, 'け': -4376, 'げ': -4734, 'こ': 2255, 'ご': 1979, 'さ': 2864,
+ 'し': -843, 'じ': -2506, 'す': -731, 'ず': 1251, 'せ': 181, 'そ': 4091,
+ 'た': 5034, 'だ': 5408, 'ち': -3654, 'っ': -5882, 'つ': -1659, 'て': 3994,
+ 'で': 7410, 'と': 4547, 'な': 5433, 'に': 6499, 'ぬ': 1853, 'ね': 1413,
+ 'の': 7396, 'は': 8578, 'ば': 1940, 'ひ': 4249, 'び': -4134, 'ふ': 1345,
+ 'へ': 6665, 'べ': -744, 'ほ': 1464, 'ま': 1051, 'み': -2082, 'む': -882,
+ 'め': -5046, 'も': 4169, 'ゃ': -2666, 'や': 2795, 'ょ': -1544, 'よ': 3351,
+ 'ら': -2922, 'り': -9726, 'る': -14896, 'れ': -2613, 'ろ': -4570,
+ 'わ': -1783, 'を': 13150, 'ん': -2352, 'カ': 2145, 'コ': 1789, 'セ': 1287,
+ 'ッ': -724, 'ト': -403, 'メ': -1635, 'ラ': -881, 'リ': -541, 'ル': -856,
+ 'ン': -3637, '・': -4371, 'ー': -11870, '一': -2069, '中': 2210, '予': 782,
+ '事': -190, '井': -1768, '人': 1036, '以': 544, '会': 950, '体': -1286,
+ '作': 530, '側': 4292, '先': 601, '党': -2006, '共': -1212, '内': 584,
+ '円': 788, '初': 1347, '前': 1623, '副': 3879, '力': -302, '動': -740,
+ '務': -2715, '化': 776, '区': 4517, '協': 1013, '参': 1555, '合': -1834,
+ '和': -681, '員': -910, '器': -851, '回': 1500, '国': -619, '園': -1200,
+ '地': 866, '場': -1410, '塁': -2094, '士': -1413, '多': 1067, '大': 571,
+ '子': -4802, '学': -1397, '定': -1057, '寺': -809, '小': 1910, '屋': -1328,
+ '山': -1500, '島': -2056, '川': -2667, '市': 2771, '年': 374, '庁': -4556,
+ '後': 456, '性': 553, '感': 916, '所': -1566, '支': 856, '改': 787,
+ '政': 2182, '教': 704, '文': 522, '方': -856, '日': 1798, '時': 1829,
+ '最': 845, '月': -9066, '木': -485, '来': -442, '校': -360, '業': -1043,
+ '氏': 5388, '民': -2716, '気': -910, '沢': -939, '済': -543, '物': -735,
+ '率': 672, '球': -1267, '生': -1286, '産': -1101, '田': -2900, '町': 1826,
+ '的': 2586, '目': 922, '省': -3485, '県': 2997, '空': -867, '立': -2112,
+ '第': 788, '米': 2937, '系': 786, '約': 2171, '経': 1146, '統': -1169,
+ '総': 940, '線': -994, '署': 749, '者': 2145, '能': -730, '般': -852,
+ '行': -792, '規': 792, '警': -1184, '議': -244, '谷': -1000, '賞': 730,
+ '車': -1481, '軍': 1158, '輪': -1433, '込': -3370, '近': 929, '道': -1291,
+ '選': 2596, '郎': -4866, '都': 1192, '野': -1100, '銀': -2213, '長': 357,
+ '間': -2344, '院': -2297, '際': -2604, '電': -878, '領': -1659, '題': -792,
+ '館': -1984, '首': 1749, '高': 2120, '「': 1895, '」': 3798, '・': -4371,
+ 'ッ': -724, 'ー': -11870, 'カ': 2145, 'コ': 1789, 'セ': 1287, 'ト': -403,
+ 'メ': -1635, 'ラ': -881, 'リ': -541, 'ル': -856, 'ン': -3637}
+ UW5__ = {',': 465, '.': -299, '1': -514, 'E2': -32768, ']': -2762, '、': 465,
+ '。': -299, '「': 363, 'あ': 1655, 'い': 331, 'う': -503, 'え': 1199,
+ 'お': 527, 'か': 647, 'が': -421, 'き': 1624, 'ぎ': 1971, 'く': 312,
+ 'げ': -983, 'さ': -1537, 'し': -1371, 'す': -852, 'だ': -1186, 'ち': 1093,
+ 'っ': 52, 'つ': 921, 'て': -18, 'で': -850, 'と': -127, 'ど': 1682,
+ 'な': -787, 'に': -1224, 'の': -635, 'は': -578, 'べ': 1001, 'み': 502,
+ 'め': 865, 'ゃ': 3350, 'ょ': 854, 'り': -208, 'る': 429, 'れ': 504,
+ 'わ': 419, 'を': -1264, 'ん': 327, 'イ': 241, 'ル': 451, 'ン': -343,
+ '中': -871, '京': 722, '会': -1153, '党': -654, '務': 3519, '区': -901,
+ '告': 848, '員': 2104, '大': -1296, '学': -548, '定': 1785, '嵐': -1304,
+ '市': -2991, '席': 921, '年': 1763, '思': 872, '所': -814, '挙': 1618,
+ '新': -1682, '日': 218, '月': -4353, '査': 932, '格': 1356, '機': -1508,
+ '氏': -1347, '田': 240, '町': -3912, '的': -3149, '相': 1319, '省': -1052,
+ '県': -4003, '研': -997, '社': -278, '空': -813, '統': 1955, '者': -2233,
+ '表': 663, '語': -1073, '議': 1219, '選': -1018, '郎': -368, '長': 786,
+ '間': 1191, '題': 2368, '館': -689, '1': -514, 'E2': -32768, '「': 363,
+ 'イ': 241, 'ル': 451, 'ン': -343}
+ UW6__ = {',': 227, '.': 808, '1': -270, 'E1': 306, '、': 227, '。': 808,
+ 'あ': -307, 'う': 189, 'か': 241, 'が': -73, 'く': -121, 'こ': -200,
+ 'じ': 1782, 'す': 383, 'た': -428, 'っ': 573, 'て': -1014, 'で': 101,
+ 'と': -105, 'な': -253, 'に': -149, 'の': -417, 'は': -236, 'も': -206,
+ 'り': 187, 'る': -135, 'を': 195, 'ル': -673, 'ン': -496, '一': -277,
+ '中': 201, '件': -800, '会': 624, '前': 302, '区': 1792, '員': -1212,
+ '委': 798, '学': -960, '市': 887, '広': -695, '後': 535, '業': -697,
+ '相': 753, '社': -507, '福': 974, '空': -822, '者': 1811, '連': 463,
+ '郎': 1082, '1': -270, 'E1': 306, 'ル': -673, 'ン': -496}
+
+ # ctype_
+ def ctype_(self, char: str) -> str:
+ for pattern, value in self.patterns_.items():
+ if pattern.match(char):
+ return value
+ return 'O'
+
+ # ts_
+ def ts_(self, dict: dict[str, int], key: str) -> int:
+ if key in dict:
+ return dict[key]
+ return 0
+
+ # segment
+ def split(self, input: str) -> list[str]:
+ if not input:
+ return []
+
+ result = []
+ seg = ['B3', 'B2', 'B1']
+ ctype = ['O', 'O', 'O']
+ for t in input:
+ seg.append(t)
+ ctype.append(self.ctype_(t))
+ seg.append('E1')
+ seg.append('E2')
+ seg.append('E3')
+ ctype.append('O')
+ ctype.append('O')
+ ctype.append('O')
+ word = seg[3]
+ p1 = 'U'
+ p2 = 'U'
+ p3 = 'U'
+
+ for i in range(4, len(seg) - 3):
+ score = self.BIAS__
+ w1 = seg[i-3]
+ w2 = seg[i-2]
+ w3 = seg[i-1]
+ w4 = seg[i]
+ w5 = seg[i+1]
+ w6 = seg[i+2]
+ c1 = ctype[i-3]
+ c2 = ctype[i-2]
+ c3 = ctype[i-1]
+ c4 = ctype[i]
+ c5 = ctype[i+1]
+ c6 = ctype[i+2]
+ score += self.ts_(self.UP1__, p1)
+ score += self.ts_(self.UP2__, p2)
+ score += self.ts_(self.UP3__, p3)
+ score += self.ts_(self.BP1__, p1 + p2)
+ score += self.ts_(self.BP2__, p2 + p3)
+ score += self.ts_(self.UW1__, w1)
+ score += self.ts_(self.UW2__, w2)
+ score += self.ts_(self.UW3__, w3)
+ score += self.ts_(self.UW4__, w4)
+ score += self.ts_(self.UW5__, w5)
+ score += self.ts_(self.UW6__, w6)
+ score += self.ts_(self.BW1__, w2 + w3)
+ score += self.ts_(self.BW2__, w3 + w4)
+ score += self.ts_(self.BW3__, w4 + w5)
+ score += self.ts_(self.TW1__, w1 + w2 + w3)
+ score += self.ts_(self.TW2__, w2 + w3 + w4)
+ score += self.ts_(self.TW3__, w3 + w4 + w5)
+ score += self.ts_(self.TW4__, w4 + w5 + w6)
+ score += self.ts_(self.UC1__, c1)
+ score += self.ts_(self.UC2__, c2)
+ score += self.ts_(self.UC3__, c3)
+ score += self.ts_(self.UC4__, c4)
+ score += self.ts_(self.UC5__, c5)
+ score += self.ts_(self.UC6__, c6)
+ score += self.ts_(self.BC1__, c2 + c3)
+ score += self.ts_(self.BC2__, c3 + c4)
+ score += self.ts_(self.BC3__, c4 + c5)
+ score += self.ts_(self.TC1__, c1 + c2 + c3)
+ score += self.ts_(self.TC2__, c2 + c3 + c4)
+ score += self.ts_(self.TC3__, c3 + c4 + c5)
+ score += self.ts_(self.TC4__, c4 + c5 + c6)
+# score += self.ts_(self.TC5__, c4 + c5 + c6)
+ score += self.ts_(self.UQ1__, p1 + c1)
+ score += self.ts_(self.UQ2__, p2 + c2)
+ score += self.ts_(self.UQ1__, p3 + c3)
+ score += self.ts_(self.BQ1__, p2 + c2 + c3)
+ score += self.ts_(self.BQ2__, p2 + c3 + c4)
+ score += self.ts_(self.BQ3__, p3 + c2 + c3)
+ score += self.ts_(self.BQ4__, p3 + c3 + c4)
+ score += self.ts_(self.TQ1__, p2 + c1 + c2 + c3)
+ score += self.ts_(self.TQ2__, p2 + c2 + c3 + c4)
+ score += self.ts_(self.TQ3__, p3 + c1 + c2 + c3)
+ score += self.ts_(self.TQ4__, p3 + c2 + c3 + c4)
+ p = 'O'
+ if score > 0:
+ result.append(word.strip())
+ word = ''
+ p = 'B'
+ p1 = p2
+ p2 = p3
+ p3 = p
+ word += seg[i]
+
+ result.append(word.strip())
+ return result
+
+
+class SearchJapanese(SearchLanguage):
+ """
+ Japanese search implementation: uses no stemmer, but word splitting is quite
+ complicated.
+ """
+ lang = 'ja'
+ language_name = 'Japanese'
+
+ def init(self, options: dict) -> None:
+ dotted_path = options.get('type', 'sphinx.search.ja.DefaultSplitter')
+ try:
+ self.splitter = import_object(dotted_path)(options)
+ except ExtensionError as exc:
+ raise ExtensionError("Splitter module %r can't be imported" %
+ dotted_path) from exc
+
+ def split(self, input: str) -> list[str]:
+ return self.splitter.split(input)
+
+ def word_filter(self, stemmed_word: str) -> bool:
+ return len(stemmed_word) > 1
+
+ def stem(self, word: str) -> str:
+ return word
diff --git a/sphinx/search/minified-js/base-stemmer.js b/sphinx/search/minified-js/base-stemmer.js
new file mode 100644
index 0000000..0822908
--- /dev/null
+++ b/sphinx/search/minified-js/base-stemmer.js
@@ -0,0 +1 @@
+BaseStemmer=function(){this.setCurrent=function(r){this.current=r;this.cursor=0;this.limit=this.current.length;this.limit_backward=0;this.bra=this.cursor;this.ket=this.limit};this.getCurrent=function(){return this.current};this.copy_from=function(r){this.current=r.current;this.cursor=r.cursor;this.limit=r.limit;this.limit_backward=r.limit_backward;this.bra=r.bra;this.ket=r.ket};this.in_grouping=function(r,t,i){if(this.cursor>=this.limit)return false;var s=this.current.charCodeAt(this.cursor);if(s>i||s<t)return false;s-=t;if((r[s>>>3]&1<<(s&7))==0)return false;this.cursor++;return true};this.in_grouping_b=function(r,t,i){if(this.cursor<=this.limit_backward)return false;var s=this.current.charCodeAt(this.cursor-1);if(s>i||s<t)return false;s-=t;if((r[s>>>3]&1<<(s&7))==0)return false;this.cursor--;return true};this.out_grouping=function(r,t,i){if(this.cursor>=this.limit)return false;var s=this.current.charCodeAt(this.cursor);if(s>i||s<t){this.cursor++;return true}s-=t;if((r[s>>>3]&1<<(s&7))==0){this.cursor++;return true}return false};this.out_grouping_b=function(r,t,i){if(this.cursor<=this.limit_backward)return false;var s=this.current.charCodeAt(this.cursor-1);if(s>i||s<t){this.cursor--;return true}s-=t;if((r[s>>>3]&1<<(s&7))==0){this.cursor--;return true}return false};this.eq_s=function(r){if(this.limit-this.cursor<r.length)return false;if(this.current.slice(this.cursor,this.cursor+r.length)!=r){return false}this.cursor+=r.length;return true};this.eq_s_b=function(r){if(this.cursor-this.limit_backward<r.length)return false;if(this.current.slice(this.cursor-r.length,this.cursor)!=r){return false}this.cursor-=r.length;return true};this.find_among=function(r){var t=0;var i=r.length;var s=this.cursor;var e=this.limit;var h=0;var u=0;var n=false;while(true){var c=t+(i-t>>>1);var a=0;var f=h<u?h:u;var l=r[c];var o;for(o=f;o<l[0].length;o++){if(s+f==e){a=-1;break}a=this.current.charCodeAt(s+f)-l[0].charCodeAt(o);if(a!=0)break;f++}if(a<0){i=c;u=f}else{t=c;h=f}if(i-t<=1){if(t>0)break;if(i==t)break;if(n)break;n=true}}do{var l=r[t];if(h>=l[0].length){this.cursor=s+l[0].length;if(l.length<4)return l[2];var v=l[3](this);this.cursor=s+l[0].length;if(v)return l[2]}t=l[1]}while(t>=0);return 0};this.find_among_b=function(r){var t=0;var i=r.length;var s=this.cursor;var e=this.limit_backward;var h=0;var u=0;var n=false;while(true){var c=t+(i-t>>1);var a=0;var f=h<u?h:u;var l=r[c];var o;for(o=l[0].length-1-f;o>=0;o--){if(s-f==e){a=-1;break}a=this.current.charCodeAt(s-1-f)-l[0].charCodeAt(o);if(a!=0)break;f++}if(a<0){i=c;u=f}else{t=c;h=f}if(i-t<=1){if(t>0)break;if(i==t)break;if(n)break;n=true}}do{var l=r[t];if(h>=l[0].length){this.cursor=s-l[0].length;if(l.length<4)return l[2];var v=l[3](this);this.cursor=s-l[0].length;if(v)return l[2]}t=l[1]}while(t>=0);return 0};this.replace_s=function(r,t,i){var s=i.length-(t-r);this.current=this.current.slice(0,r)+i+this.current.slice(t);this.limit+=s;if(this.cursor>=t)this.cursor+=s;else if(this.cursor>r)this.cursor=r;return s};this.slice_check=function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>this.current.length){return false}return true};this.slice_from=function(r){var t=false;if(this.slice_check()){this.replace_s(this.bra,this.ket,r);t=true}return t};this.slice_del=function(){return this.slice_from("")};this.insert=function(r,t,i){var s=this.replace_s(r,t,i);if(r<=this.bra)this.bra+=s;if(r<=this.ket)this.ket+=s};this.slice_to=function(){var r="";if(this.slice_check()){r=this.current.slice(this.bra,this.ket)}return r};this.assign_to=function(){return this.current.slice(0,this.limit)}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/danish-stemmer.js b/sphinx/search/minified-js/danish-stemmer.js
new file mode 100644
index 0000000..f3fc600
--- /dev/null
+++ b/sphinx/search/minified-js/danish-stemmer.js
@@ -0,0 +1 @@
+DanishStemmer=function(){var r=new BaseStemmer;var e=[["hed",-1,1],["ethed",0,1],["ered",-1,1],["e",-1,1],["erede",3,1],["ende",3,1],["erende",5,1],["ene",3,1],["erne",3,1],["ere",3,1],["en",-1,1],["heden",10,1],["eren",10,1],["er",-1,1],["heder",13,1],["erer",13,1],["s",-1,2],["heds",16,1],["es",16,1],["endes",18,1],["erendes",19,1],["enes",18,1],["ernes",18,1],["eres",18,1],["ens",16,1],["hedens",24,1],["erens",24,1],["ers",16,1],["ets",16,1],["erets",28,1],["et",-1,1],["eret",30,1]];var i=[["gd",-1,-1],["dt",-1,-1],["gt",-1,-1],["kt",-1,-1]];var s=[["ig",-1,1],["lig",0,1],["elig",1,1],["els",-1,1],["løst",-1,2]];var t=[119,223,119,1];var a=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128];var u=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16];var c=0;var l=0;var n="";function o(){l=r.limit;var e=r.cursor;{var i=r.cursor+3;if(i>r.limit){return false}r.cursor=i}c=r.cursor;r.cursor=e;r:while(true){var s=r.cursor;e:{if(!r.in_grouping(a,97,248)){break e}r.cursor=s;break r}r.cursor=s;if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){e:{if(!r.out_grouping(a,97,248)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}l=r.cursor;r:{if(!(l<c)){break r}l=c}return true}function f(){var i;if(r.cursor<l){return false}var s=r.limit_backward;r.limit_backward=l;r.ket=r.cursor;i=r.find_among_b(e);if(i==0){r.limit_backward=s;return false}r.bra=r.cursor;r.limit_backward=s;switch(i){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.in_grouping_b(u,97,229)){return false}if(!r.slice_del()){return false}break}return true}function m(){var e=r.limit-r.cursor;if(r.cursor<l){return false}var s=r.limit_backward;r.limit_backward=l;r.ket=r.cursor;if(r.find_among_b(i)==0){r.limit_backward=s;return false}r.bra=r.cursor;r.limit_backward=s;r.cursor=r.limit-e;if(r.cursor<=r.limit_backward){return false}r.cursor--;r.bra=r.cursor;if(!r.slice_del()){return false}return true}function _(){var e;var i=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("st")){break r}r.bra=r.cursor;if(!r.eq_s_b("ig")){break r}if(!r.slice_del()){return false}}r.cursor=r.limit-i;if(r.cursor<l){return false}var t=r.limit_backward;r.limit_backward=l;r.ket=r.cursor;e=r.find_among_b(s);if(e==0){r.limit_backward=t;return false}r.bra=r.cursor;r.limit_backward=t;switch(e){case 1:if(!r.slice_del()){return false}var a=r.limit-r.cursor;m();r.cursor=r.limit-a;break;case 2:if(!r.slice_from("løs")){return false}break}return true}function b(){if(r.cursor<l){return false}var e=r.limit_backward;r.limit_backward=l;r.ket=r.cursor;if(!r.in_grouping_b(t,98,122)){r.limit_backward=e;return false}r.bra=r.cursor;n=r.slice_to();if(n==""){return false}r.limit_backward=e;if(!r.eq_s_b(n)){return false}if(!r.slice_del()){return false}return true}this.stem=function(){var e=r.cursor;o();r.cursor=e;r.limit_backward=r.cursor;r.cursor=r.limit;var i=r.limit-r.cursor;f();r.cursor=r.limit-i;var s=r.limit-r.cursor;m();r.cursor=r.limit-s;var t=r.limit-r.cursor;_();r.cursor=r.limit-t;var a=r.limit-r.cursor;b();r.cursor=r.limit-a;r.cursor=r.limit_backward;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/dutch-stemmer.js b/sphinx/search/minified-js/dutch-stemmer.js
new file mode 100644
index 0000000..addbc77
--- /dev/null
+++ b/sphinx/search/minified-js/dutch-stemmer.js
@@ -0,0 +1 @@
+DutchStemmer=function(){var r=new BaseStemmer;var e=[["",-1,6],["á",0,1],["ä",0,1],["é",0,2],["ë",0,2],["í",0,3],["ï",0,3],["ó",0,4],["ö",0,4],["ú",0,5],["ü",0,5]];var i=[["",-1,3],["I",0,2],["Y",0,1]];var u=[["dd",-1,-1],["kk",-1,-1],["tt",-1,-1]];var s=[["ene",-1,2],["se",-1,3],["en",-1,2],["heden",2,1],["s",-1,3]];var a=[["end",-1,1],["ig",-1,2],["ing",-1,1],["lijk",-1,3],["baar",-1,4],["bar",-1,5]];var t=[["aa",-1,-1],["ee",-1,-1],["oo",-1,-1],["uu",-1,-1]];var c=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128];var o=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128];var f=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128];var l=0;var n=0;var b=false;function k(){var i;var u=r.cursor;while(true){var s=r.cursor;r:{r.bra=r.cursor;i=r.find_among(e);if(i==0){break r}r.ket=r.cursor;switch(i){case 1:if(!r.slice_from("a")){return false}break;case 2:if(!r.slice_from("e")){return false}break;case 3:if(!r.slice_from("i")){return false}break;case 4:if(!r.slice_from("o")){return false}break;case 5:if(!r.slice_from("u")){return false}break;case 6:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=s;break}r.cursor=u;var a=r.cursor;r:{r.bra=r.cursor;if(!r.eq_s("y")){r.cursor=a;break r}r.ket=r.cursor;if(!r.slice_from("Y")){return false}}while(true){var t=r.cursor;r:{e:while(true){var o=r.cursor;i:{if(!r.in_grouping(c,97,232)){break i}r.bra=r.cursor;u:{var f=r.cursor;s:{if(!r.eq_s("i")){break s}r.ket=r.cursor;if(!r.in_grouping(c,97,232)){break s}if(!r.slice_from("I")){return false}break u}r.cursor=f;if(!r.eq_s("y")){break i}r.ket=r.cursor;if(!r.slice_from("Y")){return false}}r.cursor=o;break e}r.cursor=o;if(r.cursor>=r.limit){break r}r.cursor++}continue}r.cursor=t;break}return true}function _(){n=r.limit;l=r.limit;r:while(true){e:{if(!r.in_grouping(c,97,232)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){e:{if(!r.out_grouping(c,97,232)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}n=r.cursor;r:{if(!(n<3)){break r}n=3}r:while(true){e:{if(!r.in_grouping(c,97,232)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){e:{if(!r.out_grouping(c,97,232)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}l=r.cursor;return true}function m(){var e;while(true){var u=r.cursor;r:{r.bra=r.cursor;e=r.find_among(i);if(e==0){break r}r.ket=r.cursor;switch(e){case 1:if(!r.slice_from("y")){return false}break;case 2:if(!r.slice_from("i")){return false}break;case 3:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=u;break}return true}function v(){if(!(n<=r.cursor)){return false}return true}function g(){if(!(l<=r.cursor)){return false}return true}function d(){var e=r.limit-r.cursor;if(r.find_among_b(u)==0){return false}r.cursor=r.limit-e;r.ket=r.cursor;if(r.cursor<=r.limit_backward){return false}r.cursor--;r.bra=r.cursor;if(!r.slice_del()){return false}return true}function h(){b=false;r.ket=r.cursor;if(!r.eq_s_b("e")){return false}r.bra=r.cursor;if(!v()){return false}var e=r.limit-r.cursor;if(!r.out_grouping_b(c,97,232)){return false}r.cursor=r.limit-e;if(!r.slice_del()){return false}b=true;if(!d()){return false}return true}function w(){if(!v()){return false}var e=r.limit-r.cursor;if(!r.out_grouping_b(c,97,232)){return false}r.cursor=r.limit-e;{var i=r.limit-r.cursor;r:{if(!r.eq_s_b("gem")){break r}return false}r.cursor=r.limit-i}if(!r.slice_del()){return false}if(!d()){return false}return true}function p(){var e;var i=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(s);if(e==0){break r}r.bra=r.cursor;switch(e){case 1:if(!v()){break r}if(!r.slice_from("heid")){return false}break;case 2:if(!w()){break r}break;case 3:if(!v()){break r}if(!r.out_grouping_b(f,97,232)){break r}if(!r.slice_del()){return false}break}}r.cursor=r.limit-i;var u=r.limit-r.cursor;h();r.cursor=r.limit-u;var l=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("heid")){break r}r.bra=r.cursor;if(!g()){break r}{var n=r.limit-r.cursor;e:{if(!r.eq_s_b("c")){break e}break r}r.cursor=r.limit-n}if(!r.slice_del()){return false}r.ket=r.cursor;if(!r.eq_s_b("en")){break r}r.bra=r.cursor;if(!w()){break r}}r.cursor=r.limit-l;var k=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(a);if(e==0){break r}r.bra=r.cursor;switch(e){case 1:if(!g()){break r}if(!r.slice_del()){return false}e:{var _=r.limit-r.cursor;i:{r.ket=r.cursor;if(!r.eq_s_b("ig")){break i}r.bra=r.cursor;if(!g()){break i}{var m=r.limit-r.cursor;u:{if(!r.eq_s_b("e")){break u}break i}r.cursor=r.limit-m}if(!r.slice_del()){return false}break e}r.cursor=r.limit-_;if(!d()){break r}}break;case 2:if(!g()){break r}{var p=r.limit-r.cursor;e:{if(!r.eq_s_b("e")){break e}break r}r.cursor=r.limit-p}if(!r.slice_del()){return false}break;case 3:if(!g()){break r}if(!r.slice_del()){return false}if(!h()){break r}break;case 4:if(!g()){break r}if(!r.slice_del()){return false}break;case 5:if(!g()){break r}if(!b){break r}if(!r.slice_del()){return false}break}}r.cursor=r.limit-k;var q=r.limit-r.cursor;r:{if(!r.out_grouping_b(o,73,232)){break r}var y=r.limit-r.cursor;if(r.find_among_b(t)==0){break r}if(!r.out_grouping_b(c,97,232)){break r}r.cursor=r.limit-y;r.ket=r.cursor;if(r.cursor<=r.limit_backward){break r}r.cursor--;r.bra=r.cursor;if(!r.slice_del()){return false}}r.cursor=r.limit-q;return true}this.stem=function(){var e=r.cursor;k();r.cursor=e;var i=r.cursor;_();r.cursor=i;r.limit_backward=r.cursor;r.cursor=r.limit;p();r.cursor=r.limit_backward;var u=r.cursor;m();r.cursor=u;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/finnish-stemmer.js b/sphinx/search/minified-js/finnish-stemmer.js
new file mode 100644
index 0000000..f6301fd
--- /dev/null
+++ b/sphinx/search/minified-js/finnish-stemmer.js
@@ -0,0 +1 @@
+FinnishStemmer=function(){var r=new BaseStemmer;var i=[["pa",-1,1],["sti",-1,2],["kaan",-1,1],["han",-1,1],["kin",-1,1],["hän",-1,1],["kään",-1,1],["ko",-1,1],["pä",-1,1],["kö",-1,1]];var e=[["lla",-1,-1],["na",-1,-1],["ssa",-1,-1],["ta",-1,-1],["lta",3,-1],["sta",3,-1]];var a=[["llä",-1,-1],["nä",-1,-1],["ssä",-1,-1],["tä",-1,-1],["ltä",3,-1],["stä",3,-1]];var s=[["lle",-1,-1],["ine",-1,-1]];var t=[["nsa",-1,3],["mme",-1,3],["nne",-1,3],["ni",-1,2],["si",-1,1],["an",-1,4],["en",-1,6],["än",-1,5],["nsä",-1,3]];var u=[["aa",-1,-1],["ee",-1,-1],["ii",-1,-1],["oo",-1,-1],["uu",-1,-1],["ää",-1,-1],["öö",-1,-1]];var l=[["a",-1,8],["lla",0,-1],["na",0,-1],["ssa",0,-1],["ta",0,-1],["lta",4,-1],["sta",4,-1],["tta",4,2],["lle",-1,-1],["ine",-1,-1],["ksi",-1,-1],["n",-1,7],["han",11,1],["den",11,-1,S],["seen",11,-1,C],["hen",11,2],["tten",11,-1,S],["hin",11,3],["siin",11,-1,S],["hon",11,4],["hän",11,5],["hön",11,6],["ä",-1,8],["llä",22,-1],["nä",22,-1],["ssä",22,-1],["tä",22,-1],["ltä",26,-1],["stä",26,-1],["ttä",26,2]];var c=[["eja",-1,-1],["mma",-1,1],["imma",1,-1],["mpa",-1,1],["impa",3,-1],["mmi",-1,1],["immi",5,-1],["mpi",-1,1],["impi",7,-1],["ejä",-1,-1],["mmä",-1,1],["immä",10,-1],["mpä",-1,1],["impä",12,-1]];var n=[["i",-1,-1],["j",-1,-1]];var f=[["mma",-1,1],["imma",0,-1]];var o=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8];var b=[119,223,119,1];var _=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32];var m=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32];var k=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32];var d=false;var v="";var w=0;var g=0;function p(){g=r.limit;w=r.limit;r:while(true){var i=r.cursor;i:{if(!r.in_grouping(_,97,246)){break i}r.cursor=i;break r}r.cursor=i;if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){i:{if(!r.out_grouping(_,97,246)){break i}break r}if(r.cursor>=r.limit){return false}r.cursor++}g=r.cursor;r:while(true){var e=r.cursor;i:{if(!r.in_grouping(_,97,246)){break i}r.cursor=e;break r}r.cursor=e;if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){i:{if(!r.out_grouping(_,97,246)){break i}break r}if(r.cursor>=r.limit){return false}r.cursor++}w=r.cursor;return true}function h(){if(!(w<=r.cursor)){return false}return true}function q(){var e;if(r.cursor<g){return false}var a=r.limit_backward;r.limit_backward=g;r.ket=r.cursor;e=r.find_among_b(i);if(e==0){r.limit_backward=a;return false}r.bra=r.cursor;r.limit_backward=a;switch(e){case 1:if(!r.in_grouping_b(k,97,246)){return false}break;case 2:if(!h()){return false}break}if(!r.slice_del()){return false}return true}function j(){var i;if(r.cursor<g){return false}var u=r.limit_backward;r.limit_backward=g;r.ket=r.cursor;i=r.find_among_b(t);if(i==0){r.limit_backward=u;return false}r.bra=r.cursor;r.limit_backward=u;switch(i){case 1:{var l=r.limit-r.cursor;r:{if(!r.eq_s_b("k")){break r}return false}r.cursor=r.limit-l}if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}r.ket=r.cursor;if(!r.eq_s_b("kse")){return false}r.bra=r.cursor;if(!r.slice_from("ksi")){return false}break;case 3:if(!r.slice_del()){return false}break;case 4:if(r.find_among_b(e)==0){return false}if(!r.slice_del()){return false}break;case 5:if(r.find_among_b(a)==0){return false}if(!r.slice_del()){return false}break;case 6:if(r.find_among_b(s)==0){return false}if(!r.slice_del()){return false}break}return true}function C(){if(r.find_among_b(u)==0){return false}return true}function S(){if(!r.eq_s_b("i")){return false}if(!r.in_grouping_b(m,97,246)){return false}return true}function B(){var i;if(r.cursor<g){return false}var e=r.limit_backward;r.limit_backward=g;r.ket=r.cursor;i=r.find_among_b(l);if(i==0){r.limit_backward=e;return false}r.bra=r.cursor;r.limit_backward=e;switch(i){case 1:if(!r.eq_s_b("a")){return false}break;case 2:if(!r.eq_s_b("e")){return false}break;case 3:if(!r.eq_s_b("i")){return false}break;case 4:if(!r.eq_s_b("o")){return false}break;case 5:if(!r.eq_s_b("ä")){return false}break;case 6:if(!r.eq_s_b("ö")){return false}break;case 7:var a=r.limit-r.cursor;r:{var s=r.limit-r.cursor;i:{var t=r.limit-r.cursor;e:{if(!C()){break e}break i}r.cursor=r.limit-t;if(!r.eq_s_b("ie")){r.cursor=r.limit-a;break r}}r.cursor=r.limit-s;if(r.cursor<=r.limit_backward){r.cursor=r.limit-a;break r}r.cursor--;r.bra=r.cursor}break;case 8:if(!r.in_grouping_b(_,97,246)){return false}if(!r.in_grouping_b(b,98,122)){return false}break}if(!r.slice_del()){return false}d=true;return true}function F(){var i;if(r.cursor<w){return false}var e=r.limit_backward;r.limit_backward=w;r.ket=r.cursor;i=r.find_among_b(c);if(i==0){r.limit_backward=e;return false}r.bra=r.cursor;r.limit_backward=e;switch(i){case 1:{var a=r.limit-r.cursor;r:{if(!r.eq_s_b("po")){break r}return false}r.cursor=r.limit-a}break}if(!r.slice_del()){return false}return true}function W(){if(r.cursor<g){return false}var i=r.limit_backward;r.limit_backward=g;r.ket=r.cursor;if(r.find_among_b(n)==0){r.limit_backward=i;return false}r.bra=r.cursor;r.limit_backward=i;if(!r.slice_del()){return false}return true}function x(){var i;if(r.cursor<g){return false}var e=r.limit_backward;r.limit_backward=g;r.ket=r.cursor;if(!r.eq_s_b("t")){r.limit_backward=e;return false}r.bra=r.cursor;var a=r.limit-r.cursor;if(!r.in_grouping_b(_,97,246)){r.limit_backward=e;return false}r.cursor=r.limit-a;if(!r.slice_del()){return false}r.limit_backward=e;if(r.cursor<w){return false}var s=r.limit_backward;r.limit_backward=w;r.ket=r.cursor;i=r.find_among_b(f);if(i==0){r.limit_backward=s;return false}r.bra=r.cursor;r.limit_backward=s;switch(i){case 1:{var t=r.limit-r.cursor;r:{if(!r.eq_s_b("po")){break r}return false}r.cursor=r.limit-t}break}if(!r.slice_del()){return false}return true}function y(){if(r.cursor<g){return false}var i=r.limit_backward;r.limit_backward=g;var e=r.limit-r.cursor;r:{var a=r.limit-r.cursor;if(!C()){break r}r.cursor=r.limit-a;r.ket=r.cursor;if(r.cursor<=r.limit_backward){break r}r.cursor--;r.bra=r.cursor;if(!r.slice_del()){return false}}r.cursor=r.limit-e;var s=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.in_grouping_b(o,97,228)){break r}r.bra=r.cursor;if(!r.in_grouping_b(b,98,122)){break r}if(!r.slice_del()){return false}}r.cursor=r.limit-s;var t=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("j")){break r}r.bra=r.cursor;i:{var u=r.limit-r.cursor;e:{if(!r.eq_s_b("o")){break e}break i}r.cursor=r.limit-u;if(!r.eq_s_b("u")){break r}}if(!r.slice_del()){return false}}r.cursor=r.limit-t;var l=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("o")){break r}r.bra=r.cursor;if(!r.eq_s_b("j")){break r}if(!r.slice_del()){return false}}r.cursor=r.limit-l;r.limit_backward=i;r:while(true){var c=r.limit-r.cursor;i:{if(!r.out_grouping_b(_,97,246)){break i}r.cursor=r.limit-c;break r}r.cursor=r.limit-c;if(r.cursor<=r.limit_backward){return false}r.cursor--}r.ket=r.cursor;if(!r.in_grouping_b(b,98,122)){return false}r.bra=r.cursor;v=r.slice_to();if(v==""){return false}if(!r.eq_s_b(v)){return false}if(!r.slice_del()){return false}return true}this.stem=function(){var i=r.cursor;p();r.cursor=i;d=false;r.limit_backward=r.cursor;r.cursor=r.limit;var e=r.limit-r.cursor;q();r.cursor=r.limit-e;var a=r.limit-r.cursor;j();r.cursor=r.limit-a;var s=r.limit-r.cursor;B();r.cursor=r.limit-s;var t=r.limit-r.cursor;F();r.cursor=r.limit-t;r:{i:{if(!d){break i}var u=r.limit-r.cursor;W();r.cursor=r.limit-u;break r}var l=r.limit-r.cursor;x();r.cursor=r.limit-l}var c=r.limit-r.cursor;y();r.cursor=r.limit-c;r.cursor=r.limit_backward;return true};this["stemWord"]=function(i){r.setCurrent(i);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/french-stemmer.js b/sphinx/search/minified-js/french-stemmer.js
new file mode 100644
index 0000000..51ad0ea
--- /dev/null
+++ b/sphinx/search/minified-js/french-stemmer.js
@@ -0,0 +1 @@
+FrenchStemmer=function(){var r=new BaseStemmer;var e=[["col",-1,-1],["par",-1,-1],["tap",-1,-1]];var i=[["",-1,7],["H",0,6],["He",1,4],["Hi",1,5],["I",0,1],["U",0,2],["Y",0,3]];var s=[["iqU",-1,3],["abl",-1,3],["Ièr",-1,4],["ièr",-1,4],["eus",-1,2],["iv",-1,1]];var a=[["ic",-1,2],["abil",-1,1],["iv",-1,3]];var u=[["iqUe",-1,1],["atrice",-1,2],["ance",-1,1],["ence",-1,5],["logie",-1,3],["able",-1,1],["isme",-1,1],["euse",-1,11],["iste",-1,1],["ive",-1,8],["if",-1,8],["usion",-1,4],["ation",-1,2],["ution",-1,4],["ateur",-1,2],["iqUes",-1,1],["atrices",-1,2],["ances",-1,1],["ences",-1,5],["logies",-1,3],["ables",-1,1],["ismes",-1,1],["euses",-1,11],["istes",-1,1],["ives",-1,8],["ifs",-1,8],["usions",-1,4],["ations",-1,2],["utions",-1,4],["ateurs",-1,2],["ments",-1,15],["ements",30,6],["issements",31,12],["ités",-1,7],["ment",-1,15],["ement",34,6],["issement",35,12],["amment",34,13],["emment",34,14],["aux",-1,10],["eaux",39,9],["eux",-1,1],["ité",-1,7]];var t=[["ira",-1,1],["ie",-1,1],["isse",-1,1],["issante",-1,1],["i",-1,1],["irai",4,1],["ir",-1,1],["iras",-1,1],["ies",-1,1],["îmes",-1,1],["isses",-1,1],["issantes",-1,1],["îtes",-1,1],["is",-1,1],["irais",13,1],["issais",13,1],["irions",-1,1],["issions",-1,1],["irons",-1,1],["issons",-1,1],["issants",-1,1],["it",-1,1],["irait",21,1],["issait",21,1],["issant",-1,1],["iraIent",-1,1],["issaIent",-1,1],["irent",-1,1],["issent",-1,1],["iront",-1,1],["ît",-1,1],["iriez",-1,1],["issiez",-1,1],["irez",-1,1],["issez",-1,1]];var c=[["a",-1,3],["era",0,2],["asse",-1,3],["ante",-1,3],["ée",-1,2],["ai",-1,3],["erai",5,2],["er",-1,2],["as",-1,3],["eras",8,2],["âmes",-1,3],["asses",-1,3],["antes",-1,3],["âtes",-1,3],["ées",-1,2],["ais",-1,3],["erais",15,2],["ions",-1,1],["erions",17,2],["assions",17,3],["erons",-1,2],["ants",-1,3],["és",-1,2],["ait",-1,3],["erait",23,2],["ant",-1,3],["aIent",-1,3],["eraIent",26,2],["èrent",-1,2],["assent",-1,3],["eront",-1,2],["ât",-1,3],["ez",-1,2],["iez",32,2],["eriez",33,2],["assiez",33,3],["erez",32,2],["é",-1,2]];var f=[["e",-1,3],["Ière",0,2],["ière",0,2],["ion",-1,1],["Ier",-1,2],["ier",-1,2]];var l=[["ell",-1,-1],["eill",-1,-1],["enn",-1,-1],["onn",-1,-1],["ett",-1,-1]];var o=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5];var n=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128];var b=0;var k=0;var m=0;function _(){while(true){var e=r.cursor;r:{e:while(true){var i=r.cursor;i:{s:{var s=r.cursor;a:{if(!r.in_grouping(o,97,251)){break a}r.bra=r.cursor;u:{var a=r.cursor;t:{if(!r.eq_s("u")){break t}r.ket=r.cursor;if(!r.in_grouping(o,97,251)){break t}if(!r.slice_from("U")){return false}break u}r.cursor=a;t:{if(!r.eq_s("i")){break t}r.ket=r.cursor;if(!r.in_grouping(o,97,251)){break t}if(!r.slice_from("I")){return false}break u}r.cursor=a;if(!r.eq_s("y")){break a}r.ket=r.cursor;if(!r.slice_from("Y")){return false}}break s}r.cursor=s;a:{r.bra=r.cursor;if(!r.eq_s("ë")){break a}r.ket=r.cursor;if(!r.slice_from("He")){return false}break s}r.cursor=s;a:{r.bra=r.cursor;if(!r.eq_s("ï")){break a}r.ket=r.cursor;if(!r.slice_from("Hi")){return false}break s}r.cursor=s;a:{r.bra=r.cursor;if(!r.eq_s("y")){break a}r.ket=r.cursor;if(!r.in_grouping(o,97,251)){break a}if(!r.slice_from("Y")){return false}break s}r.cursor=s;if(!r.eq_s("q")){break i}r.bra=r.cursor;if(!r.eq_s("u")){break i}r.ket=r.cursor;if(!r.slice_from("U")){return false}}r.cursor=i;break e}r.cursor=i;if(r.cursor>=r.limit){break r}r.cursor++}continue}r.cursor=e;break}return true}function v(){m=r.limit;k=r.limit;b=r.limit;var i=r.cursor;r:{e:{var s=r.cursor;i:{if(!r.in_grouping(o,97,251)){break i}if(!r.in_grouping(o,97,251)){break i}if(r.cursor>=r.limit){break i}r.cursor++;break e}r.cursor=s;i:{if(r.find_among(e)==0){break i}break e}r.cursor=s;if(r.cursor>=r.limit){break r}r.cursor++;i:while(true){s:{if(!r.in_grouping(o,97,251)){break s}break i}if(r.cursor>=r.limit){break r}r.cursor++}}m=r.cursor}r.cursor=i;var a=r.cursor;r:{e:while(true){i:{if(!r.in_grouping(o,97,251)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(o,97,251)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}k=r.cursor;e:while(true){i:{if(!r.in_grouping(o,97,251)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(o,97,251)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}b=r.cursor}r.cursor=a;return true}function d(){var e;while(true){var s=r.cursor;r:{r.bra=r.cursor;e=r.find_among(i);if(e==0){break r}r.ket=r.cursor;switch(e){case 1:if(!r.slice_from("i")){return false}break;case 2:if(!r.slice_from("u")){return false}break;case 3:if(!r.slice_from("y")){return false}break;case 4:if(!r.slice_from("ë")){return false}break;case 5:if(!r.slice_from("ï")){return false}break;case 6:if(!r.slice_del()){return false}break;case 7:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=s;break}return true}function g(){if(!(m<=r.cursor)){return false}return true}function w(){if(!(k<=r.cursor)){return false}return true}function q(){if(!(b<=r.cursor)){return false}return true}function h(){var e;r.ket=r.cursor;e=r.find_among_b(u);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:if(!q()){return false}if(!r.slice_del()){return false}break;case 2:if(!q()){return false}if(!r.slice_del()){return false}var i=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("ic")){r.cursor=r.limit-i;break r}r.bra=r.cursor;e:{var t=r.limit-r.cursor;i:{if(!q()){break i}if(!r.slice_del()){return false}break e}r.cursor=r.limit-t;if(!r.slice_from("iqU")){return false}}}break;case 3:if(!q()){return false}if(!r.slice_from("log")){return false}break;case 4:if(!q()){return false}if(!r.slice_from("u")){return false}break;case 5:if(!q()){return false}if(!r.slice_from("ent")){return false}break;case 6:if(!g()){return false}if(!r.slice_del()){return false}var c=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(s);if(e==0){r.cursor=r.limit-c;break r}r.bra=r.cursor;switch(e){case 1:if(!q()){r.cursor=r.limit-c;break r}if(!r.slice_del()){return false}r.ket=r.cursor;if(!r.eq_s_b("at")){r.cursor=r.limit-c;break r}r.bra=r.cursor;if(!q()){r.cursor=r.limit-c;break r}if(!r.slice_del()){return false}break;case 2:e:{var f=r.limit-r.cursor;i:{if(!q()){break i}if(!r.slice_del()){return false}break e}r.cursor=r.limit-f;if(!w()){r.cursor=r.limit-c;break r}if(!r.slice_from("eux")){return false}}break;case 3:if(!q()){r.cursor=r.limit-c;break r}if(!r.slice_del()){return false}break;case 4:if(!g()){r.cursor=r.limit-c;break r}if(!r.slice_from("i")){return false}break}}break;case 7:if(!q()){return false}if(!r.slice_del()){return false}var l=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(a);if(e==0){r.cursor=r.limit-l;break r}r.bra=r.cursor;switch(e){case 1:e:{var n=r.limit-r.cursor;i:{if(!q()){break i}if(!r.slice_del()){return false}break e}r.cursor=r.limit-n;if(!r.slice_from("abl")){return false}}break;case 2:e:{var b=r.limit-r.cursor;i:{if(!q()){break i}if(!r.slice_del()){return false}break e}r.cursor=r.limit-b;if(!r.slice_from("iqU")){return false}}break;case 3:if(!q()){r.cursor=r.limit-l;break r}if(!r.slice_del()){return false}break}}break;case 8:if(!q()){return false}if(!r.slice_del()){return false}var k=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("at")){r.cursor=r.limit-k;break r}r.bra=r.cursor;if(!q()){r.cursor=r.limit-k;break r}if(!r.slice_del()){return false}r.ket=r.cursor;if(!r.eq_s_b("ic")){r.cursor=r.limit-k;break r}r.bra=r.cursor;e:{var m=r.limit-r.cursor;i:{if(!q()){break i}if(!r.slice_del()){return false}break e}r.cursor=r.limit-m;if(!r.slice_from("iqU")){return false}}}break;case 9:if(!r.slice_from("eau")){return false}break;case 10:if(!w()){return false}if(!r.slice_from("al")){return false}break;case 11:r:{var _=r.limit-r.cursor;e:{if(!q()){break e}if(!r.slice_del()){return false}break r}r.cursor=r.limit-_;if(!w()){return false}if(!r.slice_from("eux")){return false}}break;case 12:if(!w()){return false}if(!r.out_grouping_b(o,97,251)){return false}if(!r.slice_del()){return false}break;case 13:if(!g()){return false}if(!r.slice_from("ant")){return false}return false;case 14:if(!g()){return false}if(!r.slice_from("ent")){return false}return false;case 15:var v=r.limit-r.cursor;if(!r.in_grouping_b(o,97,251)){return false}if(!g()){return false}r.cursor=r.limit-v;if(!r.slice_del()){return false}return false}return true}function p(){if(r.cursor<m){return false}var e=r.limit_backward;r.limit_backward=m;r.ket=r.cursor;if(r.find_among_b(t)==0){r.limit_backward=e;return false}r.bra=r.cursor;{var i=r.limit-r.cursor;r:{if(!r.eq_s_b("H")){break r}r.limit_backward=e;return false}r.cursor=r.limit-i}if(!r.out_grouping_b(o,97,251)){r.limit_backward=e;return false}if(!r.slice_del()){return false}r.limit_backward=e;return true}function z(){var e;if(r.cursor<m){return false}var i=r.limit_backward;r.limit_backward=m;r.ket=r.cursor;e=r.find_among_b(c);if(e==0){r.limit_backward=i;return false}r.bra=r.cursor;switch(e){case 1:if(!q()){r.limit_backward=i;return false}if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}break;case 3:if(!r.slice_del()){return false}var s=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("e")){r.cursor=r.limit-s;break r}r.bra=r.cursor;if(!r.slice_del()){return false}}break}r.limit_backward=i;return true}function I(){var e;var i=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("s")){r.cursor=r.limit-i;break r}r.bra=r.cursor;var s=r.limit-r.cursor;e:{var a=r.limit-r.cursor;i:{if(!r.eq_s_b("Hi")){break i}break e}r.cursor=r.limit-a;if(!r.out_grouping_b(n,97,232)){r.cursor=r.limit-i;break r}}r.cursor=r.limit-s;if(!r.slice_del()){return false}}if(r.cursor<m){return false}var u=r.limit_backward;r.limit_backward=m;r.ket=r.cursor;e=r.find_among_b(f);if(e==0){r.limit_backward=u;return false}r.bra=r.cursor;switch(e){case 1:if(!q()){r.limit_backward=u;return false}r:{var t=r.limit-r.cursor;e:{if(!r.eq_s_b("s")){break e}break r}r.cursor=r.limit-t;if(!r.eq_s_b("t")){r.limit_backward=u;return false}}if(!r.slice_del()){return false}break;case 2:if(!r.slice_from("i")){return false}break;case 3:if(!r.slice_del()){return false}break}r.limit_backward=u;return true}function U(){var e=r.limit-r.cursor;if(r.find_among_b(l)==0){return false}r.cursor=r.limit-e;r.ket=r.cursor;if(r.cursor<=r.limit_backward){return false}r.cursor--;r.bra=r.cursor;if(!r.slice_del()){return false}return true}function H(){{var e=1;while(true){r:{if(!r.out_grouping_b(o,97,251)){break r}e--;continue}break}if(e>0){return false}}r.ket=r.cursor;r:{var i=r.limit-r.cursor;e:{if(!r.eq_s_b("é")){break e}break r}r.cursor=r.limit-i;if(!r.eq_s_b("è")){return false}}r.bra=r.cursor;if(!r.slice_from("e")){return false}return true}this.stem=function(){var e=r.cursor;_();r.cursor=e;v();r.limit_backward=r.cursor;r.cursor=r.limit;var i=r.limit-r.cursor;r:{e:{var s=r.limit-r.cursor;i:{var a=r.limit-r.cursor;s:{var u=r.limit-r.cursor;a:{if(!h()){break a}break s}r.cursor=r.limit-u;a:{if(!p()){break a}break s}r.cursor=r.limit-u;if(!z()){break i}}r.cursor=r.limit-a;var t=r.limit-r.cursor;s:{r.ket=r.cursor;a:{var c=r.limit-r.cursor;u:{if(!r.eq_s_b("Y")){break u}r.bra=r.cursor;if(!r.slice_from("i")){return false}break a}r.cursor=r.limit-c;if(!r.eq_s_b("ç")){r.cursor=r.limit-t;break s}r.bra=r.cursor;if(!r.slice_from("c")){return false}}}break e}r.cursor=r.limit-s;if(!I()){break r}}}r.cursor=r.limit-i;var f=r.limit-r.cursor;U();r.cursor=r.limit-f;var l=r.limit-r.cursor;H();r.cursor=r.limit-l;r.cursor=r.limit_backward;var o=r.cursor;d();r.cursor=o;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/german-stemmer.js b/sphinx/search/minified-js/german-stemmer.js
new file mode 100644
index 0000000..e2a335d
--- /dev/null
+++ b/sphinx/search/minified-js/german-stemmer.js
@@ -0,0 +1 @@
+GermanStemmer=function(){var r=new BaseStemmer;var e=[["",-1,5],["U",0,2],["Y",0,1],["ä",0,3],["ö",0,4],["ü",0,2]];var i=[["e",-1,2],["em",-1,1],["en",-1,2],["ern",-1,1],["er",-1,1],["s",-1,3],["es",5,2]];var s=[["en",-1,1],["er",-1,1],["st",-1,2],["est",2,1]];var u=[["ig",-1,1],["lich",-1,1]];var a=[["end",-1,1],["ig",-1,2],["ung",-1,1],["lich",-1,3],["isch",-1,2],["ik",-1,2],["heit",-1,3],["keit",-1,4]];var c=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8];var t=[117,30,5];var o=[117,30,4];var f=0;var l=0;var n=0;function b(){var e=r.cursor;while(true){var i=r.cursor;r:{e:{var s=r.cursor;i:{r.bra=r.cursor;if(!r.eq_s("ß")){break i}r.ket=r.cursor;if(!r.slice_from("ss")){return false}break e}r.cursor=s;if(r.cursor>=r.limit){break r}r.cursor++}continue}r.cursor=i;break}r.cursor=e;while(true){var u=r.cursor;r:{e:while(true){var a=r.cursor;i:{if(!r.in_grouping(c,97,252)){break i}r.bra=r.cursor;s:{var t=r.cursor;u:{if(!r.eq_s("u")){break u}r.ket=r.cursor;if(!r.in_grouping(c,97,252)){break u}if(!r.slice_from("U")){return false}break s}r.cursor=t;if(!r.eq_s("y")){break i}r.ket=r.cursor;if(!r.in_grouping(c,97,252)){break i}if(!r.slice_from("Y")){return false}}r.cursor=a;break e}r.cursor=a;if(r.cursor>=r.limit){break r}r.cursor++}continue}r.cursor=u;break}return true}function k(){n=r.limit;l=r.limit;var e=r.cursor;{var i=r.cursor+3;if(i>r.limit){return false}r.cursor=i}f=r.cursor;r.cursor=e;r:while(true){e:{if(!r.in_grouping(c,97,252)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){e:{if(!r.out_grouping(c,97,252)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}n=r.cursor;r:{if(!(n<f)){break r}n=f}r:while(true){e:{if(!r.in_grouping(c,97,252)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){e:{if(!r.out_grouping(c,97,252)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}l=r.cursor;return true}function m(){var i;while(true){var s=r.cursor;r:{r.bra=r.cursor;i=r.find_among(e);if(i==0){break r}r.ket=r.cursor;switch(i){case 1:if(!r.slice_from("y")){return false}break;case 2:if(!r.slice_from("u")){return false}break;case 3:if(!r.slice_from("a")){return false}break;case 4:if(!r.slice_from("o")){return false}break;case 5:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=s;break}return true}function _(){if(!(n<=r.cursor)){return false}return true}function v(){if(!(l<=r.cursor)){return false}return true}function g(){var e;var c=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(i);if(e==0){break r}r.bra=r.cursor;if(!_()){break r}switch(e){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}var f=r.limit-r.cursor;e:{r.ket=r.cursor;if(!r.eq_s_b("s")){r.cursor=r.limit-f;break e}r.bra=r.cursor;if(!r.eq_s_b("nis")){r.cursor=r.limit-f;break e}if(!r.slice_del()){return false}}break;case 3:if(!r.in_grouping_b(t,98,116)){break r}if(!r.slice_del()){return false}break}}r.cursor=r.limit-c;var l=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(s);if(e==0){break r}r.bra=r.cursor;if(!_()){break r}switch(e){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.in_grouping_b(o,98,116)){break r}{var n=r.cursor-3;if(n<r.limit_backward){break r}r.cursor=n}if(!r.slice_del()){return false}break}}r.cursor=r.limit-l;var b=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(a);if(e==0){break r}r.bra=r.cursor;if(!v()){break r}switch(e){case 1:if(!r.slice_del()){return false}var k=r.limit-r.cursor;e:{r.ket=r.cursor;if(!r.eq_s_b("ig")){r.cursor=r.limit-k;break e}r.bra=r.cursor;{var m=r.limit-r.cursor;i:{if(!r.eq_s_b("e")){break i}r.cursor=r.limit-k;break e}r.cursor=r.limit-m}if(!v()){r.cursor=r.limit-k;break e}if(!r.slice_del()){return false}}break;case 2:{var g=r.limit-r.cursor;e:{if(!r.eq_s_b("e")){break e}break r}r.cursor=r.limit-g}if(!r.slice_del()){return false}break;case 3:if(!r.slice_del()){return false}var d=r.limit-r.cursor;e:{r.ket=r.cursor;i:{var h=r.limit-r.cursor;s:{if(!r.eq_s_b("er")){break s}break i}r.cursor=r.limit-h;if(!r.eq_s_b("en")){r.cursor=r.limit-d;break e}}r.bra=r.cursor;if(!_()){r.cursor=r.limit-d;break e}if(!r.slice_del()){return false}}break;case 4:if(!r.slice_del()){return false}var w=r.limit-r.cursor;e:{r.ket=r.cursor;if(r.find_among_b(u)==0){r.cursor=r.limit-w;break e}r.bra=r.cursor;if(!v()){r.cursor=r.limit-w;break e}if(!r.slice_del()){return false}}break}}r.cursor=r.limit-b;return true}this.stem=function(){var e=r.cursor;b();r.cursor=e;var i=r.cursor;k();r.cursor=i;r.limit_backward=r.cursor;r.cursor=r.limit;g();r.cursor=r.limit_backward;var s=r.cursor;m();r.cursor=s;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/hungarian-stemmer.js b/sphinx/search/minified-js/hungarian-stemmer.js
new file mode 100644
index 0000000..e1fca97
--- /dev/null
+++ b/sphinx/search/minified-js/hungarian-stemmer.js
@@ -0,0 +1 @@
+HungarianStemmer=function(){var r=new BaseStemmer;var e=[["cs",-1,-1],["dzs",-1,-1],["gy",-1,-1],["ly",-1,-1],["ny",-1,-1],["sz",-1,-1],["ty",-1,-1],["zs",-1,-1]];var i=[["á",-1,1],["é",-1,2]];var a=[["bb",-1,-1],["cc",-1,-1],["dd",-1,-1],["ff",-1,-1],["gg",-1,-1],["jj",-1,-1],["kk",-1,-1],["ll",-1,-1],["mm",-1,-1],["nn",-1,-1],["pp",-1,-1],["rr",-1,-1],["ccs",-1,-1],["ss",-1,-1],["zzs",-1,-1],["tt",-1,-1],["vv",-1,-1],["ggy",-1,-1],["lly",-1,-1],["nny",-1,-1],["tty",-1,-1],["ssz",-1,-1],["zz",-1,-1]];var t=[["al",-1,1],["el",-1,1]];var s=[["ba",-1,-1],["ra",-1,-1],["be",-1,-1],["re",-1,-1],["ig",-1,-1],["nak",-1,-1],["nek",-1,-1],["val",-1,-1],["vel",-1,-1],["ul",-1,-1],["nál",-1,-1],["nél",-1,-1],["ból",-1,-1],["ról",-1,-1],["tól",-1,-1],["ül",-1,-1],["ből",-1,-1],["ről",-1,-1],["től",-1,-1],["n",-1,-1],["an",19,-1],["ban",20,-1],["en",19,-1],["ben",22,-1],["képpen",22,-1],["on",19,-1],["ön",19,-1],["képp",-1,-1],["kor",-1,-1],["t",-1,-1],["at",29,-1],["et",29,-1],["ként",29,-1],["anként",32,-1],["enként",32,-1],["onként",32,-1],["ot",29,-1],["ért",29,-1],["öt",29,-1],["hez",-1,-1],["hoz",-1,-1],["höz",-1,-1],["vá",-1,-1],["vé",-1,-1]];var u=[["án",-1,2],["én",-1,1],["ánként",-1,2]];var n=[["stul",-1,1],["astul",0,1],["ástul",0,2],["stül",-1,1],["estül",3,1],["éstül",3,3]];var f=[["á",-1,1],["é",-1,1]];var c=[["k",-1,3],["ak",0,3],["ek",0,3],["ok",0,3],["ák",0,1],["ék",0,2],["ök",0,3]];var l=[["éi",-1,1],["áéi",0,3],["ééi",0,2],["é",-1,1],["ké",3,1],["aké",4,1],["eké",4,1],["oké",4,1],["áké",4,3],["éké",4,2],["öké",4,1],["éé",3,2]];var o=[["a",-1,1],["ja",0,1],["d",-1,1],["ad",2,1],["ed",2,1],["od",2,1],["ád",2,2],["éd",2,3],["öd",2,1],["e",-1,1],["je",9,1],["nk",-1,1],["unk",11,1],["ánk",11,2],["énk",11,3],["ünk",11,1],["uk",-1,1],["juk",16,1],["ájuk",17,2],["ük",-1,1],["jük",19,1],["éjük",20,3],["m",-1,1],["am",22,1],["em",22,1],["om",22,1],["ám",22,2],["ém",22,3],["o",-1,1],["á",-1,2],["é",-1,3]];var k=[["id",-1,1],["aid",0,1],["jaid",1,1],["eid",0,1],["jeid",3,1],["áid",0,2],["éid",0,3],["i",-1,1],["ai",7,1],["jai",8,1],["ei",7,1],["jei",10,1],["ái",7,2],["éi",7,3],["itek",-1,1],["eitek",14,1],["jeitek",15,1],["éitek",14,3],["ik",-1,1],["aik",18,1],["jaik",19,1],["eik",18,1],["jeik",21,1],["áik",18,2],["éik",18,3],["ink",-1,1],["aink",25,1],["jaink",26,1],["eink",25,1],["jeink",28,1],["áink",25,2],["éink",25,3],["aitok",-1,1],["jaitok",32,1],["áitok",-1,2],["im",-1,1],["aim",35,1],["jaim",36,1],["eim",35,1],["jeim",38,1],["áim",35,2],["éim",35,3]];var m=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,36,10,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1];var b=0;function _(){b=r.limit;r:{var i=r.cursor;e:{if(!r.in_grouping(m,97,369)){break e}i:while(true){var a=r.cursor;a:{if(!r.out_grouping(m,97,369)){break a}r.cursor=a;break i}r.cursor=a;if(r.cursor>=r.limit){break e}r.cursor++}i:{var t=r.cursor;a:{if(r.find_among(e)==0){break a}break i}r.cursor=t;if(r.cursor>=r.limit){break e}r.cursor++}b=r.cursor;break r}r.cursor=i;if(!r.out_grouping(m,97,369)){return false}e:while(true){i:{if(!r.in_grouping(m,97,369)){break i}break e}if(r.cursor>=r.limit){return false}r.cursor++}b=r.cursor}return true}function d(){if(!(b<=r.cursor)){return false}return true}function v(){var e;r.ket=r.cursor;e=r.find_among_b(i);if(e==0){return false}r.bra=r.cursor;if(!d()){return false}switch(e){case 1:if(!r.slice_from("a")){return false}break;case 2:if(!r.slice_from("e")){return false}break}return true}function g(){var e=r.limit-r.cursor;if(r.find_among_b(a)==0){return false}r.cursor=r.limit-e;return true}function j(){if(r.cursor<=r.limit_backward){return false}r.cursor--;r.ket=r.cursor;{var e=r.cursor-1;if(e<r.limit_backward){return false}r.cursor=e}r.bra=r.cursor;if(!r.slice_del()){return false}return true}function h(){r.ket=r.cursor;if(r.find_among_b(t)==0){return false}r.bra=r.cursor;if(!d()){return false}if(!g()){return false}if(!r.slice_del()){return false}if(!j()){return false}return true}function w(){r.ket=r.cursor;if(r.find_among_b(s)==0){return false}r.bra=r.cursor;if(!d()){return false}if(!r.slice_del()){return false}if(!v()){return false}return true}function z(){var e;r.ket=r.cursor;e=r.find_among_b(u);if(e==0){return false}r.bra=r.cursor;if(!d()){return false}switch(e){case 1:if(!r.slice_from("e")){return false}break;case 2:if(!r.slice_from("a")){return false}break}return true}function p(){var e;r.ket=r.cursor;e=r.find_among_b(n);if(e==0){return false}r.bra=r.cursor;if(!d()){return false}switch(e){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.slice_from("a")){return false}break;case 3:if(!r.slice_from("e")){return false}break}return true}function y(){r.ket=r.cursor;if(r.find_among_b(f)==0){return false}r.bra=r.cursor;if(!d()){return false}if(!g()){return false}if(!r.slice_del()){return false}if(!j()){return false}return true}function C(){var e;r.ket=r.cursor;e=r.find_among_b(c);if(e==0){return false}r.bra=r.cursor;if(!d()){return false}switch(e){case 1:if(!r.slice_from("a")){return false}break;case 2:if(!r.slice_from("e")){return false}break;case 3:if(!r.slice_del()){return false}break}return true}function S(){var e;r.ket=r.cursor;e=r.find_among_b(l);if(e==0){return false}r.bra=r.cursor;if(!d()){return false}switch(e){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.slice_from("e")){return false}break;case 3:if(!r.slice_from("a")){return false}break}return true}function B(){var e;r.ket=r.cursor;e=r.find_among_b(o);if(e==0){return false}r.bra=r.cursor;if(!d()){return false}switch(e){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.slice_from("a")){return false}break;case 3:if(!r.slice_from("e")){return false}break}return true}function H(){var e;r.ket=r.cursor;e=r.find_among_b(k);if(e==0){return false}r.bra=r.cursor;if(!d()){return false}switch(e){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.slice_from("a")){return false}break;case 3:if(!r.slice_from("e")){return false}break}return true}this.stem=function(){var e=r.cursor;_();r.cursor=e;r.limit_backward=r.cursor;r.cursor=r.limit;var i=r.limit-r.cursor;h();r.cursor=r.limit-i;var a=r.limit-r.cursor;w();r.cursor=r.limit-a;var t=r.limit-r.cursor;z();r.cursor=r.limit-t;var s=r.limit-r.cursor;p();r.cursor=r.limit-s;var u=r.limit-r.cursor;y();r.cursor=r.limit-u;var n=r.limit-r.cursor;S();r.cursor=r.limit-n;var f=r.limit-r.cursor;B();r.cursor=r.limit-f;var c=r.limit-r.cursor;H();r.cursor=r.limit-c;var l=r.limit-r.cursor;C();r.cursor=r.limit-l;r.cursor=r.limit_backward;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/italian-stemmer.js b/sphinx/search/minified-js/italian-stemmer.js
new file mode 100644
index 0000000..a3a5c42
--- /dev/null
+++ b/sphinx/search/minified-js/italian-stemmer.js
@@ -0,0 +1 @@
+ItalianStemmer=function(){var r=new BaseStemmer;var e=[["",-1,7],["qu",0,6],["á",0,1],["é",0,2],["í",0,3],["ó",0,4],["ú",0,5]];var i=[["",-1,3],["I",0,1],["U",0,2]];var a=[["la",-1,-1],["cela",0,-1],["gliela",0,-1],["mela",0,-1],["tela",0,-1],["vela",0,-1],["le",-1,-1],["cele",6,-1],["gliele",6,-1],["mele",6,-1],["tele",6,-1],["vele",6,-1],["ne",-1,-1],["cene",12,-1],["gliene",12,-1],["mene",12,-1],["sene",12,-1],["tene",12,-1],["vene",12,-1],["ci",-1,-1],["li",-1,-1],["celi",20,-1],["glieli",20,-1],["meli",20,-1],["teli",20,-1],["veli",20,-1],["gli",20,-1],["mi",-1,-1],["si",-1,-1],["ti",-1,-1],["vi",-1,-1],["lo",-1,-1],["celo",31,-1],["glielo",31,-1],["melo",31,-1],["telo",31,-1],["velo",31,-1]];var s=[["ando",-1,1],["endo",-1,1],["ar",-1,2],["er",-1,2],["ir",-1,2]];var o=[["ic",-1,-1],["abil",-1,-1],["os",-1,-1],["iv",-1,1]];var u=[["ic",-1,1],["abil",-1,1],["iv",-1,1]];var t=[["ica",-1,1],["logia",-1,3],["osa",-1,1],["ista",-1,1],["iva",-1,9],["anza",-1,1],["enza",-1,5],["ice",-1,1],["atrice",7,1],["iche",-1,1],["logie",-1,3],["abile",-1,1],["ibile",-1,1],["usione",-1,4],["azione",-1,2],["uzione",-1,4],["atore",-1,2],["ose",-1,1],["ante",-1,1],["mente",-1,1],["amente",19,7],["iste",-1,1],["ive",-1,9],["anze",-1,1],["enze",-1,5],["ici",-1,1],["atrici",25,1],["ichi",-1,1],["abili",-1,1],["ibili",-1,1],["ismi",-1,1],["usioni",-1,4],["azioni",-1,2],["uzioni",-1,4],["atori",-1,2],["osi",-1,1],["anti",-1,1],["amenti",-1,6],["imenti",-1,6],["isti",-1,1],["ivi",-1,9],["ico",-1,1],["ismo",-1,1],["oso",-1,1],["amento",-1,6],["imento",-1,6],["ivo",-1,9],["ità",-1,8],["istà",-1,1],["istè",-1,1],["istì",-1,1]];var c=[["isca",-1,1],["enda",-1,1],["ata",-1,1],["ita",-1,1],["uta",-1,1],["ava",-1,1],["eva",-1,1],["iva",-1,1],["erebbe",-1,1],["irebbe",-1,1],["isce",-1,1],["ende",-1,1],["are",-1,1],["ere",-1,1],["ire",-1,1],["asse",-1,1],["ate",-1,1],["avate",16,1],["evate",16,1],["ivate",16,1],["ete",-1,1],["erete",20,1],["irete",20,1],["ite",-1,1],["ereste",-1,1],["ireste",-1,1],["ute",-1,1],["erai",-1,1],["irai",-1,1],["isci",-1,1],["endi",-1,1],["erei",-1,1],["irei",-1,1],["assi",-1,1],["ati",-1,1],["iti",-1,1],["eresti",-1,1],["iresti",-1,1],["uti",-1,1],["avi",-1,1],["evi",-1,1],["ivi",-1,1],["isco",-1,1],["ando",-1,1],["endo",-1,1],["Yamo",-1,1],["iamo",-1,1],["avamo",-1,1],["evamo",-1,1],["ivamo",-1,1],["eremo",-1,1],["iremo",-1,1],["assimo",-1,1],["ammo",-1,1],["emmo",-1,1],["eremmo",54,1],["iremmo",54,1],["immo",-1,1],["ano",-1,1],["iscano",58,1],["avano",58,1],["evano",58,1],["ivano",58,1],["eranno",-1,1],["iranno",-1,1],["ono",-1,1],["iscono",65,1],["arono",65,1],["erono",65,1],["irono",65,1],["erebbero",-1,1],["irebbero",-1,1],["assero",-1,1],["essero",-1,1],["issero",-1,1],["ato",-1,1],["ito",-1,1],["uto",-1,1],["avo",-1,1],["evo",-1,1],["ivo",-1,1],["ar",-1,1],["ir",-1,1],["erà",-1,1],["irà",-1,1],["erò",-1,1],["irò",-1,1]];var l=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1];var n=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2];var f=[17];var b=0;var m=0;var k=0;function _(){var i;var a=r.cursor;while(true){var s=r.cursor;r:{r.bra=r.cursor;i=r.find_among(e);if(i==0){break r}r.ket=r.cursor;switch(i){case 1:if(!r.slice_from("à")){return false}break;case 2:if(!r.slice_from("è")){return false}break;case 3:if(!r.slice_from("ì")){return false}break;case 4:if(!r.slice_from("ò")){return false}break;case 5:if(!r.slice_from("ù")){return false}break;case 6:if(!r.slice_from("qU")){return false}break;case 7:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=s;break}r.cursor=a;while(true){var o=r.cursor;r:{e:while(true){var u=r.cursor;i:{if(!r.in_grouping(l,97,249)){break i}r.bra=r.cursor;a:{var t=r.cursor;s:{if(!r.eq_s("u")){break s}r.ket=r.cursor;if(!r.in_grouping(l,97,249)){break s}if(!r.slice_from("U")){return false}break a}r.cursor=t;if(!r.eq_s("i")){break i}r.ket=r.cursor;if(!r.in_grouping(l,97,249)){break i}if(!r.slice_from("I")){return false}}r.cursor=u;break e}r.cursor=u;if(r.cursor>=r.limit){break r}r.cursor++}continue}r.cursor=o;break}return true}function v(){k=r.limit;m=r.limit;b=r.limit;var e=r.cursor;r:{e:{var i=r.cursor;i:{if(!r.in_grouping(l,97,249)){break i}a:{var a=r.cursor;s:{if(!r.out_grouping(l,97,249)){break s}o:while(true){u:{if(!r.in_grouping(l,97,249)){break u}break o}if(r.cursor>=r.limit){break s}r.cursor++}break a}r.cursor=a;if(!r.in_grouping(l,97,249)){break i}s:while(true){o:{if(!r.out_grouping(l,97,249)){break o}break s}if(r.cursor>=r.limit){break i}r.cursor++}}break e}r.cursor=i;if(!r.out_grouping(l,97,249)){break r}i:{var s=r.cursor;a:{if(!r.out_grouping(l,97,249)){break a}s:while(true){o:{if(!r.in_grouping(l,97,249)){break o}break s}if(r.cursor>=r.limit){break a}r.cursor++}break i}r.cursor=s;if(!r.in_grouping(l,97,249)){break r}if(r.cursor>=r.limit){break r}r.cursor++}}k=r.cursor}r.cursor=e;var o=r.cursor;r:{e:while(true){i:{if(!r.in_grouping(l,97,249)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(l,97,249)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}m=r.cursor;e:while(true){i:{if(!r.in_grouping(l,97,249)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(l,97,249)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}b=r.cursor}r.cursor=o;return true}function g(){var e;while(true){var a=r.cursor;r:{r.bra=r.cursor;e=r.find_among(i);if(e==0){break r}r.ket=r.cursor;switch(e){case 1:if(!r.slice_from("i")){return false}break;case 2:if(!r.slice_from("u")){return false}break;case 3:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=a;break}return true}function d(){if(!(k<=r.cursor)){return false}return true}function w(){if(!(m<=r.cursor)){return false}return true}function h(){if(!(b<=r.cursor)){return false}return true}function p(){var e;r.ket=r.cursor;if(r.find_among_b(a)==0){return false}r.bra=r.cursor;e=r.find_among_b(s);if(e==0){return false}if(!d()){return false}switch(e){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.slice_from("e")){return false}break}return true}function q(){var e;r.ket=r.cursor;e=r.find_among_b(t);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:if(!h()){return false}if(!r.slice_del()){return false}break;case 2:if(!h()){return false}if(!r.slice_del()){return false}var i=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("ic")){r.cursor=r.limit-i;break r}r.bra=r.cursor;if(!h()){r.cursor=r.limit-i;break r}if(!r.slice_del()){return false}}break;case 3:if(!h()){return false}if(!r.slice_from("log")){return false}break;case 4:if(!h()){return false}if(!r.slice_from("u")){return false}break;case 5:if(!h()){return false}if(!r.slice_from("ente")){return false}break;case 6:if(!d()){return false}if(!r.slice_del()){return false}break;case 7:if(!w()){return false}if(!r.slice_del()){return false}var a=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(o);if(e==0){r.cursor=r.limit-a;break r}r.bra=r.cursor;if(!h()){r.cursor=r.limit-a;break r}if(!r.slice_del()){return false}switch(e){case 1:r.ket=r.cursor;if(!r.eq_s_b("at")){r.cursor=r.limit-a;break r}r.bra=r.cursor;if(!h()){r.cursor=r.limit-a;break r}if(!r.slice_del()){return false}break}}break;case 8:if(!h()){return false}if(!r.slice_del()){return false}var s=r.limit-r.cursor;r:{r.ket=r.cursor;if(r.find_among_b(u)==0){r.cursor=r.limit-s;break r}r.bra=r.cursor;if(!h()){r.cursor=r.limit-s;break r}if(!r.slice_del()){return false}}break;case 9:if(!h()){return false}if(!r.slice_del()){return false}var c=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("at")){r.cursor=r.limit-c;break r}r.bra=r.cursor;if(!h()){r.cursor=r.limit-c;break r}if(!r.slice_del()){return false}r.ket=r.cursor;if(!r.eq_s_b("ic")){r.cursor=r.limit-c;break r}r.bra=r.cursor;if(!h()){r.cursor=r.limit-c;break r}if(!r.slice_del()){return false}}break}return true}function z(){if(r.cursor<k){return false}var e=r.limit_backward;r.limit_backward=k;r.ket=r.cursor;if(r.find_among_b(c)==0){r.limit_backward=e;return false}r.bra=r.cursor;if(!r.slice_del()){return false}r.limit_backward=e;return true}function I(){var e=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.in_grouping_b(n,97,242)){r.cursor=r.limit-e;break r}r.bra=r.cursor;if(!d()){r.cursor=r.limit-e;break r}if(!r.slice_del()){return false}r.ket=r.cursor;if(!r.eq_s_b("i")){r.cursor=r.limit-e;break r}r.bra=r.cursor;if(!d()){r.cursor=r.limit-e;break r}if(!r.slice_del()){return false}}var i=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("h")){r.cursor=r.limit-i;break r}r.bra=r.cursor;if(!r.in_grouping_b(f,99,103)){r.cursor=r.limit-i;break r}if(!d()){r.cursor=r.limit-i;break r}if(!r.slice_del()){return false}}return true}this.stem=function(){var e=r.cursor;_();r.cursor=e;v();r.limit_backward=r.cursor;r.cursor=r.limit;var i=r.limit-r.cursor;p();r.cursor=r.limit-i;var a=r.limit-r.cursor;r:{e:{var s=r.limit-r.cursor;i:{if(!q()){break i}break e}r.cursor=r.limit-s;if(!z()){break r}}}r.cursor=r.limit-a;var o=r.limit-r.cursor;I();r.cursor=r.limit-o;r.cursor=r.limit_backward;var u=r.cursor;g();r.cursor=u;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/norwegian-stemmer.js b/sphinx/search/minified-js/norwegian-stemmer.js
new file mode 100644
index 0000000..c8ec76c
--- /dev/null
+++ b/sphinx/search/minified-js/norwegian-stemmer.js
@@ -0,0 +1 @@
+NorwegianStemmer=function(){var r=new BaseStemmer;var e=[["a",-1,1],["e",-1,1],["ede",1,1],["ande",1,1],["ende",1,1],["ane",1,1],["ene",1,1],["hetene",6,1],["erte",1,3],["en",-1,1],["heten",9,1],["ar",-1,1],["er",-1,1],["heter",12,1],["s",-1,2],["as",14,1],["es",14,1],["edes",16,1],["endes",16,1],["enes",16,1],["hetenes",19,1],["ens",14,1],["hetens",21,1],["ers",14,1],["ets",14,1],["et",-1,1],["het",25,1],["ert",-1,3],["ast",-1,1]];var i=[["dt",-1,-1],["vt",-1,-1]];var t=[["leg",-1,1],["eleg",0,1],["ig",-1,1],["eig",2,1],["lig",2,1],["elig",4,1],["els",-1,1],["lov",-1,1],["elov",7,1],["slov",7,1],["hetslov",9,1]];var a=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128];var s=[119,125,149,1];var u=0;var c=0;function l(){c=r.limit;var e=r.cursor;{var i=r.cursor+3;if(i>r.limit){return false}r.cursor=i}u=r.cursor;r.cursor=e;r:while(true){var t=r.cursor;e:{if(!r.in_grouping(a,97,248)){break e}r.cursor=t;break r}r.cursor=t;if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){e:{if(!r.out_grouping(a,97,248)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}c=r.cursor;r:{if(!(c<u)){break r}c=u}return true}function n(){var i;if(r.cursor<c){return false}var t=r.limit_backward;r.limit_backward=c;r.ket=r.cursor;i=r.find_among_b(e);if(i==0){r.limit_backward=t;return false}r.bra=r.cursor;r.limit_backward=t;switch(i){case 1:if(!r.slice_del()){return false}break;case 2:r:{var u=r.limit-r.cursor;e:{if(!r.in_grouping_b(s,98,122)){break e}break r}r.cursor=r.limit-u;if(!r.eq_s_b("k")){return false}if(!r.out_grouping_b(a,97,248)){return false}}if(!r.slice_del()){return false}break;case 3:if(!r.slice_from("er")){return false}break}return true}function o(){var e=r.limit-r.cursor;if(r.cursor<c){return false}var t=r.limit_backward;r.limit_backward=c;r.ket=r.cursor;if(r.find_among_b(i)==0){r.limit_backward=t;return false}r.bra=r.cursor;r.limit_backward=t;r.cursor=r.limit-e;if(r.cursor<=r.limit_backward){return false}r.cursor--;r.bra=r.cursor;if(!r.slice_del()){return false}return true}function f(){if(r.cursor<c){return false}var e=r.limit_backward;r.limit_backward=c;r.ket=r.cursor;if(r.find_among_b(t)==0){r.limit_backward=e;return false}r.bra=r.cursor;r.limit_backward=e;if(!r.slice_del()){return false}return true}this.stem=function(){var e=r.cursor;l();r.cursor=e;r.limit_backward=r.cursor;r.cursor=r.limit;var i=r.limit-r.cursor;n();r.cursor=r.limit-i;var t=r.limit-r.cursor;o();r.cursor=r.limit-t;var a=r.limit-r.cursor;f();r.cursor=r.limit-a;r.cursor=r.limit_backward;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/porter-stemmer.js b/sphinx/search/minified-js/porter-stemmer.js
new file mode 100644
index 0000000..f05d6ec
--- /dev/null
+++ b/sphinx/search/minified-js/porter-stemmer.js
@@ -0,0 +1 @@
+PorterStemmer=function(){var r=new BaseStemmer;var e=[["s",-1,3],["ies",0,2],["sses",0,1],["ss",0,-1]];var i=[["",-1,3],["bb",0,2],["dd",0,2],["ff",0,2],["gg",0,2],["bl",0,1],["mm",0,2],["nn",0,2],["pp",0,2],["rr",0,2],["at",0,1],["tt",0,2],["iz",0,1]];var s=[["ed",-1,2],["eed",0,1],["ing",-1,2]];var a=[["anci",-1,3],["enci",-1,2],["abli",-1,4],["eli",-1,6],["alli",-1,9],["ousli",-1,11],["entli",-1,5],["aliti",-1,9],["biliti",-1,13],["iviti",-1,12],["tional",-1,1],["ational",10,8],["alism",-1,9],["ation",-1,8],["ization",13,7],["izer",-1,7],["ator",-1,8],["iveness",-1,12],["fulness",-1,10],["ousness",-1,11]];var u=[["icate",-1,2],["ative",-1,3],["alize",-1,1],["iciti",-1,2],["ical",-1,2],["ful",-1,3],["ness",-1,3]];var t=[["ic",-1,1],["ance",-1,1],["ence",-1,1],["able",-1,1],["ible",-1,1],["ate",-1,1],["ive",-1,1],["ize",-1,1],["iti",-1,1],["al",-1,1],["ism",-1,1],["ion",-1,2],["er",-1,1],["ous",-1,1],["ant",-1,1],["ent",-1,1],["ment",15,1],["ement",16,1],["ou",-1,1]];var c=[17,65,16,1];var f=[1,17,65,208,1];var l=false;var o=0;var n=0;function b(){if(!r.out_grouping_b(f,89,121)){return false}if(!r.in_grouping_b(c,97,121)){return false}if(!r.out_grouping_b(c,97,121)){return false}return true}function m(){if(!(n<=r.cursor)){return false}return true}function _(){if(!(o<=r.cursor)){return false}return true}function k(){var i;r.ket=r.cursor;i=r.find_among_b(e);if(i==0){return false}r.bra=r.cursor;switch(i){case 1:if(!r.slice_from("ss")){return false}break;case 2:if(!r.slice_from("i")){return false}break;case 3:if(!r.slice_del()){return false}break}return true}function v(){var e;r.ket=r.cursor;e=r.find_among_b(s);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:if(!m()){return false}if(!r.slice_from("ee")){return false}break;case 2:var a=r.limit-r.cursor;r:while(true){e:{if(!r.in_grouping_b(c,97,121)){break e}break r}if(r.cursor<=r.limit_backward){return false}r.cursor--}r.cursor=r.limit-a;if(!r.slice_del()){return false}var u=r.limit-r.cursor;e=r.find_among_b(i);if(e==0){return false}r.cursor=r.limit-u;switch(e){case 1:{var t=r.cursor;r.insert(r.cursor,r.cursor,"e");r.cursor=t}break;case 2:r.ket=r.cursor;if(r.cursor<=r.limit_backward){return false}r.cursor--;r.bra=r.cursor;if(!r.slice_del()){return false}break;case 3:if(r.cursor!=n){return false}var f=r.limit-r.cursor;if(!b()){return false}r.cursor=r.limit-f;{var l=r.cursor;r.insert(r.cursor,r.cursor,"e");r.cursor=l}break}break}return true}function g(){r.ket=r.cursor;r:{var e=r.limit-r.cursor;e:{if(!r.eq_s_b("y")){break e}break r}r.cursor=r.limit-e;if(!r.eq_s_b("Y")){return false}}r.bra=r.cursor;r:while(true){e:{if(!r.in_grouping_b(c,97,121)){break e}break r}if(r.cursor<=r.limit_backward){return false}r.cursor--}if(!r.slice_from("i")){return false}return true}function d(){var e;r.ket=r.cursor;e=r.find_among_b(a);if(e==0){return false}r.bra=r.cursor;if(!m()){return false}switch(e){case 1:if(!r.slice_from("tion")){return false}break;case 2:if(!r.slice_from("ence")){return false}break;case 3:if(!r.slice_from("ance")){return false}break;case 4:if(!r.slice_from("able")){return false}break;case 5:if(!r.slice_from("ent")){return false}break;case 6:if(!r.slice_from("e")){return false}break;case 7:if(!r.slice_from("ize")){return false}break;case 8:if(!r.slice_from("ate")){return false}break;case 9:if(!r.slice_from("al")){return false}break;case 10:if(!r.slice_from("ful")){return false}break;case 11:if(!r.slice_from("ous")){return false}break;case 12:if(!r.slice_from("ive")){return false}break;case 13:if(!r.slice_from("ble")){return false}break}return true}function w(){var e;r.ket=r.cursor;e=r.find_among_b(u);if(e==0){return false}r.bra=r.cursor;if(!m()){return false}switch(e){case 1:if(!r.slice_from("al")){return false}break;case 2:if(!r.slice_from("ic")){return false}break;case 3:if(!r.slice_del()){return false}break}return true}function h(){var e;r.ket=r.cursor;e=r.find_among_b(t);if(e==0){return false}r.bra=r.cursor;if(!_()){return false}switch(e){case 1:if(!r.slice_del()){return false}break;case 2:r:{var i=r.limit-r.cursor;e:{if(!r.eq_s_b("s")){break e}break r}r.cursor=r.limit-i;if(!r.eq_s_b("t")){return false}}if(!r.slice_del()){return false}break}return true}function p(){r.ket=r.cursor;if(!r.eq_s_b("e")){return false}r.bra=r.cursor;r:{var e=r.limit-r.cursor;e:{if(!_()){break e}break r}r.cursor=r.limit-e;if(!m()){return false}{var i=r.limit-r.cursor;e:{if(!b()){break e}return false}r.cursor=r.limit-i}}if(!r.slice_del()){return false}return true}function q(){r.ket=r.cursor;if(!r.eq_s_b("l")){return false}r.bra=r.cursor;if(!_()){return false}if(!r.eq_s_b("l")){return false}if(!r.slice_del()){return false}return true}this.stem=function(){l=false;var e=r.cursor;r:{r.bra=r.cursor;if(!r.eq_s("y")){break r}r.ket=r.cursor;if(!r.slice_from("Y")){return false}l=true}r.cursor=e;var i=r.cursor;r:{while(true){var s=r.cursor;e:{i:while(true){var a=r.cursor;s:{if(!r.in_grouping(c,97,121)){break s}r.bra=r.cursor;if(!r.eq_s("y")){break s}r.ket=r.cursor;r.cursor=a;break i}r.cursor=a;if(r.cursor>=r.limit){break e}r.cursor++}if(!r.slice_from("Y")){return false}l=true;continue}r.cursor=s;break}}r.cursor=i;n=r.limit;o=r.limit;var u=r.cursor;r:{e:while(true){i:{if(!r.in_grouping(c,97,121)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(c,97,121)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}n=r.cursor;e:while(true){i:{if(!r.in_grouping(c,97,121)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(c,97,121)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}o=r.cursor}r.cursor=u;r.limit_backward=r.cursor;r.cursor=r.limit;var t=r.limit-r.cursor;k();r.cursor=r.limit-t;var f=r.limit-r.cursor;v();r.cursor=r.limit-f;var b=r.limit-r.cursor;g();r.cursor=r.limit-b;var m=r.limit-r.cursor;d();r.cursor=r.limit-m;var _=r.limit-r.cursor;w();r.cursor=r.limit-_;var z=r.limit-r.cursor;h();r.cursor=r.limit-z;var y=r.limit-r.cursor;p();r.cursor=r.limit-y;var Y=r.limit-r.cursor;q();r.cursor=r.limit-Y;r.cursor=r.limit_backward;var C=r.cursor;r:{if(!l){break r}while(true){var S=r.cursor;e:{i:while(true){var B=r.cursor;s:{r.bra=r.cursor;if(!r.eq_s("Y")){break s}r.ket=r.cursor;r.cursor=B;break i}r.cursor=B;if(r.cursor>=r.limit){break e}r.cursor++}if(!r.slice_from("y")){return false}continue}r.cursor=S;break}}r.cursor=C;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/portuguese-stemmer.js b/sphinx/search/minified-js/portuguese-stemmer.js
new file mode 100644
index 0000000..022d860
--- /dev/null
+++ b/sphinx/search/minified-js/portuguese-stemmer.js
@@ -0,0 +1 @@
+PortugueseStemmer=function(){var r=new BaseStemmer;var e=[["",-1,3],["ã",0,1],["õ",0,2]];var i=[["",-1,3],["a~",0,1],["o~",0,2]];var s=[["ic",-1,-1],["ad",-1,-1],["os",-1,-1],["iv",-1,1]];var a=[["ante",-1,1],["avel",-1,1],["ível",-1,1]];var u=[["ic",-1,1],["abil",-1,1],["iv",-1,1]];var o=[["ica",-1,1],["ância",-1,1],["ência",-1,4],["logia",-1,2],["ira",-1,9],["adora",-1,1],["osa",-1,1],["ista",-1,1],["iva",-1,8],["eza",-1,1],["idade",-1,7],["ante",-1,1],["mente",-1,6],["amente",12,5],["ável",-1,1],["ível",-1,1],["ico",-1,1],["ismo",-1,1],["oso",-1,1],["amento",-1,1],["imento",-1,1],["ivo",-1,8],["aça~o",-1,1],["uça~o",-1,3],["ador",-1,1],["icas",-1,1],["ências",-1,4],["logias",-1,2],["iras",-1,9],["adoras",-1,1],["osas",-1,1],["istas",-1,1],["ivas",-1,8],["ezas",-1,1],["idades",-1,7],["adores",-1,1],["antes",-1,1],["aço~es",-1,1],["uço~es",-1,3],["icos",-1,1],["ismos",-1,1],["osos",-1,1],["amentos",-1,1],["imentos",-1,1],["ivos",-1,8]];var t=[["ada",-1,1],["ida",-1,1],["ia",-1,1],["aria",2,1],["eria",2,1],["iria",2,1],["ara",-1,1],["era",-1,1],["ira",-1,1],["ava",-1,1],["asse",-1,1],["esse",-1,1],["isse",-1,1],["aste",-1,1],["este",-1,1],["iste",-1,1],["ei",-1,1],["arei",16,1],["erei",16,1],["irei",16,1],["am",-1,1],["iam",20,1],["ariam",21,1],["eriam",21,1],["iriam",21,1],["aram",20,1],["eram",20,1],["iram",20,1],["avam",20,1],["em",-1,1],["arem",29,1],["erem",29,1],["irem",29,1],["assem",29,1],["essem",29,1],["issem",29,1],["ado",-1,1],["ido",-1,1],["ando",-1,1],["endo",-1,1],["indo",-1,1],["ara~o",-1,1],["era~o",-1,1],["ira~o",-1,1],["ar",-1,1],["er",-1,1],["ir",-1,1],["as",-1,1],["adas",47,1],["idas",47,1],["ias",47,1],["arias",50,1],["erias",50,1],["irias",50,1],["aras",47,1],["eras",47,1],["iras",47,1],["avas",47,1],["es",-1,1],["ardes",58,1],["erdes",58,1],["irdes",58,1],["ares",58,1],["eres",58,1],["ires",58,1],["asses",58,1],["esses",58,1],["isses",58,1],["astes",58,1],["estes",58,1],["istes",58,1],["is",-1,1],["ais",71,1],["eis",71,1],["areis",73,1],["ereis",73,1],["ireis",73,1],["áreis",73,1],["éreis",73,1],["íreis",73,1],["ásseis",73,1],["ésseis",73,1],["ísseis",73,1],["áveis",73,1],["íeis",73,1],["aríeis",84,1],["eríeis",84,1],["iríeis",84,1],["ados",-1,1],["idos",-1,1],["amos",-1,1],["áramos",90,1],["éramos",90,1],["íramos",90,1],["ávamos",90,1],["íamos",90,1],["aríamos",95,1],["eríamos",95,1],["iríamos",95,1],["emos",-1,1],["aremos",99,1],["eremos",99,1],["iremos",99,1],["ássemos",99,1],["êssemos",99,1],["íssemos",99,1],["imos",-1,1],["armos",-1,1],["ermos",-1,1],["irmos",-1,1],["ámos",-1,1],["arás",-1,1],["erás",-1,1],["irás",-1,1],["eu",-1,1],["iu",-1,1],["ou",-1,1],["ará",-1,1],["erá",-1,1],["irá",-1,1]];var c=[["a",-1,1],["i",-1,1],["o",-1,1],["os",-1,1],["á",-1,1],["í",-1,1],["ó",-1,1]];var f=[["e",-1,1],["ç",-1,2],["é",-1,1],["ê",-1,1]];var l=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2];var n=0;var m=0;var b=0;function k(){var i;while(true){var s=r.cursor;r:{r.bra=r.cursor;i=r.find_among(e);if(i==0){break r}r.ket=r.cursor;switch(i){case 1:if(!r.slice_from("a~")){return false}break;case 2:if(!r.slice_from("o~")){return false}break;case 3:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=s;break}return true}function _(){b=r.limit;m=r.limit;n=r.limit;var e=r.cursor;r:{e:{var i=r.cursor;i:{if(!r.in_grouping(l,97,250)){break i}s:{var s=r.cursor;a:{if(!r.out_grouping(l,97,250)){break a}u:while(true){o:{if(!r.in_grouping(l,97,250)){break o}break u}if(r.cursor>=r.limit){break a}r.cursor++}break s}r.cursor=s;if(!r.in_grouping(l,97,250)){break i}a:while(true){u:{if(!r.out_grouping(l,97,250)){break u}break a}if(r.cursor>=r.limit){break i}r.cursor++}}break e}r.cursor=i;if(!r.out_grouping(l,97,250)){break r}i:{var a=r.cursor;s:{if(!r.out_grouping(l,97,250)){break s}a:while(true){u:{if(!r.in_grouping(l,97,250)){break u}break a}if(r.cursor>=r.limit){break s}r.cursor++}break i}r.cursor=a;if(!r.in_grouping(l,97,250)){break r}if(r.cursor>=r.limit){break r}r.cursor++}}b=r.cursor}r.cursor=e;var u=r.cursor;r:{e:while(true){i:{if(!r.in_grouping(l,97,250)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(l,97,250)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}m=r.cursor;e:while(true){i:{if(!r.in_grouping(l,97,250)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(l,97,250)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}n=r.cursor}r.cursor=u;return true}function v(){var e;while(true){var s=r.cursor;r:{r.bra=r.cursor;e=r.find_among(i);if(e==0){break r}r.ket=r.cursor;switch(e){case 1:if(!r.slice_from("ã")){return false}break;case 2:if(!r.slice_from("õ")){return false}break;case 3:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=s;break}return true}function d(){if(!(b<=r.cursor)){return false}return true}function g(){if(!(m<=r.cursor)){return false}return true}function w(){if(!(n<=r.cursor)){return false}return true}function h(){var e;r.ket=r.cursor;e=r.find_among_b(o);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:if(!w()){return false}if(!r.slice_del()){return false}break;case 2:if(!w()){return false}if(!r.slice_from("log")){return false}break;case 3:if(!w()){return false}if(!r.slice_from("u")){return false}break;case 4:if(!w()){return false}if(!r.slice_from("ente")){return false}break;case 5:if(!g()){return false}if(!r.slice_del()){return false}var i=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(s);if(e==0){r.cursor=r.limit-i;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-i;break r}if(!r.slice_del()){return false}switch(e){case 1:r.ket=r.cursor;if(!r.eq_s_b("at")){r.cursor=r.limit-i;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-i;break r}if(!r.slice_del()){return false}break}}break;case 6:if(!w()){return false}if(!r.slice_del()){return false}var t=r.limit-r.cursor;r:{r.ket=r.cursor;if(r.find_among_b(a)==0){r.cursor=r.limit-t;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-t;break r}if(!r.slice_del()){return false}}break;case 7:if(!w()){return false}if(!r.slice_del()){return false}var c=r.limit-r.cursor;r:{r.ket=r.cursor;if(r.find_among_b(u)==0){r.cursor=r.limit-c;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-c;break r}if(!r.slice_del()){return false}}break;case 8:if(!w()){return false}if(!r.slice_del()){return false}var f=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("at")){r.cursor=r.limit-f;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-f;break r}if(!r.slice_del()){return false}}break;case 9:if(!d()){return false}if(!r.eq_s_b("e")){return false}if(!r.slice_from("ir")){return false}break}return true}function p(){if(r.cursor<b){return false}var e=r.limit_backward;r.limit_backward=b;r.ket=r.cursor;if(r.find_among_b(t)==0){r.limit_backward=e;return false}r.bra=r.cursor;if(!r.slice_del()){return false}r.limit_backward=e;return true}function q(){r.ket=r.cursor;if(r.find_among_b(c)==0){return false}r.bra=r.cursor;if(!d()){return false}if(!r.slice_del()){return false}return true}function z(){var e;r.ket=r.cursor;e=r.find_among_b(f);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:if(!d()){return false}if(!r.slice_del()){return false}r.ket=r.cursor;r:{var i=r.limit-r.cursor;e:{if(!r.eq_s_b("u")){break e}r.bra=r.cursor;var s=r.limit-r.cursor;if(!r.eq_s_b("g")){break e}r.cursor=r.limit-s;break r}r.cursor=r.limit-i;if(!r.eq_s_b("i")){return false}r.bra=r.cursor;var a=r.limit-r.cursor;if(!r.eq_s_b("c")){return false}r.cursor=r.limit-a}if(!d()){return false}if(!r.slice_del()){return false}break;case 2:if(!r.slice_from("c")){return false}break}return true}this.stem=function(){var e=r.cursor;k();r.cursor=e;_();r.limit_backward=r.cursor;r.cursor=r.limit;var i=r.limit-r.cursor;r:{e:{var s=r.limit-r.cursor;i:{var a=r.limit-r.cursor;s:{var u=r.limit-r.cursor;a:{if(!h()){break a}break s}r.cursor=r.limit-u;if(!p()){break i}}r.cursor=r.limit-a;var o=r.limit-r.cursor;s:{r.ket=r.cursor;if(!r.eq_s_b("i")){break s}r.bra=r.cursor;var t=r.limit-r.cursor;if(!r.eq_s_b("c")){break s}r.cursor=r.limit-t;if(!d()){break s}if(!r.slice_del()){return false}}r.cursor=r.limit-o;break e}r.cursor=r.limit-s;if(!q()){break r}}}r.cursor=r.limit-i;var c=r.limit-r.cursor;z();r.cursor=r.limit-c;r.cursor=r.limit_backward;var f=r.cursor;v();r.cursor=f;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/romanian-stemmer.js b/sphinx/search/minified-js/romanian-stemmer.js
new file mode 100644
index 0000000..01c54d0
--- /dev/null
+++ b/sphinx/search/minified-js/romanian-stemmer.js
@@ -0,0 +1 @@
+RomanianStemmer=function(){var r=new BaseStemmer;var i=[["",-1,3],["I",0,1],["U",0,2]];var e=[["ea",-1,3],["aţia",-1,7],["aua",-1,2],["iua",-1,4],["aţie",-1,7],["ele",-1,3],["ile",-1,5],["iile",6,4],["iei",-1,4],["atei",-1,6],["ii",-1,4],["ului",-1,1],["ul",-1,1],["elor",-1,3],["ilor",-1,4],["iilor",14,4]];var a=[["icala",-1,4],["iciva",-1,4],["ativa",-1,5],["itiva",-1,6],["icale",-1,4],["aţiune",-1,5],["iţiune",-1,6],["atoare",-1,5],["itoare",-1,6],["ătoare",-1,5],["icitate",-1,4],["abilitate",-1,1],["ibilitate",-1,2],["ivitate",-1,3],["icive",-1,4],["ative",-1,5],["itive",-1,6],["icali",-1,4],["atori",-1,5],["icatori",18,4],["itori",-1,6],["ători",-1,5],["icitati",-1,4],["abilitati",-1,1],["ivitati",-1,3],["icivi",-1,4],["ativi",-1,5],["itivi",-1,6],["icităi",-1,4],["abilităi",-1,1],["ivităi",-1,3],["icităţi",-1,4],["abilităţi",-1,1],["ivităţi",-1,3],["ical",-1,4],["ator",-1,5],["icator",35,4],["itor",-1,6],["ător",-1,5],["iciv",-1,4],["ativ",-1,5],["itiv",-1,6],["icală",-1,4],["icivă",-1,4],["ativă",-1,5],["itivă",-1,6]];var t=[["ica",-1,1],["abila",-1,1],["ibila",-1,1],["oasa",-1,1],["ata",-1,1],["ita",-1,1],["anta",-1,1],["ista",-1,3],["uta",-1,1],["iva",-1,1],["ic",-1,1],["ice",-1,1],["abile",-1,1],["ibile",-1,1],["isme",-1,3],["iune",-1,2],["oase",-1,1],["ate",-1,1],["itate",17,1],["ite",-1,1],["ante",-1,1],["iste",-1,3],["ute",-1,1],["ive",-1,1],["ici",-1,1],["abili",-1,1],["ibili",-1,1],["iuni",-1,2],["atori",-1,1],["osi",-1,1],["ati",-1,1],["itati",30,1],["iti",-1,1],["anti",-1,1],["isti",-1,3],["uti",-1,1],["işti",-1,3],["ivi",-1,1],["ităi",-1,1],["oşi",-1,1],["ităţi",-1,1],["abil",-1,1],["ibil",-1,1],["ism",-1,3],["ator",-1,1],["os",-1,1],["at",-1,1],["it",-1,1],["ant",-1,1],["ist",-1,3],["ut",-1,1],["iv",-1,1],["ică",-1,1],["abilă",-1,1],["ibilă",-1,1],["oasă",-1,1],["ată",-1,1],["ită",-1,1],["antă",-1,1],["istă",-1,3],["ută",-1,1],["ivă",-1,1]];var s=[["ea",-1,1],["ia",-1,1],["esc",-1,1],["ăsc",-1,1],["ind",-1,1],["ând",-1,1],["are",-1,1],["ere",-1,1],["ire",-1,1],["âre",-1,1],["se",-1,2],["ase",10,1],["sese",10,2],["ise",10,1],["use",10,1],["âse",10,1],["eşte",-1,1],["ăşte",-1,1],["eze",-1,1],["ai",-1,1],["eai",19,1],["iai",19,1],["sei",-1,2],["eşti",-1,1],["ăşti",-1,1],["ui",-1,1],["ezi",-1,1],["âi",-1,1],["aşi",-1,1],["seşi",-1,2],["aseşi",29,1],["seseşi",29,2],["iseşi",29,1],["useşi",29,1],["âseşi",29,1],["işi",-1,1],["uşi",-1,1],["âşi",-1,1],["aţi",-1,2],["eaţi",38,1],["iaţi",38,1],["eţi",-1,2],["iţi",-1,2],["âţi",-1,2],["arăţi",-1,1],["serăţi",-1,2],["aserăţi",45,1],["seserăţi",45,2],["iserăţi",45,1],["userăţi",45,1],["âserăţi",45,1],["irăţi",-1,1],["urăţi",-1,1],["ârăţi",-1,1],["am",-1,1],["eam",54,1],["iam",54,1],["em",-1,2],["asem",57,1],["sesem",57,2],["isem",57,1],["usem",57,1],["âsem",57,1],["im",-1,2],["âm",-1,2],["ăm",-1,2],["arăm",65,1],["serăm",65,2],["aserăm",67,1],["seserăm",67,2],["iserăm",67,1],["userăm",67,1],["âserăm",67,1],["irăm",65,1],["urăm",65,1],["ârăm",65,1],["au",-1,1],["eau",76,1],["iau",76,1],["indu",-1,1],["ându",-1,1],["ez",-1,1],["ească",-1,1],["ară",-1,1],["seră",-1,2],["aseră",84,1],["seseră",84,2],["iseră",84,1],["useră",84,1],["âseră",84,1],["iră",-1,1],["ură",-1,1],["âră",-1,1],["ează",-1,1]];var u=[["a",-1,1],["e",-1,1],["ie",1,1],["i",-1,1],["ă",-1,1]];var c=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4];var o=false;var f=0;var l=0;var n=0;function b(){while(true){var i=r.cursor;r:{i:while(true){var e=r.cursor;e:{if(!r.in_grouping(c,97,259)){break e}r.bra=r.cursor;a:{var a=r.cursor;t:{if(!r.eq_s("u")){break t}r.ket=r.cursor;if(!r.in_grouping(c,97,259)){break t}if(!r.slice_from("U")){return false}break a}r.cursor=a;if(!r.eq_s("i")){break e}r.ket=r.cursor;if(!r.in_grouping(c,97,259)){break e}if(!r.slice_from("I")){return false}}r.cursor=e;break i}r.cursor=e;if(r.cursor>=r.limit){break r}r.cursor++}continue}r.cursor=i;break}return true}function m(){n=r.limit;l=r.limit;f=r.limit;var i=r.cursor;r:{i:{var e=r.cursor;e:{if(!r.in_grouping(c,97,259)){break e}a:{var a=r.cursor;t:{if(!r.out_grouping(c,97,259)){break t}s:while(true){u:{if(!r.in_grouping(c,97,259)){break u}break s}if(r.cursor>=r.limit){break t}r.cursor++}break a}r.cursor=a;if(!r.in_grouping(c,97,259)){break e}t:while(true){s:{if(!r.out_grouping(c,97,259)){break s}break t}if(r.cursor>=r.limit){break e}r.cursor++}}break i}r.cursor=e;if(!r.out_grouping(c,97,259)){break r}e:{var t=r.cursor;a:{if(!r.out_grouping(c,97,259)){break a}t:while(true){s:{if(!r.in_grouping(c,97,259)){break s}break t}if(r.cursor>=r.limit){break a}r.cursor++}break e}r.cursor=t;if(!r.in_grouping(c,97,259)){break r}if(r.cursor>=r.limit){break r}r.cursor++}}n=r.cursor}r.cursor=i;var s=r.cursor;r:{i:while(true){e:{if(!r.in_grouping(c,97,259)){break e}break i}if(r.cursor>=r.limit){break r}r.cursor++}i:while(true){e:{if(!r.out_grouping(c,97,259)){break e}break i}if(r.cursor>=r.limit){break r}r.cursor++}l=r.cursor;i:while(true){e:{if(!r.in_grouping(c,97,259)){break e}break i}if(r.cursor>=r.limit){break r}r.cursor++}i:while(true){e:{if(!r.out_grouping(c,97,259)){break e}break i}if(r.cursor>=r.limit){break r}r.cursor++}f=r.cursor}r.cursor=s;return true}function k(){var e;while(true){var a=r.cursor;r:{r.bra=r.cursor;e=r.find_among(i);if(e==0){break r}r.ket=r.cursor;switch(e){case 1:if(!r.slice_from("i")){return false}break;case 2:if(!r.slice_from("u")){return false}break;case 3:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=a;break}return true}function _(){if(!(n<=r.cursor)){return false}return true}function v(){if(!(l<=r.cursor)){return false}return true}function g(){if(!(f<=r.cursor)){return false}return true}function w(){var i;r.ket=r.cursor;i=r.find_among_b(e);if(i==0){return false}r.bra=r.cursor;if(!v()){return false}switch(i){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.slice_from("a")){return false}break;case 3:if(!r.slice_from("e")){return false}break;case 4:if(!r.slice_from("i")){return false}break;case 5:{var a=r.limit-r.cursor;r:{if(!r.eq_s_b("ab")){break r}return false}r.cursor=r.limit-a}if(!r.slice_from("i")){return false}break;case 6:if(!r.slice_from("at")){return false}break;case 7:if(!r.slice_from("aţi")){return false}break}return true}function d(){var i;var e=r.limit-r.cursor;r.ket=r.cursor;i=r.find_among_b(a);if(i==0){return false}r.bra=r.cursor;if(!v()){return false}switch(i){case 1:if(!r.slice_from("abil")){return false}break;case 2:if(!r.slice_from("ibil")){return false}break;case 3:if(!r.slice_from("iv")){return false}break;case 4:if(!r.slice_from("ic")){return false}break;case 5:if(!r.slice_from("at")){return false}break;case 6:if(!r.slice_from("it")){return false}break}o=true;r.cursor=r.limit-e;return true}function h(){var i;o=false;while(true){var e=r.limit-r.cursor;r:{if(!d()){break r}continue}r.cursor=r.limit-e;break}r.ket=r.cursor;i=r.find_among_b(t);if(i==0){return false}r.bra=r.cursor;if(!g()){return false}switch(i){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.eq_s_b("ţ")){return false}r.bra=r.cursor;if(!r.slice_from("t")){return false}break;case 3:if(!r.slice_from("ist")){return false}break}o=true;return true}function p(){var i;if(r.cursor<n){return false}var e=r.limit_backward;r.limit_backward=n;r.ket=r.cursor;i=r.find_among_b(s);if(i==0){r.limit_backward=e;return false}r.bra=r.cursor;switch(i){case 1:r:{var a=r.limit-r.cursor;i:{if(!r.out_grouping_b(c,97,259)){break i}break r}r.cursor=r.limit-a;if(!r.eq_s_b("u")){r.limit_backward=e;return false}}if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}break}r.limit_backward=e;return true}function q(){r.ket=r.cursor;if(r.find_among_b(u)==0){return false}r.bra=r.cursor;if(!_()){return false}if(!r.slice_del()){return false}return true}this.stem=function(){var i=r.cursor;b();r.cursor=i;m();r.limit_backward=r.cursor;r.cursor=r.limit;var e=r.limit-r.cursor;w();r.cursor=r.limit-e;var a=r.limit-r.cursor;h();r.cursor=r.limit-a;var t=r.limit-r.cursor;r:{i:{var s=r.limit-r.cursor;e:{if(!o){break e}break i}r.cursor=r.limit-s;if(!p()){break r}}}r.cursor=r.limit-t;var u=r.limit-r.cursor;q();r.cursor=r.limit-u;r.cursor=r.limit_backward;var c=r.cursor;k();r.cursor=c;return true};this["stemWord"]=function(i){r.setCurrent(i);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/russian-stemmer.js b/sphinx/search/minified-js/russian-stemmer.js
new file mode 100644
index 0000000..698d92b
--- /dev/null
+++ b/sphinx/search/minified-js/russian-stemmer.js
@@ -0,0 +1 @@
+RussianStemmer=function(){var r=new BaseStemmer;var e=[["в",-1,1],["ив",0,2],["ыв",0,2],["вши",-1,1],["ивши",3,2],["ывши",3,2],["вшись",-1,1],["ившись",6,2],["ывшись",6,2]];var i=[["ее",-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,1],["ую",-1,1],["юю",-1,1],["ая",-1,1],["яя",-1,1]];var u=[["ем",-1,1],["нн",-1,1],["вш",-1,1],["ивш",2,2],["ывш",2,2],["щ",-1,1],["ющ",5,1],["ующ",6,2]];var s=[["сь",-1,1],["ся",-1,1]];var a=[["ла",-1,1],["ила",0,2],["ыла",0,2],["на",-1,1],["ена",3,2],["ете",-1,1],["ите",-1,2],["йте",-1,1],["ейте",7,2],["уйте",7,2],["ли",-1,1],["или",10,2],["ыли",10,2],["й",-1,1],["ей",13,2],["уй",13,2],["л",-1,1],["ил",16,2],["ыл",16,2],["ем",-1,1],["им",-1,2],["ым",-1,2],["н",-1,1],["ен",22,2],["ло",-1,1],["ило",24,2],["ыло",24,2],["но",-1,1],["ено",27,2],["нно",27,1],["ет",-1,1],["ует",30,2],["ит",-1,2],["ыт",-1,2],["ют",-1,1],["уют",34,2],["ят",-1,2],["ны",-1,1],["ены",37,2],["ть",-1,1],["ить",39,2],["ыть",39,2],["ешь",-1,1],["ишь",-1,2],["ю",-1,2],["ую",44,2]];var t=[["а",-1,1],["ев",-1,1],["ов",-1,1],["е",-1,1],["ие",3,1],["ье",3,1],["и",-1,1],["еи",6,1],["ии",6,1],["ами",6,1],["ями",6,1],["иями",10,1],["й",-1,1],["ей",12,1],["ией",13,1],["ий",12,1],["ой",12,1],["ам",-1,1],["ем",-1,1],["ием",18,1],["ом",-1,1],["ям",-1,1],["иям",21,1],["о",-1,1],["у",-1,1],["ах",-1,1],["ях",-1,1],["иях",26,1],["ы",-1,1],["ь",-1,1],["ю",-1,1],["ию",30,1],["ью",30,1],["я",-1,1],["ия",33,1],["ья",33,1]];var c=[["ост",-1,1],["ость",-1,1]];var f=[["ейше",-1,1],["н",-1,2],["ейш",-1,1],["ь",-1,3]];var l=[33,65,8,232];var o=0;var n=0;function b(){n=r.limit;o=r.limit;var e=r.cursor;r:{e:while(true){i:{if(!r.in_grouping(l,1072,1103)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}n=r.cursor;e:while(true){i:{if(!r.out_grouping(l,1072,1103)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.in_grouping(l,1072,1103)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(l,1072,1103)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}o=r.cursor}r.cursor=e;return true}function _(){if(!(o<=r.cursor)){return false}return true}function k(){var i;r.ket=r.cursor;i=r.find_among_b(e);if(i==0){return false}r.bra=r.cursor;switch(i){case 1:r:{var u=r.limit-r.cursor;e:{if(!r.eq_s_b("а")){break e}break r}r.cursor=r.limit-u;if(!r.eq_s_b("я")){return false}}if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}break}return true}function m(){r.ket=r.cursor;if(r.find_among_b(i)==0){return false}r.bra=r.cursor;if(!r.slice_del()){return false}return true}function v(){var e;if(!m()){return false}var i=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(u);if(e==0){r.cursor=r.limit-i;break r}r.bra=r.cursor;switch(e){case 1:e:{var s=r.limit-r.cursor;i:{if(!r.eq_s_b("а")){break i}break e}r.cursor=r.limit-s;if(!r.eq_s_b("я")){r.cursor=r.limit-i;break r}}if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}break}}return true}function d(){r.ket=r.cursor;if(r.find_among_b(s)==0){return false}r.bra=r.cursor;if(!r.slice_del()){return false}return true}function g(){var e;r.ket=r.cursor;e=r.find_among_b(a);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:r:{var i=r.limit-r.cursor;e:{if(!r.eq_s_b("а")){break e}break r}r.cursor=r.limit-i;if(!r.eq_s_b("я")){return false}}if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}break}return true}function w(){r.ket=r.cursor;if(r.find_among_b(t)==0){return false}r.bra=r.cursor;if(!r.slice_del()){return false}return true}function h(){r.ket=r.cursor;if(r.find_among_b(c)==0){return false}r.bra=r.cursor;if(!_()){return false}if(!r.slice_del()){return false}return true}function q(){var e;r.ket=r.cursor;e=r.find_among_b(f);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:if(!r.slice_del()){return false}r.ket=r.cursor;if(!r.eq_s_b("н")){return false}r.bra=r.cursor;if(!r.eq_s_b("н")){return false}if(!r.slice_del()){return false}break;case 2:if(!r.eq_s_b("н")){return false}if(!r.slice_del()){return false}break;case 3:if(!r.slice_del()){return false}break}return true}this.stem=function(){var e=r.cursor;r:{while(true){var i=r.cursor;e:{i:while(true){var u=r.cursor;u:{r.bra=r.cursor;if(!r.eq_s("ё")){break u}r.ket=r.cursor;r.cursor=u;break i}r.cursor=u;if(r.cursor>=r.limit){break e}r.cursor++}if(!r.slice_from("е")){return false}continue}r.cursor=i;break}}r.cursor=e;b();r.limit_backward=r.cursor;r.cursor=r.limit;if(r.cursor<n){return false}var s=r.limit_backward;r.limit_backward=n;var a=r.limit-r.cursor;r:{e:{var t=r.limit-r.cursor;i:{if(!k()){break i}break e}r.cursor=r.limit-t;var c=r.limit-r.cursor;i:{if(!d()){r.cursor=r.limit-c;break i}}i:{var f=r.limit-r.cursor;u:{if(!v()){break u}break i}r.cursor=r.limit-f;u:{if(!g()){break u}break i}r.cursor=r.limit-f;if(!w()){break r}}}}r.cursor=r.limit-a;var l=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("и")){r.cursor=r.limit-l;break r}r.bra=r.cursor;if(!r.slice_del()){return false}}var o=r.limit-r.cursor;h();r.cursor=r.limit-o;var _=r.limit-r.cursor;q();r.cursor=r.limit-_;r.limit_backward=s;r.cursor=r.limit_backward;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/spanish-stemmer.js b/sphinx/search/minified-js/spanish-stemmer.js
new file mode 100644
index 0000000..ef634a8
--- /dev/null
+++ b/sphinx/search/minified-js/spanish-stemmer.js
@@ -0,0 +1 @@
+SpanishStemmer=function(){var r=new BaseStemmer;var e=[["",-1,6],["á",0,1],["é",0,2],["í",0,3],["ó",0,4],["ú",0,5]];var i=[["la",-1,-1],["sela",0,-1],["le",-1,-1],["me",-1,-1],["se",-1,-1],["lo",-1,-1],["selo",5,-1],["las",-1,-1],["selas",7,-1],["les",-1,-1],["los",-1,-1],["selos",10,-1],["nos",-1,-1]];var a=[["ando",-1,6],["iendo",-1,6],["yendo",-1,7],["ándo",-1,2],["iéndo",-1,1],["ar",-1,6],["er",-1,6],["ir",-1,6],["ár",-1,3],["ér",-1,4],["ír",-1,5]];var s=[["ic",-1,-1],["ad",-1,-1],["os",-1,-1],["iv",-1,1]];var u=[["able",-1,1],["ible",-1,1],["ante",-1,1]];var o=[["ic",-1,1],["abil",-1,1],["iv",-1,1]];var t=[["ica",-1,1],["ancia",-1,2],["encia",-1,5],["adora",-1,2],["osa",-1,1],["ista",-1,1],["iva",-1,9],["anza",-1,1],["logía",-1,3],["idad",-1,8],["able",-1,1],["ible",-1,1],["ante",-1,2],["mente",-1,7],["amente",13,6],["ación",-1,2],["ución",-1,4],["ico",-1,1],["ismo",-1,1],["oso",-1,1],["amiento",-1,1],["imiento",-1,1],["ivo",-1,9],["ador",-1,2],["icas",-1,1],["ancias",-1,2],["encias",-1,5],["adoras",-1,2],["osas",-1,1],["istas",-1,1],["ivas",-1,9],["anzas",-1,1],["logías",-1,3],["idades",-1,8],["ables",-1,1],["ibles",-1,1],["aciones",-1,2],["uciones",-1,4],["adores",-1,2],["antes",-1,2],["icos",-1,1],["ismos",-1,1],["osos",-1,1],["amientos",-1,1],["imientos",-1,1],["ivos",-1,9]];var c=[["ya",-1,1],["ye",-1,1],["yan",-1,1],["yen",-1,1],["yeron",-1,1],["yendo",-1,1],["yo",-1,1],["yas",-1,1],["yes",-1,1],["yais",-1,1],["yamos",-1,1],["yó",-1,1]];var l=[["aba",-1,2],["ada",-1,2],["ida",-1,2],["ara",-1,2],["iera",-1,2],["ía",-1,2],["aría",5,2],["ería",5,2],["iría",5,2],["ad",-1,2],["ed",-1,2],["id",-1,2],["ase",-1,2],["iese",-1,2],["aste",-1,2],["iste",-1,2],["an",-1,2],["aban",16,2],["aran",16,2],["ieran",16,2],["ían",16,2],["arían",20,2],["erían",20,2],["irían",20,2],["en",-1,1],["asen",24,2],["iesen",24,2],["aron",-1,2],["ieron",-1,2],["arán",-1,2],["erán",-1,2],["irán",-1,2],["ado",-1,2],["ido",-1,2],["ando",-1,2],["iendo",-1,2],["ar",-1,2],["er",-1,2],["ir",-1,2],["as",-1,2],["abas",39,2],["adas",39,2],["idas",39,2],["aras",39,2],["ieras",39,2],["ías",39,2],["arías",45,2],["erías",45,2],["irías",45,2],["es",-1,1],["ases",49,2],["ieses",49,2],["abais",-1,2],["arais",-1,2],["ierais",-1,2],["íais",-1,2],["aríais",55,2],["eríais",55,2],["iríais",55,2],["aseis",-1,2],["ieseis",-1,2],["asteis",-1,2],["isteis",-1,2],["áis",-1,2],["éis",-1,1],["aréis",64,2],["eréis",64,2],["iréis",64,2],["ados",-1,2],["idos",-1,2],["amos",-1,2],["ábamos",70,2],["áramos",70,2],["iéramos",70,2],["íamos",70,2],["aríamos",74,2],["eríamos",74,2],["iríamos",74,2],["emos",-1,1],["aremos",78,2],["eremos",78,2],["iremos",78,2],["ásemos",78,2],["iésemos",78,2],["imos",-1,2],["arás",-1,2],["erás",-1,2],["irás",-1,2],["ís",-1,2],["ará",-1,2],["erá",-1,2],["irá",-1,2],["aré",-1,2],["eré",-1,2],["iré",-1,2],["ió",-1,2]];var f=[["a",-1,1],["e",-1,2],["o",-1,1],["os",-1,1],["á",-1,1],["é",-1,2],["í",-1,1],["ó",-1,1]];var n=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10];var b=0;var m=0;var k=0;function _(){k=r.limit;m=r.limit;b=r.limit;var e=r.cursor;r:{e:{var i=r.cursor;i:{if(!r.in_grouping(n,97,252)){break i}a:{var a=r.cursor;s:{if(!r.out_grouping(n,97,252)){break s}u:while(true){o:{if(!r.in_grouping(n,97,252)){break o}break u}if(r.cursor>=r.limit){break s}r.cursor++}break a}r.cursor=a;if(!r.in_grouping(n,97,252)){break i}s:while(true){u:{if(!r.out_grouping(n,97,252)){break u}break s}if(r.cursor>=r.limit){break i}r.cursor++}}break e}r.cursor=i;if(!r.out_grouping(n,97,252)){break r}i:{var s=r.cursor;a:{if(!r.out_grouping(n,97,252)){break a}s:while(true){u:{if(!r.in_grouping(n,97,252)){break u}break s}if(r.cursor>=r.limit){break a}r.cursor++}break i}r.cursor=s;if(!r.in_grouping(n,97,252)){break r}if(r.cursor>=r.limit){break r}r.cursor++}}k=r.cursor}r.cursor=e;var u=r.cursor;r:{e:while(true){i:{if(!r.in_grouping(n,97,252)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(n,97,252)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}m=r.cursor;e:while(true){i:{if(!r.in_grouping(n,97,252)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(n,97,252)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}b=r.cursor}r.cursor=u;return true}function d(){var i;while(true){var a=r.cursor;r:{r.bra=r.cursor;i=r.find_among(e);if(i==0){break r}r.ket=r.cursor;switch(i){case 1:if(!r.slice_from("a")){return false}break;case 2:if(!r.slice_from("e")){return false}break;case 3:if(!r.slice_from("i")){return false}break;case 4:if(!r.slice_from("o")){return false}break;case 5:if(!r.slice_from("u")){return false}break;case 6:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=a;break}return true}function v(){if(!(k<=r.cursor)){return false}return true}function g(){if(!(m<=r.cursor)){return false}return true}function w(){if(!(b<=r.cursor)){return false}return true}function h(){var e;r.ket=r.cursor;if(r.find_among_b(i)==0){return false}r.bra=r.cursor;e=r.find_among_b(a);if(e==0){return false}if(!v()){return false}switch(e){case 1:r.bra=r.cursor;if(!r.slice_from("iendo")){return false}break;case 2:r.bra=r.cursor;if(!r.slice_from("ando")){return false}break;case 3:r.bra=r.cursor;if(!r.slice_from("ar")){return false}break;case 4:r.bra=r.cursor;if(!r.slice_from("er")){return false}break;case 5:r.bra=r.cursor;if(!r.slice_from("ir")){return false}break;case 6:if(!r.slice_del()){return false}break;case 7:if(!r.eq_s_b("u")){return false}if(!r.slice_del()){return false}break}return true}function p(){var e;r.ket=r.cursor;e=r.find_among_b(t);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:if(!w()){return false}if(!r.slice_del()){return false}break;case 2:if(!w()){return false}if(!r.slice_del()){return false}var i=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("ic")){r.cursor=r.limit-i;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-i;break r}if(!r.slice_del()){return false}}break;case 3:if(!w()){return false}if(!r.slice_from("log")){return false}break;case 4:if(!w()){return false}if(!r.slice_from("u")){return false}break;case 5:if(!w()){return false}if(!r.slice_from("ente")){return false}break;case 6:if(!g()){return false}if(!r.slice_del()){return false}var a=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(s);if(e==0){r.cursor=r.limit-a;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-a;break r}if(!r.slice_del()){return false}switch(e){case 1:r.ket=r.cursor;if(!r.eq_s_b("at")){r.cursor=r.limit-a;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-a;break r}if(!r.slice_del()){return false}break}}break;case 7:if(!w()){return false}if(!r.slice_del()){return false}var c=r.limit-r.cursor;r:{r.ket=r.cursor;if(r.find_among_b(u)==0){r.cursor=r.limit-c;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-c;break r}if(!r.slice_del()){return false}}break;case 8:if(!w()){return false}if(!r.slice_del()){return false}var l=r.limit-r.cursor;r:{r.ket=r.cursor;if(r.find_among_b(o)==0){r.cursor=r.limit-l;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-l;break r}if(!r.slice_del()){return false}}break;case 9:if(!w()){return false}if(!r.slice_del()){return false}var f=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("at")){r.cursor=r.limit-f;break r}r.bra=r.cursor;if(!w()){r.cursor=r.limit-f;break r}if(!r.slice_del()){return false}}break}return true}function y(){if(r.cursor<k){return false}var e=r.limit_backward;r.limit_backward=k;r.ket=r.cursor;if(r.find_among_b(c)==0){r.limit_backward=e;return false}r.bra=r.cursor;r.limit_backward=e;if(!r.eq_s_b("u")){return false}if(!r.slice_del()){return false}return true}function q(){var e;if(r.cursor<k){return false}var i=r.limit_backward;r.limit_backward=k;r.ket=r.cursor;e=r.find_among_b(l);if(e==0){r.limit_backward=i;return false}r.bra=r.cursor;r.limit_backward=i;switch(e){case 1:var a=r.limit-r.cursor;r:{if(!r.eq_s_b("u")){r.cursor=r.limit-a;break r}var s=r.limit-r.cursor;if(!r.eq_s_b("g")){r.cursor=r.limit-a;break r}r.cursor=r.limit-s}r.bra=r.cursor;if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}break}return true}function S(){var e;r.ket=r.cursor;e=r.find_among_b(f);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:if(!v()){return false}if(!r.slice_del()){return false}break;case 2:if(!v()){return false}if(!r.slice_del()){return false}var i=r.limit-r.cursor;r:{r.ket=r.cursor;if(!r.eq_s_b("u")){r.cursor=r.limit-i;break r}r.bra=r.cursor;var a=r.limit-r.cursor;if(!r.eq_s_b("g")){r.cursor=r.limit-i;break r}r.cursor=r.limit-a;if(!v()){r.cursor=r.limit-i;break r}if(!r.slice_del()){return false}}break}return true}this.stem=function(){_();r.limit_backward=r.cursor;r.cursor=r.limit;var e=r.limit-r.cursor;h();r.cursor=r.limit-e;var i=r.limit-r.cursor;r:{e:{var a=r.limit-r.cursor;i:{if(!p()){break i}break e}r.cursor=r.limit-a;i:{if(!y()){break i}break e}r.cursor=r.limit-a;if(!q()){break r}}}r.cursor=r.limit-i;var s=r.limit-r.cursor;S();r.cursor=r.limit-s;r.cursor=r.limit_backward;var u=r.cursor;d();r.cursor=u;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/swedish-stemmer.js b/sphinx/search/minified-js/swedish-stemmer.js
new file mode 100644
index 0000000..b975f54
--- /dev/null
+++ b/sphinx/search/minified-js/swedish-stemmer.js
@@ -0,0 +1 @@
+SwedishStemmer=function(){var r=new BaseStemmer;var e=[["a",-1,1],["arna",0,1],["erna",0,1],["heterna",2,1],["orna",0,1],["ad",-1,1],["e",-1,1],["ade",6,1],["ande",6,1],["arne",6,1],["are",6,1],["aste",6,1],["en",-1,1],["anden",12,1],["aren",12,1],["heten",12,1],["ern",-1,1],["ar",-1,1],["er",-1,1],["heter",18,1],["or",-1,1],["s",-1,2],["as",21,1],["arnas",22,1],["ernas",22,1],["ornas",22,1],["es",21,1],["ades",26,1],["andes",26,1],["ens",21,1],["arens",29,1],["hetens",29,1],["erns",21,1],["at",-1,1],["andet",-1,1],["het",-1,1],["ast",-1,1]];var a=[["dd",-1,-1],["gd",-1,-1],["nn",-1,-1],["dt",-1,-1],["gt",-1,-1],["kt",-1,-1],["tt",-1,-1]];var i=[["ig",-1,1],["lig",0,1],["els",-1,1],["fullt",-1,3],["löst",-1,2]];var t=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32];var s=[119,127,149];var u=0;var n=0;function c(){n=r.limit;var e=r.cursor;{var a=r.cursor+3;if(a>r.limit){return false}r.cursor=a}u=r.cursor;r.cursor=e;r:while(true){var i=r.cursor;e:{if(!r.in_grouping(t,97,246)){break e}r.cursor=i;break r}r.cursor=i;if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){e:{if(!r.out_grouping(t,97,246)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}n=r.cursor;r:{if(!(n<u)){break r}n=u}return true}function l(){var a;if(r.cursor<n){return false}var i=r.limit_backward;r.limit_backward=n;r.ket=r.cursor;a=r.find_among_b(e);if(a==0){r.limit_backward=i;return false}r.bra=r.cursor;r.limit_backward=i;switch(a){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.in_grouping_b(s,98,121)){return false}if(!r.slice_del()){return false}break}return true}function o(){if(r.cursor<n){return false}var e=r.limit_backward;r.limit_backward=n;var i=r.limit-r.cursor;if(r.find_among_b(a)==0){r.limit_backward=e;return false}r.cursor=r.limit-i;r.ket=r.cursor;if(r.cursor<=r.limit_backward){r.limit_backward=e;return false}r.cursor--;r.bra=r.cursor;if(!r.slice_del()){return false}r.limit_backward=e;return true}function f(){var e;if(r.cursor<n){return false}var a=r.limit_backward;r.limit_backward=n;r.ket=r.cursor;e=r.find_among_b(i);if(e==0){r.limit_backward=a;return false}r.bra=r.cursor;switch(e){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.slice_from("lös")){return false}break;case 3:if(!r.slice_from("full")){return false}break}r.limit_backward=a;return true}this.stem=function(){var e=r.cursor;c();r.cursor=e;r.limit_backward=r.cursor;r.cursor=r.limit;var a=r.limit-r.cursor;l();r.cursor=r.limit-a;var i=r.limit-r.cursor;o();r.cursor=r.limit-i;var t=r.limit-r.cursor;f();r.cursor=r.limit-t;r.cursor=r.limit_backward;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/minified-js/turkish-stemmer.js b/sphinx/search/minified-js/turkish-stemmer.js
new file mode 100644
index 0000000..4c0a699
--- /dev/null
+++ b/sphinx/search/minified-js/turkish-stemmer.js
@@ -0,0 +1 @@
+TurkishStemmer=function(){var r=new BaseStemmer;var i=[["m",-1,-1],["n",-1,-1],["miz",-1,-1],["niz",-1,-1],["muz",-1,-1],["nuz",-1,-1],["müz",-1,-1],["nüz",-1,-1],["mız",-1,-1],["nız",-1,-1]];var e=[["leri",-1,-1],["ları",-1,-1]];var u=[["ni",-1,-1],["nu",-1,-1],["nü",-1,-1],["nı",-1,-1]];var a=[["in",-1,-1],["un",-1,-1],["ün",-1,-1],["ın",-1,-1]];var s=[["a",-1,-1],["e",-1,-1]];var t=[["na",-1,-1],["ne",-1,-1]];var l=[["da",-1,-1],["ta",-1,-1],["de",-1,-1],["te",-1,-1]];var c=[["nda",-1,-1],["nde",-1,-1]];var o=[["dan",-1,-1],["tan",-1,-1],["den",-1,-1],["ten",-1,-1]];var f=[["ndan",-1,-1],["nden",-1,-1]];var n=[["la",-1,-1],["le",-1,-1]];var b=[["ca",-1,-1],["ce",-1,-1]];var m=[["im",-1,-1],["um",-1,-1],["üm",-1,-1],["ım",-1,-1]];var k=[["sin",-1,-1],["sun",-1,-1],["sün",-1,-1],["sın",-1,-1]];var _=[["iz",-1,-1],["uz",-1,-1],["üz",-1,-1],["ız",-1,-1]];var v=[["siniz",-1,-1],["sunuz",-1,-1],["sünüz",-1,-1],["sınız",-1,-1]];var d=[["lar",-1,-1],["ler",-1,-1]];var g=[["niz",-1,-1],["nuz",-1,-1],["nüz",-1,-1],["nız",-1,-1]];var w=[["dir",-1,-1],["tir",-1,-1],["dur",-1,-1],["tur",-1,-1],["dür",-1,-1],["tür",-1,-1],["dır",-1,-1],["tır",-1,-1]];var q=[["casına",-1,-1],["cesine",-1,-1]];var p=[["di",-1,-1],["ti",-1,-1],["dik",-1,-1],["tik",-1,-1],["duk",-1,-1],["tuk",-1,-1],["dük",-1,-1],["tük",-1,-1],["dık",-1,-1],["tık",-1,-1],["dim",-1,-1],["tim",-1,-1],["dum",-1,-1],["tum",-1,-1],["düm",-1,-1],["tüm",-1,-1],["dım",-1,-1],["tım",-1,-1],["din",-1,-1],["tin",-1,-1],["dun",-1,-1],["tun",-1,-1],["dün",-1,-1],["tün",-1,-1],["dın",-1,-1],["tın",-1,-1],["du",-1,-1],["tu",-1,-1],["dü",-1,-1],["tü",-1,-1],["dı",-1,-1],["tı",-1,-1]];var h=[["sa",-1,-1],["se",-1,-1],["sak",-1,-1],["sek",-1,-1],["sam",-1,-1],["sem",-1,-1],["san",-1,-1],["sen",-1,-1]];var z=[["miş",-1,-1],["muş",-1,-1],["müş",-1,-1],["mış",-1,-1]];var y=[["b",-1,1],["c",-1,2],["d",-1,3],["ğ",-1,4]];var C=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1];var S=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1];var B=[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1];var T=[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130];var W=[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1];var j=[17];var x=[65];var A=[65];var D=false;function E(){var i=r.limit-r.cursor;r:while(true){var e=r.limit-r.cursor;i:{if(!r.in_grouping_b(C,97,305)){break i}r.cursor=r.limit-e;break r}r.cursor=r.limit-e;if(r.cursor<=r.limit_backward){return false}r.cursor--}r:{var u=r.limit-r.cursor;i:{if(!r.eq_s_b("a")){break i}e:while(true){var a=r.limit-r.cursor;u:{if(!r.in_grouping_b(B,97,305)){break u}r.cursor=r.limit-a;break e}r.cursor=r.limit-a;if(r.cursor<=r.limit_backward){break i}r.cursor--}break r}r.cursor=r.limit-u;i:{if(!r.eq_s_b("e")){break i}e:while(true){var s=r.limit-r.cursor;u:{if(!r.in_grouping_b(T,101,252)){break u}r.cursor=r.limit-s;break e}r.cursor=r.limit-s;if(r.cursor<=r.limit_backward){break i}r.cursor--}break r}r.cursor=r.limit-u;i:{if(!r.eq_s_b("ı")){break i}e:while(true){var t=r.limit-r.cursor;u:{if(!r.in_grouping_b(W,97,305)){break u}r.cursor=r.limit-t;break e}r.cursor=r.limit-t;if(r.cursor<=r.limit_backward){break i}r.cursor--}break r}r.cursor=r.limit-u;i:{if(!r.eq_s_b("i")){break i}e:while(true){var l=r.limit-r.cursor;u:{if(!r.in_grouping_b(j,101,105)){break u}r.cursor=r.limit-l;break e}r.cursor=r.limit-l;if(r.cursor<=r.limit_backward){break i}r.cursor--}break r}r.cursor=r.limit-u;i:{if(!r.eq_s_b("o")){break i}e:while(true){var c=r.limit-r.cursor;u:{if(!r.in_grouping_b(x,111,117)){break u}r.cursor=r.limit-c;break e}r.cursor=r.limit-c;if(r.cursor<=r.limit_backward){break i}r.cursor--}break r}r.cursor=r.limit-u;i:{if(!r.eq_s_b("ö")){break i}e:while(true){var o=r.limit-r.cursor;u:{if(!r.in_grouping_b(A,246,252)){break u}r.cursor=r.limit-o;break e}r.cursor=r.limit-o;if(r.cursor<=r.limit_backward){break i}r.cursor--}break r}r.cursor=r.limit-u;i:{if(!r.eq_s_b("u")){break i}e:while(true){var f=r.limit-r.cursor;u:{if(!r.in_grouping_b(x,111,117)){break u}r.cursor=r.limit-f;break e}r.cursor=r.limit-f;if(r.cursor<=r.limit_backward){break i}r.cursor--}break r}r.cursor=r.limit-u;if(!r.eq_s_b("ü")){return false}i:while(true){var n=r.limit-r.cursor;e:{if(!r.in_grouping_b(A,246,252)){break e}r.cursor=r.limit-n;break i}r.cursor=r.limit-n;if(r.cursor<=r.limit_backward){return false}r.cursor--}}r.cursor=r.limit-i;return true}function F(){r:{var i=r.limit-r.cursor;i:{if(!r.eq_s_b("n")){break i}var e=r.limit-r.cursor;if(!r.in_grouping_b(C,97,305)){break i}r.cursor=r.limit-e;break r}r.cursor=r.limit-i;{var u=r.limit-r.cursor;i:{var a=r.limit-r.cursor;if(!r.eq_s_b("n")){break i}r.cursor=r.limit-a;return false}r.cursor=r.limit-u}var s=r.limit-r.cursor;if(r.cursor<=r.limit_backward){return false}r.cursor--;if(!r.in_grouping_b(C,97,305)){return false}r.cursor=r.limit-s}return true}function G(){r:{var i=r.limit-r.cursor;i:{if(!r.eq_s_b("s")){break i}var e=r.limit-r.cursor;if(!r.in_grouping_b(C,97,305)){break i}r.cursor=r.limit-e;break r}r.cursor=r.limit-i;{var u=r.limit-r.cursor;i:{var a=r.limit-r.cursor;if(!r.eq_s_b("s")){break i}r.cursor=r.limit-a;return false}r.cursor=r.limit-u}var s=r.limit-r.cursor;if(r.cursor<=r.limit_backward){return false}r.cursor--;if(!r.in_grouping_b(C,97,305)){return false}r.cursor=r.limit-s}return true}function H(){r:{var i=r.limit-r.cursor;i:{if(!r.eq_s_b("y")){break i}var e=r.limit-r.cursor;if(!r.in_grouping_b(C,97,305)){break i}r.cursor=r.limit-e;break r}r.cursor=r.limit-i;{var u=r.limit-r.cursor;i:{var a=r.limit-r.cursor;if(!r.eq_s_b("y")){break i}r.cursor=r.limit-a;return false}r.cursor=r.limit-u}var s=r.limit-r.cursor;if(r.cursor<=r.limit_backward){return false}r.cursor--;if(!r.in_grouping_b(C,97,305)){return false}r.cursor=r.limit-s}return true}function I(){r:{var i=r.limit-r.cursor;i:{if(!r.in_grouping_b(S,105,305)){break i}var e=r.limit-r.cursor;if(!r.out_grouping_b(C,97,305)){break i}r.cursor=r.limit-e;break r}r.cursor=r.limit-i;{var u=r.limit-r.cursor;i:{var a=r.limit-r.cursor;if(!r.in_grouping_b(S,105,305)){break i}r.cursor=r.limit-a;return false}r.cursor=r.limit-u}var s=r.limit-r.cursor;if(r.cursor<=r.limit_backward){return false}r.cursor--;if(!r.out_grouping_b(C,97,305)){return false}r.cursor=r.limit-s}return true}function J(){if(r.find_among_b(i)==0){return false}if(!I()){return false}return true}function K(){if(!E()){return false}if(!r.in_grouping_b(S,105,305)){return false}if(!G()){return false}return true}function L(){if(r.find_among_b(e)==0){return false}return true}function M(){if(!E()){return false}if(!r.in_grouping_b(S,105,305)){return false}if(!H()){return false}return true}function N(){if(!E()){return false}if(r.find_among_b(u)==0){return false}return true}function O(){if(!E()){return false}if(r.find_among_b(a)==0){return false}if(!F()){return false}return true}function P(){if(!E()){return false}if(r.find_among_b(s)==0){return false}if(!H()){return false}return true}function Q(){if(!E()){return false}if(r.find_among_b(t)==0){return false}return true}function R(){if(!E()){return false}if(r.find_among_b(l)==0){return false}return true}function U(){if(!E()){return false}if(r.find_among_b(c)==0){return false}return true}function V(){if(!E()){return false}if(r.find_among_b(o)==0){return false}return true}function X(){if(!E()){return false}if(r.find_among_b(f)==0){return false}return true}function Y(){if(!E()){return false}if(r.find_among_b(n)==0){return false}if(!H()){return false}return true}function Z(){if(!r.eq_s_b("ki")){return false}return true}function $(){if(!E()){return false}if(r.find_among_b(b)==0){return false}if(!F()){return false}return true}function rr(){if(!E()){return false}if(r.find_among_b(m)==0){return false}if(!H()){return false}return true}function ir(){if(!E()){return false}if(r.find_among_b(k)==0){return false}return true}function er(){if(!E()){return false}if(r.find_among_b(_)==0){return false}if(!H()){return false}return true}function ur(){if(r.find_among_b(v)==0){return false}return true}function ar(){if(!E()){return false}if(r.find_among_b(d)==0){return false}return true}function sr(){if(!E()){return false}if(r.find_among_b(g)==0){return false}return true}function tr(){if(!E()){return false}if(r.find_among_b(w)==0){return false}return true}function lr(){if(r.find_among_b(q)==0){return false}return true}function cr(){if(!E()){return false}if(r.find_among_b(p)==0){return false}if(!H()){return false}return true}function or(){if(r.find_among_b(h)==0){return false}if(!H()){return false}return true}function fr(){if(!E()){return false}if(r.find_among_b(z)==0){return false}if(!H()){return false}return true}function nr(){if(!r.eq_s_b("ken")){return false}if(!H()){return false}return true}function br(){r.ket=r.cursor;D=true;r:{var i=r.limit-r.cursor;i:{e:{var e=r.limit-r.cursor;u:{if(!fr()){break u}break e}r.cursor=r.limit-e;u:{if(!cr()){break u}break e}r.cursor=r.limit-e;u:{if(!or()){break u}break e}r.cursor=r.limit-e;if(!nr()){break i}}break r}r.cursor=r.limit-i;i:{if(!lr()){break i}e:{var u=r.limit-r.cursor;u:{if(!ur()){break u}break e}r.cursor=r.limit-u;u:{if(!ar()){break u}break e}r.cursor=r.limit-u;u:{if(!rr()){break u}break e}r.cursor=r.limit-u;u:{if(!ir()){break u}break e}r.cursor=r.limit-u;u:{if(!er()){break u}break e}r.cursor=r.limit-u}if(!fr()){break i}break r}r.cursor=r.limit-i;i:{if(!ar()){break i}r.bra=r.cursor;if(!r.slice_del()){return false}var a=r.limit-r.cursor;e:{r.ket=r.cursor;u:{var s=r.limit-r.cursor;a:{if(!tr()){break a}break u}r.cursor=r.limit-s;a:{if(!cr()){break a}break u}r.cursor=r.limit-s;a:{if(!or()){break a}break u}r.cursor=r.limit-s;if(!fr()){r.cursor=r.limit-a;break e}}}D=false;break r}r.cursor=r.limit-i;i:{if(!sr()){break i}e:{var t=r.limit-r.cursor;u:{if(!cr()){break u}break e}r.cursor=r.limit-t;if(!or()){break i}}break r}r.cursor=r.limit-i;i:{e:{var l=r.limit-r.cursor;u:{if(!ur()){break u}break e}r.cursor=r.limit-l;u:{if(!er()){break u}break e}r.cursor=r.limit-l;u:{if(!ir()){break u}break e}r.cursor=r.limit-l;if(!rr()){break i}}r.bra=r.cursor;if(!r.slice_del()){return false}var c=r.limit-r.cursor;e:{r.ket=r.cursor;if(!fr()){r.cursor=r.limit-c;break e}}break r}r.cursor=r.limit-i;if(!tr()){return false}r.bra=r.cursor;if(!r.slice_del()){return false}var o=r.limit-r.cursor;i:{r.ket=r.cursor;e:{var f=r.limit-r.cursor;u:{if(!ur()){break u}break e}r.cursor=r.limit-f;u:{if(!ar()){break u}break e}r.cursor=r.limit-f;u:{if(!rr()){break u}break e}r.cursor=r.limit-f;u:{if(!ir()){break u}break e}r.cursor=r.limit-f;u:{if(!er()){break u}break e}r.cursor=r.limit-f}if(!fr()){r.cursor=r.limit-o;break i}}}r.bra=r.cursor;if(!r.slice_del()){return false}return true}function mr(){r.ket=r.cursor;if(!Z()){return false}r:{var i=r.limit-r.cursor;i:{if(!R()){break i}r.bra=r.cursor;if(!r.slice_del()){return false}var e=r.limit-r.cursor;e:{r.ket=r.cursor;u:{var u=r.limit-r.cursor;a:{if(!ar()){break a}r.bra=r.cursor;if(!r.slice_del()){return false}var a=r.limit-r.cursor;s:{if(!mr()){r.cursor=r.limit-a;break s}}break u}r.cursor=r.limit-u;if(!J()){r.cursor=r.limit-e;break e}r.bra=r.cursor;if(!r.slice_del()){return false}var s=r.limit-r.cursor;a:{r.ket=r.cursor;if(!ar()){r.cursor=r.limit-s;break a}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){r.cursor=r.limit-s;break a}}}}break r}r.cursor=r.limit-i;i:{if(!O()){break i}r.bra=r.cursor;if(!r.slice_del()){return false}var t=r.limit-r.cursor;e:{r.ket=r.cursor;u:{var l=r.limit-r.cursor;a:{if(!L()){break a}r.bra=r.cursor;if(!r.slice_del()){return false}break u}r.cursor=r.limit-l;a:{r.ket=r.cursor;s:{var c=r.limit-r.cursor;t:{if(!J()){break t}break s}r.cursor=r.limit-c;if(!K()){break a}}r.bra=r.cursor;if(!r.slice_del()){return false}var o=r.limit-r.cursor;s:{r.ket=r.cursor;if(!ar()){r.cursor=r.limit-o;break s}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){r.cursor=r.limit-o;break s}}break u}r.cursor=r.limit-l;if(!mr()){r.cursor=r.limit-t;break e}}}break r}r.cursor=r.limit-i;if(!U()){return false}i:{var f=r.limit-r.cursor;e:{if(!L()){break e}r.bra=r.cursor;if(!r.slice_del()){return false}break i}r.cursor=r.limit-f;e:{if(!K()){break e}r.bra=r.cursor;if(!r.slice_del()){return false}var n=r.limit-r.cursor;u:{r.ket=r.cursor;if(!ar()){r.cursor=r.limit-n;break u}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){r.cursor=r.limit-n;break u}}break i}r.cursor=r.limit-f;if(!mr()){return false}}}return true}function kr(){r:{var i=r.limit-r.cursor;i:{r.ket=r.cursor;if(!ar()){break i}r.bra=r.cursor;if(!r.slice_del()){return false}var e=r.limit-r.cursor;e:{if(!mr()){r.cursor=r.limit-e;break e}}break r}r.cursor=r.limit-i;i:{r.ket=r.cursor;if(!$()){break i}r.bra=r.cursor;if(!r.slice_del()){return false}var u=r.limit-r.cursor;e:{u:{var a=r.limit-r.cursor;a:{r.ket=r.cursor;if(!L()){break a}r.bra=r.cursor;if(!r.slice_del()){return false}break u}r.cursor=r.limit-a;a:{r.ket=r.cursor;s:{var s=r.limit-r.cursor;t:{if(!J()){break t}break s}r.cursor=r.limit-s;if(!K()){break a}}r.bra=r.cursor;if(!r.slice_del()){return false}var t=r.limit-r.cursor;s:{r.ket=r.cursor;if(!ar()){r.cursor=r.limit-t;break s}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){r.cursor=r.limit-t;break s}}break u}r.cursor=r.limit-a;r.ket=r.cursor;if(!ar()){r.cursor=r.limit-u;break e}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){r.cursor=r.limit-u;break e}}}break r}r.cursor=r.limit-i;i:{r.ket=r.cursor;e:{var l=r.limit-r.cursor;u:{if(!U()){break u}break e}r.cursor=r.limit-l;if(!Q()){break i}}e:{var c=r.limit-r.cursor;u:{if(!L()){break u}r.bra=r.cursor;if(!r.slice_del()){return false}break e}r.cursor=r.limit-c;u:{if(!K()){break u}r.bra=r.cursor;if(!r.slice_del()){return false}var o=r.limit-r.cursor;a:{r.ket=r.cursor;if(!ar()){r.cursor=r.limit-o;break a}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){r.cursor=r.limit-o;break a}}break e}r.cursor=r.limit-c;if(!mr()){break i}}break r}r.cursor=r.limit-i;i:{r.ket=r.cursor;e:{var f=r.limit-r.cursor;u:{if(!X()){break u}break e}r.cursor=r.limit-f;if(!N()){break i}}e:{var n=r.limit-r.cursor;u:{if(!K()){break u}r.bra=r.cursor;if(!r.slice_del()){return false}var b=r.limit-r.cursor;a:{r.ket=r.cursor;if(!ar()){r.cursor=r.limit-b;break a}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){r.cursor=r.limit-b;break a}}break e}r.cursor=r.limit-n;if(!L()){break i}}break r}r.cursor=r.limit-i;i:{r.ket=r.cursor;if(!V()){break i}r.bra=r.cursor;if(!r.slice_del()){return false}var m=r.limit-r.cursor;e:{r.ket=r.cursor;u:{var k=r.limit-r.cursor;a:{if(!J()){break a}r.bra=r.cursor;if(!r.slice_del()){return false}var _=r.limit-r.cursor;s:{r.ket=r.cursor;if(!ar()){r.cursor=r.limit-_;break s}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){r.cursor=r.limit-_;break s}}break u}r.cursor=r.limit-k;a:{if(!ar()){break a}r.bra=r.cursor;if(!r.slice_del()){return false}var v=r.limit-r.cursor;s:{if(!mr()){r.cursor=r.limit-v;break s}}break u}r.cursor=r.limit-k;if(!mr()){r.cursor=r.limit-m;break e}}}break r}r.cursor=r.limit-i;i:{r.ket=r.cursor;e:{var d=r.limit-r.cursor;u:{if(!O()){break u}break e}r.cursor=r.limit-d;if(!Y()){break i}}r.bra=r.cursor;if(!r.slice_del()){return false}var g=r.limit-r.cursor;e:{u:{var w=r.limit-r.cursor;a:{r.ket=r.cursor;if(!ar()){break a}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){break a}break u}r.cursor=r.limit-w;a:{r.ket=r.cursor;s:{var q=r.limit-r.cursor;t:{if(!J()){break t}break s}r.cursor=r.limit-q;if(!K()){break a}}r.bra=r.cursor;if(!r.slice_del()){return false}var p=r.limit-r.cursor;s:{r.ket=r.cursor;if(!ar()){r.cursor=r.limit-p;break s}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){r.cursor=r.limit-p;break s}}break u}r.cursor=r.limit-w;if(!mr()){r.cursor=r.limit-g;break e}}}break r}r.cursor=r.limit-i;i:{r.ket=r.cursor;if(!L()){break i}r.bra=r.cursor;if(!r.slice_del()){return false}break r}r.cursor=r.limit-i;i:{if(!mr()){break i}break r}r.cursor=r.limit-i;i:{r.ket=r.cursor;e:{var h=r.limit-r.cursor;u:{if(!R()){break u}break e}r.cursor=r.limit-h;u:{if(!M()){break u}break e}r.cursor=r.limit-h;if(!P()){break i}}r.bra=r.cursor;if(!r.slice_del()){return false}var z=r.limit-r.cursor;e:{r.ket=r.cursor;u:{var y=r.limit-r.cursor;a:{if(!J()){break a}r.bra=r.cursor;if(!r.slice_del()){return false}var C=r.limit-r.cursor;s:{r.ket=r.cursor;if(!ar()){r.cursor=r.limit-C;break s}}break u}r.cursor=r.limit-y;if(!ar()){r.cursor=r.limit-z;break e}}r.bra=r.cursor;if(!r.slice_del()){return false}r.ket=r.cursor;if(!mr()){r.cursor=r.limit-z;break e}}break r}r.cursor=r.limit-i;r.ket=r.cursor;i:{var S=r.limit-r.cursor;e:{if(!J()){break e}break i}r.cursor=r.limit-S;if(!K()){return false}}r.bra=r.cursor;if(!r.slice_del()){return false}var B=r.limit-r.cursor;i:{r.ket=r.cursor;if(!ar()){r.cursor=r.limit-B;break i}r.bra=r.cursor;if(!r.slice_del()){return false}if(!mr()){r.cursor=r.limit-B;break i}}}return true}function _r(){var i;r.ket=r.cursor;i=r.find_among_b(y);if(i==0){return false}r.bra=r.cursor;switch(i){case 1:if(!r.slice_from("p")){return false}break;case 2:if(!r.slice_from("ç")){return false}break;case 3:if(!r.slice_from("t")){return false}break;case 4:if(!r.slice_from("k")){return false}break}return true}function vr(){var i=r.limit-r.cursor;r:{var e=r.limit-r.cursor;i:{if(!r.eq_s_b("d")){break i}break r}r.cursor=r.limit-e;if(!r.eq_s_b("g")){return false}}r.cursor=r.limit-i;r:{var u=r.limit-r.cursor;i:{var a=r.limit-r.cursor;e:while(true){var s=r.limit-r.cursor;u:{if(!r.in_grouping_b(C,97,305)){break u}r.cursor=r.limit-s;break e}r.cursor=r.limit-s;if(r.cursor<=r.limit_backward){break i}r.cursor--}e:{var t=r.limit-r.cursor;u:{if(!r.eq_s_b("a")){break u}break e}r.cursor=r.limit-t;if(!r.eq_s_b("ı")){break i}}r.cursor=r.limit-a;{var l=r.cursor;r.insert(r.cursor,r.cursor,"ı");r.cursor=l}break r}r.cursor=r.limit-u;i:{var c=r.limit-r.cursor;e:while(true){var o=r.limit-r.cursor;u:{if(!r.in_grouping_b(C,97,305)){break u}r.cursor=r.limit-o;break e}r.cursor=r.limit-o;if(r.cursor<=r.limit_backward){break i}r.cursor--}e:{var f=r.limit-r.cursor;u:{if(!r.eq_s_b("e")){break u}break e}r.cursor=r.limit-f;if(!r.eq_s_b("i")){break i}}r.cursor=r.limit-c;{var n=r.cursor;r.insert(r.cursor,r.cursor,"i");r.cursor=n}break r}r.cursor=r.limit-u;i:{var b=r.limit-r.cursor;e:while(true){var m=r.limit-r.cursor;u:{if(!r.in_grouping_b(C,97,305)){break u}r.cursor=r.limit-m;break e}r.cursor=r.limit-m;if(r.cursor<=r.limit_backward){break i}r.cursor--}e:{var k=r.limit-r.cursor;u:{if(!r.eq_s_b("o")){break u}break e}r.cursor=r.limit-k;if(!r.eq_s_b("u")){break i}}r.cursor=r.limit-b;{var _=r.cursor;r.insert(r.cursor,r.cursor,"u");r.cursor=_}break r}r.cursor=r.limit-u;var v=r.limit-r.cursor;i:while(true){var d=r.limit-r.cursor;e:{if(!r.in_grouping_b(C,97,305)){break e}r.cursor=r.limit-d;break i}r.cursor=r.limit-d;if(r.cursor<=r.limit_backward){return false}r.cursor--}i:{var g=r.limit-r.cursor;e:{if(!r.eq_s_b("ö")){break e}break i}r.cursor=r.limit-g;if(!r.eq_s_b("ü")){return false}}r.cursor=r.limit-v;{var w=r.cursor;r.insert(r.cursor,r.cursor,"ü");r.cursor=w}}return true}function dr(){if(!r.eq_s_b("ad")){return false}var i=r.limit-r.cursor;r:{if(!r.eq_s_b("soy")){r.cursor=r.limit-i;break r}}if(r.cursor>r.limit_backward){return false}return true}function gr(){var i=r.cursor;{var e=2;while(true){var u=r.cursor;r:{i:while(true){e:{if(!r.in_grouping(C,97,305)){break e}break i}if(r.cursor>=r.limit){break r}r.cursor++}e--;continue}r.cursor=u;break}if(e>0){return false}}r.cursor=i;return true}function wr(){r.limit_backward=r.cursor;r.cursor=r.limit;{var i=r.limit-r.cursor;r:{if(!dr()){break r}return false}r.cursor=r.limit-i}var e=r.limit-r.cursor;vr();r.cursor=r.limit-e;var u=r.limit-r.cursor;_r();r.cursor=r.limit-u;r.cursor=r.limit_backward;return true}this.stem=function(){if(!gr()){return false}r.limit_backward=r.cursor;r.cursor=r.limit;var i=r.limit-r.cursor;br();r.cursor=r.limit-i;if(!D){return false}var e=r.limit-r.cursor;kr();r.cursor=r.limit-e;r.cursor=r.limit_backward;if(!wr()){return false}return true};this["stemWord"]=function(i){r.setCurrent(i);this.stem();return r.getCurrent()}}; \ No newline at end of file
diff --git a/sphinx/search/nl.py b/sphinx/search/nl.py
new file mode 100644
index 0000000..a610b12
--- /dev/null
+++ b/sphinx/search/nl.py
@@ -0,0 +1,127 @@
+"""Dutch search language: includes the JS porter stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+dutch_stopwords = parse_stop_word('''
+| source: http://snowball.tartarus.org/algorithms/dutch/stop.txt
+de | the
+en | and
+van | of, from
+ik | I, the ego
+te | (1) chez, at etc, (2) to, (3) too
+dat | that, which
+die | that, those, who, which
+in | in, inside
+een | a, an, one
+hij | he
+het | the, it
+niet | not, nothing, naught
+zijn | (1) to be, being, (2) his, one's, its
+is | is
+was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river
+op | on, upon, at, in, up, used up
+aan | on, upon, to (as dative)
+met | with, by
+als | like, such as, when
+voor | (1) before, in front of, (2) furrow
+had | had, past tense all persons sing. of 'hebben' (have)
+er | there
+maar | but, only
+om | round, about, for etc
+hem | him
+dan | then
+zou | should/would, past tense all persons sing. of 'zullen'
+of | or, whether, if
+wat | what, something, anything
+mijn | possessive and noun 'mine'
+men | people, 'one'
+dit | this
+zo | so, thus, in this way
+door | through by
+over | over, across
+ze | she, her, they, them
+zich | oneself
+bij | (1) a bee, (2) by, near, at
+ook | also, too
+tot | till, until
+je | you
+mij | me
+uit | out of, from
+der | Old Dutch form of 'van der' still found in surnames
+daar | (1) there, (2) because
+haar | (1) her, their, them, (2) hair
+naar | (1) unpleasant, unwell etc, (2) towards, (3) as
+heb | present first person sing. of 'to have'
+hoe | how, why
+heeft | present third person sing. of 'to have'
+hebben | 'to have' and various parts thereof
+deze | this
+u | you
+want | (1) for, (2) mitten, (3) rigging
+nog | yet, still
+zal | 'shall', first and third person sing. of verb 'zullen' (will)
+me | me
+zij | she, they
+nu | now
+ge | 'thou', still used in Belgium and south Netherlands
+geen | none
+omdat | because
+iets | something, somewhat
+worden | to become, grow, get
+toch | yet, still
+al | all, every, each
+waren | (1) 'were' (2) to wander, (3) wares, (3)
+veel | much, many
+meer | (1) more, (2) lake
+doen | to do, to make
+toen | then, when
+moet | noun 'spot/mote' and present form of 'to must'
+ben | (1) am, (2) 'are' in interrogative second person singular of 'to be'
+zonder | without
+kan | noun 'can' and present form of 'to be able'
+hun | their, them
+dus | so, consequently
+alles | all, everything, anything
+onder | under, beneath
+ja | yes, of course
+eens | once, one day
+hier | here
+wie | who
+werd | imperfect third person sing. of 'become'
+altijd | always
+doch | yet, but etc
+wordt | present third person sing. of 'become'
+wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans
+kunnen | to be able
+ons | us/our
+zelf | self
+tegen | against, towards, at
+na | after, near
+reeds | already
+wil | (1) present tense of 'want', (2) 'will', noun, (3) fender
+kon | could; past tense of 'to be able'
+niets | nothing
+uw | your
+iemand | somebody
+geweest | been; past participle of 'be'
+andere | other
+''')
+
+
+class SearchDutch(SearchLanguage):
+ lang = 'nl'
+ language_name = 'Dutch'
+ js_stemmer_rawcode = 'dutch-stemmer.js'
+ stopwords = dutch_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('dutch')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/no.py b/sphinx/search/no.py
new file mode 100644
index 0000000..a69380b
--- /dev/null
+++ b/sphinx/search/no.py
@@ -0,0 +1,202 @@
+"""Norwegian search language: includes the JS Norwegian stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+norwegian_stopwords = parse_stop_word('''
+| source: http://snowball.tartarus.org/algorithms/norwegian/stop.txt
+og | and
+i | in
+jeg | I
+det | it/this/that
+at | to (w. inf.)
+en | a/an
+et | a/an
+den | it/this/that
+til | to
+er | is/am/are
+som | who/that
+på | on
+de | they / you(formal)
+med | with
+han | he
+av | of
+ikke | not
+ikkje | not *
+der | there
+så | so
+var | was/were
+meg | me
+seg | you
+men | but
+ett | one
+har | have
+om | about
+vi | we
+min | my
+mitt | my
+ha | have
+hadde | had
+hun | she
+nå | now
+over | over
+da | when/as
+ved | by/know
+fra | from
+du | you
+ut | out
+sin | your
+dem | them
+oss | us
+opp | up
+man | you/one
+kan | can
+hans | his
+hvor | where
+eller | or
+hva | what
+skal | shall/must
+selv | self (reflective)
+sjøl | self (reflective)
+her | here
+alle | all
+vil | will
+bli | become
+ble | became
+blei | became *
+blitt | have become
+kunne | could
+inn | in
+når | when
+være | be
+kom | come
+noen | some
+noe | some
+ville | would
+dere | you
+som | who/which/that
+deres | their/theirs
+kun | only/just
+ja | yes
+etter | after
+ned | down
+skulle | should
+denne | this
+for | for/because
+deg | you
+si | hers/his
+sine | hers/his
+sitt | hers/his
+mot | against
+å | to
+meget | much
+hvorfor | why
+dette | this
+disse | these/those
+uten | without
+hvordan | how
+ingen | none
+din | your
+ditt | your
+blir | become
+samme | same
+hvilken | which
+hvilke | which (plural)
+sånn | such a
+inni | inside/within
+mellom | between
+vår | our
+hver | each
+hvem | who
+vors | us/ours
+hvis | whose
+både | both
+bare | only/just
+enn | than
+fordi | as/because
+før | before
+mange | many
+også | also
+slik | just
+vært | been
+være | to be
+båe | both *
+begge | both
+siden | since
+dykk | your *
+dykkar | yours *
+dei | they *
+deira | them *
+deires | theirs *
+deim | them *
+di | your (fem.) *
+då | as/when *
+eg | I *
+ein | a/an *
+eit | a/an *
+eitt | a/an *
+elles | or *
+honom | he *
+hjå | at *
+ho | she *
+hoe | she *
+henne | her
+hennar | her/hers
+hennes | hers
+hoss | how *
+hossen | how *
+ikkje | not *
+ingi | noone *
+inkje | noone *
+korleis | how *
+korso | how *
+kva | what/which *
+kvar | where *
+kvarhelst | where *
+kven | who/whom *
+kvi | why *
+kvifor | why *
+me | we *
+medan | while *
+mi | my *
+mine | my *
+mykje | much *
+no | now *
+nokon | some (masc./neut.) *
+noka | some (fem.) *
+nokor | some *
+noko | some *
+nokre | some *
+si | his/hers *
+sia | since *
+sidan | since *
+so | so *
+somt | some *
+somme | some *
+um | about*
+upp | up *
+vere | be *
+vore | was *
+verte | become *
+vort | become *
+varte | became *
+vart | became *
+''')
+
+
+class SearchNorwegian(SearchLanguage):
+ lang = 'no'
+ language_name = 'Norwegian'
+ js_stemmer_rawcode = 'norwegian-stemmer.js'
+ stopwords = norwegian_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('norwegian')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/non-minified-js/base-stemmer.js b/sphinx/search/non-minified-js/base-stemmer.js
new file mode 100644
index 0000000..ca6cca1
--- /dev/null
+++ b/sphinx/search/non-minified-js/base-stemmer.js
@@ -0,0 +1,294 @@
+/**@constructor*/
+BaseStemmer = function() {
+ this.setCurrent = function(value) {
+ this.current = value;
+ this.cursor = 0;
+ this.limit = this.current.length;
+ this.limit_backward = 0;
+ this.bra = this.cursor;
+ this.ket = this.limit;
+ };
+
+ this.getCurrent = function() {
+ return this.current;
+ };
+
+ this.copy_from = 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;
+ };
+
+ this.in_grouping = function(s, min, max) {
+ if (this.cursor >= this.limit) return false;
+ var 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;
+ };
+
+ this.in_grouping_b = function(s, min, max) {
+ if (this.cursor <= this.limit_backward) return false;
+ var 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;
+ };
+
+ this.out_grouping = function(s, min, max) {
+ if (this.cursor >= this.limit) return false;
+ var 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;
+ };
+
+ this.out_grouping_b = function(s, min, max) {
+ if (this.cursor <= this.limit_backward) return false;
+ var 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;
+ };
+
+ this.eq_s = function(s)
+ {
+ if (this.limit - this.cursor < s.length) return false;
+ if (this.current.slice(this.cursor, this.cursor + s.length) != s)
+ {
+ return false;
+ }
+ this.cursor += s.length;
+ return true;
+ };
+
+ this.eq_s_b = function(s)
+ {
+ if (this.cursor - this.limit_backward < s.length) return false;
+ if (this.current.slice(this.cursor - s.length, this.cursor) != s)
+ {
+ return false;
+ }
+ this.cursor -= s.length;
+ return true;
+ };
+
+ /** @return {number} */ this.find_among = function(v)
+ {
+ var i = 0;
+ var j = v.length;
+
+ var c = this.cursor;
+ var l = this.limit;
+
+ var common_i = 0;
+ var common_j = 0;
+
+ var first_key_inspected = false;
+
+ while (true)
+ {
+ var k = i + ((j - i) >>> 1);
+ var diff = 0;
+ var common = common_i < common_j ? common_i : common_j; // smaller
+ // w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional)
+ var w = v[k];
+ var i2;
+ for (i2 = common; i2 < w[0].length; i2++)
+ {
+ if (c + common == l)
+ {
+ diff = -1;
+ break;
+ }
+ diff = this.current.charCodeAt(c + common) - w[0].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; // v->s has been inspected
+ if (j == i) break; // only one item in v
+
+ // - but now we need to go round once more to get
+ // v->s inspected. This looks messy, but is actually
+ // the optimal approach.
+
+ if (first_key_inspected) break;
+ first_key_inspected = true;
+ }
+ }
+ do {
+ var w = v[i];
+ if (common_i >= w[0].length)
+ {
+ this.cursor = c + w[0].length;
+ if (w.length < 4) return w[2];
+ var res = w[3](this);
+ this.cursor = c + w[0].length;
+ if (res) return w[2];
+ }
+ i = w[1];
+ } while (i >= 0);
+ return 0;
+ };
+
+ // find_among_b is for backwards processing. Same comments apply
+ this.find_among_b = function(v)
+ {
+ var i = 0;
+ var j = v.length
+
+ var c = this.cursor;
+ var lb = this.limit_backward;
+
+ var common_i = 0;
+ var common_j = 0;
+
+ var first_key_inspected = false;
+
+ while (true)
+ {
+ var k = i + ((j - i) >> 1);
+ var diff = 0;
+ var common = common_i < common_j ? common_i : common_j;
+ var w = v[k];
+ var i2;
+ for (i2 = w[0].length - 1 - common; i2 >= 0; i2--)
+ {
+ if (c - common == lb)
+ {
+ diff = -1;
+ break;
+ }
+ diff = this.current.charCodeAt(c - 1 - common) - w[0].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;
+ }
+ }
+ do {
+ var w = v[i];
+ if (common_i >= w[0].length)
+ {
+ this.cursor = c - w[0].length;
+ if (w.length < 4) return w[2];
+ var res = w[3](this);
+ this.cursor = c - w[0].length;
+ if (res) return w[2];
+ }
+ i = w[1];
+ } while (i >= 0);
+ return 0;
+ };
+
+ /* to replace chars between c_bra and c_ket in this.current by the
+ * chars in s.
+ */
+ this.replace_s = function(c_bra, c_ket, s)
+ {
+ var adjustment = s.length - (c_ket - c_bra);
+ this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
+ this.limit += adjustment;
+ if (this.cursor >= c_ket) this.cursor += adjustment;
+ else if (this.cursor > c_bra) this.cursor = c_bra;
+ return adjustment;
+ };
+
+ this.slice_check = function()
+ {
+ if (this.bra < 0 ||
+ this.bra > this.ket ||
+ this.ket > this.limit ||
+ this.limit > this.current.length)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ this.slice_from = function(s)
+ {
+ var result = false;
+ if (this.slice_check())
+ {
+ this.replace_s(this.bra, this.ket, s);
+ result = true;
+ }
+ return result;
+ };
+
+ this.slice_del = function()
+ {
+ return this.slice_from("");
+ };
+
+ this.insert = function(c_bra, c_ket, s)
+ {
+ var adjustment = this.replace_s(c_bra, c_ket, s);
+ if (c_bra <= this.bra) this.bra += adjustment;
+ if (c_bra <= this.ket) this.ket += adjustment;
+ };
+
+ this.slice_to = function()
+ {
+ var result = '';
+ if (this.slice_check())
+ {
+ result = this.current.slice(this.bra, this.ket);
+ }
+ return result;
+ };
+
+ this.assign_to = function()
+ {
+ return this.current.slice(0, this.limit);
+ };
+};
diff --git a/sphinx/search/non-minified-js/danish-stemmer.js b/sphinx/search/non-minified-js/danish-stemmer.js
new file mode 100644
index 0000000..46b5d55
--- /dev/null
+++ b/sphinx/search/non-minified-js/danish-stemmer.js
@@ -0,0 +1,310 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+DanishStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["hed", -1, 1],
+ ["ethed", 0, 1],
+ ["ered", -1, 1],
+ ["e", -1, 1],
+ ["erede", 3, 1],
+ ["ende", 3, 1],
+ ["erende", 5, 1],
+ ["ene", 3, 1],
+ ["erne", 3, 1],
+ ["ere", 3, 1],
+ ["en", -1, 1],
+ ["heden", 10, 1],
+ ["eren", 10, 1],
+ ["er", -1, 1],
+ ["heder", 13, 1],
+ ["erer", 13, 1],
+ ["s", -1, 2],
+ ["heds", 16, 1],
+ ["es", 16, 1],
+ ["endes", 18, 1],
+ ["erendes", 19, 1],
+ ["enes", 18, 1],
+ ["ernes", 18, 1],
+ ["eres", 18, 1],
+ ["ens", 16, 1],
+ ["hedens", 24, 1],
+ ["erens", 24, 1],
+ ["ers", 16, 1],
+ ["ets", 16, 1],
+ ["erets", 28, 1],
+ ["et", -1, 1],
+ ["eret", 30, 1]
+ ];
+
+ /** @const */ var a_1 = [
+ ["gd", -1, -1],
+ ["dt", -1, -1],
+ ["gt", -1, -1],
+ ["kt", -1, -1]
+ ];
+
+ /** @const */ var a_2 = [
+ ["ig", -1, 1],
+ ["lig", 0, 1],
+ ["elig", 1, 1],
+ ["els", -1, 1],
+ ["l\u00F8st", -1, 2]
+ ];
+
+ /** @const */ var /** Array<int> */ g_c = [119, 223, 119, 1];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128];
+
+ /** @const */ var /** Array<int> */ g_s_ending = [239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16];
+
+ var /** number */ I_x = 0;
+ var /** number */ I_p1 = 0;
+ var /** string */ S_ch = '';
+
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_p1 = base.limit;
+ var /** number */ v_1 = base.cursor;
+ {
+ var /** number */ c1 = base.cursor + 3;
+ if (c1 > base.limit)
+ {
+ return false;
+ }
+ base.cursor = c1;
+ }
+ I_x = base.cursor;
+ base.cursor = v_1;
+ golab0: while(true)
+ {
+ var /** number */ v_2 = base.cursor;
+ lab1: {
+ if (!(base.in_grouping(g_v, 97, 248)))
+ {
+ break lab1;
+ }
+ base.cursor = v_2;
+ break golab0;
+ }
+ base.cursor = v_2;
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ golab2: while(true)
+ {
+ lab3: {
+ if (!(base.out_grouping(g_v, 97, 248)))
+ {
+ break lab3;
+ }
+ break golab2;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ lab4: {
+ if (!(I_p1 < I_x))
+ {
+ break lab4;
+ }
+ I_p1 = I_x;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_main_suffix() {
+ var /** number */ among_var;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_0);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!(base.in_grouping_b(g_s_ending, 97, 229)))
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_consonant_pair() {
+ var /** number */ v_1 = base.limit - base.cursor;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_3 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ if (base.find_among_b(a_1) == 0)
+ {
+ base.limit_backward = v_3;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_3;
+ base.cursor = base.limit - v_1;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_other_suffix() {
+ var /** number */ among_var;
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("st")))
+ {
+ break lab0;
+ }
+ base.bra = base.cursor;
+ if (!(base.eq_s_b("ig")))
+ {
+ break lab0;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ base.cursor = base.limit - v_1;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_3 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_2);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_3;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_3;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_4 = base.limit - base.cursor;
+ r_consonant_pair();
+ base.cursor = base.limit - v_4;
+ break;
+ case 2:
+ if (!base.slice_from("l\u00F8s"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_undouble() {
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ if (!(base.in_grouping_b(g_c, 98, 122)))
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ S_ch = base.slice_to();
+ if (S_ch == '')
+ {
+ return false;
+ }
+ base.limit_backward = v_2;
+ if (!(base.eq_s_b(S_ch)))
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_mark_regions();
+ base.cursor = v_1;
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_2 = base.limit - base.cursor;
+ r_main_suffix();
+ base.cursor = base.limit - v_2;
+ var /** number */ v_3 = base.limit - base.cursor;
+ r_consonant_pair();
+ base.cursor = base.limit - v_3;
+ var /** number */ v_4 = base.limit - base.cursor;
+ r_other_suffix();
+ base.cursor = base.limit - v_4;
+ var /** number */ v_5 = base.limit - base.cursor;
+ r_undouble();
+ base.cursor = base.limit - v_5;
+ base.cursor = base.limit_backward;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/dutch-stemmer.js b/sphinx/search/non-minified-js/dutch-stemmer.js
new file mode 100644
index 0000000..0ad11e2
--- /dev/null
+++ b/sphinx/search/non-minified-js/dutch-stemmer.js
@@ -0,0 +1,685 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+DutchStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["", -1, 6],
+ ["\u00E1", 0, 1],
+ ["\u00E4", 0, 1],
+ ["\u00E9", 0, 2],
+ ["\u00EB", 0, 2],
+ ["\u00ED", 0, 3],
+ ["\u00EF", 0, 3],
+ ["\u00F3", 0, 4],
+ ["\u00F6", 0, 4],
+ ["\u00FA", 0, 5],
+ ["\u00FC", 0, 5]
+ ];
+
+ /** @const */ var a_1 = [
+ ["", -1, 3],
+ ["I", 0, 2],
+ ["Y", 0, 1]
+ ];
+
+ /** @const */ var a_2 = [
+ ["dd", -1, -1],
+ ["kk", -1, -1],
+ ["tt", -1, -1]
+ ];
+
+ /** @const */ var a_3 = [
+ ["ene", -1, 2],
+ ["se", -1, 3],
+ ["en", -1, 2],
+ ["heden", 2, 1],
+ ["s", -1, 3]
+ ];
+
+ /** @const */ var a_4 = [
+ ["end", -1, 1],
+ ["ig", -1, 2],
+ ["ing", -1, 1],
+ ["lijk", -1, 3],
+ ["baar", -1, 4],
+ ["bar", -1, 5]
+ ];
+
+ /** @const */ var a_5 = [
+ ["aa", -1, -1],
+ ["ee", -1, -1],
+ ["oo", -1, -1],
+ ["uu", -1, -1]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128];
+
+ /** @const */ var /** Array<int> */ g_v_I = [1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128];
+
+ /** @const */ var /** Array<int> */ g_v_j = [17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128];
+
+ var /** number */ I_p2 = 0;
+ var /** number */ I_p1 = 0;
+ var /** boolean */ B_e_found = false;
+
+
+ /** @return {boolean} */
+ function r_prelude() {
+ var /** number */ among_var;
+ var /** number */ v_1 = base.cursor;
+ while(true)
+ {
+ var /** number */ v_2 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ among_var = base.find_among(a_0);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!base.slice_from("o"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!base.slice_from("u"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ break;
+ }
+ continue;
+ }
+ base.cursor = v_2;
+ break;
+ }
+ base.cursor = v_1;
+ var /** number */ v_3 = base.cursor;
+ lab1: {
+ base.bra = base.cursor;
+ if (!(base.eq_s("y")))
+ {
+ base.cursor = v_3;
+ break lab1;
+ }
+ base.ket = base.cursor;
+ if (!base.slice_from("Y"))
+ {
+ return false;
+ }
+ }
+ while(true)
+ {
+ var /** number */ v_4 = base.cursor;
+ lab2: {
+ golab3: while(true)
+ {
+ var /** number */ v_5 = base.cursor;
+ lab4: {
+ if (!(base.in_grouping(g_v, 97, 232)))
+ {
+ break lab4;
+ }
+ base.bra = base.cursor;
+ lab5: {
+ var /** number */ v_6 = base.cursor;
+ lab6: {
+ if (!(base.eq_s("i")))
+ {
+ break lab6;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping(g_v, 97, 232)))
+ {
+ break lab6;
+ }
+ if (!base.slice_from("I"))
+ {
+ return false;
+ }
+ break lab5;
+ }
+ base.cursor = v_6;
+ if (!(base.eq_s("y")))
+ {
+ break lab4;
+ }
+ base.ket = base.cursor;
+ if (!base.slice_from("Y"))
+ {
+ return false;
+ }
+ }
+ base.cursor = v_5;
+ break golab3;
+ }
+ base.cursor = v_5;
+ if (base.cursor >= base.limit)
+ {
+ break lab2;
+ }
+ base.cursor++;
+ }
+ continue;
+ }
+ base.cursor = v_4;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_p1 = base.limit;
+ I_p2 = base.limit;
+ golab0: while(true)
+ {
+ lab1: {
+ if (!(base.in_grouping(g_v, 97, 232)))
+ {
+ break lab1;
+ }
+ break golab0;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ golab2: while(true)
+ {
+ lab3: {
+ if (!(base.out_grouping(g_v, 97, 232)))
+ {
+ break lab3;
+ }
+ break golab2;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ lab4: {
+ if (!(I_p1 < 3))
+ {
+ break lab4;
+ }
+ I_p1 = 3;
+ }
+ golab5: while(true)
+ {
+ lab6: {
+ if (!(base.in_grouping(g_v, 97, 232)))
+ {
+ break lab6;
+ }
+ break golab5;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ golab7: while(true)
+ {
+ lab8: {
+ if (!(base.out_grouping(g_v, 97, 232)))
+ {
+ break lab8;
+ }
+ break golab7;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ I_p2 = base.cursor;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_postlude() {
+ var /** number */ among_var;
+ while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ among_var = base.find_among(a_1);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("y"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ break;
+ }
+ continue;
+ }
+ base.cursor = v_1;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R1() {
+ if (!(I_p1 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R2() {
+ if (!(I_p2 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_undouble() {
+ var /** number */ v_1 = base.limit - base.cursor;
+ if (base.find_among_b(a_2) == 0)
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_1;
+ base.ket = base.cursor;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_e_ending() {
+ B_e_found = false;
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("e")))
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ var /** number */ v_1 = base.limit - base.cursor;
+ if (!(base.out_grouping_b(g_v, 97, 232)))
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_1;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ B_e_found = true;
+ if (!r_undouble())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_en_ending() {
+ if (!r_R1())
+ {
+ return false;
+ }
+ var /** number */ v_1 = base.limit - base.cursor;
+ if (!(base.out_grouping_b(g_v, 97, 232)))
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_1;
+ {
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab0: {
+ if (!(base.eq_s_b("gem")))
+ {
+ break lab0;
+ }
+ return false;
+ }
+ base.cursor = base.limit - v_2;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_undouble())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_standard_suffix() {
+ var /** number */ among_var;
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_3);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_R1())
+ {
+ break lab0;
+ }
+ if (!base.slice_from("heid"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!r_en_ending())
+ {
+ break lab0;
+ }
+ break;
+ case 3:
+ if (!r_R1())
+ {
+ break lab0;
+ }
+ if (!(base.out_grouping_b(g_v_j, 97, 232)))
+ {
+ break lab0;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ base.cursor = base.limit - v_1;
+ var /** number */ v_2 = base.limit - base.cursor;
+ r_e_ending();
+ base.cursor = base.limit - v_2;
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab1: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("heid")))
+ {
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ break lab1;
+ }
+ {
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab2: {
+ if (!(base.eq_s_b("c")))
+ {
+ break lab2;
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_4;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("en")))
+ {
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!r_en_ending())
+ {
+ break lab1;
+ }
+ }
+ base.cursor = base.limit - v_3;
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab3: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_4);
+ if (among_var == 0)
+ {
+ break lab3;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_R2())
+ {
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ lab4: {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab5: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("ig")))
+ {
+ break lab5;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ break lab5;
+ }
+ {
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab6: {
+ if (!(base.eq_s_b("e")))
+ {
+ break lab6;
+ }
+ break lab5;
+ }
+ base.cursor = base.limit - v_7;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab4;
+ }
+ base.cursor = base.limit - v_6;
+ if (!r_undouble())
+ {
+ break lab3;
+ }
+ }
+ break;
+ case 2:
+ if (!r_R2())
+ {
+ break lab3;
+ }
+ {
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab7: {
+ if (!(base.eq_s_b("e")))
+ {
+ break lab7;
+ }
+ break lab3;
+ }
+ base.cursor = base.limit - v_8;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!r_R2())
+ {
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_e_ending())
+ {
+ break lab3;
+ }
+ break;
+ case 4:
+ if (!r_R2())
+ {
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!r_R2())
+ {
+ break lab3;
+ }
+ if (!B_e_found)
+ {
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ base.cursor = base.limit - v_5;
+ var /** number */ v_9 = base.limit - base.cursor;
+ lab8: {
+ if (!(base.out_grouping_b(g_v_I, 73, 232)))
+ {
+ break lab8;
+ }
+ var /** number */ v_10 = base.limit - base.cursor;
+ if (base.find_among_b(a_5) == 0)
+ {
+ break lab8;
+ }
+ if (!(base.out_grouping_b(g_v, 97, 232)))
+ {
+ break lab8;
+ }
+ base.cursor = base.limit - v_10;
+ base.ket = base.cursor;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab8;
+ }
+ base.cursor--;
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ base.cursor = base.limit - v_9;
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_prelude();
+ base.cursor = v_1;
+ var /** number */ v_2 = base.cursor;
+ r_mark_regions();
+ base.cursor = v_2;
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ r_standard_suffix();
+ base.cursor = base.limit_backward;
+ var /** number */ v_4 = base.cursor;
+ r_postlude();
+ base.cursor = v_4;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/finnish-stemmer.js b/sphinx/search/non-minified-js/finnish-stemmer.js
new file mode 100644
index 0000000..c907c4a
--- /dev/null
+++ b/sphinx/search/non-minified-js/finnish-stemmer.js
@@ -0,0 +1,790 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+FinnishStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["pa", -1, 1],
+ ["sti", -1, 2],
+ ["kaan", -1, 1],
+ ["han", -1, 1],
+ ["kin", -1, 1],
+ ["h\u00E4n", -1, 1],
+ ["k\u00E4\u00E4n", -1, 1],
+ ["ko", -1, 1],
+ ["p\u00E4", -1, 1],
+ ["k\u00F6", -1, 1]
+ ];
+
+ /** @const */ var a_1 = [
+ ["lla", -1, -1],
+ ["na", -1, -1],
+ ["ssa", -1, -1],
+ ["ta", -1, -1],
+ ["lta", 3, -1],
+ ["sta", 3, -1]
+ ];
+
+ /** @const */ var a_2 = [
+ ["ll\u00E4", -1, -1],
+ ["n\u00E4", -1, -1],
+ ["ss\u00E4", -1, -1],
+ ["t\u00E4", -1, -1],
+ ["lt\u00E4", 3, -1],
+ ["st\u00E4", 3, -1]
+ ];
+
+ /** @const */ var a_3 = [
+ ["lle", -1, -1],
+ ["ine", -1, -1]
+ ];
+
+ /** @const */ var a_4 = [
+ ["nsa", -1, 3],
+ ["mme", -1, 3],
+ ["nne", -1, 3],
+ ["ni", -1, 2],
+ ["si", -1, 1],
+ ["an", -1, 4],
+ ["en", -1, 6],
+ ["\u00E4n", -1, 5],
+ ["ns\u00E4", -1, 3]
+ ];
+
+ /** @const */ var a_5 = [
+ ["aa", -1, -1],
+ ["ee", -1, -1],
+ ["ii", -1, -1],
+ ["oo", -1, -1],
+ ["uu", -1, -1],
+ ["\u00E4\u00E4", -1, -1],
+ ["\u00F6\u00F6", -1, -1]
+ ];
+
+ /** @const */ var a_6 = [
+ ["a", -1, 8],
+ ["lla", 0, -1],
+ ["na", 0, -1],
+ ["ssa", 0, -1],
+ ["ta", 0, -1],
+ ["lta", 4, -1],
+ ["sta", 4, -1],
+ ["tta", 4, 2],
+ ["lle", -1, -1],
+ ["ine", -1, -1],
+ ["ksi", -1, -1],
+ ["n", -1, 7],
+ ["han", 11, 1],
+ ["den", 11, -1, r_VI],
+ ["seen", 11, -1, r_LONG],
+ ["hen", 11, 2],
+ ["tten", 11, -1, r_VI],
+ ["hin", 11, 3],
+ ["siin", 11, -1, r_VI],
+ ["hon", 11, 4],
+ ["h\u00E4n", 11, 5],
+ ["h\u00F6n", 11, 6],
+ ["\u00E4", -1, 8],
+ ["ll\u00E4", 22, -1],
+ ["n\u00E4", 22, -1],
+ ["ss\u00E4", 22, -1],
+ ["t\u00E4", 22, -1],
+ ["lt\u00E4", 26, -1],
+ ["st\u00E4", 26, -1],
+ ["tt\u00E4", 26, 2]
+ ];
+
+ /** @const */ var a_7 = [
+ ["eja", -1, -1],
+ ["mma", -1, 1],
+ ["imma", 1, -1],
+ ["mpa", -1, 1],
+ ["impa", 3, -1],
+ ["mmi", -1, 1],
+ ["immi", 5, -1],
+ ["mpi", -1, 1],
+ ["impi", 7, -1],
+ ["ej\u00E4", -1, -1],
+ ["mm\u00E4", -1, 1],
+ ["imm\u00E4", 10, -1],
+ ["mp\u00E4", -1, 1],
+ ["imp\u00E4", 12, -1]
+ ];
+
+ /** @const */ var a_8 = [
+ ["i", -1, -1],
+ ["j", -1, -1]
+ ];
+
+ /** @const */ var a_9 = [
+ ["mma", -1, 1],
+ ["imma", 0, -1]
+ ];
+
+ /** @const */ var /** Array<int> */ g_AEI = [17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8];
+
+ /** @const */ var /** Array<int> */ g_C = [119, 223, 119, 1];
+
+ /** @const */ var /** Array<int> */ g_V1 = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32];
+
+ /** @const */ var /** Array<int> */ g_V2 = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32];
+
+ /** @const */ var /** Array<int> */ g_particle_end = [17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32];
+
+ var /** boolean */ B_ending_removed = false;
+ var /** string */ S_x = '';
+ var /** number */ I_p2 = 0;
+ var /** number */ I_p1 = 0;
+
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_p1 = base.limit;
+ I_p2 = base.limit;
+ golab0: while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab1: {
+ if (!(base.in_grouping(g_V1, 97, 246)))
+ {
+ break lab1;
+ }
+ base.cursor = v_1;
+ break golab0;
+ }
+ base.cursor = v_1;
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ golab2: while(true)
+ {
+ lab3: {
+ if (!(base.out_grouping(g_V1, 97, 246)))
+ {
+ break lab3;
+ }
+ break golab2;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ golab4: while(true)
+ {
+ var /** number */ v_3 = base.cursor;
+ lab5: {
+ if (!(base.in_grouping(g_V1, 97, 246)))
+ {
+ break lab5;
+ }
+ base.cursor = v_3;
+ break golab4;
+ }
+ base.cursor = v_3;
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ golab6: while(true)
+ {
+ lab7: {
+ if (!(base.out_grouping(g_V1, 97, 246)))
+ {
+ break lab7;
+ }
+ break golab6;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ I_p2 = base.cursor;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R2() {
+ if (!(I_p2 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_particle_etc() {
+ var /** number */ among_var;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_0);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ switch (among_var) {
+ case 1:
+ if (!(base.in_grouping_b(g_particle_end, 97, 246)))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!r_R2())
+ {
+ return false;
+ }
+ break;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_possessive() {
+ var /** number */ among_var;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_4);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ switch (among_var) {
+ case 1:
+ {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab0: {
+ if (!(base.eq_s_b("k")))
+ {
+ break lab0;
+ }
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("kse")))
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_from("ksi"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (base.find_among_b(a_1) == 0)
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (base.find_among_b(a_2) == 0)
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (base.find_among_b(a_3) == 0)
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_LONG() {
+ if (base.find_among_b(a_5) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_VI() {
+ if (!(base.eq_s_b("i")))
+ {
+ return false;
+ }
+ if (!(base.in_grouping_b(g_V2, 97, 246)))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_case_ending() {
+ var /** number */ among_var;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_6);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ switch (among_var) {
+ case 1:
+ if (!(base.eq_s_b("a")))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!(base.eq_s_b("e")))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!(base.eq_s_b("i")))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!(base.eq_s_b("o")))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!(base.eq_s_b("\u00E4")))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (!(base.eq_s_b("\u00F6")))
+ {
+ return false;
+ }
+ break;
+ case 7:
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab0: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab1: {
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab2: {
+ if (!r_LONG())
+ {
+ break lab2;
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_5;
+ if (!(base.eq_s_b("ie")))
+ {
+ base.cursor = base.limit - v_3;
+ break lab0;
+ }
+ }
+ base.cursor = base.limit - v_4;
+ if (base.cursor <= base.limit_backward)
+ {
+ base.cursor = base.limit - v_3;
+ break lab0;
+ }
+ base.cursor--;
+ base.bra = base.cursor;
+ }
+ break;
+ case 8:
+ if (!(base.in_grouping_b(g_V1, 97, 246)))
+ {
+ return false;
+ }
+ if (!(base.in_grouping_b(g_C, 98, 122)))
+ {
+ return false;
+ }
+ break;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ B_ending_removed = true;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_other_endings() {
+ var /** number */ among_var;
+ if (base.cursor < I_p2)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p2;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_7);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ switch (among_var) {
+ case 1:
+ {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab0: {
+ if (!(base.eq_s_b("po")))
+ {
+ break lab0;
+ }
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ }
+ break;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_i_plural() {
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ if (base.find_among_b(a_8) == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_t_plural() {
+ var /** number */ among_var;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("t")))
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ var /** number */ v_3 = base.limit - base.cursor;
+ if (!(base.in_grouping_b(g_V1, 97, 246)))
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.limit_backward = v_2;
+ if (base.cursor < I_p2)
+ {
+ return false;
+ }
+ var /** number */ v_5 = base.limit_backward;
+ base.limit_backward = I_p2;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_9);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_5;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_5;
+ switch (among_var) {
+ case 1:
+ {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab0: {
+ if (!(base.eq_s_b("po")))
+ {
+ break lab0;
+ }
+ return false;
+ }
+ base.cursor = base.limit - v_6;
+ }
+ break;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_tidy() {
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab0: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ if (!r_LONG())
+ {
+ break lab0;
+ }
+ base.cursor = base.limit - v_4;
+ base.ket = base.cursor;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab0;
+ }
+ base.cursor--;
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ base.cursor = base.limit - v_3;
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab1: {
+ base.ket = base.cursor;
+ if (!(base.in_grouping_b(g_AEI, 97, 228)))
+ {
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!(base.in_grouping_b(g_C, 98, 122)))
+ {
+ break lab1;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ base.cursor = base.limit - v_5;
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab2: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("j")))
+ {
+ break lab2;
+ }
+ base.bra = base.cursor;
+ lab3: {
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab4: {
+ if (!(base.eq_s_b("o")))
+ {
+ break lab4;
+ }
+ break lab3;
+ }
+ base.cursor = base.limit - v_7;
+ if (!(base.eq_s_b("u")))
+ {
+ break lab2;
+ }
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ base.cursor = base.limit - v_6;
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab5: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("o")))
+ {
+ break lab5;
+ }
+ base.bra = base.cursor;
+ if (!(base.eq_s_b("j")))
+ {
+ break lab5;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ base.cursor = base.limit - v_8;
+ base.limit_backward = v_2;
+ golab6: while(true)
+ {
+ var /** number */ v_9 = base.limit - base.cursor;
+ lab7: {
+ if (!(base.out_grouping_b(g_V1, 97, 246)))
+ {
+ break lab7;
+ }
+ base.cursor = base.limit - v_9;
+ break golab6;
+ }
+ base.cursor = base.limit - v_9;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping_b(g_C, 98, 122)))
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ S_x = base.slice_to();
+ if (S_x == '')
+ {
+ return false;
+ }
+ if (!(base.eq_s_b(S_x)))
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_mark_regions();
+ base.cursor = v_1;
+ B_ending_removed = false;
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_2 = base.limit - base.cursor;
+ r_particle_etc();
+ base.cursor = base.limit - v_2;
+ var /** number */ v_3 = base.limit - base.cursor;
+ r_possessive();
+ base.cursor = base.limit - v_3;
+ var /** number */ v_4 = base.limit - base.cursor;
+ r_case_ending();
+ base.cursor = base.limit - v_4;
+ var /** number */ v_5 = base.limit - base.cursor;
+ r_other_endings();
+ base.cursor = base.limit - v_5;
+ lab0: {
+ lab1: {
+ if (!B_ending_removed)
+ {
+ break lab1;
+ }
+ var /** number */ v_7 = base.limit - base.cursor;
+ r_i_plural();
+ base.cursor = base.limit - v_7;
+ break lab0;
+ }
+ var /** number */ v_8 = base.limit - base.cursor;
+ r_t_plural();
+ base.cursor = base.limit - v_8;
+ }
+ var /** number */ v_9 = base.limit - base.cursor;
+ r_tidy();
+ base.cursor = base.limit - v_9;
+ base.cursor = base.limit_backward;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/french-stemmer.js b/sphinx/search/non-minified-js/french-stemmer.js
new file mode 100644
index 0000000..c970831
--- /dev/null
+++ b/sphinx/search/non-minified-js/french-stemmer.js
@@ -0,0 +1,1325 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+FrenchStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["col", -1, -1],
+ ["par", -1, -1],
+ ["tap", -1, -1]
+ ];
+
+ /** @const */ var a_1 = [
+ ["", -1, 7],
+ ["H", 0, 6],
+ ["He", 1, 4],
+ ["Hi", 1, 5],
+ ["I", 0, 1],
+ ["U", 0, 2],
+ ["Y", 0, 3]
+ ];
+
+ /** @const */ var a_2 = [
+ ["iqU", -1, 3],
+ ["abl", -1, 3],
+ ["I\u00E8r", -1, 4],
+ ["i\u00E8r", -1, 4],
+ ["eus", -1, 2],
+ ["iv", -1, 1]
+ ];
+
+ /** @const */ var a_3 = [
+ ["ic", -1, 2],
+ ["abil", -1, 1],
+ ["iv", -1, 3]
+ ];
+
+ /** @const */ var a_4 = [
+ ["iqUe", -1, 1],
+ ["atrice", -1, 2],
+ ["ance", -1, 1],
+ ["ence", -1, 5],
+ ["logie", -1, 3],
+ ["able", -1, 1],
+ ["isme", -1, 1],
+ ["euse", -1, 11],
+ ["iste", -1, 1],
+ ["ive", -1, 8],
+ ["if", -1, 8],
+ ["usion", -1, 4],
+ ["ation", -1, 2],
+ ["ution", -1, 4],
+ ["ateur", -1, 2],
+ ["iqUes", -1, 1],
+ ["atrices", -1, 2],
+ ["ances", -1, 1],
+ ["ences", -1, 5],
+ ["logies", -1, 3],
+ ["ables", -1, 1],
+ ["ismes", -1, 1],
+ ["euses", -1, 11],
+ ["istes", -1, 1],
+ ["ives", -1, 8],
+ ["ifs", -1, 8],
+ ["usions", -1, 4],
+ ["ations", -1, 2],
+ ["utions", -1, 4],
+ ["ateurs", -1, 2],
+ ["ments", -1, 15],
+ ["ements", 30, 6],
+ ["issements", 31, 12],
+ ["it\u00E9s", -1, 7],
+ ["ment", -1, 15],
+ ["ement", 34, 6],
+ ["issement", 35, 12],
+ ["amment", 34, 13],
+ ["emment", 34, 14],
+ ["aux", -1, 10],
+ ["eaux", 39, 9],
+ ["eux", -1, 1],
+ ["it\u00E9", -1, 7]
+ ];
+
+ /** @const */ var a_5 = [
+ ["ira", -1, 1],
+ ["ie", -1, 1],
+ ["isse", -1, 1],
+ ["issante", -1, 1],
+ ["i", -1, 1],
+ ["irai", 4, 1],
+ ["ir", -1, 1],
+ ["iras", -1, 1],
+ ["ies", -1, 1],
+ ["\u00EEmes", -1, 1],
+ ["isses", -1, 1],
+ ["issantes", -1, 1],
+ ["\u00EEtes", -1, 1],
+ ["is", -1, 1],
+ ["irais", 13, 1],
+ ["issais", 13, 1],
+ ["irions", -1, 1],
+ ["issions", -1, 1],
+ ["irons", -1, 1],
+ ["issons", -1, 1],
+ ["issants", -1, 1],
+ ["it", -1, 1],
+ ["irait", 21, 1],
+ ["issait", 21, 1],
+ ["issant", -1, 1],
+ ["iraIent", -1, 1],
+ ["issaIent", -1, 1],
+ ["irent", -1, 1],
+ ["issent", -1, 1],
+ ["iront", -1, 1],
+ ["\u00EEt", -1, 1],
+ ["iriez", -1, 1],
+ ["issiez", -1, 1],
+ ["irez", -1, 1],
+ ["issez", -1, 1]
+ ];
+
+ /** @const */ var a_6 = [
+ ["a", -1, 3],
+ ["era", 0, 2],
+ ["asse", -1, 3],
+ ["ante", -1, 3],
+ ["\u00E9e", -1, 2],
+ ["ai", -1, 3],
+ ["erai", 5, 2],
+ ["er", -1, 2],
+ ["as", -1, 3],
+ ["eras", 8, 2],
+ ["\u00E2mes", -1, 3],
+ ["asses", -1, 3],
+ ["antes", -1, 3],
+ ["\u00E2tes", -1, 3],
+ ["\u00E9es", -1, 2],
+ ["ais", -1, 3],
+ ["erais", 15, 2],
+ ["ions", -1, 1],
+ ["erions", 17, 2],
+ ["assions", 17, 3],
+ ["erons", -1, 2],
+ ["ants", -1, 3],
+ ["\u00E9s", -1, 2],
+ ["ait", -1, 3],
+ ["erait", 23, 2],
+ ["ant", -1, 3],
+ ["aIent", -1, 3],
+ ["eraIent", 26, 2],
+ ["\u00E8rent", -1, 2],
+ ["assent", -1, 3],
+ ["eront", -1, 2],
+ ["\u00E2t", -1, 3],
+ ["ez", -1, 2],
+ ["iez", 32, 2],
+ ["eriez", 33, 2],
+ ["assiez", 33, 3],
+ ["erez", 32, 2],
+ ["\u00E9", -1, 2]
+ ];
+
+ /** @const */ var a_7 = [
+ ["e", -1, 3],
+ ["I\u00E8re", 0, 2],
+ ["i\u00E8re", 0, 2],
+ ["ion", -1, 1],
+ ["Ier", -1, 2],
+ ["ier", -1, 2]
+ ];
+
+ /** @const */ var a_8 = [
+ ["ell", -1, -1],
+ ["eill", -1, -1],
+ ["enn", -1, -1],
+ ["onn", -1, -1],
+ ["ett", -1, -1]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5];
+
+ /** @const */ var /** Array<int> */ g_keep_with_s = [1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128];
+
+ var /** number */ I_p2 = 0;
+ var /** number */ I_p1 = 0;
+ var /** number */ I_pV = 0;
+
+
+ /** @return {boolean} */
+ function r_prelude() {
+ while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ golab1: while(true)
+ {
+ var /** number */ v_2 = base.cursor;
+ lab2: {
+ lab3: {
+ var /** number */ v_3 = base.cursor;
+ lab4: {
+ if (!(base.in_grouping(g_v, 97, 251)))
+ {
+ break lab4;
+ }
+ base.bra = base.cursor;
+ lab5: {
+ var /** number */ v_4 = base.cursor;
+ lab6: {
+ if (!(base.eq_s("u")))
+ {
+ break lab6;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping(g_v, 97, 251)))
+ {
+ break lab6;
+ }
+ if (!base.slice_from("U"))
+ {
+ return false;
+ }
+ break lab5;
+ }
+ base.cursor = v_4;
+ lab7: {
+ if (!(base.eq_s("i")))
+ {
+ break lab7;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping(g_v, 97, 251)))
+ {
+ break lab7;
+ }
+ if (!base.slice_from("I"))
+ {
+ return false;
+ }
+ break lab5;
+ }
+ base.cursor = v_4;
+ if (!(base.eq_s("y")))
+ {
+ break lab4;
+ }
+ base.ket = base.cursor;
+ if (!base.slice_from("Y"))
+ {
+ return false;
+ }
+ }
+ break lab3;
+ }
+ base.cursor = v_3;
+ lab8: {
+ base.bra = base.cursor;
+ if (!(base.eq_s("\u00EB")))
+ {
+ break lab8;
+ }
+ base.ket = base.cursor;
+ if (!base.slice_from("He"))
+ {
+ return false;
+ }
+ break lab3;
+ }
+ base.cursor = v_3;
+ lab9: {
+ base.bra = base.cursor;
+ if (!(base.eq_s("\u00EF")))
+ {
+ break lab9;
+ }
+ base.ket = base.cursor;
+ if (!base.slice_from("Hi"))
+ {
+ return false;
+ }
+ break lab3;
+ }
+ base.cursor = v_3;
+ lab10: {
+ base.bra = base.cursor;
+ if (!(base.eq_s("y")))
+ {
+ break lab10;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping(g_v, 97, 251)))
+ {
+ break lab10;
+ }
+ if (!base.slice_from("Y"))
+ {
+ return false;
+ }
+ break lab3;
+ }
+ base.cursor = v_3;
+ if (!(base.eq_s("q")))
+ {
+ break lab2;
+ }
+ base.bra = base.cursor;
+ if (!(base.eq_s("u")))
+ {
+ break lab2;
+ }
+ base.ket = base.cursor;
+ if (!base.slice_from("U"))
+ {
+ return false;
+ }
+ }
+ base.cursor = v_2;
+ break golab1;
+ }
+ base.cursor = v_2;
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ continue;
+ }
+ base.cursor = v_1;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_pV = base.limit;
+ I_p1 = base.limit;
+ I_p2 = base.limit;
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_2 = base.cursor;
+ lab2: {
+ if (!(base.in_grouping(g_v, 97, 251)))
+ {
+ break lab2;
+ }
+ if (!(base.in_grouping(g_v, 97, 251)))
+ {
+ break lab2;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab2;
+ }
+ base.cursor++;
+ break lab1;
+ }
+ base.cursor = v_2;
+ lab3: {
+ if (base.find_among(a_0) == 0)
+ {
+ break lab3;
+ }
+ break lab1;
+ }
+ base.cursor = v_2;
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ golab4: while(true)
+ {
+ lab5: {
+ if (!(base.in_grouping(g_v, 97, 251)))
+ {
+ break lab5;
+ }
+ break golab4;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ }
+ I_pV = base.cursor;
+ }
+ base.cursor = v_1;
+ var /** number */ v_4 = base.cursor;
+ lab6: {
+ golab7: while(true)
+ {
+ lab8: {
+ if (!(base.in_grouping(g_v, 97, 251)))
+ {
+ break lab8;
+ }
+ break golab7;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab6;
+ }
+ base.cursor++;
+ }
+ golab9: while(true)
+ {
+ lab10: {
+ if (!(base.out_grouping(g_v, 97, 251)))
+ {
+ break lab10;
+ }
+ break golab9;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab6;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ golab11: while(true)
+ {
+ lab12: {
+ if (!(base.in_grouping(g_v, 97, 251)))
+ {
+ break lab12;
+ }
+ break golab11;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab6;
+ }
+ base.cursor++;
+ }
+ golab13: while(true)
+ {
+ lab14: {
+ if (!(base.out_grouping(g_v, 97, 251)))
+ {
+ break lab14;
+ }
+ break golab13;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab6;
+ }
+ base.cursor++;
+ }
+ I_p2 = base.cursor;
+ }
+ base.cursor = v_4;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_postlude() {
+ var /** number */ among_var;
+ while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ among_var = base.find_among(a_1);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("u"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("y"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!base.slice_from("\u00EB"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!base.slice_from("\u00EF"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 7:
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ break;
+ }
+ continue;
+ }
+ base.cursor = v_1;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_RV() {
+ if (!(I_pV <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R1() {
+ if (!(I_p1 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R2() {
+ if (!(I_p2 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_standard_suffix() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_4);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("ic")))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ lab1: {
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab2: {
+ if (!r_R2())
+ {
+ break lab2;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_2;
+ if (!base.slice_from("iqU"))
+ {
+ return false;
+ }
+ }
+ }
+ break;
+ case 3:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("log"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("u"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("ent"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab3: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_2);
+ if (among_var == 0)
+ {
+ base.cursor = base.limit - v_3;
+ break lab3;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_3;
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("at")))
+ {
+ base.cursor = base.limit - v_3;
+ break lab3;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_3;
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ lab4: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab5: {
+ if (!r_R2())
+ {
+ break lab5;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab4;
+ }
+ base.cursor = base.limit - v_4;
+ if (!r_R1())
+ {
+ base.cursor = base.limit - v_3;
+ break lab3;
+ }
+ if (!base.slice_from("eux"))
+ {
+ return false;
+ }
+ }
+ break;
+ case 3:
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_3;
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!r_RV())
+ {
+ base.cursor = base.limit - v_3;
+ break lab3;
+ }
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ break;
+ case 7:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab6: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_3);
+ if (among_var == 0)
+ {
+ base.cursor = base.limit - v_5;
+ break lab6;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ lab7: {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab8: {
+ if (!r_R2())
+ {
+ break lab8;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab7;
+ }
+ base.cursor = base.limit - v_6;
+ if (!base.slice_from("abl"))
+ {
+ return false;
+ }
+ }
+ break;
+ case 2:
+ lab9: {
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab10: {
+ if (!r_R2())
+ {
+ break lab10;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab9;
+ }
+ base.cursor = base.limit - v_7;
+ if (!base.slice_from("iqU"))
+ {
+ return false;
+ }
+ }
+ break;
+ case 3:
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_5;
+ break lab6;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ break;
+ case 8:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab11: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("at")))
+ {
+ base.cursor = base.limit - v_8;
+ break lab11;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_8;
+ break lab11;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("ic")))
+ {
+ base.cursor = base.limit - v_8;
+ break lab11;
+ }
+ base.bra = base.cursor;
+ lab12: {
+ var /** number */ v_9 = base.limit - base.cursor;
+ lab13: {
+ if (!r_R2())
+ {
+ break lab13;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab12;
+ }
+ base.cursor = base.limit - v_9;
+ if (!base.slice_from("iqU"))
+ {
+ return false;
+ }
+ }
+ }
+ break;
+ case 9:
+ if (!base.slice_from("eau"))
+ {
+ return false;
+ }
+ break;
+ case 10:
+ if (!r_R1())
+ {
+ return false;
+ }
+ if (!base.slice_from("al"))
+ {
+ return false;
+ }
+ break;
+ case 11:
+ lab14: {
+ var /** number */ v_10 = base.limit - base.cursor;
+ lab15: {
+ if (!r_R2())
+ {
+ break lab15;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab14;
+ }
+ base.cursor = base.limit - v_10;
+ if (!r_R1())
+ {
+ return false;
+ }
+ if (!base.slice_from("eux"))
+ {
+ return false;
+ }
+ }
+ break;
+ case 12:
+ if (!r_R1())
+ {
+ return false;
+ }
+ if (!(base.out_grouping_b(g_v, 97, 251)))
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 13:
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!base.slice_from("ant"))
+ {
+ return false;
+ }
+ return false;
+ case 14:
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!base.slice_from("ent"))
+ {
+ return false;
+ }
+ return false;
+ case 15:
+ var /** number */ v_11 = base.limit - base.cursor;
+ if (!(base.in_grouping_b(g_v, 97, 251)))
+ {
+ return false;
+ }
+ if (!r_RV())
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_11;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_i_verb_suffix() {
+ if (base.cursor < I_pV)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_pV;
+ base.ket = base.cursor;
+ if (base.find_among_b(a_5) == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab0: {
+ if (!(base.eq_s_b("H")))
+ {
+ break lab0;
+ }
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ }
+ if (!(base.out_grouping_b(g_v, 97, 251)))
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.limit_backward = v_2;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_verb_suffix() {
+ var /** number */ among_var;
+ if (base.cursor < I_pV)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_pV;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_6);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_R2())
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("e")))
+ {
+ base.cursor = base.limit - v_3;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ }
+ base.limit_backward = v_2;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_residual_suffix() {
+ var /** number */ among_var;
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("s")))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab1: {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab2: {
+ if (!(base.eq_s_b("Hi")))
+ {
+ break lab2;
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_3;
+ if (!(base.out_grouping_b(g_keep_with_s, 97, 232)))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ }
+ base.cursor = base.limit - v_2;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ if (base.cursor < I_pV)
+ {
+ return false;
+ }
+ var /** number */ v_5 = base.limit_backward;
+ base.limit_backward = I_pV;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_7);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_5;
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_R2())
+ {
+ base.limit_backward = v_5;
+ return false;
+ }
+ lab3: {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab4: {
+ if (!(base.eq_s_b("s")))
+ {
+ break lab4;
+ }
+ break lab3;
+ }
+ base.cursor = base.limit - v_6;
+ if (!(base.eq_s_b("t")))
+ {
+ base.limit_backward = v_5;
+ return false;
+ }
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ base.limit_backward = v_5;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_un_double() {
+ var /** number */ v_1 = base.limit - base.cursor;
+ if (base.find_among_b(a_8) == 0)
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_1;
+ base.ket = base.cursor;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_un_accent() {
+ {
+ var v_1 = 1;
+ while(true)
+ {
+ lab0: {
+ if (!(base.out_grouping_b(g_v, 97, 251)))
+ {
+ break lab0;
+ }
+ v_1--;
+ continue;
+ }
+ break;
+ }
+ if (v_1 > 0)
+ {
+ return false;
+ }
+ }
+ base.ket = base.cursor;
+ lab1: {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab2: {
+ if (!(base.eq_s_b("\u00E9")))
+ {
+ break lab2;
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_3;
+ if (!(base.eq_s_b("\u00E8")))
+ {
+ return false;
+ }
+ }
+ base.bra = base.cursor;
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_prelude();
+ base.cursor = v_1;
+ r_mark_regions();
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab2: {
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab3: {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab4: {
+ if (!r_standard_suffix())
+ {
+ break lab4;
+ }
+ break lab3;
+ }
+ base.cursor = base.limit - v_6;
+ lab5: {
+ if (!r_i_verb_suffix())
+ {
+ break lab5;
+ }
+ break lab3;
+ }
+ base.cursor = base.limit - v_6;
+ if (!r_verb_suffix())
+ {
+ break lab2;
+ }
+ }
+ base.cursor = base.limit - v_5;
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab6: {
+ base.ket = base.cursor;
+ lab7: {
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab8: {
+ if (!(base.eq_s_b("Y")))
+ {
+ break lab8;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break lab7;
+ }
+ base.cursor = base.limit - v_8;
+ if (!(base.eq_s_b("\u00E7")))
+ {
+ base.cursor = base.limit - v_7;
+ break lab6;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_from("c"))
+ {
+ return false;
+ }
+ }
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_4;
+ if (!r_residual_suffix())
+ {
+ break lab0;
+ }
+ }
+ }
+ base.cursor = base.limit - v_3;
+ var /** number */ v_9 = base.limit - base.cursor;
+ r_un_double();
+ base.cursor = base.limit - v_9;
+ var /** number */ v_10 = base.limit - base.cursor;
+ r_un_accent();
+ base.cursor = base.limit - v_10;
+ base.cursor = base.limit_backward;
+ var /** number */ v_11 = base.cursor;
+ r_postlude();
+ base.cursor = v_11;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/german-stemmer.js b/sphinx/search/non-minified-js/german-stemmer.js
new file mode 100644
index 0000000..f5ff81b
--- /dev/null
+++ b/sphinx/search/non-minified-js/german-stemmer.js
@@ -0,0 +1,577 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+GermanStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["", -1, 5],
+ ["U", 0, 2],
+ ["Y", 0, 1],
+ ["\u00E4", 0, 3],
+ ["\u00F6", 0, 4],
+ ["\u00FC", 0, 2]
+ ];
+
+ /** @const */ var a_1 = [
+ ["e", -1, 2],
+ ["em", -1, 1],
+ ["en", -1, 2],
+ ["ern", -1, 1],
+ ["er", -1, 1],
+ ["s", -1, 3],
+ ["es", 5, 2]
+ ];
+
+ /** @const */ var a_2 = [
+ ["en", -1, 1],
+ ["er", -1, 1],
+ ["st", -1, 2],
+ ["est", 2, 1]
+ ];
+
+ /** @const */ var a_3 = [
+ ["ig", -1, 1],
+ ["lich", -1, 1]
+ ];
+
+ /** @const */ var a_4 = [
+ ["end", -1, 1],
+ ["ig", -1, 2],
+ ["ung", -1, 1],
+ ["lich", -1, 3],
+ ["isch", -1, 2],
+ ["ik", -1, 2],
+ ["heit", -1, 3],
+ ["keit", -1, 4]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8];
+
+ /** @const */ var /** Array<int> */ g_s_ending = [117, 30, 5];
+
+ /** @const */ var /** Array<int> */ g_st_ending = [117, 30, 4];
+
+ var /** number */ I_x = 0;
+ var /** number */ I_p2 = 0;
+ var /** number */ I_p1 = 0;
+
+
+ /** @return {boolean} */
+ function r_prelude() {
+ var /** number */ v_1 = base.cursor;
+ while(true)
+ {
+ var /** number */ v_2 = base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_3 = base.cursor;
+ lab2: {
+ base.bra = base.cursor;
+ if (!(base.eq_s("\u00DF")))
+ {
+ break lab2;
+ }
+ base.ket = base.cursor;
+ if (!base.slice_from("ss"))
+ {
+ return false;
+ }
+ break lab1;
+ }
+ base.cursor = v_3;
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ continue;
+ }
+ base.cursor = v_2;
+ break;
+ }
+ base.cursor = v_1;
+ while(true)
+ {
+ var /** number */ v_4 = base.cursor;
+ lab3: {
+ golab4: while(true)
+ {
+ var /** number */ v_5 = base.cursor;
+ lab5: {
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab5;
+ }
+ base.bra = base.cursor;
+ lab6: {
+ var /** number */ v_6 = base.cursor;
+ lab7: {
+ if (!(base.eq_s("u")))
+ {
+ break lab7;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab7;
+ }
+ if (!base.slice_from("U"))
+ {
+ return false;
+ }
+ break lab6;
+ }
+ base.cursor = v_6;
+ if (!(base.eq_s("y")))
+ {
+ break lab5;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab5;
+ }
+ if (!base.slice_from("Y"))
+ {
+ return false;
+ }
+ }
+ base.cursor = v_5;
+ break golab4;
+ }
+ base.cursor = v_5;
+ if (base.cursor >= base.limit)
+ {
+ break lab3;
+ }
+ base.cursor++;
+ }
+ continue;
+ }
+ base.cursor = v_4;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_p1 = base.limit;
+ I_p2 = base.limit;
+ var /** number */ v_1 = base.cursor;
+ {
+ var /** number */ c1 = base.cursor + 3;
+ if (c1 > base.limit)
+ {
+ return false;
+ }
+ base.cursor = c1;
+ }
+ I_x = base.cursor;
+ base.cursor = v_1;
+ golab0: while(true)
+ {
+ lab1: {
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab1;
+ }
+ break golab0;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ golab2: while(true)
+ {
+ lab3: {
+ if (!(base.out_grouping(g_v, 97, 252)))
+ {
+ break lab3;
+ }
+ break golab2;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ lab4: {
+ if (!(I_p1 < I_x))
+ {
+ break lab4;
+ }
+ I_p1 = I_x;
+ }
+ golab5: while(true)
+ {
+ lab6: {
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab6;
+ }
+ break golab5;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ golab7: while(true)
+ {
+ lab8: {
+ if (!(base.out_grouping(g_v, 97, 252)))
+ {
+ break lab8;
+ }
+ break golab7;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ I_p2 = base.cursor;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_postlude() {
+ var /** number */ among_var;
+ while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ among_var = base.find_among(a_0);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("y"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("u"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!base.slice_from("o"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ break;
+ }
+ continue;
+ }
+ base.cursor = v_1;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R1() {
+ if (!(I_p1 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R2() {
+ if (!(I_p2 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_standard_suffix() {
+ var /** number */ among_var;
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_1);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ break lab0;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab1: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("s")))
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!(base.eq_s_b("nis")))
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 3:
+ if (!(base.in_grouping_b(g_s_ending, 98, 116)))
+ {
+ break lab0;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ base.cursor = base.limit - v_1;
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab2: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_2);
+ if (among_var == 0)
+ {
+ break lab2;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ break lab2;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!(base.in_grouping_b(g_st_ending, 98, 116)))
+ {
+ break lab2;
+ }
+ {
+ var /** number */ c1 = base.cursor - 3;
+ if (c1 < base.limit_backward)
+ {
+ break lab2;
+ }
+ base.cursor = c1;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ base.cursor = base.limit - v_3;
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab3: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_4);
+ if (among_var == 0)
+ {
+ break lab3;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ break lab3;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab4: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("ig")))
+ {
+ base.cursor = base.limit - v_5;
+ break lab4;
+ }
+ base.bra = base.cursor;
+ {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab5: {
+ if (!(base.eq_s_b("e")))
+ {
+ break lab5;
+ }
+ base.cursor = base.limit - v_5;
+ break lab4;
+ }
+ base.cursor = base.limit - v_6;
+ }
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_5;
+ break lab4;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 2:
+ {
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab6: {
+ if (!(base.eq_s_b("e")))
+ {
+ break lab6;
+ }
+ break lab3;
+ }
+ base.cursor = base.limit - v_7;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab7: {
+ base.ket = base.cursor;
+ lab8: {
+ var /** number */ v_9 = base.limit - base.cursor;
+ lab9: {
+ if (!(base.eq_s_b("er")))
+ {
+ break lab9;
+ }
+ break lab8;
+ }
+ base.cursor = base.limit - v_9;
+ if (!(base.eq_s_b("en")))
+ {
+ base.cursor = base.limit - v_8;
+ break lab7;
+ }
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ base.cursor = base.limit - v_8;
+ break lab7;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 4:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_10 = base.limit - base.cursor;
+ lab10: {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_3) == 0)
+ {
+ base.cursor = base.limit - v_10;
+ break lab10;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_10;
+ break lab10;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ }
+ }
+ base.cursor = base.limit - v_4;
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_prelude();
+ base.cursor = v_1;
+ var /** number */ v_2 = base.cursor;
+ r_mark_regions();
+ base.cursor = v_2;
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ r_standard_suffix();
+ base.cursor = base.limit_backward;
+ var /** number */ v_4 = base.cursor;
+ r_postlude();
+ base.cursor = v_4;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/hungarian-stemmer.js b/sphinx/search/non-minified-js/hungarian-stemmer.js
new file mode 100644
index 0000000..2c550ac
--- /dev/null
+++ b/sphinx/search/non-minified-js/hungarian-stemmer.js
@@ -0,0 +1,711 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+HungarianStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["cs", -1, -1],
+ ["dzs", -1, -1],
+ ["gy", -1, -1],
+ ["ly", -1, -1],
+ ["ny", -1, -1],
+ ["sz", -1, -1],
+ ["ty", -1, -1],
+ ["zs", -1, -1]
+ ];
+
+ /** @const */ var a_1 = [
+ ["\u00E1", -1, 1],
+ ["\u00E9", -1, 2]
+ ];
+
+ /** @const */ var a_2 = [
+ ["bb", -1, -1],
+ ["cc", -1, -1],
+ ["dd", -1, -1],
+ ["ff", -1, -1],
+ ["gg", -1, -1],
+ ["jj", -1, -1],
+ ["kk", -1, -1],
+ ["ll", -1, -1],
+ ["mm", -1, -1],
+ ["nn", -1, -1],
+ ["pp", -1, -1],
+ ["rr", -1, -1],
+ ["ccs", -1, -1],
+ ["ss", -1, -1],
+ ["zzs", -1, -1],
+ ["tt", -1, -1],
+ ["vv", -1, -1],
+ ["ggy", -1, -1],
+ ["lly", -1, -1],
+ ["nny", -1, -1],
+ ["tty", -1, -1],
+ ["ssz", -1, -1],
+ ["zz", -1, -1]
+ ];
+
+ /** @const */ var a_3 = [
+ ["al", -1, 1],
+ ["el", -1, 1]
+ ];
+
+ /** @const */ var a_4 = [
+ ["ba", -1, -1],
+ ["ra", -1, -1],
+ ["be", -1, -1],
+ ["re", -1, -1],
+ ["ig", -1, -1],
+ ["nak", -1, -1],
+ ["nek", -1, -1],
+ ["val", -1, -1],
+ ["vel", -1, -1],
+ ["ul", -1, -1],
+ ["n\u00E1l", -1, -1],
+ ["n\u00E9l", -1, -1],
+ ["b\u00F3l", -1, -1],
+ ["r\u00F3l", -1, -1],
+ ["t\u00F3l", -1, -1],
+ ["\u00FCl", -1, -1],
+ ["b\u0151l", -1, -1],
+ ["r\u0151l", -1, -1],
+ ["t\u0151l", -1, -1],
+ ["n", -1, -1],
+ ["an", 19, -1],
+ ["ban", 20, -1],
+ ["en", 19, -1],
+ ["ben", 22, -1],
+ ["k\u00E9ppen", 22, -1],
+ ["on", 19, -1],
+ ["\u00F6n", 19, -1],
+ ["k\u00E9pp", -1, -1],
+ ["kor", -1, -1],
+ ["t", -1, -1],
+ ["at", 29, -1],
+ ["et", 29, -1],
+ ["k\u00E9nt", 29, -1],
+ ["ank\u00E9nt", 32, -1],
+ ["enk\u00E9nt", 32, -1],
+ ["onk\u00E9nt", 32, -1],
+ ["ot", 29, -1],
+ ["\u00E9rt", 29, -1],
+ ["\u00F6t", 29, -1],
+ ["hez", -1, -1],
+ ["hoz", -1, -1],
+ ["h\u00F6z", -1, -1],
+ ["v\u00E1", -1, -1],
+ ["v\u00E9", -1, -1]
+ ];
+
+ /** @const */ var a_5 = [
+ ["\u00E1n", -1, 2],
+ ["\u00E9n", -1, 1],
+ ["\u00E1nk\u00E9nt", -1, 2]
+ ];
+
+ /** @const */ var a_6 = [
+ ["stul", -1, 1],
+ ["astul", 0, 1],
+ ["\u00E1stul", 0, 2],
+ ["st\u00FCl", -1, 1],
+ ["est\u00FCl", 3, 1],
+ ["\u00E9st\u00FCl", 3, 3]
+ ];
+
+ /** @const */ var a_7 = [
+ ["\u00E1", -1, 1],
+ ["\u00E9", -1, 1]
+ ];
+
+ /** @const */ var a_8 = [
+ ["k", -1, 3],
+ ["ak", 0, 3],
+ ["ek", 0, 3],
+ ["ok", 0, 3],
+ ["\u00E1k", 0, 1],
+ ["\u00E9k", 0, 2],
+ ["\u00F6k", 0, 3]
+ ];
+
+ /** @const */ var a_9 = [
+ ["\u00E9i", -1, 1],
+ ["\u00E1\u00E9i", 0, 3],
+ ["\u00E9\u00E9i", 0, 2],
+ ["\u00E9", -1, 1],
+ ["k\u00E9", 3, 1],
+ ["ak\u00E9", 4, 1],
+ ["ek\u00E9", 4, 1],
+ ["ok\u00E9", 4, 1],
+ ["\u00E1k\u00E9", 4, 3],
+ ["\u00E9k\u00E9", 4, 2],
+ ["\u00F6k\u00E9", 4, 1],
+ ["\u00E9\u00E9", 3, 2]
+ ];
+
+ /** @const */ var a_10 = [
+ ["a", -1, 1],
+ ["ja", 0, 1],
+ ["d", -1, 1],
+ ["ad", 2, 1],
+ ["ed", 2, 1],
+ ["od", 2, 1],
+ ["\u00E1d", 2, 2],
+ ["\u00E9d", 2, 3],
+ ["\u00F6d", 2, 1],
+ ["e", -1, 1],
+ ["je", 9, 1],
+ ["nk", -1, 1],
+ ["unk", 11, 1],
+ ["\u00E1nk", 11, 2],
+ ["\u00E9nk", 11, 3],
+ ["\u00FCnk", 11, 1],
+ ["uk", -1, 1],
+ ["juk", 16, 1],
+ ["\u00E1juk", 17, 2],
+ ["\u00FCk", -1, 1],
+ ["j\u00FCk", 19, 1],
+ ["\u00E9j\u00FCk", 20, 3],
+ ["m", -1, 1],
+ ["am", 22, 1],
+ ["em", 22, 1],
+ ["om", 22, 1],
+ ["\u00E1m", 22, 2],
+ ["\u00E9m", 22, 3],
+ ["o", -1, 1],
+ ["\u00E1", -1, 2],
+ ["\u00E9", -1, 3]
+ ];
+
+ /** @const */ var a_11 = [
+ ["id", -1, 1],
+ ["aid", 0, 1],
+ ["jaid", 1, 1],
+ ["eid", 0, 1],
+ ["jeid", 3, 1],
+ ["\u00E1id", 0, 2],
+ ["\u00E9id", 0, 3],
+ ["i", -1, 1],
+ ["ai", 7, 1],
+ ["jai", 8, 1],
+ ["ei", 7, 1],
+ ["jei", 10, 1],
+ ["\u00E1i", 7, 2],
+ ["\u00E9i", 7, 3],
+ ["itek", -1, 1],
+ ["eitek", 14, 1],
+ ["jeitek", 15, 1],
+ ["\u00E9itek", 14, 3],
+ ["ik", -1, 1],
+ ["aik", 18, 1],
+ ["jaik", 19, 1],
+ ["eik", 18, 1],
+ ["jeik", 21, 1],
+ ["\u00E1ik", 18, 2],
+ ["\u00E9ik", 18, 3],
+ ["ink", -1, 1],
+ ["aink", 25, 1],
+ ["jaink", 26, 1],
+ ["eink", 25, 1],
+ ["jeink", 28, 1],
+ ["\u00E1ink", 25, 2],
+ ["\u00E9ink", 25, 3],
+ ["aitok", -1, 1],
+ ["jaitok", 32, 1],
+ ["\u00E1itok", -1, 2],
+ ["im", -1, 1],
+ ["aim", 35, 1],
+ ["jaim", 36, 1],
+ ["eim", 35, 1],
+ ["jeim", 38, 1],
+ ["\u00E1im", 35, 2],
+ ["\u00E9im", 35, 3]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 36, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1];
+
+ var /** number */ I_p1 = 0;
+
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_p1 = base.limit;
+ lab0: {
+ var /** number */ v_1 = base.cursor;
+ lab1: {
+ if (!(base.in_grouping(g_v, 97, 369)))
+ {
+ break lab1;
+ }
+ golab2: while(true)
+ {
+ var /** number */ v_2 = base.cursor;
+ lab3: {
+ if (!(base.out_grouping(g_v, 97, 369)))
+ {
+ break lab3;
+ }
+ base.cursor = v_2;
+ break golab2;
+ }
+ base.cursor = v_2;
+ if (base.cursor >= base.limit)
+ {
+ break lab1;
+ }
+ base.cursor++;
+ }
+ lab4: {
+ var /** number */ v_3 = base.cursor;
+ lab5: {
+ if (base.find_among(a_0) == 0)
+ {
+ break lab5;
+ }
+ break lab4;
+ }
+ base.cursor = v_3;
+ if (base.cursor >= base.limit)
+ {
+ break lab1;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ break lab0;
+ }
+ base.cursor = v_1;
+ if (!(base.out_grouping(g_v, 97, 369)))
+ {
+ return false;
+ }
+ golab6: while(true)
+ {
+ lab7: {
+ if (!(base.in_grouping(g_v, 97, 369)))
+ {
+ break lab7;
+ }
+ break golab6;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R1() {
+ if (!(I_p1 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_v_ending() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_1);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_double() {
+ var /** number */ v_1 = base.limit - base.cursor;
+ if (base.find_among_b(a_2) == 0)
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_1;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_undouble() {
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ base.ket = base.cursor;
+ {
+ var /** number */ c1 = base.cursor - 1;
+ if (c1 < base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor = c1;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_instrum() {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_3) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ if (!r_double())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_undouble())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_case() {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_4) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_v_ending())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_case_special() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_5);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_case_other() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_6);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_factive() {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_7) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ if (!r_double())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_undouble())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_plural() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_8);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_owned() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_9);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_sing_owner() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_10);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_plur_owner() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_11);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_mark_regions();
+ base.cursor = v_1;
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_2 = base.limit - base.cursor;
+ r_instrum();
+ base.cursor = base.limit - v_2;
+ var /** number */ v_3 = base.limit - base.cursor;
+ r_case();
+ base.cursor = base.limit - v_3;
+ var /** number */ v_4 = base.limit - base.cursor;
+ r_case_special();
+ base.cursor = base.limit - v_4;
+ var /** number */ v_5 = base.limit - base.cursor;
+ r_case_other();
+ base.cursor = base.limit - v_5;
+ var /** number */ v_6 = base.limit - base.cursor;
+ r_factive();
+ base.cursor = base.limit - v_6;
+ var /** number */ v_7 = base.limit - base.cursor;
+ r_owned();
+ base.cursor = base.limit - v_7;
+ var /** number */ v_8 = base.limit - base.cursor;
+ r_sing_owner();
+ base.cursor = base.limit - v_8;
+ var /** number */ v_9 = base.limit - base.cursor;
+ r_plur_owner();
+ base.cursor = base.limit - v_9;
+ var /** number */ v_10 = base.limit - base.cursor;
+ r_plural();
+ base.cursor = base.limit - v_10;
+ base.cursor = base.limit_backward;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/italian-stemmer.js b/sphinx/search/non-minified-js/italian-stemmer.js
new file mode 100644
index 0000000..df6ddfd
--- /dev/null
+++ b/sphinx/search/non-minified-js/italian-stemmer.js
@@ -0,0 +1,996 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+ItalianStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["", -1, 7],
+ ["qu", 0, 6],
+ ["\u00E1", 0, 1],
+ ["\u00E9", 0, 2],
+ ["\u00ED", 0, 3],
+ ["\u00F3", 0, 4],
+ ["\u00FA", 0, 5]
+ ];
+
+ /** @const */ var a_1 = [
+ ["", -1, 3],
+ ["I", 0, 1],
+ ["U", 0, 2]
+ ];
+
+ /** @const */ var a_2 = [
+ ["la", -1, -1],
+ ["cela", 0, -1],
+ ["gliela", 0, -1],
+ ["mela", 0, -1],
+ ["tela", 0, -1],
+ ["vela", 0, -1],
+ ["le", -1, -1],
+ ["cele", 6, -1],
+ ["gliele", 6, -1],
+ ["mele", 6, -1],
+ ["tele", 6, -1],
+ ["vele", 6, -1],
+ ["ne", -1, -1],
+ ["cene", 12, -1],
+ ["gliene", 12, -1],
+ ["mene", 12, -1],
+ ["sene", 12, -1],
+ ["tene", 12, -1],
+ ["vene", 12, -1],
+ ["ci", -1, -1],
+ ["li", -1, -1],
+ ["celi", 20, -1],
+ ["glieli", 20, -1],
+ ["meli", 20, -1],
+ ["teli", 20, -1],
+ ["veli", 20, -1],
+ ["gli", 20, -1],
+ ["mi", -1, -1],
+ ["si", -1, -1],
+ ["ti", -1, -1],
+ ["vi", -1, -1],
+ ["lo", -1, -1],
+ ["celo", 31, -1],
+ ["glielo", 31, -1],
+ ["melo", 31, -1],
+ ["telo", 31, -1],
+ ["velo", 31, -1]
+ ];
+
+ /** @const */ var a_3 = [
+ ["ando", -1, 1],
+ ["endo", -1, 1],
+ ["ar", -1, 2],
+ ["er", -1, 2],
+ ["ir", -1, 2]
+ ];
+
+ /** @const */ var a_4 = [
+ ["ic", -1, -1],
+ ["abil", -1, -1],
+ ["os", -1, -1],
+ ["iv", -1, 1]
+ ];
+
+ /** @const */ var a_5 = [
+ ["ic", -1, 1],
+ ["abil", -1, 1],
+ ["iv", -1, 1]
+ ];
+
+ /** @const */ var a_6 = [
+ ["ica", -1, 1],
+ ["logia", -1, 3],
+ ["osa", -1, 1],
+ ["ista", -1, 1],
+ ["iva", -1, 9],
+ ["anza", -1, 1],
+ ["enza", -1, 5],
+ ["ice", -1, 1],
+ ["atrice", 7, 1],
+ ["iche", -1, 1],
+ ["logie", -1, 3],
+ ["abile", -1, 1],
+ ["ibile", -1, 1],
+ ["usione", -1, 4],
+ ["azione", -1, 2],
+ ["uzione", -1, 4],
+ ["atore", -1, 2],
+ ["ose", -1, 1],
+ ["ante", -1, 1],
+ ["mente", -1, 1],
+ ["amente", 19, 7],
+ ["iste", -1, 1],
+ ["ive", -1, 9],
+ ["anze", -1, 1],
+ ["enze", -1, 5],
+ ["ici", -1, 1],
+ ["atrici", 25, 1],
+ ["ichi", -1, 1],
+ ["abili", -1, 1],
+ ["ibili", -1, 1],
+ ["ismi", -1, 1],
+ ["usioni", -1, 4],
+ ["azioni", -1, 2],
+ ["uzioni", -1, 4],
+ ["atori", -1, 2],
+ ["osi", -1, 1],
+ ["anti", -1, 1],
+ ["amenti", -1, 6],
+ ["imenti", -1, 6],
+ ["isti", -1, 1],
+ ["ivi", -1, 9],
+ ["ico", -1, 1],
+ ["ismo", -1, 1],
+ ["oso", -1, 1],
+ ["amento", -1, 6],
+ ["imento", -1, 6],
+ ["ivo", -1, 9],
+ ["it\u00E0", -1, 8],
+ ["ist\u00E0", -1, 1],
+ ["ist\u00E8", -1, 1],
+ ["ist\u00EC", -1, 1]
+ ];
+
+ /** @const */ var a_7 = [
+ ["isca", -1, 1],
+ ["enda", -1, 1],
+ ["ata", -1, 1],
+ ["ita", -1, 1],
+ ["uta", -1, 1],
+ ["ava", -1, 1],
+ ["eva", -1, 1],
+ ["iva", -1, 1],
+ ["erebbe", -1, 1],
+ ["irebbe", -1, 1],
+ ["isce", -1, 1],
+ ["ende", -1, 1],
+ ["are", -1, 1],
+ ["ere", -1, 1],
+ ["ire", -1, 1],
+ ["asse", -1, 1],
+ ["ate", -1, 1],
+ ["avate", 16, 1],
+ ["evate", 16, 1],
+ ["ivate", 16, 1],
+ ["ete", -1, 1],
+ ["erete", 20, 1],
+ ["irete", 20, 1],
+ ["ite", -1, 1],
+ ["ereste", -1, 1],
+ ["ireste", -1, 1],
+ ["ute", -1, 1],
+ ["erai", -1, 1],
+ ["irai", -1, 1],
+ ["isci", -1, 1],
+ ["endi", -1, 1],
+ ["erei", -1, 1],
+ ["irei", -1, 1],
+ ["assi", -1, 1],
+ ["ati", -1, 1],
+ ["iti", -1, 1],
+ ["eresti", -1, 1],
+ ["iresti", -1, 1],
+ ["uti", -1, 1],
+ ["avi", -1, 1],
+ ["evi", -1, 1],
+ ["ivi", -1, 1],
+ ["isco", -1, 1],
+ ["ando", -1, 1],
+ ["endo", -1, 1],
+ ["Yamo", -1, 1],
+ ["iamo", -1, 1],
+ ["avamo", -1, 1],
+ ["evamo", -1, 1],
+ ["ivamo", -1, 1],
+ ["eremo", -1, 1],
+ ["iremo", -1, 1],
+ ["assimo", -1, 1],
+ ["ammo", -1, 1],
+ ["emmo", -1, 1],
+ ["eremmo", 54, 1],
+ ["iremmo", 54, 1],
+ ["immo", -1, 1],
+ ["ano", -1, 1],
+ ["iscano", 58, 1],
+ ["avano", 58, 1],
+ ["evano", 58, 1],
+ ["ivano", 58, 1],
+ ["eranno", -1, 1],
+ ["iranno", -1, 1],
+ ["ono", -1, 1],
+ ["iscono", 65, 1],
+ ["arono", 65, 1],
+ ["erono", 65, 1],
+ ["irono", 65, 1],
+ ["erebbero", -1, 1],
+ ["irebbero", -1, 1],
+ ["assero", -1, 1],
+ ["essero", -1, 1],
+ ["issero", -1, 1],
+ ["ato", -1, 1],
+ ["ito", -1, 1],
+ ["uto", -1, 1],
+ ["avo", -1, 1],
+ ["evo", -1, 1],
+ ["ivo", -1, 1],
+ ["ar", -1, 1],
+ ["ir", -1, 1],
+ ["er\u00E0", -1, 1],
+ ["ir\u00E0", -1, 1],
+ ["er\u00F2", -1, 1],
+ ["ir\u00F2", -1, 1]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1];
+
+ /** @const */ var /** Array<int> */ g_AEIO = [17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2];
+
+ /** @const */ var /** Array<int> */ g_CG = [17];
+
+ var /** number */ I_p2 = 0;
+ var /** number */ I_p1 = 0;
+ var /** number */ I_pV = 0;
+
+
+ /** @return {boolean} */
+ function r_prelude() {
+ var /** number */ among_var;
+ var /** number */ v_1 = base.cursor;
+ while(true)
+ {
+ var /** number */ v_2 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ among_var = base.find_among(a_0);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("\u00E0"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("\u00E8"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("\u00EC"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!base.slice_from("\u00F2"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!base.slice_from("\u00F9"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (!base.slice_from("qU"))
+ {
+ return false;
+ }
+ break;
+ case 7:
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ break;
+ }
+ continue;
+ }
+ base.cursor = v_2;
+ break;
+ }
+ base.cursor = v_1;
+ while(true)
+ {
+ var /** number */ v_3 = base.cursor;
+ lab1: {
+ golab2: while(true)
+ {
+ var /** number */ v_4 = base.cursor;
+ lab3: {
+ if (!(base.in_grouping(g_v, 97, 249)))
+ {
+ break lab3;
+ }
+ base.bra = base.cursor;
+ lab4: {
+ var /** number */ v_5 = base.cursor;
+ lab5: {
+ if (!(base.eq_s("u")))
+ {
+ break lab5;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping(g_v, 97, 249)))
+ {
+ break lab5;
+ }
+ if (!base.slice_from("U"))
+ {
+ return false;
+ }
+ break lab4;
+ }
+ base.cursor = v_5;
+ if (!(base.eq_s("i")))
+ {
+ break lab3;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping(g_v, 97, 249)))
+ {
+ break lab3;
+ }
+ if (!base.slice_from("I"))
+ {
+ return false;
+ }
+ }
+ base.cursor = v_4;
+ break golab2;
+ }
+ base.cursor = v_4;
+ if (base.cursor >= base.limit)
+ {
+ break lab1;
+ }
+ base.cursor++;
+ }
+ continue;
+ }
+ base.cursor = v_3;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_pV = base.limit;
+ I_p1 = base.limit;
+ I_p2 = base.limit;
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_2 = base.cursor;
+ lab2: {
+ if (!(base.in_grouping(g_v, 97, 249)))
+ {
+ break lab2;
+ }
+ lab3: {
+ var /** number */ v_3 = base.cursor;
+ lab4: {
+ if (!(base.out_grouping(g_v, 97, 249)))
+ {
+ break lab4;
+ }
+ golab5: while(true)
+ {
+ lab6: {
+ if (!(base.in_grouping(g_v, 97, 249)))
+ {
+ break lab6;
+ }
+ break golab5;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab4;
+ }
+ base.cursor++;
+ }
+ break lab3;
+ }
+ base.cursor = v_3;
+ if (!(base.in_grouping(g_v, 97, 249)))
+ {
+ break lab2;
+ }
+ golab7: while(true)
+ {
+ lab8: {
+ if (!(base.out_grouping(g_v, 97, 249)))
+ {
+ break lab8;
+ }
+ break golab7;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab2;
+ }
+ base.cursor++;
+ }
+ }
+ break lab1;
+ }
+ base.cursor = v_2;
+ if (!(base.out_grouping(g_v, 97, 249)))
+ {
+ break lab0;
+ }
+ lab9: {
+ var /** number */ v_6 = base.cursor;
+ lab10: {
+ if (!(base.out_grouping(g_v, 97, 249)))
+ {
+ break lab10;
+ }
+ golab11: while(true)
+ {
+ lab12: {
+ if (!(base.in_grouping(g_v, 97, 249)))
+ {
+ break lab12;
+ }
+ break golab11;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab10;
+ }
+ base.cursor++;
+ }
+ break lab9;
+ }
+ base.cursor = v_6;
+ if (!(base.in_grouping(g_v, 97, 249)))
+ {
+ break lab0;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ }
+ I_pV = base.cursor;
+ }
+ base.cursor = v_1;
+ var /** number */ v_8 = base.cursor;
+ lab13: {
+ golab14: while(true)
+ {
+ lab15: {
+ if (!(base.in_grouping(g_v, 97, 249)))
+ {
+ break lab15;
+ }
+ break golab14;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ golab16: while(true)
+ {
+ lab17: {
+ if (!(base.out_grouping(g_v, 97, 249)))
+ {
+ break lab17;
+ }
+ break golab16;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ golab18: while(true)
+ {
+ lab19: {
+ if (!(base.in_grouping(g_v, 97, 249)))
+ {
+ break lab19;
+ }
+ break golab18;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ golab20: while(true)
+ {
+ lab21: {
+ if (!(base.out_grouping(g_v, 97, 249)))
+ {
+ break lab21;
+ }
+ break golab20;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ I_p2 = base.cursor;
+ }
+ base.cursor = v_8;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_postlude() {
+ var /** number */ among_var;
+ while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ among_var = base.find_among(a_1);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("u"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ break;
+ }
+ continue;
+ }
+ base.cursor = v_1;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_RV() {
+ if (!(I_pV <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R1() {
+ if (!(I_p1 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R2() {
+ if (!(I_p2 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_attached_pronoun() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ if (base.find_among_b(a_2) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ among_var = base.find_among_b(a_3);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ if (!r_RV())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_standard_suffix() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_6);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("ic")))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 3:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("log"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("u"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("ente"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 7:
+ if (!r_R1())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab1: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_4);
+ if (among_var == 0)
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("at")))
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ break;
+ case 8:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab2: {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_5) == 0)
+ {
+ base.cursor = base.limit - v_3;
+ break lab2;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_3;
+ break lab2;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 9:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab3: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("at")))
+ {
+ base.cursor = base.limit - v_4;
+ break lab3;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_4;
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("ic")))
+ {
+ base.cursor = base.limit - v_4;
+ break lab3;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_4;
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_verb_suffix() {
+ if (base.cursor < I_pV)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_pV;
+ base.ket = base.cursor;
+ if (base.find_among_b(a_7) == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.limit_backward = v_2;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_vowel_suffix() {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ if (!(base.in_grouping_b(g_AEIO, 97, 242)))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ if (!r_RV())
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("i")))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ if (!r_RV())
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab1: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("h")))
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!(base.in_grouping_b(g_CG, 99, 103)))
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ if (!r_RV())
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_prelude();
+ base.cursor = v_1;
+ r_mark_regions();
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_3 = base.limit - base.cursor;
+ r_attached_pronoun();
+ base.cursor = base.limit - v_3;
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab2: {
+ if (!r_standard_suffix())
+ {
+ break lab2;
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_5;
+ if (!r_verb_suffix())
+ {
+ break lab0;
+ }
+ }
+ }
+ base.cursor = base.limit - v_4;
+ var /** number */ v_6 = base.limit - base.cursor;
+ r_vowel_suffix();
+ base.cursor = base.limit - v_6;
+ base.cursor = base.limit_backward;
+ var /** number */ v_7 = base.cursor;
+ r_postlude();
+ base.cursor = v_7;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/norwegian-stemmer.js b/sphinx/search/non-minified-js/norwegian-stemmer.js
new file mode 100644
index 0000000..e176063
--- /dev/null
+++ b/sphinx/search/non-minified-js/norwegian-stemmer.js
@@ -0,0 +1,261 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+NorwegianStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["a", -1, 1],
+ ["e", -1, 1],
+ ["ede", 1, 1],
+ ["ande", 1, 1],
+ ["ende", 1, 1],
+ ["ane", 1, 1],
+ ["ene", 1, 1],
+ ["hetene", 6, 1],
+ ["erte", 1, 3],
+ ["en", -1, 1],
+ ["heten", 9, 1],
+ ["ar", -1, 1],
+ ["er", -1, 1],
+ ["heter", 12, 1],
+ ["s", -1, 2],
+ ["as", 14, 1],
+ ["es", 14, 1],
+ ["edes", 16, 1],
+ ["endes", 16, 1],
+ ["enes", 16, 1],
+ ["hetenes", 19, 1],
+ ["ens", 14, 1],
+ ["hetens", 21, 1],
+ ["ers", 14, 1],
+ ["ets", 14, 1],
+ ["et", -1, 1],
+ ["het", 25, 1],
+ ["ert", -1, 3],
+ ["ast", -1, 1]
+ ];
+
+ /** @const */ var a_1 = [
+ ["dt", -1, -1],
+ ["vt", -1, -1]
+ ];
+
+ /** @const */ var a_2 = [
+ ["leg", -1, 1],
+ ["eleg", 0, 1],
+ ["ig", -1, 1],
+ ["eig", 2, 1],
+ ["lig", 2, 1],
+ ["elig", 4, 1],
+ ["els", -1, 1],
+ ["lov", -1, 1],
+ ["elov", 7, 1],
+ ["slov", 7, 1],
+ ["hetslov", 9, 1]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128];
+
+ /** @const */ var /** Array<int> */ g_s_ending = [119, 125, 149, 1];
+
+ var /** number */ I_x = 0;
+ var /** number */ I_p1 = 0;
+
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_p1 = base.limit;
+ var /** number */ v_1 = base.cursor;
+ {
+ var /** number */ c1 = base.cursor + 3;
+ if (c1 > base.limit)
+ {
+ return false;
+ }
+ base.cursor = c1;
+ }
+ I_x = base.cursor;
+ base.cursor = v_1;
+ golab0: while(true)
+ {
+ var /** number */ v_2 = base.cursor;
+ lab1: {
+ if (!(base.in_grouping(g_v, 97, 248)))
+ {
+ break lab1;
+ }
+ base.cursor = v_2;
+ break golab0;
+ }
+ base.cursor = v_2;
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ golab2: while(true)
+ {
+ lab3: {
+ if (!(base.out_grouping(g_v, 97, 248)))
+ {
+ break lab3;
+ }
+ break golab2;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ lab4: {
+ if (!(I_p1 < I_x))
+ {
+ break lab4;
+ }
+ I_p1 = I_x;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_main_suffix() {
+ var /** number */ among_var;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_0);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ lab0: {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.in_grouping_b(g_s_ending, 98, 122)))
+ {
+ break lab1;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_3;
+ if (!(base.eq_s_b("k")))
+ {
+ return false;
+ }
+ if (!(base.out_grouping_b(g_v, 97, 248)))
+ {
+ return false;
+ }
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("er"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_consonant_pair() {
+ var /** number */ v_1 = base.limit - base.cursor;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_3 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ if (base.find_among_b(a_1) == 0)
+ {
+ base.limit_backward = v_3;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_3;
+ base.cursor = base.limit - v_1;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_other_suffix() {
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ if (base.find_among_b(a_2) == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_mark_regions();
+ base.cursor = v_1;
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_2 = base.limit - base.cursor;
+ r_main_suffix();
+ base.cursor = base.limit - v_2;
+ var /** number */ v_3 = base.limit - base.cursor;
+ r_consonant_pair();
+ base.cursor = base.limit - v_3;
+ var /** number */ v_4 = base.limit - base.cursor;
+ r_other_suffix();
+ base.cursor = base.limit - v_4;
+ base.cursor = base.limit_backward;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/porter-stemmer.js b/sphinx/search/non-minified-js/porter-stemmer.js
new file mode 100644
index 0000000..0747d2c
--- /dev/null
+++ b/sphinx/search/non-minified-js/porter-stemmer.js
@@ -0,0 +1,749 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+PorterStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["s", -1, 3],
+ ["ies", 0, 2],
+ ["sses", 0, 1],
+ ["ss", 0, -1]
+ ];
+
+ /** @const */ var a_1 = [
+ ["", -1, 3],
+ ["bb", 0, 2],
+ ["dd", 0, 2],
+ ["ff", 0, 2],
+ ["gg", 0, 2],
+ ["bl", 0, 1],
+ ["mm", 0, 2],
+ ["nn", 0, 2],
+ ["pp", 0, 2],
+ ["rr", 0, 2],
+ ["at", 0, 1],
+ ["tt", 0, 2],
+ ["iz", 0, 1]
+ ];
+
+ /** @const */ var a_2 = [
+ ["ed", -1, 2],
+ ["eed", 0, 1],
+ ["ing", -1, 2]
+ ];
+
+ /** @const */ var a_3 = [
+ ["anci", -1, 3],
+ ["enci", -1, 2],
+ ["abli", -1, 4],
+ ["eli", -1, 6],
+ ["alli", -1, 9],
+ ["ousli", -1, 11],
+ ["entli", -1, 5],
+ ["aliti", -1, 9],
+ ["biliti", -1, 13],
+ ["iviti", -1, 12],
+ ["tional", -1, 1],
+ ["ational", 10, 8],
+ ["alism", -1, 9],
+ ["ation", -1, 8],
+ ["ization", 13, 7],
+ ["izer", -1, 7],
+ ["ator", -1, 8],
+ ["iveness", -1, 12],
+ ["fulness", -1, 10],
+ ["ousness", -1, 11]
+ ];
+
+ /** @const */ var a_4 = [
+ ["icate", -1, 2],
+ ["ative", -1, 3],
+ ["alize", -1, 1],
+ ["iciti", -1, 2],
+ ["ical", -1, 2],
+ ["ful", -1, 3],
+ ["ness", -1, 3]
+ ];
+
+ /** @const */ var a_5 = [
+ ["ic", -1, 1],
+ ["ance", -1, 1],
+ ["ence", -1, 1],
+ ["able", -1, 1],
+ ["ible", -1, 1],
+ ["ate", -1, 1],
+ ["ive", -1, 1],
+ ["ize", -1, 1],
+ ["iti", -1, 1],
+ ["al", -1, 1],
+ ["ism", -1, 1],
+ ["ion", -1, 2],
+ ["er", -1, 1],
+ ["ous", -1, 1],
+ ["ant", -1, 1],
+ ["ent", -1, 1],
+ ["ment", 15, 1],
+ ["ement", 16, 1],
+ ["ou", -1, 1]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1];
+
+ /** @const */ var /** Array<int> */ g_v_WXY = [1, 17, 65, 208, 1];
+
+ var /** boolean */ B_Y_found = false;
+ var /** number */ I_p2 = 0;
+ var /** number */ I_p1 = 0;
+
+
+ /** @return {boolean} */
+ function r_shortv() {
+ if (!(base.out_grouping_b(g_v_WXY, 89, 121)))
+ {
+ return false;
+ }
+ if (!(base.in_grouping_b(g_v, 97, 121)))
+ {
+ return false;
+ }
+ if (!(base.out_grouping_b(g_v, 97, 121)))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R1() {
+ if (!(I_p1 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R2() {
+ if (!(I_p2 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_Step_1a() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_0);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("ss"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_Step_1b() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_2);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_R1())
+ {
+ return false;
+ }
+ if (!base.slice_from("ee"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ var /** number */ v_1 = base.limit - base.cursor;
+ golab0: while(true)
+ {
+ lab1: {
+ if (!(base.in_grouping_b(g_v, 97, 121)))
+ {
+ break lab1;
+ }
+ break golab0;
+ }
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ }
+ base.cursor = base.limit - v_1;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_3 = base.limit - base.cursor;
+ among_var = base.find_among_b(a_1);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ switch (among_var) {
+ case 1:
+ {
+ var /** number */ c1 = base.cursor;
+ base.insert(base.cursor, base.cursor, "e");
+ base.cursor = c1;
+ }
+ break;
+ case 2:
+ base.ket = base.cursor;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (base.cursor != I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_4 = base.limit - base.cursor;
+ if (!r_shortv())
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_4;
+ {
+ var /** number */ c2 = base.cursor;
+ base.insert(base.cursor, base.cursor, "e");
+ base.cursor = c2;
+ }
+ break;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_Step_1c() {
+ base.ket = base.cursor;
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.eq_s_b("y")))
+ {
+ break lab1;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ if (!(base.eq_s_b("Y")))
+ {
+ return false;
+ }
+ }
+ base.bra = base.cursor;
+ golab2: while(true)
+ {
+ lab3: {
+ if (!(base.in_grouping_b(g_v, 97, 121)))
+ {
+ break lab3;
+ }
+ break golab2;
+ }
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ }
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_Step_2() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_3);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("tion"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("ence"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("ance"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!base.slice_from("able"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!base.slice_from("ent"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ case 7:
+ if (!base.slice_from("ize"))
+ {
+ return false;
+ }
+ break;
+ case 8:
+ if (!base.slice_from("ate"))
+ {
+ return false;
+ }
+ break;
+ case 9:
+ if (!base.slice_from("al"))
+ {
+ return false;
+ }
+ break;
+ case 10:
+ if (!base.slice_from("ful"))
+ {
+ return false;
+ }
+ break;
+ case 11:
+ if (!base.slice_from("ous"))
+ {
+ return false;
+ }
+ break;
+ case 12:
+ if (!base.slice_from("ive"))
+ {
+ return false;
+ }
+ break;
+ case 13:
+ if (!base.slice_from("ble"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_Step_3() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_4);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("al"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("ic"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_Step_4() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_5);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.eq_s_b("s")))
+ {
+ break lab1;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ if (!(base.eq_s_b("t")))
+ {
+ return false;
+ }
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_Step_5a() {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("e")))
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!r_R2())
+ {
+ break lab1;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ if (!r_R1())
+ {
+ return false;
+ }
+ {
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab2: {
+ if (!r_shortv())
+ {
+ break lab2;
+ }
+ return false;
+ }
+ base.cursor = base.limit - v_2;
+ }
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_Step_5b() {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("l")))
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!(base.eq_s_b("l")))
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ B_Y_found = false;
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ if (!(base.eq_s("y")))
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ if (!base.slice_from("Y"))
+ {
+ return false;
+ }
+ B_Y_found = true;
+ }
+ base.cursor = v_1;
+ var /** number */ v_2 = base.cursor;
+ lab1: {
+ while(true)
+ {
+ var /** number */ v_3 = base.cursor;
+ lab2: {
+ golab3: while(true)
+ {
+ var /** number */ v_4 = base.cursor;
+ lab4: {
+ if (!(base.in_grouping(g_v, 97, 121)))
+ {
+ break lab4;
+ }
+ base.bra = base.cursor;
+ if (!(base.eq_s("y")))
+ {
+ break lab4;
+ }
+ base.ket = base.cursor;
+ base.cursor = v_4;
+ break golab3;
+ }
+ base.cursor = v_4;
+ if (base.cursor >= base.limit)
+ {
+ break lab2;
+ }
+ base.cursor++;
+ }
+ if (!base.slice_from("Y"))
+ {
+ return false;
+ }
+ B_Y_found = true;
+ continue;
+ }
+ base.cursor = v_3;
+ break;
+ }
+ }
+ base.cursor = v_2;
+ I_p1 = base.limit;
+ I_p2 = base.limit;
+ var /** number */ v_5 = base.cursor;
+ lab5: {
+ golab6: while(true)
+ {
+ lab7: {
+ if (!(base.in_grouping(g_v, 97, 121)))
+ {
+ break lab7;
+ }
+ break golab6;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab5;
+ }
+ base.cursor++;
+ }
+ golab8: while(true)
+ {
+ lab9: {
+ if (!(base.out_grouping(g_v, 97, 121)))
+ {
+ break lab9;
+ }
+ break golab8;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab5;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ golab10: while(true)
+ {
+ lab11: {
+ if (!(base.in_grouping(g_v, 97, 121)))
+ {
+ break lab11;
+ }
+ break golab10;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab5;
+ }
+ base.cursor++;
+ }
+ golab12: while(true)
+ {
+ lab13: {
+ if (!(base.out_grouping(g_v, 97, 121)))
+ {
+ break lab13;
+ }
+ break golab12;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab5;
+ }
+ base.cursor++;
+ }
+ I_p2 = base.cursor;
+ }
+ base.cursor = v_5;
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_10 = base.limit - base.cursor;
+ r_Step_1a();
+ base.cursor = base.limit - v_10;
+ var /** number */ v_11 = base.limit - base.cursor;
+ r_Step_1b();
+ base.cursor = base.limit - v_11;
+ var /** number */ v_12 = base.limit - base.cursor;
+ r_Step_1c();
+ base.cursor = base.limit - v_12;
+ var /** number */ v_13 = base.limit - base.cursor;
+ r_Step_2();
+ base.cursor = base.limit - v_13;
+ var /** number */ v_14 = base.limit - base.cursor;
+ r_Step_3();
+ base.cursor = base.limit - v_14;
+ var /** number */ v_15 = base.limit - base.cursor;
+ r_Step_4();
+ base.cursor = base.limit - v_15;
+ var /** number */ v_16 = base.limit - base.cursor;
+ r_Step_5a();
+ base.cursor = base.limit - v_16;
+ var /** number */ v_17 = base.limit - base.cursor;
+ r_Step_5b();
+ base.cursor = base.limit - v_17;
+ base.cursor = base.limit_backward;
+ var /** number */ v_18 = base.cursor;
+ lab14: {
+ if (!B_Y_found)
+ {
+ break lab14;
+ }
+ while(true)
+ {
+ var /** number */ v_19 = base.cursor;
+ lab15: {
+ golab16: while(true)
+ {
+ var /** number */ v_20 = base.cursor;
+ lab17: {
+ base.bra = base.cursor;
+ if (!(base.eq_s("Y")))
+ {
+ break lab17;
+ }
+ base.ket = base.cursor;
+ base.cursor = v_20;
+ break golab16;
+ }
+ base.cursor = v_20;
+ if (base.cursor >= base.limit)
+ {
+ break lab15;
+ }
+ base.cursor++;
+ }
+ if (!base.slice_from("y"))
+ {
+ return false;
+ }
+ continue;
+ }
+ base.cursor = v_19;
+ break;
+ }
+ }
+ base.cursor = v_18;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/portuguese-stemmer.js b/sphinx/search/non-minified-js/portuguese-stemmer.js
new file mode 100644
index 0000000..662b976
--- /dev/null
+++ b/sphinx/search/non-minified-js/portuguese-stemmer.js
@@ -0,0 +1,914 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+PortugueseStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["", -1, 3],
+ ["\u00E3", 0, 1],
+ ["\u00F5", 0, 2]
+ ];
+
+ /** @const */ var a_1 = [
+ ["", -1, 3],
+ ["a~", 0, 1],
+ ["o~", 0, 2]
+ ];
+
+ /** @const */ var a_2 = [
+ ["ic", -1, -1],
+ ["ad", -1, -1],
+ ["os", -1, -1],
+ ["iv", -1, 1]
+ ];
+
+ /** @const */ var a_3 = [
+ ["ante", -1, 1],
+ ["avel", -1, 1],
+ ["\u00EDvel", -1, 1]
+ ];
+
+ /** @const */ var a_4 = [
+ ["ic", -1, 1],
+ ["abil", -1, 1],
+ ["iv", -1, 1]
+ ];
+
+ /** @const */ var a_5 = [
+ ["ica", -1, 1],
+ ["\u00E2ncia", -1, 1],
+ ["\u00EAncia", -1, 4],
+ ["logia", -1, 2],
+ ["ira", -1, 9],
+ ["adora", -1, 1],
+ ["osa", -1, 1],
+ ["ista", -1, 1],
+ ["iva", -1, 8],
+ ["eza", -1, 1],
+ ["idade", -1, 7],
+ ["ante", -1, 1],
+ ["mente", -1, 6],
+ ["amente", 12, 5],
+ ["\u00E1vel", -1, 1],
+ ["\u00EDvel", -1, 1],
+ ["ico", -1, 1],
+ ["ismo", -1, 1],
+ ["oso", -1, 1],
+ ["amento", -1, 1],
+ ["imento", -1, 1],
+ ["ivo", -1, 8],
+ ["a\u00E7a~o", -1, 1],
+ ["u\u00E7a~o", -1, 3],
+ ["ador", -1, 1],
+ ["icas", -1, 1],
+ ["\u00EAncias", -1, 4],
+ ["logias", -1, 2],
+ ["iras", -1, 9],
+ ["adoras", -1, 1],
+ ["osas", -1, 1],
+ ["istas", -1, 1],
+ ["ivas", -1, 8],
+ ["ezas", -1, 1],
+ ["idades", -1, 7],
+ ["adores", -1, 1],
+ ["antes", -1, 1],
+ ["a\u00E7o~es", -1, 1],
+ ["u\u00E7o~es", -1, 3],
+ ["icos", -1, 1],
+ ["ismos", -1, 1],
+ ["osos", -1, 1],
+ ["amentos", -1, 1],
+ ["imentos", -1, 1],
+ ["ivos", -1, 8]
+ ];
+
+ /** @const */ var a_6 = [
+ ["ada", -1, 1],
+ ["ida", -1, 1],
+ ["ia", -1, 1],
+ ["aria", 2, 1],
+ ["eria", 2, 1],
+ ["iria", 2, 1],
+ ["ara", -1, 1],
+ ["era", -1, 1],
+ ["ira", -1, 1],
+ ["ava", -1, 1],
+ ["asse", -1, 1],
+ ["esse", -1, 1],
+ ["isse", -1, 1],
+ ["aste", -1, 1],
+ ["este", -1, 1],
+ ["iste", -1, 1],
+ ["ei", -1, 1],
+ ["arei", 16, 1],
+ ["erei", 16, 1],
+ ["irei", 16, 1],
+ ["am", -1, 1],
+ ["iam", 20, 1],
+ ["ariam", 21, 1],
+ ["eriam", 21, 1],
+ ["iriam", 21, 1],
+ ["aram", 20, 1],
+ ["eram", 20, 1],
+ ["iram", 20, 1],
+ ["avam", 20, 1],
+ ["em", -1, 1],
+ ["arem", 29, 1],
+ ["erem", 29, 1],
+ ["irem", 29, 1],
+ ["assem", 29, 1],
+ ["essem", 29, 1],
+ ["issem", 29, 1],
+ ["ado", -1, 1],
+ ["ido", -1, 1],
+ ["ando", -1, 1],
+ ["endo", -1, 1],
+ ["indo", -1, 1],
+ ["ara~o", -1, 1],
+ ["era~o", -1, 1],
+ ["ira~o", -1, 1],
+ ["ar", -1, 1],
+ ["er", -1, 1],
+ ["ir", -1, 1],
+ ["as", -1, 1],
+ ["adas", 47, 1],
+ ["idas", 47, 1],
+ ["ias", 47, 1],
+ ["arias", 50, 1],
+ ["erias", 50, 1],
+ ["irias", 50, 1],
+ ["aras", 47, 1],
+ ["eras", 47, 1],
+ ["iras", 47, 1],
+ ["avas", 47, 1],
+ ["es", -1, 1],
+ ["ardes", 58, 1],
+ ["erdes", 58, 1],
+ ["irdes", 58, 1],
+ ["ares", 58, 1],
+ ["eres", 58, 1],
+ ["ires", 58, 1],
+ ["asses", 58, 1],
+ ["esses", 58, 1],
+ ["isses", 58, 1],
+ ["astes", 58, 1],
+ ["estes", 58, 1],
+ ["istes", 58, 1],
+ ["is", -1, 1],
+ ["ais", 71, 1],
+ ["eis", 71, 1],
+ ["areis", 73, 1],
+ ["ereis", 73, 1],
+ ["ireis", 73, 1],
+ ["\u00E1reis", 73, 1],
+ ["\u00E9reis", 73, 1],
+ ["\u00EDreis", 73, 1],
+ ["\u00E1sseis", 73, 1],
+ ["\u00E9sseis", 73, 1],
+ ["\u00EDsseis", 73, 1],
+ ["\u00E1veis", 73, 1],
+ ["\u00EDeis", 73, 1],
+ ["ar\u00EDeis", 84, 1],
+ ["er\u00EDeis", 84, 1],
+ ["ir\u00EDeis", 84, 1],
+ ["ados", -1, 1],
+ ["idos", -1, 1],
+ ["amos", -1, 1],
+ ["\u00E1ramos", 90, 1],
+ ["\u00E9ramos", 90, 1],
+ ["\u00EDramos", 90, 1],
+ ["\u00E1vamos", 90, 1],
+ ["\u00EDamos", 90, 1],
+ ["ar\u00EDamos", 95, 1],
+ ["er\u00EDamos", 95, 1],
+ ["ir\u00EDamos", 95, 1],
+ ["emos", -1, 1],
+ ["aremos", 99, 1],
+ ["eremos", 99, 1],
+ ["iremos", 99, 1],
+ ["\u00E1ssemos", 99, 1],
+ ["\u00EAssemos", 99, 1],
+ ["\u00EDssemos", 99, 1],
+ ["imos", -1, 1],
+ ["armos", -1, 1],
+ ["ermos", -1, 1],
+ ["irmos", -1, 1],
+ ["\u00E1mos", -1, 1],
+ ["ar\u00E1s", -1, 1],
+ ["er\u00E1s", -1, 1],
+ ["ir\u00E1s", -1, 1],
+ ["eu", -1, 1],
+ ["iu", -1, 1],
+ ["ou", -1, 1],
+ ["ar\u00E1", -1, 1],
+ ["er\u00E1", -1, 1],
+ ["ir\u00E1", -1, 1]
+ ];
+
+ /** @const */ var a_7 = [
+ ["a", -1, 1],
+ ["i", -1, 1],
+ ["o", -1, 1],
+ ["os", -1, 1],
+ ["\u00E1", -1, 1],
+ ["\u00ED", -1, 1],
+ ["\u00F3", -1, 1]
+ ];
+
+ /** @const */ var a_8 = [
+ ["e", -1, 1],
+ ["\u00E7", -1, 2],
+ ["\u00E9", -1, 1],
+ ["\u00EA", -1, 1]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2];
+
+ var /** number */ I_p2 = 0;
+ var /** number */ I_p1 = 0;
+ var /** number */ I_pV = 0;
+
+
+ /** @return {boolean} */
+ function r_prelude() {
+ var /** number */ among_var;
+ while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ among_var = base.find_among(a_0);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("a~"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("o~"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ break;
+ }
+ continue;
+ }
+ base.cursor = v_1;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_pV = base.limit;
+ I_p1 = base.limit;
+ I_p2 = base.limit;
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_2 = base.cursor;
+ lab2: {
+ if (!(base.in_grouping(g_v, 97, 250)))
+ {
+ break lab2;
+ }
+ lab3: {
+ var /** number */ v_3 = base.cursor;
+ lab4: {
+ if (!(base.out_grouping(g_v, 97, 250)))
+ {
+ break lab4;
+ }
+ golab5: while(true)
+ {
+ lab6: {
+ if (!(base.in_grouping(g_v, 97, 250)))
+ {
+ break lab6;
+ }
+ break golab5;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab4;
+ }
+ base.cursor++;
+ }
+ break lab3;
+ }
+ base.cursor = v_3;
+ if (!(base.in_grouping(g_v, 97, 250)))
+ {
+ break lab2;
+ }
+ golab7: while(true)
+ {
+ lab8: {
+ if (!(base.out_grouping(g_v, 97, 250)))
+ {
+ break lab8;
+ }
+ break golab7;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab2;
+ }
+ base.cursor++;
+ }
+ }
+ break lab1;
+ }
+ base.cursor = v_2;
+ if (!(base.out_grouping(g_v, 97, 250)))
+ {
+ break lab0;
+ }
+ lab9: {
+ var /** number */ v_6 = base.cursor;
+ lab10: {
+ if (!(base.out_grouping(g_v, 97, 250)))
+ {
+ break lab10;
+ }
+ golab11: while(true)
+ {
+ lab12: {
+ if (!(base.in_grouping(g_v, 97, 250)))
+ {
+ break lab12;
+ }
+ break golab11;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab10;
+ }
+ base.cursor++;
+ }
+ break lab9;
+ }
+ base.cursor = v_6;
+ if (!(base.in_grouping(g_v, 97, 250)))
+ {
+ break lab0;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ }
+ I_pV = base.cursor;
+ }
+ base.cursor = v_1;
+ var /** number */ v_8 = base.cursor;
+ lab13: {
+ golab14: while(true)
+ {
+ lab15: {
+ if (!(base.in_grouping(g_v, 97, 250)))
+ {
+ break lab15;
+ }
+ break golab14;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ golab16: while(true)
+ {
+ lab17: {
+ if (!(base.out_grouping(g_v, 97, 250)))
+ {
+ break lab17;
+ }
+ break golab16;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ golab18: while(true)
+ {
+ lab19: {
+ if (!(base.in_grouping(g_v, 97, 250)))
+ {
+ break lab19;
+ }
+ break golab18;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ golab20: while(true)
+ {
+ lab21: {
+ if (!(base.out_grouping(g_v, 97, 250)))
+ {
+ break lab21;
+ }
+ break golab20;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ I_p2 = base.cursor;
+ }
+ base.cursor = v_8;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_postlude() {
+ var /** number */ among_var;
+ while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ among_var = base.find_among(a_1);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("\u00E3"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("\u00F5"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ break;
+ }
+ continue;
+ }
+ base.cursor = v_1;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_RV() {
+ if (!(I_pV <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R1() {
+ if (!(I_p1 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R2() {
+ if (!(I_p2 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_standard_suffix() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_5);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("log"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("u"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("ente"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!r_R1())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_2);
+ if (among_var == 0)
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("at")))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ break;
+ case 6:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab1: {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_3) == 0)
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 7:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab2: {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_4) == 0)
+ {
+ base.cursor = base.limit - v_3;
+ break lab2;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_3;
+ break lab2;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 8:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab3: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("at")))
+ {
+ base.cursor = base.limit - v_4;
+ break lab3;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_4;
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 9:
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!(base.eq_s_b("e")))
+ {
+ return false;
+ }
+ if (!base.slice_from("ir"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_verb_suffix() {
+ if (base.cursor < I_pV)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_pV;
+ base.ket = base.cursor;
+ if (base.find_among_b(a_6) == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.limit_backward = v_2;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_residual_suffix() {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_7) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_residual_form() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_8);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.ket = base.cursor;
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.eq_s_b("u")))
+ {
+ break lab1;
+ }
+ base.bra = base.cursor;
+ var /** number */ v_2 = base.limit - base.cursor;
+ if (!(base.eq_s_b("g")))
+ {
+ break lab1;
+ }
+ base.cursor = base.limit - v_2;
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ if (!(base.eq_s_b("i")))
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ var /** number */ v_3 = base.limit - base.cursor;
+ if (!(base.eq_s_b("c")))
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ }
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("c"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_prelude();
+ base.cursor = v_1;
+ r_mark_regions();
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab2: {
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab3: {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab4: {
+ if (!r_standard_suffix())
+ {
+ break lab4;
+ }
+ break lab3;
+ }
+ base.cursor = base.limit - v_6;
+ if (!r_verb_suffix())
+ {
+ break lab2;
+ }
+ }
+ base.cursor = base.limit - v_5;
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab5: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("i")))
+ {
+ break lab5;
+ }
+ base.bra = base.cursor;
+ var /** number */ v_8 = base.limit - base.cursor;
+ if (!(base.eq_s_b("c")))
+ {
+ break lab5;
+ }
+ base.cursor = base.limit - v_8;
+ if (!r_RV())
+ {
+ break lab5;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ base.cursor = base.limit - v_7;
+ break lab1;
+ }
+ base.cursor = base.limit - v_4;
+ if (!r_residual_suffix())
+ {
+ break lab0;
+ }
+ }
+ }
+ base.cursor = base.limit - v_3;
+ var /** number */ v_9 = base.limit - base.cursor;
+ r_residual_form();
+ base.cursor = base.limit - v_9;
+ base.cursor = base.limit_backward;
+ var /** number */ v_10 = base.cursor;
+ r_postlude();
+ base.cursor = v_10;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/romanian-stemmer.js b/sphinx/search/non-minified-js/romanian-stemmer.js
new file mode 100644
index 0000000..67538f1
--- /dev/null
+++ b/sphinx/search/non-minified-js/romanian-stemmer.js
@@ -0,0 +1,872 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+RomanianStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["", -1, 3],
+ ["I", 0, 1],
+ ["U", 0, 2]
+ ];
+
+ /** @const */ var a_1 = [
+ ["ea", -1, 3],
+ ["a\u0163ia", -1, 7],
+ ["aua", -1, 2],
+ ["iua", -1, 4],
+ ["a\u0163ie", -1, 7],
+ ["ele", -1, 3],
+ ["ile", -1, 5],
+ ["iile", 6, 4],
+ ["iei", -1, 4],
+ ["atei", -1, 6],
+ ["ii", -1, 4],
+ ["ului", -1, 1],
+ ["ul", -1, 1],
+ ["elor", -1, 3],
+ ["ilor", -1, 4],
+ ["iilor", 14, 4]
+ ];
+
+ /** @const */ var a_2 = [
+ ["icala", -1, 4],
+ ["iciva", -1, 4],
+ ["ativa", -1, 5],
+ ["itiva", -1, 6],
+ ["icale", -1, 4],
+ ["a\u0163iune", -1, 5],
+ ["i\u0163iune", -1, 6],
+ ["atoare", -1, 5],
+ ["itoare", -1, 6],
+ ["\u0103toare", -1, 5],
+ ["icitate", -1, 4],
+ ["abilitate", -1, 1],
+ ["ibilitate", -1, 2],
+ ["ivitate", -1, 3],
+ ["icive", -1, 4],
+ ["ative", -1, 5],
+ ["itive", -1, 6],
+ ["icali", -1, 4],
+ ["atori", -1, 5],
+ ["icatori", 18, 4],
+ ["itori", -1, 6],
+ ["\u0103tori", -1, 5],
+ ["icitati", -1, 4],
+ ["abilitati", -1, 1],
+ ["ivitati", -1, 3],
+ ["icivi", -1, 4],
+ ["ativi", -1, 5],
+ ["itivi", -1, 6],
+ ["icit\u0103i", -1, 4],
+ ["abilit\u0103i", -1, 1],
+ ["ivit\u0103i", -1, 3],
+ ["icit\u0103\u0163i", -1, 4],
+ ["abilit\u0103\u0163i", -1, 1],
+ ["ivit\u0103\u0163i", -1, 3],
+ ["ical", -1, 4],
+ ["ator", -1, 5],
+ ["icator", 35, 4],
+ ["itor", -1, 6],
+ ["\u0103tor", -1, 5],
+ ["iciv", -1, 4],
+ ["ativ", -1, 5],
+ ["itiv", -1, 6],
+ ["ical\u0103", -1, 4],
+ ["iciv\u0103", -1, 4],
+ ["ativ\u0103", -1, 5],
+ ["itiv\u0103", -1, 6]
+ ];
+
+ /** @const */ var a_3 = [
+ ["ica", -1, 1],
+ ["abila", -1, 1],
+ ["ibila", -1, 1],
+ ["oasa", -1, 1],
+ ["ata", -1, 1],
+ ["ita", -1, 1],
+ ["anta", -1, 1],
+ ["ista", -1, 3],
+ ["uta", -1, 1],
+ ["iva", -1, 1],
+ ["ic", -1, 1],
+ ["ice", -1, 1],
+ ["abile", -1, 1],
+ ["ibile", -1, 1],
+ ["isme", -1, 3],
+ ["iune", -1, 2],
+ ["oase", -1, 1],
+ ["ate", -1, 1],
+ ["itate", 17, 1],
+ ["ite", -1, 1],
+ ["ante", -1, 1],
+ ["iste", -1, 3],
+ ["ute", -1, 1],
+ ["ive", -1, 1],
+ ["ici", -1, 1],
+ ["abili", -1, 1],
+ ["ibili", -1, 1],
+ ["iuni", -1, 2],
+ ["atori", -1, 1],
+ ["osi", -1, 1],
+ ["ati", -1, 1],
+ ["itati", 30, 1],
+ ["iti", -1, 1],
+ ["anti", -1, 1],
+ ["isti", -1, 3],
+ ["uti", -1, 1],
+ ["i\u015Fti", -1, 3],
+ ["ivi", -1, 1],
+ ["it\u0103i", -1, 1],
+ ["o\u015Fi", -1, 1],
+ ["it\u0103\u0163i", -1, 1],
+ ["abil", -1, 1],
+ ["ibil", -1, 1],
+ ["ism", -1, 3],
+ ["ator", -1, 1],
+ ["os", -1, 1],
+ ["at", -1, 1],
+ ["it", -1, 1],
+ ["ant", -1, 1],
+ ["ist", -1, 3],
+ ["ut", -1, 1],
+ ["iv", -1, 1],
+ ["ic\u0103", -1, 1],
+ ["abil\u0103", -1, 1],
+ ["ibil\u0103", -1, 1],
+ ["oas\u0103", -1, 1],
+ ["at\u0103", -1, 1],
+ ["it\u0103", -1, 1],
+ ["ant\u0103", -1, 1],
+ ["ist\u0103", -1, 3],
+ ["ut\u0103", -1, 1],
+ ["iv\u0103", -1, 1]
+ ];
+
+ /** @const */ var a_4 = [
+ ["ea", -1, 1],
+ ["ia", -1, 1],
+ ["esc", -1, 1],
+ ["\u0103sc", -1, 1],
+ ["ind", -1, 1],
+ ["\u00E2nd", -1, 1],
+ ["are", -1, 1],
+ ["ere", -1, 1],
+ ["ire", -1, 1],
+ ["\u00E2re", -1, 1],
+ ["se", -1, 2],
+ ["ase", 10, 1],
+ ["sese", 10, 2],
+ ["ise", 10, 1],
+ ["use", 10, 1],
+ ["\u00E2se", 10, 1],
+ ["e\u015Fte", -1, 1],
+ ["\u0103\u015Fte", -1, 1],
+ ["eze", -1, 1],
+ ["ai", -1, 1],
+ ["eai", 19, 1],
+ ["iai", 19, 1],
+ ["sei", -1, 2],
+ ["e\u015Fti", -1, 1],
+ ["\u0103\u015Fti", -1, 1],
+ ["ui", -1, 1],
+ ["ezi", -1, 1],
+ ["\u00E2i", -1, 1],
+ ["a\u015Fi", -1, 1],
+ ["se\u015Fi", -1, 2],
+ ["ase\u015Fi", 29, 1],
+ ["sese\u015Fi", 29, 2],
+ ["ise\u015Fi", 29, 1],
+ ["use\u015Fi", 29, 1],
+ ["\u00E2se\u015Fi", 29, 1],
+ ["i\u015Fi", -1, 1],
+ ["u\u015Fi", -1, 1],
+ ["\u00E2\u015Fi", -1, 1],
+ ["a\u0163i", -1, 2],
+ ["ea\u0163i", 38, 1],
+ ["ia\u0163i", 38, 1],
+ ["e\u0163i", -1, 2],
+ ["i\u0163i", -1, 2],
+ ["\u00E2\u0163i", -1, 2],
+ ["ar\u0103\u0163i", -1, 1],
+ ["ser\u0103\u0163i", -1, 2],
+ ["aser\u0103\u0163i", 45, 1],
+ ["seser\u0103\u0163i", 45, 2],
+ ["iser\u0103\u0163i", 45, 1],
+ ["user\u0103\u0163i", 45, 1],
+ ["\u00E2ser\u0103\u0163i", 45, 1],
+ ["ir\u0103\u0163i", -1, 1],
+ ["ur\u0103\u0163i", -1, 1],
+ ["\u00E2r\u0103\u0163i", -1, 1],
+ ["am", -1, 1],
+ ["eam", 54, 1],
+ ["iam", 54, 1],
+ ["em", -1, 2],
+ ["asem", 57, 1],
+ ["sesem", 57, 2],
+ ["isem", 57, 1],
+ ["usem", 57, 1],
+ ["\u00E2sem", 57, 1],
+ ["im", -1, 2],
+ ["\u00E2m", -1, 2],
+ ["\u0103m", -1, 2],
+ ["ar\u0103m", 65, 1],
+ ["ser\u0103m", 65, 2],
+ ["aser\u0103m", 67, 1],
+ ["seser\u0103m", 67, 2],
+ ["iser\u0103m", 67, 1],
+ ["user\u0103m", 67, 1],
+ ["\u00E2ser\u0103m", 67, 1],
+ ["ir\u0103m", 65, 1],
+ ["ur\u0103m", 65, 1],
+ ["\u00E2r\u0103m", 65, 1],
+ ["au", -1, 1],
+ ["eau", 76, 1],
+ ["iau", 76, 1],
+ ["indu", -1, 1],
+ ["\u00E2ndu", -1, 1],
+ ["ez", -1, 1],
+ ["easc\u0103", -1, 1],
+ ["ar\u0103", -1, 1],
+ ["ser\u0103", -1, 2],
+ ["aser\u0103", 84, 1],
+ ["seser\u0103", 84, 2],
+ ["iser\u0103", 84, 1],
+ ["user\u0103", 84, 1],
+ ["\u00E2ser\u0103", 84, 1],
+ ["ir\u0103", -1, 1],
+ ["ur\u0103", -1, 1],
+ ["\u00E2r\u0103", -1, 1],
+ ["eaz\u0103", -1, 1]
+ ];
+
+ /** @const */ var a_5 = [
+ ["a", -1, 1],
+ ["e", -1, 1],
+ ["ie", 1, 1],
+ ["i", -1, 1],
+ ["\u0103", -1, 1]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 4];
+
+ var /** boolean */ B_standard_suffix_removed = false;
+ var /** number */ I_p2 = 0;
+ var /** number */ I_p1 = 0;
+ var /** number */ I_pV = 0;
+
+
+ /** @return {boolean} */
+ function r_prelude() {
+ while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ golab1: while(true)
+ {
+ var /** number */ v_2 = base.cursor;
+ lab2: {
+ if (!(base.in_grouping(g_v, 97, 259)))
+ {
+ break lab2;
+ }
+ base.bra = base.cursor;
+ lab3: {
+ var /** number */ v_3 = base.cursor;
+ lab4: {
+ if (!(base.eq_s("u")))
+ {
+ break lab4;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping(g_v, 97, 259)))
+ {
+ break lab4;
+ }
+ if (!base.slice_from("U"))
+ {
+ return false;
+ }
+ break lab3;
+ }
+ base.cursor = v_3;
+ if (!(base.eq_s("i")))
+ {
+ break lab2;
+ }
+ base.ket = base.cursor;
+ if (!(base.in_grouping(g_v, 97, 259)))
+ {
+ break lab2;
+ }
+ if (!base.slice_from("I"))
+ {
+ return false;
+ }
+ }
+ base.cursor = v_2;
+ break golab1;
+ }
+ base.cursor = v_2;
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ continue;
+ }
+ base.cursor = v_1;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_pV = base.limit;
+ I_p1 = base.limit;
+ I_p2 = base.limit;
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_2 = base.cursor;
+ lab2: {
+ if (!(base.in_grouping(g_v, 97, 259)))
+ {
+ break lab2;
+ }
+ lab3: {
+ var /** number */ v_3 = base.cursor;
+ lab4: {
+ if (!(base.out_grouping(g_v, 97, 259)))
+ {
+ break lab4;
+ }
+ golab5: while(true)
+ {
+ lab6: {
+ if (!(base.in_grouping(g_v, 97, 259)))
+ {
+ break lab6;
+ }
+ break golab5;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab4;
+ }
+ base.cursor++;
+ }
+ break lab3;
+ }
+ base.cursor = v_3;
+ if (!(base.in_grouping(g_v, 97, 259)))
+ {
+ break lab2;
+ }
+ golab7: while(true)
+ {
+ lab8: {
+ if (!(base.out_grouping(g_v, 97, 259)))
+ {
+ break lab8;
+ }
+ break golab7;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab2;
+ }
+ base.cursor++;
+ }
+ }
+ break lab1;
+ }
+ base.cursor = v_2;
+ if (!(base.out_grouping(g_v, 97, 259)))
+ {
+ break lab0;
+ }
+ lab9: {
+ var /** number */ v_6 = base.cursor;
+ lab10: {
+ if (!(base.out_grouping(g_v, 97, 259)))
+ {
+ break lab10;
+ }
+ golab11: while(true)
+ {
+ lab12: {
+ if (!(base.in_grouping(g_v, 97, 259)))
+ {
+ break lab12;
+ }
+ break golab11;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab10;
+ }
+ base.cursor++;
+ }
+ break lab9;
+ }
+ base.cursor = v_6;
+ if (!(base.in_grouping(g_v, 97, 259)))
+ {
+ break lab0;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ }
+ I_pV = base.cursor;
+ }
+ base.cursor = v_1;
+ var /** number */ v_8 = base.cursor;
+ lab13: {
+ golab14: while(true)
+ {
+ lab15: {
+ if (!(base.in_grouping(g_v, 97, 259)))
+ {
+ break lab15;
+ }
+ break golab14;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ golab16: while(true)
+ {
+ lab17: {
+ if (!(base.out_grouping(g_v, 97, 259)))
+ {
+ break lab17;
+ }
+ break golab16;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ golab18: while(true)
+ {
+ lab19: {
+ if (!(base.in_grouping(g_v, 97, 259)))
+ {
+ break lab19;
+ }
+ break golab18;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ golab20: while(true)
+ {
+ lab21: {
+ if (!(base.out_grouping(g_v, 97, 259)))
+ {
+ break lab21;
+ }
+ break golab20;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ I_p2 = base.cursor;
+ }
+ base.cursor = v_8;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_postlude() {
+ var /** number */ among_var;
+ while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ among_var = base.find_among(a_0);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("u"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ break;
+ }
+ continue;
+ }
+ base.cursor = v_1;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_RV() {
+ if (!(I_pV <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R1() {
+ if (!(I_p1 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R2() {
+ if (!(I_p2 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_step_0() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_1);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ if (!(base.eq_s_b("ab")))
+ {
+ break lab0;
+ }
+ return false;
+ }
+ base.cursor = base.limit - v_1;
+ }
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (!base.slice_from("at"))
+ {
+ return false;
+ }
+ break;
+ case 7:
+ if (!base.slice_from("a\u0163i"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_combo_suffix() {
+ var /** number */ among_var;
+ var /** number */ v_1 = base.limit - base.cursor;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_2);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R1())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("abil"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("ibil"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("iv"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!base.slice_from("ic"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!base.slice_from("at"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (!base.slice_from("it"))
+ {
+ return false;
+ }
+ break;
+ }
+ B_standard_suffix_removed = true;
+ base.cursor = base.limit - v_1;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_standard_suffix() {
+ var /** number */ among_var;
+ B_standard_suffix_removed = false;
+ while(true)
+ {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ if (!r_combo_suffix())
+ {
+ break lab0;
+ }
+ continue;
+ }
+ base.cursor = base.limit - v_1;
+ break;
+ }
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_3);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!(base.eq_s_b("\u0163")))
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_from("t"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("ist"))
+ {
+ return false;
+ }
+ break;
+ }
+ B_standard_suffix_removed = true;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_verb_suffix() {
+ var /** number */ among_var;
+ if (base.cursor < I_pV)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_pV;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_4);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ lab0: {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.out_grouping_b(g_v, 97, 259)))
+ {
+ break lab1;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_3;
+ if (!(base.eq_s_b("u")))
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ base.limit_backward = v_2;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_vowel_suffix() {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_5) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_prelude();
+ base.cursor = v_1;
+ r_mark_regions();
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_3 = base.limit - base.cursor;
+ r_step_0();
+ base.cursor = base.limit - v_3;
+ var /** number */ v_4 = base.limit - base.cursor;
+ r_standard_suffix();
+ base.cursor = base.limit - v_4;
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab2: {
+ if (!B_standard_suffix_removed)
+ {
+ break lab2;
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_6;
+ if (!r_verb_suffix())
+ {
+ break lab0;
+ }
+ }
+ }
+ base.cursor = base.limit - v_5;
+ var /** number */ v_7 = base.limit - base.cursor;
+ r_vowel_suffix();
+ base.cursor = base.limit - v_7;
+ base.cursor = base.limit_backward;
+ var /** number */ v_8 = base.cursor;
+ r_postlude();
+ base.cursor = v_8;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/russian-stemmer.js b/sphinx/search/non-minified-js/russian-stemmer.js
new file mode 100644
index 0000000..28ded5f
--- /dev/null
+++ b/sphinx/search/non-minified-js/russian-stemmer.js
@@ -0,0 +1,624 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+RussianStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["\u0432", -1, 1],
+ ["\u0438\u0432", 0, 2],
+ ["\u044B\u0432", 0, 2],
+ ["\u0432\u0448\u0438", -1, 1],
+ ["\u0438\u0432\u0448\u0438", 3, 2],
+ ["\u044B\u0432\u0448\u0438", 3, 2],
+ ["\u0432\u0448\u0438\u0441\u044C", -1, 1],
+ ["\u0438\u0432\u0448\u0438\u0441\u044C", 6, 2],
+ ["\u044B\u0432\u0448\u0438\u0441\u044C", 6, 2]
+ ];
+
+ /** @const */ var a_1 = [
+ ["\u0435\u0435", -1, 1],
+ ["\u0438\u0435", -1, 1],
+ ["\u043E\u0435", -1, 1],
+ ["\u044B\u0435", -1, 1],
+ ["\u0438\u043C\u0438", -1, 1],
+ ["\u044B\u043C\u0438", -1, 1],
+ ["\u0435\u0439", -1, 1],
+ ["\u0438\u0439", -1, 1],
+ ["\u043E\u0439", -1, 1],
+ ["\u044B\u0439", -1, 1],
+ ["\u0435\u043C", -1, 1],
+ ["\u0438\u043C", -1, 1],
+ ["\u043E\u043C", -1, 1],
+ ["\u044B\u043C", -1, 1],
+ ["\u0435\u0433\u043E", -1, 1],
+ ["\u043E\u0433\u043E", -1, 1],
+ ["\u0435\u043C\u0443", -1, 1],
+ ["\u043E\u043C\u0443", -1, 1],
+ ["\u0438\u0445", -1, 1],
+ ["\u044B\u0445", -1, 1],
+ ["\u0435\u044E", -1, 1],
+ ["\u043E\u044E", -1, 1],
+ ["\u0443\u044E", -1, 1],
+ ["\u044E\u044E", -1, 1],
+ ["\u0430\u044F", -1, 1],
+ ["\u044F\u044F", -1, 1]
+ ];
+
+ /** @const */ var a_2 = [
+ ["\u0435\u043C", -1, 1],
+ ["\u043D\u043D", -1, 1],
+ ["\u0432\u0448", -1, 1],
+ ["\u0438\u0432\u0448", 2, 2],
+ ["\u044B\u0432\u0448", 2, 2],
+ ["\u0449", -1, 1],
+ ["\u044E\u0449", 5, 1],
+ ["\u0443\u044E\u0449", 6, 2]
+ ];
+
+ /** @const */ var a_3 = [
+ ["\u0441\u044C", -1, 1],
+ ["\u0441\u044F", -1, 1]
+ ];
+
+ /** @const */ var a_4 = [
+ ["\u043B\u0430", -1, 1],
+ ["\u0438\u043B\u0430", 0, 2],
+ ["\u044B\u043B\u0430", 0, 2],
+ ["\u043D\u0430", -1, 1],
+ ["\u0435\u043D\u0430", 3, 2],
+ ["\u0435\u0442\u0435", -1, 1],
+ ["\u0438\u0442\u0435", -1, 2],
+ ["\u0439\u0442\u0435", -1, 1],
+ ["\u0435\u0439\u0442\u0435", 7, 2],
+ ["\u0443\u0439\u0442\u0435", 7, 2],
+ ["\u043B\u0438", -1, 1],
+ ["\u0438\u043B\u0438", 10, 2],
+ ["\u044B\u043B\u0438", 10, 2],
+ ["\u0439", -1, 1],
+ ["\u0435\u0439", 13, 2],
+ ["\u0443\u0439", 13, 2],
+ ["\u043B", -1, 1],
+ ["\u0438\u043B", 16, 2],
+ ["\u044B\u043B", 16, 2],
+ ["\u0435\u043C", -1, 1],
+ ["\u0438\u043C", -1, 2],
+ ["\u044B\u043C", -1, 2],
+ ["\u043D", -1, 1],
+ ["\u0435\u043D", 22, 2],
+ ["\u043B\u043E", -1, 1],
+ ["\u0438\u043B\u043E", 24, 2],
+ ["\u044B\u043B\u043E", 24, 2],
+ ["\u043D\u043E", -1, 1],
+ ["\u0435\u043D\u043E", 27, 2],
+ ["\u043D\u043D\u043E", 27, 1],
+ ["\u0435\u0442", -1, 1],
+ ["\u0443\u0435\u0442", 30, 2],
+ ["\u0438\u0442", -1, 2],
+ ["\u044B\u0442", -1, 2],
+ ["\u044E\u0442", -1, 1],
+ ["\u0443\u044E\u0442", 34, 2],
+ ["\u044F\u0442", -1, 2],
+ ["\u043D\u044B", -1, 1],
+ ["\u0435\u043D\u044B", 37, 2],
+ ["\u0442\u044C", -1, 1],
+ ["\u0438\u0442\u044C", 39, 2],
+ ["\u044B\u0442\u044C", 39, 2],
+ ["\u0435\u0448\u044C", -1, 1],
+ ["\u0438\u0448\u044C", -1, 2],
+ ["\u044E", -1, 2],
+ ["\u0443\u044E", 44, 2]
+ ];
+
+ /** @const */ var a_5 = [
+ ["\u0430", -1, 1],
+ ["\u0435\u0432", -1, 1],
+ ["\u043E\u0432", -1, 1],
+ ["\u0435", -1, 1],
+ ["\u0438\u0435", 3, 1],
+ ["\u044C\u0435", 3, 1],
+ ["\u0438", -1, 1],
+ ["\u0435\u0438", 6, 1],
+ ["\u0438\u0438", 6, 1],
+ ["\u0430\u043C\u0438", 6, 1],
+ ["\u044F\u043C\u0438", 6, 1],
+ ["\u0438\u044F\u043C\u0438", 10, 1],
+ ["\u0439", -1, 1],
+ ["\u0435\u0439", 12, 1],
+ ["\u0438\u0435\u0439", 13, 1],
+ ["\u0438\u0439", 12, 1],
+ ["\u043E\u0439", 12, 1],
+ ["\u0430\u043C", -1, 1],
+ ["\u0435\u043C", -1, 1],
+ ["\u0438\u0435\u043C", 18, 1],
+ ["\u043E\u043C", -1, 1],
+ ["\u044F\u043C", -1, 1],
+ ["\u0438\u044F\u043C", 21, 1],
+ ["\u043E", -1, 1],
+ ["\u0443", -1, 1],
+ ["\u0430\u0445", -1, 1],
+ ["\u044F\u0445", -1, 1],
+ ["\u0438\u044F\u0445", 26, 1],
+ ["\u044B", -1, 1],
+ ["\u044C", -1, 1],
+ ["\u044E", -1, 1],
+ ["\u0438\u044E", 30, 1],
+ ["\u044C\u044E", 30, 1],
+ ["\u044F", -1, 1],
+ ["\u0438\u044F", 33, 1],
+ ["\u044C\u044F", 33, 1]
+ ];
+
+ /** @const */ var a_6 = [
+ ["\u043E\u0441\u0442", -1, 1],
+ ["\u043E\u0441\u0442\u044C", -1, 1]
+ ];
+
+ /** @const */ var a_7 = [
+ ["\u0435\u0439\u0448\u0435", -1, 1],
+ ["\u043D", -1, 2],
+ ["\u0435\u0439\u0448", -1, 1],
+ ["\u044C", -1, 3]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [33, 65, 8, 232];
+
+ var /** number */ I_p2 = 0;
+ var /** number */ I_pV = 0;
+
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_pV = base.limit;
+ I_p2 = base.limit;
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ golab1: while(true)
+ {
+ lab2: {
+ if (!(base.in_grouping(g_v, 1072, 1103)))
+ {
+ break lab2;
+ }
+ break golab1;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ I_pV = base.cursor;
+ golab3: while(true)
+ {
+ lab4: {
+ if (!(base.out_grouping(g_v, 1072, 1103)))
+ {
+ break lab4;
+ }
+ break golab3;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ golab5: while(true)
+ {
+ lab6: {
+ if (!(base.in_grouping(g_v, 1072, 1103)))
+ {
+ break lab6;
+ }
+ break golab5;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ golab7: while(true)
+ {
+ lab8: {
+ if (!(base.out_grouping(g_v, 1072, 1103)))
+ {
+ break lab8;
+ }
+ break golab7;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ I_p2 = base.cursor;
+ }
+ base.cursor = v_1;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R2() {
+ if (!(I_p2 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_perfective_gerund() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_0);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.eq_s_b("\u0430")))
+ {
+ break lab1;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ if (!(base.eq_s_b("\u044F")))
+ {
+ return false;
+ }
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_adjective() {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_1) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_adjectival() {
+ var /** number */ among_var;
+ if (!r_adjective())
+ {
+ return false;
+ }
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_2);
+ if (among_var == 0)
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ lab1: {
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab2: {
+ if (!(base.eq_s_b("\u0430")))
+ {
+ break lab2;
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_2;
+ if (!(base.eq_s_b("\u044F")))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_reflexive() {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_3) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_verb() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_4);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.eq_s_b("\u0430")))
+ {
+ break lab1;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ if (!(base.eq_s_b("\u044F")))
+ {
+ return false;
+ }
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_noun() {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_5) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_derivational() {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_6) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_tidy_up() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_7);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("\u043D")))
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!(base.eq_s_b("\u043D")))
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!(base.eq_s_b("\u043D")))
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ while(true)
+ {
+ var /** number */ v_2 = base.cursor;
+ lab1: {
+ golab2: while(true)
+ {
+ var /** number */ v_3 = base.cursor;
+ lab3: {
+ base.bra = base.cursor;
+ if (!(base.eq_s("\u0451")))
+ {
+ break lab3;
+ }
+ base.ket = base.cursor;
+ base.cursor = v_3;
+ break golab2;
+ }
+ base.cursor = v_3;
+ if (base.cursor >= base.limit)
+ {
+ break lab1;
+ }
+ base.cursor++;
+ }
+ if (!base.slice_from("\u0435"))
+ {
+ return false;
+ }
+ continue;
+ }
+ base.cursor = v_2;
+ break;
+ }
+ }
+ base.cursor = v_1;
+ r_mark_regions();
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ if (base.cursor < I_pV)
+ {
+ return false;
+ }
+ var /** number */ v_6 = base.limit_backward;
+ base.limit_backward = I_pV;
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab4: {
+ lab5: {
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab6: {
+ if (!r_perfective_gerund())
+ {
+ break lab6;
+ }
+ break lab5;
+ }
+ base.cursor = base.limit - v_8;
+ var /** number */ v_9 = base.limit - base.cursor;
+ lab7: {
+ if (!r_reflexive())
+ {
+ base.cursor = base.limit - v_9;
+ break lab7;
+ }
+ }
+ lab8: {
+ var /** number */ v_10 = base.limit - base.cursor;
+ lab9: {
+ if (!r_adjectival())
+ {
+ break lab9;
+ }
+ break lab8;
+ }
+ base.cursor = base.limit - v_10;
+ lab10: {
+ if (!r_verb())
+ {
+ break lab10;
+ }
+ break lab8;
+ }
+ base.cursor = base.limit - v_10;
+ if (!r_noun())
+ {
+ break lab4;
+ }
+ }
+ }
+ }
+ base.cursor = base.limit - v_7;
+ var /** number */ v_11 = base.limit - base.cursor;
+ lab11: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("\u0438")))
+ {
+ base.cursor = base.limit - v_11;
+ break lab11;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ var /** number */ v_12 = base.limit - base.cursor;
+ r_derivational();
+ base.cursor = base.limit - v_12;
+ var /** number */ v_13 = base.limit - base.cursor;
+ r_tidy_up();
+ base.cursor = base.limit - v_13;
+ base.limit_backward = v_6;
+ base.cursor = base.limit_backward;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/spanish-stemmer.js b/sphinx/search/non-minified-js/spanish-stemmer.js
new file mode 100644
index 0000000..fffd616
--- /dev/null
+++ b/sphinx/search/non-minified-js/spanish-stemmer.js
@@ -0,0 +1,990 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+SpanishStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["", -1, 6],
+ ["\u00E1", 0, 1],
+ ["\u00E9", 0, 2],
+ ["\u00ED", 0, 3],
+ ["\u00F3", 0, 4],
+ ["\u00FA", 0, 5]
+ ];
+
+ /** @const */ var a_1 = [
+ ["la", -1, -1],
+ ["sela", 0, -1],
+ ["le", -1, -1],
+ ["me", -1, -1],
+ ["se", -1, -1],
+ ["lo", -1, -1],
+ ["selo", 5, -1],
+ ["las", -1, -1],
+ ["selas", 7, -1],
+ ["les", -1, -1],
+ ["los", -1, -1],
+ ["selos", 10, -1],
+ ["nos", -1, -1]
+ ];
+
+ /** @const */ var a_2 = [
+ ["ando", -1, 6],
+ ["iendo", -1, 6],
+ ["yendo", -1, 7],
+ ["\u00E1ndo", -1, 2],
+ ["i\u00E9ndo", -1, 1],
+ ["ar", -1, 6],
+ ["er", -1, 6],
+ ["ir", -1, 6],
+ ["\u00E1r", -1, 3],
+ ["\u00E9r", -1, 4],
+ ["\u00EDr", -1, 5]
+ ];
+
+ /** @const */ var a_3 = [
+ ["ic", -1, -1],
+ ["ad", -1, -1],
+ ["os", -1, -1],
+ ["iv", -1, 1]
+ ];
+
+ /** @const */ var a_4 = [
+ ["able", -1, 1],
+ ["ible", -1, 1],
+ ["ante", -1, 1]
+ ];
+
+ /** @const */ var a_5 = [
+ ["ic", -1, 1],
+ ["abil", -1, 1],
+ ["iv", -1, 1]
+ ];
+
+ /** @const */ var a_6 = [
+ ["ica", -1, 1],
+ ["ancia", -1, 2],
+ ["encia", -1, 5],
+ ["adora", -1, 2],
+ ["osa", -1, 1],
+ ["ista", -1, 1],
+ ["iva", -1, 9],
+ ["anza", -1, 1],
+ ["log\u00EDa", -1, 3],
+ ["idad", -1, 8],
+ ["able", -1, 1],
+ ["ible", -1, 1],
+ ["ante", -1, 2],
+ ["mente", -1, 7],
+ ["amente", 13, 6],
+ ["aci\u00F3n", -1, 2],
+ ["uci\u00F3n", -1, 4],
+ ["ico", -1, 1],
+ ["ismo", -1, 1],
+ ["oso", -1, 1],
+ ["amiento", -1, 1],
+ ["imiento", -1, 1],
+ ["ivo", -1, 9],
+ ["ador", -1, 2],
+ ["icas", -1, 1],
+ ["ancias", -1, 2],
+ ["encias", -1, 5],
+ ["adoras", -1, 2],
+ ["osas", -1, 1],
+ ["istas", -1, 1],
+ ["ivas", -1, 9],
+ ["anzas", -1, 1],
+ ["log\u00EDas", -1, 3],
+ ["idades", -1, 8],
+ ["ables", -1, 1],
+ ["ibles", -1, 1],
+ ["aciones", -1, 2],
+ ["uciones", -1, 4],
+ ["adores", -1, 2],
+ ["antes", -1, 2],
+ ["icos", -1, 1],
+ ["ismos", -1, 1],
+ ["osos", -1, 1],
+ ["amientos", -1, 1],
+ ["imientos", -1, 1],
+ ["ivos", -1, 9]
+ ];
+
+ /** @const */ var a_7 = [
+ ["ya", -1, 1],
+ ["ye", -1, 1],
+ ["yan", -1, 1],
+ ["yen", -1, 1],
+ ["yeron", -1, 1],
+ ["yendo", -1, 1],
+ ["yo", -1, 1],
+ ["yas", -1, 1],
+ ["yes", -1, 1],
+ ["yais", -1, 1],
+ ["yamos", -1, 1],
+ ["y\u00F3", -1, 1]
+ ];
+
+ /** @const */ var a_8 = [
+ ["aba", -1, 2],
+ ["ada", -1, 2],
+ ["ida", -1, 2],
+ ["ara", -1, 2],
+ ["iera", -1, 2],
+ ["\u00EDa", -1, 2],
+ ["ar\u00EDa", 5, 2],
+ ["er\u00EDa", 5, 2],
+ ["ir\u00EDa", 5, 2],
+ ["ad", -1, 2],
+ ["ed", -1, 2],
+ ["id", -1, 2],
+ ["ase", -1, 2],
+ ["iese", -1, 2],
+ ["aste", -1, 2],
+ ["iste", -1, 2],
+ ["an", -1, 2],
+ ["aban", 16, 2],
+ ["aran", 16, 2],
+ ["ieran", 16, 2],
+ ["\u00EDan", 16, 2],
+ ["ar\u00EDan", 20, 2],
+ ["er\u00EDan", 20, 2],
+ ["ir\u00EDan", 20, 2],
+ ["en", -1, 1],
+ ["asen", 24, 2],
+ ["iesen", 24, 2],
+ ["aron", -1, 2],
+ ["ieron", -1, 2],
+ ["ar\u00E1n", -1, 2],
+ ["er\u00E1n", -1, 2],
+ ["ir\u00E1n", -1, 2],
+ ["ado", -1, 2],
+ ["ido", -1, 2],
+ ["ando", -1, 2],
+ ["iendo", -1, 2],
+ ["ar", -1, 2],
+ ["er", -1, 2],
+ ["ir", -1, 2],
+ ["as", -1, 2],
+ ["abas", 39, 2],
+ ["adas", 39, 2],
+ ["idas", 39, 2],
+ ["aras", 39, 2],
+ ["ieras", 39, 2],
+ ["\u00EDas", 39, 2],
+ ["ar\u00EDas", 45, 2],
+ ["er\u00EDas", 45, 2],
+ ["ir\u00EDas", 45, 2],
+ ["es", -1, 1],
+ ["ases", 49, 2],
+ ["ieses", 49, 2],
+ ["abais", -1, 2],
+ ["arais", -1, 2],
+ ["ierais", -1, 2],
+ ["\u00EDais", -1, 2],
+ ["ar\u00EDais", 55, 2],
+ ["er\u00EDais", 55, 2],
+ ["ir\u00EDais", 55, 2],
+ ["aseis", -1, 2],
+ ["ieseis", -1, 2],
+ ["asteis", -1, 2],
+ ["isteis", -1, 2],
+ ["\u00E1is", -1, 2],
+ ["\u00E9is", -1, 1],
+ ["ar\u00E9is", 64, 2],
+ ["er\u00E9is", 64, 2],
+ ["ir\u00E9is", 64, 2],
+ ["ados", -1, 2],
+ ["idos", -1, 2],
+ ["amos", -1, 2],
+ ["\u00E1bamos", 70, 2],
+ ["\u00E1ramos", 70, 2],
+ ["i\u00E9ramos", 70, 2],
+ ["\u00EDamos", 70, 2],
+ ["ar\u00EDamos", 74, 2],
+ ["er\u00EDamos", 74, 2],
+ ["ir\u00EDamos", 74, 2],
+ ["emos", -1, 1],
+ ["aremos", 78, 2],
+ ["eremos", 78, 2],
+ ["iremos", 78, 2],
+ ["\u00E1semos", 78, 2],
+ ["i\u00E9semos", 78, 2],
+ ["imos", -1, 2],
+ ["ar\u00E1s", -1, 2],
+ ["er\u00E1s", -1, 2],
+ ["ir\u00E1s", -1, 2],
+ ["\u00EDs", -1, 2],
+ ["ar\u00E1", -1, 2],
+ ["er\u00E1", -1, 2],
+ ["ir\u00E1", -1, 2],
+ ["ar\u00E9", -1, 2],
+ ["er\u00E9", -1, 2],
+ ["ir\u00E9", -1, 2],
+ ["i\u00F3", -1, 2]
+ ];
+
+ /** @const */ var a_9 = [
+ ["a", -1, 1],
+ ["e", -1, 2],
+ ["o", -1, 1],
+ ["os", -1, 1],
+ ["\u00E1", -1, 1],
+ ["\u00E9", -1, 2],
+ ["\u00ED", -1, 1],
+ ["\u00F3", -1, 1]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10];
+
+ var /** number */ I_p2 = 0;
+ var /** number */ I_p1 = 0;
+ var /** number */ I_pV = 0;
+
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_pV = base.limit;
+ I_p1 = base.limit;
+ I_p2 = base.limit;
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_2 = base.cursor;
+ lab2: {
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab2;
+ }
+ lab3: {
+ var /** number */ v_3 = base.cursor;
+ lab4: {
+ if (!(base.out_grouping(g_v, 97, 252)))
+ {
+ break lab4;
+ }
+ golab5: while(true)
+ {
+ lab6: {
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab6;
+ }
+ break golab5;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab4;
+ }
+ base.cursor++;
+ }
+ break lab3;
+ }
+ base.cursor = v_3;
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab2;
+ }
+ golab7: while(true)
+ {
+ lab8: {
+ if (!(base.out_grouping(g_v, 97, 252)))
+ {
+ break lab8;
+ }
+ break golab7;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab2;
+ }
+ base.cursor++;
+ }
+ }
+ break lab1;
+ }
+ base.cursor = v_2;
+ if (!(base.out_grouping(g_v, 97, 252)))
+ {
+ break lab0;
+ }
+ lab9: {
+ var /** number */ v_6 = base.cursor;
+ lab10: {
+ if (!(base.out_grouping(g_v, 97, 252)))
+ {
+ break lab10;
+ }
+ golab11: while(true)
+ {
+ lab12: {
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab12;
+ }
+ break golab11;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab10;
+ }
+ base.cursor++;
+ }
+ break lab9;
+ }
+ base.cursor = v_6;
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab0;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ }
+ I_pV = base.cursor;
+ }
+ base.cursor = v_1;
+ var /** number */ v_8 = base.cursor;
+ lab13: {
+ golab14: while(true)
+ {
+ lab15: {
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab15;
+ }
+ break golab14;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ golab16: while(true)
+ {
+ lab17: {
+ if (!(base.out_grouping(g_v, 97, 252)))
+ {
+ break lab17;
+ }
+ break golab16;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ golab18: while(true)
+ {
+ lab19: {
+ if (!(base.in_grouping(g_v, 97, 252)))
+ {
+ break lab19;
+ }
+ break golab18;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ golab20: while(true)
+ {
+ lab21: {
+ if (!(base.out_grouping(g_v, 97, 252)))
+ {
+ break lab21;
+ }
+ break golab20;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab13;
+ }
+ base.cursor++;
+ }
+ I_p2 = base.cursor;
+ }
+ base.cursor = v_8;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_postlude() {
+ var /** number */ among_var;
+ while(true)
+ {
+ var /** number */ v_1 = base.cursor;
+ lab0: {
+ base.bra = base.cursor;
+ among_var = base.find_among(a_0);
+ if (among_var == 0)
+ {
+ break lab0;
+ }
+ base.ket = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("a"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("e"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("i"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!base.slice_from("o"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!base.slice_from("u"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ break;
+ }
+ continue;
+ }
+ base.cursor = v_1;
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_RV() {
+ if (!(I_pV <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R1() {
+ if (!(I_p1 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_R2() {
+ if (!(I_p2 <= base.cursor))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_attached_pronoun() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ if (base.find_among_b(a_1) == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ among_var = base.find_among_b(a_2);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ if (!r_RV())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ base.bra = base.cursor;
+ if (!base.slice_from("iendo"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ base.bra = base.cursor;
+ if (!base.slice_from("ando"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ base.bra = base.cursor;
+ if (!base.slice_from("ar"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ base.bra = base.cursor;
+ if (!base.slice_from("er"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ base.bra = base.cursor;
+ if (!base.slice_from("ir"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 7:
+ if (!(base.eq_s_b("u")))
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_standard_suffix() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_6);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("ic")))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 3:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("log"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("u"))
+ {
+ return false;
+ }
+ break;
+ case 5:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_from("ente"))
+ {
+ return false;
+ }
+ break;
+ case 6:
+ if (!r_R1())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab1: {
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_3);
+ if (among_var == 0)
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ switch (among_var) {
+ case 1:
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("at")))
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_2;
+ break lab1;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ }
+ break;
+ case 7:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab2: {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_4) == 0)
+ {
+ base.cursor = base.limit - v_3;
+ break lab2;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_3;
+ break lab2;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 8:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab3: {
+ base.ket = base.cursor;
+ if (base.find_among_b(a_5) == 0)
+ {
+ base.cursor = base.limit - v_4;
+ break lab3;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_4;
+ break lab3;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ case 9:
+ if (!r_R2())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab4: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("at")))
+ {
+ base.cursor = base.limit - v_5;
+ break lab4;
+ }
+ base.bra = base.cursor;
+ if (!r_R2())
+ {
+ base.cursor = base.limit - v_5;
+ break lab4;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_y_verb_suffix() {
+ if (base.cursor < I_pV)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_pV;
+ base.ket = base.cursor;
+ if (base.find_among_b(a_7) == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ if (!(base.eq_s_b("u")))
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_verb_suffix() {
+ var /** number */ among_var;
+ if (base.cursor < I_pV)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_pV;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_8);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ switch (among_var) {
+ case 1:
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab0: {
+ if (!(base.eq_s_b("u")))
+ {
+ base.cursor = base.limit - v_3;
+ break lab0;
+ }
+ var /** number */ v_4 = base.limit - base.cursor;
+ if (!(base.eq_s_b("g")))
+ {
+ base.cursor = base.limit - v_3;
+ break lab0;
+ }
+ base.cursor = base.limit - v_4;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_residual_suffix() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_9);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!r_RV())
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ base.ket = base.cursor;
+ if (!(base.eq_s_b("u")))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.bra = base.cursor;
+ var /** number */ v_2 = base.limit - base.cursor;
+ if (!(base.eq_s_b("g")))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ base.cursor = base.limit - v_2;
+ if (!r_RV())
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ }
+ break;
+ }
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ r_mark_regions();
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_2 = base.limit - base.cursor;
+ r_attached_pronoun();
+ base.cursor = base.limit - v_2;
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab0: {
+ lab1: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab2: {
+ if (!r_standard_suffix())
+ {
+ break lab2;
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_4;
+ lab3: {
+ if (!r_y_verb_suffix())
+ {
+ break lab3;
+ }
+ break lab1;
+ }
+ base.cursor = base.limit - v_4;
+ if (!r_verb_suffix())
+ {
+ break lab0;
+ }
+ }
+ }
+ base.cursor = base.limit - v_3;
+ var /** number */ v_5 = base.limit - base.cursor;
+ r_residual_suffix();
+ base.cursor = base.limit - v_5;
+ base.cursor = base.limit_backward;
+ var /** number */ v_6 = base.cursor;
+ r_postlude();
+ base.cursor = v_6;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/swedish-stemmer.js b/sphinx/search/non-minified-js/swedish-stemmer.js
new file mode 100644
index 0000000..4d7d49f
--- /dev/null
+++ b/sphinx/search/non-minified-js/swedish-stemmer.js
@@ -0,0 +1,265 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+SwedishStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["a", -1, 1],
+ ["arna", 0, 1],
+ ["erna", 0, 1],
+ ["heterna", 2, 1],
+ ["orna", 0, 1],
+ ["ad", -1, 1],
+ ["e", -1, 1],
+ ["ade", 6, 1],
+ ["ande", 6, 1],
+ ["arne", 6, 1],
+ ["are", 6, 1],
+ ["aste", 6, 1],
+ ["en", -1, 1],
+ ["anden", 12, 1],
+ ["aren", 12, 1],
+ ["heten", 12, 1],
+ ["ern", -1, 1],
+ ["ar", -1, 1],
+ ["er", -1, 1],
+ ["heter", 18, 1],
+ ["or", -1, 1],
+ ["s", -1, 2],
+ ["as", 21, 1],
+ ["arnas", 22, 1],
+ ["ernas", 22, 1],
+ ["ornas", 22, 1],
+ ["es", 21, 1],
+ ["ades", 26, 1],
+ ["andes", 26, 1],
+ ["ens", 21, 1],
+ ["arens", 29, 1],
+ ["hetens", 29, 1],
+ ["erns", 21, 1],
+ ["at", -1, 1],
+ ["andet", -1, 1],
+ ["het", -1, 1],
+ ["ast", -1, 1]
+ ];
+
+ /** @const */ var a_1 = [
+ ["dd", -1, -1],
+ ["gd", -1, -1],
+ ["nn", -1, -1],
+ ["dt", -1, -1],
+ ["gt", -1, -1],
+ ["kt", -1, -1],
+ ["tt", -1, -1]
+ ];
+
+ /** @const */ var a_2 = [
+ ["ig", -1, 1],
+ ["lig", 0, 1],
+ ["els", -1, 1],
+ ["fullt", -1, 3],
+ ["l\u00F6st", -1, 2]
+ ];
+
+ /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32];
+
+ /** @const */ var /** Array<int> */ g_s_ending = [119, 127, 149];
+
+ var /** number */ I_x = 0;
+ var /** number */ I_p1 = 0;
+
+
+ /** @return {boolean} */
+ function r_mark_regions() {
+ I_p1 = base.limit;
+ var /** number */ v_1 = base.cursor;
+ {
+ var /** number */ c1 = base.cursor + 3;
+ if (c1 > base.limit)
+ {
+ return false;
+ }
+ base.cursor = c1;
+ }
+ I_x = base.cursor;
+ base.cursor = v_1;
+ golab0: while(true)
+ {
+ var /** number */ v_2 = base.cursor;
+ lab1: {
+ if (!(base.in_grouping(g_v, 97, 246)))
+ {
+ break lab1;
+ }
+ base.cursor = v_2;
+ break golab0;
+ }
+ base.cursor = v_2;
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ golab2: while(true)
+ {
+ lab3: {
+ if (!(base.out_grouping(g_v, 97, 246)))
+ {
+ break lab3;
+ }
+ break golab2;
+ }
+ if (base.cursor >= base.limit)
+ {
+ return false;
+ }
+ base.cursor++;
+ }
+ I_p1 = base.cursor;
+ lab4: {
+ if (!(I_p1 < I_x))
+ {
+ break lab4;
+ }
+ I_p1 = I_x;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_main_suffix() {
+ var /** number */ among_var;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_0);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ base.limit_backward = v_2;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!(base.in_grouping_b(g_s_ending, 98, 121)))
+ {
+ return false;
+ }
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_consonant_pair() {
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ var /** number */ v_3 = base.limit - base.cursor;
+ if (base.find_among_b(a_1) == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ base.ket = base.cursor;
+ if (base.cursor <= base.limit_backward)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.cursor--;
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.limit_backward = v_2;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_other_suffix() {
+ var /** number */ among_var;
+ if (base.cursor < I_p1)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit_backward;
+ base.limit_backward = I_p1;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_2);
+ if (among_var == 0)
+ {
+ base.limit_backward = v_2;
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("l\u00F6s"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("full"))
+ {
+ return false;
+ }
+ break;
+ }
+ base.limit_backward = v_2;
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ var /** number */ v_1 = base.cursor;
+ r_mark_regions();
+ base.cursor = v_1;
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_2 = base.limit - base.cursor;
+ r_main_suffix();
+ base.cursor = base.limit - v_2;
+ var /** number */ v_3 = base.limit - base.cursor;
+ r_consonant_pair();
+ base.cursor = base.limit - v_3;
+ var /** number */ v_4 = base.limit - base.cursor;
+ r_other_suffix();
+ base.cursor = base.limit - v_4;
+ base.cursor = base.limit_backward;
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/non-minified-js/turkish-stemmer.js b/sphinx/search/non-minified-js/turkish-stemmer.js
new file mode 100644
index 0000000..8ba74b9
--- /dev/null
+++ b/sphinx/search/non-minified-js/turkish-stemmer.js
@@ -0,0 +1,2439 @@
+// Generated by Snowball 2.1.0 - https://snowballstem.org/
+
+/**@constructor*/
+TurkishStemmer = function() {
+ var base = new BaseStemmer();
+ /** @const */ var a_0 = [
+ ["m", -1, -1],
+ ["n", -1, -1],
+ ["miz", -1, -1],
+ ["niz", -1, -1],
+ ["muz", -1, -1],
+ ["nuz", -1, -1],
+ ["m\u00FCz", -1, -1],
+ ["n\u00FCz", -1, -1],
+ ["m\u0131z", -1, -1],
+ ["n\u0131z", -1, -1]
+ ];
+
+ /** @const */ var a_1 = [
+ ["leri", -1, -1],
+ ["lar\u0131", -1, -1]
+ ];
+
+ /** @const */ var a_2 = [
+ ["ni", -1, -1],
+ ["nu", -1, -1],
+ ["n\u00FC", -1, -1],
+ ["n\u0131", -1, -1]
+ ];
+
+ /** @const */ var a_3 = [
+ ["in", -1, -1],
+ ["un", -1, -1],
+ ["\u00FCn", -1, -1],
+ ["\u0131n", -1, -1]
+ ];
+
+ /** @const */ var a_4 = [
+ ["a", -1, -1],
+ ["e", -1, -1]
+ ];
+
+ /** @const */ var a_5 = [
+ ["na", -1, -1],
+ ["ne", -1, -1]
+ ];
+
+ /** @const */ var a_6 = [
+ ["da", -1, -1],
+ ["ta", -1, -1],
+ ["de", -1, -1],
+ ["te", -1, -1]
+ ];
+
+ /** @const */ var a_7 = [
+ ["nda", -1, -1],
+ ["nde", -1, -1]
+ ];
+
+ /** @const */ var a_8 = [
+ ["dan", -1, -1],
+ ["tan", -1, -1],
+ ["den", -1, -1],
+ ["ten", -1, -1]
+ ];
+
+ /** @const */ var a_9 = [
+ ["ndan", -1, -1],
+ ["nden", -1, -1]
+ ];
+
+ /** @const */ var a_10 = [
+ ["la", -1, -1],
+ ["le", -1, -1]
+ ];
+
+ /** @const */ var a_11 = [
+ ["ca", -1, -1],
+ ["ce", -1, -1]
+ ];
+
+ /** @const */ var a_12 = [
+ ["im", -1, -1],
+ ["um", -1, -1],
+ ["\u00FCm", -1, -1],
+ ["\u0131m", -1, -1]
+ ];
+
+ /** @const */ var a_13 = [
+ ["sin", -1, -1],
+ ["sun", -1, -1],
+ ["s\u00FCn", -1, -1],
+ ["s\u0131n", -1, -1]
+ ];
+
+ /** @const */ var a_14 = [
+ ["iz", -1, -1],
+ ["uz", -1, -1],
+ ["\u00FCz", -1, -1],
+ ["\u0131z", -1, -1]
+ ];
+
+ /** @const */ var a_15 = [
+ ["siniz", -1, -1],
+ ["sunuz", -1, -1],
+ ["s\u00FCn\u00FCz", -1, -1],
+ ["s\u0131n\u0131z", -1, -1]
+ ];
+
+ /** @const */ var a_16 = [
+ ["lar", -1, -1],
+ ["ler", -1, -1]
+ ];
+
+ /** @const */ var a_17 = [
+ ["niz", -1, -1],
+ ["nuz", -1, -1],
+ ["n\u00FCz", -1, -1],
+ ["n\u0131z", -1, -1]
+ ];
+
+ /** @const */ var a_18 = [
+ ["dir", -1, -1],
+ ["tir", -1, -1],
+ ["dur", -1, -1],
+ ["tur", -1, -1],
+ ["d\u00FCr", -1, -1],
+ ["t\u00FCr", -1, -1],
+ ["d\u0131r", -1, -1],
+ ["t\u0131r", -1, -1]
+ ];
+
+ /** @const */ var a_19 = [
+ ["cas\u0131na", -1, -1],
+ ["cesine", -1, -1]
+ ];
+
+ /** @const */ var a_20 = [
+ ["di", -1, -1],
+ ["ti", -1, -1],
+ ["dik", -1, -1],
+ ["tik", -1, -1],
+ ["duk", -1, -1],
+ ["tuk", -1, -1],
+ ["d\u00FCk", -1, -1],
+ ["t\u00FCk", -1, -1],
+ ["d\u0131k", -1, -1],
+ ["t\u0131k", -1, -1],
+ ["dim", -1, -1],
+ ["tim", -1, -1],
+ ["dum", -1, -1],
+ ["tum", -1, -1],
+ ["d\u00FCm", -1, -1],
+ ["t\u00FCm", -1, -1],
+ ["d\u0131m", -1, -1],
+ ["t\u0131m", -1, -1],
+ ["din", -1, -1],
+ ["tin", -1, -1],
+ ["dun", -1, -1],
+ ["tun", -1, -1],
+ ["d\u00FCn", -1, -1],
+ ["t\u00FCn", -1, -1],
+ ["d\u0131n", -1, -1],
+ ["t\u0131n", -1, -1],
+ ["du", -1, -1],
+ ["tu", -1, -1],
+ ["d\u00FC", -1, -1],
+ ["t\u00FC", -1, -1],
+ ["d\u0131", -1, -1],
+ ["t\u0131", -1, -1]
+ ];
+
+ /** @const */ var a_21 = [
+ ["sa", -1, -1],
+ ["se", -1, -1],
+ ["sak", -1, -1],
+ ["sek", -1, -1],
+ ["sam", -1, -1],
+ ["sem", -1, -1],
+ ["san", -1, -1],
+ ["sen", -1, -1]
+ ];
+
+ /** @const */ var a_22 = [
+ ["mi\u015F", -1, -1],
+ ["mu\u015F", -1, -1],
+ ["m\u00FC\u015F", -1, -1],
+ ["m\u0131\u015F", -1, -1]
+ ];
+
+ /** @const */ var a_23 = [
+ ["b", -1, 1],
+ ["c", -1, 2],
+ ["d", -1, 3],
+ ["\u011F", -1, 4]
+ ];
+
+ /** @const */ var /** Array<int> */ g_vowel = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 8, 0, 0, 0, 0, 0, 0, 1];
+
+ /** @const */ var /** Array<int> */ g_U = [1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1];
+
+ /** @const */ var /** Array<int> */ g_vowel1 = [1, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1];
+
+ /** @const */ var /** Array<int> */ g_vowel2 = [17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130];
+
+ /** @const */ var /** Array<int> */ g_vowel3 = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1];
+
+ /** @const */ var /** Array<int> */ g_vowel4 = [17];
+
+ /** @const */ var /** Array<int> */ g_vowel5 = [65];
+
+ /** @const */ var /** Array<int> */ g_vowel6 = [65];
+
+ var /** boolean */ B_continue_stemming_noun_suffixes = false;
+
+
+ /** @return {boolean} */
+ function r_check_vowel_harmony() {
+ var /** number */ v_1 = base.limit - base.cursor;
+ golab0: while(true)
+ {
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ break lab1;
+ }
+ base.cursor = base.limit - v_2;
+ break golab0;
+ }
+ base.cursor = base.limit - v_2;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ }
+ lab2: {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab3: {
+ if (!(base.eq_s_b("a")))
+ {
+ break lab3;
+ }
+ golab4: while(true)
+ {
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab5: {
+ if (!(base.in_grouping_b(g_vowel1, 97, 305)))
+ {
+ break lab5;
+ }
+ base.cursor = base.limit - v_4;
+ break golab4;
+ }
+ base.cursor = base.limit - v_4;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab3;
+ }
+ base.cursor--;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_3;
+ lab6: {
+ if (!(base.eq_s_b("e")))
+ {
+ break lab6;
+ }
+ golab7: while(true)
+ {
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab8: {
+ if (!(base.in_grouping_b(g_vowel2, 101, 252)))
+ {
+ break lab8;
+ }
+ base.cursor = base.limit - v_5;
+ break golab7;
+ }
+ base.cursor = base.limit - v_5;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab6;
+ }
+ base.cursor--;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_3;
+ lab9: {
+ if (!(base.eq_s_b("\u0131")))
+ {
+ break lab9;
+ }
+ golab10: while(true)
+ {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab11: {
+ if (!(base.in_grouping_b(g_vowel3, 97, 305)))
+ {
+ break lab11;
+ }
+ base.cursor = base.limit - v_6;
+ break golab10;
+ }
+ base.cursor = base.limit - v_6;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab9;
+ }
+ base.cursor--;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_3;
+ lab12: {
+ if (!(base.eq_s_b("i")))
+ {
+ break lab12;
+ }
+ golab13: while(true)
+ {
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab14: {
+ if (!(base.in_grouping_b(g_vowel4, 101, 105)))
+ {
+ break lab14;
+ }
+ base.cursor = base.limit - v_7;
+ break golab13;
+ }
+ base.cursor = base.limit - v_7;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab12;
+ }
+ base.cursor--;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_3;
+ lab15: {
+ if (!(base.eq_s_b("o")))
+ {
+ break lab15;
+ }
+ golab16: while(true)
+ {
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab17: {
+ if (!(base.in_grouping_b(g_vowel5, 111, 117)))
+ {
+ break lab17;
+ }
+ base.cursor = base.limit - v_8;
+ break golab16;
+ }
+ base.cursor = base.limit - v_8;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab15;
+ }
+ base.cursor--;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_3;
+ lab18: {
+ if (!(base.eq_s_b("\u00F6")))
+ {
+ break lab18;
+ }
+ golab19: while(true)
+ {
+ var /** number */ v_9 = base.limit - base.cursor;
+ lab20: {
+ if (!(base.in_grouping_b(g_vowel6, 246, 252)))
+ {
+ break lab20;
+ }
+ base.cursor = base.limit - v_9;
+ break golab19;
+ }
+ base.cursor = base.limit - v_9;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab18;
+ }
+ base.cursor--;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_3;
+ lab21: {
+ if (!(base.eq_s_b("u")))
+ {
+ break lab21;
+ }
+ golab22: while(true)
+ {
+ var /** number */ v_10 = base.limit - base.cursor;
+ lab23: {
+ if (!(base.in_grouping_b(g_vowel5, 111, 117)))
+ {
+ break lab23;
+ }
+ base.cursor = base.limit - v_10;
+ break golab22;
+ }
+ base.cursor = base.limit - v_10;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab21;
+ }
+ base.cursor--;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_3;
+ if (!(base.eq_s_b("\u00FC")))
+ {
+ return false;
+ }
+ golab24: while(true)
+ {
+ var /** number */ v_11 = base.limit - base.cursor;
+ lab25: {
+ if (!(base.in_grouping_b(g_vowel6, 246, 252)))
+ {
+ break lab25;
+ }
+ base.cursor = base.limit - v_11;
+ break golab24;
+ }
+ base.cursor = base.limit - v_11;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ }
+ }
+ base.cursor = base.limit - v_1;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_suffix_with_optional_n_consonant() {
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.eq_s_b("n")))
+ {
+ break lab1;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ break lab1;
+ }
+ base.cursor = base.limit - v_2;
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab2: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ if (!(base.eq_s_b("n")))
+ {
+ break lab2;
+ }
+ base.cursor = base.limit - v_4;
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ }
+ var /** number */ v_5 = base.limit - base.cursor;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_5;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_suffix_with_optional_s_consonant() {
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.eq_s_b("s")))
+ {
+ break lab1;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ break lab1;
+ }
+ base.cursor = base.limit - v_2;
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab2: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ if (!(base.eq_s_b("s")))
+ {
+ break lab2;
+ }
+ base.cursor = base.limit - v_4;
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ }
+ var /** number */ v_5 = base.limit - base.cursor;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_5;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_suffix_with_optional_y_consonant() {
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.eq_s_b("y")))
+ {
+ break lab1;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ break lab1;
+ }
+ base.cursor = base.limit - v_2;
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab2: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ if (!(base.eq_s_b("y")))
+ {
+ break lab2;
+ }
+ base.cursor = base.limit - v_4;
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ }
+ var /** number */ v_5 = base.limit - base.cursor;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_5;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_suffix_with_optional_U_vowel() {
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.in_grouping_b(g_U, 105, 305)))
+ {
+ break lab1;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ if (!(base.out_grouping_b(g_vowel, 97, 305)))
+ {
+ break lab1;
+ }
+ base.cursor = base.limit - v_2;
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab2: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ if (!(base.in_grouping_b(g_U, 105, 305)))
+ {
+ break lab2;
+ }
+ base.cursor = base.limit - v_4;
+ return false;
+ }
+ base.cursor = base.limit - v_3;
+ }
+ var /** number */ v_5 = base.limit - base.cursor;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ if (!(base.out_grouping_b(g_vowel, 97, 305)))
+ {
+ return false;
+ }
+ base.cursor = base.limit - v_5;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_possessives() {
+ if (base.find_among_b(a_0) == 0)
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_U_vowel())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_sU() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (!(base.in_grouping_b(g_U, 105, 305)))
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_s_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_lArI() {
+ if (base.find_among_b(a_1) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_yU() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (!(base.in_grouping_b(g_U, 105, 305)))
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_y_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_nU() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_2) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_nUn() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_3) == 0)
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_n_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_yA() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_4) == 0)
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_y_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_nA() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_5) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_DA() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_6) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_ndA() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_7) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_DAn() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_8) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_ndAn() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_9) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_ylA() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_10) == 0)
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_y_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_ki() {
+ if (!(base.eq_s_b("ki")))
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_ncA() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_11) == 0)
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_n_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_yUm() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_12) == 0)
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_y_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_sUn() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_13) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_yUz() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_14) == 0)
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_y_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_sUnUz() {
+ if (base.find_among_b(a_15) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_lAr() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_16) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_nUz() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_17) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_DUr() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_18) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_cAsInA() {
+ if (base.find_among_b(a_19) == 0)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_yDU() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_20) == 0)
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_y_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_ysA() {
+ if (base.find_among_b(a_21) == 0)
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_y_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_ymUs_() {
+ if (!r_check_vowel_harmony())
+ {
+ return false;
+ }
+ if (base.find_among_b(a_22) == 0)
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_y_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_mark_yken() {
+ if (!(base.eq_s_b("ken")))
+ {
+ return false;
+ }
+ if (!r_mark_suffix_with_optional_y_consonant())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_stem_nominal_verb_suffixes() {
+ base.ket = base.cursor;
+ B_continue_stemming_noun_suffixes = true;
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ lab2: {
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab3: {
+ if (!r_mark_ymUs_())
+ {
+ break lab3;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_2;
+ lab4: {
+ if (!r_mark_yDU())
+ {
+ break lab4;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_2;
+ lab5: {
+ if (!r_mark_ysA())
+ {
+ break lab5;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_2;
+ if (!r_mark_yken())
+ {
+ break lab1;
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab6: {
+ if (!r_mark_cAsInA())
+ {
+ break lab6;
+ }
+ lab7: {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab8: {
+ if (!r_mark_sUnUz())
+ {
+ break lab8;
+ }
+ break lab7;
+ }
+ base.cursor = base.limit - v_3;
+ lab9: {
+ if (!r_mark_lAr())
+ {
+ break lab9;
+ }
+ break lab7;
+ }
+ base.cursor = base.limit - v_3;
+ lab10: {
+ if (!r_mark_yUm())
+ {
+ break lab10;
+ }
+ break lab7;
+ }
+ base.cursor = base.limit - v_3;
+ lab11: {
+ if (!r_mark_sUn())
+ {
+ break lab11;
+ }
+ break lab7;
+ }
+ base.cursor = base.limit - v_3;
+ lab12: {
+ if (!r_mark_yUz())
+ {
+ break lab12;
+ }
+ break lab7;
+ }
+ base.cursor = base.limit - v_3;
+ }
+ if (!r_mark_ymUs_())
+ {
+ break lab6;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab13: {
+ if (!r_mark_lAr())
+ {
+ break lab13;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab14: {
+ base.ket = base.cursor;
+ lab15: {
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab16: {
+ if (!r_mark_DUr())
+ {
+ break lab16;
+ }
+ break lab15;
+ }
+ base.cursor = base.limit - v_5;
+ lab17: {
+ if (!r_mark_yDU())
+ {
+ break lab17;
+ }
+ break lab15;
+ }
+ base.cursor = base.limit - v_5;
+ lab18: {
+ if (!r_mark_ysA())
+ {
+ break lab18;
+ }
+ break lab15;
+ }
+ base.cursor = base.limit - v_5;
+ if (!r_mark_ymUs_())
+ {
+ base.cursor = base.limit - v_4;
+ break lab14;
+ }
+ }
+ }
+ B_continue_stemming_noun_suffixes = false;
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab19: {
+ if (!r_mark_nUz())
+ {
+ break lab19;
+ }
+ lab20: {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab21: {
+ if (!r_mark_yDU())
+ {
+ break lab21;
+ }
+ break lab20;
+ }
+ base.cursor = base.limit - v_6;
+ if (!r_mark_ysA())
+ {
+ break lab19;
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab22: {
+ lab23: {
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab24: {
+ if (!r_mark_sUnUz())
+ {
+ break lab24;
+ }
+ break lab23;
+ }
+ base.cursor = base.limit - v_7;
+ lab25: {
+ if (!r_mark_yUz())
+ {
+ break lab25;
+ }
+ break lab23;
+ }
+ base.cursor = base.limit - v_7;
+ lab26: {
+ if (!r_mark_sUn())
+ {
+ break lab26;
+ }
+ break lab23;
+ }
+ base.cursor = base.limit - v_7;
+ if (!r_mark_yUm())
+ {
+ break lab22;
+ }
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab27: {
+ base.ket = base.cursor;
+ if (!r_mark_ymUs_())
+ {
+ base.cursor = base.limit - v_8;
+ break lab27;
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ if (!r_mark_DUr())
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_9 = base.limit - base.cursor;
+ lab28: {
+ base.ket = base.cursor;
+ lab29: {
+ var /** number */ v_10 = base.limit - base.cursor;
+ lab30: {
+ if (!r_mark_sUnUz())
+ {
+ break lab30;
+ }
+ break lab29;
+ }
+ base.cursor = base.limit - v_10;
+ lab31: {
+ if (!r_mark_lAr())
+ {
+ break lab31;
+ }
+ break lab29;
+ }
+ base.cursor = base.limit - v_10;
+ lab32: {
+ if (!r_mark_yUm())
+ {
+ break lab32;
+ }
+ break lab29;
+ }
+ base.cursor = base.limit - v_10;
+ lab33: {
+ if (!r_mark_sUn())
+ {
+ break lab33;
+ }
+ break lab29;
+ }
+ base.cursor = base.limit - v_10;
+ lab34: {
+ if (!r_mark_yUz())
+ {
+ break lab34;
+ }
+ break lab29;
+ }
+ base.cursor = base.limit - v_10;
+ }
+ if (!r_mark_ymUs_())
+ {
+ base.cursor = base.limit - v_9;
+ break lab28;
+ }
+ }
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_stem_suffix_chain_before_ki() {
+ base.ket = base.cursor;
+ if (!r_mark_ki())
+ {
+ return false;
+ }
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ if (!r_mark_DA())
+ {
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab2: {
+ base.ket = base.cursor;
+ lab3: {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab4: {
+ if (!r_mark_lAr())
+ {
+ break lab4;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab5: {
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_4;
+ break lab5;
+ }
+ }
+ break lab3;
+ }
+ base.cursor = base.limit - v_3;
+ if (!r_mark_possessives())
+ {
+ base.cursor = base.limit - v_2;
+ break lab2;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab6: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_5;
+ break lab6;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_5;
+ break lab6;
+ }
+ }
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab7: {
+ if (!r_mark_nUn())
+ {
+ break lab7;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab8: {
+ base.ket = base.cursor;
+ lab9: {
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab10: {
+ if (!r_mark_lArI())
+ {
+ break lab10;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab9;
+ }
+ base.cursor = base.limit - v_7;
+ lab11: {
+ base.ket = base.cursor;
+ lab12: {
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab13: {
+ if (!r_mark_possessives())
+ {
+ break lab13;
+ }
+ break lab12;
+ }
+ base.cursor = base.limit - v_8;
+ if (!r_mark_sU())
+ {
+ break lab11;
+ }
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_9 = base.limit - base.cursor;
+ lab14: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_9;
+ break lab14;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_9;
+ break lab14;
+ }
+ }
+ break lab9;
+ }
+ base.cursor = base.limit - v_7;
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_6;
+ break lab8;
+ }
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ if (!r_mark_ndA())
+ {
+ return false;
+ }
+ lab15: {
+ var /** number */ v_10 = base.limit - base.cursor;
+ lab16: {
+ if (!r_mark_lArI())
+ {
+ break lab16;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab15;
+ }
+ base.cursor = base.limit - v_10;
+ lab17: {
+ if (!r_mark_sU())
+ {
+ break lab17;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_11 = base.limit - base.cursor;
+ lab18: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_11;
+ break lab18;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_11;
+ break lab18;
+ }
+ }
+ break lab15;
+ }
+ base.cursor = base.limit - v_10;
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ return false;
+ }
+ }
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_stem_noun_suffixes() {
+ lab0: {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab1: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ break lab1;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab2: {
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_2;
+ break lab2;
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab3: {
+ base.ket = base.cursor;
+ if (!r_mark_ncA())
+ {
+ break lab3;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab4: {
+ lab5: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ lab6: {
+ base.ket = base.cursor;
+ if (!r_mark_lArI())
+ {
+ break lab6;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab5;
+ }
+ base.cursor = base.limit - v_4;
+ lab7: {
+ base.ket = base.cursor;
+ lab8: {
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab9: {
+ if (!r_mark_possessives())
+ {
+ break lab9;
+ }
+ break lab8;
+ }
+ base.cursor = base.limit - v_5;
+ if (!r_mark_sU())
+ {
+ break lab7;
+ }
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab10: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_6;
+ break lab10;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_6;
+ break lab10;
+ }
+ }
+ break lab5;
+ }
+ base.cursor = base.limit - v_4;
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_3;
+ break lab4;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_3;
+ break lab4;
+ }
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab11: {
+ base.ket = base.cursor;
+ lab12: {
+ var /** number */ v_7 = base.limit - base.cursor;
+ lab13: {
+ if (!r_mark_ndA())
+ {
+ break lab13;
+ }
+ break lab12;
+ }
+ base.cursor = base.limit - v_7;
+ if (!r_mark_nA())
+ {
+ break lab11;
+ }
+ }
+ lab14: {
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab15: {
+ if (!r_mark_lArI())
+ {
+ break lab15;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab14;
+ }
+ base.cursor = base.limit - v_8;
+ lab16: {
+ if (!r_mark_sU())
+ {
+ break lab16;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_9 = base.limit - base.cursor;
+ lab17: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_9;
+ break lab17;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_9;
+ break lab17;
+ }
+ }
+ break lab14;
+ }
+ base.cursor = base.limit - v_8;
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ break lab11;
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab18: {
+ base.ket = base.cursor;
+ lab19: {
+ var /** number */ v_10 = base.limit - base.cursor;
+ lab20: {
+ if (!r_mark_ndAn())
+ {
+ break lab20;
+ }
+ break lab19;
+ }
+ base.cursor = base.limit - v_10;
+ if (!r_mark_nU())
+ {
+ break lab18;
+ }
+ }
+ lab21: {
+ var /** number */ v_11 = base.limit - base.cursor;
+ lab22: {
+ if (!r_mark_sU())
+ {
+ break lab22;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_12 = base.limit - base.cursor;
+ lab23: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_12;
+ break lab23;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_12;
+ break lab23;
+ }
+ }
+ break lab21;
+ }
+ base.cursor = base.limit - v_11;
+ if (!r_mark_lArI())
+ {
+ break lab18;
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab24: {
+ base.ket = base.cursor;
+ if (!r_mark_DAn())
+ {
+ break lab24;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_13 = base.limit - base.cursor;
+ lab25: {
+ base.ket = base.cursor;
+ lab26: {
+ var /** number */ v_14 = base.limit - base.cursor;
+ lab27: {
+ if (!r_mark_possessives())
+ {
+ break lab27;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_15 = base.limit - base.cursor;
+ lab28: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_15;
+ break lab28;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_15;
+ break lab28;
+ }
+ }
+ break lab26;
+ }
+ base.cursor = base.limit - v_14;
+ lab29: {
+ if (!r_mark_lAr())
+ {
+ break lab29;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_16 = base.limit - base.cursor;
+ lab30: {
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_16;
+ break lab30;
+ }
+ }
+ break lab26;
+ }
+ base.cursor = base.limit - v_14;
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_13;
+ break lab25;
+ }
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab31: {
+ base.ket = base.cursor;
+ lab32: {
+ var /** number */ v_17 = base.limit - base.cursor;
+ lab33: {
+ if (!r_mark_nUn())
+ {
+ break lab33;
+ }
+ break lab32;
+ }
+ base.cursor = base.limit - v_17;
+ if (!r_mark_ylA())
+ {
+ break lab31;
+ }
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_18 = base.limit - base.cursor;
+ lab34: {
+ lab35: {
+ var /** number */ v_19 = base.limit - base.cursor;
+ lab36: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ break lab36;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ break lab36;
+ }
+ break lab35;
+ }
+ base.cursor = base.limit - v_19;
+ lab37: {
+ base.ket = base.cursor;
+ lab38: {
+ var /** number */ v_20 = base.limit - base.cursor;
+ lab39: {
+ if (!r_mark_possessives())
+ {
+ break lab39;
+ }
+ break lab38;
+ }
+ base.cursor = base.limit - v_20;
+ if (!r_mark_sU())
+ {
+ break lab37;
+ }
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_21 = base.limit - base.cursor;
+ lab40: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_21;
+ break lab40;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_21;
+ break lab40;
+ }
+ }
+ break lab35;
+ }
+ base.cursor = base.limit - v_19;
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_18;
+ break lab34;
+ }
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab41: {
+ base.ket = base.cursor;
+ if (!r_mark_lArI())
+ {
+ break lab41;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab42: {
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ break lab42;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ lab43: {
+ base.ket = base.cursor;
+ lab44: {
+ var /** number */ v_22 = base.limit - base.cursor;
+ lab45: {
+ if (!r_mark_DA())
+ {
+ break lab45;
+ }
+ break lab44;
+ }
+ base.cursor = base.limit - v_22;
+ lab46: {
+ if (!r_mark_yU())
+ {
+ break lab46;
+ }
+ break lab44;
+ }
+ base.cursor = base.limit - v_22;
+ if (!r_mark_yA())
+ {
+ break lab43;
+ }
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_23 = base.limit - base.cursor;
+ lab47: {
+ base.ket = base.cursor;
+ lab48: {
+ var /** number */ v_24 = base.limit - base.cursor;
+ lab49: {
+ if (!r_mark_possessives())
+ {
+ break lab49;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_25 = base.limit - base.cursor;
+ lab50: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_25;
+ break lab50;
+ }
+ }
+ break lab48;
+ }
+ base.cursor = base.limit - v_24;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_23;
+ break lab47;
+ }
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ base.ket = base.cursor;
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_23;
+ break lab47;
+ }
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_1;
+ base.ket = base.cursor;
+ lab51: {
+ var /** number */ v_26 = base.limit - base.cursor;
+ lab52: {
+ if (!r_mark_possessives())
+ {
+ break lab52;
+ }
+ break lab51;
+ }
+ base.cursor = base.limit - v_26;
+ if (!r_mark_sU())
+ {
+ return false;
+ }
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ var /** number */ v_27 = base.limit - base.cursor;
+ lab53: {
+ base.ket = base.cursor;
+ if (!r_mark_lAr())
+ {
+ base.cursor = base.limit - v_27;
+ break lab53;
+ }
+ base.bra = base.cursor;
+ if (!base.slice_del())
+ {
+ return false;
+ }
+ if (!r_stem_suffix_chain_before_ki())
+ {
+ base.cursor = base.limit - v_27;
+ break lab53;
+ }
+ }
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_post_process_last_consonants() {
+ var /** number */ among_var;
+ base.ket = base.cursor;
+ among_var = base.find_among_b(a_23);
+ if (among_var == 0)
+ {
+ return false;
+ }
+ base.bra = base.cursor;
+ switch (among_var) {
+ case 1:
+ if (!base.slice_from("p"))
+ {
+ return false;
+ }
+ break;
+ case 2:
+ if (!base.slice_from("\u00E7"))
+ {
+ return false;
+ }
+ break;
+ case 3:
+ if (!base.slice_from("t"))
+ {
+ return false;
+ }
+ break;
+ case 4:
+ if (!base.slice_from("k"))
+ {
+ return false;
+ }
+ break;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_append_U_to_stems_ending_with_d_or_g() {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ var /** number */ v_2 = base.limit - base.cursor;
+ lab1: {
+ if (!(base.eq_s_b("d")))
+ {
+ break lab1;
+ }
+ break lab0;
+ }
+ base.cursor = base.limit - v_2;
+ if (!(base.eq_s_b("g")))
+ {
+ return false;
+ }
+ }
+ base.cursor = base.limit - v_1;
+ lab2: {
+ var /** number */ v_3 = base.limit - base.cursor;
+ lab3: {
+ var /** number */ v_4 = base.limit - base.cursor;
+ golab4: while(true)
+ {
+ var /** number */ v_5 = base.limit - base.cursor;
+ lab5: {
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ break lab5;
+ }
+ base.cursor = base.limit - v_5;
+ break golab4;
+ }
+ base.cursor = base.limit - v_5;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab3;
+ }
+ base.cursor--;
+ }
+ lab6: {
+ var /** number */ v_6 = base.limit - base.cursor;
+ lab7: {
+ if (!(base.eq_s_b("a")))
+ {
+ break lab7;
+ }
+ break lab6;
+ }
+ base.cursor = base.limit - v_6;
+ if (!(base.eq_s_b("\u0131")))
+ {
+ break lab3;
+ }
+ }
+ base.cursor = base.limit - v_4;
+ {
+ var /** number */ c1 = base.cursor;
+ base.insert(base.cursor, base.cursor, "\u0131");
+ base.cursor = c1;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_3;
+ lab8: {
+ var /** number */ v_7 = base.limit - base.cursor;
+ golab9: while(true)
+ {
+ var /** number */ v_8 = base.limit - base.cursor;
+ lab10: {
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ break lab10;
+ }
+ base.cursor = base.limit - v_8;
+ break golab9;
+ }
+ base.cursor = base.limit - v_8;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab8;
+ }
+ base.cursor--;
+ }
+ lab11: {
+ var /** number */ v_9 = base.limit - base.cursor;
+ lab12: {
+ if (!(base.eq_s_b("e")))
+ {
+ break lab12;
+ }
+ break lab11;
+ }
+ base.cursor = base.limit - v_9;
+ if (!(base.eq_s_b("i")))
+ {
+ break lab8;
+ }
+ }
+ base.cursor = base.limit - v_7;
+ {
+ var /** number */ c2 = base.cursor;
+ base.insert(base.cursor, base.cursor, "i");
+ base.cursor = c2;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_3;
+ lab13: {
+ var /** number */ v_10 = base.limit - base.cursor;
+ golab14: while(true)
+ {
+ var /** number */ v_11 = base.limit - base.cursor;
+ lab15: {
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ break lab15;
+ }
+ base.cursor = base.limit - v_11;
+ break golab14;
+ }
+ base.cursor = base.limit - v_11;
+ if (base.cursor <= base.limit_backward)
+ {
+ break lab13;
+ }
+ base.cursor--;
+ }
+ lab16: {
+ var /** number */ v_12 = base.limit - base.cursor;
+ lab17: {
+ if (!(base.eq_s_b("o")))
+ {
+ break lab17;
+ }
+ break lab16;
+ }
+ base.cursor = base.limit - v_12;
+ if (!(base.eq_s_b("u")))
+ {
+ break lab13;
+ }
+ }
+ base.cursor = base.limit - v_10;
+ {
+ var /** number */ c3 = base.cursor;
+ base.insert(base.cursor, base.cursor, "u");
+ base.cursor = c3;
+ }
+ break lab2;
+ }
+ base.cursor = base.limit - v_3;
+ var /** number */ v_13 = base.limit - base.cursor;
+ golab18: while(true)
+ {
+ var /** number */ v_14 = base.limit - base.cursor;
+ lab19: {
+ if (!(base.in_grouping_b(g_vowel, 97, 305)))
+ {
+ break lab19;
+ }
+ base.cursor = base.limit - v_14;
+ break golab18;
+ }
+ base.cursor = base.limit - v_14;
+ if (base.cursor <= base.limit_backward)
+ {
+ return false;
+ }
+ base.cursor--;
+ }
+ lab20: {
+ var /** number */ v_15 = base.limit - base.cursor;
+ lab21: {
+ if (!(base.eq_s_b("\u00F6")))
+ {
+ break lab21;
+ }
+ break lab20;
+ }
+ base.cursor = base.limit - v_15;
+ if (!(base.eq_s_b("\u00FC")))
+ {
+ return false;
+ }
+ }
+ base.cursor = base.limit - v_13;
+ {
+ var /** number */ c4 = base.cursor;
+ base.insert(base.cursor, base.cursor, "\u00FC");
+ base.cursor = c4;
+ }
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_is_reserved_word() {
+ if (!(base.eq_s_b("ad")))
+ {
+ return false;
+ }
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ if (!(base.eq_s_b("soy")))
+ {
+ base.cursor = base.limit - v_1;
+ break lab0;
+ }
+ }
+ if (base.cursor > base.limit_backward)
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_more_than_one_syllable_word() {
+ var /** number */ v_1 = base.cursor;
+ {
+ var v_2 = 2;
+ while(true)
+ {
+ var /** number */ v_3 = base.cursor;
+ lab0: {
+ golab1: while(true)
+ {
+ lab2: {
+ if (!(base.in_grouping(g_vowel, 97, 305)))
+ {
+ break lab2;
+ }
+ break golab1;
+ }
+ if (base.cursor >= base.limit)
+ {
+ break lab0;
+ }
+ base.cursor++;
+ }
+ v_2--;
+ continue;
+ }
+ base.cursor = v_3;
+ break;
+ }
+ if (v_2 > 0)
+ {
+ return false;
+ }
+ }
+ base.cursor = v_1;
+ return true;
+ };
+
+ /** @return {boolean} */
+ function r_postlude() {
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ {
+ var /** number */ v_1 = base.limit - base.cursor;
+ lab0: {
+ if (!r_is_reserved_word())
+ {
+ break lab0;
+ }
+ return false;
+ }
+ base.cursor = base.limit - v_1;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ r_append_U_to_stems_ending_with_d_or_g();
+ base.cursor = base.limit - v_2;
+ var /** number */ v_3 = base.limit - base.cursor;
+ r_post_process_last_consonants();
+ base.cursor = base.limit - v_3;
+ base.cursor = base.limit_backward;
+ return true;
+ };
+
+ this.stem = /** @return {boolean} */ function() {
+ if (!r_more_than_one_syllable_word())
+ {
+ return false;
+ }
+ base.limit_backward = base.cursor; base.cursor = base.limit;
+ var /** number */ v_1 = base.limit - base.cursor;
+ r_stem_nominal_verb_suffixes();
+ base.cursor = base.limit - v_1;
+ if (!B_continue_stemming_noun_suffixes)
+ {
+ return false;
+ }
+ var /** number */ v_2 = base.limit - base.cursor;
+ r_stem_noun_suffixes();
+ base.cursor = base.limit - v_2;
+ base.cursor = base.limit_backward;
+ if (!r_postlude())
+ {
+ return false;
+ }
+ return true;
+ };
+
+ /**@return{string}*/
+ this['stemWord'] = function(/**string*/word) {
+ base.setCurrent(word);
+ this.stem();
+ return base.getCurrent();
+ };
+};
diff --git a/sphinx/search/pt.py b/sphinx/search/pt.py
new file mode 100644
index 0000000..908a417
--- /dev/null
+++ b/sphinx/search/pt.py
@@ -0,0 +1,261 @@
+"""Portuguese search language: includes the JS Portuguese stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+portuguese_stopwords = parse_stop_word('''
+| source: http://snowball.tartarus.org/algorithms/portuguese/stop.txt
+de | of, from
+a | the; to, at; her
+o | the; him
+que | who, that
+e | and
+do | de + o
+da | de + a
+em | in
+um | a
+para | for
+ | é from SER
+com | with
+não | not, no
+uma | a
+os | the; them
+no | em + o
+se | himself etc
+na | em + a
+por | for
+mais | more
+as | the; them
+dos | de + os
+como | as, like
+mas | but
+ | foi from SER
+ao | a + o
+ele | he
+das | de + as
+ | tem from TER
+à | a + a
+seu | his
+sua | her
+ou | or
+ | ser from SER
+quando | when
+muito | much
+ | há from HAV
+nos | em + os; us
+já | already, now
+ | está from EST
+eu | I
+também | also
+só | only, just
+pelo | per + o
+pela | per + a
+até | up to
+isso | that
+ela | he
+entre | between
+ | era from SER
+depois | after
+sem | without
+mesmo | same
+aos | a + os
+ | ter from TER
+seus | his
+quem | whom
+nas | em + as
+me | me
+esse | that
+eles | they
+ | estão from EST
+você | you
+ | tinha from TER
+ | foram from SER
+essa | that
+num | em + um
+nem | nor
+suas | her
+meu | my
+às | a + as
+minha | my
+ | têm from TER
+numa | em + uma
+pelos | per + os
+elas | they
+ | havia from HAV
+ | seja from SER
+qual | which
+ | será from SER
+nós | we
+ | tenho from TER
+lhe | to him, her
+deles | of them
+essas | those
+esses | those
+pelas | per + as
+este | this
+ | fosse from SER
+dele | of him
+
+ | other words. There are many contractions such as naquele = em+aquele,
+ | mo = me+o, but they are rare.
+ | Indefinite article plural forms are also rare.
+
+tu | thou
+te | thee
+vocês | you (plural)
+vos | you
+lhes | to them
+meus | my
+minhas
+teu | thy
+tua
+teus
+tuas
+nosso | our
+nossa
+nossos
+nossas
+
+dela | of her
+delas | of them
+
+esta | this
+estes | these
+estas | these
+aquele | that
+aquela | that
+aqueles | those
+aquelas | those
+isto | this
+aquilo | that
+
+ | forms of estar, to be (not including the infinitive):
+estou
+está
+estamos
+estão
+estive
+esteve
+estivemos
+estiveram
+estava
+estávamos
+estavam
+estivera
+estivéramos
+esteja
+estejamos
+estejam
+estivesse
+estivéssemos
+estivessem
+estiver
+estivermos
+estiverem
+
+ | forms of haver, to have (not including the infinitive):
+hei
+há
+havemos
+hão
+houve
+houvemos
+houveram
+houvera
+houvéramos
+haja
+hajamos
+hajam
+houvesse
+houvéssemos
+houvessem
+houver
+houvermos
+houverem
+houverei
+houverá
+houveremos
+houverão
+houveria
+houveríamos
+houveriam
+
+ | forms of ser, to be (not including the infinitive):
+sou
+somos
+são
+era
+éramos
+eram
+fui
+foi
+fomos
+foram
+fora
+fôramos
+seja
+sejamos
+sejam
+fosse
+fôssemos
+fossem
+for
+formos
+forem
+serei
+será
+seremos
+serão
+seria
+seríamos
+seriam
+
+ | forms of ter, to have (not including the infinitive):
+tenho
+tem
+temos
+tém
+tinha
+tínhamos
+tinham
+tive
+teve
+tivemos
+tiveram
+tivera
+tivéramos
+tenha
+tenhamos
+tenham
+tivesse
+tivéssemos
+tivessem
+tiver
+tivermos
+tiverem
+terei
+terá
+teremos
+terão
+teria
+teríamos
+teriam
+''')
+
+
+class SearchPortuguese(SearchLanguage):
+ lang = 'pt'
+ language_name = 'Portuguese'
+ js_stemmer_rawcode = 'portuguese-stemmer.js'
+ stopwords = portuguese_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('portuguese')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/ro.py b/sphinx/search/ro.py
new file mode 100644
index 0000000..b6c9d67
--- /dev/null
+++ b/sphinx/search/ro.py
@@ -0,0 +1,22 @@
+"""Romanian search language: includes the JS Romanian stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict, Set
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage
+
+
+class SearchRomanian(SearchLanguage):
+ lang = 'ro'
+ language_name = 'Romanian'
+ js_stemmer_rawcode = 'romanian-stemmer.js'
+ stopwords: set[str] = set()
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('romanian')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/ru.py b/sphinx/search/ru.py
new file mode 100644
index 0000000..b8412c1
--- /dev/null
+++ b/sphinx/search/ru.py
@@ -0,0 +1,251 @@
+"""Russian search language: includes the JS Russian stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+russian_stopwords = parse_stop_word('''
+| source: http://snowball.tartarus.org/algorithms/russian/stop.txt
+и | and
+в | in/into
+во | alternative form
+не | not
+что | what/that
+он | he
+на | on/onto
+я | i
+с | from
+со | alternative form
+как | how
+а | milder form of `no' (but)
+то | conjunction and form of `that'
+все | all
+она | she
+так | so, thus
+его | him
+но | but
+да | yes/and
+ты | thou
+к | towards, by
+у | around, chez
+же | intensifier particle
+вы | you
+за | beyond, behind
+бы | conditional/subj. particle
+по | up to, along
+только | only
+ее | her
+мне | to me
+было | it was
+вот | here is/are, particle
+от | away from
+меня | me
+еще | still, yet, more
+нет | no, there isnt/arent
+о | about
+из | out of
+ему | to him
+теперь | now
+когда | when
+даже | even
+ну | so, well
+вдруг | suddenly
+ли | interrogative particle
+если | if
+уже | already, but homonym of `narrower'
+или | or
+ни | neither
+быть | to be
+был | he was
+него | prepositional form of его
+до | up to
+вас | you accusative
+нибудь | indef. suffix preceded by hyphen
+опять | again
+уж | already, but homonym of `adder'
+вам | to you
+сказал | he said
+ведь | particle `after all'
+там | there
+потом | then
+себя | oneself
+ничего | nothing
+ей | to her
+может | usually with `быть' as `maybe'
+они | they
+тут | here
+где | where
+есть | there is/are
+надо | got to, must
+ней | prepositional form of ей
+для | for
+мы | we
+тебя | thee
+их | them, their
+чем | than
+была | she was
+сам | self
+чтоб | in order to
+без | without
+будто | as if
+человек | man, person, one
+чего | genitive form of `what'
+раз | once
+тоже | also
+себе | to oneself
+под | beneath
+жизнь | life
+будет | will be
+ж | short form of intensifer particle `же'
+тогда | then
+кто | who
+этот | this
+говорил | was saying
+того | genitive form of `that'
+потому | for that reason
+этого | genitive form of `this'
+какой | which
+совсем | altogether
+ним | prepositional form of `его', `они'
+здесь | here
+этом | prepositional form of `этот'
+один | one
+почти | almost
+мой | my
+тем | instrumental/dative plural of `тот', `то'
+чтобы | full form of `in order that'
+нее | her (acc.)
+кажется | it seems
+сейчас | now
+были | they were
+куда | where to
+зачем | why
+сказать | to say
+всех | all (acc., gen. preposn. plural)
+никогда | never
+сегодня | today
+можно | possible, one can
+при | by
+наконец | finally
+два | two
+об | alternative form of `о', about
+другой | another
+хоть | even
+после | after
+над | above
+больше | more
+тот | that one (masc.)
+через | across, in
+эти | these
+нас | us
+про | about
+всего | in all, only, of all
+них | prepositional form of `они' (they)
+какая | which, feminine
+много | lots
+разве | interrogative particle
+сказала | she said
+три | three
+эту | this, acc. fem. sing.
+моя | my, feminine
+впрочем | moreover, besides
+хорошо | good
+свою | ones own, acc. fem. sing.
+этой | oblique form of `эта', fem. `this'
+перед | in front of
+иногда | sometimes
+лучше | better
+чуть | a little
+том | preposn. form of `that one'
+нельзя | one must not
+такой | such a one
+им | to them
+более | more
+всегда | always
+конечно | of course
+всю | acc. fem. sing of `all'
+между | between
+
+
+ | b: some paradigms
+ |
+ | personal pronouns
+ |
+ | я меня мне мной [мною]
+ | ты тебя тебе тобой [тобою]
+ | он его ему им [него, нему, ним]
+ | она ее эи ею [нее, нэи, нею]
+ | оно его ему им [него, нему, ним]
+ |
+ | мы нас нам нами
+ | вы вас вам вами
+ | они их им ими [них, ним, ними]
+ |
+ | себя себе собой [собою]
+ |
+ | demonstrative pronouns: этот (this), тот (that)
+ |
+ | этот эта это эти
+ | этого эты это эти
+ | этого этой этого этих
+ | этому этой этому этим
+ | этим этой этим [этою] этими
+ | этом этой этом этих
+ |
+ | тот та то те
+ | того ту то те
+ | того той того тех
+ | тому той тому тем
+ | тем той тем [тою] теми
+ | том той том тех
+ |
+ | determinative pronouns
+ |
+ | (a) весь (all)
+ |
+ | весь вся все все
+ | всего всю все все
+ | всего всей всего всех
+ | всему всей всему всем
+ | всем всей всем [всею] всеми
+ | всем всей всем всех
+ |
+ | (b) сам (himself etc)
+ |
+ | сам сама само сами
+ | самого саму само самих
+ | самого самой самого самих
+ | самому самой самому самим
+ | самим самой самим [самою] самими
+ | самом самой самом самих
+ |
+ | stems of verbs `to be', `to have', `to do' and modal
+ |
+ | быть бы буд быв есть суть
+ | име
+ | дел
+ | мог мож мочь
+ | уме
+ | хоч хот
+ | долж
+ | можн
+ | нужн
+ | нельзя
+''')
+
+
+class SearchRussian(SearchLanguage):
+ lang = 'ru'
+ language_name = 'Russian'
+ js_stemmer_rawcode = 'russian-stemmer.js'
+ stopwords = russian_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('russian')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/sv.py b/sphinx/search/sv.py
new file mode 100644
index 0000000..88cc560
--- /dev/null
+++ b/sphinx/search/sv.py
@@ -0,0 +1,140 @@
+"""Swedish search language: includes the JS Swedish stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage, parse_stop_word
+
+swedish_stopwords = parse_stop_word('''
+| source: http://snowball.tartarus.org/algorithms/swedish/stop.txt
+och | and
+det | it, this/that
+att | to (with infinitive)
+i | in, at
+en | a
+jag | I
+hon | she
+som | who, that
+han | he
+på | on
+den | it, this/that
+med | with
+var | where, each
+sig | him(self) etc
+för | for
+så | so (also: seed)
+till | to
+är | is
+men | but
+ett | a
+om | if; around, about
+hade | had
+de | they, these/those
+av | of
+icke | not, no
+mig | me
+du | you
+henne | her
+då | then, when
+sin | his
+nu | now
+har | have
+inte | inte någon = no one
+hans | his
+honom | him
+skulle | 'sake'
+hennes | her
+där | there
+min | my
+man | one (pronoun)
+ej | nor
+vid | at, by, on (also: vast)
+kunde | could
+något | some etc
+från | from, off
+ut | out
+när | when
+efter | after, behind
+upp | up
+vi | we
+dem | them
+vara | be
+vad | what
+över | over
+än | than
+dig | you
+kan | can
+sina | his
+här | here
+ha | have
+mot | towards
+alla | all
+under | under (also: wonder)
+någon | some etc
+eller | or (else)
+allt | all
+mycket | much
+sedan | since
+ju | why
+denna | this/that
+själv | myself, yourself etc
+detta | this/that
+åt | to
+utan | without
+varit | was
+hur | how
+ingen | no
+mitt | my
+ni | you
+bli | to be, become
+blev | from bli
+oss | us
+din | thy
+dessa | these/those
+några | some etc
+deras | their
+blir | from bli
+mina | my
+samma | (the) same
+vilken | who, that
+er | you, your
+sådan | such a
+vår | our
+blivit | from bli
+dess | its
+inom | within
+mellan | between
+sådant | such a
+varför | why
+varje | each
+vilka | who, that
+ditt | thy
+vem | who
+vilket | who, that
+sitta | his
+sådana | such a
+vart | each
+dina | thy
+vars | whose
+vårt | our
+våra | our
+ert | your
+era | your
+vilkas | whose
+''')
+
+
+class SearchSwedish(SearchLanguage):
+ lang = 'sv'
+ language_name = 'Swedish'
+ js_stemmer_rawcode = 'swedish-stemmer.js'
+ stopwords = swedish_stopwords
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('swedish')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/tr.py b/sphinx/search/tr.py
new file mode 100644
index 0000000..f4a865c
--- /dev/null
+++ b/sphinx/search/tr.py
@@ -0,0 +1,22 @@
+"""Turkish search language: includes the JS Turkish stemmer."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Dict, Set
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage
+
+
+class SearchTurkish(SearchLanguage):
+ lang = 'tr'
+ language_name = 'Turkish'
+ js_stemmer_rawcode = 'turkish-stemmer.js'
+ stopwords: set[str] = set()
+
+ def init(self, options: dict) -> None:
+ self.stemmer = snowballstemmer.stemmer('turkish')
+
+ def stem(self, word: str) -> str:
+ return self.stemmer.stemWord(word.lower())
diff --git a/sphinx/search/zh.py b/sphinx/search/zh.py
new file mode 100644
index 0000000..2a3a6e7
--- /dev/null
+++ b/sphinx/search/zh.py
@@ -0,0 +1,262 @@
+"""Chinese search language: includes routine to split words."""
+
+from __future__ import annotations
+
+import os
+import re
+from typing import TYPE_CHECKING, Dict, List
+
+import snowballstemmer
+
+from sphinx.search import SearchLanguage
+
+try:
+ import jieba
+ JIEBA = True
+except ImportError:
+ JIEBA = False
+
+english_stopwords = set("""
+a and are as at
+be but by
+for
+if in into is it
+near no not
+of on or
+such
+that the their then there these they this to
+was will with
+""".split())
+
+js_porter_stemmer = """
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+ var step2list = {
+ ational: 'ate',
+ tional: 'tion',
+ enci: 'ence',
+ anci: 'ance',
+ izer: 'ize',
+ bli: 'ble',
+ alli: 'al',
+ entli: 'ent',
+ eli: 'e',
+ ousli: 'ous',
+ ization: 'ize',
+ ation: 'ate',
+ ator: 'ate',
+ alism: 'al',
+ iveness: 'ive',
+ fulness: 'ful',
+ ousness: 'ous',
+ aliti: 'al',
+ iviti: 'ive',
+ biliti: 'ble',
+ logi: 'log'
+ };
+
+ var step3list = {
+ icate: 'ic',
+ ative: '',
+ alize: 'al',
+ iciti: 'ic',
+ ical: 'ic',
+ ful: '',
+ ness: ''
+ };
+
+ var c = "[^aeiou]"; // consonant
+ var v = "[aeiouy]"; // vowel
+ var C = c + "[^aeiouy]*"; // consonant sequence
+ var V = v + "[aeiou]*"; // vowel sequence
+
+ var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
+ var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
+ var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
+ var s_v = "^(" + C + ")?" + v; // vowel in stem
+
+ this.stemWord = function (w) {
+ var stem;
+ var suffix;
+ var firstch;
+ var origword = w;
+
+ if (w.length < 3)
+ return w;
+
+ var re;
+ var re2;
+ var re3;
+ var re4;
+
+ firstch = w.substr(0,1);
+ if (firstch == "y")
+ w = firstch.toUpperCase() + w.substr(1);
+
+ // Step 1a
+ re = /^(.+?)(ss|i)es$/;
+ re2 = /^(.+?)([^s])s$/;
+
+ if (re.test(w))
+ w = w.replace(re,"$1$2");
+ else if (re2.test(w))
+ w = w.replace(re2,"$1$2");
+
+ // Step 1b
+ re = /^(.+?)eed$/;
+ re2 = /^(.+?)(ed|ing)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ re = new RegExp(mgr0);
+ if (re.test(fp[1])) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+ }
+ else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1];
+ re2 = new RegExp(s_v);
+ if (re2.test(stem)) {
+ w = stem;
+ re2 = /(at|bl|iz)$/;
+ re3 = new RegExp("([^aeiouylsz])\\\\1$");
+ re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+ if (re2.test(w))
+ w = w + "e";
+ else if (re3.test(w)) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+ else if (re4.test(w))
+ w = w + "e";
+ }
+ }
+
+ // Step 1c
+ re = /^(.+?)y$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(s_v);
+ if (re.test(stem))
+ w = stem + "i";
+ }
+
+ // Step 2
+ re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|\
+ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = new RegExp(mgr0);
+ if (re.test(stem))
+ w = stem + step2list[suffix];
+ }
+
+ // Step 3
+ re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = new RegExp(mgr0);
+ if (re.test(stem))
+ w = stem + step3list[suffix];
+ }
+
+ // Step 4
+ re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|\
+iti|ous|ive|ize)$/;
+ re2 = /^(.+?)(s|t)(ion)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(mgr1);
+ if (re.test(stem))
+ w = stem;
+ }
+ else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1] + fp[2];
+ re2 = new RegExp(mgr1);
+ if (re2.test(stem))
+ w = stem;
+ }
+
+ // Step 5
+ re = /^(.+?)e$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(mgr1);
+ re2 = new RegExp(meq1);
+ re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+ if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+ w = stem;
+ }
+ re = /ll$/;
+ re2 = new RegExp(mgr1);
+ if (re.test(w) && re2.test(w)) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+
+ // and turn initial Y back to y
+ if (firstch == "y")
+ w = firstch.toLowerCase() + w.substr(1);
+ return w;
+ }
+}
+"""
+
+
+class SearchChinese(SearchLanguage):
+ """
+ Chinese search implementation
+ """
+
+ lang = 'zh'
+ language_name = 'Chinese'
+ js_stemmer_code = js_porter_stemmer
+ stopwords = english_stopwords
+ latin1_letters = re.compile(r'[a-zA-Z0-9_]+')
+ latin_terms: list[str] = []
+
+ def init(self, options: dict) -> None:
+ if JIEBA:
+ dict_path = options.get('dict')
+ if dict_path and os.path.isfile(dict_path):
+ jieba.load_userdict(dict_path)
+
+ self.stemmer = snowballstemmer.stemmer('english')
+
+ def split(self, input: str) -> list[str]:
+ chinese: list[str] = []
+ if JIEBA:
+ chinese = list(jieba.cut_for_search(input))
+
+ latin1 = \
+ [term.strip() for term in self.latin1_letters.findall(input)]
+ self.latin_terms.extend(latin1)
+ return chinese + latin1
+
+ def word_filter(self, stemmed_word: str) -> bool:
+ return len(stemmed_word) > 1
+
+ def stem(self, word: str) -> str:
+ # Don't stem Latin words that are long enough to be relevant for search
+ # if not stemmed, but would be too short after being stemmed
+ # avoids some issues with acronyms
+ should_not_be_stemmed = (
+ word in self.latin_terms and
+ len(word) >= 3 and
+ len(self.stemmer.stemWord(word.lower())) < 3
+ )
+ if should_not_be_stemmed:
+ return word.lower()
+ return self.stemmer.stemWord(word.lower())