#!/bin/sh
#
# fixeucfont
#
# 10/21/97 katayama@rd.nacsis.ac.jp
# 10/27/97 katayama@rd.nacsis.ac.jp
# 06/11/98 katayama@rd.nacsis.ac.jp
#

CMPFILE="/tmp/fixcmpfont.$$"
EUCFILE="/tmp/fixeucfont.$$"
trap "rm -f $CMPFILE $EUCFILE; exit 1" 0 1 2 15

cat > $CMPFILE <<'EOF'
%
% A brute force definition of the operator `/compositefont'
% adapted to CID-Keyed EUC Kanji fonts.
%
% 10/21/97 katayama@rd.nacsis.ac.jp
% 06/11/98 katayama@rd.nacsis.ac.jp
%
/compositefont {	% ASCIIFontName EUCFontName  compositefont  font'
    userdict /fixeucfont_dict known not {
	userdict begin
	    /fixeucfont_dict 2 dict begin
		/UpperByteEncoding [
		    16#00 1 16#20 { pop 0 } for
		    16#21 1 16#28 { 16#20 sub } for
		    16#29 1 16#2F { pop 0 } for
		    16#30 1 16#74 { 16#27 sub } for
		    16#75 1 16#FF { pop 0 } for
		] def
	        /LowerByteEncoding [
		    16#00 1 16#A0 { pop /.notdef } for
		    16#A1 1 16#FE { 16#80 sub 16 2 string cvrs
				    (cXX) dup 1 4 -1 roll
				    putinterval cvn } for
		    /.notdef
		] def
		currentdict
	    end def
	end
    } if
    findfont dup /FontType get 0 eq {
	12 dict begin
	    %
	    % 7+8 bit EUC font
	    %
	    12 dict begin
		/EUCFont exch def
		/FontInfo (7+8 bit EUC font) readonly def
		/PaintType 0 def
		/FontType 0 def
		/FontMatrix matrix def
		% /FontName
		/Encoding fixeucfont_dict /UpperByteEncoding get def
		/FMapType 2 def
		EUCFont /WMode known
		{ EUCFont /WMode get /WMode exch def }
		{ /WMode 0 def } ifelse
		/FDepVector [
		    EUCFont /FDepVector get 0 get
		    [ 16#21 1 16#28 {} for 16#30 1 16#74 {} for ]
		    {
			13 dict begin
			    /EUCFont EUCFont def
			    /UpperByte exch 16#80 add def	
			    % /FontName
			    /FontInfo (EUC lower byte font) readonly def
			    /PaintType 0 def
			    /FontType 3 def
			    /FontMatrix matrix def
			    /FontBBox {0 0 0 0} def
			    /Encoding
				fixeucfont_dict /LowerByteEncoding get def
			    % /UniqueID
			    % /WMode
			    /BuildChar {
				gsave
				exch dup /EUCFont get setfont
				/UpperByte get
				2 string
				dup 0 4 -1 roll put
				dup 1 4 -1 roll put
				dup stringwidth setcharwidth
				0 0 moveto show
				grestore
			    } bind def
			    currentdict
			end
			/lowerbytefont exch definefont
		    } forall
		] def
		currentdict
	    end
	    /eucfont exch definefont
	    exch
	    findfont 1 copyfont dup begin
		/FontMatrix FontMatrix [1 0 0 1 0 0.05] matrix concatmatrix def
	    end
	    /asciifont exch definefont
	    exch
	    /FDepVector [ 4 2 roll ] def
	    /FontType 0 def
	    /WMode 0 def
	    /FMapType 4 def
	    /FontMatrix matrix def
	    /Encoding [0 1] def
	    /FontBBox {0 0 0 0} def
	    currentdict
	end
    }{
	pop findfont 0 copyfont
    } ifelse
} def	
EOF

cat > $EUCFILE <<'EOF'
%
% A brute force definition of the operator `/eucfont'
% adapted to CID-Keyed EUC Kanji fonts.
%
% 10/21/97 katayama@rd.nacsis.ac.jp
% 06/11/98 katayama@rd.nacsis.ac.jp
%
/eucfont {
    userdict /fixeucfont_dict known not {
	userdict begin
	    /fixeucfont_dict 2 dict begin
		/UpperByteEncoding [
		    16#00 1 16#20 { pop 0 } for
		    16#21 1 16#28 { 16#20 sub } for
		    16#29 1 16#2F { pop 0 } for
		    16#30 1 16#74 { 16#27 sub } for
		    16#75 1 16#FF { pop 0 } for
		] def
	        /LowerByteEncoding [
		    16#00 1 16#A0 { pop /.notdef } for
		    16#A1 1 16#FE { 16#80 sub 16 2 string cvrs
				    (cXX) dup 1 4 -1 roll
				    putinterval cvn } for
		    /.notdef
		] def
		currentdict
	    end def
	end
    } if
    12 dict begin
	dup type /nametype eq { findfont } if
	dup /WMode known {
	    dup /WMode get /WMode exch def
	    WMode 1 eq {
		[0.0 1.0 -1.0 0.0 0.0 0.30] makefont
	    } if
	} if
	%
	% 7+8 bit EUC font
	%
	12 dict begin
	    /EUCFont exch def
	    /FontInfo (7+8 bit EUC font) readonly def
	    /PaintType 0 def
	    /FontType 0 def
	    /FontMatrix matrix def
	    % /FontName
	    /Encoding fixeucfont_dict /UpperByteEncoding get def
	    /FMapType 2 def
	    EUCFont /WMode known
	    { EUCFont /WMode get /WMode exch def }
	    { /WMode 0 def } ifelse
	    /FDepVector [
		EUCFont /FDepVector get 0 get
		[ 16#21 1 16#28 {} for 16#30 1 16#74 {} for ]
		{
		    13 dict begin
			/EUCFont EUCFont def
			/UpperByte exch 16#80 add def	
			% /FontName
			/FontInfo (EUC lower byte font) readonly def
			/PaintType 0 def
			/FontType 3 def
			/FontMatrix matrix def
			/FontBBox {0 0 0 0} def
			/Encoding fixeucfont_dict /LowerByteEncoding get def
			% /UniqueID
			% /WMode
			/BuildChar {
			    gsave
			    exch dup /EUCFont get setfont
			    /UpperByte get
			    2 string
			    dup 0 4 -1 roll put
			    dup 1 4 -1 roll put
			    dup stringwidth setcharwidth
			    0 0 moveto show
			    grestore
			} bind def
			currentdict
		    end
		    /lowerbytefont exch definefont
		} forall
	    ] def
	    currentdict
	end
	/kanjifont exch definefont
	exch

	dup type /nametype eq { findfont } if
	exch

	/FDepVector [ 4 2 roll ] def
	/FontType 0 def
	/FMapType 4 def
	/FontMatrix matrix def
	/Encoding [ 0 1 ] def
	/FontBBox {0 0 0 0} def
	dup /FontName exch def
	currentdict
    end
    definefont pop
} def
EOF

sed -e "/^\/compositefont {/{
	    :loop1
	    s/^\(}[ 	][ 	]*def[ 	]*\)$/%\1/
	    t end1
	    s/^/%/
	    n
	    b loop1
	    :end1
	    r $CMPFILE
       }" \
    -e "/^\/eucfont {/{
	    :loop2
	    s/^\(}[ 	][ 	]*def[ 	]*\)$/%\1/
	    t end2
	    s/^/%/
	    n
	    b loop2
	    :end2
	    r $EUCFILE
        }"

exit 0