% Copyright (C) 1990, 1992, 1997, 1999 Aladdin Enterprises. All rights reserved. % % This file is part of AFPL Ghostscript. % % AFPL 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 Free Public License (the % "License") for full details. % % Every copy of AFPL 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 AFPL 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.2 2000/09/19 18:29:11 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