* admin.el (make-manuals): Add the option to only make certain output types.
authorGlenn Morris <rgm@gnu.org>
Sat, 6 Jul 2013 18:28:54 +0000 (11:28 -0700)
committerGlenn Morris <rgm@gnu.org>
Sat, 6 Jul 2013 18:28:54 +0000 (11:28 -0700)
(manual-misc-html): Special-case ccmode and efaq.
(manual-html-mono, manual-html-node, manual-pdf, manual-ps):
Move creation of output directory here from make-manuals.
(manual-html-fix-index-2): Avoid dynamic reference to `f'.

admin/ChangeLog
admin/admin.el

index b9c86da..592a419 100644 (file)
@@ -2,6 +2,11 @@
 
        * admin.el (manual-misc-manuals): New function.
        (make-manuals): Avoid hard-coding list of misc manuals.
+       Add the option to only make certain type(s) of output.
+       (manual-misc-html): Special-case ccmode and efaq.
+       (manual-html-mono, manual-html-node, manual-pdf, manual-ps):
+       Move creation of output directory here from make-manuals.
+       (manual-html-fix-index-2): Avoid dynamic reference to `f'.
 
 2013-07-05  Glenn Morris  <rgm@gnu.org>
 
index a5625ff..927f68e 100644 (file)
@@ -209,44 +209,66 @@ Root must be the root of an Emacs source tree."
                     "\\(\\\\\\|\\.info\\)" ""
                     (buffer-substring start (point)))))))
 
