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 return pub.writer.parts
def prepare_writing(self, docnames): def prepare_writing(self, docnames):
from sphinx.search import IndexBuilder # create the search indexer
from sphinx.search import IndexBuilder, languages
self.indexer = IndexBuilder(self.env) 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.load_indexer(docnames)
self.docwriter = HTMLWriter(self) self.docwriter = HTMLWriter(self)
self.docsettings = OptionParser( self.docsettings = OptionParser(
defaults=self.env.settings, defaults=self.env.settings,
@ -542,7 +547,7 @@ class StandaloneHTMLBuilder(Builder):
# add context items for search function used in searchtools.js_t # add context items for search function used in searchtools.js_t
ctx = self.globalcontext.copy() 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 # then, copy over theme-supplied static files
if self.theme: if self.theme:

View File

@ -156,7 +156,7 @@ class IndexBuilder(object):
'pickle': pickle 'pickle': pickle
} }
def __init__(self, env): def __init__(self, env, lang, options):
self.env = env self.env = env
# filename -> title # filename -> title
self._titles = {} self._titles = {}
@ -167,10 +167,7 @@ class IndexBuilder(object):
# objtype index -> objname (localized) # objtype index -> objname (localized)
self._objnames = {} self._objnames = {}
# add language-specific SearchLanguage instance # add language-specific SearchLanguage instance
search_language = env.config.html_search_language or env.config.language self.lang = languages[lang](options)
if not search_language or search_language not in languages:
search_language = 'en'
self.lang = languages[search_language](env.config.html_search_options)
def load(self, stream, format): def load(self, stream, format):
"""Reconstruct from frozen data.""" """Reconstruct from frozen data."""
@ -277,7 +274,7 @@ class IndexBuilder(object):
for word in visitor.found_words: for word in visitor.found_words:
add_term(word) add_term(word)
def globalcontext_for_searchtool(self): def context_for_searchtool(self):
return dict( return dict(
search_language_stemming_code = self.lang.js_stemmer_code, search_language_stemming_code = self.lang.js_stemmer_code,
search_language_stop_words = jsdump.dumps(self.lang.stopwords), search_language_stop_words = jsdump.dumps(self.lang.stopwords),

View File

@ -113,6 +113,11 @@ class BaseSearch(object):
except TypeError: except TypeError:
return context return context
def context_for_searchtool(self):
"""Required by the HTML builder."""
return {}
# The built-in search adapters. # The built-in search adapters.
SEARCH_ADAPTERS = { SEARCH_ADAPTERS = {
'xapian': ('xapiansearch', 'XapianSearch'), 'xapian': ('xapiansearch', 'XapianSearch'),

View File

@ -36,7 +36,7 @@ def test_wordcollector():
doc['file'] = 'dummy' doc['file'] = 'dummy'
parser.parse(FILE_CONTENTS, doc) parser.parse(FILE_CONTENTS, doc)
ix = IndexBuilder(None) ix = IndexBuilder(None, 'en', {})
ix.feed('filename', 'title', doc) ix.feed('filename', 'title', doc)
assert 'boson' not in ix._mapping assert 'boson' not in ix._mapping
assert 'fermion' in ix._mapping assert 'fermion' in ix._mapping