Determine search language in builder, and add missing method in websupport indexer implementations.

This commit is contained in:
Georg Brandl 2011-01-04 12:47:49 +01:00
parent 7beb8533b5
commit cfe85b4e8b
4 changed files with 18 additions and 11 deletions

View File

@ -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:

View File

@ -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),

View File

@ -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'),

View File

@ -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