1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-06 06:20:55 -08:00

Fix pluralization in shortdoc-help-fns-examples-function

* lisp/emacs-lisp/shortdoc.el (shortdoc-help-fns-examples-function):
Implement a better logic to pluralize "Example", by counting the
number of arrow characters in the example string. (Bug#61877)
* test/lisp/emacs-lisp/shortdoc-tests.el
(shortdoc-help-fns-examples-function-test): Add a test.
This commit is contained in:
Daniel Martín 2023-03-12 13:38:34 +01:00 committed by Eli Zaretskii
parent 9191fd50d2
commit d19416d15c
2 changed files with 45 additions and 5 deletions

View file

@ -1621,13 +1621,38 @@ doesn't has any shortdoc information."
You can add this function to the `help-fns-describe-function-functions'
hook to show examples of using FUNCTION in *Help* buffers produced
by \\[describe-function]."
(let ((examples (shortdoc-function-examples function))
(times 0))
(let* ((examples (shortdoc-function-examples function))
(num-examples (length examples))
(times 0))
(dolist (example examples)
(when (zerop times)
(if (eq (length examples) 1)
(insert "\n Example:\n\n")
(insert "\n Examples:\n\n")))
(if (> num-examples 1)
(insert "\n Examples:\n\n")
;; Some functions have more than one example per group.
;; Count the number of arrows to know if we need to
;; pluralize "Example".
(let* ((text (cdr example))
(count 0)
(pos 0)
(end (length text))
(double-arrow (if (char-displayable-p ?⇒)
""
" =>"))
(double-arrow-example (if (char-displayable-p ?⇒)
" e.g. ⇒"
" e.g. =>"))
(single-arrow (if (char-displayable-p ?→)
""
" ->")))
(while (and (< pos end)
(or (string-match double-arrow text pos)
(string-match double-arrow-example text pos)
(string-match single-arrow text pos)))
(setq count (1+ count)
pos (match-end 0)))
(if (> count 1)
(insert "\n Examples:\n\n")
(insert "\n Example:\n\n")))))
(setq times (1+ times))
(insert " ")
(insert (cdr example))