Function: ps-generate
ps-generate is a byte-compiled function defined in ps-print.el.gz.
Signature
(ps-generate BUFFER FROM TO GENFUNC)
Source Code
;; Defined in /usr/src/emacs/lisp/ps-print.el.gz
(defun ps-generate (buffer from to genfunc)
(save-excursion
(let ((from (min to from))
(to (max to from))
;; This avoids trouble if chars with read-only properties
;; are copied into ps-spool-buffer.
(inhibit-read-only t))
(save-restriction
(narrow-to-region from to)
(and ps-razzle-dazzle
(message "Formatting...%3d%%" (setq ps-razchunk 0)))
(setq ps-source-buffer buffer
ps-spool-buffer (get-buffer-create ps-spool-buffer-name))
(ps-init-output-queue)
(let (safe-marker completed-safely needs-begin-file)
(unwind-protect
(progn
(set-buffer ps-spool-buffer)
(set-buffer-multibyte nil)
;; Get a marker and make it point to the current end of the
;; buffer, If an error occurs, we'll delete everything from
;; the end of this marker onwards.
(setq safe-marker (make-marker))
(set-marker safe-marker (point-max))
(goto-char (point-min))
(or (looking-at (regexp-quote ps-adobe-tag))
(setq needs-begin-file t))
(set-buffer ps-source-buffer)
(save-excursion
(let ((ps-print-page-p t)
ps-even-or-odd-pages)
(ps-begin-job genfunc)
(when needs-begin-file
(ps-begin-file)
(ps-mule-initialize))
(ps-mule-begin-job from to)
(ps-selected-pages)))
(ps-begin-page)
(funcall genfunc from to)
(ps-end-page)
(ps-mule-end-job)
(ps-end-job needs-begin-file)
;; Setting this variable tells the unwind form that the
;; PostScript was generated without error.
(setq completed-safely t))
;; Unwind form: If some bad mojo occurred while generating
;; PostScript, delete all the PostScript that was generated.
;; This protects the previously spooled files from getting
;; corrupted.
(and (markerp safe-marker) (not completed-safely)
(progn
(set-buffer ps-spool-buffer)
(delete-region (marker-position safe-marker) (point-max))))))
(and ps-razzle-dazzle (message "Formatting...done"))))))