From a89d96e6a5bb519c5bc03ef0f984e89de940f8b3 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Mon, 19 Apr 2021 14:32:53 +0200 Subject: [PATCH] texinfo: Consider any variation on "Top" a reserved node name * lisp/ox-texinfo.el (org-texinfo--get-node): Change node name if it conflicts with variations like "top", since they also appear to be reserved by Texinfo. --- lisp/ox-texinfo.el | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el index ece0ef4d8..b9c3f1da6 100644 --- a/lisp/ox-texinfo.el +++ b/lisp/ox-texinfo.el @@ -489,16 +489,18 @@ node or anchor name is unique." ;; Org exports deeper elements before their parents. If two ;; node names collide -- e.g., they have the same title -- ;; within the same hierarchy, the second one would get the - ;; shorter node name. This is counter-intuitive. - ;; Consequently, we ensure that every parent headline get - ;; its node beforehand. As a recursive operation, this + ;; smaller node name. This is counter-intuitive. + ;; Consequently, we ensure that every parent headline gets + ;; its node beforehand. As a recursive operation, this ;; achieves the desired effect. (let ((parent (org-element-lineage datum '(headline)))) (when (and parent (not (assq parent cache))) (org-texinfo--get-node parent info) (setq cache (plist-get info :texinfo-node-cache)))) - ;; Ensure NAME is unique and not reserved node name "Top". - (while (or (equal name "Top") (rassoc name cache)) + ;; Ensure NAME is unique and not reserved node name "Top", + ;; no matter what case is used. + (while (or (string-equal "Top" (capitalize name)) + (rassoc name cache)) (setq name (concat basename (format " (%d)" (cl-incf salt))))) (plist-put info :texinfo-node-cache (cons (cons datum name) cache)) name))))