summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlgs/Resource/Init/gs_icc.ps
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlgs/Resource/Init/gs_icc.ps')
-rw-r--r--Master/tlpkg/tlgs/Resource/Init/gs_icc.ps109
1 files changed, 109 insertions, 0 deletions
diff --git a/Master/tlpkg/tlgs/Resource/Init/gs_icc.ps b/Master/tlpkg/tlgs/Resource/Init/gs_icc.ps
new file mode 100644
index 00000000000..8f42ea69731
--- /dev/null
+++ b/Master/tlpkg/tlgs/Resource/Init/gs_icc.ps
@@ -0,0 +1,109 @@
+% Copyright (C) 2001-2012 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.
+%
+% Refer to licensing information at http://www.artifex.com or contact
+% Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, San Rafael,
+% CA 94903, U.S.A., +1(415)492-9861, for further information.
+%
+
+% We need LanguageLevel 2 or higher in order to have setuserparams and
+% << >> dictionaries
+languagelevel dup 2 .max .setlanguagelevel
+
+% 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.
+
+/cs-sig-dict <<
+ (XYZ ) 3
+ (Lab ) 3
+ (Luv ) 3
+ (YCbr) 3
+ (Yxy ) 3
+ (RGB ) 3
+ (GRAY) 1
+ (HSV ) 3
+ (HLS ) 3
+ (CMYK) 4
+ (CMY ) 3
+>> readonly def
+
+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
+ % an array of strings. This string can be used directly as a
+ % source for ReusableStreamDecode filter.
+ %
+ % stack: --file-- (%%BeginICCProfile: ...)
+ 1 index 0 (%%EndICCProfile) /SubFileDecode filter
+ [ { counttomark 1 add index
+ 64000 string readhexstring
+ not { exit } if
+ } loop
+ ] exch closefile
+
+ % make a seekable -file- out of the string array
+ mark /AsyncRead //true .dicttomark /ReusableStreamDecode filter
+ % stack: --file-- (%%BeginICCProfile: ...) --icc_subfile--
+
+ dup 16 setfileposition
+ dup (1234) readstring pop
+ 1 index 0 setfileposition
+
+ //cs-sig-dict exch .knownget {
+ 3 dict begin
+ /Alternate {0 /DeviceGray 0 /DeviceRGB /DeviceCMYK } 2 index get def
+ /N exch def
+ /DataSource exch def
+ [/ICCBased currentdict]
+ end
+ { setcolorspace } stopped {
+ pop
+ QUIET not { ( *** Unable to load ICC profile from PostScript DSC comments ***) = flush } if
+ } if
+ } {
+ pop
+ } ifelse
+ } {
+ pop % Not interested in this DSC comment
+ } ifelse
+} bind def
+
+currentdict /cs-sig-dict undef
+
+% 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
+.setlanguagelevel