summaryrefslogblamecommitdiff
path: root/print/ghostscript-gpl/files/patch-lib:ps2epsi.ps
blob: 19ccc7d0b022c3255c44e506f2801d5abbc42fe0 (plain) (tree)
















































                                                                              



                                                  
                                                                   
                                               
                           


















































































































































                                                                               
--- lib/ps2epsi.ps.orig	Wed Apr  4 13:45:42 2001
+++ lib/ps2epsi.ps	Tue Apr 23 05:30:39 2002
@@ -1,27 +1,31 @@
-%    Copyright (C) 1990, 2000 Aladdin Enterprises.  All rights reserved.
+%    Copyright (C) 1990-2002 artofcode LLC. All rights reserved.
 % 
-% This file is part of AFPL Ghostscript.
+% This software is provided AS-IS with no warranty, either express or
+% implied.
 % 
-% AFPL Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author or
-% distributor accepts any responsibility for the consequences of using it, or
-% for whether it serves any particular purpose or works at all, unless he or
-% she says so in writing.  Refer to the Aladdin Free Public License (the
-% "License") for full details.
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
 % 
-% Every copy of AFPL Ghostscript must include a copy of the License, normally
-% in a plain ASCII text file named PUBLIC.  The License grants you the right
-% to copy, modify and redistribute AFPL Ghostscript, but only under certain
-% conditions described in the License.  Among other things, the License
-% requires that the copyright notice and this notice be preserved on all
-% copies.
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA  94903, U.S.A., +1(415)492-9861.
 
-% $Id: ps2epsi.ps,v 1.5 2001/04/04 04:45:42 alexcher Exp $
+% $Id: ps2epsi.ps,v 1.5.2.3 2002/04/22 20:30:39 giles Exp $
 % Convert an arbitrary PostScript file to an EPSI file.
 %
 % Please do not contact these users if you have questions.  They no longer
 % have the time, interest, or current expertise to keep this code working.
 % If you find bugs, please send proposed fixes to bug-gs@aladdin.com.
 %
+% Bug fix 2002-04-20 by rayjj: Bounding box was incorrect since it depended
+%   on the dither pattern and gray shade at the boundary. Changed to use
+%   8-bit grayscale preview image to allow correct bounding box (at the
+%   expense of a 8x larger preview image). Also moved .setsafe until after
+%   the device and file operations are complete (but still before the input
+%   file is processed.
 % Bug fix 2000-04-11 by lpd: if a font didn't have a FontName (which is the
 %   case for bitmap fonts produced by recent versions of dvips), setfont
 %   caused an error.
@@ -51,7 +55,6 @@
   /ps2epsi
    {				% Open the file
      outfile (w) file /epsifile exch def
-     //systemdict /.setsafe known { .setsafe } if
 					% Get the device parameters
      currentdevice getdeviceprops .dicttomark 
      /HWSize get aload pop
@@ -59,17 +62,23 @@
        /devwidth exch def
      matrix defaultmatrix
        /devmatrix exch def
-				% Make a corresponding memory device
-     devmatrix devwidth devheight <ff 00>
+				% Make a corresponding 8-bit deep memory device
+     devmatrix devwidth devheight
+     256 string 0 1 255 { 1 index exch dup 255 exch sub put } for
      makeimagedevice
      /arraydevice exch def
-     arraydevice setdevice	% (does an erasepage)
-     /rowwidth devwidth 7 add 8 idiv def
+     arraydevice
+     % Turn on anti-aliasing
+     mark /TextAlphaBits 4 /GraphicsAlphaBits 4 6 -1 roll
+     putdeviceprops
+     setdevice	% (does an erasepage)
+     /rowwidth devwidth def
      /row rowwidth string def
      /zerorow rowwidth string def	% all zero
 				% Replace the definition of showpage
      userdict /showpage { ps2edict begin epsipage end } bind put
      userdict /setfont { ps2edict begin epsisetfont end } bind put
+     //systemdict /.setsafe known { .setsafe } if
    } bind def
 
  /epsifontdict 100 dict def
@@ -125,8 +134,8 @@
      
      % Initialise limit variables
      /loopcount rowwidth 1 sub def
-     /lm loopcount def /lmb 0 def
-     /rm 0 def /rmb 0 def
+     /lm loopcount def 
+     /rm 0 def 
 
      % Find left and right boundaries of image
      tm 1 bm
