129 lines
4.5 KiB
PostScript
129 lines
4.5 KiB
PostScript
% 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
|