Skip to content

Commit 34553dc

Browse files
committed
Embed stemmer code into language_data.js by reading it from minified-js files
1 parent 5abbb40 commit 34553dc

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

sphinx/builders/html/__init__.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -754,9 +754,13 @@ def copy_translation_js(self) -> None:
754754
def copy_stemmer_js(self) -> None:
755755
"""Copy a JavaScript file for stemmer."""
756756
if self.indexer is not None:
757-
jsfile = self.indexer.get_js_stemmer_rawcode()
758-
if jsfile:
759-
copyfile(jsfile, path.join(self.outdir, '_static', '_stemmer.js'))
757+
if hasattr(self.indexer, 'get_js_stemmer_rawcodes'):
758+
for jsfile in self.indexer.get_js_stemmer_rawcodes():
759+
copyfile(jsfile, path.join(self.outdir, '_static', path.basename(jsfile)))
760+
else:
761+
jsfile = self.indexer.get_js_stemmer_rawcode()
762+
if jsfile:
763+
copyfile(jsfile, path.join(self.outdir, '_static', '_stemmer.js'))
760764

761765
def copy_theme_static_files(self, context: Dict) -> None:
762766
def onerror(filename: str, error: Exception) -> None:

sphinx/search/__init__.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -439,15 +439,34 @@ def context_for_searchtool(self) -> Dict[str, Any]:
439439
js_splitter_code = self.js_splitter_code
440440

441441
return {
442-
'search_language_stemming_code': self.lang.js_stemmer_code,
442+
'search_language_stemming_code': self.get_js_stemmer_code(),
443443
'search_language_stop_words': jsdump.dumps(sorted(self.lang.stopwords)),
444444
'search_scorer_tool': self.js_scorer_code,
445445
'search_word_splitter_code': js_splitter_code,
446446
}
447447

448+
def get_js_stemmer_rawcodes(self) -> List[str]:
449+
"""Returns a list of non-minified stemmer JS files to copy."""
450+
if self.lang.js_stemmer_rawcode:
451+
return [
452+
path.join(package_dir, 'search', 'non-minified-js', fname)
453+
for fname in ('base-stemmer.js', self.lang.js_stemmer_rawcode)
454+
]
455+
else:
456+
return []
457+
448458
def get_js_stemmer_rawcode(self) -> str:
459+
return None
460+
461+
def get_js_stemmer_code(self) -> str:
462+
"""Returns JS code that will be inserted into language_data.js."""
449463
if self.lang.js_stemmer_rawcode:
450-
return path.join(package_dir, 'search', 'non-minified-js',
451-
self.lang.js_stemmer_rawcode)
464+
js_dir = path.join(package_dir, 'search', 'minified-js')
465+
with open(path.join(js_dir, 'base-stemmer.js')) as js_file:
466+
base_js = js_file.read()
467+
with open(path.join(js_dir, self.lang.js_stemmer_rawcode)) as js_file:
468+
language_js = js_file.read()
469+
return ('%s\n%s\nStemmer = %sStemmer;' %
470+
(base_js, language_js, self.lang.language_name))
452471
else:
453-
return None
472+
return self.lang.js_stemmer_code

0 commit comments

Comments
 (0)