changeset 20331:39baaa9c5980

Some comment and doc fixes. (ps-print-version): New version number (3.05.2) and doc fix. (ps-print, ps-header-lines, ps-show-n-of-n, ps-font-info-database) (ps-font-family, ps-font-size, ps-header-font-family) (ps-header-font-size, ps-header-title-font-size, ps-bold-faces) (ps-italic-faces, ps-underlined-faces, ps-left-header, ps-right-header) (ps-font, ps-font-bold, ps-font-italic, ps-font-bold-italic) (ps-avg-char-width, ps-space-width, ps-line-height): Doc fix. (ps-error-scale-font): New fn. (ps-soft-lf, ps-hard-lf): Fn deleted. (ps-get-page-dimensions, ps-set-bg, ps-face-bold-p, ps-face-italic-p) (ps-set-color): Reindentation. (ps-output-string-prim, ps-xemacs-face-kind-p): Internal blank lines deleted. (ps-set-font): Little programming improvement. (ps-line-lengths-internal, ps-nb-pages, ps-select-font) (ps-select-header-font): Simplify some expressions. (ps-plot-region): Replace (- X 1) by (1- X). (ps-generate-header): Replace (+ X 1) by (1+ X). (ps-print-preprint, ps-plot-with-face, ps-print-ensure-fontified) (ps-kill-emacs-check): Replace (if (and A B) C) by (and A B C). (ps-init-output-queue, ps-gnus-article-prepare-hook, ps-jts-ps-setup): Replace (setq a b)(setq c d) by (setq a b c d). (ps-begin-file, ps-end-file): Replace (ps-output A)(ps-output B) by (ps-output A B). (ps-begin-page): Replace (ps-output A)(ps-output B) by (ps-output A B), replace (setq a b)(setq c d) by (setq a b c d). (ps-next-line, ps-continue-line): Replace (setq a b)(setq c d) by (setq a b c d), and incorporates ps-soft-lf and ps-hard-lf, respectively. (ps-plot): Replace (setq a b)(setq c d) by (setq a b c d), and programming improvement. (ps-generate-postscript-with-faces): Initialization fix, replace (setq a b)(setq c d) by (setq a b c d), replace (if (and A B) C) by (and A B C). (ps-generate): Doc fix, reprogramming to set the page count, replace (setq a b)(setq c d) by (setq a b c d), replace (if A nil B) by (or A B), replace (if (and A B) C) by (and A B C). (ps-info-mode-hook): Replace (list 'A 'B) by '(A B). (ps-jack-setup): Replace (list) by nil.
author Karl Heuer <kwzh@gnu.org>
date Sun, 23 Nov 1997 02:26:50 +0000
parents f76b9c0ebc4b
children 52b1ed13e4d2
files lisp/ps-print.el
diffstat 1 files changed, 268 insertions(+), 291 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ps-print.el	Sun Nov 23 02:18:34 1997 +0000
+++ b/lisp/ps-print.el	Sun Nov 23 02:26:50 1997 +0000
@@ -4,13 +4,13 @@
 
 ;; Author:     Jim Thompson (was <thompson@wg2.waii.com>)
 ;; Author:     Jacques Duthen <duthen@cegelec-red.fr>
-;; Maintainer: Vinicius Jose Latorre <vinicius@cpqd.br>
+;; Maintainer: Vinicius Jose Latorre <vinicius@cpqd.com.br>
 ;; Keywords:   print, PostScript
