diff options
Diffstat (limited to 'Master/xemtex/gslib/pcharstr.ps')
-rw-r--r-- | Master/xemtex/gslib/pcharstr.ps | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/Master/xemtex/gslib/pcharstr.ps b/Master/xemtex/gslib/pcharstr.ps new file mode 100644 index 00000000000..06d6a29ca52 --- /dev/null +++ b/Master/xemtex/gslib/pcharstr.ps @@ -0,0 +1,127 @@ +% Copyright (C) 1990, 1992, 1997, 1999 Aladdin Enterprises. All rights reserved. +% +% This program is free software; you can redistribute it and/or modify it +% under the terms of the GNU General Public License as published by the +% Free Software Foundation; either version 2 of the License, or (at your +% option) any later version. +% +% This program is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +% Public License for more details. +% +% You should have received a copy of the GNU General Public License along +% with this program; if not, write to the Free Software Foundation, Inc., +% 59 Temple Place, Suite 330, Boston, MA, 02111-1307. + +% $Id: pcharstr.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 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 |