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)

Reply via email to