diff options
Diffstat (limited to 'Master/xemtex/gslib/rollconv.ps')
-rw-r--r-- | Master/xemtex/gslib/rollconv.ps | 385 |
1 files changed, 385 insertions, 0 deletions
diff --git a/Master/xemtex/gslib/rollconv.ps b/Master/xemtex/gslib/rollconv.ps new file mode 100644 index 00000000000..fbf5cacea69 --- /dev/null +++ b/Master/xemtex/gslib/rollconv.ps @@ -0,0 +1,385 @@ +%! +% Copyright (C) 1995, 1996 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: rollconv.ps,v 1.1.8.1 2003/04/12 14:02:39 giles Exp $ +% 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 55665 /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 |