#!/usr/local/bin/bash
# $Id: VTPSfont,v 1.3 1999/08/10 03:55:06 taoka Exp $

CREATOR="VTPSfont version 1.0 by Keiichi Sakai"
DATE="`date`"
#FONTDIR="/usr/share/work/Graphic/gs5.10/dl-kanji/fonts"
FONTDIR=$1
NORMAL=$2
VF_NAME=$3
DST=$4
FONTMAP=$5

UniqueID=$6
StrokeWidth=15

Roman="Roman"
Hiragana="Hiragana"
Katakana="Katakana"
Hankaku="Hankaku"

PT2S()
{
	local	PaintType="$1"

	if [ "${PaintType}" = 1 ];then
		echo -n "Hollow"
	elif [ "${PaintType}" = 3 ];then
		echo -n "Shadow"
	fi
}

RootFontNormal="[1 0 0 1 0 0]"
RootFontOblique="[1 0 0.25 1 0 0]"
RootFontLefty="[1 0 -0.25 1 0 0]"

RFM2S()
{
	local	RootFontMatrix="$1"

	if [ "${RootFontMatrix}" = "${RootFontOblique}" ];then
		echo -n "Oblique"
	elif [ "${RootFontMatrix}" = "${RootFontLefty}" ];then
		echo -n "Lefty"
	fi
}

WM2S()
{
	local	WMode=$1

	if [ "${WMode}" = "0" ];then
		echo -n "H"
	else
		echo -n "V"
	fi
}

JISFONTDIR=${FONTDIR}/Type0
RKSJFONTDIR=${FONTDIR}/Type0-RKSJ
#RomanFONTDIR=${FONTDIR}/Type3.${Roman}
#HiraganaFONTDIR=${FONTDIR}/Type3.${Hiragana}
#KatakanaFONTDIR=${FONTDIR}/Type3.${Katakana}
#HankakuFONTDIR=${FONTDIR}/Type3.${Hankaku}

mkdir -p ${JISFONTDIR}-H ${JISFONTDIR}-V
#mkdir -p ${RKSJFONTDIR}-H ${RKSJFONTDIR}-V
#mkdir -p ${RomanFONTDIR} ${HiraganaFONTDIR} ${KatakanaFONTDIR} ${HankakuFONTDIR}

RomanEncoding="[
/.notdef 31{dup}repeat
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven 
/eight/nine/colon/semicolon/less/equal/greater/question
/at/A/B/C/D/E/F/G
/H/I/J/K/L/M/N/O
/P/Q/R/S/T/U/V/W
/X/Y/Z/bracketleft/yen/bracketright/asciicircum/underscore
/quoteleft/a/b/c/d/e/f/g
/h/i/j/k/l/m/n/o
/p/q/r/s/t/u/v/w
/x/y/z/braceleft/bar/braceright/overline/.notdef 
128{dup}repeat
]"

