1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-21 06:55:39 +00:00

* admin.el (make-manuals): Add the option to only make certain output types.

(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'.
This commit is contained in:
Glenn Morris 2013-07-06 11:28:54 -07:00
parent 1afb1d0715
commit c7197e5231
2 changed files with 70 additions and 33 deletions

View 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>

View 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))))