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
		;; 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"))))))