Vous êtes sur la page 1sur 3

% % % % % % % % % % % % % %

Copyright (C) 2000 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. 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 8954 2008-08-08 04:22:38Z ray $ % 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 c vs 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> <re cord> <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

Vous aimerez peut-être aussi