-(defun make-manuals (root)
-  "Generate the web manuals for the Emacs webpage."
-  (interactive "DEmacs root directory: ")
+(defun make-manuals (root &optional type)
+  "Generate the web manuals for the Emacs webpage.
+Interactively with a prefix argument, prompt for TYPE.
+Optional argument TYPE is type of output (nil means all)."
+  (interactive (let ((root (read-directory-name "Emacs root directory: "
+                                               source-directory nil t)))
+                (list root
+                      (if current-prefix-arg
+                          (completing-read
+                           "Type: "
+                           (append
+                            '("misc" "pdf" "ps")
+                            (let (res)
+                              (dolist (i '("emacs" "elisp" "eintr") res)
+                                (dolist (j '("" "-mono" "-node" "-ps" "-pdf"))
+                                  (push (concat i j) res))))
+                            (manual-misc-manuals root)))))))
   (let* ((dest (expand-file-name "manual" root))
         (html-node-dir (expand-file-name "html_node" dest))
         (html-mono-dir (expand-file-name "html_mono" dest))
         (ps-dir (expand-file-name "ps" dest))
-        (pdf-dir (expand-file-name "pdf" dest)))
+        (pdf-dir (expand-file-name "pdf" dest))
+        (emacs (expand-file-name "doc/emacs/emacs.texi" root))
+        (elisp (expand-file-name "doc/lispref/elisp.texi" root))
+        (eintr (expand-file-name "doc/lispintro/emacs-lisp-intro.texi" root))
+        (misc (manual-misc-manuals root)))
+    ;; TODO this makes it non-continuable.
+    ;; Instead, delete the individual dest directory each time.
     (when (file-directory-p dest)
-      (if (y-or-n-p (format "Directory %s exists, delete it first?" dest))
+      (if (y-or-n-p (format "Directory %s exists, delete it first? " dest))
          (delete-directory dest t)
-       (error "Aborted")))
-    (make-directory dest)
-    (make-directory html-node-dir)
-    (make-directory html-mono-dir)
-    (make-directory ps-dir)
-    (make-directory pdf-dir)
-    ;; Emacs manual
-    (let ((texi (expand-file-name "doc/emacs/emacs.texi" root)))
-      (manual-html-node texi (expand-file-name "emacs" html-node-dir))
-      (manual-html-mono texi (expand-file-name "emacs.html" html-mono-dir))
-      (manual-pdf texi (expand-file-name "emacs.pdf" pdf-dif))
-      (manual-ps texi (expand-file-name "emacs.ps" ps-dir)))
-    ;; Lisp manual
-    (let ((texi (expand-file-name "doc/lispref/elisp.texi" root)))
-      (manual-html-node texi (expand-file-name "elisp" html-node-dir))
-      (manual-html-mono texi (expand-file-name "elisp.html" html-mono-dir))
-      (manual-pdf texi (expand-file-name "elisp.pdf" pdf-dir))
-      (manual-ps texi (expand-file-name "elisp.ps" ps-dir)))
-    ;; Lisp intro.
-    (let ((texi (expand-file-name "doc/lispintro/emacs-lisp-intro.texi" root)))
-      (manual-html-node texi (expand-file-name "eintr" html-node-dir))
-      (manual-html-mono texi (expand-file-name "eintr.html" html-mono-dir))
-      (manual-pdf texi (expand-file-name "eintr.pdf" pdf-dir))
-      (manual-ps texi (expand-file-name "eintr.ps" ps-dir)))
+       (user-error "Aborted")))
+    (if (member type '(nil "emacs" "emacs-node"))
+       (manual-html-node emacs (expand-file-name "emacs" html-node-dir)))
+    (if (member type '(nil "emacs" "emacs-mono"))
+       (manual-html-mono emacs (expand-file-name "emacs.html" html-mono-dir)))
+    (if (member type '(nil "emacs" "emacs-pdf" "pdf"))
+       (manual-pdf emacs (expand-file-name "emacs.pdf" pdf-dir)))
+    (if (member type '(nil "emacs" "emacs-ps" "ps"))
+       (manual-ps emacs (expand-file-name "emacs.ps" ps-dir)))
+    (if (member type '(nil "elisp" "elisp-node"))
+       (manual-html-node elisp (expand-file-name "elisp" html-node-dir)))
+    (if (member type '(nil "elisp" "elisp-mono"))
+       (manual-html-mono elisp (expand-file-name "elisp.html" html-mono-dir)))
+    (if (member type '(nil "elisp" "elisp-pdf" "pdf"))
+       (manual-pdf elisp (expand-file-name "elisp.pdf" pdf-dir)))
+    (if (member type '(nil "elisp" "elisp-ps" "ps"))
+       (manual-ps elisp (expand-file-name "elisp.ps" ps-dir)))
+    (if (member type '(nil "eintr" "eintr-node"))
+       (manual-html-node eintr (expand-file-name "eintr" html-node-dir)))
+    (if (member type '(nil "eintr" "eintr-node"))
+       (manual-html-mono eintr (expand-file-name "eintr.html" html-mono-dir)))
+    (if (member type '(nil "eintr" "eintr-pdf" "pdf"))
+       (manual-pdf eintr (expand-file-name "eintr.pdf" pdf-dir)))
+    (if (member type '(nil "eintr" "eintr-ps" "ps"))
+       (manual-ps eintr (expand-file-name "eintr.ps" ps-dir)))
     ;; Misc manuals
-    (dolist (manual (manual-misc-manuals root))
-      (manual-misc-html manual root html-node-dir html-mono-dir))
+    (dolist (manual misc)
+      (if (member type `(nil ,manual "misc"))
+         (manual-misc-html manual root html-node-dir html-mono-dir)))
     (message "Manuals created in %s" dest)))
 
 (defconst manual-doctype-string
@@ -264,7 +286,12 @@ Root must be the root of an Emacs source tree."
 @import url('/s/emacs/manual.css');\n</style>\n")
 
 (defun manual-misc-html (name root html-node-dir html-mono-dir)
-  (let ((texi (expand-file-name (format "doc/misc/%s.texi" name) root)))
+  ;; Hack to deal with the cases where .texi creates a different .info.
+  ;; Blech.  TODO Why not just rename the .texi files?
+  (let* ((texiname (cond ((equal name "ccmode") "cc-mode")
+                        ((equal name "efaq") "faq")
+                        (t name)))
+        (texi (expand-file-name (format "doc/misc/%s.texi" texiname) root)))
     (manual-html-node texi (expand-file-name name html-node-dir))
     (manual-html-mono texi (expand-file-name (concat name ".html")
                                             html-mono-dir))))
@@ -274,6 +301,7 @@ Root must be the root of an Emacs source tree."
 This function also edits the HTML files so that they validate as
 HTML 4.01 Transitional, and pulls in the gnu.org stylesheet using
 the @import directive."
+  (make-directory (or (file-name-directory dest) ".") t)
   (call-process "makeinfo" nil nil nil
                "-D" "WWW_GNU_ORG"
                "-I" (expand-file-name "../emacs"
@@ -300,6 +328,7 @@ HTML 4.01 Transitional, and pulls in the gnu.org stylesheet using
 the @import directive."
   (unless (file-exists-p texi-file)
     (error "Manual file %s not found" texi-file))
+  (make-directory dir t)
   (call-process "makeinfo" nil nil nil
                "-D" "WWW_GNU_ORG"
                "-I" (expand-file-name "../emacs"
@@ -336,6 +365,7 @@ the @import directive."
 
 (defun manual-pdf (texi-file dest)
   "Run texi2pdf on TEXI-FILE, emitting pdf output to DEST."
+  (make-directory (or (file-name-directory dest) ".") t)
   (let ((default-directory (file-name-directory texi-file)))
     (call-process "texi2pdf" nil nil nil
                  "-I" "../emacs" "-I" "../misc"
@@ -343,6 +373,7 @@ the @import directive."
 
 (defun manual-ps (texi-file dest)
   "Generate a PostScript version of TEXI-FILE as DEST."
+  (make-directory (or (file-name-directory dest) ".") t)
   (let ((dvi-dest (concat (file-name-sans-extension dest) ".dvi"))
        (default-directory (file-name-directory texi-file)))
     (call-process "texi2dvi" nil nil nil
@@ -454,7 +485,8 @@ the @import directive."
        (setq done t))
        (t
        (if (eobp)
-           (error "Parse error in %s" f)) ; f is bound in manual-html-node
+           (error "Parse error in %s"
+                  (file-name-nondirectory buffer-file-name)))
        (unless open-td
          (setq done t))))
       (forward-line 1))))