# from 0x20(/space) to 0x7F(/.notdef)
RomanCharProcs="96 dict dup begin
8481 8490 8521 8564 8560 8563 8565 8519 8522 8523 8566 8540 8484 8509 8485 8511
9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 8487 8488 8547 8545 8548 8489
8567 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039
9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 8526 8559 8527 8496 8498
8518 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071
9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 8528 8515 8529 8497 8481
127 -1 32{Encoding exch get[3 2 roll//BuildGlyph/exec load]cvx def}for end"

SuppKEncodingArray="[
/space/jperiod/jbracketleft/jbracketright
/jcomma/periodcentered/wokana/asmallkana
/ismallkana/usmallkana/esmallkana/osmallkana
/yasmallkana/yusmallkana/yosmallkana/tsusmallkana
/jprolonged/akana/ikana/ukana/ekana/okana/kakana/kikana
/kukana/kekana/kokana/sakana/shikana/sukana/sekana/sokana
/takana/chikana/tsukana/tekana/tokana/nakana/nikana/nukana
/nekana/nokana/hakana/hikana/fukana/hekana/hokana/makana
/mikana/mukana/mekana/mokana/yakana/yukana/yokana/rakana
/rikana/rukana/rekana/rokana/wakana/nkana/jvoiced/jsemivoiced
]"

# from 0x00(/space) to 0x3F(/jsemivoiced)
SuppKCharProcs="64 dict dup begin
8481 8483 8534 8535 8482 8486 9586 9505 9507 9509 9511 9513 9571 9573 9575 9539
8508 9506 9508 9510 9512 9514 9515 9517 9519 9521 9523 9525 9527 9529 9531 9533
9535 9537 9540 9542 9544 9546 9547 9548 9549 9550 9551 9554 9557 9560 9563 9566
9567 9568 9569 9570 9572 9574 9576 9577 9578 9579 9580 9581 9583 9587 8491 8492
63 -1 0{Encoding exch get[3 2 roll//BuildGlyph /exec load]cvx def}for end"

#
# Hiragana
#

HiraganaEncoding="[
% 16#00
/.notdef 31{dup}repeat
% 16#20
/space/jperiod/jbracketleft/jbracketright
/jcomma/periodcentered/wogana/asmallgana
/ismallgana/usmallgana/esmallgana/osmallgana
/yasmallgana/yusmallgana/yosmallgana/tsusmallgana
/jprolonged/agana/igana/ugana/egana/ogana/kagana/kigana
/kugana/kegana/kogana/sagana/shigana/sugana/segana/sogana
% 16#40
/tagana/chigana/tsugana/tegana/togana/nagana/nigana/nugana
/negana/nogana/hagana/higana/fugana/hegana/hogana/magana
/migana/mugana/megana/mogana/yagana/yugana/yogana/ragana
/rigana/rugana/regana/rogana/wagana/ngana/jvoiced/jsemivoiced
% 16#60
/wigana/yegana/wasmallgana/.notdef/.notdef/.notdef/gagana/gigana
/gugana/gegana/gogana/zagana/jigana/zugana/zegana/zogana
/dagana/digana/dugana/degana/dogana/bagana/pagana/bigana
/pigana/bugana/pugana/begana/pegana/bogana/pogana/.notdef
% 16#80
128{dup}repeat
]"

HiraganaCharProcs="96 dict dup begin
8481 8483 8534 8535 8482 8486 9330 9249 9251 9253 9255 9257 9315 9317 9319 9283
8508 9250 9252 9254 9256 9258 9259 9261 9263 9265 9267 9269 9271 9273 9275 9277
9279 9281 9284 9286 9288 9290 9291 9292 9293 9294 9295 9298 9301 9304 9307 9310
9311 9312 9313 9314 9316 9318 9320 9321 9322 9323 9324 9325 9327 9331 8491 8492
9328 9329 9326 8481 8481 8481 9260 9262 9264 9266 9268 9270 9272 9274 9276 9278
9280 9282 9285 9287 9289 9296 9297 9299 9300 9302 9303 9305 9306 9308 9309 8481
127 -1 32{Encoding exch get[3 2 roll//BuildGlyph/exec load]cvx def}for end"

#
# Katakana
#

KatakanaEncoding="[
% 16#00
/.notdef 31{dup}repeat
% 16#20
/space/jperiod/jbracketleft/jbracketright
/jcomma/periodcentered/wokana/asmallkana
/ismallkana/usmallkana/esmallkana/osmallkana
/yasmallkana/yusmallkana/yosmallkana/tsusmallkana
/jprolonged/akana/ikana/ukana/ekana/okana/kakana/kikana
/kukana/kekana/kokana/sakana/shikana/sukana/sekana/sokana
% 16#40
/takana/chikana/tsukana/tekana/tokana/nakana/nikana/nukana
/nekana/nokana/hakana/hikana/fukana/hekana/hokana/makana
/mikana/mukana/mekana/mokana/yakana/yukana/yokana/rakana
/rikana/rukana/rekana/rokana/wakana/nkana/jvoiced/jsemivoiced
% 16#60
/wikana/yekana/wasmallkana/kasmallkana/kesmallkana/vukana/gakana/gikana
/gukana/gekana/gokana/zakana/jikana/zukana/zekana/zokana
/dakana/dikana/dukana/dekana/dokana/bakana/pakana/bikana
/pikana/bukana/pukana/bekana/pekana/bokana/pokana/.notdef
% 16#80
128{dup}repeat
]"

KatakanaCharProcs="96 dict dup begin
8481 8483 8534 8535 8482 8486 9586 9505 9507 9509 9511 9513 9571 9573 9575 9539
8508 9506 9508 9510 9512 9514 9515 9517 9519 9521 9523 9525 9527 9529 9531 9533
9535 9537 9540 9542 9544 9546 9547 9548 9549 9550 9551 9554 9557 9560 9563 9566
9567 9568 9569 9570 9572 9574 9576 9577 9578 9579 9580 9581 9583 9587 8491 8492
9584 9585 9582 9589 9590 9588 9516 9518 9520 9522 9524 9526 9528 9530 9532 9534
9536 9538 9541 9543 9545 9552 9553 9555 9556 9561 9562 9564 9565 9558 9559 8481
127 -1 32{Encoding exch get[3 2 roll//BuildGlyph/exec load]cvx def}for end"

#
# Hankaku
#
HankakuEncoding="[
% 16#00
/.notdef 31{dup}repeat
% 16#20
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven 
/eight/nine/colon/semicolon/less/equal/greater/question
% 16#40
/at
/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z
/bracketleft/yen/bracketright/asciicircum/underscore
% 16#60
/quoteleft
/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
/braceleft/bar/braceright/overline/.notdef 
% 16#80
/space/jperiod/jbracketleft/jbracketright
/jcomma/periodcentered/wogana/asmallgana
/ismallgana/usmallgana/esmallgana/osmallgana
/yasmallgana/yusmallgana/yosmallgana/tsusmallgana
/jprolonged/agana/igana/ugana/egana/ogana/kagana/kigana
/kugana/kegana/kogana/sagana/shigana/sugana/segana/sogana
%16#A0
/space/jperiod/jbracketleft/jbracketright
/jcomma/periodcentered/wokana/asmallkana
/ismallkana/usmallkana/esmallkana/osmallkana
/yasmallkana/yusmallkana/yosmallkana/tsusmallkana
/jprolonged/akana/ikana/ukana/ekana/okana/kakana/kikana
/kukana/kekana/kokana/sakana/shikana/sukana/sekana/sokana
% 16#C0
/takana/chikana/tsukana/tekana/tokana/nakana/nikana/nukana
/nekana/nokana/hakana/hikana/fukana/hekana/hokana/makana
/mikana/mukana/mekana/mokana/yakana/yukana/yokana/rakana
/rikana/rukana/rekana/rokana/wakana/nkana/jvoiced/jsemivoiced
% 16#E0
/tagana/chigana/tsugana/tegana/togana/nagana/nigana/nugana
/negana/nogana/hagana/higana/fugana/hegana/hogana/magana
/migana/mugana/megana/mogana/yagana/yugana/yogana/ragana
/rigana/rugana/regana/rogana/wagana/ngana/jvoiced/jsemivoiced
]"

HankakuCharProcs="224 dict dup begin
8481 8490 8521 8564 8560 8563 8565 8519 8522 8523 8566 8540 8484 8509 8485 8511
9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 8487 8488 8547 8545 8548 8489
8567 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039
9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 8526 8559 8527 8496 8498
8518 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071
9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 8528 8515 8529 8497 8481
8481 8483 8534 8535 8482 8486 9330 9249 9251 9253 9255 9257 9315 9317 9319 9283
8508 9250 9252 9254 9256 9258 9259 9261 9263 9265 9267 9269 9271 9273 9275 9277
8481 8483 8534 8535 8482 8486 9586 9505 9507 9509 9511 9513 9571 9573 9575 9539
8508 9506 9508 9510 9512 9514 9515 9517 9519 9521 9523 9525 9527 9529 9531 9533
9535 9537 9540 9542 9544 9546 9547 9548 9549 9550 9551 9554 9557 9560 9563 9566
9567 9568 9569 9570 9572 9574 9576 9577 9578 9579 9580 9581 9583 9587 8491 8492
9279 9281 9284 9286 9288 9290 9291 9292 9293 9294 9295 9298 9301 9304 9307 9310
9311 9312 9313 9314 9316 9318 9320 9321 9322 9323 9324 9325 9327 9331 8491 8492
255 -1 32{Encoding exch get[3 2 roll//BuildGlyph/exec load]cvx def}for end"

MetricsDictJIS1ku="\
55 dict dup begin % 1ku
%                 
/c36/c37/c39/c68/c69/c6A/c70/c71/c72
9{747.434 def}repeat
%                               
/c22/c23/c29/c2F/c30/c33/c35/c48/c49/c4A/c4B/c4C/c4D/c4E/c4F/c50
%                             
/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c6B/c6C/c6D/c78
31{504.013 def}repeat
%                             
/c24/c25/c26/c27/c28/c2A/c2B/c2C/c2D/c2E/c3E/c42/c43/c46/c47
15{353.665 def}repeat
end readonly"

MetricsDictJIS4ku="\
18 dict dup begin % 4ku
%               
/c26/c2F/c30/c31/c32/c39/c3A/c6A
8{962.216 def}repeat
%                   
/c21/c23/c25/c27/c29/c43/c63/c65/c67/c6E
10{747.434 def}repeat
end readonly"

MetricsDictJIS5ku="\
46 dict dup begin % 5ku
%                                 
/c22/c24/c26/c2A/c2F/c30/c31/c32/c35/c36/c3D/c3E/c3F/c40/c41/c42/c44
%                                 
/c45/c46/c47/c48/c49/c4A/c4E/c55/c56/c57/c5F/c61/c64/c69/c6A/c6F/c72
34{962.216 def}repeat
%                       
/c21/c23/c25/c27/c29/c43/c63/c65/c67/c6E/c75/c76
12{747.434 def}repeat
end readonly"

Metrics2DictJIS1ku="\
41 dict dup begin % 1ku
%         
/c29/c2A/c3D/c44/c45
5{-962.216 def}repeat
%           
/c33/c34/c35/c36/c37/c39
6{-747.434 def}repeat
%                             
/c22/c23/c24/c25/c26/c3E/c42/c43/c46/c47/c48/c49/c4A/c4B/c4C
%                             
/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B
30{-481.108 def}repeat
end readonly"

Metrics2DictJIS4ku="\
10 dict dup begin % 4ku
%                   
/c21/c23/c25/c27/c29/c43/c63/c65/c67/c6E
10{-747.434 def}repeat
end readonly"

Metrics2DictJIS5ku="\
12 dict dup begin % 5ku
%                       
/c21/c23/c25/c27/c29/c43/c63/c65/c67/c6E/c75/c76
12{-747.434 def}repeat
end readonly"

BaseFontMatrix="[0.001 0 0 0.001 0 0]"

#
# core implementation of BuildGlyph
#
BuildGlyph()
{
local VF_NAME="$1"
local PaintType="$2"
local WMode="$3"
local Epilogue="$4"
local Prologue="$5"

# dict character_name character_code BuildGlyph
echo -n "\
/BuildGlyph{"
echo "${Epilogue}"
echo "rootfont/WMode .knownget not{${WMode}}if
currentdict/Metrics .knownget dup{exch 4 index .knownget not{962.216}if}{962.216}ifelse
currentdict/Metrics2 .knownget dup{exch 6 index .knownget not{-962.216}if}{-962.216}ifelse
2 index 0 0 -96.222 962.216 865.991 0 7 index 481.108 865.991 setcachedevice2
exch 4 index 0 ne and{4 index 1(${VF_NAME})kfVFlib
{flattenpath pathbbox}stopped{770.216}{exch pop add exch pop}ifelse
newpath 865.991 2 mul sub sub 2 div 0 exch translate}{pop}ifelse
exch 2 index 0 eq and{2 index 0(${VF_NAME})kfVFlib
{flattenpath pathbbox}stopped{962.216}{pop exch pop add}ifelse
newpath sub 2 div 0 translate}{pop}ifelse
(${VF_NAME})
rootfont/PaintType .knownget not{$PaintType}if
dup 0 eq{pop kfVFlib eofill}{rootfont/StrokeWidth .knownget not{$StrokeWidth}if setlinewidth
3 eq{3 copy kfVFlib gsave
-32 -96 moveto 0 1152 rlineto 1152 0 rlineto 0 -1152 rlineto eoclip newpath
64 -48 translate kfVFlib eofill grestore}{kfVFlib}ifelse stroke}ifelse"
echo "${Prologue}"
echo "}bind readonly def"
}

#
# Hankaku Header
#
HankakuHeader()
{
	local PSF_NAME=$1
	local PaintType=$2
	local WMode=$3

echo "\
%!PS-AdobeFont-1.0: ${PSF_NAME}
%%CreationDate: ${DATE}
%%Creator: ${CREATOR}
%%EndComments
/${PSF_NAME} 12 dict dup begin
/FontType 3 def
/WMode $WMode def
/PaintType $PaintType def
/StrokeWidth $StrokeWidth def
/FontBBox{0 0 0 0}readonly def
/FontMatrix[0.0005 0 0 0.0005 0 0]def"
}

ku="21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F\
 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F\
 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F\
 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F\
 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F\
 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E"

JISBaseFontEncodingArray="[/.notdef 32{dup}repeat
/c21/c22/c23/c24/c25/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30
/c31/c32/c33/c34/c35/c36/c37/c38/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40
/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B/c4C/c4D/c4E/c4F/c50
/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E/c5F/c60
/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70
/c71/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/.notdef 128 copy]"

MakeJIS()
{
	local BASE_NAME=$1
	local VF_NAME=$2
	local PaintType=$3
	local WMode=0
	local PSF_NAME=${BASE_NAME}`PT2S ${PaintType}`-`WM2S ${WMode}`

echo "\
%!PS-AdobeFont-1.0: ${PSF_NAME}
%%CreationDate: ${DATE}
%%Creator: ${CREATOR}
%%EndComments
/${PSF_NAME} 12 dict dup begin
/FontType 0 def
/FontMatrix${RootFontNormal}readonly def
/FontBBox{0 0 0 0}readonly def
/Encoding[33{0}repeat 94{dup 1 add}repeat 0 128 copy]readonly def
/WMode $WMode def
/PaintType $PaintType def
/StrokeWidth $StrokeWidth def
/FMapType 2 def
/Private 9 dict dup begin
/FontType 3 def
/WMode $WMode def
/PaintType $PaintType def
/StrokeWidth $StrokeWidth def
/FontBBox{0 0 0 0}readonly def
/FontMatrix${BaseFontMatrix}readonly def
/Encoding${JISBaseFontEncodingArray}readonly def"
BuildGlyph ${VF_NAME} ${PaintType} ${WMode} "add 3 -1 roll begin" "end pop"
echo "/CharProcs 95 dict dup begin
33 1 126{dup//Encoding exch get[3 2 roll//BuildGlyph/exec load]cvx def}for
/.notdef{pop 33 33//BuildGlyph//exec}def
end def
/PrefEnc//Encoding end def def
/FDepVector[
/Ugly findfont"
for k in ${ku} ; do
	echo -n "/${BASE_NAME}.r${k}"
done
echo "
93 -1 0{//Private 12 dict copy begin
dup 0 eq{/Metrics $MetricsDictJIS1ku def/Metrics2 $Metrics2DictJIS1ku def}if
dup 3 eq{/Metrics $MetricsDictJIS4ku def/Metrics2 $Metrics2DictJIS4ku def}if
dup 4 eq{/Metrics $MetricsDictJIS5ku def/Metrics2 $Metrics2DictJIS5ku def}if
/BuildGlyph[2 index 33 add 256 mul/CharProcs load 2 /index load /get load /exec load]cvx def
/UniqueID exch ${UniqueID} add def
currentdict end definefont 94 1 roll
}bind for
]readonly def
end definefont pop
"
UniqueID=$[UniqueID + 94]
}

SJSubEncodingArray="[/.notdef 63{dup}repeat
/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B/c4C/c4D/c4E/c4F
/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E/c5F
/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F
/c70/c71/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/.notdef
/c80/c81/c82/c83/c84/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F
/c90/c91/c92/c93/c94/c95/c96/c97/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F
/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA/cAB/cAC/cAD/cAE/cAF
/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD/cBE/cBF
/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF
/cD0/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF
/cE0/cE1/cE2/cE3/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF
/cF0/cF1/cF2/cF3/cF4/cF5/cF6/cF7/cF8/cF9/cFA/cFB/cFC/.notdef/.notdef/.notdef]"

MakeRKSJ()
{
	local BASE_NAME=$1
	local VF_NAME=$2
	local PaintType=$3
	local WMode=0
	local PSF_NAME=${BASE_NAME}`PT2S ${PaintType}`-RKSJ-`WM2S ${WMode}`

echo "\
%!PS-AdobeFont-1.0: ${PSF_NAME}
%%CreationDate: ${DATE}
%%Creator: ${CREATOR}
%%EndComments
/${PSF_NAME} 10 dict dup begin
/FontType 0 def
/FontBBox{0 0 0 0}readonly def
/FontMatrix${RootFontNormal}readonly def
/Encoding[0 1 2 3 4]def
/WMode $WMode def
/PaintType $PaintType def
/StrokeWidth $StrokeWidth def
/FMapType 6 def
/SubsVector<00811F4010>def
/Private 12 dict dup begin
/FontType 3 def
/WMode $WMode def
/PaintType $PaintType def
/StrokeWidth $StrokeWidth def
/FontBBox{0 0 0 0}readonly def
/FontMatrix${BaseFontMatrix}readonly def
/Encoding${SJSubEncodingArray}readonly def"
BuildGlyph ${VF_NAME} ${PaintType} ${WMode} "add 3 -1 roll begin" "end pop"
echo "\
/CharProcs 189 dict dup begin
64 1 126{dup//Encoding exch get[3 2 roll 31 sub//BuildGlyph/exec load]cvx def}for
/.notdef{pop 33 33//BuildGlyph//exec}def
128 1 158{dup//Encoding exch get[3 2 roll 32 sub//BuildGlyph/exec load]cvx def}for
159 1 252{dup//Encoding exch get[3 2 roll 130 add//BuildGlyph/exec load]cvx def}for
end def
end def
/FDepVector[
/${BASE_NAME}.${Roman} findfont
/${BASE_NAME}.SuppA 12 dict dup begin
/FontType 0 def
/FontBBox{0 0 0 0}readonly def
/FontMatrix[1 0 0 1 0 0]readonly def
/Encoding[0 1 30{}for]readonly def
/WMode $WMode def
/PaintType $PaintType def
/StrokeWidth $StrokeWidth def
/FMapType 2 def
/FDepVector["
for k in 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F \
      90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F ; do
	echo -n "/${BASE_NAME}.sr${k}"
done
echo " 30 -1 0{
//Private 12 dict copy begin
/BuildGlyph[2 index 512 mul 16#2100 add CharProcs 2/index load/get load/exec load]cvx def
/UniqueID exch ${UniqueID} add def
currentdict end definefont 31 1 roll
}for
/PrefEnc 1 index/Encoding get def
]readonly def
end definefont
/${BASE_NAME}.SuppK//Private 13 dict copy dup begin
/FontMatrix[0.0005 0 0 0.0005 0 0]def
/Encoding $SuppKEncodingArray readonly def
/CharProcs ${SuppKCharProcs} readonly def
/BuildGlyph{0//CharProcs 2//index//get//exec}def
/UniqueID $[UniqueID + 31] def
end definefont
/${BASE_NAME}.SuppB 2 index 12 dict copy dup begin
/Encoding[0 1 15{}for]readonly def
/FDepVector["
for k in E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF ; do
	echo -n "/${BASE_NAME}.sr${k}"
done
echo " 15 -1 0{
//Private 12 dict copy begin
/BuildGlyph[2 index 512 mul 16#5F00 add CharProcs 2/index load/get load/exec load]cvx def
/UniqueID exch $[UniqueID + 32] add def
currentdict end definefont 16 1 roll
}for
/PrefEnc 1 index/Encoding get def
]readonly def
end definefont
3 index
]readonly def
end definefont pop"

UniqueID=$[UniqueID + 48]
}

MakeRoman()
{
	local BASE_NAME=$1
	local VF_NAME=$2
	local PaintType=$3
	local WMode=0
	local PSF_NAME=${BASE_NAME}`PT2S ${PaintType}`.${Roman}

	HankakuHeader ${PSF_NAME} ${PaintType} ${WMode}
	echo "/Encoding${RomanEncoding}readonly def"
	BuildGlyph ${VF_NAME} ${PaintType} ${WMode} "" "end pop"
	echo "/CharProcs ${RomanCharProcs} readonly def"
	echo "/BuildGlyph{exch begin//CharProcs 1 index get exec}bind def"
	echo "/UniqueID $[UniqueID] def"
	echo "end definefont pop"

	UniqueID=$[UniqueID + 1]
}

MakeHiragana()
{
	local BASE_NAME=$1
	local VF_NAME=$2
	local PaintType=$3
	local WMode=0
	local PSF_NAME=${BASE_NAME}`PT2S ${PaintType}`.${Hiragana}

	HankakuHeader ${PSF_NAME} ${PaintType} ${WMode}
	echo "/Encoding${HiraganaEncoding}readonly def"
	BuildGlyph ${VF_NAME} ${PaintType} ${WMode} "" "end pop"
	echo "/CharProcs ${HiraganaCharProcs} readonly def"
	echo "/BuildGlyph{exch begin//CharProcs 1 index get exec}bind def"
	echo "/UniqueID $[UniqueID] def"
	echo "end definefont pop"

	UniqueID=$[UniqueID + 1]
}

MakeKatakana()
{
	local BASE_NAME=$1
	local VF_NAME=$2
	local PaintType=$3
	local WMode=0
	local PSF_NAME=${BASE_NAME}`PT2S ${PaintType}`.${Katakana}

	HankakuHeader ${PSF_NAME} ${PaintType} ${WMode}
	echo "/Encoding${KatakanaEncoding}readonly def"
	BuildGlyph ${VF_NAME} ${PaintType} ${WMode} "" "end pop"
	echo "/CharProcs ${KatakanaCharProcs} readonly def"
	echo "/BuildGlyph{exch begin//CharProcs 1 index get exec}bind def"
	echo "/UniqueID $[UniqueID] def"
	echo "end definefont pop"

	UniqueID=$[UniqueID + 1]
}

MakeHankaku()
{
	local BASE_NAME=$1
	local VF_NAME=$2
	local PaintType=$3
	local WMode=0
	local PSF_NAME=${BASE_NAME}`PT2S ${PaintType}`.${Hankaku}

	HankakuHeader ${PSF_NAME} ${PaintType} ${WMode}
	echo "/Encoding${HankakuEncoding}readonly def"
	BuildGlyph ${VF_NAME} ${PaintType} ${WMode} "" "end pop"
	echo "/CharProcs ${HankakuCharProcs} readonly def"
	echo "/BuildGlyph{exch begin//CharProcs 1 index get exec}bind def"
	echo "/UniqueID $[UniqueID] def"
	echo "end definefont pop"

	UniqueID=$[UniqueID + 1]
}

CopyJIS()
{
	local BASE_NAME="$1"
	local FontMatrix="$2"
	local PaintType="$3"
	local WMode="$4"
	local PSF_NAME=${BASE_NAME}`RFM2S "${FontMatrix}"``PT2S ${PaintType}`-`WM2S ${WMode}`

echo "%!PS-AdobeFont-1.0: ${PSF_NAME}
%%CreationDate: ${DATE}
%%Creator: ${CREATOR}
%%EndComments
/${PSF_NAME}/${BASE_NAME}-H findfont 12 dict copy dup begin
/FontMatrix${FontMatrix}def
/WMode ${WMode} def
/PaintType ${PaintType} def
/StrokeWidth ${StrokeWidth} def
end definefont pop"
}

CopyRKSJ()
{
	local BASE_NAME=$1
	local FontMatrix=$2
	local PaintType=$3
	local WMode=$4
	local PSF_NAME=${BASE_NAME}`RFM2S "${FontMatrix}"``PT2S ${PaintType}`-RKSJ-`WM2S ${WMode}`

echo "%!PS-AdobeFont-1.0: ${PSF_NAME}
%%CreationDate: ${DATE}
%%Creator: ${CREATOR}
%%EndComments
/${PSF_NAME}/${BASE_NAME}-RKSJ-H findfont 12 dict copy dup begin
/FontMatrix${FontMatrix}def
/WMode ${WMode} def
/PaintType ${PaintType} def
/StrokeWidth ${StrokeWidth} def
end definefont pop"
}

# BuildFont ps_fontname vf_fontname destination_file
BuildFont()
{
	local NORMAL=$1
	local VF_NAME=$2
	local DST=$3
	local	p

for p in 0 1 3
do
	local	str=`PT2S ${p}`

	MakeJIS       $NORMAL $VF_NAME $p > ${JISFONTDIR}-H/${DST}n${p}
	echo "/${NORMAL}${str}-H(${JISFONTDIR}-H/${DST}n${p});" >> ${FONTMAP}
	echo "/${NORMAL}${str}-EUC-H/${NORMAL}${str}-H ;" >> ${FONTMAP}

#	MakeRKSJ           $NORMAL $VF_NAME $p > ${RKSJFONTDIR}-H/${DST}n${p}
#	 echo "/${NORMAL}${str}-RKSJ-H(${RKSJFONTDIR}-H/${DST}n${p});"
#
#	 MakeRoman            $NORMAL $VF_NAME $p > ${RomanFONTDIR}/${DST}n${p}
#	 echo "/${NORMAL}${str}.${Roman}(${RomanFONTDIR}/${DST}n${p});"
#
#	 MakeHiragana            $NORMAL $VF_NAME $p > ${HiraganaFONTDIR}/${DST}n${p}
#	 echo "/${NORMAL}${str}.${Hiragana}(${HiraganaFONTDIR}/${DST}n${p});"
#
#	 MakeKatakana            $NORMAL $VF_NAME $p > ${KatakanaFONTDIR}/${DST}n${p}
#	 echo "/${NORMAL}${str}.${Katakana}(${KatakanaFONTDIR}/${DST}n${p});"
#
#	 MakeHankaku            $NORMAL $VF_NAME $p > ${HankakuFONTDIR}/${DST}n${p}
#	 echo "/${NORMAL}${str}.${Hankaku}(${HankakuFONTDIR}/${DST}n${p});"

	CopyJIS $NORMAL "$RootFontNormal"  $p "1" > ${JISFONTDIR}-V/${DST}n${p}
	echo         "/${NORMAL}${str}-V(${JISFONTDIR}-V/${DST}n${p});" >> ${FONTMAP}
	echo         "/${NORMAL}${str}-EUC-V/${NORMAL}${str}-V ;" >> ${FONTMAP}

	CopyJIS $NORMAL "$RootFontOblique" $p "0" > ${JISFONTDIR}-H/${DST}o${p}
	echo  "/${NORMAL}Oblique${str}-H(${JISFONTDIR}-H/${DST}o${p});" >> ${FONTMAP}
	echo  "/${NORMAL}Oblique${str}-EUC-H/${NORMAL}Oblique${str}-H ;" >> ${FONTMAP}

	CopyJIS $NORMAL "$RootFontLefty"   $p "0" > ${JISFONTDIR}-H/${DST}l${p}
	echo    "/${NORMAL}Lefty${str}-H(${JISFONTDIR}-H/${DST}l${p});" >> ${FONTMAP}
	echo    "/${NORMAL}Lefty${str}-EUC-H/${NORMAL}Lefty${str}-H ;" >> ${FONTMAP}

#	 CopyRKSJ $NORMAL "$RootFontNormal" $p "1" > ${RKSJFONTDIR}-V/${DST}n${p}
#	 echo    "/${NORMAL}${str}-RKSJ-V(${RKSJFONTDIR}-V/${DST}n${p});"
#
#	 CopyRKSJ $NORMAL "$RootFontOblique" $p "0" >    ${RKSJFONTDIR}-H/${DST}o${p}
#	 echo "/${NORMAL}Oblique${str}-RKSJ-H(${RKSJFONTDIR}-H/${DST}o${p});"
#
#	 CopyRKSJ $NORMAL "$RootFontLefty"   $p "0" >  ${RKSJFONTDIR}-H/${DST}l${p}
#	 echo "/${NORMAL}Lefty${str}-RKSJ-H(${RKSJFONTDIR}-H/${DST}l${p});"
done
}

BuildFont $NORMAL $VF_NAME $DST
echo $UniqueID
