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_indxd.ps | |
parent | b41b9034225ab3e49980d9de55c141011b6383b0 (diff) |
Import sources from 2011-03-30 iso image - sys/lib
Diffstat (limited to 'sys/lib/ghostscript/gs_indxd.ps')
-rwxr-xr-x | sys/lib/ghostscript/gs_indxd.ps | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/sys/lib/ghostscript/gs_indxd.ps b/sys/lib/ghostscript/gs_indxd.ps new file mode 100755 index 000000000..6552cc2bc --- /dev/null +++ b/sys/lib/ghostscript/gs_indxd.ps @@ -0,0 +1,204 @@ +% Copyright (C) 2001, 2002 Aladdin Enterprises. 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_indxd.ps,v 1.2 2002/11/13 20:23:10 alexcher Exp $ +% Indexed color space method dictionary + + +% verify that Indexed color spaces are supported +/.setindexedspace where + { pop } + { currentfile closefile } +ifelse + +.currentglobal true .setglobal +.cspace_util begin + +% +% <num> <array> restrict_index <int> <array> +% +% Restrict the operand to setcolor for an Indexed color space to be an +% integer in the applicable range. +% +/restrict_index + { + exch round cvi + dup 0 lt + { pop 0 } + { + 1 index 2 get 2 copy gt + { exch } + if + pop + } + ifelse + exch + } +bind def + +% +% <num> <array> get_indexed_base_color <c1> ... <cn> <array> +% +% Get the base color corresponding to an indexed color value. +% +/get_indexed_base_color + { + % just in case, set the index into the appropriate range + //restrict_index exec + + % lookup in the string or use the lookup proc + mark 1 index 3 get dup type /stringtype eq + { + 2 index 1 get //.cs_get_ncomps exec dup 6 -1 roll mul exch getinterval + { 255 div } + forall + } + { 4 -1 roll exch exec } + ifelse + counttomark 2 add -2 roll pop + } +bind def + + +colorspacedict +/Indexed + mark + /cs_potential_indexed_base false + /cs_potential_pattern_base true + /cs_potential_alternate false + /cs_potential_icc_alternate false + /cs_get_ncomps //ncomps_1 + /cs_get_range { 0 exch 2 get 2 array astore } bind + /cs_get_default_color { pop 0 } bind + + /cs_get_currentgray + { //get_indexed_base_color exec 1 get //.cs_get_currentgray exec } + bind + /cs_get_currentrgb + { //get_indexed_base_color exec 1 get //.cs_get_currentrgb exec } + bind + /cs_get_currentcmyk + { //get_indexed_base_color exec 1 get //.cs_get_currentcmyk exec } + bind + + % a lot of validation is done by the cs_validate method + /cs_validate + { + //check_array exec + dup 1 get //.cs_validate exec //.cs_potential_indexed_base exec not + //setcspace_rangecheck + if + dup 2 get dup type /integertype ne + //setcspace_typecheck + { + dup 0 lt exch 4095 gt or + //setcspace_rangecheck + if + } + ifelse + dup 3 get dup type /stringtype eq + { + length + 1 index dup 2 get 1 add exch 1 get //.cs_get_ncomps exec mul + lt + //setcspace_rangecheck + if + } + { + //check_array exec xcheck not + //setcspace_typecheck + if + } + ifelse + } + bind + + % substitute the base space if appropriate + /cs_substitute + { + dup 1 get //.cs_substitute exec 2 copy eq + { pop pop dup } + { + % retain only the new base space + exch pop + + % build all new structures in local VM + .currentglobal 3 1 roll //false .setglobal + + % construct a new array and insert the new base color space + 1 index dup length array copy dup 1 4 -1 roll put + + % restore VM mode + 3 -1 roll .setglobal + } + ifelse + } + bind + + /cs_prepare {} + + % + % Install the current color space. Note that the alternative color + % space will already have been set as the current color space. + % + % The current Ghostscript color space implementation requires that + % color spaces that provide a base or alternative color space set + % that base/alternative color space to be the current color space + % before attempting to set the original color space. + % + /cs_install + { + % save the current color space + currentcolorspace + + % set the base color space as the current color space + 1 index 1 get //forcesetcolorspace + + % set the indexed color space; restore the earlier space on error + mark 2 index + { .setindexedspace } + stopped + { cleartomark setcolorspace stop } + { pop pop pop } + ifelse + } + bind + + /cs_prepare_color //validate_1 + + % + % Adobe implementations always execute a lookup procedure when setcolor + % is invoked. Ghostscript samples the lookup procedure when + % setcolorspace is invoked, and then does not access it again. In the + % unlikely event that an application depends on the Adobe-specific + % behavior, it is replicated in this method. + % + /cs_complete_setcolor + { + 3 get dup type /stringtype eq + { pop } + { + currentcolor exch exec + currentcolorspace 1 get //clear_setcolor_operands exec + } + ifelse + } + bind + + .dicttomark +put + +end % .cspace_util +.setglobal |