summaryrefslogtreecommitdiff
path: root/sys/lib/ghostscript/gs_devcs.ps
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 16:53:33 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 16:53:33 +0300
commite463eb40363ff4c68b1d903f4e0cdd0ac1c5977f (patch)
treed5e9f57c28f026cb21de3bd77cc10cd7f64aaa85 /sys/lib/ghostscript/gs_devcs.ps
parentb41b9034225ab3e49980d9de55c141011b6383b0 (diff)
Import sources from 2011-03-30 iso image - sys/lib
Diffstat (limited to 'sys/lib/ghostscript/gs_devcs.ps')
-rwxr-xr-xsys/lib/ghostscript/gs_devcs.ps248
1 files changed, 248 insertions, 0 deletions
diff --git a/sys/lib/ghostscript/gs_devcs.ps b/sys/lib/ghostscript/gs_devcs.ps
new file mode 100755
index 000000000..6b0dc8449
--- /dev/null
+++ b/sys/lib/ghostscript/gs_devcs.ps
@@ -0,0 +1,248 @@
+% Copyright (C) 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_devcs.ps,v 1.7 2005/09/12 11:34:50 leonardo Exp $
+% Device-specific color space method dictionaries.
+
+%
+% This file implements the method dictionaries for the Device-specific
+% color spaces. See gs_cspace.ps for information.
+%
+% Note that, because these color spaces are parameter-less, no color
+% space validation is required: if we can get to the color space methods,
+% we know the color space is legitimate.
+%
+% The colorspace substitution routines for these color spaces
+% (cs_substitute) will fail in a Level 1 system, but this is not a
+% problem as .getuseciecolor will always return false for such systems.
+%
+.currentglobal true .setglobal
+.cspace_util begin
+
+%
+% <r> <g> <b> rgb_2_gray <gray>
+%
+% Convert RGB colors to gray. This includes a special check for
+% r == g == b, and avoids roundoff error if this is the case.
+%
+/rgb_2_gray
+ {
+ 3 copy 1 index eq 3 1 roll eq and
+ { pop pop }
+ { .11 mul exch .59 mul add exch .3 mul add }
+ ifelse
+ }
+bind def
+
+systemdict /..page_default_spaces 3 dict put
+
+% <color_space_name> ..includecolorspace -
+/..includecolorspace
+{ % Only includes ones explicitly defined by the document.
+ systemdict /..page_default_spaces get 1 index known {
+ pop
+ } {
+ mark exch
+ { dup /ColorSpace resourcestatus {
+ pop 0 eq {
+ systemdict /..page_default_spaces get 1 index //true put
+ gsave
+ { dup /ColorSpace findresource //_setcolorspace_nosub exec .includecolorspace
+ } stopped pop
+ grestore
+ } if
+ } if
+ } stopped pop
+ cleartomark
+ } ifelse
+} bind def
+
+% <color_space> <color_space_name> cs_substitute_generic <color_space1> <color_space2>
+/cs_substitute_generic
+{ .getuseciecolor
+ { NOSUBSTDEVICECOLORS
+ { //..includecolorspace exec dup }
+ { /ColorSpace findresource }
+ ifelse
+ }
+ { pop dup }
+ ifelse
+}
+bind def
+
+% <color_space> <color_space_name> cs_substitute_DeviceRGB_for_PDFX <color_space1> <color_space2>
+/cs_substitute_DeviceRGB_for_PDFX
+{ systemdict /PDFX .knownget not { false } if {
+ dup /ColorSpace resourcestatus {
+ pop pop
+ } {
+ (Error: Need a /DefaultRGB /ColorSpace resource for generating a PDF/X document.) =
+ /cs_substitute_DeviceRGB_for_PDFX /undefined signalerror
+ } ifelse
+ /ColorSpace findresource
+ } {
+ //cs_substitute_generic exec
+ } ifelse
+} bind def
+
+colorspacedict
+
+dup
+/DeviceGray
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_1
+ /cs_get_range //get_range_1
+ /cs_get_default_color { pop 0 } bind
+ /cs_get_currentgray //pop_1
+ /cs_get_currentrgb { pop dup dup } bind
+ /cs_get_currentcmyk { pop 1 exch sub 0 0 0 4 -1 roll } bind
+ /cs_validate {}
+
+ /cs_substitute
+ { /DefaultGray //cs_substitute_generic exec
+ }
+ bind
+
+ /cs_prepare {}
+ /cs_install { pop 0 .setdevcspace } bind
+ /cs_prepare_color //validate_1
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+put
+
+
+/DeviceRGB
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_3
+ /cs_get_range //get_range_3
+ /cs_get_default_color { pop 0 0 0 } bind
+ /cs_get_currentgray { pop //rgb_2_gray exec } bind
+ /cs_get_currentrgb //pop_1
+
+ % to convert to cmyk use blackgeneration and undercolorremoval
+ /cs_get_currentcmyk
+ {
+ pop
+
+ % convert to subtractive (CMY) color space
+ 3
+ { 1 exch sub 3 1 roll }
+ repeat
+
+ % find the minimum (initial k component)
+ 3 copy
+ 2
+ {
+ 2 copy gt
+ { exch }
+ if
+ pop
+ }
+ repeat
+
+ % apply undercolorremoval
+ dup 5 1 roll currentundercolorremoval exec 4 1 roll
+ 3
+ { 3 index sub //bound_0_1 exec 3 1 roll }
+ repeat
+
+ % apply blackgeneration
+ 5 3 roll pop currentblackgeneration exec //bound_0_1 exec
+ }
+ bind
+
+ /cs_validate {}
+
+ /cs_substitute
+ { /DefaultRGB //cs_substitute_DeviceRGB_for_PDFX exec
+ }
+ bind
+
+ /cs_prepare {}
+ /cs_install { pop 1 .setdevcspace } bind
+ /cs_prepare_color //validate_3
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+put
+
+end % .cspace_util
+.setglobal
+
+
+% Only create the DeviceCMYK color space if setcolorscreen is present
+/setcolorscreen where
+ { pop }
+ { currentfile closefile }
+ifelse
+
+
+.currentglobal true .setglobal
+.cspace_util begin
+
+colorspacedict
+/DeviceCMYK
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_4
+ /cs_get_range //get_range_4
+ /cs_get_default_color { pop 0 0 0 1 } bind
+
+ /cs_get_currentgray
+ { pop 4 1 roll //rgb_2_gray exec add 1 exch sub //bound_0_1 exec }
+ bind
+
+ /cs_get_currentrgb
+ {
+ pop
+ 4 1 roll 3
+ { 3 index add 1 exch sub //bound_0_1 exec 3 1 roll }
+ repeat
+ 4 -1 roll pop
+ }
+ bind
+
+ /cs_get_currentcmyk //pop_1
+
+ /cs_validate {}
+
+ /cs_substitute
+ { /DefaultCMYK //cs_substitute_generic exec
+ }
+ bind
+
+ /cs_prepare {}
+ /cs_install { pop 2 .setdevcspace } bind
+ /cs_prepare_color //validate_4
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+put
+
+currentdict /..includecolorspace .undef
+currentdict /cs_substitute_generic .undef
+
+end % .cspace_util
+.setglobal
+