branch: externals/hyperbole
commit d25087f960971fd653eeeb03a21c673c570f7122
Author: Mats Lidell <[email protected]>
Commit: Mats Lidell <[email protected]>
Use hpath:find header link logic for HyWiki links
* hywiki.el (hywiki--org-link-html-format): Use
`hpath:dashes-to-spaces-markup-anchor' to make header match target.
* test/hywiki-tests.el
(hywiki-tests--action-key-moves-to-word-and-section-using-dash-to-space-conversion):
Add test for headers with dashes.
(hywiki-tests--published-html-links-to-word-and-section): Update test to
the dash to space conversion in headers.
---
ChangeLog | 9 +++++++++
hywiki.el | 3 ++-
test/hywiki-tests.el | 41 ++++++++++++++++++++++++++++++++++++++---
3 files changed, 49 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 559f7b0b5b..b11735002a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2026-02-15 Mats Lidell <[email protected]>
+
+* hywiki.el (hywiki--org-link-html-format): Use
+ `hpath:dashes-to-spaces-markup-anchor' to make header match target.
+* test/hywiki-tests.el
(hywiki-tests--action-key-moves-to-word-and-section-using-dash-to-space-conversion):
+ Add test for headers with dashes.
+ (hywiki-tests--published-html-links-to-word-and-section): Update test to
+ the dash to space conversion in headers.
+
2026-02-14 Bob Weiner <[email protected]>
* hsys-org.el (hsys-org-fix-version): Ensure 'org-install-dir' is a dir and
diff --git a/hywiki.el b/hywiki.el
index f10841f4ca..7b2159132d 100644
--- a/hywiki.el
+++ b/hywiki.el
@@ -3035,7 +3035,8 @@ If not found, set it up and return the new project
properties."
(defun hywiki--org-link-html-format (path-stem suffix desc info)
"Format an html link using Org ids."
- (let* ((heading (and suffix (not (string-empty-p suffix)) (substring suffix
1)))
+ (let* ((raw-heading (and suffix (not (string-empty-p suffix)) (substring
suffix 1)))
+ (heading (and raw-heading (hpath:dashes-to-spaces-markup-anchor
raw-heading)))
(link-obj (org-element-create
'link
(list
diff --git a/test/hywiki-tests.el b/test/hywiki-tests.el
index a9aa5ac46e..f3afe1c1c5 100644
--- a/test/hywiki-tests.el
+++ b/test/hywiki-tests.el
@@ -877,7 +877,7 @@ body B
(condition-case err-msg
(dolist (w words)
(setq wiki-link (car w)
- expected-str-at-pos (cdr w))
+ expected-str-at-pos (regexp-quote (cdr w)))
(erase-buffer)
(hywiki-tests--insert wiki-link)
(goto-char 4)
@@ -887,6 +887,41 @@ body B
(error (error "'%s', '%s' - Error: %s"
wiki-link expected-str-at-pos err-msg))))))))
+(ert-deftest
hywiki-tests--action-key-moves-to-word-and-section-using-dash-to-space-conversion
()
+ "Verify action key on a WikiWord with section, line and column works.
+Verify dash in the header matches a target with dash replaced by space."
+ (hywiki-tests--preserve-hywiki-mode
+ (let ((words '(("WikiWord#first" . "* first")
+ ("WikiWord#header-one" . "* header one")
+ ("WikiWord#first one" . "* first")
+ ("(WikiWord#header one)" . "* header one")
+ ("WikiWord#header--two" . "* header two")
+ ("(WikiWord#header--three)" . "* header three")
+ ("WikiWord#header---four" . "* header four"))))
+ ;; Setup target WikiWord
+ (with-current-buffer (find-file-noselect wiki-page)
+ (hywiki-tests--insert "\
+* first
+* header one
+* header two
+* header three
+* header four
+")
+ (save-buffer))
+ ;; Create temp buffers with WikiWord links to the target
+ ;; WikiWord page and verify they work.
+ (with-temp-buffer
+ (dolist (w words)
+ (let ((wiki-link (car w))
+ (expected-str-at-pos (regexp-quote (cdr w))))
+ (ert-info ((format "Link: %s Header: %s" wiki-link
expected-str-at-pos))
+ (erase-buffer)
+ (hywiki-tests--insert wiki-link)
+ (goto-char 4)
+ (save-excursion
+ (action-key)
+ (should (looking-at-p expected-str-at-pos))))))))))
+
(defun hywiki-tests--search-section (section)
"Find SECTION in current buffer and return the id string.
Search for elements of type <h?>...</h?> for the id string. Example:
@@ -924,7 +959,7 @@ First line
body A
** Bsection subsection
body B
-*** Csection-subsection
+*** Csection subsection
body C
")
(save-buffer)
@@ -950,7 +985,7 @@ WikiWord#Csection-subsection
(with-current-buffer (find-file-noselect wikiword-html)
(setq idA (should (hywiki-tests--search-section "Asection")))
(setq idB (should (hywiki-tests--search-section "Bsection
subsection")))
- (setq idC (should (hywiki-tests--search-section
"Csection-subsection"))))
+ (setq idC (should (hywiki-tests--search-section "Csection
subsection"))))
;; Verify links are generated
(find-file wikipage-html)