1
% Copyright (C) 2000 Artifex Software, Inc. All rights reserved.
3
% This software is provided AS-IS with no warranty, either express or
6
% This software is distributed under license and may not be copied,
7
% modified or distributed except as expressly authorized under the terms
8
% of the license contained in the file LICENSE in this distribution.
10
% For more information about licensing, please refer to
11
% http://www.ghostscript.com/licensing/. For information on
12
% commercial licensing, go to http://www.artifex.com/licensing/ or
13
% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
16
% $Id: gs_cidfm.ps 8022 2007-06-05 22:23:38Z giles $
17
% Redefine CIDFont category with cidfmap .
19
languagelevel 2 .setlanguagelevel
22
/CategoryName /CIDFont def
24
/MapFileName (cidfmap) def
26
/IsMyRecord % <raw_record> -> <raw_record> bool
27
{ % Only for client's needs.
31
/RecordVirtualMethods 3 dict begin
33
/MakeInstance % <Name> <record> MakeInstance <Name> <Instance> <size>
34
{ % We know that currentdict is the category.
35
/Substitute get FindResource % /Name <<CIDFont>>
36
dup length dict copy % /Name <<CIDFont>>
37
1 index ResourceStatus pop exch pop % /Name <<CIDFont>> size
40
/GetFilePath % <scratch> <Name> <record> GetFilePath <filepath>
41
{ % We know that currentdict is the category.
43
/Substitute get exch ResourceFileName
46
/GetSize % <Name> <record> GetSize <size>
47
{ % We know that currentdict is the category.
48
/Substitute get ResourceStatus {
51
/undefinedresource signalerror
55
/GetCSI % <record> GetCSI null
56
% <record> GetCSI dict
57
{ % We know that currentdict is the category.
58
RESMPDEBUG { (cidfm GetCSI beg ) = } if
59
/Substitute get % /Name
60
GetCIDSystemInfoFromMap
61
RESMPDEBUG { (cidfm GetCSI end ) print dup = } if
64
/IsActive % <record> IsActive <bool>
70
/VerifyMap % <raw_map> VerifyMap -
71
{ % Checks for vicious substitution cycles.
72
dup length dict copy % <<map>>
73
dup length dict % <<map>> <<temp>>
74
{ % Choose a random record :
75
true 2 index { % <<map>> <<temp>> true /Name /Subs
76
3 2 roll pop false exit % <<map>> <<temp>> /Name /Subs false
78
{ exit % <<map>> <<temp>>
79
} if % <<map>> <<temp>> /Name /Subs
80
% Move the substitution chain to <<temp>>, checking for a cycle :
81
3 index 2 index undef % <<map>> <<temp>> /Name /Subs
82
exch 2 index exch 0 put % <<map>> <<temp>> /Subs
83
{ //IsMyRecord exec not {
84
% Not a substitution, the chain terminates.
85
pop exit % <<map>> <<temp>>
86
} if % <<map>> <<temp>> /Subs
87
1 index 1 index known {
88
(Vicious substitution cycle in map file with the entry ) print =string cvs print ( .) =
89
/VerifyMap cvx /undefinedresource signalerror
90
} if % <<map>> <<temp>> /Subs
92
dup 3 index exch .knownget not { % <<map>> <<temp>> /Subs
93
% No more substitutions, the chain terminates.
94
pop exit % <<map>> <<temp>>
95
} if % <<map>> <<temp>> /Subs /Subs1
96
exch % <<map>> <<temp>> /Subs1 /Subs
97
3 index exch undef % <<map>> <<temp>> /Subs1
99
% Not cycled, now purge the <<temp>> :
100
{ % Choose a random record :
101
true 1 index { % <<map>> <<temp>> true /Name /Subs
102
3 2 roll pop false exit % <<map>> <<temp>> /Name /Subs false
104
{ exit % <<map>> <<temp>>
105
} if % <<map>> <<temp>> /Name /Subs
107
pop 1 index exch undef % <<map>> <<temp>>
113
/PreprocessRecord % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
114
{ //IsMyRecord exec {
117
/RecordVirtualMethods //RecordVirtualMethods def
127
/MappedCategoryRedefiner /ProcSet findresource /Redefine get exec