File: gs_cidfm.ps

package info (click to toggle)
ghostscript 8.71~dfsg2-9+squeeze1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 79,896 kB
  • ctags: 80,654
  • sloc: ansic: 501,432; sh: 25,689; python: 4,853; cpp: 3,633; perl: 3,597; tcl: 1,480; makefile: 1,187; lisp: 407; asm: 284; xml: 263; awk: 66; csh: 17; yacc: 15
file content (129 lines) | stat: -rw-r--r-- 4,641 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
%    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 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