mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-09-29 22:37:47 +00:00
Fix :post-blank handling for pseudo elements and objects
* lisp/org-element.el (org-element-interpret-data): * lisp/ox.el (org-export-data): Correctly guess if a pseudo element or object should be followed by spaces or blank lines. * testing/lisp/test-ox.el (test-org-export/pseudo-objects): (test-org-export/pseudo-elements): New tests.
This commit is contained in:
parent
359afa6806
commit
c58e1b565b
|
@ -4530,7 +4530,8 @@ to interpret. Return Org syntax as a string."
|
||||||
;; is specified, assume its value is 0.
|
;; is specified, assume its value is 0.
|
||||||
(let ((blank (or (org-element-property :post-blank data) 0)))
|
(let ((blank (or (org-element-property :post-blank data) 0)))
|
||||||
(if (or (memq type org-element-all-objects)
|
(if (or (memq type org-element-all-objects)
|
||||||
(and parent
|
(and (not (memq type org-element-all-elements))
|
||||||
|
parent
|
||||||
(let ((type (org-element-type parent)))
|
(let ((type (org-element-type parent)))
|
||||||
(or (not type)
|
(or (not type)
|
||||||
(memq type
|
(memq type
|
||||||
|
|
36
lisp/ox.el
36
lisp/ox.el
|
@ -1912,6 +1912,7 @@ Return a string."
|
||||||
(format "[BROKEN LINK: %s]" (nth 1 err)) info))
|
(format "[BROKEN LINK: %s]" (nth 1 err)) info))
|
||||||
(_ nil))))))
|
(_ nil))))))
|
||||||
(let* ((type (org-element-type data))
|
(let* ((type (org-element-type data))
|
||||||
|
(parent (org-export-get-parent data))
|
||||||
(results
|
(results
|
||||||
(cond
|
(cond
|
||||||
;; Ignored element/object.
|
;; Ignored element/object.
|
||||||
|
@ -1965,12 +1966,11 @@ Return a string."
|
||||||
;; first line's indentation: there is
|
;; first line's indentation: there is
|
||||||
;; none and it might be misleading.
|
;; none and it might be misleading.
|
||||||
(when (eq type 'paragraph)
|
(when (eq type 'paragraph)
|
||||||
(let ((parent (org-export-get-parent data)))
|
(and
|
||||||
(and
|
(eq (car (org-element-contents parent))
|
||||||
(eq (car (org-element-contents parent))
|
data)
|
||||||
data)
|
(memq (org-element-type parent)
|
||||||
(memq (org-element-type parent)
|
'(footnote-definition item)))))))
|
||||||
'(footnote-definition item))))))))
|
|
||||||
"")))
|
"")))
|
||||||
(broken-link-handler
|
(broken-link-handler
|
||||||
(funcall transcoder data
|
(funcall transcoder data
|
||||||
|
@ -1986,17 +1986,19 @@ Return a string."
|
||||||
;; Append the same white space between elements or objects
|
;; Append the same white space between elements or objects
|
||||||
;; as in the original buffer, and call appropriate filters.
|
;; as in the original buffer, and call appropriate filters.
|
||||||
(t
|
(t
|
||||||
(let ((results
|
(org-export-filter-apply-functions
|
||||||
(org-export-filter-apply-functions
|
(plist-get info (intern (format ":filter-%s" type)))
|
||||||
(plist-get info (intern (format ":filter-%s" type)))
|
(let ((blank (or (org-element-property :post-blank data) 0)))
|
||||||
(let ((post-blank (or (org-element-property :post-blank data)
|
(if (or (memq type org-element-all-objects)
|
||||||
0)))
|
(and (not (memq type org-element-all-elements))
|
||||||
(if (memq type org-element-all-elements)
|
parent
|
||||||
(concat (org-element-normalize-string results)
|
(let ((type (org-element-type parent)))
|
||||||
(make-string post-blank ?\n))
|
(or (not type)
|
||||||
(concat results (make-string post-blank ?\s))))
|
(memq type org-element-object-containers)))))
|
||||||
info)))
|
(concat results (make-string blank ?\s))
|
||||||
results)))
|
(concat (org-element-normalize-string results)
|
||||||
|
(make-string blank ?\n))))
|
||||||
|
info)))
|
||||||
(plist-get info :exported-data))))))
|
(plist-get info :exported-data))))))
|
||||||
|
|
||||||
(defun org-export-data-with-backend (data backend info)
|
(defun org-export-data-with-backend (data backend info)
|
||||||
|
|
|
@ -3181,6 +3181,41 @@ Another text. (ref:text)
|
||||||
(plist-put info :crossrefs (list (cons search-cell 1))))
|
(plist-put info :crossrefs (list (cons search-cell 1))))
|
||||||
(org-export-get-reference headline info))))))
|
(org-export-get-reference headline info))))))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Pseudo objects and pseudo elements
|
||||||
|
|
||||||
|
(ert-deftest test-org-export/pseudo-elements ()
|
||||||
|
"Test exporting pseudo-elements."
|
||||||
|
;; Handle blank lines after pseudo-elements. In particular, do not
|
||||||
|
;; replace them with white spaces.
|
||||||
|
(should
|
||||||
|
(equal "contents\n\nparagraph\n"
|
||||||
|
(let ((backend (org-export-create-backend
|
||||||
|
:transcoders
|
||||||
|
'((pseudo-element . (lambda (_p c _i) c))
|
||||||
|
(paragraph . (lambda (_p c _i) c))
|
||||||
|
(plain-text . (lambda (c _i) c)))))
|
||||||
|
(element '(pseudo-element (:post-blank 1) "contents"))
|
||||||
|
(paragraph '(paragraph nil "paragraph"))
|
||||||
|
(data '(org-data nil)))
|
||||||
|
(org-element-adopt-elements data element paragraph)
|
||||||
|
(org-export-data-with-backend data backend nil)))))
|
||||||
|
|
||||||
|
(ert-deftest test-org-export/pseudo-objects ()
|
||||||
|
"Test exporting pseudo-objects."
|
||||||
|
;; Handle blank spaces after pseudo-objects. In particular, do not
|
||||||
|
;; replace them with newlines.
|
||||||
|
(should
|
||||||
|
(equal "begin x end\n"
|
||||||
|
(let ((backend (org-export-create-backend
|
||||||
|
:transcoders
|
||||||
|
'((pseudo-object . (lambda (_p c _i) c))
|
||||||
|
(paragraph . (lambda (_p c _i) c))
|
||||||
|
(plain-text . (lambda (c _i) c)))))
|
||||||
|
(object '(pseudo-object (:post-blank 1) "x"))
|
||||||
|
(paragraph '(paragraph nil)))
|
||||||
|
(org-element-adopt-elements paragraph "begin " object "end")
|
||||||
|
(org-export-data-with-backend paragraph backend nil)))))
|
||||||
|
|
||||||
|
|
||||||
;;; Src-block and example-block
|
;;; Src-block and example-block
|
||||||
|
|
Loading…
Reference in a new issue