123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- % 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_icc.ps 8962 2008-08-11 14:16:18Z ken $
- % ICCBased color space method dictionaries.
- % This assumes gs_ciecs2.ps has already been processed.
-
- .currentglobal true .setglobal
-
- % gs_res.ps uses these entries in colorspacedict
- % to populate the ColorSpaceFamily resource, so we need
- % to add the supported spaces.
- %
- systemdict /colorspacedict get begin
- /ICCBased [] def
- end
-
- NOPSICC { (%END PSICC) .skipeof } if
- % Now set up ICC profile loading for PostScript %%BeginICCProfile sections.
-
- systemdict begin
- /.ProcessICCcomment { % file comment -- file comment
- dup
- (%%BeginICCProfile) anchorsearch {
- pop pop
- DEBUG { (.ProcessICCcomment found %%BeginICCProfile) print flush } if
-
- % load an ICC profile defined as comments (hex encoded).
- % Ends with %%End at the start of a line. Read the data into
- % a bytestring to allow seeking. This string can be used as a
- % seekable ReusableStreamDecode filter source by the ICC logic.
- %
- % Since .bigstring needs to know the size, we first read an array of
- % strings each 64000 max length.
- %
- % stack: --file-- (%%BeginICCProfile: ...)
- 1 index 0 (%%EndICCProfile) /SubFileDecode filter
- [ { counttomark 1 add index
- 64000 string readhexstring
- not { exit } if
- } loop
- ] exch closefile
- 0 1 index { length add } forall
- .bigstring
- exch 0 exch {
- % stack: --file-- (%%BeginICCProfile: ...) --bytestring-- cur_index --string--
- 2 copy length add % calculate next string start point
- 3 1 roll 3 index 3 1 roll putinterval
- } forall
- pop % discard length of bytestring
- % make a seekable -file- out of the bytestring
- mark /AsyncRead true .dicttomark /ReusableStreamDecode filter
- % stack: --file-- (%%BeginICCProfile: ...) --icc_subfile--
- /DeviceCMYK setcolorspace
- << /DataSource 3 -1 roll
- /N 4 % Try CMYK first
- >> { .seticcspace } stopped {
- /DeviceRGB setcolorspace
- dup /N 3 put { .seticcspace } stopped {
- /DeviceGray setcolorspace
- dup /N 1 put { .seticcspace } stopped { % last choice
- QUIET not { ( *** Unable to load ICC profile from PostScript DSC comments ***) = flush } if
- pop
- } if
- } if
- } if
- } {
- pop % Not interested in this DSC comment
- } ifelse
- } bind def
-
- % Merge ProcessICCcomment with existing handler
- /.ProcessICCcomment load /exec load
- currentuserparams /ProcessDSCComment get
- dup null eq {pop {pop pop}} if /exec load
- 4 array astore cvx readonly
- << /ProcessDSCComment 3 -1 roll >> setuserparams
-
- end % systemdict
- %END PSICC
- .setglobal
|