Selaa lähdekoodia

contrib/lisp/org-export: Extend footnote numbering to definitions

* contrib/lisp/org-export.el (org-export-get-footnote-number): Also
  retrieve ordinal associated to a footnote definition.
Nicolas Goaziou 13 vuotta sitten
vanhempi
commit
a7afc47572
1 muutettua tiedostoa jossa 21 lisäystä ja 7 poistoa
  1. 21 7
      contrib/lisp/org-export.el

+ 21 - 7
contrib/lisp/org-export.el

@@ -2156,14 +2156,28 @@ INFO is the plist used as a communication channel."
     (or (org-element-get-property :inline-definition footnote-reference)
         (cdr (assoc label (plist-get info :footnote-definition-alist))))))
 
-(defun org-export-get-footnote-number (footnote-reference info)
-  "Return footnote number associated to FOOTNOTE-REFERENCE.
+(defun org-export-get-footnote-number (footnote info)
+  "Return number associated to a footnote.
+
+FOOTNOTE is either a footnote reference or a footnote definition.
 INFO is the plist used as a communication channel."
-  (let* ((all-seen (plist-get info :footnote-seen-labels))
-         (label (org-element-get-property :label footnote-reference))
-         ;; Anonymous footnotes are always new footnotes.
-         (seenp (and label (member label all-seen))))
-    (if seenp (length seenp) (1+ (length all-seen)))))
+  (let ((label (org-element-get-property :label footnote)))
+    (if (eq (car footnote) 'footnote-definition)
+	;; If a footnote definition was provided, first search for
+	;; a relative footnote reference, as only footnote references
+	;; can determine the associated ordinal.
+	(org-element-map
+	 (plist-get info :parse-tree) 'footnote-reference
+	 (lambda (foot-ref local)
+	   (when (string= (org-element-get-property :label foot-ref) label)
+	     (let* ((all-seen (plist-get info :footnote-seen-labels))
+		    (seenp (and label (member label all-seen))))
+	       (if seenp (length seenp) (1+ (length all-seen))))))
+	 info 'first-match)
+      (let* ((all-seen (plist-get info :footnote-seen-labels))
+	     ;; Anonymous footnotes are always new footnotes.
+	     (seenp (and label (member label all-seen))))
+	(if seenp (length seenp) (1+ (length all-seen)))))))
 
 
 ;;;; For Headlines