summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlgs/lib/rollconv.ps
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlgs/lib/rollconv.ps')
-rw-r--r--Master/tlpkg/tlgs/lib/rollconv.ps372
1 files changed, 372 insertions, 0 deletions
diff --git a/Master/tlpkg/tlgs/lib/rollconv.ps b/Master/tlpkg/tlgs/lib/rollconv.ps
new file mode 100644
index 00000000000..2c1243444be
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/rollconv.ps
@@ -0,0 +1,372 @@
+%!
+% Copyright (C) 1995, 1996 Aladdin Enterprises. All rights reserved.
+
+% $Id: rollconv.ps 6300 2005-12-28 19:56:24Z giles $
+% Utility program for converting Japanese fonts produced by Macromedia's
+% Rollup program to Type 0 fonts suitable for use with Ghostscript.
+%
+% Rollup produces the following files, where xxx is the font name:
+% xxx-H, xxx-SA, xxx-SB, xxx-SK, xxx-SR, xxx-UG
+% JIS83-1_COD
+% JIS83-1_CSA
+% The _COD and _CSA files are large files containing the actual
+% character outline data; they may theoretically be shared between
+% multiple fonts.
+%
+% rollconv.ps converts the above to files named:
+% fff.ps
+% fff.COD
+% fff.CSA
+% fff.CSR
+% where fff is a font file name provided by the user at conversion time.
+% The fff.ps file is the actual font file to be loaded with `run'
+% or placed in a Fontmap or a directory named by [GS_]FONTPATH;
+% the other two files must be present at runtime in a directory that is
+% on Ghostscript's search path (-I, GS_LIB, GS_LIB_DEFAULT).
+%
+% The normal way to invoke this program is
+% gsnd -- rollconv.ps xxx fff InDir CDir OutDir
+% (assuming that gsnd is an alias for gs -dNODISPLAY), where:
+% xxx is the font name;
+% fff is the base part of the output file name;
+% InDir is the name of the directory containing the xxx-* input files;
+% CDir is the name of the directory containing the _COD and _CSA
+% input files (typically the same as InDir);
+% OutDir is the name of the directory where the output should be written
+% (OutDir must already exist).
+% For example:
+% gsnd -- rollconv.ps HGGothicBPRO gothic /gs/k/rufonts/Gothic \
+% /gs/k/rufonts/Gothic /gs/k/gsfonts
+% To suppress output messages, you may insert -q:
+% gsnd -q -- rollconv.ps ...
+%
+% This program assumes that the files have been FTP'ed from a Macintosh and
+% therefore have 128 bytes of garbage at the beginning. If you have
+% transferred them in some manner that avoids this, change true to false
+% in the following line.
+/fromMac true def
+% The FontName of the converted font is xxx-83pv-RKSJ-H. In order to
+% use a converted font with Ghostscript, you may either load it explicitly
+% at run time, e.g.,
+% (gothic.ps) run
+% or you may add an entry to the Fontmap file, in the form:
+% /HGGothicBPRO-83pv-RKSJ-H (gothic.ps) ;
+% which will allow the font to be loaded automatically. After
+% loading the font, by either method, you can select it in the usual way:
+% /HGGothicBPRO-83pv-RKSJ-H findfont 36 scalefont setfont
+% or
+% /HGGothicBPRO-83pv-RKSJ-H 36 selectfont
+
+
+/macrfile % <filename> macrfile <file>
+ { (r) file
+ fromMac
+ { % Get rid of the initial Mac garbage (128 characters).
+ % The garbage at the end is unpredictable,
+ % so we'll just have to hope that it's all nulls.
+ dup =string 0 128 getinterval readstring pop pop
+ }
+ if
+ } bind def
+
+/convert % <FName> <OutBase> <InDir> <CDir> <OutDir> convert -
+ { /OutDir exch def
+ /CDir exch def
+ /InDir exch def
+ /OutBase exch def
+ /FName exch def
+
+ /inprefix InDir (/) concatstrings FName concatstrings (-) concatstrings def
+ /inh inprefix (H) concatstrings def
+
+ % Open the output file.
+
+/OutDot OutDir (/) concatstrings OutBase concatstrings (.) concatstrings def
+/outname OutDot (ps) concatstrings def
+QUIET not { (Writing ) print outname = flush } if
+/cdfromstr (\(pgfonts/) FName concatstrings (-JIS83-1_) concatstrings def
+/cdstr (\() OutBase concatstrings (.) concatstrings def
+/out outname (w) file def
+/buffer 65000 string def
+
+ % Copy the initial comments from the input file.
+
+inh macrfile
+ { dup =string readline pop
+ out 1 index writestring out (\n) writestring
+ (%%EndComments) eq { exit } if
+ }
+loop
+
+ % Write out our preamble.
+
+out (
+currentpacking true setpacking
+userdict /AltsysCFD3 known { (%END) .skipeof } if
+userdict /AltsysCFD3 25 dict dup begin
+/beint { 0 exch { exch 8 bitshift add } forall } bind def
+/rfile { findlibfile { exch pop } { (r) file } ifelse } bind def
+/str 500 string def
+/AltRO { } def
+/BuildCh % <font> <ccode> <bias> BuildCh -
+ { /bias exch def /ccode exch def begin % font
+ ccode dup 255 and dup bias lt exch 252 gt or { pop 127 } if
+ dup -8 bitshift -67 mul add % subfonts have 189 chars, not 256
+ bias sub buildch1
+ } bind def
+/BuildChr % <font> <ccode> BuildChr -
+ { /ccode exch def begin % font
+ ccode buildch1
+ } bind def
+/buildch1
+ { 6 mul PGOffsets add
+ FileNames 0 get rfile dup dup 4 -1 roll setfileposition
+ (xxxxxx) readstring pop exch closefile
+ dup 1 3 getinterval beint % COD offset
+ exch 4 2 getinterval beint % length
+ dup 0 eq
+ { pop pop currentdict end
+ 1000 0 0 0 1 1 0 -1000 500 1000 setcachedevice2
+ }
+ { dup str length gt { /str 1 index string store } if
+ FileNames 1 get rfile dup dup % offset length file file file
+ 5 -1 roll setfileposition % length file file
+ str 0 5 -1 roll getinterval readstring pop pop closefile
+ currentdict end ccode str 1183615869 internaldict /CCRun get exec
+ }
+ ifelse
+ } bind def
+/privates 100 dict def
+/BuildPr % <stdhw> <stdvw> BuildPr <dict>
+ { 2 copy 1000 mul add privates 1 index known
+ { privates exch get 3 1 roll pop pop
+ }
+ { 7 dict begin
+ /MinFeature{16 16}executeonly def
+ /BlueValues BlueValues def
+ /StdVW 3 -1 roll 1 array astore def
+ /StdHW 3 -1 roll 1 array astore def
+ /password 5839 def
+ /LanguageGroup 1 def
+ /Subrs Subrs def
+ currentdict readonly end
+ privates 2 index 2 index put exch pop
+ }
+ ifelse
+ } bind def
+/FullEncoding
+ systemdict { pop } forall
+ systemdict length 512 sub 1 255 { (x) dup 0 4 -1 roll put cvn } for
+768 packedarray def
+/BlueValues[-250 -250 1100 1100]readonly def
+/BuildChar{AltsysCFD3 begin 64 BuildCh end}bind def
+/CharStrings 1 dict
+dup /.notdef (1py8) noaccess put
+readonly def
+/CDevProc
+ { pop pop pop pop 0 exch -1000 exch 2 div currentfont /FontBBox get 3 get
+ } bind def
+/FontMatrix[0.001 0.0 0.0 0.001 0.0 0.0]readonly def
+/Subrs [
+(1p|=-D\R) noaccess
+(1pyUz) noaccess
+(1pyĞi) noaccess
+(1p) noaccess
+(1p|35rI) noaccess
+] noaccess def
+end put
+%END
+) writestring
+
+ % Locate and copy the definition of NotDefFont.
+
+out (
+FontDirectory /NotDefFont known { (%END) .skipeof } if
+) writestring
+ { dup =string readline pop
+ dup (/NotDefFont) eq { exit } if pop
+ }
+loop out exch writestring out (\n) writestring
+ { dup =string readline pop
+ (definefont) search { pop pop pop exit } if
+ out exch writestring out (\n) writestring
+ }
+loop out (definefont pop
+%END
+) writestring
+
+ % Copy the definitions of the subfonts, moving the
+ % CharStrings of the Roman supplement to an external file.
+ % Stack for pattern procedures: infile line
+
+/CSRName OutDot (CSR) concatstrings def
+/csr CSRName (w) file def
+QUIET not { (Writing ) print CSRName = flush } if
+
+/encoding 256 array def
+
+/patterns [
+ % Patterns specific to the Roman supplement, in which
+ % the outlines are in an eexec section.
+ { (/Encoding 256 array) {
+ pop out (/Encoding ) writestring
+ { dup buffer readline pop
+ dup (dup) search { exit } if pop pop
+ }
+ loop
+ { % Stack: infile dupline postdup (dup) predup
+ pop pop exch pop
+ % The top element of the stack is a string beginning with
+ % an index and value to put into the Encoding.
+ token pop exch token pop exch pop encoding 3 1 roll put
+ dup buffer readline pop
+ dup (dup) search not { pop exit } if
+ }
+ loop
+ out encoding cvx write== out ( cvlit ) writestring
+ out exch writestring out (\n) writestring
+ } }
+ { (/FontType 1 def) {
+ pop out (/FontType 4 def\n) writestring
+ out (/BuildChar{AltsysCFD3 begin BuildChr end}bind def\n) writestring
+ out (/FileNames[) writestring
+ 2 { out OutBase (.CSR) concatstrings write==only } repeat
+ out (]def\n) writestring
+ } }
+ { (currentfile eexec) {
+ pop out (systemdict begin\n) writestring
+ dup //.eexec_param_dict /eexecDecode filter
+ } }
+ { (dup/CharStrings ) {
+ % Copy the individual CharStrings to the CSR file,
+ % recording the lengths and offsets.
+ pop out (dup/CharStrings AltsysCFD3 /CharStrings get put\n) writestring
+ /offsets 256 dict def
+ { dup token pop % char name
+ dup dup type /nametype eq exch xcheck not and not { pop exit } if
+ 1 index token pop % length of binary data
+ 2 index token pop pop % skip RD
+ 2 index buffer 0 3 index getinterval readstring pop % charstring
+ offsets 3 index csr fileposition 16 bitshift 4 index add put
+ csr exch writestring pop pop
+ dup buffer readline pop pop % skip ND
+ }
+ loop
+ % We skipped the 'end'; skip the 'readonly put' as well.
+ 2 { dup token pop pop } repeat
+ out (dup/PGOffsets ) writestring
+ out csr fileposition write=only
+ out ( put\n) writestring
+ encoding
+ { offsets exch .knownget not { 0 } if
+ 2 { csr 0 write } repeat
+ 4 { dup -24 bitshift csr exch write 8 bitshift } repeat pop
+ }
+ forall
+ } }
+ { (/OtherSubrs[) {
+ pop
+ { dup buffer readline pop
+ (]noaccess def) search { pop pop pop exit } if pop
+ }
+ loop
+ } }
+ { (/Subrs 5 array) {
+ pop out (/Subrs AltsysCFD3 /Subrs get def\n) writestring
+ 6 { dup buffer readline pop pop } repeat
+ } }
+ { (currentfile closefile) {
+ pop out (end % systemdict\n) writestring
+ closefile
+ } }
+ % Patterns for other supplements.
+ { (pgfonts/) {
+ { cdfromstr search not { exit } if
+ out exch writestring pop out cdstr writestring
+ }
+ loop out exch writestring out (\n) writestring
+ } }
+ { (/BuildChar{AltsysCFD3 begin 64 BuildCh end}bind def) {
+ pop out (\t/BuildChar AltsysCFD3 /BuildChar get def\n) writestring
+ } }
+ { (/CDevProc{pop pop pop pop 0 exch -1000 exch 2 div ) {
+ pop out (\t/CDevProc AltsysCFD3 /CDevProc get def\n) writestring
+ } }
+ { (/CharStrings 1 dict dup begin) {
+ pop out (\t/CharStrings AltsysCFD3 /CharStrings get def\n) writestring
+ 2 { dup buffer readline pop pop } repeat
+ } }
+ { (/FontMatrix[0.001 0.0 0.0 0.001 0.0 0.0]def) {
+ pop out (\t/FontMatrix AltsysCFD3 /FontMatrix get def\n) writestring
+ } }
+ { (/Private 14 dict dup begin) {
+ pop out (\t/Private) writestring
+ { dup buffer readline pop
+ (end def) search { pop pop pop exit } if
+ (/Std) search
+ { pop pop dup length 3 sub 3 exch getinterval
+ (]) search pop out ( ) writestring out exch writestring pop
+ }
+ if pop
+ }
+ loop out ( AltsysCFD3 begin BuildPr end def\n) writestring
+ } }
+ { (UniqueID) { pop } }
+ { () {
+ out exch writestring out (\n) writestring
+ } }
+] def
+[ (SR) (SA) (SK) (SB) (UG) ]
+ { 0 1 255 { encoding exch /.notdef put } for
+ inprefix exch concatstrings macrfile
+ { dup buffer readline not { pop exit } if
+ /patterns load
+ { 2 copy 0 get search { pop pop pop 1 get exec exit } if pop pop }
+ forall
+ }
+ loop closefile
+ }
+forall
+csr closefile
+
+ % Copy the definition of the root font.
+
+dup buffer readstring pop out exch writestring closefile
+out (
+setpacking
+) writestring
+out closefile
+
+ % Remove the Mac garbage from the outline files.
+
+[ (COD) (CSA) ]
+ { CDir (/) concatstrings (JIS83-1_) concatstrings
+ 1 index concatstrings macrfile
+ exch OutDot exch concatstrings
+ QUIET not { (Writing ) print dup = flush } if
+ (w) file
+ % Stack: infile outfile
+ { 1 index buffer readstring exch
+ % Stack: infile outfile noteof substring
+ 2 index exch writestring not { exit } if
+ }
+ loop closefile closefile
+ }
+forall
+
+ } bind def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments
+ { counttomark 5 eq
+ { convert
+ QUIET not { (Done.\n) print flush } if
+ }
+ { cleartomark
+ (Usage: gsnd -- rollconv.ps FName OutBase InDir CDir OutDir\n) print
+ ( e.g.: gsnd -- rollconv.ps HGMinchoE mincho HGfonts/Mincho HGfonts/Mincho HGfonts/gs\n) print flush
+ mark
+ }
+ ifelse
+ }
+if pop