From cfe85b4e8ba0f79ca028798af21feec9b772c9e5 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 4 Jan 2011 12:47:49 +0100 Subject: [PATCH] Determine search language in builder, and add missing method in websupport indexer implementations. --- sphinx/builders/html.py | 13 +++++++++---- sphinx/search/__init__.py | 9 +++------ sphinx/websupport/search/__init__.py | 5 +++++ tests/test_search.py | 2 +- 4 files changed, 18 insertions(+), 11 deletions(-) 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