diff options
author | Enrico Jörns <ejo@pengutronix.de> | 2025-05-20 11:45:14 +0200 |
---|---|---|
committer | Steve Sakoman <steve@sakoman.com> | 2025-05-28 08:46:32 -0700 |
commit | c5b17456e624f1f8f0ef3b3b5ce1cb6d5f17f272 (patch) | |
tree | e3cbf518552e640bafae8173b6dfe82a11e2db03 | |
parent | 9fe29f2369bd43d52656d1ec29acc59492744c68 (diff) | |
download | poky-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.py | 19 |
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 | # |
15 | import os | 15 | import os |
16 | import re | ||
16 | import sys | 17 | import sys |
17 | import datetime | 18 | import datetime |
18 | try: | 19 | try: |
@@ -165,6 +166,24 @@ latex_elements = { | |||
165 | 'preamble': '\\setcounter{tocdepth}{2}', | 166 | 'preamble': '\\setcounter{tocdepth}{2}', |
166 | } | 167 | } |
167 | 168 | ||
169 | |||
170 | from sphinx.search import SearchEnglish | ||
171 | from sphinx.search import languages | ||
172 | class DashFriendlySearchEnglish(SearchEnglish): | ||
173 | |||
174 | # Accept words that can include hyphens | ||
175 | _word_re = re.compile(r'[\w\-]+') | ||
176 | |||
177 | js_splitter_code = """ | ||
178 | function splitQuery(query) { | ||
179 | return query | ||
180 | .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}-]+/gu) | ||
181 | .filter(term => term.length > 0); | ||
182 | } | ||
183 | """ | ||
184 | |||
185 | languages['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 |
169 | from sphinx.builders.epub3 import Epub3Builder | 188 | from sphinx.builders.epub3 import Epub3Builder |
170 | Epub3Builder.supported_image_types = ['image/png', 'image/gif', 'image/jpeg'] | 189 | Epub3Builder.supported_image_types = ['image/png', 'image/gif', 'image/jpeg'] |