branch: externals/org commit 6d5fa81984a716f363523dad285d3dd303f2d984 Author: Ihor Radchenko <yanta...@posteo.net> Commit: Ihor Radchenko <yanta...@posteo.net>
ox-md, ox-ascii, ox-texinfo: Strip blank lines from paragraphs * lisp/org-macs.el (org-remove-blank-lines): New helper function to strip blank lines from string. * lisp/ox-ascii.el (org-ascii-paragraph): * lisp/ox-latex.el (org-latex-paragraph): * lisp/ox-md.el (org-md-paragraph): * lisp/ox-texinfo.el (org-texinfo-paragraph): Strip blank lines from paragraphs - these exporters are using blank lines as paragraph separators. Reported-by: Max Nikulin <maniku...@gmail.com> Link: https://orgmode.org/list/v00le7$frp$1...@ciao.gmane.io --- lisp/org-macs.el | 4 ++++ lisp/ox-ascii.el | 6 ++++++ lisp/ox-latex.el | 4 +--- lisp/ox-md.el | 6 ++++++ lisp/ox-texinfo.el | 7 ++++++- 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lisp/org-macs.el b/lisp/org-macs.el index 4b7efdd61c..42ea0ff9b8 100644 --- a/lisp/org-macs.el +++ b/lisp/org-macs.el @@ -1290,6 +1290,10 @@ Assumes that s is a single line, starting in column 0." t t s))) s) +(defun org-remove-blank-lines (s) + "Remove blank lines in S." + (replace-regexp-in-string (rx "\n" (1+ (0+ space) "\n")) "\n" s)) + (defun org-wrap (string &optional width lines) "Wrap string to either a number of lines, or a width in characters. If WIDTH is non-nil, the string is wrapped to that width, however many lines diff --git a/lisp/ox-ascii.el b/lisp/ox-ascii.el index 056d7a4f58..5e9b217e75 100644 --- a/lisp/ox-ascii.el +++ b/lisp/ox-ascii.el @@ -1652,6 +1652,12 @@ information." "Transcode a PARAGRAPH element from Org to ASCII. CONTENTS is the contents of the paragraph, as a string. INFO is the plist used as a communication channel." + ;; Ensure that we do not create multiple paragraphs, when a single + ;; paragraph is expected. + ;; Multiple newlines may appear in CONTENTS, for example, when + ;; certain objects are stripped from export, leaving single newlines + ;; before and after. + (setq contents (org-remove-blank-lines contents)) (org-ascii--justify-element (let ((indented-line-width (plist-get info :ascii-indented-line-width))) (if (not (wholenump indented-line-width)) contents diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index cdbf65cf60..69a231c78d 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -3050,9 +3050,7 @@ the plist used as a communication channel." ;; Multiple newlines may appear in CONTENTS, for example, when ;; certain objects are stripped from export, leaving single newlines ;; before and after. - (replace-regexp-in-string - (rx "\n" (1+ (0+ space) "\n")) "\n" - contents)) + (org-remove-blank-lines contents)) ;;;; Plain List diff --git a/lisp/ox-md.el b/lisp/ox-md.el index 1b798450c5..6746215651 100644 --- a/lisp/ox-md.el +++ b/lisp/ox-md.el @@ -633,6 +633,12 @@ information." "Transcode PARAGRAPH element into Markdown format. CONTENTS is the paragraph contents. INFO is a plist used as a communication channel." + ;; Ensure that we do not create multiple paragraphs, when a single + ;; paragraph is expected. + ;; Multiple newlines may appear in CONTENTS, for example, when + ;; certain objects are stripped from export, leaving single newlines + ;; before and after. + (setq contents (org-remove-blank-lines contents)) (let ((first-object (car (org-element-contents paragraph)))) ;; If paragraph starts with a #, protect it. (if (and (stringp first-object) (string-prefix-p "#" first-object)) diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el index 4aef9c41c5..fc9ec92095 100644 --- a/lisp/ox-texinfo.el +++ b/lisp/ox-texinfo.el @@ -1517,7 +1517,12 @@ information." "Transcode a PARAGRAPH element from Org to Texinfo. CONTENTS is the contents of the paragraph, as a string. INFO is the plist used as a communication channel." - contents) + ;; Ensure that we do not create multiple paragraphs, when a single + ;; paragraph is expected. + ;; Multiple newlines may appear in CONTENTS, for example, when + ;; certain objects are stripped from export, leaving single newlines + ;; before and after. + (org-remove-blank-lines contents)) ;;;; Plain List