% Copyright (C) 1990, 1992, 1997, 1999 Aladdin Enterprises. All rights reserved.% % This file is part of Aladdin Ghostscript.% % Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author% or distributor accepts any responsibility for the consequences of using it,% or for whether it serves any particular purpose or works at all, unless he% or she says so in writing. Refer to the Aladdin Ghostscript Free Public% License (the "License") for full details.% % Every copy of Aladdin Ghostscript must include a copy of the License,% normally in a plain ASCII text file named PUBLIC. The License grants you% the right to copy, modify and redistribute Aladdin Ghostscript, but only% under certain conditions described in the License. Among other things, the% License requires that the copyright notice and this notice be preserved on% all copies.% $Id: pcharstr.ps,v 1.1 2000/03/09 08:40:40 lpd Exp $% pcharstr.ps% Print the CharStrings and Subrs (if present) from a Type 1 font,% in either a PostScript-like or a C-compatible form,% depending on whether CSFormat is defined as /PS or /C.% Load the Type 1 utilities.(type1ops.ps) runlibfile% Define the printing procedures for PostScript-like output./pcs_ps_dict mark /, {( ) print} /charname {==only} /csbegin {} /beginchars {(%---------------- CharStrings\n) print} /charbegin {==only} /char1 {( ) print ==only} /endchars {} /beginsubrs {(%---------------- Subrs\n) print} /subrbegin {=only} /endsubrs {} /beginboxes {(%---------------- Encoding & metrics\n) print} /notdefbox {} /boxbegin {=only ( ) print} /boxend {(\n) print} /endboxes {(%----------------\n) print}.dicttomark readonly def% Define the printing procedures for C-like output./pcs_c_dict mark /, {(, ) print} /charname {(") print =only (") print} /csbegin {counttomark =only ,} /beginchars {(\nconstdata int CSCharData[] = {\n) print} /charbegin {pop} /char1 {=only ,} /endchars { (-1\n};\nconstdata char *CSCharNames[] = {\n) print CharStrings {pop charname ,} forall (0\n};\n) print } /beginsubrs {(\nconstdata int CSSubrs[] = {\n) print} /subrbegin {pop} /endsubrs {(-1\n};\n) print} /beginboxes {(\nconstdata type1_box CSboxes[] = {\n) print} /notdefbox {( {""},\n) print} /boxbegin {pop ( {) print} /boxend {(},) =} /endboxes {( {0}\n};\n) print}.dicttomark readonly def/printcs { dup type /stringtype eq { printcs1 (\n) print } { ( ) print == } ifelse } bind def/printcs1 { save exch lenIV 0 ge { 4330 exch dup length string .type1decrypt exch pop dup length lenIV sub lenIV exch getinterval } if 0 () /SubFileDecode filter mark exch charstack_read csbegin counttomark 1 sub -1 0 { index char1 } for cleartomark restore } bind def/printfont { pcs_ps_dict /CSFormat where { pop CSFormat /C eq { pop pcs_c_dict } if } if begin currentfont begin Private begin 10 dict begin % Print the CharStrings and Subrs beginchars CharStrings { exch charbegin printcs } forall endchars /Subrs where { pop % the dictionary beginsubrs 0 1 Subrs length 1 sub { dup subrbegin Subrs exch get printcs } for endsubrs } if % Print the bounding boxes gsave nulldevice FontMatrix matrix invertmatrix concat beginboxes 0 1 Encoding length 1 sub { dup Encoding exch get dup /.notdef eq { pop pop notdefbox } { 1 index boxbegin charname , ( ) dup 0 4 -1 roll put newpath 0 0 moveto false charpath pathbbox ({) print 4 -1 roll =only , 3 -1 roll =only , exch =only , =only (}) print boxend } ifelse } for endboxes grestore end end end end } bind def
% Copyright (C) 1990, 1992, 1997, 1999 Aladdin Enterprises. All rights reserved.
%
% This file is part of Aladdin Ghostscript.
%
% Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author
% or distributor accepts any responsibility for the consequences of using it,
% or for whether it serves any particular purpose or works at all, unless he
% or she says so in writing. Refer to the Aladdin Ghostscript Free Public
% License (the "License") for full details.
%
% Every copy of Aladdin Ghostscript must include a copy of the License,
% normally in a plain ASCII text file named PUBLIC. The License grants you
% the right to copy, modify and redistribute Aladdin Ghostscript, but only
% under certain conditions described in the License. Among other things, the
% License requires that the copyright notice and this notice be preserved on
% all copies.
% $Id: pcharstr.ps,v 1.1 2000/03/09 08:40:40 lpd Exp $
% pcharstr.ps
% Print the CharStrings and Subrs (if present) from a Type 1 font,
% in either a PostScript-like or a C-compatible form,
% depending on whether CSFormat is defined as /PS or /C.
% Load the Type 1 utilities.
(type1ops.ps) runlibfile
% Define the printing procedures for PostScript-like output.
/pcs_ps_dict mark
/, {( ) print}
/charname {==only}
/csbegin {}
/beginchars {(%---------------- CharStrings\n) print}
/charbegin {==only}
/char1 {( ) print ==only}
/endchars {}
/beginsubrs {(%---------------- Subrs\n) print}
/subrbegin {=only}
/endsubrs {}
/beginboxes {(%---------------- Encoding & metrics\n) print}
/notdefbox {}
/boxbegin {=only ( ) print}
/boxend {(\n) print}
/endboxes {(%----------------\n) print}
.dicttomark readonly def
% Define the printing procedures for C-like output.
/pcs_c_dict mark
/, {(, ) print}
/charname {(") print =only (") print}
/csbegin {counttomark =only ,}
/beginchars {(\nconstdata int CSCharData[] = {\n) print}
/charbegin {pop}
/char1 {=only ,}
/endchars {
(-1\n};\nconstdata char *CSCharNames[] = {\n) print
CharStrings {pop charname ,} forall (0\n};\n) print
}
/beginsubrs {(\nconstdata int CSSubrs[] = {\n) print}
/subrbegin {pop}
/endsubrs {(-1\n};\n) print}
/beginboxes {(\nconstdata type1_box CSboxes[] = {\n) print}
/notdefbox {( {""},\n) print}
/boxbegin {pop ( {) print}
/boxend {(},) =}
/endboxes {( {0}\n};\n) print}
.dicttomark readonly def
/printcs
{ dup type /stringtype eq
{ printcs1 (\n) print }
{ ( ) print == }
ifelse
} bind def
/printcs1
{ save exch
lenIV 0 ge {
4330 exch dup length string .type1decrypt exch pop
dup length lenIV sub lenIV exch getinterval
} if
0 () /SubFileDecode filter
mark exch charstack_read csbegin
counttomark 1 sub -1 0 { index char1 } for
cleartomark restore
} bind def
/printfont
{ pcs_ps_dict
/CSFormat where { pop CSFormat /C eq { pop pcs_c_dict } if } if
begin
currentfont begin Private begin 10 dict begin
% Print the CharStrings and Subrs
beginchars
CharStrings { exch charbegin printcs } forall
endchars
/Subrs where
{ pop % the dictionary
beginsubrs
0 1 Subrs length 1 sub
{ dup subrbegin
Subrs exch get printcs
} for
endsubrs
} if
% Print the bounding boxes
gsave nulldevice FontMatrix matrix invertmatrix concat
beginboxes
0 1 Encoding length 1 sub
{ dup Encoding exch get dup /.notdef eq
{ pop pop notdefbox
}
{ 1 index boxbegin charname ,
( ) dup 0 4 -1 roll put
newpath 0 0 moveto false charpath
pathbbox ({) print 4 -1 roll =only ,
3 -1 roll =only , exch =only , =only (}) print
boxend
}
ifelse
} for
endboxes
grestore
end end end end
} bind def