mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Determine search language in builder, and add missing method in websupport indexer implementations.
This commit is contained in:
parent
7beb8533b5
commit
cfe85b4e8b
@ -232,10 +232,15 @@ class StandaloneHTMLBuilder(Builder):
|
||||
return pub.writer.parts
|
||||
|
||||
def prepare_writing(self, docnames):
|
||||
from sphinx.search import IndexBuilder
|
||||
|
||||
self.indexer = IndexBuilder(self.env)
|
||||
# create the search indexer
|
||||
from sphinx.search import IndexBuilder, languages
|
||||
lang = self.config.html_search_language or self.config.language
|
||||
if not lang or lang not in languages:
|
||||
lang = 'en'
|
||||
self.indexer = IndexBuilder(self.env, lang,
|
||||
self.config.html_search_options)
|
||||
self.load_indexer(docnames)
|
||||
|
||||
self.docwriter = HTMLWriter(self)
|
||||
self.docsettings = OptionParser(
|
||||
defaults=self.env.settings,
|
||||
@ -542,7 +547,7 @@ class StandaloneHTMLBuilder(Builder):
|
||||
|
||||
# add context items for search function used in searchtools.js_t
|
||||
ctx = self.globalcontext.copy()
|
||||
ctx.update(self.indexer.globalcontext_for_searchtool())
|
||||
ctx.update(self.indexer.context_for_searchtool())
|
||||
|
||||
# then, copy over theme-supplied static files
|
||||
if self.theme:
|
||||
|
@ -156,7 +156,7 @@ class IndexBuilder(object):
|
||||
'pickle': pickle
|
||||
}
|
||||
|
||||
def __init__(self, env):
|
||||
def __init__(self, env, lang, options):
|
||||
self.env = env
|
||||
# filename -> title
|
||||
self._titles = {}
|
||||
@ -167,10 +167,7 @@ class IndexBuilder(object):
|
||||
# objtype index -> objname (localized)
|
||||
self._objnames = {}
|
||||
# add language-specific SearchLanguage instance
|
||||
search_language = env.config.html_search_language or env.config.language
|
||||
if not search_language or search_language not in languages:
|
||||
search_language = 'en'
|
||||
self.lang = languages[search_language](env.config.html_search_options)
|
||||
self.lang = languages[lang](options)
|
||||
|
||||
def load(self, stream, format):
|
||||
"""Reconstruct from frozen data."""
|
||||
@ -277,7 +274,7 @@ class IndexBuilder(object):
|
||||
for word in visitor.found_words:
|
||||
add_term(word)
|
||||
|
||||
def globalcontext_for_searchtool(self):
|
||||
def context_for_searchtool(self):
|
||||
return dict(
|
||||
search_language_stemming_code = self.lang.js_stemmer_code,
|
||||
search_language_stop_words = jsdump.dumps(self.lang.stopwords),
|
||||
|
@ -113,6 +113,11 @@ class BaseSearch(object):
|
||||
except TypeError:
|
||||
return context
|
||||
|
||||
def context_for_searchtool(self):
|
||||
"""Required by the HTML builder."""
|
||||
return {}
|
||||
|
||||
|
||||
# The built-in search adapters.
|
||||
SEARCH_ADAPTERS = {
|
||||
'xapian': ('xapiansearch', 'XapianSearch'),
|
||||
|
@ -36,7 +36,7 @@ def test_wordcollector():
|
||||
doc['file'] = 'dummy'
|
||||
parser.parse(FILE_CONTENTS, doc)
|
||||
|
||||
ix = IndexBuilder(None)
|
||||
ix = IndexBuilder(None, 'en', {})
|
||||
ix.feed('filename', 'title', doc)
|
||||
assert 'boson' not in ix._mapping
|
||||
assert 'fermion' in ix._mapping
|
||||
|
Loading…
Reference in New Issue
Block a user