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
|
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:
|
||||||
|
@ -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),
|
||||||
|
@ -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'),
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user