123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- % Copyright (C) 2000 artofcode LLC. 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_cidfm.ps,v 1.7 2004/10/25 15:11:37 igor Exp $
- % Redefine CIDFont category with cidfmap .
- languagelevel 2 .setlanguagelevel
- 4 dict begin
- /CategoryName /CIDFont def
- /MapFileName (cidfmap) def
- /IsMyRecord % <raw_record> -> <raw_record> bool
- { % Only for client's needs.
- dup type /nametype eq
- } bind def
- /RecordVirtualMethods 3 dict begin
- /MakeInstance % <Name> <record> MakeInstance <Name> <Instance> <size>
- { % We know that currentdict is the category.
- /Substitute get FindResource % /Name <<CIDFont>>
- dup length dict copy % /Name <<CIDFont>>
- 1 index ResourceStatus pop exch pop % /Name <<CIDFont>> size
- } bind def
- /GetFilePath % <scratch> <Name> <record> GetFilePath <filepath>
- { % We know that currentdict is the category.
- exch pop
- /Substitute get exch ResourceFileName
- } bind def
- /GetSize % <Name> <record> GetSize <size>
- { % We know that currentdict is the category.
- /Substitute get ResourceStatus {
- exch pop exch pop
- } {
- /undefinedresource signalerror
- } ifelse
- } bind def
- /GetCSI % <record> GetCSI null
- % <record> GetCSI dict
- { % We know that currentdict is the category.
- RESMPDEBUG { (cidfm GetCSI beg ) = } if
- /Substitute get % /Name
- GetCIDSystemInfoFromMap
- RESMPDEBUG { (cidfm GetCSI end ) print dup = } if
- } bind def
- /IsActive % <record> IsActive <bool>
- { pop true
- } bind def
- currentdict end def
- /VerifyMap % <raw_map> VerifyMap -
- { % Checks for vicious substitution cycles.
- dup length dict copy % <<map>>
- dup length dict % <<map>> <<temp>>
- { % Choose a random record :
- true 2 index { % <<map>> <<temp>> true /Name /Subs
- 3 2 roll pop false exit % <<map>> <<temp>> /Name /Subs false
- } forall
- { exit % <<map>> <<temp>>
- } if % <<map>> <<temp>> /Name /Subs
- % Move the substitution chain to <<temp>>, checking for a cycle :
- 3 index 2 index undef % <<map>> <<temp>> /Name /Subs
- exch 2 index exch 0 put % <<map>> <<temp>> /Subs
- { //IsMyRecord exec not {
- % Not a substitution, the chain terminates.
- pop exit % <<map>> <<temp>>
- } if % <<map>> <<temp>> /Subs
- 1 index 1 index known {
- (Vicious substitution cycle in map file with the entry ) print =string cvs print ( .) =
- /VerifyMap cvx /undefinedresource signalerror
- } if % <<map>> <<temp>> /Subs
- 1 index 1 index 0 put
- dup 3 index exch .knownget not { % <<map>> <<temp>> /Subs
- % No more substitutions, the chain terminates.
- pop exit % <<map>> <<temp>>
- } if % <<map>> <<temp>> /Subs /Subs1
- exch % <<map>> <<temp>> /Subs1 /Subs
- 3 index exch undef % <<map>> <<temp>> /Subs1
- } loop
- % Not cycled, now purge the <<temp>> :
- { % Choose a random record :
- true 1 index { % <<map>> <<temp>> true /Name /Subs
- 3 2 roll pop false exit % <<map>> <<temp>> /Name /Subs false
- } forall
- { exit % <<map>> <<temp>>
- } if % <<map>> <<temp>> /Name /Subs
- % Remove it :
- pop 1 index exch undef % <<map>> <<temp>>
- } loop
- } loop
- pop pop %
- } bind def
- /PreprocessRecord % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
- { //IsMyRecord exec {
- 1 dict begin
- /Substitute exch def
- /RecordVirtualMethods //RecordVirtualMethods def
- currentdict end
- true
- } {
- false
- } ifelse
- } bind def
- currentdict end
- /MappedCategoryRedefiner /ProcSet findresource /Redefine get exec
- .setlanguagelevel
|