|
@@ -32,15 +32,15 @@ body to execute. The defined back-end simply returns parsed data
|
|
as Org syntax."
|
|
as Org syntax."
|
|
(declare (debug (form body)) (indent 1))
|
|
(declare (debug (form body)) (indent 1))
|
|
`(flet ,(let (transcoders)
|
|
`(flet ,(let (transcoders)
|
|
- (dolist (type (append org-element-all-elements
|
|
|
|
- org-element-all-objects)
|
|
|
|
- transcoders)
|
|
|
|
- (push `(,(intern (format "org-%s-%s" backend type))
|
|
|
|
- (obj contents info)
|
|
|
|
- (,(intern (format "org-element-%s-interpreter" type))
|
|
|
|
- obj contents))
|
|
|
|
- transcoders)))
|
|
|
|
- ,@body))
|
|
|
|
|
|
+ (dolist (type (append org-element-all-elements
|
|
|
|
+ org-element-all-objects)
|
|
|
|
+ transcoders)
|
|
|
|
+ (push `(,(intern (format "org-%s-%s" backend type))
|
|
|
|
+ (obj contents info)
|
|
|
|
+ (,(intern (format "org-element-%s-interpreter" type))
|
|
|
|
+ obj contents))
|
|
|
|
+ transcoders)))
|
|
|
|
+ ,@body))
|
|
|
|
|
|
(ert-deftest test-org-export/parse-option-keyword ()
|
|
(ert-deftest test-org-export/parse-option-keyword ()
|
|
"Test reading all standard #+OPTIONS: items."
|
|
"Test reading all standard #+OPTIONS: items."
|
|
@@ -320,49 +320,52 @@ body\n")))
|
|
"Test footnotes specifications."
|
|
"Test footnotes specifications."
|
|
(let ((org-footnote-section nil))
|
|
(let ((org-footnote-section nil))
|
|
;; 1. Read every type of footnote.
|
|
;; 1. Read every type of footnote.
|
|
- (org-test-with-temp-text "
|
|
|
|
-Text[fn:1] [1] [fn:label:C] [fn::D]
|
|
|
|
-
|
|
|
|
-[fn:1] A
|
|
|
|
-
|
|
|
|
-[1] B"
|
|
|
|
-(let* ((tree (org-element-parse-buffer))
|
|
|
|
- (info (org-combine-plists
|
|
|
|
- (org-export-initial-options) '(:with-footnotes t))))
|
|
|
|
- (setq info (org-combine-plists
|
|
|
|
- info (org-export-collect-tree-properties tree info 'test)))
|
|
|
|
- (should
|
|
|
|
- (equal
|
|
|
|
- '((1 . "A") (2 . "B") (3 . "C") (4 . "D"))
|
|
|
|
- (org-element-map
|
|
|
|
- tree 'footnote-reference
|
|
|
|
- (lambda (ref)
|
|
|
|
- (cons (org-export-get-footnote-number ref info)
|
|
|
|
- (if (eq (org-element-property :type ref) 'inline)
|
|
|
|
- (car (org-export-get-footnote-definition ref info))
|
|
|
|
- (car (org-element-contents
|
|
|
|
- (car (org-element-contents
|
|
|
|
- (org-export-get-footnote-definition ref info))))))))
|
|
|
|
- info)))))
|
|
|
|
- ;; 2. Test nested footnotes.
|
|
|
|
- (org-test-with-temp-text "
|
|
|
|
-Text[fn:1:A[fn:2]] [fn:3].
|
|
|
|
-
|
|
|
|
-[fn:2] B [fn:3] [fn::D].
|
|
|
|
-
|
|
|
|
-[fn:3] C."
|
|
|
|
-(let* ((tree (org-element-parse-buffer))
|
|
|
|
- (info (org-combine-plists
|
|
|
|
- (org-export-initial-options) '(:with-footnotes t))))
|
|
|
|
- (setq info (org-combine-plists
|
|
|
|
- info (org-export-collect-tree-properties tree info 'test)))
|
|
|
|
- (should
|
|
|
|
- (equal
|
|
|
|
- '((1 . "fn:1") (2 . "fn:2") (3 . "fn:3") (4))
|
|
|
|
- (org-element-map
|
|
|
|
- tree 'footnote-reference
|
|
|
|
- (lambda (ref)
|
|
|
|
- (when (org-export-footnote-first-reference-p ref info)
|
|
|
|
- (cons (org-export-get-footnote-number ref info)
|
|
|
|
- (org-element-property :label ref))))
|
|
|
|
- info)))))))
|
|
|
|
|
|
+ (org-test-with-temp-text
|
|
|
|
+ "Text[fn:1] [1] [fn:label:C] [fn::D]\n\n[fn:1] A\n\n[1] B"
|
|
|
|
+ (let* ((tree (org-element-parse-buffer))
|
|
|
|
+ (info (org-combine-plists
|
|
|
|
+ (org-export-initial-options) '(:with-footnotes t))))
|
|
|
|
+ (setq info (org-combine-plists
|
|
|
|
+ info (org-export-collect-tree-properties tree info 'test)))
|
|
|
|
+ (should
|
|
|
|
+ (equal
|
|
|
|
+ '((1 . "A") (2 . "B") (3 . "C") (4 . "D"))
|
|
|
|
+ (org-element-map
|
|
|
|
+ tree 'footnote-reference
|
|
|
|
+ (lambda (ref)
|
|
|
|
+ (let ((def (org-export-get-footnote-definition ref info)))
|
|
|
|
+ (cons (org-export-get-footnote-number ref info)
|
|
|
|
+ (if (eq (org-element-property :type ref) 'inline) (car def)
|
|
|
|
+ (car (org-element-contents
|
|
|
|
+ (car (org-element-contents def))))))))
|
|
|
|
+ info)))))
|
|
|
|
+ ;; 2. Test nested footnotes order.
|
|
|
|
+ (org-test-with-temp-text
|
|
|
|
+ "Text[fn:1:A[fn:2]] [fn:3].\n\n[fn:2] B [fn:3] [fn::D].\n\n[fn:3] C."
|
|
|
|
+ (let* ((tree (org-element-parse-buffer))
|
|
|
|
+ (info (org-combine-plists
|
|
|
|
+ (org-export-initial-options) '(:with-footnotes t))))
|
|
|
|
+ (setq info (org-combine-plists
|
|
|
|
+ info (org-export-collect-tree-properties tree info 'test)))
|
|
|
|
+ (should
|
|
|
|
+ (equal
|
|
|
|
+ '((1 . "fn:1") (2 . "fn:2") (3 . "fn:3") (4))
|
|
|
|
+ (org-element-map
|
|
|
|
+ tree 'footnote-reference
|
|
|
|
+ (lambda (ref)
|
|
|
|
+ (when (org-export-footnote-first-reference-p ref info)
|
|
|
|
+ (cons (org-export-get-footnote-number ref info)
|
|
|
|
+ (org-element-property :label ref))))
|
|
|
|
+ info)))))
|
|
|
|
+ ;; 3. Test nested footnote in invisible definitions.
|
|
|
|
+ (org-test-with-temp-text "Text[1]\n\n[1] B [2]\n\n[2] C."
|
|
|
|
+ ;; Hide definitions.
|
|
|
|
+ (narrow-to-region (point) (point-at-eol))
|
|
|
|
+ (let* ((tree (org-element-parse-buffer))
|
|
|
|
+ (info (org-combine-plists
|
|
|
|
+ (org-export-initial-options) '(:with-footnotes t))))
|
|
|
|
+ (setq info (org-combine-plists
|
|
|
|
+ info (org-export-collect-tree-properties tree info 'test)))
|
|
|
|
+ ;; Both footnotes should be seen.
|
|
|
|
+ (should
|
|
|
|
+ (= (length (org-export-collect-footnote-definitions tree info)) 2))))))
|