summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEnrico Jörns <ejo@pengutronix.de>2025-05-20 11:45:14 +0200
committerSteve Sakoman <steve@sakoman.com>2025-05-28 08:46:32 -0700
commitc5b17456e624f1f8f0ef3b3b5ce1cb6d5f17f272 (patch)
treee3cbf518552e640bafae8173b6dfe82a11e2db03
parent9fe29f2369bd43d52656d1ec29acc59492744c68 (diff)
downloadpoky-c5b17456e624f1f8f0ef3b3b5ce1cb6d5f17f272.tar.gz
conf.py: tweak SearchEnglish to be hyphen-friendly
This modifies the default indexer split() and js splitQuery() methods to support searching for words with hyphens. While this might not be an ideal, rock solid, and fully future-proof solution, it allows at least to search for strings inlcuding hyphens, such as 'bitbake-layers', 'send-error-report', or 'oe-core'. Below is a bit more detailed explanation of the two modifications done: 1) The default split regex in the sphinx-doc SearchLanguage base class is: | _word_re = re.compile(r'\w+') which we simply extend to include hyphens '-'. This will result in a searchindex.js that contains words with hyphens, too. 2) The 'searchtool.js' code notes for its splitQuery() implementation: | /** | * Default splitQuery function. Can be overridden in ``sphinx.search`` with a | * custom function per language. | * | * The regular expression works by splitting the string on consecutive characters | * that are not Unicode letters, numbers, underscores, or emoji characters. | * This is the same as ``\W+`` in Python, preserving the surrogate pair area. | */ | if (typeof splitQuery === "undefined") { | var splitQuery = (query) => query | .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) | .filter(term => term) // remove remaining empty strings | } The hook for this is documented in the sphinx-docs 'SearchLanguage' base class. | .. attribute:: js_splitter_code | | Return splitter function of JavaScript version. The function should be | named as ``splitQuery``. And it should take a string and return list of | strings. | | .. versionadded:: 3.0 We use this to define a simplified splitQuery() function with a split argument that splits on empty spaces only. We extend SearchEnglish (which extends SearchLanguage) here to retain the stemmer code and stopwords for English. [YOCTO #14534] (From yocto-docs rev: 72e70a6af6eb3d4ca41f9e64069d8d3f61b420a3) Signed-off-by: Enrico Jörns <ejo@pengutronix.de> Signed-off-by: Antonin Godard <antonin.godard@bootlin.com> (cherry picked from commit d4a98ee19e0cbd6be96923dc72faee143a6b294b) Signed-off-by: Antonin Godard <antonin.godard@bootlin.com> Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r--documentation/conf.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/documentation/conf.py b/documentation/conf.py
index 74aacc18c5..efd1a1618f 100644
--- a/documentation/conf.py
+++ b/documentation/conf.py
@@ -13,6 +13,7 @@
13# documentation root, use os.path.abspath to make it absolute, like shown here. 13# documentation root, use os.path.abspath to make it absolute, like shown here.
14# 14#
15import os 15import os
16import re
16import sys 17import sys
17import datetime 18import datetime
18try: 19try:
@@ -165,6 +166,24 @@ latex_elements = {
165 'preamble': '\\setcounter{tocdepth}{2}', 166 'preamble': '\\setcounter{tocdepth}{2}',
166} 167}
167 168
169
170from sphinx.search import SearchEnglish
171from sphinx.search import languages
172class DashFriendlySearchEnglish(SearchEnglish):
173
174 # Accept words that can include hyphens
175 _word_re = re.compile(r'[\w\-]+')
176
177 js_splitter_code = """
178function splitQuery(query) {
179 return query
180 .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}-]+/gu)
181 .filter(term => term.length > 0);
182}
183"""
184
185languages['en'] = DashFriendlySearchEnglish
186
168# Make the EPUB builder prefer PNG to SVG because of issues rendering Inkscape SVG 187# Make the EPUB builder prefer PNG to SVG because of issues rendering Inkscape SVG
169from sphinx.builders.epub3 import Epub3Builder 188from sphinx.builders.epub3 import Epub3Builder
170Epub3Builder.supported_image_types = ['image/png', 'image/gif', 'image/jpeg'] 189Epub3Builder.supported_image_types = ['image/png', 'image/gif', 'image/jpeg']