126 lines · 3.5 KB · Text
RawDownload
%    Copyright (C) 1990, 1992, 1997, 1999 Aladdin Enterprises.  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: pcharstr.ps,v 1.4 2002/02/21 21:49:28 giles 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