Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
%    Copyright (C) 2000 artofcode LLC.  All rights reserved.
2
% 
3
% This software is provided AS-IS with no warranty, either express or
4
% implied.
5
% 
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.
9
% 
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.
15
 
16
% $Id: gs_cidfm.ps,v 1.7 2004/10/25 15:11:37 igor Exp $
17
% Redefine CIDFont category with cidfmap .
18
 
19
languagelevel 2 .setlanguagelevel
20
 
21
4 dict begin
22
/CategoryName /CIDFont def
23
 
24
/MapFileName (cidfmap) def
25
 
26
/IsMyRecord      % <raw_record> -> <raw_record> bool
27
{ % Only for client's needs.
28
  dup type /nametype eq
29
} bind def
30
 
31
/RecordVirtualMethods 3 dict begin
32
 
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
38
  } bind def
39
 
40
  /GetFilePath  % <scratch> <Name> <record> GetFilePath <filepath>
41
  { % We know that currentdict is the category.
42
    exch pop
43
    /Substitute get exch ResourceFileName
44
  } bind def
45
 
46
  /GetSize   % <Name> <record> GetSize <size>
47
  { % We know that currentdict is the category.
48
    /Substitute get ResourceStatus {
49
      exch pop exch pop
50
    } {
51
      /undefinedresource signalerror
52
    } ifelse
53
  } bind def
54
 
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
62
  } bind def
63
 
64
  /IsActive % <record> IsActive <bool>
65
  { pop true
66
  } bind def
67
 
68
currentdict end def
69
 
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
77
    } forall
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
91
      1 index 1 index 0 put
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
98
    } loop
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
103
      } forall
104
      { exit                            % <<map>> <<temp>>
105
      } if                              % <<map>> <<temp>> /Name /Subs
106
      % Remove it :
107
      pop 1 index exch undef            % <<map>> <<temp>>
108
    } loop
109
  } loop
110
  pop pop                               %
111
} bind def
112
 
113
/PreprocessRecord  % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
114
{ //IsMyRecord exec {
115
    1 dict begin
116
    /Substitute exch def
117
    /RecordVirtualMethods //RecordVirtualMethods def
118
    currentdict end
119
    true
120
  } {
121
    false
122
  } ifelse
123
} bind def
124
 
125
currentdict end 
126
 
127
/MappedCategoryRedefiner /ProcSet findresource /Redefine get exec
128
 
129
.setlanguagelevel