Browse Source

ox-texinfo: Remove spurious blank lines in output

* lisp/ox-texinfo.el (org-texinfo-template): Remove spurious blank
  lines in output.  Refactor code.
Nicolas Goaziou 10 years ago
parent
commit
3ff46fdbff
1 changed files with 42 additions and 65 deletions
  1. 42 65
      lisp/ox-texinfo.el

+ 42 - 65
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")))