diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 16:53:33 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 16:53:33 +0300 |
commit | e463eb40363ff4c68b1d903f4e0cdd0ac1c5977f (patch) | |
tree | d5e9f57c28f026cb21de3bd77cc10cd7f64aaa85 /sys/lib/ghostscript/gs_dscp.ps | |
parent | b41b9034225ab3e49980d9de55c141011b6383b0 (diff) |
Import sources from 2011-03-30 iso image - sys/lib
Diffstat (limited to 'sys/lib/ghostscript/gs_dscp.ps')
-rwxr-xr-x | sys/lib/ghostscript/gs_dscp.ps | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/sys/lib/ghostscript/gs_dscp.ps b/sys/lib/ghostscript/gs_dscp.ps new file mode 100755 index 000000000..f731f9682 --- /dev/null +++ b/sys/lib/ghostscript/gs_dscp.ps @@ -0,0 +1,118 @@ +% Copyright (C) 2000 Artifex Software Inc. All rights reserved. +% +% This software is provided AS-IS with no warranty, either express or +% implied. +% +% 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. +% +% 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: gs_dscp.ps,v 1.6 2002/02/21 21:49:28 giles Exp $ +% Postscript interface routines to DSC parser + +/send_orientation { % <orientation> send_orientation - + % .parse_dsc_comments returns -1 for an Orientation key with an + % unrecognized value. + dup 0 ge { + << /Orientation 2 index >> setpagedevice + } if pop +} bind def + +% This dictionary contains local handlers for DSC comments. +% See header in zdscpars.c for more information. +% <dsc_dict> handler <dsc_dict> +/DSCparseprocs mark + /Orientation { dup /Orientation get send_orientation } bind + /PageOrientation { dup /PageOrientation .knownget { send_orientation } + { dup /Orientation .knownget { send_orientation } if } + ifelse } bind + /Page { dup /Orientation .knownget { send_orientation } if } bind + /NOP { } bind +.dicttomark readonly def + +% This procedure is called whenever a DSC comment is found by the interpreter +/do_parse_dsc false def +/parse_dsc { % <file> <DSC string> [<prev proc>] + % parse_dsc - + % Run any previously installed parser. + 0 get dup null eq { pop } { 3 copy exec pop } ifelse + + do_parse_dsc { % Check if this parser is enabled + currentglobal true setglobal % Go to global VM, save old state + 3 1 roll % Put old VM state under <file> <string> + dsc_dict exch % <VM state> <file> <dict> <string> + .parse_dsc_comments % <VM state> <file> <dict> <DSC name> + 4 -1 roll % Get old VM state from under <file> <dict> <DSC name> + setglobal % restore previous VM state + //DSCparseprocs exch .knownget { % Check DSC name against local handler list + exec % execute any local handler + } if + } if + pop pop % remove file, dict +} bind def + + +% Check whether the currently installed parser is the one defined in this file. +/.using_parse_dsc { % - .using_parse_dsc <proc> <using?> + currentuserparams /ProcessDSCComment get + dup null eq { pop {{//null} //parse_dsc exec} } if + dup length 3 eq { + dup dup length 1 sub get /parse_dsc load eq + } { + false + } ifelse +} bind def + +% Establish a binding for dsc_dict. +userdict /dsc_dict null put + +% - dsc_init - +/dsc_init { % Initialize DSC parser + currentglobal true setglobal + /dsc_dict 50 dict store % Size must be large enough for all DSC values + dsc_dict .initialize_dsc_parser + .using_parse_dsc { + % Already using this parser. + pop + } { + % Encapsulate the previous parser. We know it is in global VM: + % allocate the new one in global VM as well. + 1 array astore + /parse_dsc load /exec load 3 array astore cvx readonly + << /ProcessDSCComment 3 -1 roll >> + setuserparams + } ifelse + setglobal + /do_parse_dsc true def +} bind def + + +% Enable the DSC parser defined in this file. +% - enable_dsc - +/enable_dsc { + dsc_init +} bind def + +% Disable the DSC parser defined in this file. +% - disable_dsc - +/disable_dsc { + % There might be another parser installed: if so, restore it. + % (If it has encapsulated our parser, we can't.) + .using_parse_dsc { + % Restore the parser we encapsulated. + 0 get 0 get + currentglobal true setglobal exch + << /ProcessDSCComment 3 -1 roll >> + exch setglobal setuserparams + } { + pop + } ifelse + % If we couldn't restore the old parser, at least disable ours. + /do_parse_dsc false def +} bind def |