@@ -135,47 +144,29 @@
 	% Scan from left to find first non-zero element
 	% We save first the element, then the index
 	-1 0 1 loopcount
-	{ dup row exch get dup 0 ne { exch exit }{ pop pop } ifelse
+	{ dup row exch get 0 ne { exch pop exit }{ pop } ifelse
 	} for
 	% If we found -1, row is blank ..
 	dup -1 ne 
 	{ % Find the leftmost index
           dup lm lt
           % If the new index is less, we save index and element
-          { /lm exch def /lmb exch def }
-          % If the index is equal, we or the bits together
-          { lm eq { lmb or /lmb exch def }{ pop } ifelse
-          } ifelse
+          { /lm exch def } { pop } ifelse
 	  % Now find the rightmost index
 	  loopcount -1 0
-          { dup row exch get dup 0 ne { exch exit }{ pop pop } ifelse
+          { dup row exch get 0 ne { exit }{ pop } ifelse
           } for
 	  dup rm gt
           % If the new index is greater, we save index and element
-          { /rm exch def /rmb exch def }
-          % If the index is equal, or the bits
-          { rm eq { rmb or /rmb exch def } { pop } ifelse
-          } ifelse
+          { /rm exch def } { pop } ifelse
 	} if
-	pop
       } for
 
-     % Now we find the real left & right bit positions
-     256 0 1 7
-     { exch 2 div dup lmb le { pop exit }{ exch pop } ifelse
-     } for
-     /lmb exch def
-
-     1 7 -1 0
-     { exch dup dup rmb and eq { pop exit }{ 2 mul exch pop } ifelse
-     } for
-     /rmb exch def
-
      % Calculate the bounding box values.
      % Note that these must be corrected to produce closed-open intervals.
-     /llx lm 8 mul lmb add def
+     /llx lm def
      /lly devheight bm sub 1 sub def
-     /urx rm 8 mul rmb add 1 add def
+     /urx rm 1 add def
      /ury devheight tm sub def
 
     % Write out the magic string and bounding box information
@@ -206,38 +197,31 @@
      epsifile lly write==only epsifile ( ) writestring
      epsifile urx write==only epsifile ( ) writestring
      epsifile ury write==
-     epsifile (%%BeginPreview: ) writestring
-     epsifile urx llx sub write==only epsifile ( ) writestring
-     epsifile bm tm sub 1 add write==only epsifile ( 1 ) writestring
-     epsifile bm tm sub 1 add write==
-     epsifile flushfile
 
     % Define character and bit widths for the output line buffer:
      /cwidth rm lm sub 1 add def
-     /bwidth cwidth 8 mul def
-     /owidth urx llx sub 7 add 8 idiv def
      /out cwidth string def
 
-     % Create a 1-bit-high device for bitblt to align with the bbox
-     gsave
-     matrix cwidth 8 mul 1 <00 ff> makeimagedevice setdevice
+     epsifile (%%BeginPreview: ) writestring
+     epsifile cwidth write==only epsifile ( ) writestring
+     epsifile bm tm sub 1 add write==only epsifile ( 8 ) writestring
+     epsifile bm tm sub 1 add
+     cwidth 39 add 40 idiv mul write==
+     epsifile flushfile
 
-     % 'image' a zero string to clear the line device
-     bwidth 1 1 matrix cwidth string image
+     gsave
 
      tm 1 bm
       { % Get a scan line interval from the array device
 	arraydevice exch row copyscanlines lm cwidth getinterval
-	lmb 0 gt
-	{ % 'image' it into the line device with the lmb offset
-	  bwidth 1 1 [1 0 0 1 lmb 0] 5 -1 roll image
-	  % Now we get the modified scan line
-	  currentdevice 0 out copyscanlines 0 owidth getinterval
-	} if
-	% Write out the hex data
-	epsifile (% ) writestring 
-	epsifile exch writehexstring
-	epsifile (\n) writestring
+	% Write out the hex data as 40 bytes per line (82 chars)
+	0 40 cwidth
+	 { epsifile (% ) writestring 
+	   epsifile exch 2 index exch
+	   dup cwidth exch sub 40 .min getinterval writehexstring
+	   epsifile (\n) writestring
+	 } for
+        pop
       } for
 
      epsifile (%%EndImage\n) writestring