diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py
index ace4dd015..6aa4fda4d 100644
--- a/sphinx/builders/html.py
+++ b/sphinx/builders/html.py
@@ -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:
diff --git a/sphinx/search/__init__.py b/sphinx/search/__init__.py
index ff3124542..645ebfc81 100644
--- a/sphinx/search/__init__.py
+++ b/sphinx/search/__init__.py
@@ -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),
diff --git a/sphinx/websupport/search/__init__.py b/sphinx/websupport/search/__init__.py
index 58773fa01..9410973ca 100644
--- a/sphinx/websupport/search/__init__.py
+++ b/sphinx/websupport/search/__init__.py
@@ -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'),
diff --git a/tests/test_search.py b/tests/test_search.py
index 08ba40e57..d9dcfb81b 100644
--- a/tests/test_search.py
+++ b/tests/test_search.py
@@ -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