summaryrefslogtreecommitdiff
path: root/Build/source/texk/gsftopk/render.ps
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-17 21:41:51 +0000
committerKarl Berry <karl@freefriends.org>2006-01-17 21:41:51 +0000
commit487ca4806cc046076293cf6cc5fbba0db282bac7 (patch)
tree847b412ab5158dd7bdd7ed7e5a4cc3fbca94be32 /Build/source/texk/gsftopk/render.ps
parenta3d3111bfe26b8e5f5bc6049dfb2a4ca2edc7881 (diff)
texk 1
git-svn-id: svn://tug.org/texlive/trunk@1485 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/gsftopk/render.ps')
-rw-r--r--Build/source/texk/gsftopk/render.ps346
1 files changed, 346 insertions, 0 deletions
diff --git a/Build/source/texk/gsftopk/render.ps b/Build/source/texk/gsftopk/render.ps
new file mode 100644
index 00000000000..2c067451b97
--- /dev/null
+++ b/Build/source/texk/gsftopk/render.ps
@@ -0,0 +1,346 @@
+% render.ps - write font bitmaps and metric information to standard output.
+% Version 1.18.
+
+% ========================================================================
+%
+% Copyright (c) 1993-1998 Paul Vojta
+%
+% Permission is hereby granted, free of charge, to any person obtaining a copy
+% of this software and associated documentation files (the "Software"), to
+% deal in the Software without restriction, including without limitation the
+% rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+% sell copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in
+% all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+% PAUL VOJTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+% IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+% CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+%
+% ========================================================================
+
+%%%
+% Usage: gs -DNODISPLAY -q -- render.ps fontname dlstring specinfo dpi
+% Then, it will read standard input to get:
+% pointsize
+% charset
+
+% Example:
+% % gs -DNODISPLAY -q -- render.ps Helvetica "(phvr.gsf) run" \
+% > ".5 ExtendFont" 300
+% GS> 10
+% GS> 97 98 99
+
+/TeXDict currentdict def % needed by dotlessj.pro
+
+%%
+%
+% Standard file definitions
+
+/.stdin where { pop } { /.stdin (%stdin) (r) file def } ifelse
+
+/bad-stdout false def
+/.stdout where
+ { pop }
+ { { /.stdout (%stdout) (w) file def } stopped
+ { /bad-stdout true def }
+ if
+ } ifelse
+
+/bad-stderr false def
+/.stderr where
+ { pop }
+ { { /.stderr (%stderr) (w) file def } stopped
+ { /bad-stderr true def }
+ if
+ } ifelse
+
+%%
+%
+% Define some routines first
+
+% (string) fatal -
+% Print string to stderr and quit.
+
+/fatal
+ bad-stderr
+ {{
+ (\nrender.ps: ) exch concatstrings
+ print flush 1 .quit
+ }}
+ {{
+ (\nrender.ps: ) exch concatstrings
+ .stderr exch writestring .stderr flushfile 1 .quit
+ }}
+ ifelse
+bind def
+
+% (string) brun -
+% Load a font in .pfb format.
+
+/brun
+ {
+ (r) file false /PFBDecode filter cvx exec
+ }
+bind def
+
+% (string) ttload font
+% Load a TrueType font (and leave it on the stack).
+
+/ttload
+ {
+ FontOnStack
+ {
+ (Cannot load more than one TrueType font!\n) fatal
+ } if
+ (r) file .loadttfont
+ /FontOnStack true def
+ }
+bind def
+
+/FontOnStack false def
+
+% (exec) getbbox -
+% Get bounding box of the executable object and save it in char-urx,
+% char-ury, etc.
+
+/getbbox
+ {
+ gsave
+ nulldevice
+ erasepage
+ newpath
+ exec
+ pathbbox % returns llx lly urx ury
+ /char-ury exch ceiling cvi def
+ /char-urx exch ceiling cvi def
+ /char-lly exch floor cvi def
+ /char-llx exch floor cvi def
+ grestore
+ }
+bind def
+
+% - drawfontbbox -
+% Draw the font's bbox.
+
+/drawfontbbox
+ {
+ currentfont /FontBBox get
+ dup dup 0 get exch 1 get currentfont /FontMatrix get transform moveto
+ dup dup 0 get exch 3 get currentfont /FontMatrix get transform lineto
+ dup dup 2 get exch 1 get currentfont /FontMatrix get transform lineto
+ dup 2 get exch 3 get currentfont /FontMatrix get transform lineto
+ }
+bind def
+
+% (exec) mkbboxdev -
+% Get bounding box of the executable object and make a device a few
+% pixels larger on each side. If pathbbox fails for the object,
+% then use the font's bbox.
+
+/mkbboxdev
+ {
+ getbbox
+
+ char-llx char-urx sub round 0 eq char-lly char-ury sub round 0 eq or
+ {
+ {drawfontbbox} getbbox
+ }
+ if
+
+ matrix
+ char-urx char-llx sub 4 add % width
+ dup /width exch def
+ char-ury char-lly sub 4 add % height
+ dup /height exch def
+ <ff 00>
+ makeimagedevice setdevice
+ 2 char-llx sub 2 char-lly sub translate
+ }
+bind def
+
+%%
+%
+% These may be called by the "specinfo" string.
+
+/usefontbbox false def
+
+% These do things to a transformation array; called by entries in psfonts.map.
+%
+/ObliqueSlant {dup sin exch cos div neg} bind def
+/SlantFont {font-size mul add} def
+/ExtendFont {3 -1 roll mul exch} def
+/ReEncodeFont {/Encoding exch def} def
+
+% Define writeppmfile, if it's not provided, or if the symbol .stdout is not
+% available.
+
+/our-writeppmfile
+
+ bad-stdout
+ systemdict /writeppmfile known not
+ or
+ {{
+ (P4\n) print
+ width =string cvs print
+ ( ) print
+ height =string cvs print
+ (\n) print
+
+ width 7 add 8 div cvi string
+ 0 1 height 1 sub
+ {
+ currentdevice exch 2 index copyscanlines
+ print
+ }
+ for
+ pop % discard string
+ }}
+ {{
+ .stdout currentdevice writeppmfile
+ }}
+ ifelse
+def
+
+
+%%
+%
+% Main program begins now. Just interpret it.
+
+% Get arguments.
+
+shellarguments not
+ {
+ (You must provide arguments to the shell!\n) fatal
+ }
+if
+
+/dpi exch cvr def
+/specinfo exch def
+/dlstring exch def
+/fontname exch def
+
+% Return the gs version number to the calling program.
+
+(V ) print revision =
+
+% Open the font.
+
+dlstring () ne
+ {
+ dlstring cvx exec
+ }
+if
+
+FontOnStack not
+ {
+ Fontmap fontname cvn known % Or: fontname cvn /Font resourcestatus?
+ {
+ fontname cvlit findfont
+ }
+ {
+ FontDirectory fontname cvn known
+ {
+ fontname cvlit findfont
+ }
+ {
+ revision 341 lt
+ {
+ /defaultfontname fontname cvlit def
+ }
+ if
+
+ { fontname cvlit findfont } stopped
+ {
+ (font ) fontname concatstrings
+ ( is not defined.\n) concatstrings
+ fatal
+ }
+ if
+ }
+ ifelse
+ }
+ ifelse
+ }
+if
+
+% Get arguments from stdin. Just leave the character list on the stack.
+
+/font-size
+ .stdin 20 string readline pop cvr % get pointsize
+ 72.27 div dpi mul % let's work in (TeX) points
+def
+[ .stdin 1024 string readline pop cvx exec ] % character list
+
+% Define the font, and make it current.
+
+ % Get the font.
+ exch
+ % Copy over the font dictionary to make it writable;
+ % this makes ReEncodeFont easier, and is needed for dotless j processing.
+ dup length 1 add dict begin
+ {1 index /FID ne {def}{pop pop} ifelse} forall
+ % Now do the transformations specified in psfonts.map.
+ [ font-size 0 specinfo cvx exec 0 exch font-size 0 0 ]
+ % End the current dictionary, and make it a font.
+ /TargetFont currentdict end definefont
+ % Apply the tranformation matrix and make the font current.
+exch makefont dup /TargetFont exch def setfont
+
+% If the font's bounding box is zero, then do not use it.
+
+usefontbbox
+ { currentfont /FontBBox get
+ true exch {0 eq and} forall
+ {/usefontbbox false def}if
+ }
+if
+
+% If we are to use the font's bounding box, then get it and transform it.
+
+usefontbbox
+ {
+ {drawfontbbox} mkbboxdev
+ }
+if
+
+% Begin loop over characters.
+
+ {
+ /charno exch def
+ /charstring 1 string dup 0 charno put def
+ /charwidth charstring stringwidth pop def
+
+ % Get the character's bounding box. This also makes the device.
+ usefontbbox not
+ {
+ { 0 0 moveto charstring true charpath } mkbboxdev
+ }
+ if
+
+ % Print the metric info.
+ (#^ ) print
+ charno =string cvs print
+ ( ) print
+ char-llx =string cvs print
+ ( ) print
+ char-lly =string cvs print
+ ( ) print
+ char-urx =string cvs print
+ ( ) print
+ char-ury =string cvs print
+ ( ) print
+ charwidth =string cvs print
+ (\n) print
+
+ % Now write the bitmap.
+ erasepage 0 0 moveto
+ charstring show
+ our-writeppmfile
+ }
+forall