summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlgs/lib/pcharstr.ps
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlgs/lib/pcharstr.ps')
-rw-r--r--Master/tlpkg/tlgs/lib/pcharstr.ps126
1 files changed, 126 insertions, 0 deletions
diff --git a/Master/tlpkg/tlgs/lib/pcharstr.ps b/Master/tlpkg/tlgs/lib/pcharstr.ps
new file mode 100644
index 00000000000..e85e23748c7
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pcharstr.ps
@@ -0,0 +1,126 @@
+% 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 6300 2005-12-28 19:56:24Z giles $
+% 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