-;; Time-stamp: <97/08/27 13:00:37 vinicius>
-;; Version:    3.05.1
-
-(defconst ps-print-version "3.05.1"
-  "ps-print.el, v 3.05.1 <97/08/24 vinicius>
+;; Time-stamp: <97/08/28 22:35:25 vinicius>
+;; Version:    3.05.2
+
+(defconst ps-print-version "3.05.2"
+  "ps-print.el, v 3.05.2 <97/08/28 vinicius>
 
 Vinicius's last change version -- this file may have been edited as part of
 Emacs without changes to the version number.  When reporting bugs,
@@ -18,7 +18,7 @@
 distributed with.
 
 Please send all bug fixes and enhancements to
-	Jacques Duthen <duthen@cegelec-red.fr>.
+	Vinicius Jose Latorre <vinicius@cpqd.com.br>.
 ")
 
 ;; This file is part of GNU Emacs.
@@ -391,7 +391,7 @@
 ;; The height, in lines, of each rectangle is controlled by
 ;; the variable `ps-zebra-stripe-height', which is 3 by default.
 ;; The distance between stripes equals the height of a stripe.
-;; 
+;;
 ;; The variable `ps-zebra-stripes' controls whether to print zebra stripes.
 ;; Non-nil means yes, nil means no.  The default is nil.
 ;;
@@ -753,7 +753,7 @@
 ;;; Interface to the command system
 
 (defgroup ps-print nil
-  "Postscript generator for Emacs 19"
+  "PostScript generator for Emacs 19"
   :prefix "ps-"
   :group 'wp)
 
@@ -1053,15 +1053,15 @@
   :group 'ps-print-header)
 
 (defcustom ps-header-lines 2
-  "*Number of lines to display in page header, when generating Postscript."
+  "*Number of lines to display in page header, when generating PostScript."
   :type 'integer
   :group 'ps-print-header)
 (make-variable-buffer-local 'ps-header-lines)
 
 (defcustom ps-show-n-of-n t
   "*Non-nil means show page numbers as N/M, meaning page N of M.
-Note: page numbers are displayed as part of headers, see variable
-`ps-print-header'."
+NOTE: page numbers are displayed as part of headers,
+      see variable `ps-print-headers'."
   :type 'boolean
   :group 'ps-print-header)
 
@@ -1133,7 +1133,7 @@
 To get the info for another specific font (say Helvetica), do the following:
 - create a new buffer
 - generate the PostScript image to a file (C-u M-x ps-print-buffer)
-- open this file and delete the leading `%' (which is the Postscript
+- open this file and delete the leading `%' (which is the PostScript
   comment character) from the line
 	   `% 3 cm 20 cm moveto  10 /Courier ReportFontInfo  showpage'
   to get the line
@@ -1153,28 +1153,28 @@
   :group 'ps-print-font)
 
 (defcustom ps-font-family 'Courier
-  "Font family name for ordinary text, when generating Postscript."
+  "Font family name for ordinary text, when generating PostScript."
   :type 'symbol
   :group 'ps-print-font)
 
 (defcustom ps-font-size   (if ps-landscape-mode 7 8.5)
-  "Font size, in points, for ordinary text, when generating Postscript."
+  "Font size, in points, for ordinary text, when generating PostScript."
   :type 'number
   :group 'ps-print-font)
 
 (defcustom ps-header-font-family      'Helvetica
-  "Font family name for text in the header, when generating Postscript."
+  "Font family name for text in the header, when generating PostScript."
   :type 'symbol
   :group 'ps-print-font)
 
 (defcustom ps-header-font-size       (if ps-landscape-mode 10 12)
-  "Font size, in points, for text in the header, when generating Postscript."
+  "Font size, in points, for text in the header, when generating PostScript."
   :type 'number
   :group 'ps-print-font)
 
 (defcustom ps-header-title-font-size (if ps-landscape-mode 12 14)
   "Font size, in points, for the top line of text in the header,
-when generating Postscript."
+when generating PostScript."
   :type 'number
   :group 'ps-print-font)
 
@@ -1212,36 +1212,36 @@
       font-lock-keyword-face
       font-lock-warning-face))
   "*A list of the \(non-bold\) faces that should be printed in bold font.
-This applies to generating Postscript."
+This applies to generating PostScript."
   :type '(repeat face)
   :group 'ps-print-face)
 
 (defcustom ps-italic-faces
   (unless ps-print-color-p
     '(font-lock-variable-name-face
+      font-lock-type-face
       font-lock-string-face
       font-lock-comment-face
       font-lock-warning-face))
   "*A list of the \(non-italic\) faces that should be printed in italic font.
-This applies to generating Postscript."
+This applies to generating PostScript."
   :type '(repeat face)
   :group 'ps-print-face)
 
 (defcustom ps-underlined-faces
   (unless ps-print-color-p
     '(font-lock-function-name-face
-      font-lock-type-face
       font-lock-reference-face
       font-lock-warning-face))
   "*A list of the \(non-underlined\) faces that should be printed underlined.
-This applies to generating Postscript."
+This applies to generating PostScript."
   :type '(repeat face)
   :group 'ps-print-face)
 
 (defcustom ps-left-header
   (list 'ps-get-buffer-name 'ps-header-dirpart)
   "*The items to display (each on a line) on the left part of the page header.
-This applies to generating Postscript.
+This applies to generating PostScript.
 
 The value should be a list of strings and symbols, each representing an
 entry in the PostScript array HeaderLinesLeft.
@@ -1262,7 +1262,7 @@
 (defcustom ps-right-header
   (list "/pagenumberstring load" 'time-stamp-mon-dd-yyyy 'time-stamp-hh:mm:ss)
   "*The items to display (each on a line) on the right part of the page header.
-This applies to generating Postscript.
+This applies to generating PostScript.
 
 See the variable `ps-left-header' for a description of the format of
 this variable."
@@ -1443,13 +1443,13 @@
       ps-lpr-command    \"%s\"
       ps-lpr-switches   %s
 
-      ps-paper-type         '%s
-      ps-landscape-mode     %s
-      ps-number-of-columns  %s
-
-      ps-zebra-stripes      %s
+      ps-paper-type          '%s
+      ps-landscape-mode      %s
+      ps-number-of-columns   %s
+
+      ps-zebra-stripes       %s
       ps-zebra-stripe-height %s
-      ps-line-number        %s
+      ps-line-number         %s
 
       ps-print-background-image %s
 
@@ -1522,29 +1522,29 @@
 (require 'time-stamp)
 
 (defvar ps-font nil
-  "Font family name for ordinary text, when generating Postscript.")
+  "Font family name for ordinary text, when generating PostScript.")
 
 (defvar ps-font-bold nil
-  "Font family name for bold text, when generating Postscript.")
+  "Font family name for bold text, when generating PostScript.")
 
 (defvar ps-font-italic nil
-  "Font family name for italic text, when generating Postscript.")
+  "Font family name for italic text, when generating PostScript.")
 
 (defvar ps-font-bold-italic nil
-  "Font family name for bold italic text, when generating Postscript.")
+  "Font family name for bold italic text, when generating PostScript.")
 
 (defvar ps-avg-char-width nil
-  "The average width, in points, of a character, for generating Postscript.
+  "The average width, in points, of a character, for generating PostScript.
 This is the value that ps-print uses to determine the length,
 x-dimension, of the text it has printed, and thus affects the point at
 which long lines wrap around.")
 
 (defvar ps-space-width nil
-  "The width of a space character, for generating Postscript.
+  "The width of a space character, for generating PostScript.
 This value is used in expanding tab characters.")
 
 (defvar ps-line-height nil
-  "The height of a line, for generating Postscript.
+  "The height of a line, for generating PostScript.
 This is the value that ps-print uses to determine the height,
 y-dimension, of the lines of text it has printed, and thus affects the
 point at which page-breaks are placed.
@@ -2221,8 +2221,8 @@
 (defvar ps-print-width nil)
 (defvar ps-print-height nil)
 
-(defvar ps-height-remaining)
-(defvar ps-width-remaining)
+(defvar ps-height-remaining nil)
+(defvar ps-width-remaining nil)
 
 (defvar ps-print-color-scale nil)
 
@@ -2423,16 +2423,16 @@
     (setq cw-min     (/ (* icw fs-min) ifs)
 	  nb-cpl-max (floor (/ print-width cw-min))
 	  cw-max     (/ (* icw fs-max) ifs)
-	  nb-cpl-min (floor (/ print-width cw-max)))
-    (setq nb-cpl nb-cpl-min)
+	  nb-cpl-min (floor (/ print-width cw-max))
+	  nb-cpl     nb-cpl-min)
     (set-buffer buf)
     (goto-char (point-max))
-    (if (not (bolp)) (insert "\n"))
-    (insert ps-setup)
-    (insert "nb char per line / font size\n")
+    (or (bolp) (insert "\n"))
+    (insert ps-setup
+	    "nb char per line / font size\n")
     (while (<= nb-cpl nb-cpl-max)
-      (setq cw     (/ print-width (float nb-cpl))
-	    fs     (/ (* ifs cw) icw))
+      (setq cw (/ print-width (float nb-cpl))
+	    fs (/ (* ifs cw) icw))
       (insert (format "%3s %s\n" nb-cpl fs))
       (setq nb-cpl (1+ nb-cpl)))
     (insert "\n")
@@ -2466,14 +2466,14 @@
 	  nb-page-min (ceiling (/ (float nb-lines) nb-lpp-max))
 	  lh-max      (/ (* ilh fs-max) ifs)
 	  nb-lpp-min  (floor (/ page-height lh-max))
-	  nb-page-max (ceiling (/ (float nb-lines) nb-lpp-min)))
-    (setq nb-page nb-page-min)
+	  nb-page-max (ceiling (/ (float nb-lines) nb-lpp-min))
+	  nb-page     nb-page-min)
     (set-buffer buf)
     (goto-char (point-max))
-    (if (not (bolp)) (insert "\n"))
-    (insert ps-setup)
-    (insert (format "%d lines\n" nb-lines))
-    (insert "nb page / font size\n")
+    (or (bolp) (insert "\n"))
+    (insert ps-setup
+	    (format "%d lines\n" nb-lines)
+	    "nb page / font size\n")
     (while (<= nb-page nb-page-max)
       (setq nb-lpp (ceiling (/ nb-lines (float nb-page)))
 	    lh     (/ page-height nb-lpp)
@@ -2483,58 +2483,55 @@
     (insert "\n")
     (display-buffer buf 'not-this-window)))
 
+(defun ps-error-scale-font ()
+  (error "Don't have data to scale font %s.\nKnown fonts families are:\n%s"
+	 ps-font-family
+	 (mapcar 'car ps-font-info-database)))
+
 (defun ps-select-font ()
   "Choose the font name and size (scaling data)."
-  (let ((assoc (assq ps-font-family ps-font-info-database))
-	l fn fb fi bi sz lh sw aw)
-    (if (null assoc)
-	(error "Don't have data to scale font %s. Known fonts families are %s"
-	       ps-font-family
-	       (mapcar 'car ps-font-info-database)))
-    (setq l  (cdr assoc)
-	  fn (prog1 (car l) (setq l (cdr l))) ; need `pop'
-	  fb (prog1 (car l) (setq l (cdr l)))
-	  fi (prog1 (car l) (setq l (cdr l)))
-	  bi (prog1 (car l) (setq l (cdr l)))
-	  sz (prog1 (car l) (setq l (cdr l)))
-	  lh (prog1 (car l) (setq l (cdr l)))
-	  sw (prog1 (car l) (setq l (cdr l)))
-	  aw (prog1 (car l) (setq l (cdr l))))
-
-    (setq ps-font             fn)
-    (setq ps-font-bold        fb)
-    (setq ps-font-italic      fi)
-    (setq ps-font-bold-italic bi)
-    ;; These data just need to be rescaled:
-    (setq ps-line-height    (/ (* lh ps-font-size) sz))
-    (setq ps-space-width    (/ (* sw ps-font-size) sz))
-    (setq ps-avg-char-width (/ (* aw ps-font-size) sz))
+  (let ((assoc (cdr (assq ps-font-family ps-font-info-database)))
+	fn fb fi bi sz lh sw aw)
+    (or assoc (ps-error-scale-font))
+    (setq fn (nth 0 assoc)
+	  fb (nth 1 assoc)
+	  fi (nth 2 assoc)
+	  bi (nth 3 assoc)
+	  sz (nth 4 assoc)
+	  lh (nth 5 assoc)
+	  sw (nth 6 assoc)
+	  aw (nth 7 assoc)
+
+	  ps-font             fn
+	  ps-font-bold        fb
+	  ps-font-italic      fi
+	  ps-font-bold-italic bi
+	  ;; These data just need to be rescaled:
+	  ps-line-height      (/ (* lh ps-font-size) sz)
+	  ps-space-width      (/ (* sw ps-font-size) sz)
+	  ps-avg-char-width   (/ (* aw ps-font-size) sz))
     ps-font-family))
 
 (defun ps-select-header-font ()
   "Choose the font name and size (scaling data) for the header."
-  (let ((assoc (assq ps-header-font-family ps-font-info-database))
-	l fn fb fi bi sz lh sw aw)
-    (if (null assoc)
-	(error "Don't have data to scale font %s. Known fonts families are %s"
-	       ps-font-family
-	       (mapcar 'car ps-font-info-database)))
-    (setq l  (cdr assoc)
-	  fn (prog1 (car l) (setq l (cdr l))) ; need `pop'
-	  fb (prog1 (car l) (setq l (cdr l)))
-	  fi (prog1 (car l) (setq l (cdr l)))
-	  bi (prog1 (car l) (setq l (cdr l)))
-	  sz (prog1 (car l) (setq l (cdr l)))
-	  lh (prog1 (car l) (setq l (cdr l)))
-	  sw (prog1 (car l) (setq l (cdr l)))
-	  aw (prog1 (car l) (setq l (cdr l))))
-
-    ;; Font name
-    (setq ps-header-font             fn)
-    (setq ps-header-title-font       fb)
-    ;; Line height: These data just need to be rescaled:
-    (setq ps-header-title-line-height (/ (* lh ps-header-title-font-size) sz))
-    (setq ps-header-line-height       (/ (* lh ps-header-font-size)       sz))
+  (let ((assoc (cdr (assq ps-header-font-family ps-font-info-database)))
+	fn fb fi bi sz lh sw aw)
+    (or assoc (ps-error-scale-font))
+    (setq fn (nth 0 assoc)
+	  fb (nth 1 assoc)
+	  fi (nth 2 assoc)
+	  bi (nth 3 assoc)
+	  sz (nth 4 assoc)
+	  lh (nth 5 assoc)
+	  sw (nth 6 assoc)
+	  aw (nth 7 assoc)
+
+	  ;; Font name
+	  ps-header-font              fn
+	  ps-header-title-font        fb
+	  ;; Line height: These data just need to be rescaled:
+	  ps-header-title-line-height (/ (* lh ps-header-title-font-size) sz)
+	  ps-header-line-height       (/ (* lh ps-header-font-size)       sz))
     ps-header-font-family))
 
 (defun ps-get-page-dimensions ()
@@ -2545,7 +2542,8 @@
       (error "`ps-paper-type' must be one of:\n%s"
 	     (mapcar 'car ps-page-dimensions-database)))
      ((< ps-number-of-columns 1)
-      (error "The number of columns %d should not be negative" ps-number-of-columns)))
+      (error "The number of columns %d should not be negative"
+	     ps-number-of-columns)))
 
     (ps-select-font)
     (ps-select-header-font)
@@ -2564,11 +2562,10 @@
     ;; | lm | text | ic | text | ic | text | rm |
     ;; page-width == lm  +  n * pw  +  (n - 1) * ic  +  rm
     ;; => pw == (page-width - lm -rm - (n - 1) * ic) / n
-    (setq ps-print-width
-	  (/ (- page-width
-		ps-left-margin ps-right-margin
-		(* (1- ps-number-of-columns) ps-inter-column))
-	     ps-number-of-columns))
+    (setq ps-print-width (/ (- page-width
+			       ps-left-margin ps-right-margin
+			       (* (1- ps-number-of-columns) ps-inter-column))
+			    ps-number-of-columns))
     (if (<= ps-print-width 0)
 	(error "Bad horizontal layout:
 page-width           == %s
@@ -2599,17 +2596,14 @@
 	       ps-print-height))
     ;; If headers are turned on, deduct the height of the header from
     ;; the print height.
-    (cond
-     (ps-print-header
-      (setq ps-header-pad
-	    (* ps-header-line-pad ps-header-title-line-height))
-      (setq ps-print-height
-	    (- ps-print-height
-	       ps-header-offset
-	       ps-header-pad
-	       ps-header-title-line-height
-	       (* ps-header-line-height (- ps-header-lines 1))
-	       ps-header-pad))))
+    (if ps-print-header
+	(setq ps-header-pad   (* ps-header-line-pad ps-header-title-line-height)
+	      ps-print-height (- ps-print-height
+				 ps-header-offset
+				 ps-header-pad
+				 ps-header-title-line-height
+				 (* ps-header-line-height (1- ps-header-lines))
+				 ps-header-pad)))
     (if (<= ps-print-height 0)
 	(error "Bad vertical layout:
 ps-top-margin    == %s
@@ -2625,21 +2619,20 @@
 	       ps-header-pad
 	       (+ ps-header-pad
 		  ps-header-title-line-height
-		  (* ps-header-line-height (- ps-header-lines 1))
+		  (* ps-header-line-height (1- ps-header-lines))
 		  ps-header-pad)
 	       ps-print-height))))
 
 (defun ps-print-preprint (&optional filename)
-  (if (and filename
-	   (or (numberp filename)
-	       (listp filename)))
-      (let* ((name (concat (buffer-name) ".ps"))
-	     (prompt (format "Save PostScript to file: (default %s) "
-			     name))
-	     (res (read-file-name prompt default-directory name nil)))
-	(if (file-directory-p res)
-	    (expand-file-name name (file-name-as-directory res))
-	  res))))
+  (and filename
+       (or (numberp filename)
+	   (listp filename))
+       (let* ((name   (concat (buffer-name) ".ps"))
+	      (prompt (format "Save PostScript to file: (default %s) " name))
+	      (res    (read-file-name prompt default-directory name nil)))
+	 (if (file-directory-p res)
+	     (expand-file-name name (file-name-as-directory res))
+	   res))))
 
 ;; The following functions implement a simple list-buffering scheme so
 ;; that ps-print doesn't have to repeatedly switch between buffers
@@ -2651,19 +2644,17 @@
   (insert "(")				;insert start-string delimiter
   (save-excursion			;insert string
     (insert string))
-
   ;; Find and quote special characters as necessary for PS
   (while (re-search-forward "[()\\]" nil t)
     (save-excursion
       (forward-char -1)
       (insert "\\")))
-
   (goto-char (point-max))
   (insert ")"))				;insert end-string delimiter
 
 (defun ps-init-output-queue ()
-  (setq ps-output-head (list ""))
-  (setq ps-output-tail ps-output-head))
+  (setq ps-output-head '("")
+	ps-output-tail ps-output-head))
 
 (defun ps-output (&rest args)
   (setcdr ps-output-tail args)
@@ -2734,7 +2725,7 @@
 	(while (and (< count ps-header-lines)
 		    (setq contents (cdr contents)))
 	  (ps-generate-header-line "/h1" (car contents))
-	  (setq count (+ count 1)))
+	  (setq count (1+ count)))
 	(ps-output "] def\n"))))
 
 (defun ps-output-boolean (name bool)
@@ -2875,40 +2866,40 @@
 	ps-background-pages nil
 	ps-background-all-pages nil)
 
-  (ps-output ps-adobe-tag)
-  (ps-output "%%Title: " (buffer-name))	;Take job name from name of
-					;first buffer printed
-  (ps-output "\n%%Creator: " (user-full-name))
-  (ps-output "\n%%CreationDate: "
+  (ps-output ps-adobe-tag
+	     "%%Title: " (buffer-name)	; Take job name from name of
+					; first buffer printed
+	     "\n%%Creator: " (user-full-name)
+	     "\n%%CreationDate: "
 	     (time-stamp-hh:mm:ss) " " (time-stamp-mon-dd-yyyy)
 	     "\n%%Orientation: "
-	     (if ps-landscape-mode "Landscape" "Portrait"))
-  (ps-output "\n%% DocumentFonts: Times-Roman Times-Italic "
+	     (if ps-landscape-mode "Landscape" "Portrait")
+	     "\n%% DocumentFonts: Times-Roman Times-Italic "
 	     ps-font " " ps-font-bold " " ps-font-italic " "
 	     ps-font-bold-italic " "
-	     ps-header-font " " ps-header-title-font)
-  (ps-output "\n%%Pages: (atend)\n")
-  (ps-output "%%EndComments\n\n")
+	     ps-header-font " " ps-header-title-font
+	     "\n%%Pages: (atend)\n"
+	     "%%EndComments\n\n")
 
   (ps-output-boolean "LandscapeMode"             ps-landscape-mode)
-  (ps-output (format "/NumberOfColumns %d def\n" ps-number-of-columns))
-
-  (ps-output (format "/LandscapePageHeight %s def\n" ps-landscape-page-height))
-  (ps-output (format "/PrintPageWidth      %s def\n"
+  (ps-output (format "/NumberOfColumns %d def\n" ps-number-of-columns)
+
+	     (format "/LandscapePageHeight %s def\n" ps-landscape-page-height)
+	     (format "/PrintPageWidth      %s def\n"
 		     (- (* (+ ps-print-width ps-inter-column)
 			   ps-number-of-columns)
-			ps-inter-column)))
-  (ps-output (format "/PrintWidth   %s def\n" ps-print-width))
-  (ps-output (format "/PrintHeight  %s def\n" ps-print-height))
-
-  (ps-output (format "/LeftMargin   %s def\n" ps-left-margin))
-  (ps-output (format "/RightMargin  %s def\n" ps-right-margin)) ; not used
-  (ps-output (format "/InterColumn  %s def\n" ps-inter-column))
-
-  (ps-output (format "/BottomMargin %s def\n" ps-bottom-margin))
-  (ps-output (format "/TopMargin    %s def\n" ps-top-margin)) ; not used
-  (ps-output (format "/HeaderOffset %s def\n" ps-header-offset))
-  (ps-output (format "/HeaderPad    %s def\n" ps-header-pad))
+			ps-inter-column))
+	     (format "/PrintWidth   %s def\n" ps-print-width)
+	     (format "/PrintHeight  %s def\n" ps-print-height)
+
+	     (format "/LeftMargin   %s def\n" ps-left-margin)
+	     (format "/RightMargin  %s def\n" ps-right-margin) ; not used
+	     (format "/InterColumn  %s def\n" ps-inter-column)
+
+	     (format "/BottomMargin %s def\n" ps-bottom-margin)
+	     (format "/TopMargin    %s def\n" ps-top-margin) ; not used
+	     (format "/HeaderOffset %s def\n" ps-header-offset)
+	     (format "/HeaderPad    %s def\n" ps-header-pad))
 
   (ps-output-boolean "PrintHeader"      ps-print-header)
   (ps-output-boolean "PrintHeaderFrame" ps-print-header-frame)
@@ -2922,13 +2913,15 @@
 			       ps-line-height))))
 
   (ps-output-boolean "Zebra" ps-zebra-stripes)
