summaryrefslogtreecommitdiff
path: root/sys/lib/ghostscript/gs_devn.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_devn.ps
parentb41b9034225ab3e49980d9de55c141011b6383b0 (diff)
Import sources from 2011-03-30 iso image - sys/lib
Diffstat (limited to 'sys/lib/ghostscript/gs_devn.ps')
-rwxr-xr-xsys/lib/ghostscript/gs_devn.ps191
1 files changed, 191 insertions, 0 deletions
diff --git a/sys/lib/ghostscript/gs_devn.ps b/sys/lib/ghostscript/gs_devn.ps
new file mode 100755
index 000000000..cabfdf03c
--- /dev/null
+++ b/sys/lib/ghostscript/gs_devn.ps
@@ -0,0 +1,191 @@
+% 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_devn.ps,v 1.3 2002/11/13 20:23:10 alexcher Exp $
+% DeviceN color space method dictionary; this depends on gs_sepr.ps
+
+
+% verify that DeviceN and Separation color spaces are supported
+/.setdevicenspace where
+ {
+ pop
+ /.setseparationspace where
+ { pop //false }
+ { //true }
+ ifelse
+ }
+ { //true }
+ifelse
+ { currentfile closefile }
+if
+
+.currentglobal true .setglobal
+.cspace_util begin
+
+
+%
+% <c1> ... <cm> <array> apply_devn_tint_xform <c1>' ... <cn>' <array>
+%
+% Apply the tint transformation for the DeviceN color intensity values.
+/apply_devn_tint_xform
+ {
+ dup 1 get length 1 add exch
+ mark 2 index 2 add 2 roll
+ index 3 get exec
+ counttomark 2 add -2 roll pop
+ }
+bind def
+
+
+
+colorspacedict
+/DeviceN
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate false
+ /cs_potential_icc_alternate false
+ /cs_get_ncomps { 1 get length } bind
+ /cs_get_range { 1 get length [ exch { 0 1 } repeat ] } bind
+ /cs_get_default_color { 1 get length { 1 } repeat } bind
+
+ /cs_get_currentgray
+ { //apply_devn_tint_xform exec 2 get //.cs_get_currentgray exec }
+ bind
+ /cs_get_currentrgb
+ { //apply_devn_tint_xform exec 2 get //.cs_get_currentrgb exec }
+ bind
+ /cs_get_currentcmyk
+ { //apply_devn_tint_xform exec 2 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 //check_array exec
+ {
+ type dup /nametype ne exch /stringtype ne and
+ //setcspace_typecheck
+ if
+ }
+ forall
+ dup 2 get //.cs_validate exec //.cs_potential_alternate exec not
+ //setcspace_rangecheck
+ if
+ dup 3 get //check_array exec xcheck not
+ //setcspace_typecheck
+ if
+ }
+ bind
+
+ % substitute the base space if appropriate
+ /cs_substitute
+ {
+ dup 2 get //.cs_substitute exec 2 copy eq
+ { pop pop dup }
+ {
+ % retain only the new alternate 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 2 4 -1 roll put
+
+ % restore VM mode
+ 3 -1 roll .setglobal
+ }
+ ifelse
+ }
+ bind
+
+ %
+ % The Ghostscript interpreter works better when tinttransform procedures
+ % are translated into functions. Attempt to do that here.
+ %
+ /cs_prepare //converttinttransform
+
+ %
+ % Install 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.
+ %
+ % Beginning with Acrobat 5, PDF apparently supports 1-component
+ % DeviceN color spaces with the single component "All" (the "PDF
+ % Reference", 3rd ed., p. 206 still describes this as illegal).
+ % We translate such calls to Separation color spaces.
+ %
+ /cs_install
+ {
+ % save the current color space
+ currentcolorspace
+
+ % set the base color space as the current color space
+ 1 index 2 get //forcesetcolorspace
+
+ % set the indexed color space; restore the earlier space on error
+ mark 2 index
+ dup 1 get dup length 1 eq exch 0 get /All eq and
+ {
+ dup length array copy
+ dup 0 /Separation put
+ dup 1 /All put
+ { .setseparationspace }
+ }
+ { { .setdevicenspace } }
+ ifelse
+ stopped
+ { cleartomark setcolorspace stop }
+ { pop pop pop }
+ ifelse
+ }
+ bind
+
+ /cs_prepare_color { dup 1 get length //check_num_stack exec pop } bind
+
+ %
+ % If a DeviceN color space is not supported in native mode by
+ % the current process color model, Adobe implementations will always
+ % execute the tint transform procedure when setcolor is invoked.
+ % Ghostscript may have turned this transform into a sampled function,
+ % and even if this is not the case, will have sampled the transform
+ % when the color space is first set. Some applications depend on
+ % the Adobe behavior, so we implement it via the cs_complete_setcolor
+ % method.
+ %
+ /cs_complete_setcolor
+ {
+ .usealternate
+ {
+ pop currentcolor
+ currentcolorspace 3 get exec
+ currentcolorspace 2 get
+ //clear_setcolor_operands exec
+ }
+ { pop }
+ ifelse
+ }
+ bind
+
+ .dicttomark
+put
+
+end % .cspace_util
+.setglobal