From 3ff46fdbffa80fbf420905d3c89462609aae690f Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Tue, 5 Aug 2014 10:52:14 +0200 Subject: [PATCH] ox-texinfo: Remove spurious blank lines in output * lisp/ox-texinfo.el (org-texinfo-template): Remove spurious blank lines in output. Refactor code. --- lisp/ox-texinfo.el | 107 ++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 65 deletions(-) diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el index 037486faf..9669c8a8e 100644 --- a/lisp/ox-texinfo.el +++ b/lisp/ox-texinfo.el @@ -678,24 +678,19 @@ of the longest menu entry." "Return complete document string after Texinfo conversion. CONTENTS is the transcoded contents string. INFO is a plist holding export options." - (let* ((title (org-export-data (plist-get info :title) info)) - (info-filename (or (plist-get info :texinfo-filename) - (file-name-nondirectory - (org-export-output-file-name ".info")))) - (lang (org-export-data (plist-get info :language) info)) - (texinfo-header (plist-get info :texinfo-header)) - (texinfo-post-header (plist-get info :texinfo-post-header)) - (class (plist-get info :texinfo-class)) - (header (nth 1 (assoc class org-texinfo-classes))) - ;; Copying data is the contents of the first headline in - ;; parse tree with a non-nil copying property. - (copying (org-element-map (plist-get info :parse-tree) 'headline - (lambda (hl) - (and (org-not-nil (org-element-property :COPYING hl)) - (org-element-contents hl))) - info t)) - (menu (org-texinfo-make-menu info 'main)) - (detail-menu (org-texinfo-make-menu info 'detailed))) + (let ((title (org-export-data (plist-get info :title) info)) + (info-filename (or (plist-get info :texinfo-filename) + (file-name-nondirectory + (org-export-output-file-name ".info")))) + (header (nth 1 (assoc (plist-get info :texinfo-class) + org-texinfo-classes))) + ;; Copying data is the contents of the first headline in + ;; parse tree with a non-nil copying property. + (copying (org-element-map (plist-get info :parse-tree) 'headline + (lambda (hl) + (and (org-not-nil (org-element-property :COPYING hl)) + (org-element-contents hl))) + info t))) (concat ;; Header header "\n" @@ -713,26 +708,16 @@ holding export options." (dolist (system org-texinfo-supported-coding-systems "UTF-8") (when (org-string-match-p (regexp-quote system) name) (throw 'coding-system system)))))) - "\n" - (format "@documentlanguage %s\n" lang) - "\n\n" - - ;; Additional Header Options set by `#+TEXINFO_HEADER - (if texinfo-header - (concat "\n" - texinfo-header - "\n")) - - "@c %**end of header\n" - "@finalout\n" - "\n\n" - - ;; Additional Header Options set by #+TEXINFO_POST_HEADER - (if texinfo-post-header - (concat "\n" - texinfo-post-header - "\n")) - + ;; Language. + (format "@documentlanguage %s\n" (plist-get info :language)) + ;; Additional header options set by #+TEXINFO_HEADER. + (let ((texinfo-header (plist-get info :texinfo-header))) + (and texinfo-header (org-element-normalize-string texinfo-header))) + "@c %**end of header\n\n" + ;; Additional options set by #+TEXINFO_POST_HEADER. + (let ((texinfo-post-header (plist-get info :texinfo-post-header))) + (and texinfo-post-header + (org-element-normalize-string texinfo-post-header))) ;; Copying. (and copying (format "@copying\n%s@end copying\n\n" @@ -741,7 +726,6 @@ holding export options." ;; Info directory information. Only supply if both title and ;; category are provided. (let ((dircat (plist-get info :texinfo-dircat)) - ;; Make sure title ends with a full stop. (dirtitle (let ((title (plist-get info :texinfo-dirtitle))) (and title @@ -759,6 +743,7 @@ holding export options." "\n" "@end direntry\n\n"))) ;; Title + "@finalout\n" "@titlepage\n" "@title " title "\n" (let ((subtitle (plist-get info :subtitle))) @@ -792,35 +777,27 @@ holding export options." "@top " title " Manual\n" (and copying "@insertcopying\n") "@end ifnottex\n\n" - - ;; Do not output menus if they are empty - (if menu - ;; Menu - (concat "@menu\n" - menu - "\n\n" - ;; Detailed Menu - (if detail-menu - (concat "@detailmenu\n" - " --- The Detailed Node Listing ---\n" - detail-menu - "\n\n" - "@end detailmenu\n")) - "@end menu\n")) - "\n\n" - + ;; Menu. + (let ((menu (org-texinfo-make-menu info 'main)) + (detail-menu (org-texinfo-make-menu info 'detailed))) + (and menu + (concat "@menu\n" + menu "\n" + (and detail-menu + (concat "\n@detailmenu\n" + " --- The Detailed Node Listing ---\n" + detail-menu "\n" + "@end detailmenu\n")) + "@end menu\n\n"))) ;; Document's body. - contents - "\n" + contents "\n" ;; Creator. - (let ((creator-info (plist-get info :with-creator))) - (cond - ((not creator-info) "") - ((eq creator-info 'comment) - (format "@c %s\n" (plist-get info :creator))) - (t (concat (plist-get info :creator) "\n")))) + (case (plist-get info :with-creator) + ((nil) nil) + (comment (format "@c %s\n" (plist-get info :creator))) + (otherwise (concat (plist-get info :creator) "\n"))) ;; Document end. - "\n@bye"))) + "@bye")))