-  (ps-output (format "/NumberOfZebra %d def\n" ps-zebra-stripe-height))
-
   (ps-output-boolean "PrintLineNumber" ps-line-number)
-  (ps-output (format "/Lines %d def\n"
+  (ps-output (format "/NumberOfZebra %d def\n" ps-zebra-stripe-height)
+	     (format "/Lines %d def\n"
 		     (if ps-printing-region
 			 (cdr ps-printing-region)
-		       (ps-count-lines (point-min) (point-max)))))
+		       (ps-count-lines (point-min) (point-max))))
+	     "/PageCount 0 def\n")	; set total page number
+					; when printing has finished
+					; (see `ps-generate')
 
   (ps-background-text)
   (ps-background-image)
@@ -2942,21 +2935,21 @@
   (ps-output "} def\n/printLocalBackground {\n} def\n")
 
   ;; Header fonts
-  (ps-output				; /h0 14 /Helvetica-Bold Font
-   (format "/h0 %s /%s DefFont\n" ps-header-title-font-size ps-header-title-font))
-  (ps-output				; /h1 12 /Helvetica Font
-   (format "/h1 %s /%s DefFont\n" ps-header-font-size       ps-header-font))
+  (ps-output (format "/h0 %s /%s DefFont\n" ; /h0 14 /Helvetica-Bold DefFont
+		     ps-header-title-font-size ps-header-title-font)
+	     (format "/h1 %s /%s DefFont\n" ; /h1 12 /Helvetica DefFont
+		     ps-header-font-size       ps-header-font))
 
   (ps-output ps-print-prologue-2)
 
   ;; Text fonts
-  (ps-output (format "/f0 %s /%s DefFont\n" ps-font-size ps-font))
-  (ps-output (format "/f1 %s /%s DefFont\n" ps-font-size ps-font-bold))
-  (ps-output (format "/f2 %s /%s DefFont\n" ps-font-size ps-font-italic))
-  (ps-output (format "/f3 %s /%s DefFont\n" ps-font-size ps-font-bold-italic))
-
-  (ps-output "\nBeginDoc\n\n")
-  (ps-output "%%EndPrologue\n"))
+  (ps-output (format "/f0 %s /%s DefFont\n" ps-font-size ps-font)
+	     (format "/f1 %s /%s DefFont\n" ps-font-size ps-font-bold)
+	     (format "/f2 %s /%s DefFont\n" ps-font-size ps-font-italic)
+	     (format "/f3 %s /%s DefFont\n" ps-font-size ps-font-bold-italic))
+
+  (ps-output "\nBeginDoc\n\n"
+	     "%%EndPrologue\n"))
 
 (defun ps-header-dirpart ()
   (let ((fname (buffer-file-name)))
@@ -2983,10 +2976,9 @@
   (setq ps-page-count 0))
 
 (defun ps-end-file ()
-  (ps-output "\n%%Trailer\n")
-  (ps-output (format "%%%%Pages: %d\n" (1+ (/ (1- ps-page-count)
-					      ps-number-of-columns))))
-  (ps-output "\nEndDoc\n\n%%EOF\n"))
+  (ps-output "\nEndDoc\n\n%%Trailer\n%%Pages: "
+	     (format "%d" (1+ (/ (1- ps-page-count) ps-number-of-columns)))
+	     "\n%%EOF\n"))
 
 
 (defun ps-next-page ()
@@ -3005,16 +2997,15 @@
     ;; Print when any other page begins.
     (ps-output "BeginDSCPage\n")))
 
-(defun ps-begin-page (&optional dummypage)
+(defun ps-begin-page ()
   (ps-get-page-dimensions)
-  (setq ps-width-remaining  ps-print-width)
-  (setq ps-height-remaining ps-print-height)
+  (setq ps-width-remaining  ps-print-width
+	ps-height-remaining ps-print-height)
 
   (ps-header-page)
 
   (ps-output (format "/LineNumber %d def\n" ps-showline-count)
 	     (format "/PageNumber %d def\n" (incf ps-page-count)))
-  (ps-output "/PageCount 0 def\n")
 
   (when ps-print-header
     (ps-generate-header "HeaderLinesLeft"    ps-left-header)
@@ -3040,24 +3031,16 @@
   (setq ps-showline-count (1+ ps-showline-count))
   (if (< ps-height-remaining ps-line-height)
       (ps-next-page)
-    (setq ps-width-remaining  ps-print-width)
-    (setq ps-height-remaining (- ps-height-remaining ps-line-height))
-    (ps-hard-lf)))
+    (setq ps-width-remaining  ps-print-width
+	  ps-height-remaining (- ps-height-remaining ps-line-height))
+    (ps-output "HL\n")))
 
 (defun ps-continue-line ()
   (if (< ps-height-remaining ps-line-height)
       (ps-next-page)
-    (setq ps-width-remaining  ps-print-width)
-    (setq ps-height-remaining (- ps-height-remaining ps-line-height))
-    (ps-soft-lf)))
-
-;; [jack] Why hard and soft ?
-
-(defun ps-hard-lf ()
-  (ps-output "HL\n"))
-
-(defun ps-soft-lf ()
-  (ps-output "SL\n"))
+    (setq ps-width-remaining  ps-print-width
+	  ps-height-remaining (- ps-height-remaining ps-line-height))
+    (ps-output "SL\n")))
 
 (defun ps-find-wrappoint (from to char-width)
   (let ((avail (truncate (/ ps-width-remaining char-width)))
@@ -3085,8 +3068,8 @@
     (let* ((wrappoint (funcall plotfunc from to bg-color))
 	   (plotted-to (car wrappoint))
 	   (plotted-width (cdr wrappoint)))
-      (setq from plotted-to)
-      (setq ps-width-remaining (- ps-width-remaining plotted-width))
+      (setq from plotted-to
+	    ps-width-remaining (- ps-width-remaining plotted-width))
       (if (< from to)
 	  (ps-continue-line))))
   (if ps-razzle-dazzle
@@ -3095,28 +3078,28 @@
 	     (chunkfrac (/ q-todo 8))
 	     (chunksize (if (> chunkfrac 1000) 1000 chunkfrac)))
 	(if (> (- q-done ps-razchunk) chunksize)
-	    (let (foo)
+	    (progn
 	      (setq ps-razchunk q-done)
-	      (setq foo
-		    (if (< q-todo 100)
-			(/ (* 100 q-done) q-todo)
-		      (/ q-done (/ q-todo 100))))
-	      (message "Formatting...%3d%%" foo))))))
+	      (message "Formatting...%3d%%"
+		       (if (< q-todo 100)
+			   (/ (* 100 q-done) q-todo)
+			 (/ q-done (/ q-todo 100)))
+		       ))))))
 
 (defun ps-set-font (font)
-  (setq ps-current-font font)
-  (ps-output (format "/f%d F\n" ps-current-font)))
+  (ps-output (format "/f%d F\n" (setq ps-current-font font))))
 
 (defun ps-set-bg (color)
   (if (setq ps-current-bg color)
-      (ps-output (format ps-color-format (nth 0 color) (nth 1 color)
-			 (nth 2 color))
+      (ps-output (format ps-color-format
+			 (nth 0 color) (nth 1 color) (nth 2 color))
 		 " true BG\n")
     (ps-output "false BG\n")))
 
 (defun ps-set-color (color)
   (setq ps-current-color (or color ps-default-fg))
-  (ps-output (format ps-color-format (nth 0 ps-current-color)
+  (ps-output (format ps-color-format
+		     (nth 0 ps-current-color)
 		     (nth 1 ps-current-color) (nth 2 ps-current-color))
 	     " FG\n"))
 
@@ -3158,7 +3141,7 @@
 	    (if (= match ?\t)		; tab
 		(let ((linestart
 		       (save-excursion (beginning-of-line) (point))))
-		  (ps-plot 'ps-basic-plot-string from (- (point) 1)
+		  (ps-plot 'ps-basic-plot-string from (1- (point))
 			   bg-color)
 		  (forward-char -1)
 		  (setq from (+ linestart (current-column)))
@@ -3167,7 +3150,7 @@
 			       from (+ linestart (current-column))
 			       bg-color)))
 	      ;; any other control character except tab
-	      (ps-plot 'ps-basic-plot-string from (- (point) 1) bg-color)
+	      (ps-plot 'ps-basic-plot-string from (1- (point)) bg-color)
 	      (cond
 	       ((= match ?\n)		; newline
 		(ps-next-line))
@@ -3255,9 +3238,9 @@
 			   (mapcar 'ps-color-value
 				   (ps-color-values foreground))
 			 ps-default-color))
-	     (bg-color (if (and ps-print-color-p background)
-			   (mapcar 'ps-color-value
-				   (ps-color-values background)))))
+	     (bg-color (and ps-print-color-p background
+			    (mapcar 'ps-color-value
+				    (ps-color-values background)))))
 	(ps-plot-region from to (logand effect 3)
 			fg-color bg-color (lsh effect -2)))
     (ps-plot-region from to 0))
@@ -3269,7 +3252,6 @@
 	 (kind-cons (assq kind (x-font-properties frame-font)))
 	 (kind-spec (cdr-safe kind-cons))
 	 (case-fold-search t))
-
     (or (and kind-spec (string-match kind-regex kind-spec))
 	;; Kludge-compatible:
 	(memq face kind-list))))
@@ -3278,16 +3260,14 @@
   (if (eq ps-print-emacs-type 'emacs)
       (or (face-bold-p face)
 	  (memq face ps-bold-faces))
-    (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold"
-			   ps-bold-faces)))
+    (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold" ps-bold-faces)))
 
 (defun ps-face-italic-p (face)
   (if (eq ps-print-emacs-type 'emacs)
       (or (face-italic-p face)
 	  (memq face ps-italic-faces))
-    (or
-     (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o" ps-italic-faces)
-     (ps-xemacs-face-kind-p face 'SLANT "i\\|o" ps-italic-faces))))
+    (or (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o" ps-italic-faces)
+	(ps-xemacs-face-kind-p face 'SLANT "i\\|o" ps-italic-faces))))
 
 (defun ps-face-underlined-p (face)
   (or (face-underline-p face)
@@ -3355,14 +3335,15 @@
   (< (extent-priority a) (extent-priority b)))
 
 (defun ps-print-ensure-fontified (start end)
-  (if (and (boundp 'lazy-lock-mode) lazy-lock-mode)
-      (if (fboundp 'lazy-lock-fontify-region)
-	  (lazy-lock-fontify-region start end) ; the new
-	(lazy-lock-fontify-buffer))))	; the old
+  (and (boundp 'lazy-lock-mode) lazy-lock-mode
+       (if (fboundp 'lazy-lock-fontify-region)
+	   (lazy-lock-fontify-region start end) ; the new
+	 (lazy-lock-fontify-buffer))))	; the old
 
 (defun ps-generate-postscript-with-faces (from to)
   ;; Some initialization...
-  (setq ps-current-effect 0)
+  (setq ps-current-effect 0
+	ps-print-face-alist nil)
 
   ;; Build the reference lists of faces if necessary.
   (if (or ps-always-build-face-reference
@@ -3390,21 +3371,20 @@
 	(let ((a (cons 'dummy nil))
 	      record type extent extent-list)
 	  (map-extents 'ps-mapper nil from to a)
-	  (setq a (sort (cdr a) 'car-less-than-car))
-
-	  (setq extent-list nil)
+	  (setq a (sort (cdr a) 'car-less-than-car)
+		extent-list nil)
 
 	  ;; Loop through the extents...
 	  (while a
-	    (setq record (car a))
-
-	    (setq position (car record))
-	    (setq record (cdr record))
-
-	    (setq type (car record))
-	    (setq record (cdr record))
-
-	    (setq extent (car record))
+	    (setq record (car a)
+
+		  position (car record)
+		  record (cdr record)
+
+		  type (car record)
+		  record (cdr record)
+
+		  extent (car record))
 
 	    ;; Plot up to this record.
 	    ;; XEmacs 19.12: for some reason, we're getting into a
@@ -3413,9 +3393,8 @@
 	    ;; the buffer, this'll generate errors.  This is a
 	    ;; hack, but don't call ps-plot-with-face unless from >
 	    ;; point-min.
-	    (if (and (>= from (point-min))
-		     (<= position (point-max)))
-		(ps-plot-with-face from position face))
+	    (and (>= from (point-min)) (<= position (point-max))
+		 (ps-plot-with-face from position face))
 
 	    (cond
 	     ((eq type 'push)
@@ -3430,10 +3409,10 @@
 	    (setq face
 		  (if extent-list
 		      (extent-face (car extent-list))
-		    'default))
-
-	    (setq from position)
-	    (setq a (cdr a)))))
+		    'default)
+
+		  from position
+		  a (cdr a)))))
 
        ((eq ps-print-emacs-type 'emacs)
 	(let ((property-change from)
@@ -3474,17 +3453,17 @@
 		       (overlay-priority (or (overlay-get overlay
 							  'priority)
 					     0)))
-		  (if (and (or overlay-invisible overlay-face)
-			   (> overlay-priority face-priority))
-		      (setq face (cond ((if (eq buffer-invisibility-spec t)
-					    (not (null overlay-invisible))
-					  (or (memq overlay-invisible
-						    buffer-invisibility-spec)
-					      (assq overlay-invisible
-						    buffer-invisibility-spec)))
-					nil)
-				       ((and face overlay-face)))
-			    face-priority overlay-priority)))
+		  (and (or overlay-invisible overlay-face)
+		       (> overlay-priority face-priority)
+		       (setq face (cond ((if (eq buffer-invisibility-spec t)
+					     (not (null overlay-invisible))
+					   (or (memq overlay-invisible
+						     buffer-invisibility-spec)
+					       (assq overlay-invisible
+						     buffer-invisibility-spec)))
+					 nil)
+					((and face overlay-face)))
+			     face-priority overlay-priority)))
 		(setq overlays (cdr overlays))))
 	    ;; Plot up to this record.
 	    (ps-plot-with-face from position face)
@@ -3506,8 +3485,8 @@
 	(if ps-razzle-dazzle
 	    (message "Formatting...%3d%%" (setq ps-razchunk 0)))
 	(set-buffer buffer)
-	(setq ps-source-buffer buffer)
-	(setq ps-spool-buffer (get-buffer-create ps-spool-buffer-name))
+	(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
@@ -3521,9 +3500,8 @@
 		(set-marker safe-marker (point-max))
 
 		(goto-char (point-min))
-		(if (looking-at (regexp-quote ps-adobe-tag))
-		    nil
-		  (setq needs-begin-file t))
+		(or (looking-at (regexp-quote ps-adobe-tag))
+		    (setq needs-begin-file t))
 		(save-excursion
 		  (set-buffer ps-source-buffer)
 		  (if needs-begin-file (ps-begin-file))
@@ -3533,29 +3511,29 @@
 		(funcall genfunc from to)
 		(ps-end-page)
 
-		(if (and ps-spool-duplex
-			 (= (mod ps-page-count 2) 1))
-		    (ps-dummy-page))
+		(and ps-spool-duplex (= (mod ps-page-count 2) 1)
+		     (ps-dummy-page))
 		(ps-flush-output)
 
 		;; Back to the PS output buffer to set the page count
 		(set-buffer ps-spool-buffer)
-		(goto-char (point-max))
-		(while (re-search-backward "^/PageCount 0 def$" nil t)
-		  (replace-match (format "/PageCount %d def" ps-page-count) t))
+		(goto-char (point-min))
+		(and (re-search-forward "^/PageCount 0 def$" nil t)
+		     (replace-match (format "/PageCount %d def" ps-page-count)
+				    t))
 
 		;; Setting this variable tells the unwind form that the
-		;; the postscript was generated without error.
+		;; 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.
+	    ;; PostScript, delete all the PostScript that was generated.
 	    ;; This protects the previously spooled files from getting
 	    ;; corrupted.
-	    (if (and (markerp safe-marker) (not completed-safely))
-		(progn
-		  (set-buffer ps-spool-buffer)
-		  (delete-region (marker-position safe-marker) (point-max))))))
+	    (and (markerp safe-marker) (not completed-safely)
+		 (progn
+		   (set-buffer ps-spool-buffer)
+		   (delete-region (marker-position safe-marker) (point-max))))))
 
 	(if ps-razzle-dazzle
 	    (message "Formatting...done"))))))
@@ -3596,15 +3574,14 @@
 
 (defun ps-kill-emacs-check ()
   (let (ps-buffer)
-    (if (and (setq ps-buffer (get-buffer ps-spool-buffer-name))
-	     (buffer-modified-p ps-buffer))
-	(if (y-or-n-p "Unprinted PostScript waiting; print now? ")
-	    (ps-despool)))
-    (if (and (setq ps-buffer (get-buffer ps-spool-buffer-name))
-	     (buffer-modified-p ps-buffer))
-	(if (yes-or-no-p "Unprinted PostScript waiting; exit anyway? ")
-	    nil
-	  (error "Unprinted PostScript")))))
+    (and (setq ps-buffer (get-buffer ps-spool-buffer-name))
+	 (buffer-modified-p ps-buffer)
+	 (y-or-n-p "Unprinted PostScript waiting; print now? ")
+	 (ps-despool))
+    (and (setq ps-buffer (get-buffer ps-spool-buffer-name))
+	 (buffer-modified-p ps-buffer)
+	 (not (yes-or-no-p "Unprinted PostScript waiting; exit anyway? "))
+	 (error "Unprinted PostScript"))))
 
 (if (fboundp 'add-hook)
     (funcall 'add-hook 'kill-emacs-hook 'ps-kill-emacs-check)
@@ -3696,21 +3673,21 @@
 ;; we ran gnus.  The second time, this hook wouldn't get set up.  The
 ;; only alternative is `gnus-article-prepare-hook'.
 (defun ps-gnus-article-prepare-hook ()
-  (setq ps-header-lines 3)
-  (setq ps-left-header
+  (setq ps-header-lines 3
+	ps-left-header
 	;; The left headers will display the article's subject, its
 	;; author, and the newsgroup it was in.
-	(list 'ps-article-subject 'ps-article-author 'gnus-newsgroup-name)))
+	'(ps-article-subject ps-article-author gnus-newsgroup-name)))
 
 ;; A hook to bind to `vm-mode-hook' to locally bind prsc and set the
 ;; `ps-left-headers' specially for mail messages.
 (defun ps-vm-mode-hook ()
   (local-set-key (ps-prsc) 'ps-vm-print-message-from-summary)
-  (setq ps-header-lines 3)
-  (setq ps-left-header
+  (setq ps-header-lines 3
+	ps-left-header
 	;; The left headers will display the message's subject, its
 	;; author, and the name of the folder it was in.
-	(list 'ps-article-subject 'ps-article-author 'buffer-name)))
+	'(ps-article-subject ps-article-author buffer-name)))
 
 ;; Every now and then I forget to switch from the *Summary* buffer to
 ;; the *Article* before hitting prsc, and a nicely formatted list of
@@ -3754,7 +3731,7 @@
 (defun ps-info-mode-hook ()
   (setq ps-left-header
 	;; The left headers will display the node name and file name.
-	(list 'ps-info-node 'ps-info-file)))
+	'(ps-info-node ps-info-file)))
 
 ;; WARNING! The following function is a *sample* only, and is *not*
 ;; meant to be used as a whole unless you understand what the effects
@@ -3771,10 +3748,10 @@
   (add-hook 'vm-mode-hook 'ps-vm-mode-hook)
   (add-hook 'vm-mode-hooks 'ps-vm-mode-hook)
   (add-hook 'Info-mode-hook 'ps-info-mode-hook)
-  (setq ps-spool-duplex t)
-  (setq ps-print-color-p nil)
-  (setq ps-lpr-command "lpr")
-  (setq ps-lpr-switches '("-Jjct,duplex_long"))
+  (setq ps-spool-duplex t
+	ps-print-color-p nil
+	ps-lpr-command "lpr"
+	ps-lpr-switches '("-Jjct,duplex_long"))
   'ps-jts-ps-setup)
 
 ;; WARNING! The following function is a *sample* only, and is *not*
@@ -3786,7 +3763,7 @@
 (defun ps-jack-setup ()
   (setq ps-print-color-p  nil
 	ps-lpr-command    "lpr"
-	ps-lpr-switches   (list)
+	ps-lpr-switches   nil
 
 	ps-paper-type        'a4
 	ps-landscape-mode    t