[tex-live] 1.929
Victor Ivrii
ivrii at math.toronto.edu
Sun Sep 7 18:05:52 CEST 2008
I attach it
I don't think that the hack is local, AFAIK TEX came with RHLinux
--
==============================================================
Victor Ivrii, Professor, Department of Mathematics, University of Toronto,
40 St.George Str., Toronto, Ontario M5S 2E4, Canada
office: HU 1008
(416)978-4031 (of), (416)978-4107 (fax)
ivrii at math.toronto.edu
==============================================================
WWW home page:
http://www.math.toronto.edu/ivrii/
-------------- next part --------------
%%
%% This is file `fontinst.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% fibasics.dtx (with options: `pkg')
%% ficommon.dtx (with options: `pkg')
%% fimain.dtx (with options: `pkg')
%% ficonv.dtx (with options: `pkg')
%% filtfam.dtx (with options: `pkg,textcomp,debug')
%% fimapgen.dtx (with options: `pkg')
%% fibasics.dtx (with options: `pkg2')
%%
%% This is a generated file.
%%
%% Copyright 1993, 1994, 1995, 1996 Alan Jeffrey,
%% hacked and maintained 1997, 1998 Sebastian Rahtz,
%% copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 the fontinst
%% maintenance team and any individual authors listed elsewhere in
%% this file. All rights reserved.
%%
%% This file is part of the fontinst system version 1.9.
%% -----------------------------------------------------
%%
%% It may be distributed under the terms of the LaTeX Project Public
%% License, as described in lppl.txt in the base LaTeX distribution.
%% Either version 1.1 or, at your option, any later version.
%%
%%% From file: fibasics.dtx
\catcode`\{=1
\catcode`\}=2
\catcode`\#=6
\catcode`\^=7
\def\fontinstversion{1.929}
\ifx\ProvidesPackage\undefined
\def\NeedsTeXFormat#1{}
\def\ProvidesPackage#1[#2]{}
\fi
\ProvidesPackage{fontinst}
[2005/02/05 v\fontinstversion\space
fontinst installation package]
\def\a_macro#1{\catcode\number`#1=\the\catcode`#1 }
\edef\normalcc{%
\a_macro{\ }\a_macro{\^^M}\a_macro{\@}\a_macro{\_}\a_macro{\~}
}
\def\fontinstcc{%
\catcode`\ =9%
\catcode`\^^M=9%
\catcode`\@=11%
\catcode`\_=11%
\catcode`\~=10
}
\fontinstcc
\ifx\@ne\undefined_command
\input fontinst.ini\relax
\fi
\ifx\bye\undefined_command
\def\supereject{\par\penalty-\@MM}
\outer\expandafter\def \csname bye\endcsname
{\par\vfill\supereject\@@end}
\fi
\newcount\a_count
\newcount\b_count
\newcount\c_count
\newcount\d_count
\newcount\e_count
\newcount\f_count
\newcount\g_count
\newdimen\a_dimen
\newdimen\b_dimen
\newdimen\c_dimen
\newdimen\d_dimen
\newtoks\a_toks
\newtoks\b_toks
\newtoks\c_toks
\newif\if_a_
\newwrite\out_file
\mathchardef\one_thousand=1000
\mathchardef\five_hundred=500
\mathchardef\one_hundred=100
\mathchardef\max_mathchardef="7FFF
\mathchardef\two_thousand=2000
\newdimen\half_point \half_point=0.5pt
\let\@tempdima\a_dimen
\let\@tempdimb\b_dimen
\input trig.sty
\def\x_cs#1#2{\expandafter#1\csname#2\endcsname}
\let\x_relax=\relax
\def\g_let{\global\let}
\def\empty_command{}
\def\gobble_one#1{}
\def\gobble_two#1#2{}
\def\gobble_three#1#2#3{}
\def\identity_one#1{#1}
\def\first_of_two#1#2{#1}
\def\second_of_two#1#2{#2}
\def\swap_two#1#2{#2#1}
\def\first_of_three#1#2#3{#1}
\bgroup
\catcode`\[=1
\catcode`\]=2
\catcode`\#=12
\catcode`\%=12
\catcode`\{=12
\catcode`\}=12
\gdef\hash_char[#]
\gdef\percent_char[%]
\gdef\left_brace_char[{]
\gdef\right_brace_char[}]
\egroup
\def\first_char#1#2={#1}
\def\add_to#1#2{
\ifx#1\x_relax
\def#1{#2}
\else
\expandafter\def\expandafter#1\expandafter{#1#2}
\fi
}
\def\prep_to#1#2{
\ifx#1\x_relax
\expandafter\def\expandafter#1\expandafter{\expandafter#2}
\else
\expandafter\def\expandafter#1\expandafter{\expandafter#2#1}
\fi
}
\def\never_do{\noexpand\do}
\newif\if_extensions_warning_
\_extensions_warning_false
\ifx \eTeXversion\undefined_command
\catcode`\~=14 % 14=comment
\fi
\def\eTeX#1{
\if_extensions_warning_
\space/\space e-TeX\space version\space #1
~ \else
~ \ifdim \number\eTeXversion\eTeXrevision\p@ < #1\p@ \else
~ \_a_true
~ \fi
\fi
}
\catcode`\~=10
\ifx \pdftexversion\undefined_command
\catcode`\~=14 % 14=comment
\fi
\def\pdfTeX#1#2{%
\if_extensions_warning_
\space/\space pdfTeX\space version\space
\ifnum #1<100\space
0.\ifnum #1<10\space 0\fi
\else
\expandafter\swap_two \expandafter.
\fi
#1#2%
~ \else
~ \ifdim #1>\pdftexversion \else
~ \ifnum \expandafter\expandafter \expandafter`
~ \expandafter\first_char \pdftexrevision= <
~ \expandafter` \first_char#2=
~ \else \_a_true \fi
~ \fi
\fi
}
\catcode`\~=10
\def\needsTeXextension#1#2{
\_a_false
#1
\if_a_ \else
\_extensions_warning_true
\edef\a_macro{#1}
\_extensions_warning_false
\fontinstwarningnoline{#2}{
This~file~needs:\messagebreak
\expandafter\second_of_two\a_macro
\iffalse
<no~sufficient~extensions~were~listed!!>\if_false
\fi
\messagebreak
You~are~not~using~any~of~them.~This~is~likely~to~cause~errors
}
\fi
}
\def\open_out#1{
\immediate\openout\out_file=#1 \xdef\out_filename{#1}}
\def\close_out#1{
\immediate\write16{#1~written~on~\out_filename.}
\immediate\closeout\out_file}
\def\out_line#1{\immediate\write\out_file{#1}}
\edef\out_lline#1{\noexpand\out_line{\space\space\space#1}}
\edef\out_llline#1{
\noexpand\out_line{\space\space\space\space\space\space#1}
}
\def\TeX_terminal{\string\TeX\space terminal}
\chardef\closed_stream=99
\x_cs\let{out_filename-99}=\TeX_terminal
\x_cs\def{out_filename--1}{\jobname.log}
\def\allocate_stream{
\a_count=\m at ne
\b_count=\m at ne
\loop \ifnum \count17>\a_count
\advance \a_count \@ne
\x_cs\ifx{out_filename-\the\a_count}\TeX_terminal
\b_count=\a_count
\a_count=\count17
\fi
\repeat
\ifnum \b_count=\m at ne
\global\advance\count17by\@ne
\ifnum \count17<\sixt@@n
\b_count=\count17
\global\x_cs\let{out_filename-\the\b_count}\TeX_terminal
\wlog{\string\write\the\b_count\space allocated~to~the~pool.}
\else
\global\count17=\sixt@@n
\fi
\fi
}
\def\ch at ck#1#2#3{
\ifnum \count1#1<#2 \else
\errmessage{No~room~for~a~new~#3}
\global\count1#1=#2
\fi
}
\def\open_pout#1#2{
\allocate_stream
\ifnum \b_count=\m at ne
\immediate\write\sixt@@n{fontinst~is~out~of~output~streams.^^J
Output~file~#2~cannot~be~opened.^^J
Writes~will~be~redirected~to~the~log~file.
}
\gdef#1{\m at ne}
\else
\immediate\openout\b_count=#2\x_relax
\x_cs\xdef{out_filename-\the\b_count}{#2}
\global\chardef#1=\b_count
\fi
}
\def\close_pout#1#2{
\ifnum #1=\closed_stream
\errmessage{Output~file~\string#1~(#2)~not~closed,^^J
since~it~was~not~open}
\else
\immediate\write\sixt@@n{#2~written~on~
\csname out_filename-\the#1\endcsname.}
\ifnum #1=\m at ne \else
\immediate\closeout#1
\global\x_cs\let{out_filename-\the#1}=\TeX_terminal
\fi
\global\chardef#1=\closed_stream
\fi
}
\def\pout_line#1#2{\immediate\write#1{#2}}
\edef\pout_lline#1#2{\noexpand\pout_line#1{\space\space\space#2}}
\edef\pout_llline#1#2{
\noexpand\pout_line#1{\space\space\space\space\space\space#2}
}
\def\tempfileprefix#1{\def\temp_prefix{#1}}
\tempfileprefix{}
\let\then=\iffalse
\def\if_false{\iffalse}
\def\if_true{\iftrue}
\_a_false\eTeX{2.0}
\if_a_\else \catcode`\~=14\x_relax \fi
~ \def\if_defined#1\then{
~ \if
~ \ifcsname#1\endcsname
~ \expandafter\ifx \csname#1\endcsname \x_relax
~ 0
~ \else
~ 1
~ \fi
~ \else
~ 0
~ \fi
~ 1
~ }
~ \def\if_undefined{\expandafter\unless\if_defined}
\catcode`\~=\if_a_ 14 \else 10 \fi \x_relax
~ \def\if_defined#1\then{
~ \expandafter\ifx \csname#1\endcsname\x_relax
~ \expandafter\if_false
~ \else
~ \expandafter\if_true
~ \fi
~ }
~ \def\if_undefined#1\then{
~ \expandafter\ifx \csname#1\endcsname\x_relax
~ }
\catcode`\~=10\x_relax
\def\gobble_if{\iftrue\else}
\def\if_or#1\or_else#2\then{
#1\then
\expandafter\if_true
\else
#2\then
\expandafter\expandafter\expandafter\if_true
\else
\expandafter\expandafter\expandafter\if_false
\fi
\fi
}
\def\if_equal#1\then{\ifx#1}
\def\if_file_exists#1\then{
\immediate\openin1=#1\x_relax
\ifeof1\x_relax
\immediate\closein1
\expandafter\if_false
\else
\immediate\closein1
\expandafter\if_true
\fi
}
\let\Else=\else
\let\Fi=\fi
\x_cs\ifx{@@input}\x_relax
\let\primitiveinput=\input
\else
\let\primitiveinput=\@@input
\fi
\def\process_csep_list#1#2,{
\ifx\process_csep_list#2
\expandafter\gobble_one
\else
\expandafter\identity_one
\fi{
#1{#2}
\process_csep_list{#1}
}
}
\def\make_factor#1{
\ifnum #1<\z@
-\expandafter\make_factor_i\expandafter{\number-#1}
\else
\expandafter\make_factor_i\expandafter{\number#1}
\fi
}
\def\make_factor_i#1{
\ifnum #1<\one_thousand
\make_factor_ii{#1}
\else
\make_factor_iii #1
\fi
#1
}
\def\make_factor_ii#1{
0.
\ifnum #1<\one_hundred
0
\ifnum #1<10~ 0\fi
\fi
}
\def\make_factor_iii#1#2#3\fi#4{
\fi
#4
\ifnum 1#3<\one_thousand
.
\else
\make_factor_iii#2#3
\fi
}
{
\catcode`\p=12
\catcode`\t=12
\gdef\lose_measure#1pt{#1}
}
\def\format_hex_i#1#2{
\if #2i \else
\b_count=\a_count
\divide \a_count \sixt@@n
\c_count=\a_count
\multiply \c_count \sixt@@n
\advance \b_count -\c_count
\edef#1{
\ifcase\b_count 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or
9\or a\or b\or c\or d\or e\or f\fi
#1
}
\expandafter\format_hex_i \expandafter#1
\fi
}
\def\format_hex#1#2#3{
\a_count=#2
\let#1\empty_command
\expandafter\format_hex_i \expandafter#1 \romannumeral
\expandafter\identity_one\expandafter{\number#3}001~
}
\let\messagebreak\x_relax
\def\generic_info#1#2{
\begingroup
\def\messagebreak{^^J#1}
\immediate\write\m at ne{#2\on_line.}
\endgroup
}
\def\generic_warning#1#2{
\begingroup
\def\messagebreak{^^J#1}
\immediate\write\closed_stream{^^J#2\on_line.^^J}
\endgroup
}
\def\generic_error#1#2#3#4{
\begingroup
\immediate\write\closed_stream{}
\def\messagebreak{^^J}
\edef\a_macro{{#4}}
\errhelp\a_macro
\def\messagebreak{^^J#1}
\errmessage{#2.^^J^^J#3
Type~\space H~<return>~\space for~immediate~help
}
\endgroup
}
\def\fontinsterror#1#2#3{
\generic_error{
\four_spaces\four_spaces
}{
#1~error:\messagebreak #2
}{
}{#3}
}
\def\fontinstwarning#1#2{
\generic_warning{
\four_spaces\four_spaces
}{
#1~warning:\messagebreak #2
}
}
\def\fontinstwarningnoline#1#2{
\fontinstwarning{#1}{#2\gobble_one}
}
\def\fontinstinfo#1#2{
\generic_info{
\four_spaces\four_spaces
}{
#1~info:\messagebreak #2
}
}
\def\on_line{~on~input~line~\the\inputlineno}
\edef\four_spaces{\space\space\space\space}
\gdef\error_help_a{
Your~command~was~ignored.\messagebreak
Type~\space I~<command>~<return>~\space to~replace~it~
with~another~command,\messagebreak
or~\space <return>~\space to~continue~without~it.}
\gdef\error_help_c{
Try~typing~\space <return>~
\space to~proceed.\messagebreak
If~that~doesn't~work,~type~\space X~<return>~\space to~quit.}
\gdef\error_help_d{
You're~in~trouble~here.~\space\error_help_c}
\def\error_help_e#1{You~can~continue,~but~the~#1~wrong.}
\newlinechar=`\^^J
\errorcontextlines=999
\tracinglostchars=1
%%% From file: ficommon.dtx
\def\str#1{\csname~s-#1\endcsname}
\def\strint#1{\expandafter\identity_one\expandafter{\number\int{#1}}}
\newcount\result
\def\eval_expr#1{\global\result=#1\x_relax}
\def\eval_expr_to#1#2{\eval_expr{#2}#1=\result}
\def\g_eval_expr_to#1#2{\eval_expr{#2}\global#1=\result}
\def\add#1#2{
#1
\bgroup
\a_count=\result
\eval_expr{#2}
\global\advance \result \a_count
\egroup
}
\def\sub#1#2{
#1
\bgroup
\a_count=\result
\eval_expr{#2}
\advance \a_count -\result
\global\result=\a_count
\egroup
}
\def\int#1{\csname i-#1 \endcsname}
\def\neg#1{#1 \global\result=-\result}
\def\mul#1#2{
#1
\bgroup
\a_count=\result
\eval_expr{#2}
\global\multiply \result \a_count
\egroup
}
\def\div#1#2{
#1
\bgroup
\a_count=\result
\eval_expr{#2}
\divide \a_count \result
\global\result=\a_count
\egroup
}
\def\max#1#2{
#1
\bgroup
\a_count=\result
\eval_expr{#2}
\ifnum \a_count>\result \global\result=\a_count \fi
\egroup
}
\def\min#1#2{
#1
\bgroup
\a_count=\result
\eval_expr{#2}
\ifnum \a_count<\result \global\result=\a_count \fi
\egroup
}
\def\half#1{
#1\x_relax
\ifodd\result
\global\advance \result \@ne
\global\divide \result \tw@
\ifodd\result \global\advance \result \m at ne \fi
\else
\global\divide \result \tw@
\fi
}
\def\otherhalf#1{
#1\x_relax
\ifodd\result
\global\advance \result \@ne
\global\divide \result \tw@
\ifodd\result \else \global\advance \result \m at ne \fi
\else
\global\divide \result \tw@
\fi
}
\def\scale#1#2{
#1
\bgroup
\a_count=\result
\eval_expr{#2}
\global\multiply \result \a_count
\rounded_thousandths
\egroup
}
\def\rounded_thousandths{
\global\divide \result \five_hundred
\ifodd \result
\global\advance \result by \ifnum 0>\result - \fi 1
\fi
\global\divide \result \tw@
}
\def\l_rounded_thousandths#1{
\divide #1 \five_hundred
\ifodd #1
\advance #1 by \ifnum 0>#1 - \fi\@ne
\fi
\divide #1 \tw@
}
\def\l_inv_scale#1#2{
\multiply #1 \two_thousand
\divide #1 #2\x_relax
\ifodd#1 \advance #1 \ifnum 0>#1 - \fi\@ne \fi
\divide #1 \tw@
}
\def\ifnumber#1#2#3\then{
\eval_expr_to\a_count{#1}
\eval_expr{#3}
\ifnum \a_count#2\result
\expandafter\if_true
\else
\expandafter\if_false
\fi
}
\let\setsomething_global=\x_relax
\def\x_setint#1#2{
\x_cs\ifx{i-#1}\x_relax
\x_resetint{#1}{#2}
\fi
}
\let\setint=\x_setint
\def\x_setstr#1#2{
\x_cs\ifx{s-#1}\x_relax
\setsomething_global\x_cs\edef{s-#1}{#2}
\fi
}
\let\setstr=\x_setstr
\def\setdim#1#2{
\x_cs\ifx{d-#1}\x_relax
\a_dimen=#2\x_relax
\setsomething_global\x_cs\edef{d-#1}{\the\a_dimen}
\fi
}
\def\setcommand#1{
\ifx#1\undefined_command
\setsomething_global \expandafter\def \expandafter#1
\else
\expandafter\def \expandafter\a_macro
\fi
}
\def\x_resetint#1#2{
\eval_expr{#2}
\setsomething_global
\ifnum\result<\max_mathchardef
\ifnum 0>\result
\x_cs\edef{i-#1}{\the\result}
\else
\x_cs\mathchardef{i-#1}=\result
\fi
\else
\x_cs\edef{i-#1}{\the\result}
\fi
}
\let\resetint=\x_resetint
\def\resetstr#1#2{\setsomething_global\x_cs\edef{s-#1}{#2}}
\def\resetdim#1#2{
\a_dimen=#2
\setsomething_global\x_cs\edef{d-#1}{\the\a_dimen}
}
\def\resetcommand#1{\setsomething_global\def#1}
\def\dim#1{\csname~d-#1\endcsname}
\def\ifisint#1\then{\if_defined i-#1\then}
\def\ifisstr#1\then{\if_defined s-#1\then}
\def\ifisdim#1\then{\if_defined d-#1\then}
\def\ifiscommand#1\then{
\ifx#1\undefined_command
\expandafter\if_false
\else
\expandafter\if_true
\fi
}
\def\unsetint#1{\setsomething_global\x_cs\let{i-#1}\x_relax}
\def\unsetstr#1{\setsomething_global\x_cs\let{s-#1}\x_relax}
\def\unsetdim#1{\setsomething_global\x_cs\let{d-#1}\x_relax}
\def\unsetcommand#1{\setsomething_global\let#1=\undefined_command}
\def\offcommand#1{
\x_cs\ifx{saved-\string#1}\x_relax
\setsomething_global\x_cs\let{saved-\string#1}#1
\x_cs\ifx{off-\string#1}\x_relax
\generate_off_command{#1}
\else
\setsomething_global \expandafter\let \expandafter#1
\csname off-\string#1\endcsname
\fi
\fi
}
\def\oncommand#1{
\x_cs\ifx{saved-\string#1}\x_relax \else
\setsomething_global \expandafter\let \expandafter#1
\csname saved-\string#1\endcsname
\setsomething_global\x_cs\let{saved-\string#1}\x_relax
\fi
}
\def\generate_off_command#1{
\a_count=0
\let\next=\count_hashes
\expandafter\next\meaning#1~->\x_relax
\b_count=0
\a_toks={}
\loop \ifnum \b_count<\a_count
\advance \b_count 1
\a_toks=\expandafter{\the\expandafter\a_toks \expandafter####
\the\b_count}
\repeat
\setsomething_global \expandafter\def \expandafter#1 \the\a_toks {}
}
\def\count_hashes#1#2{
\if \hash_char#1
\advance \a_count 1
\else
\if -#1
\if >#2
\let\next=\gobble_to_xrelax
\fi\fi
\fi
\next#2
}
\def\gobble_to_xrelax#1\x_relax{}
\def\for(#1)#2#3#4{
\eval_expr_to\a_count{#2}
\x_resetint{#1}{\a_count}
\eval_expr{#4}
\ifnum 0=\result \else
\c_count=\result
\eval_expr_to\b_count{#3}
\setsomething_global\x_cs\edef{for-#1}{
\the\c_count \x_relax
\noexpand\ifnum \gobble_one\fi
\the\b_count \ifnum 0>\c_count > \else < \fi
}
\def\next##1##2##3\endfor(#1){##2\for_i{##1}{##3}}
\next{#1}
\fi
}
\def\for_i#1#2{
\setsomething_global\x_cs\def{body-#1}{#2}
\ifnum \b_count \ifnum0>\c_count >\else<\fi \a_count
\expandafter\gobble_two
\else
\csname body-#1 \expandafter\endcsname
\fi
\for_ii{#1}
}
\def\for_ii#1{
\a_count=\int{#1}
\advance \a_count \csname for-#1\endcsname \a_count
\expandafter\gobble_two
\else
\x_resetint{#1}\a_count
\csname body-#1 \expandafter\endcsname
\fi
\for_ii{#1}
}
\def\endfor(#1){}
\def\foreach(#1)#2{
\def\next##1\endfor(#1){
\setsomething_global\x_cs\def{body-#1}{##1}
\process_csep_list{\foreach_i{#1}}#2,\process_csep_list,
}
\next
}
\def\foreach_i#1#2{
\resetstr{#1}{#2}
\csname body-#1\endcsname
}
\let\comment=\gobble_one
\let\begincomment=\iffalse
\let\endcomment=\fi
%%% From file: fimain.dtx
\def\inputetx#1{
\edef\lowercase_file{\lowercase{
\edef\noexpand\lowercase_file{#1}}}
\lowercase_file
\slot_number=0
\def\relax{\let\relax=\x_relax\iffalse}
\let\encoding=\fi
\primitiveinput \lowercase_file.etx\x_relax
\let\relax=\x_relax
}
\let\encoding=\relax
\outer\def\endencoding{\endinput}
\def\setslot#1{\edef\slot_name{#1}\do_slot}
\def\endsetslot{\end_do_slot\advance\slot_number by 1\x_relax}
\let\do_slot\empty_command
\let\end_do_slot\empty_command
\newcount\slot_number
\def\nextslot#1{\eval_expr_to\slot_number{#1}}
\def\skipslots#1{\eval_expr{#1} \advance\slot_number by \result}
\def\setleftboundary#1{\edef\slot_name{#1}\do_boundary}
\let\endsetleftboundary\x_relax
\let\do_boundary\x_relax
\def\setrightboundary#1{
\makerightboundary{#1}
\advance \slot_number 1\x_relax
}
\let\ligature=\gobble_three
\def\Ligature{\ligature}
\def\oddligature#1#2#3#4{}
\let\nextlarger=\gobble_one
\let\usedas=\gobble_two
\let\makerightboundary=\gobble_one
\let\Unicode=\gobble_two
\let\charseq=\gobble_one
\let\varchar=\empty_command
\let\vartop=\gobble_one
\let\varmid=\gobble_one
\let\varbot=\gobble_one
\let\varrep=\gobble_one
\let\endvarchar=\empty_command
\let\useexamplefont=\gobble_one
\let\slotexample=\empty_command
\let\setslotcomment=\gobble_one
\let\resetslotcomment=\gobble_one
\let\unsetslotcomment=\empty_command
\def\setfontdimen#1#2{
\ifisint{#2}\then \setint{fontdimen(#1)}{\int{#2}} \fi
}
\let\label=\gobble_one
\newif\ifdirect \directtrue
\def\input_mtx_as_etx#1{
\def\setscaledrawglyph##1##2##3##4##5##6##7##8##9{
\nextslot{##5}
\setslot{##1}\endsetslot
}
\offcommand\setscalednotglyph
\let\setglyph=\gobble_glyph
\offcommand\setkern
\inputmtx{#1}
}
\def\inputmtx#1{
\def\relax{\let\relax=\x_relax\iffalse}
\let\metrics=\fi
\primitiveinput #1.mtx\x_relax
\let\relax=\x_relax
}
\let\metrics=\x_relax
\edef\endmetrics_text{\string\endmetrics}
\outer\def\endmetrics{\endinput}
\def\ProvidesMtxPackage#1{\x_cs\let{pack-#1}P}
\def\usemtxpackage{\futurelet\next_token\test_UseMtxPkg_arguments}
\def\test_UseMtxPkg_arguments{\ifx\next_token[
\expandafter\mtx_package_given_file
\else
\expandafter\mtx_package_separate_files
\fi
}
\def\mtx_package_given_file[#1]#2{
\_a_false
\process_csep_list\load_true_unless_loaded #2,\process_csep_list,
\if_a_ \inputmtx{#1} \fi
}
\def\load_true_unless_loaded#1{
\x_cs\ifx{pack-#1}P\else\_a_true\fi
}
\def\mtx_package_separate_files#1{
\process_csep_list\load_file_unless_loaded #1,\process_csep_list,
}
\def\load_file_unless_loaded#1{
\x_cs\ifx{pack-#1}P\else \inputmtx{#1} \fi
}
\let\glyph_name_modifier=\identity_one
\def\setkern#1#2#3{
\x_cs\ifx{i-rawscale}\x_relax
\expandafter\set_kern
\csname~r-\glyph_name_modifier{#1}\expandafter\endcsname
\csname~l-\glyph_name_modifier{#2}\endcsname
{#3}
\else
\expandafter\set_kern
\csname~r-\glyph_name_modifier{#1}\expandafter\endcsname
\csname~l-\glyph_name_modifier{#2}\endcsname
{\scale{#3}{\int{rawscale}}}
\fi
}
\def\set_kern#1#2#3{
\eval_expr{#3}
\expandafter\set_kern_cs\csname\the\result\endcsname#1#2
}
\def\set_kern_cs#1#2#3{
\add_to#2{\k#3#1}
\add_to#3{\k#2#1}
}
\def\resetkern#1#2#3{
\x_cs\ifx{i-rawscale}\x_relax
\expandafter\reset_kern
\csname~r-#1\expandafter\endcsname
\csname~l-#2\endcsname{#3}
\else
\expandafter\reset_kern
\csname~r-#1\expandafter\endcsname
\csname~l-#2\endcsname{\scale{#3}{\int{rawscale}}}
\fi
}
\def\reset_kern#1#2#3{
\eval_expr{#3}
\expandafter\reset_kern_cs\csname\the\result\endcsname#1#2
}
\def\reset_kern_cs#1#2#3{
\prep_to#2{\k\expandafter#3\expandafter#1}
\prep_to#3{\k\expandafter#2\expandafter#1}
}
\def\setleftkerning#1#2#3{
\eval_expr_to\b_count{#3}
\expandafter\set_kerning
\csname~l-#1\expandafter\endcsname
\csname~l-#2\endcsname
}
\def\setrightkerning#1#2#3{
\eval_expr_to\b_count{#3}
\expandafter\set_kerning
\csname~r-#1\expandafter\endcsname
\csname~r-#2\endcsname
}
\def\setleftrightkerning#1#2#3{
\eval_expr_to\b_count{#3}
\expandafter\set_kerning
\csname~l-#1\expandafter\endcsname
\csname~l-#2\endcsname
\expandafter\set_kerning
\csname~r-#1\expandafter\endcsname
\csname~r-#2\endcsname
}
\def\set_kerning#1#2{
\if\b_count=\one_thousand
\def\k##1##2{
\set_kern_cs##2##1#1
}
\else
\def\k##1##2{
\set_kern##1#1{
\scale\b_count{\expandafter\gobble_one\string##2}
}
}
\fi
#2
}
\def\kerning#1#2{0\x_relax
\def\k##1{\csname~set-\string##1\endcsname\gobble_one}
\bgroup
\x_cs\def{set-\string\l-#2}##1##2{
\global\result=\expandafter\gobble_one\string##2\egroup
}
\csname~r-#1\endcsname
\csname~set-\string\l-#2\endcsname\gobble_one{00}
}
\def\ifiskern#1#2\then{
\def\k##1##2{\ifx T##1 \let\k\gobble_two \fi}
\bgroup
\x_cs\let{l-#2}T
\csname r-#1\endcsname
\expandafter\egroup \ifx\k\gobble_two
}
\def\unsetkerns#1#2{
\let\k\k_unless_to_U
\process_csep_list\make_slots_U#1,\process_csep_list,
\def\do##1{\x_cs\main_remove_Us{l-##1}}
\process_csep_list\do#2,\process_csep_list,
\process_csep_list\make_slots_relax#1,\process_csep_list,
\process_csep_list\make_slots_U#2,\process_csep_list,
\def\do##1{\x_cs\main_remove_Us{r-##1}}
\process_csep_list\do#1,\process_csep_list,
\process_csep_list\make_slots_relax#2,\process_csep_list,
}
\def\make_slots_U#1{\x_cs\let{slots-#1}U}
\def\make_slots_relax#1{\x_cs\let{slots-#1}\x_relax}
\def\k_unless_to_U#1#2{
\x_cs\ifx{slots-\expandafter\gobble_three\string#1}U \else
\noexpand\k\noexpand#1\noexpand#2
\fi
}
\def\main_remove_Us#1{
\ifx#1\x_relax \else
\edef#1{#1}
\ifx#1\empty_command \let#1\x_relax \fi
\fi
}
\def\noleftkerning#1{\no_kerning{l}{#1}}
\def\norightkerning#1{\no_kerning{r}{#1}}
\def\noleftrightkerning#1{\no_kerning{l}{#1}\no_kerning{r}{#1}}
\def\no_kerning#1#2{
\let\k\no_kerning_i
\def\do##1{\csname #1-##1\endcsname}
\bgroup
\aftergroup\def \aftergroup\a_macro \aftergroup{
\process_csep_list\do #2,\process_csep_list,
\aftergroup}
\egroup
\def\do##1{\expandafter\let \csname #1-##1\endcsname \x_relax}
\process_csep_list\do #2,\process_csep_list,
\let\k\no_kerning_ii
\def\do##1{\edef##1{##1}}
\a_macro
}
\def\no_kerning_i#1#2{
\ifx #1\x_relax \else
\aftergroup\do \aftergroup#1
\let #1\x_relax
\fi
}
\def\no_kerning_ii#1#2{
\ifx #1\x_relax \else \noexpand\k \noexpand#1 \noexpand#2 \fi
}
\def\width{\glyph_parameter\first_of_six}
\def\height{\glyph_parameter\second_of_six}
\def\depth{\glyph_parameter\third_of_six}
\def\italic{\glyph_parameter\fourth_of_six}
\def\mapcommands{\glyph_parameter\fifth_of_six}
\def\mapfonts{\glyph_parameter\sixth_of_six}
\def\glyph_parameter#1#2{
\expandafter\expandafter\expandafter
#1\csname g-#2\endcsname
}
\def\first_of_six#1#2#3#4#5#6{#1}
\def\second_of_six#1#2#3#4#5#6{#2}
\def\third_of_six#1#2#3#4#5#6{#3}
\def\fourth_of_six#1#2#3#4#5#6{#4}
\def\fifth_of_six#1#2#3#4#5#6{#5}
\def\sixth_of_six#1#2#3#4#5#6{#6}
\def\glyph_metrics#1#2#3#4#5#6{
\a_count=#1
\b_count=#2
\c_count=#3
\d_count=#4~
}
\let\saved_scale\x_relax
\let\saved_mapfont\x_relax
\let\saved_raw\x_relax
\let\saved_rule\x_relax
\let\saved_special\x_relax
\let\saved_warning\x_relax
\let\saved_movert\x_relax
\let\saved_moveup\x_relax
\let\saved_push\x_relax
\let\saved_pop\x_relax
\newcount\glyph_width
\newcount\glyph_height
\newcount\glyph_depth
\newcount\glyph_italic
\newtoks\glyph_map_commands
\newtoks\glyph_map_fonts
\newcount\glyph_voffset
\newcount\glyph_maxhpos
\def\setglyph#1{
\ifisglyph{\glyph_name_modifier{#1}}\then
\expandafter\gobble_glyph
\else
\x_cs\def{g-\glyph_name_modifier{#1}}{
{\the\glyph_width}{\the\glyph_height}
{\the\glyph_depth}{\the\glyph_italic}
{\the\glyph_map_commands}{\the\glyph_map_fonts}
}
\resetglyph{\glyph_name_modifier{#1}}
\fi
}
\long\def\gobble_glyph#1\endsetglyph{}
\def\resetglyph#1{
\edef\glyphname{#1}
\glyph_width=0
\global\glyph_height=0
\global\glyph_depth=0
\global\glyph_italic=0
\glyph_voffset=0
\global\glyph_maxhpos=0
\global\glyph_map_commands={}
\global\glyph_map_fonts={}
}
\def\endsetglyph{
\x_cs\edef{g-\glyphname}
{{\the\glyph_width}{\the\glyph_height}
{\the\glyph_depth}{\the\glyph_italic}
{\the\glyph_map_commands}{\the\glyph_map_fonts}}
}
\let\endresetglyph=\endsetglyph
\def\setrawglyph#1#2#3{
\setscaledrawglyph{#1}{#2}{#3}\one_thousand
}
\def\setscaledrawglyph#1#2#3#4#5#6#7#8#9{
\if_undefined{g-\glyph_name_modifier{#1}}\then
\eval_expr{#4}
\ifnum \result=\one_thousand
\let\a_macro\identity_one
\else
\edef\a_macro##1{\saved_scale{\the\result}{##1}}
\fi
\eval_expr_to\a_count{#6}
\eval_expr_to\b_count{#7}
\eval_expr_to\c_count{#8}
\eval_expr_to\d_count{#9}
\ifisint{rawscale}\then
\e_count=\int{rawscale}
\multiply \a_count \e_count \l_rounded_thousandths\a_count
\multiply \b_count \e_count \l_rounded_thousandths\b_count
\multiply \c_count \e_count \l_rounded_thousandths\c_count
\multiply \d_count \e_count \l_rounded_thousandths\d_count
\edef\a_macro##1{\saved_scale{\the\e_count}{\a_macro{##1}}}
\fi
\x_cs\edef{g-\glyph_name_modifier{#1}}{
{\the\a_count}
{\the\b_count}
{\the\c_count}
{\the\d_count}
{\a_macro{\saved_raw{#2}{#5}{#1}}}
{\a_macro{\saved_mapfont{#2}{#3}}}
}
\fi
}
\def\setnotglyph#1#2#3{
\setscalednotglyph{#1}{#2}{#3}\one_thousand
}
\def\setscalednotglyph#1#2#3#4#5#6#7#8#9{
\if_undefined{g-\glyph_name_modifier{#1}-not}\then
\eval_expr_to\a_count{#6}
\eval_expr_to\b_count{#7}
\eval_expr_to\c_count{#8}
\eval_expr_to\d_count{#9}
\ifisint{rawscale}\then
\e_count=\int{rawscale}
\multiply \a_count \e_count \l_rounded_thousandths\a_count
\multiply \b_count \e_count \l_rounded_thousandths\b_count
\multiply \c_count \e_count \l_rounded_thousandths\c_count
\multiply \d_count \e_count \l_rounded_thousandths\d_count
\fi
\x_cs\edef{g-\glyph_name_modifier{#1}-not}{
{\the\a_count}
{\the\b_count}
{\the\c_count}
{\the\d_count}
{}{}
}
\fi
}
\def\unsetglyph#1{\x_cs\let{g-#1}\x_relax}
\def\glyph#1#2{
\glyph_parameter\glyph_metrics{#1}
\eval_expr_to\e_count{#2}
\ifnum \e_count=\one_thousand
\edef\a_macro{\mapcommands{#1}}
\global\glyph_map_commands\expandafter{
\the\expandafter\glyph_map_commands \a_macro
}
\edef\a_macro{\mapfonts{#1}}
\else
\multiply \a_count \e_count \l_rounded_thousandths\a_count
\multiply \b_count \e_count \l_rounded_thousandths\b_count
\multiply \c_count \e_count \l_rounded_thousandths\c_count
\multiply \d_count \e_count \l_rounded_thousandths\d_count
\edef\a_macro{\saved_scale{\the\e_count}{\mapcommands{#1}}}
\global\glyph_map_commands\expandafter{
\the\expandafter\glyph_map_commands \a_macro
}
\edef\a_macro{\saved_scale{\the\e_count}{\mapfonts{#1}}}
\fi
\advance \glyph_width \a_count
\advance \b_count \glyph_voffset
\ifnum \glyph_height<\b_count \global\glyph_height=\b_count \fi
\advance \c_count -\glyph_voffset
\ifnum \glyph_depth<\c_count \global\glyph_depth=\c_count \fi
\global\glyph_italic=\d_count
\global\glyph_map_fonts\expandafter{
\the\expandafter\glyph_map_fonts \a_macro
}
}
\def\glyphrule#1#2{
\eval_expr_to\b_count{#1} \eval_expr_to\c_count{#2}
\advance\glyph_width by \b_count
\g_eval_expr_to\glyph_depth{\max\glyph_depth{-\glyph_voffset}}
\g_eval_expr_to\glyph_height{
\max\glyph_height{\add\glyph_voffset\c_count}
}
\global\glyph_italic=0
\edef\a_macro{\saved_rule{\the\b_count}{\the\c_count}}
\global\glyph_map_commands\expandafter{
\the\expandafter\glyph_map_commands \a_macro
}
}
\def\glyphspecial#1{
\edef\a_macro{\saved_special{#1}}
\global\glyph_map_commands\expandafter{
\the\expandafter\glyph_map_commands \a_macro
}
}
\def\glyphwarning#1{
\edef\a_macro{\saved_warning{#1}}
\global\glyph_map_commands\expandafter{
\the\expandafter\glyph_map_commands \a_macro
}
}
\def\movert#1{
\eval_expr{#1}
\ifnum \glyph_maxhpos<\glyph_width
\global\glyph_maxhpos\glyph_width
\fi
\ifnum 0=\result \else
\advance\glyph_width by \result
\edef\a_macro{\saved_movert{\the\result}}
\global\glyph_map_commands\expandafter{
\the\expandafter\glyph_map_commands \a_macro
}
\fi
}
\def\moveup#1{
\eval_expr{#1}
\ifnum\result=0\else
\advance\glyph_voffset by \result
\edef\a_macro{\saved_moveup{\the\result}}
\global\glyph_map_commands\expandafter{
\the\expandafter\glyph_map_commands \a_macro
}
\fi
}
\def\push{
\bgroup
\global\glyph_map_commands\expandafter{
\the\glyph_map_commands \saved_push
}
}
\def\pop{
\ifnum \glyph_maxhpos<\glyph_width
\global\glyph_maxhpos\glyph_width
\fi
\egroup
\global\glyph_map_commands\expandafter{
\the\glyph_map_commands \saved_pop
}
}
\def\resetwidth#1{\movert{\sub{#1}\glyph_width}}
\def\resetheight{\g_eval_expr_to\glyph_height}
\def\resetdepth{\g_eval_expr_to\glyph_depth}
\def\resetitalic{\g_eval_expr_to\glyph_italic}
\def\glyphpcc#1#2#3{
\ifisglyph{\glyph_name_modifier{#1}}\then
\push
\movert{#2}
\moveup{#3}
\glyph{\glyph_name_modifier{#1}}{\one_thousand}
\pop
\else
\fontinsterror{\string\glyphpcc}{
Base~glyph~not~set.\messagebreak
This~could~be~a~sign~that~the~AFM~file~is~buggy
}\error_help_a
\fi
}
\def\glyphbboxright{\max\glyph_width\glyph_maxhpos}
\def\samesize#1{
\if_undefined{g-\glyph_name_modifier{#1}}\then
\resetwidth{\glyphbboxright}
\else
\expandafter\expandafter\expandafter
\same_size\csname g-\glyph_name_modifier{#1}\endcsname
\fi
}
\def\same_size#1#2#3#4#5#6{
\movert{\sub{#1}\glyph_width}
\global\glyph_height=#2
\global\glyph_depth=#3
\global\glyph_italic=#4
}
\def\ifisglyph#1\then{\if_defined{g-#1}\then}
\def\ifareglyphs#1\then{
\process_csep_list{\if_is_glyph}#1,\process_csep_list,
\if_true
}
\def\if_is_glyph#1{
\if_undefined{g-#1}\then \expandafter\if_false \fi
}
\def\etxtovpl#1#2{{
\def\vpl_extension{vpl}
\def\vpl_title{COMMENT}
\def\vpl_font{virtual~font}
\def\vpl_Font{Virtual~font}
\def\vpl_call{\string\etxtovpl{#1}{#2}}
\def\vpl_to_vf##1{vptovf~##1.vpl~##1.vf~##1.tfm}
\a_toks={}
\process_csep_list\make_inputetx #1,\process_csep_list,
\expandafter\etx_to_font \expandafter{\the\a_toks}{#2}
}}
\def\etxtopl#1#2{{
\def\vpl_extension{pl}
\def\vpl_title{COMMENT}
\def\vpl_font{font}
\def\vpl_Font{Font}
\def\vpl_call{\string\etxtopl{#1}{#2}}
\def\vpl_to_vf##1{pltotf~##1.pl~##1.tfm}
\_including_map_false
\global\rawfont_scaling=-\p@
\a_toks={}
\process_csep_list\make_inputetx #1,\process_csep_list,
\expandafter\etx_to_font \expandafter{\the\a_toks}{#2}
}}
\newif\if_including_map_
\_including_map_true
\def\make_inputetx#1{
\def\a_macro{\noexpand\inputetx{\file_name}}
\get_file_name #1~{}~\par
\edef\a_macro{\a_macro}
\a_toks=\expandafter{ \the\expandafter\a_toks \a_macro}
}
\x_cs\def{IFKW-mtxasetx}{
\def\a_macro{\noexpand\input_mtx_as_etx{\file_name}}
\get_keyword
}
\def\etx_to_font#1#2{
\make_assignments{#1}
\open_out{#2.\vpl_extension}
\top_of_pl_hook
\out_line{(\vpl_title\space\vpl_font\space
#2~created~by~fontinst~v\fontinstversion)}
\out_line{}
\out_line{(COMMENT~Filename:~#2.\vpl_extension)}
\out_line{(COMMENT~Created~by:~tex~\jobname)}
\out_line{(COMMENT~Created~using:~\vpl_call)}
\out_line{}
\out_line{(COMMENT~This~file~can~be~turned~into~a~\vpl_font\space
with)}
\out_line{(COMMENT~\vpl_to_vf{#2})}
\out_line{}
\out_line{(COMMENT~THIS~FILE~CAN~THEN~BE~DELETED.)}
\out_line{}
\make_header{#1}
\if_including_map_ \make_mapfonts{#1} \fi
\make_fontdimens{#1}
\make_ligtable{#1}
\make_characters{#1}
\make_tidy{#1}
\out_line{}
\out_line{(COMMENT~END~OF~FILE~#2.\vpl_extension)}
\close_out{\vpl_Font}
}
\let\pre_first_etx_pass_hook\x_relax
\let\pre_second_etx_pass_hook\x_relax
\let\pre_third_etx_pass_hook\x_relax
\let\pre_fourth_etx_pass_hook\x_relax
\let\post_first_etx_pass_hook\x_relax
\let\post_second_etx_pass_hook\x_relax
\let\post_third_etx_pass_hook\x_relax
\let\post_fourth_etx_pass_hook\x_relax
\let\tidying_up_hook\x_relax
\let\top_of_pl_hook\x_relax
\def\make_assignments#1{
\let\do_slot=\assign_slot
\let\end_do_slot=\end_assign_slot
\def\do_boundary{\bgroup
\let\makerightboundary=\bad_makerightboundary
}
\let\endsetleftboundary=\egroup
\let\makerightboundary=\assign_rboundary
\pre_first_etx_pass_hook
#1
\post_first_etx_pass_hook
\let\end_do_slot=\empty_command
\let\do_boundary=\x_relax
\let\endsetleftboundary=\x_relax
\let\makerightboundary=\gobble_one
}
\def\assign_slot{\a_toks={\do}}
\begingroup
\catcode0=12
\gdef\end_assign_slot{
\ifisglyph\slot_name\then
\lccode0=\slot_number
\lowercase{
\expandafter\add_to
\csname slots-\slot_name\expandafter\endcsname
\expandafter{\the\a_toks^^@}
}
\fi
}
\gdef\assign_rboundary#1{
\lccode0=\slot_number
\lowercase{\x_cs\add_to{slots-#1}{\rboundary_do^^@}}
\x_setint{\percent_char boundarychar}\slot_number
\a_toks={\rbserver_do}
}
\endgroup
\def\bad_makerightboundary#1{
\errhelp={The~left~boundary~is~not~a~slot,~so~it~cannot~serve~
as~right~boundary.}
\errmessage{Incorrect~use~of~\string\makerightboundary}
}
\def\get_slot_num#1{
\global\result=-1
\bgroup
\def\do{\global\result=`}
\let\rbserver_do=\do
\let\rboundary_do=\gobble_one
\csname slots-#1\endcsname
\egroup
}
\def\ifisinslot#1#2\then{
\ifx \makerightboundary\gobble_one
\eval_expr{#2}
\begingroup
\def\do##1{\ifnum `##1=\result \let\do=\gobble_one \fi}
\def\rbserver_do{\do}
\let\rboundary_do=\gobble_one
\csname slots-#1\endcsname
\expandafter\endgroup
\ifx \do\gobble_one
\expandafter\expandafter \expandafter\if_true
\else
\expandafter\expandafter \expandafter\if_false
\fi
\else
\expandafter\gobble_if
\fi
}
\newdimen\mapfont_scaling
\mapfont_scaling=1pt
\newdimen\rawfont_scaling
\def\vpl_real#1{R~\expandafter\lose_measure\the#1}
\def\vpl_int#1{D~\the#1}
\newdimen\side_bearings
\newdimen\curr_bearings
\def\make_header#1{
\global\font_count=0
\setdim{designsize}{10pt}
\a_dimen=\dim{designsize}
\out_line{(DESIGNSIZE~\vpl_real\a_dimen)}
\x_setstr{codingscheme}{UNKNOWN}
\out_line{(CODINGSCHEME~\str{codingscheme})}
\ifisint{\percent_char boundarychar}\then
\a_count=\int{\percent_char boundarychar}
\out_line{(BOUNDARYCHAR~\vpl_int\a_count)}
\fi
\x_setint{letterspacing}{0}
\side_bearings=\make_factor{\int{letterspacing}}\half_point
\x_setint{minimumkern}{0}
\minimum_kern=\int{minimumkern}
\out_line{}
}
\def\make_mapfonts#1{
\let\saved_scale\vpl_scale
\let\saved_mapfont\vpl_mapfont
\let\do_slot=\do_mapfont
\pre_second_etx_pass_hook
#1
\post_second_etx_pass_hook
\out_line{}
}
\def\do_mapfont{
\ifisglyph\slot_name\then
\mapfonts\slot_name
\fi
}
\def\vpl_scale#1#2{{
\mapfont_scaling=\make_factor{#1}\mapfont_scaling
#2
}}
\def\vpl_mapfont#1#2{
\a_dimen=#2
\if_undefined{\the\mapfont_scaling-#1}\then
\global\x_cs\mathchardef{\the\mapfont_scaling-#1}=\font_count
\x_cs\xdef{f-\the\font_count}{\the\mapfont_scaling-#1}
\out_line{(MAPFONT~\vpl_int\font_count\space
(FONTNAME~#1)~
(FONTDSIZE~\vpl_real\a_dimen)~
(FONTAT~\vpl_real\mapfont_scaling))}
\record_usage{#1}
\global\advance\font_count by 1
\fi
}
\def\pl_mapfont#1#2{\global\rawfont_scaling=\mapfont_scaling}
\newcount\font_count
\newcount\next_mapfont
\newcount\prev_mapfont
\def\make_fontdimens#1{
\out_line{(FONTDIMEN}
\a_count=1
\loop\ifnum 256>\a_count
\ifisint{fontdimen(\the\a_count)}\then
\out_lline{(PARAMETER~\vpl_int\a_count\space
R~\make_factor{\int{fontdimen(\the\a_count)}})}
\fi
\advance \a_count \@ne
\repeat
\out_lline{)}
\out_line{}
}
\def\make_ligtable#1{
\begingroup
\out_line{(LIGTABLE}
\let\do_slot=\bgroup
\let\end_do_slot=\vpl_kerning
\def\do_boundary{\bgroup \let\vpl_liglabel=\boundary_liglabel}
\let\endsetleftboundary=\vpl_kerning
\let\ligature=\vpl_ligature
\let\k=\vpl_kern
\let\rbserver_do=\vpl_rbserver_do
\let\rboundary_do=\vpl_rboundary_do
\pre_third_etx_pass_hook
#1
\post_third_etx_pass_hook
\out_lline{)}
\endgroup
\out_line{}
}
\def\vpl_rbserver_do#1{
\do{#1}
\let\rboundary_do=\wrn_rboundary_do
}
\def\vpl_rboundary_do#1{
\do{#1}
\let\rbserver_do=\wrn_rboundary_do
}
\def\wrn_rboundary_do#1{
\do{#1}
\immediate\write16{Boundarychar~slot~usage~collision~in~
`\slot_name'~ligkern~program.}
}
\def\vpl_ligature#1#2#3{
\get_slot_num{#3}
\ifnum -1=\result
\immediate\write16{Warning:~\string\ligature\space
for~unknown~slot~`#3'.}
\else
\x_cs\ifx{slots-#2}\x_relax
\immediate\write16{Warning:~\string\ligature\space
for~unknown~slot~`#2'.}
\else
\def\do##1{
\vpl_liglabel
\out_lline{(#1~D~\number`##1~\space\vpl_int\result)~
(COMMENT~#2~#3)}
}
\csname slots-#2\endcsname
\fi
\fi
}
\def\vpl_kerning{
\let\do=\vpl_kern_do
\csname~r-\slot_name\endcsname
\vpl_ligstop
\egroup
}
\def\vpl_kern#1#2{
\edef\a_macro{\expandafter\gobble_three\string#1}
\a_count=\expandafter\gobble_one\string#2\x_relax
\ifnum \ifnum -\a_count>\a_count - \fi\a_count>\minimum_kern
\edef\b_macro{~R~\make_factor\a_count}
\csname slots-\a_macro\endcsname
\fi
\x_cs\let{slots-\a_macro}=\x_relax
}
\def\vpl_kern_do#1{
\vpl_liglabel
\out_lline{
(KRN~D~\number`#1~\b_macro)~
(COMMENT~\a_macro)
}
}
\def\out_liglabel{
\out_lline{(LABEL~\vpl_int\slot_number)~(COMMENT~\slot_name)}
\let\vpl_liglabel=\x_relax
\let\vpl_ligstop=\out_ligstop
}
\def\boundary_liglabel{
\out_lline{(LABEL~BOUNDARYCHAR)~(COMMENT~\slot_name)}
\let\vpl_liglabel=\x_relax
\let\vpl_ligstop=\out_ligstop
}
\let\vpl_liglabel=\out_liglabel
\def\out_ligstop{\out_lline{(STOP)}
\let\vpl_liglabel=\out_liglabel
\let\vpl_ligstop=\x_relax}
\let\vpl_ligstop=\x_relax
\def\make_characters#1{
\bgroup
\let\do_slot=\do_character
\let\end_do_slot=\end_do_character
\let\nextlarger=\vpl_nextlarger
\let\varchar=\vpl_varchar
\let\endvarchar=\end_vpl_varchar
\let\vartop=\vpl_vartop
\let\varmid=\vpl_varmid
\let\varbot=\vpl_varbot
\let\varrep=\vpl_varrep
\if_including_map_
\let\saved_raw\vpl_raw
\let\saved_rule\vpl_rule
\let\saved_special\vpl_special
\let\saved_warning\vpl_warning
\let\saved_movert\vpl_movert
\let\saved_moveup\vpl_moveup
\let\saved_push\vpl_push
\let\saved_pop\vpl_pop
\else
\def\do_character_map{
\ifdim \rawfont_scaling=-\p@
\mapfonts\slot_name
\else
\let\do_character_map=\x_relax
\fi
}
\let\saved_mapfont\pl_mapfont
\let\saved_scale\vpl_scale
\fi
\pre_fourth_etx_pass_hook
#1
\post_fourth_etx_pass_hook
\egroup
}
\def\do_character{
\if_undefined{g-\slot_name}\then
\ifisint{requireglyphs}\then
\fontinstwarning{ETX~to~(V)PL}{
Undefined~glyph~`\slot_name'~requested\message_break
for~slot~\the\slot_number\message_number}
\fi
\expandafter\gobble_setslot
\else
\ifx\slot_name\notdef_name\else
\out_line{(CHARACTER~\vpl_int\slot_number\space
(COMMENT~\slot_name)}
\glyph_parameter\glyph_metrics\slot_name
\a_dimen=\make_factor\a_count \p@
\do_character_sidebearings
\out_lline{(CHARWD~\vpl_real\a_dimen)}
\ifnum \z@=\b_count \else
\out_lline{(CHARHT~R~\make_factor\b_count)}
\fi
\ifnum \z@=\c_count \else
\out_lline{(CHARDP~R~\make_factor\c_count)}
\fi
\ifnum \z@=\d_count \else
\out_lline{(CHARIC~R~\make_factor\d_count)}
\fi
\do_character_map
\fi
\fi
}
\def\do_character_sidebearings{
\ifisint{\slot_name-spacing}\then
\curr_bearings=\make_factor{\int{\slot_name-spacing}}\half_point
\else
\curr_bearings=\side_bearings
\fi
\advance\a_dimen by 2\curr_bearings
}
\def\do_character_map{
\global\prev_mapfont=0
\out_lline{(MAP}
\ifdim 0pt=\curr_bearings
\mapcommands\slot_name
\else
\out_llline{(MOVERIGHT~\vpl_real\curr_bearings)}
\mapcommands\slot_name
\out_llline{(MOVERIGHT~\vpl_real\curr_bearings)}
\fi
\out_llline{)}
}
\long\def\gobble_setslot#1\endsetslot{\endsetslot}
\def\end_do_character{
\ifisglyph\slot_name\then
\out_lline{)}
\fi
}
\def\notdef_name{.notdef}
\def\vpl_nextlarger#1{
\get_slot_num{#1}
\ifnum -1<\result
\out_lline{(NEXTLARGER~D~\the\result)~(COMMENT~#1)}
\else
\immediate\write16{Warning:~\string\nextlarger\space
for~unknown~slot~`#1'}
\fi
}
\def\vpl_varchar{\out_lline{(VARCHAR}}
\def\end_vpl_varchar{\out_llline{)}}
\def\vpl_vartop#1{
\get_slot_num{#1}
\ifnum -1<\result
\out_llline{(TOP~D~\the\result)~(COMMENT~#1)}
\else
\immediate\write16{Warning:~\string\vartop\space
for~unknown~slot~`#1'}
\fi
}
\def\vpl_varmid#1{
\get_slot_num{#1}
\ifnum -1<\result
\out_llline{(MID~D~\the\result)~(COMMENT~#1)}
\else
\immediate\write16{Warning:~\string\varmid\space
for~unknown~slot~`#1'}
\fi
}
\def\vpl_varbot#1{
\get_slot_num{#1}
\ifnum -1<\result
\out_llline{(BOT~D~\the\result)~(COMMENT~#1)}
\else
\immediate\write16{Warning:~\string\varbot\space
for~unknown~slot~`#1'}
\fi
}
\def\vpl_varrep#1{
\get_slot_num{#1}
\ifnum -1<\result
\out_llline{(REP~D~\the\result)~(COMMENT~#1)}
\else
\immediate\write16{Warning:~\string\varrep\space
for~unknown~slot~`#1'}
\fi
}
\def\vpl_raw#1#2#3{
\global\next_mapfont=\csname\the\mapfont_scaling-#1\endcsname
\ifnum \next_mapfont=\prev_mapfont \else
\out_llline{(SELECTFONT~\vpl_int\next_mapfont)~
(COMMENT~#1~at~
\expandafter\lose_measure \the\mapfont_scaling)}
\fi
\out_llline{(SETCHAR~D~#2)~(COMMENT~#3)}
\global\prev_mapfont=\next_mapfont
}
\def\vpl_rule#1#2{
\a_dimen=\make_factor{#2}\mapfont_scaling
\b_dimen=\make_factor{#1}\mapfont_scaling
\out_llline{(SETRULE~\vpl_real\a_dimen\space\vpl_real\b_dimen)}
}
\def\vpl_special#1{
\out_llline{(SPECIAL~#1)}}
\def\vpl_warning#1{
\ifwarningspecials
\out_llline{(SPECIAL~Warning:~#1)}
\fi
\immediate\write16{Warning:~#1.}
}
\newif\ifwarningspecials
\warningspecialstrue
\def\vpl_movert#1{
\a_dimen=\make_factor{#1}\mapfont_scaling
\out_llline{(MOVERIGHT~\vpl_real\a_dimen)}
}
\def\vpl_moveup#1{
\a_dimen=\make_factor{#1}\mapfont_scaling
\out_llline{(MOVEUP~\vpl_real\a_dimen)}
}
\def\vpl_push{\out_llline{(PUSH)}}
\def\vpl_pop{\out_llline{(POP)}}
\def\make_tidy#1{
\tidying_up_hook
\if_including_map_
\a_count=0
\loop\ifnum \a_count<\font_count
\edef\a_macro{\csname~f-\the\a_count\endcsname}
\global\x_cs\let\a_macro\x_relax
\advance\a_count by 1
\repeat
\global\font_count=0
\else
\ifdim \rawfont_scaling<\z@
\fontinstwarning{ETX~to~(V)PL}{The~font~
\out_filename\space doesn't~contain~any~characters}
\global\rawfont_scaling=\p@
\fi
\ifdim \rawfont_scaling=\p@ \else
\out_line{(DESIGNUNITS~\vpl_real\rawfont_scaling)}
\fi
\fi
}
\newtoks\family_toks
\def\installfonts{
\bgroup
\global\family_toks={}
\gdef\prev_file_list{}
\global\let\setsomething_global=\global
}
\def\installfamily#1#2#3{
\global\family_toks=
\expandafter{\the\family_toks\fd_family{#1}{#2}{#3}}
\global\x_cs\let{#1-#2}\empty_command
}
\def\installfont#1#2#3#4#5#6#7#8{
\global\let\setsomething_global=\x_relax
\input_metrics{}{#2}
\etxtovpl{#3}{#1}
\installfontas{#1}{#4}{#5}{#6}{#7}{#8}
\global\let\setsomething_global=\global
}
\def\installrawfont#1#2#3#4#5#6#7#8{
\global\let\setsomething_global=\x_relax
\xdef\out_filename{#1}
\input_metrics{\let\storemapdata=\installraw_storemap}{#2}
\let\storemapdata=\gobble_three
\etxtopl{#3}{#1}
\record_usage{#1}
\installfontas{
\ifdim \rawfont_scaling=\p@ \else
[\expandafter\lose_measure\the\rawfont_scaling]~
\fi #1
}{#4}{#5}{#6}{#7}{#8}
\global\let\setsomething_global=\global
}
\def\installraw_storemap#1#2#3{
\def\a_macro{#1}
\ifx \a_macro\out_filename \else
\record_transform{\out_filename}{\string\frommtx{#1}}{}\if_false
\fi
}
\def\input_metrics#1#2{
\let\metrics=\file_list_metrics
\xdef\curr_file_list{#2,}
\let\metrics=\x_relax
\ifx\prev_file_list\curr_file_list\else
\egroup\bgroup
#1
\expandafter\process_csep_list \expandafter\input_mtx_file
\curr_file_list\process_csep_list,
\global\let\prev_file_list=\curr_file_list
\fi
}
\def\file_list_metrics#1,{
\iffalse{\fi}
\a_toks=\expandafter{\curr_file_list\x_relax#1,}
\xdef\curr_file_list{\the\a_toks \iffalse}\fi
}
\def\installfontas#1#2#3#4#5#6{
\if_undefined{#2-#3-#4-#5}\then
\let\do_shape=\x_relax
\if_undefined{#2-#3}\then
\x_cs\let{#2-#3}\empty_command
\autoinstallfamily{#2}{#3}
\fi
\x_cs\xdef{#2-#3}{
\csname#2-#3\endcsname
\do_shape{#2}{#3}{#4}{#5}
}
\fi
\let\do_size=\x_relax
\x_cs\xdef{#2-#3-#4-#5}{
\if_defined{#2-#3-#4-#5}\then
\csname#2-#3-#4-#5\endcsname
\fi
\do_size{#6}{#1}
}
}
\def\autoinstallfamily#1#2{\installfamily{#1}{#2}{}}
\def\endinstallfonts{
\global\let\setsomething_global=\x_relax
\let\do_shape=\fd_shape
\let\do_size=\fd_size
\the\family_toks
\global\family_toks{}
\egroup
}
\def\input_mtx_file#1{
\reset_modifiers_hook
\ifx\x_relax#1\x_relax
\else
\identity_one{\get_file_name #1~}~\par
\ifx \pl_encoding\empty_command
\fromany\file_name
\else
\metrics_given_encoding{\file_name}{\pl_encoding}
\fi
\ifisstr{afm-name}\then
\inputmtx{\str{afm-name}}
\else
\fontinsterror{\string\install...}{
Font/MTX~file~\file_name\space not~found
}{
You~can~insert~an~\string\inputmtx\space command~here
\messagebreak to~input~some~other~MTX~file~instead.
\ifisint{rawscale}\then \messagebreak
The~requested~raw~scaling~will~then~be~applied~on~that.
\fi
}
\fi
\fi
}
\def\metrics_given_encoding#1#2{
\x_cs\edef{s-afm-name}{#1-#2}
\if_file_exists{#1.pl}\then
\generalpltomtx{#1}{#1-#2}{pl}{#2}
\else
\if_file_exists{#1.vpl}\then
\generalpltomtx{#1}{#1-#2}{vpl}{#2}
\else
\unsetstr{afm-name}
\fi\fi
}
\def\reset_modifiers_hook{
\unsetint{rawscale}
\let\glyph_name_modifier\identity_one
\let\pl_encoding\empty_command
\let\list_of_options\empty_command
}
\def\get_file_name #1~{
\edef\file_name{#1}
\get_keyword
}
\def\get_keyword #1~{
\if_defined{IFKW-#1}\then
\csname IFKW-#1 \expandafter\endcsname
\else
\fontinsterror{\string\install...}{
`#1'~is~not~a~defined~keyword
}{
\error_help_a\messagebreak
Extra~tokens~will~be~flushed.
}
\expandafter\gobble_keywords
\fi
}
\def\gobble_keywords#1\par{}
\x_cs\let{IFKW-}=\gobble_keywords
\x_cs\def{IFKW-scaled}#1~{
\ifnum #1=\one_thousand
\unsetint{rawscale}
\else
\x_resetint{rawscale}{#1}
\fi
\get_keyword
}
\x_cs\def{IFKW-suffix}#1~{
\def\glyph_name_modifier##1{##1#1}
\get_keyword
}
\x_cs\def{IFKW-encoding}#1~{
\def\pl_encoding{#1}
\get_keyword
}
\let\pl_encoding=\empty_command
\x_cs\def{IFKW-option}#1~{
\add_to\list_of_options{\do{#1}}
}
\def\ifoption#1\then{
\_a_false
\edef\a_macro{#1}
\def\do##1{
\if_a_ \else
\def\b_macro{##1}
\ifx \a_macro\b_macro \_a_true \fi
\fi
}
\list_of_options
\if_a_
}
\let\list_of_options\empty_command
\def\fd_family#1#2#3{
\a_toks{#3}
\edef\lowercase_file{\lowercase{
\edef\noexpand\lowercase_file{#1#2.fd}}}
\lowercase_file
\open_out{\lowercase_file}
\out_line{\percent_char~Filename:~\lowercase_file}
\out_line{\percent_char~Created~by:~tex~\jobname}
\out_line{\percent_char~Created~using~fontinst~v\fontinstversion}
\out_line{}
\out_line{\percent_char~THIS~FILE~SHOULD~BE~PUT~IN~A~TEX~INPUTS~
DIRECTORY}
\out_line{}
\out_line{\string\ProvidesFile{\lowercase_file}}
\out_lline{[
\the\year/
\ifnum10>\month0\fi\the\month/
\ifnum10>\day0\fi\the\day\space
Fontinst~v\fontinstversion\space
font~definitions~for~#1/#2.
]}
\out_line{}
\out_line{\string\DeclareFontFamily{#1}{#2}{\the\a_toks}}
{
\csname #1-#2\endcsname
\out_line{}
\let\do_shape=\substitute_shape
\csname #1-#2\endcsname
\let\do_shape=\remove_shape
\csname #1-#2\endcsname
}
\x_cs\g_let{#1-#2}\x_relax
\out_line{}
\out_line{\string\endinput}
\close_out{Font~definitions}
}
\def\fd_shape#1#2#3#4{
\out_line{}
\out_line{\string\DeclareFontShape{#1}{#2}{#3}{#4}\left_brace_char}
\csname #1-#2-#3-#4\endcsname
\x_cs\g_let{#1-#2-#3-#4}\empty_command
\out_line{\right_brace_char{}}
}
\def\fd_size#1#2{
\x_cs\ifx{siz-#1}\x_relax
\out_lline{#1~#2}
\else
\out_lline{\csname siz-#1\endcsname\space #2}
\fi
}
\def\remove_shape#1#2#3#4{
\x_cs\g_let{#1-#2-#3-#4}\x_relax
}
\def\substitute_shape#1#2#3#4{
\edef\orig_shape{#4}
\substitute_series{#1}{#2}{#3}{\orig_shape}
\x_cs\ifx{sub-\orig_shape}\x_relax\else
\edef\subst_shape{\csname sub-\orig_shape\endcsname}
\x_cs\ifx{#1-#2-#3-\subst_shape}\x_relax
\out_line{
\string\DeclareFontShape{#1}{#2}{#3}{\subst_shape}{
<->\csname typ-\orig_shape\endcsname\space
*~#2/#3/\orig_shape
}{}
}
\x_cs\let{#1-#2-#3-\subst_shape}\empty_command
\substitute_shape{#1}{#2}{#3}{\subst_shape}
\fi
\fi
}
\def\substitute_series#1#2#3#4{
\edef\orig_series{#3}
\x_cs\ifx{sub-\orig_series}\x_relax\else
\edef\subst_series{\csname sub-\orig_series\endcsname}
\x_cs\ifx{#1-#2-\subst_series-#4}\x_relax
\out_line{
\string\DeclareFontShape{#1}{#2}{\subst_series}{#4}{
<->\csname typ-\orig_series\endcsname\space
*~#2/\orig_series/#4
}{}
}
\x_cs\let{#1-#2-\subst_series-#4}\empty_command
\substitute_series{#1}{#2}{\subst_series}{#4}
\fi
\fi
}
\def\substitutesilent#1#2{
\x_cs\def{sub-#2}{#1}
\x_cs\def{typ-#2}{ssub}
}
\def\substitutenoisy#1#2{
\x_cs\def{sub-#2}{#1}
\x_cs\def{typ-#2}{sub}
}
\substitutesilent{bx}{b}
\substitutesilent{b}{bx}
\substitutesilent{b}{sb}
\substitutesilent{b}{db}
\substitutesilent{m}{mb}
\substitutesilent{m}{l}
\substitutenoisy{ui}{it}
\substitutesilent{sl}{it}
\substitutesilent{it}{sl}
\def\declareencoding#1#2{\x_cs\edef{enc-#1}{#2}}
\declareencoding{TEX~TEXT}{ot1}
\declareencoding{TEX~TEXT~WITHOUT~F-LIGATURES}{ot1}
\declareencoding{TEX~TYPEWRITER~TEXT}{ot1tt}
\declareencoding{TEX~MATH~ITALIC}{oml}
\declareencoding{TEX~MATH~SYMBOLS}{oms}
\declareencoding{TEX~MATH~EXTENSION}{omx}
\declareencoding{LATEX~SYMBOLS}{lasy}
\declareencoding{TEX~TEXT~SUBSET}{eufrak}
\declareencoding{TEX~MATH~ITALIC~SUBSET}{eurm}
\declareencoding{TEX~MATH~SYMBOLS~SUBSET}{euscr}
\declareencoding{EULER~SUBSTITUTIONS~ONLY}{euex}
\declareencoding{EXTENDED~TEX~FONT~ENCODING~-~LATIN}{t1}
\declareencoding{TEX~TEXT~COMPANION~SYMBOLS~1---TS1}{ts1}
\declareencoding{TEXBASE1ENCODING}{8r}
\declareencoding{TEX~TYPEWRITER~AND~WINDOWS~ANSI}{8y}
\def\declaresize#1#2{\x_cs\edef{siz-#1}{#2}}
\declaresize{}{<->}
\declaresize{5}{<5>}
\declaresize{6}{<6>}
\declaresize{7}{<7>}
\declaresize{8}{<8>}
\declaresize{9}{<9>}
\declaresize{10}{<10>}
\declaresize{11}{<10.95>}
\declaresize{12}{<12>}
\declaresize{14}{<14.4>}
\declaresize{17}{<17.28>}
\declaresize{20}{<20.74>}
\declaresize{25}{<24.88>}
\def\NOFILES{
\def\transformfont##1##2{
\touch_file{##1.mtx}
\touch_file{##1.pl}
}
\def\reglyphfont##1##2{\touch_file{##1.mtx}}
\def\installfonts{}
\def\endinstallfonts{}
\def\installfont##1##2##3##4##5##6##7##8{
\touch_file{##1.vpl}
}
\def\installrawfont##1##2##3##4##5##6##7##8{
\touch_file{##1.pl}
}
\def\installfamily##1##2##3{\touch_file{##1##2.fd}}
}
\def\touch_file#1{
\edef\lowercase_file{\lowercase{
\edef\noexpand\lowercase_file{#1}}}
\lowercase_file
\open_out{\lowercase_file}
\out_line{\percent_char~TEST~FILE.}
\out_line{\percent_char~Created~whilst~debugging~fontinst.}
\close_out{Test~file}
}
%%% From file: ficonv.dtx
\def\afmtomtx#1#2{{
\let\setsomething_global=\x_relax
\open_out{\temp_prefix#2.mtx}
\edef\raw_font_name{#2}
\edef\source_font_name{#1}
\x_resetint{italicslant}{0}
\let\italcorr_expression=\uprightitalcorr
\x_setint{minimumkern}{0}
\minimum_kern=\int{minimumkern}
\out_line{\percent_char~Filename:~#2.mtx}
\out_line{\percent_char~Created~by:~tex~\jobname}
\out_line{\percent_char~Created~using:~\string\afmtomtx{#1}{#2}}
\out_line{}
\out_line{\percent_char~This~file~contains~the~
information~of~#1.afm~in~a~form}
\out_line{\percent_char~more~easily~read~by~TeX.~
It~is~used~by~the~fontinst~package.}
\out_line{}
\out_line{\percent_char~THIS~FILE~CAN~BE~DELETED.}
\out_line{}
\out_line{\string\relax}
\out_line{\string\metrics}
\out_line{}
\out_line{\string\needsfontinstversion{\fontinstversion}}
\out_line{}
\catcode`\^^M=12
\catcode`\ =10
\expandafter\afm_line\primitiveinput #1.afm\x_relax
\out_line{}
\out_line{\endmetrics_text}
\close_out{Metrics}
}}
\newcount\minimum_kern
\def\afm_length#1#2{
\a_dimen=#2\afm_unit_dimen
#1=\a_dimen
\divide #1 by \afm_unit_dimen
\advance \a_dimen by -#1\afm_unit_dimen
\ifdim \a_dimen>0.5\afm_unit_dimen
\advance #1 by 1
\else \ifdim \a_dimen<-0.5\afm_unit_dimen
\advance #1 by -1
\fi\fi
\x_relax
}
\newdimen\afm_unit_dimen
\afm_unit_dimen=1000sp
{\catcode`\^^M=12 \gdef\afm_line#1
{\afm_command#1~\end_of_line\afm_line}}
\def\afm_command#1~{\csname~afm-#1\endcsname\gobble_one_line}
\def\gobble_one_line#1\end_of_line{}
\x_cs\def{afm-EndFontMetrics}#1\afm_line{\endinput}
\def\afm_def#1(#2)#3{\x_cs\def{afm-#1}
\gobble_one_line#2\end_of_line{#3}}
\def\afm_let#1#2{
\expandafter\let \csname afm-#1\expandafter\endcsname
\csname afm-#2\endcsname
}
\afm_def{CharWidth}(#1){\afm_length\char_x_width{#1}}
\afm_def{ItalicAngle}(#1~){\calculate_it_slant{#1}}
\afm_def{XHeight}(#1){
\afm_length\a_count{#1}
\out_line{\string\setint{xheight}{\the\a_count}}}
\afm_def{CapHeight}(#1){
\afm_length\a_count{#1}
\out_line{\string\setint{capheight}{\the\a_count}}}
\afm_def{Ascender}(#1){
\afm_length\a_count{#1}
\out_line{\string\setint{ascender}{\the\a_count}}}
\afm_def{Descender}(#1){
\afm_length\a_count{#1}
\out_line{\string\setint{descender_neg}{\the\a_count}}}
\afm_def{UnderlineThickness}(#1){
\afm_length\a_count{#1}
\out_line{\string\setint{underlinethickness}{\the\a_count}}}
\afm_def{FontBBox}(#1~#2~#3~#4){
\afm_length\a_count{#4}
\out_line{\string\setint{maxheight}{\the\a_count}}
\afm_length\a_count{#2}
\out_line{\string\setint{maxdepth_neg}{\the\a_count}}}
\afm_def{StdVW}(#1){
\afm_length\a_count{#1}
\out_line{\string\setint{verticalstem}{\the\a_count}}}
\afm_def{IsFixedPitch}(#1){
\if\first_char#1=f
\else\out_line{\string\setint{monowidth}{1}}
\fi
}
\afm_def{FontName}(#1~){
\record_transform{\raw_font_name}
{\string\fromafm{\source_font_name}{#1}}{}\iftrue
}
\afm_def{KP}(#1~#2~#3~#4){
\if\first_char#1=.\else
\if\first_char#2=.\else
\afm_length\a_count{#3}
\ifnum \a_count>\minimum_kern
\out_line{\string\setkern{#1}{#2}{\the\a_count}}
\else\ifnum \a_count<-\minimum_kern
\out_line{\string\setkern{#1}{#2}{\the\a_count}}
\fi\fi
\fi\fi
}
\afm_let{KPX}{KP}
\afm_def{C}(#1~;#2){\init_afm{#1}\do_list[#2]\afm_char}
\afm_let{CH}{C}
\afm_def{CC}(#1~#2~;#3){\init_cc{#1}\do_list[#3]\cc_char}
\newcount\char_slot
\newcount\char_x_width
\newcount\x_width
\newcount\bbox_llx
\newcount\bbox_lly
\newcount\bbox_urx
\newcount\bbox_ury
\let\char_name=\empty_command
\def\init_afm#1{
\char_slot=#1\x_relax
\x_width=\char_x_width
\bbox_llx=0
\bbox_lly=0
\bbox_urx=0
\bbox_ury=0
\let\char_name=\empty_command
}
\def\afm_char{
\a_count=-\bbox_lly
\eval_expr{
\italcorr_expression\x_width\bbox_llx\bbox_urx\bbox_lly\bbox_ury
}
\out_line{
\ifnum -1<\char_slot
\string\setrawglyph
\else
\string\setnotglyph
\fi
{\char_name}
{\raw_font_name}
{10pt}
{\the\char_slot}
{\the\x_width}
{\the\bbox_ury}
{\the\a_count}
{\the\result}
}
}
\def\init_cc#1{%
\out_line{\string\setglyph{#1}}
\def\char_name{#1}
}
\def\cc_char{%
\out_lline{\string\samesize{\char_name-not}}
\out_line{\string\endsetglyph}
}
\def\uprightitalcorr#1#2#3#4#5{0}
\def\slanteditalcorr#1#2#3#4#5{\max{\sub{#3}{#1}}{0}}
\def\calculate_it_slant#1{
\edef\theangle{#1}
\CalculateTan{\theangle}
\a_dimen=-\one_thousand sp
\a_dimen=\UseTan{\theangle}\a_dimen
\a_count=\a_dimen
\out_line{\string\setint{italicslant}{\the\a_count}}
\x_resetint{italicslant}{\a_count}
\ifnum 0<\a_count
\let\italcorr_expression=\slanteditalcorr
\else
\let\italcorr_expression=\uprightitalcorr
\fi
}
\def\do_list[~#1~#2;~#3]{
\csname~list-#1\endcsname\gobble_one_semi#2;
\ifx\x_relax#3\x_relax\expandafter\gobble_one
\else\expandafter\identity_one\fi
{\do_list[~#3]}
}
\def\gobble_one_semi#1;{}
\def\list_def#1(#2)#3{\x_cs\def{list-#1}\gobble_one_semi#2~;{#3}}
\list_def{W}(#1~#2){\afm_length\x_width{#1}}
\list_def{WX}(#1){\afm_length\x_width{#1}}
\list_def{WY}(#1){}
\list_def{N}(#1){\def\char_name{#1}}
\list_def{B}(#1~#2~#3~#4){
\afm_length\bbox_llx{#1}
\afm_length\bbox_lly{#2}
\afm_length\bbox_urx{#3}
\afm_length\bbox_ury{#4}
}
\list_def{PCC}(#1~#2~#3){
\afm_length\a_count{#2}
\afm_length\b_count{#3}
\out_lline{\string\glyphpcc{#1}{\the\a_count}{\the\b_count}}
}
\def\generalpltomtx#1#2#3#4{{
\let\setsomething_global=\x_relax
\let\setfontdimen=\pl_setfontdimen
\if _#4_ \else
\def\do_slot{\x_cs\let{name-\the\slot_number}\slot_name}
\def\do_boundary{\x_cs\let{name-BOUNDARYCHAR}\slot_name}
\inputetx{#4}
\let\CODINGSCHEME=\ignore_parens
\fi
\pl_to_mtx{#1}{#2}{#3}{\string\generalpltomtx{#1}{#2}{#3}{#4}}
}}
\def\pltomtx#1#2{\generalpltomtx{#1}{#2}{pl}{}}
\def\pl_to_mtx#1#2#3#4{
\edef\raw_font_name{#1}
\open_out{\temp_prefix#2.mtx}
\out_line{\percent_char~Filename:~#2.mtx}
\out_line{\percent_char~Created~by:~tex~\jobname}
\out_line{\percent_char~Created~using:~#4}
\out_line{}
\out_line{\percent_char~This~file~contains~the~
information~of~#1.#3~in~a~form}
\out_line{\percent_char~more~easily~read~by~TeX.~
It~is~used~by~the~fontinst~package.}
\out_line{}
\out_line{\percent_char~THIS~FILE~CAN~BE~DELETED.}
\out_line{}
\out_line{\string\relax}
\out_line{\string\metrics}
\out_line{}
\out_line{\string\needsfontinstversion{\fontinstversion}}
\out_line{}
\lowercase{
\record_transform{#2}{
\string\from#3 \x_cs\ifx{from#3}\frompl {#1} \fi
}{}\iftrue
}
\out_line{}
\catcode`\(=0 \catcode`\)=9
\let\/=\ignore_parens
\let\do_pl_glyph=\x_relax
\primitiveinput #1.#3\x_relax
\do_pl_glyph
\out_line{}
\ifisint{\percent_char boundarychar}\then
\f_count=\int{\percent_char boundarychar}
\x_cs\ifx{name-\the\f_count}\x_relax \else
\out_line{\string\setstr{rightboundary}
{\csname name-\the\f_count\endcsname}
}
\out_line{}
\fi
\fi
\out_line{\endmetrics_text}
\close_out{Metrics}
}
\def\ignore_parens{\bgroup\catcode`(=1 \catcode`)=2 \x_relax
\expandafter\expandafter\expandafter\gobble_parens
\iftrue\expandafter{\else}\fi}
\def\gobble_parens#1{\egroup}
\def\pl_real#1{\pl_realer(#1000)}
\def\pl_realer(#1.#2#3#4#5){#1#2#3#4}
\def\pl_rounded_real(#1.#2#3#4#5){
\global\result=#1#2#3#4\relax
\ifnum \first_char#5= >4
\global\advance \result
\if - \first_char#1= \m at ne \else \@ne \fi
\fi
}
\def\pl_int#1#2{
\ifx#1C `#2
\else\ifx#1D #2
\else\ifx#1O '#2
\else\ifx#1H "#2
\else -1\errmessage{Unknown~PL~number~prefix~`#1'}
\fi\fi\fi\fi
}
\let\FAMILY=\ignore_parens
\let\FACE=\ignore_parens
\let\CHECKSUM=\ignore_parens
\def\HEADER~#1~#2~#3~#4~{}
\def\SEVENBITSAFEFLAG~#1~{}
\let\COMMENT=\ignore_parens
\let\LIG=\ignore_parens
\let\NEXTLARGER=\ignore_parens
\let\VARCHAR=\ignore_parens
\let\VTITLE=\ignore_parens
\let\MAPFONT=\ignore_parens
\let\MAP=\ignore_parens
\def\CODINGSCHEME{\bgroup\catcode`\)=12\x_relax\CODINGSCHEME_cont}
\def\CODINGSCHEME_cont#1){
\egroup
\if_undefined{enc-#1}\then
\errhelp{The~encoding~for~`#1'~has~not~been~declared.^^J
You~should~declare~it~with~
\string\declareencoding{#1}{ETXFILE}.^^J
Press~<RETURN>~to~carry~on~with~fingers~crossed,^^J
or~X~<RETURN>~to~exit.}
\errmessage{Undeclared~encoding~`#1'}
\else
\def\do_slot{\x_cs\let{name-\the\slot_number}\slot_name}
\def\do_boundary{\x_cs\let{name-BOUNDARYCHAR}\slot_name}
\catcode`\(=12 \catcode`\)=12
\x_cs\inputetx{enc-#1}\x_relax
\catcode`\(=0 \catcode`\)=9
\fi
}
\def\DESIGNSIZE~#1~#2~{
\a_dimen=#2pt
\out_line{\string\setdim{designsize}{\the\a_dimen}}
}
\def\DESIGNUNITS~#1~#2~{
\b_dimen=#2pt\x_relax
\ifdim 1pt=\b_dimen \else
\fontinsterror{PL-to-MTX}{Nondefault~unit~used~in~PL~file}
{You~may~continue,~but~the~metrics~for~this~font~will~be~wrong.}
\fi
\out_line{\string\setdim{designunits}{\the\b_dimen}}
}
\def\BOUNDARYCHAR~#1~#2~{
\x_setint{\percent_char boundarychar}{\pl_int{#1}{#2}}
}
\def\pl_setfontdimen#1#2{\x_cs\def{fdimen-#1}{#2}}
\def\PARAMETER~#1~#2~R~#3~{
\f_count=\pl_int{#1}{#2}\x_relax
\if_defined{fdimen-\the\f_count}\then
\pl_rounded_real(#3 0000)
\out_line{\string\setint{\csname fdimen-\the\f_count\endcsname}
{\the\result}}
\fi
}
\let\FONTDIMEN=\x_relax
\def\SLANT{\PARAMETER D~1~}
\pl_setfontdimen{1}{italicslant}
\def\SPACE{\PARAMETER D~2~}
\pl_setfontdimen{2}{interword}
\def\STRETCH{\PARAMETER D~3~}
\pl_setfontdimen{3}{stretchword}
\def\SHRINK{\PARAMETER D~4~}
\pl_setfontdimen{4}{shrinkword}
\def\XHEIGHT{\PARAMETER D~5~}
\pl_setfontdimen{5}{xheight}
\def\QUAD{\PARAMETER D~6~}
\pl_setfontdimen{6}{quad}
\def\EXTRASPACE{\PARAMETER D~7~}
\pl_setfontdimen{7}{extraspace}
\def\NUM#1~#2~#3~{
\ifcase #1\or
\PARAMETER D~8~#2~#3~
\or
\PARAMETER D~9~#2~#3~
\or
\PARAMETER D~10~#2~#3~
\fi
}
\def\DENOM#1~#2~#3~{
\ifcase #1\or
\PARAMETER D~11~#2~#3~
\or
\PARAMETER D~12~#2~#3~
\fi
}
\def\SUP#1~#2~#3~{
\ifcase #1\or
\PARAMETER D~13~#2~#3~
\or
\PARAMETER D~14~#2~#3~
\or
\PARAMETER D~15~#2~#3~
\fi
}
\def\SUB#1~#2~#3~{
\ifcase #1\or
\PARAMETER D~16~#2~#3~
\or
\PARAMETER D~17~#2~#3~
\fi
}
\def\SUPDROP{\PARAMETER D~18~}
\def\SUBDROP{\PARAMETER D~19~}
\def\AXISHEIGHT{\PARAMETER D~22~}
\def\DELIM#1~#2~#3~{
\ifcase #1\or
\PARAMETER D~20~#2~#3~
\or
\PARAMETER D~21~#2~#3~
\fi
}
\def\DEFAULTRULETHICKNESS{\PARAMETER D~8~}
\def\BIGOPSPACING#1~#2~#3~{
\ifcase #1\or
\PARAMETER D~9~#2~#3~
\or
\PARAMETER D~10~#2~#3~
\or
\PARAMETER D~11~#2~#3~
\or
\PARAMETER D~12~#2~#3~
\or
\PARAMETER D~13~#2~#3~
\fi
}
\def\LABEL~#1{\ifx #1B
\expandafter\LABEL_boundarychar
\else
\expandafter\LABEL_slot \expandafter#1
\fi
}
\def\LABEL_slot #1~#2~{
\f_count=\pl_int{#1}{#2}
\edef\a_macro{\a_macro
\x_cs\do_if_defined{name-\the\f_count}
}
}
\def\LABEL_boundarychar OUNDARYCHAR{
\edef\a_macro{\a_macro
\x_cs\do_if_defined{name-BOUNDARYCHAR}
}
}
\def\do_if_defined#1{\ifx #1\x_relax \else \do{#1} \fi}
\def\LIGTABLE{\let\do=\never_do\let\a_macro\empty_command}
\def\STOP{\let\a_macro\empty_command}
\def\SKIP~#1~#2~{\immediate\write16{Warning:~SKIP~instruction~ignored.}}
\def\KRN~#1~#2~R~#3~{
\pl_rounded_real(#3 0000)
\edef\do{\noexpand\write_pl_krn{\pl_int{#1}{#2}}{\the\result}}
\a_macro
\let\do=\never_do
}
\def\write_pl_krn#1#2#3{
\f_count=#1\x_relax
\x_cs\ifx{name-\the\f_count}\x_relax \else
\out_line{\string\setkern{#3}
{\csname name-\the\f_count\endcsname}{#2}
}
\fi
}
\def\CHARWD~R~#1~{\pl_rounded_real(#1 0000) \b_count=\result}
\def\CHARHT~R~#1~{\pl_rounded_real(#1 0000) \c_count=\result}
\def\CHARDP~R~#1~{\pl_rounded_real(#1 0000) \d_count=\result}
\def\CHARIC~R~#1~{\pl_rounded_real(#1 0000) \e_count=\result}
\def\CHARACTER~#1~#2~{
\do_pl_glyph
\a_count=\pl_int{#1}{#2}
\b_count=0
\c_count=0
\d_count=0
\e_count=0
\let\do_pl_glyph=\write_pl_glyph
}
\def\write_pl_glyph{
\x_cs\ifx{name-\the\a_count}\x_relax\else
\out_line{\string\setrawglyph
{\csname~name-\the\a_count\endcsname}
{\raw_font_name}
{\the\a_dimen}
{\the\a_count}
{\the\b_count}
{\the\c_count}
{\the\d_count}
{\the\e_count}}
\fi
}
\def\mtxtopl#1#2{{
\let\setsomething_global=\x_relax
\open_out{#2.pl}
\top_of_pl_hook
\out_line{(COMMENT~raw~font~#2~created~by~fontinst~
v\fontinstversion)}
\out_line{}
\out_line{(COMMENT~Filename:~#2.pl)}
\out_line{(COMMENT~Created~by:~tex~\jobname)}
\out_line{(COMMENT~Created~using:~\string\mtxtopl{#1}{#2})}
\out_line{}
\out_line{(COMMENT~This~file~can~be~turned~into~
a~ligless~TeX~font~with)}
\out_line{(COMMENT~pltotf~#2.pl~#2.tfm)}
\out_line{}
\out_line{(COMMENT~THIS~FILE~CAN~THEN~BE~DELETED.)}
\out_line{}
\out_line{(DESIGNSIZE~R~10.0)}
\out_line{}
\let\setglyph=\iffalse
\let\endsetglyph=\fi
\let\setkern=\gobble_three
\let\setscaledrawglyph=\first_pl_raw_glyph
\def\setscalednotglyph##1##2##3##4##5##6##7##8##9{}
\inputmtx{#1}
\out_line{}
\out_line{(COMMENT~END~OF~FILE~#2.pl)}
\close_out{Raw~font}
}}
\def\first_pl_raw_glyph#1#2#3#4{
\out_line{(DESIGNUNITS~R~\make_factor{#4})}
\let\setscaledrawglyph=\pl_raw_glyph
\pl_raw_glyph{#1}{#2}{#3}{#4}
}
\def\pl_raw_glyph#1#2#3#4#5#6#7#8#9{
\out_line{(CHARACTER~D~\number#5~\space(COMMENT~#1)}
\out_lline{(CHARWD~R~\make_factor{#6})}
\out_lline{(CHARHT~R~\make_factor{#7})}
\out_lline{(CHARDP~R~\make_factor{#8})}
\out_lline{(CHARIC~R~\make_factor{#9})}
\out_lline{)}
}
\def\transformfont#1#2{{
\let\setsomething_global=\x_relax
\unsetstr{afm-name}
\unsetstr{etx-name}
\x_resetint{x-scale}{\one_thousand}
\x_resetint{y-scale}{\one_thousand}
\x_resetint{slant-scale}{0}
#2
\ifisstr{afm-name}\then
\mtxtomtx{\str{afm-name}}{#1}
\mtxtopl{#1}{#1}
\else
\fontinsterror{Transformfont}{
Failed~to~make~transformed~font~#1;\messagebreak
source~font~metrics~file~not~found
}\error_help_a
\fi
}}
\def\fromafm#1{
\if_file_exists{#1.afm}\then
\x_setstr{afm-name}{#1}
\afmtomtx{#1}{#1}
\mtxtopl{#1}{#1}
\fi
}
\def\frommtx#1{
\if_file_exists{#1.mtx}\then \x_setstr{afm-name}{#1} \fi
}
\def\frompl#1{
\if_file_exists{#1.pl}\then
\x_setstr{afm-name}{#1}
\generalpltomtx{#1}{#1}{pl}{}
\fi
}
\def\fromplgivenetx#1#2{
\if_file_exists{#1.pl}\then
\x_setstr{afm-name}{#1}
\generalpltomtx{#1}{#1}{pl}{#2}
\fi
}
\def\fromany#1{
\x_cs\edef{s-afm-name}{#1}
\if_file_exists{#1.mtx}\then\else
\if_file_exists{#1.pl}\then
\generalpltomtx{#1}{#1}{pl}{}
\else
\if_file_exists{#1.afm}\then
\afmtomtx{#1}{#1}
\mtxtopl{#1}{#1}
\else
\if_file_exists{#1.vpl}\then
\generalpltomtx{#1}{#1}{vpl}{}
\else
\unsetstr{afm-name}
\fi\fi\fi\fi
}
\def\scalefont#1#2{
\eval_expr_to\d_count{#1}
\x_resetint{x-scale}{\scale{\d_count}{\int{x-scale}}}
\x_resetint{y-scale}{\scale{\d_count}{\int{y-scale}}}
\x_resetint{slant-scale}{\scale{\d_count}{\int{slant-scale}}}
#2
}
\def\xscalefont#1#2{
\x_resetint{x-scale}{\scale{#1}{\int{x-scale}}}
#2
}
\def\yscalefont#1#2{
\eval_expr_to\d_count{#1}
\x_resetint{y-scale}{\scale{\d_count}{\int{y-scale}}}
\x_resetint{slant-scale}{\scale{\d_count}{\int{slant-scale}}}
#2
}
\def\slantfont#1#2{
\x_resetint{slant-scale}{
\add{\scale{#1}{\int{x-scale}}}{\int{slant-scale}}
}
#2
}
\def\reencodefont#1#2{
#2
\resetstr{etx-name}{#1}
}
\def\mtxtomtx#1#2{{
\ifisstr{etx-name}\then
\def\do_slot{\x_cs\edef{slots-\slot_name}{\the\slot_number}}
\directfalse
\inputetx{\str{etx-name}}
\edef\a_macro{\string\reencodefont{\str{etx-name}}}
\else
\let\a_macro=\empty_command
\fi
\_a_true
\ifnum \int{x-scale}=\int{y-scale}
\ifnum \int{slant-scale}=\z@
\_a_false
\fi \fi
\if_a_
\a_count=\int{x-scale}
\l_inv_scale\a_count{\int{y-scale}}
\b_count=\int{slant-scale}
\l_inv_scale\b_count{\int{y-scale}}
\edef\a_macro{\a_macro
\string\transformfont{\the\a_count}{\the\b_count}
}
\fi
\open_out{\temp_prefix#2.mtx}
\edef\raw_font_name{#2}
\out_line{\percent_char~Filename:~#2.mtx}
\out_line{\percent_char~Created~by:~tex~\jobname}
\out_line{\percent_char~Created~using:~\string\mtxtomtx{#1}{#2}}
\out_line{}
\out_line{\percent_char~This~file~is~used~by~the~fontinst~package.}
\out_line{}
\out_line{\percent_char~THIS~FILE~CAN~BE~DELETED.}
\out_line{}
\out_line{\string\relax}
\out_line{\string\metrics}
\out_line{}
\out_line{\string\needsfontinstversion{\fontinstversion}}
\out_line{}
\record_transform{#2}{\string\frommtx{#1}}{\a_macro}\iftrue
\out_line{}
\mtxtomtx_redefinitions
\inputmtx{#1}
\out_line{}
\out_line{\endmetrics_text}
\close_out{Transformed~metrics}
}}
\def\mtxtomtx_redefinitions{
\let\setint=\mtxtomtx_setint
\let\setdim=\mtxtomtx_setdim
\let\setstr=\mtxtomtx_setstr
\let\setscaledrawglyph=\mtxtomtx_setscaledrawglyph
\let\setscalednotglyph=\mtxtomtx_setscaledrawglyph
\let\setkern=\mtxtomtx_setkern
\let\setglyph=\mtxtomtx_setglyph
\let\glyphpcc=\mtxtomtx_glyphpcc
\let\samesize=\mtxtomtx_samesize
\let\endsetglyph=\mtxtomtx_endsetglyph
\def\aliased{\string\aliased}
}
\let\aliased=\second_of_two
\def\mtxtomtx_setint#1#2{
\def\a_macro{#1}
\ifx \a_macro\italicslant_name
\eval_expr{#2}
\global\multiply \result \int{x-scale}
\a_count=\int{slant-scale}
\multiply \a_count \one_thousand
\advance \a_count \result
\divide \a_count \int{y-scale}\x_relax
\else
\def\do##1{
\def\b_macro{##1}
\ifx \a_macro\b_macro \expandafter\if_false \fi
}
\gobble_one\iftrue \width_ints_list \if_true
\eval_expr_to\a_count{\scale{#2}{\int{y-scale}}}
\else
\eval_expr_to\a_count{\scale{#2}{\int{x-scale}}}
\fi
\fi
\out_line{\string\setint{#1}{\the\a_count}}
}
\def\italicslant_name{italicslant}
\def\width_ints_list{
\do{interword}\do{stretchword}\do{shrinkword}\do{quad}
\do{extraspace}\do{digitwidth}\do{verticalstem}
}
\def\mtxtomtx_setdim#1#2{
\out_line{\string\setdim{#1}{#2}}
}
\def\mtxtomtx_setstr#1#2{
\out_line{\string\setstr{#1}{#2}}
}
\def\mtxtomtx_setscaledrawglyph#1#2#3#4#5#6#7#8#9{
\eval_expr_to\a_count{\scale{#6}{\int{x-scale}}}
\eval_expr_to\b_count{\scale{#7}{\int{y-scale}}}
\eval_expr_to\c_count{\scale{#8}{\int{y-scale}}}
\eval_expr_to\d_count{#9} \eval_expr{#7}
\multiply \d_count \int{x-scale}
\global\multiply \result \int{slant-scale}
\global\advance \result \d_count
\rounded_thousandths
\d_count=\result
\eval_expr{\scale{#4}{\int{y-scale}}}
\ifisstr{etx-name}\then
\bgroup
\let\aliased=\first_of_two
\if_undefined{slots-#1}\then
\egroup \e_count=\m at ne
\else
\expandafter\egroup \expandafter\e_count
\csname slots-#1\endcsname
\fi
\else
\e_count=#5
\fi
\out_line{
\ifnum \e_count>\m at ne
\string\setscaledrawglyph
\else
\string\setscalednotglyph
\fi
{#1}{\raw_font_name}{#3}{\the\result}{\the\e_count}
{\the\a_count}{\the\b_count}{\the\c_count}{\the\d_count}
}
}
\def\mtxtomtx_setkern#1#2#3{
\eval_expr{\scale{\int{x-scale}}{#3}}
\out_line{\string\setkern{#1}{#2}{\the\result}}
}
\def\mtxtomtx_setglyph#1{\out_line{\string\setglyph{#1}}}
\def\mtxtomtx_samesize#1{\out_lline{\string\samesize{#1}}}
\def\mtxtomtx_endsetglyph{\out_line{\string\endsetglyph}}
\def\mtxtomtx_glyphpcc#1#2#3{
\eval_expr_to\b_count{\scale{\int{y-scale}}{#3}}
\eval_expr_to\a_count{#2} \eval_expr{#3}
\multiply \a_count \int{x-scale}
\global\multiply \result \int{slant-scale}
\global\advance \result \a_count
\rounded_thousandths
\out_lline{\string\glyphpcc{#1}{\the\result}{\the\b_count}}
}
\def\reglyphfonts{
\begingroup
\let\setsomething_global=\x_relax
\x_setint{renameweight}{1}
\x_setint{killweight}{-10}
\setcommand\iftokeep##1\then{\ifnum -1<##1}
}
\def\endreglyphfonts{\endgroup}
\def\offmtxcommand#1{
\x_cs\offcommand{reglyph_\expandafter\gobble_one\string#1}
}
\def\onmtxcommand#1{
\x_cs\oncommand{reglyph_\expandafter\gobble_one\string#1}
}
\begingroup
\catcode`\-=11
\gdef\renameglyph#1#2{
\x_cs\edef{slots-#2}{
\noexpand\rename_glyph{#1}\noexpand\i-renameweight
}
}
\endgroup
\def\renameglyphweighted#1#2#3{
\eval_expr{#3}
\x_cs\edef{slots-#2}{\noexpand\rename_glyph{#1}{\the\result}}
}
\begingroup
\catcode`\-=11
\gdef\killglyph#1{
\x_cs\def{slots-#1}{\kill_glyph\i-killweight}
}
\endgroup
\def\killglyphweighted#1#2{
\eval_expr{#2}
\x_cs\edef{slots-#1}{\noexpand\kill_glyph{\the\result}}
}
\def\reglyphfont#1#2{
\fromany{#2}
\ifisstr{afm-name}\then
\reglyph_font{#1}{#2}
\else
\fontinsterror{Reglyph}{Could~not~find~font~metrics~for~#2.}
\error_help_a
\fi
}
\def\reglyph_font#1#2{{
\open_out{\temp_prefix#1.mtx}
\out_line{\percent_char~Filename:~#1.mtx}
\out_line{\percent_char~Created~by:~tex~\jobname}
\out_line{\percent_char~Created~using:~\string\reglyphfont{#1}{#2}}
\out_line{}
\out_line{\percent_char~This~file~is~used~by~the~fontinst~package.}
\out_line{}
\out_line{\percent_char~THIS~FILE~CAN~BE~DELETED.}
\out_line{}
\out_line{\string\relax}
\out_line{\string\metrics}
\out_line{}
\out_line{\string\needsfontinstversion{\fontinstversion}}
\out_line{}
\record_transform{#1}{\string\frommtx{#2}}{\string\reglyphfont}
\iftrue
\out_line{}
\reglyph_redefinitions
\inputmtx{#2}
\out_line{}
\out_line{\endmetrics_text}
\close_out{Reglyphed~metrics}
}}
\def\reglyph_redefinitions{
\let\setint=\reglyph_setint
\let\setdim=\reglyph_setdim
\let\setstr=\reglyph_setstr
\let\setscaledrawglyph=\reglyph_setscaledrawglyph
\let\setscalednotglyph=\reglyph_setscaledrawglyph
\let\setkern=\reglyph_setkern
\let\setglyph=\reglyph_setglyph
\let\glyphpcc=\reglyph_glyphpcc
\let\samesize=\reglyph_samesize
\let\endsetglyph=\reglyph_endsetglyph
}
\def\reglyph_setint#1#2{\out_line{\string\setint{#1}{#2}}}
\def\reglyph_setdim#1#2{\out_line{\string\setdim{#1}{#2}}}
\def\reglyph_setstr#1#2{\out_line{\string\setstr{#1}{#2}}}
\newcount\command_survivance
\def\rename_glyph#1{\def\glyphname{#1}\kill_glyph}
\def\kill_glyph#1{\advance \command_survivance #1\x_relax}
\def\reglyph_setscaledrawglyph#1#2#3#4#5#6#7#8#9{
\command_survivance=0
\def\glyphname{#1}
\csname slots-#1\endcsname
\iftokeep\command_survivance\then
\out_line{
\ifnum #5<\z@
\string\setscalednotglyph
\else
\string\setscaledrawglyph
\fi
{\glyphname}{#2}{#3}{\number#4}{#5}{#6}{#7}{#8}{#9}
}
\fi
}
\def\reglyph_setkern#1#2#3{
\command_survivance=0
\def\glyphname{#1}
\csname slots-#1\endcsname
\let\a_macro=\glyphname
\def\glyphname{#2}
\csname slots-#2\endcsname
\iftokeep\command_survivance\then
\out_line{\string\setkern{\a_macro}{\glyphname}{#3}}
\fi
}
\def\reglyph_setglyph#1{
\command_survivance=0
\def\glyphname{#1}
\csname slots-#1\endcsname
\edef\a_macro{\noexpand\out_line{\string\setglyph{\glyphname}}}
\a_toks=\expandafter{\a_macro}
}
\x_cs\def{off-\string\reglyph_setglyph}#1{\gobble_glyph}
\def\reglyph_glyphpcc#1#2#3{
\def\glyphname{#1}
\csname slots-#1\endcsname
\edef\a_macro{\noexpand\out_lline{
\string\glyphpcc{\glyphname}{#2}{#3}
}}
\a_toks=\expandafter{\the\expandafter\a_toks \a_macro}
}
\def\reglyph_samesize#1{
\def\glyphname{#1}
\csname slots-#1\endcsname
\edef\a_macro{\noexpand\out_lline{
\string\samesize{\glyphname}
}}
\a_toks=\expandafter{\the\expandafter\a_toks \a_macro}
}
\def\reglyph_endsetglyph{
\iftokeep\command_survivance\then
\the\a_toks
\out_line{\string\endsetglyph}
\fi
\a_toks={}
}
%%% From file: filtfam.dtx
\def\latinfamily#1#2{{
\edef\a_macro{#1}
\expandafter\parse_family\a_macro
\empty_command\empty_command\end_parse_family
\installfonts
\if_file_exists{\raw_encoding.mtx}\then
\installfamily{\raw_encoding}{\latex_family}{#2}
\fi
\installfamily{OT1}{\latex_family}{#2}
\installfamily{T1}{\latex_family}{#2}
\installfamily{TS1}{\latex_family}{#2}
\latin_weights
\endinstallfonts
}}
\def\parse_family #1#2#3#4#5\end_parse_family{
\gdef\font_family{#1#2#3}
\gdef\font_variant{#4#5}
\gdef\raw_variant{#4#5}
\gdef\latex_family{#1#2#3#4#5}
\_expert_false
\_oldstyle_false
\ifx#4x
\_expert_true
\gdef\raw_variant{#5}
\gdef\font_variant{#5}
%\setcommand\digit##1{##1}
\else\ifx#4j
\_expert_true
\_oldstyle_true
\gdef\raw_variant{#5}
\gdef\font_variant{#5}
%\setcommand\digit##1{##1oldstyle}
\else\ifx#49
\gdef\latex_family{#1#2#3j#5}
\_expert_true
\_oldstyle_true
\gdef\raw_variant{#5}
\gdef\font_variant{#5}
%\setcommand\digit##1{##1oldstyle}
\else
\_expert_false
\_oldstyle_false
%\setcommand\digit##1{##1}
\fi\fi\fi
\if_oldstyle_
\immediate\write16{INFO>~parse~family~<#1#2#3><#5>~(oldstyle)}
\else\if_expert_
\immediate\write16{INFO>~parse~family~<#1#2#3><#5>~(expert)}
\else
\immediate\write16{INFO>~parse~family~<#1#2#3><#4#5>}
\fi\fi
}
\newif\if_expert_
\newif\if_oldstyle_
\def\latin_weight#1#2{
\gdef\font_weight{#1}%
\gdef\latex_weight{#2}%
\latin_widths
}
\def\latin_width#1#2{
\gdef\font_width{#1}
\gdef\latex_width{#2}
\latin_shapes
}
\def\latin_shape#1#2#3#4#5{
\gdef\font_shape{#1}
\gdef\raw_shape{#2}
\gdef\encoding_shape{#3}
\if_oldstyle_
\gdef\encoding_shape{#3\oldstyle_shape}
\fi
\gdef\latex_shape{#4}
\gdef\encoding_switches{#5}
\immediate\write16{
INFO>~to~make~LaTeX~font~shape~<\latex_family,
\latex_weight,\latex_shape,\latex_width>~seek~
\font_family\font_weight\raw_shape
\raw_variant\raw_encoding\font_width.mtx}
\csname fake_width_\font_width\endcsname
\csname fake_shape_\raw_shape\endcsname
\if_file_exists{
\font_family\font_weight\raw_shape
\raw_variant\raw_encoding\font_width.mtx
}\then
\latin_encodings
\fi
}
\def\fake_shape_{
\if_file_exists{
\font_family\font_weight\raw_shape\raw_variant
\adobe_encoding\font_width.afm
}\then
\fake_shape_raw_encoding
\fi
\if_expert_
\if_file_exists{
\font_family\font_weight\raw_shape\raw_variant
\expert_encoding\font_width.afm
}\then
\fake_shape_expert_encoding
\fi
\fi
}
\def\fake_shape_raw_encoding{
\if_file_exists{
\font_family\font_weight\raw_shape\raw_variant
\raw_encoding\font_width.mtx
}\then % no action required
\else
\immediate\write16{
INFO>~run~\string\transformfont\space\space
<\font_family\font_weight\raw_shape\raw_variant
\raw_encoding\font_width>~from~
<\font_family\font_weight\raw_shape\raw_variant
\adobe_encoding\font_width>
}
\transformfont{
\font_family\font_weight\raw_shape\raw_variant
\raw_encoding\font_width
}{
\reencodefont{\raw_encoding}{
\fromafm{
\font_family\font_weight\raw_shape\raw_variant
\adobe_encoding\font_width
}
}
}
\if_file_exists{ \raw_encoding.mtx }\then
\immediate\write16{
INFO>~run~\string\installrawfont\space
<\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width>
<\font_family\font_weight\raw_shape\raw_variant
\raw_encoding\font_width,
\raw_encoding>
<\raw_encoding>
<\raw_encoding>
<\latex_family>
<\latex_weight\latex_width>
<\latex_shape>}
\installrawfont{
\font_family\font_weight\raw_shape\raw_variant
\raw_encoding\font_width
}{ \font_family\font_weight\raw_shape\raw_variant
\raw_encoding\font_width,
\raw_encoding
}{ \raw_encoding
}{ \raw_encoding
}{ \latex_family
}{ \latex_weight\latex_width
}{ \latex_shape
}{}
\fi
\fi
}
\def\fake_shape_expert_encoding{
\if_file_exists{
\font_family\font_weight\raw_shape\raw_variant
\expert_encoding\font_width.mtx
}\then % no action required
\else
\fromafm{
\font_family\font_weight\raw_shape\raw_variant
\expert_encoding\font_width
}
\fi
}
\def\fake_shape_c{
\if_file_exists{
\font_family\font_weight\raw_shape\raw_variant
\adobe_encoding\font_width.afm
}\then
\fake_shape_
\else
% If real smallcaps font doesn't exist, fake it from the roman.
\gdef\raw_shape{}
\if_oldstyle_
\gdef\encoding_shape{cj}
\else
\gdef\encoding_shape{c}
\fi
\fake_shape_
\fi
}
\def\fake_shape_o{
\if_file_exists{
\font_family\font_weight\raw_shape\raw_variant
\adobe_encoding\font_width.afm
}\then
\fake_shape_
\else
\fake_shape_o_raw_encoding
\if_expert_
\fake_shape_o_expert_encoding
\fi
\fi
}
\def\fake_shape_o_raw_encoding{
\if_file_exists{
\font_family\font_weight\raw_variant
\raw_encoding\font_width.mtx
}\then
\if_file_exists{
\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width.mtx
}\then % no action required
\else
\immediate\write16{
INFO>~run~\string\transformfont\space\space
<\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width>~from~
<\font_family\font_weight\raw_variant
\raw_encoding\font_width>~(faking~oblique)
}
%%% WARNING: famtool.pl relies on this message format!!!
\immediate\write16{
Faking~oblique~font~
\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width
\space from~
\font_family\font_weight\raw_variant
\raw_encoding\font_width
}
\transformfont{
\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width
}{
\slantfont{\SlantAmount}{
\frommtx{
\font_family\font_weight\raw_variant
\raw_encoding\font_width
}
}
}
\if_file_exists{ \raw_encoding.mtx }\then
\immediate\write16{
INFO>~run~\string\installrawfont\space
<\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width>
<\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width,
\raw_encoding>
<\raw_encoding>
<\raw_encoding>
<\latex_family>
<\latex_weight\latex_width>
<\latex_shape>}
\installrawfont{
\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width
}{ \font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width,
\raw_encoding
}{ \raw_encoding
}{ \raw_encoding
}{ \latex_family
}{ \latex_weight\latex_width
}{ \latex_shape
}{}
\fi
\fi
\fi
}
\def\fake_shape_o_expert_encoding{
\if_file_exists{
\font_family\font_weight\raw_variant
\expert_encoding\font_width.mtx
}\then
\if_file_exists{
\font_family\font_weight\font_shape\raw_variant
\expert_encoding\font_width.mtx
}\then % no action required
\else
\immediate\write16{
INFO>~run~\string\transformfont\space\space
<\font_family\font_weight\font_shape\raw_variant
\expert_encoding\font_width>~from~
<\font_family\font_weight\raw_variant
\expert_encoding\font_width>~(faking~oblique)
}
%%% WARNING: famtool.pl relies on this message format!!!
\immediate\write16{
Faking~oblique~font~
\font_family\font_weight\font_shape\raw_variant
\expert_encoding\font_width
\space from~
\font_family\font_weight\raw_variant
\expert_encoding\font_width
}
\transformfont{
\font_family\font_weight\font_shape\raw_variant
\expert_encoding\font_width
}{
\slantfont{\SlantAmount}{
\frommtx{
\font_family\font_weight\raw_variant
\expert_encoding\font_width
}
}
}
\fi
\fi
}
\let\fake_shape_i\fake_shape_ % We must do this again!
\newif\if_fake_narrow_
\_fake_narrow_false
\def\fakenarrow#1{
\_fake_narrow_true
\gdef\fake_narrow_width{#1}
}
\def\fake_width_{}
\def\fake_width_c{}
\def\fake_width_n{
\if_fake_narrow_
\if_file_exists{
\font_family\font_weight\raw_shape\raw_variant
\adobe_encoding\font_width.afm
}\then % no action required
\else
\fake_width_n_raw_encoding
\if_expert_
\fake_width_n_expert_encoding
\fi
\fi
\fi
}
\def\fake_width_n_raw_encoding{
\if_file_exists{
\font_family\font_weight\font_shape\raw_variant
\raw_encoding.mtx
}\then
\if_file_exists{
\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width.mtx
}\then % no action required
\else
\immediate\write16{
INFO>~run~\string\transformfont\space\space
<\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width>~from~
<\font_family\font_weight\font_shape\raw_variant
\raw_encoding>~(faking~narrow)
}
%%% WARNING: famtool.pl relies on this message format!!!
\immediate\write16{
Faking~narrow~font~
\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width
\space from~
\font_family\font_weight\font_shape\raw_variant
\raw_encoding
}
\transformfont{
\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width
}{
\xscalefont{\fake_narrow_width}{
\frommtx{
\font_family\font_weight\font_shape\raw_variant
\raw_encoding
}
}
}
\if_file_exists{ \raw_encoding.mtx }\then
\immediate\write16{
INFO>~run~\string\installrawfont\space
<\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width>
<\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width,
\raw_encoding>
<\raw_encoding>
<\raw_encoding>
<\latex_family>
<\latex_weight\latex_width>
<\latex_shape>}
\installrawfont{
\font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width
}{ \font_family\font_weight\font_shape\raw_variant
\raw_encoding\font_width,
\raw_encoding
}{ \raw_encoding
}{ \raw_encoding
}{ \latex_family
}{ \latex_weight\latex_width
}{ \latex_shape
}{}
\fi
\fi
\fi
}
\def\fake_width_n_expert_encoding{
\if_file_exists{
\font_family\font_weight\font_shape\raw_variant
\expert_encoding.mtx
}\then
\if_file_exists{
\font_family\font_weight\font_shape\raw_variant
\expert_encoding\font_width.mtx
}\then % no action required
\else
\immediate\write16{
INFO>~run~\string\transformfont\space\space
<\font_family\font_weight\font_shape\raw_variant
\expert_encoding\font_width>~from~
<\font_family\font_weight\font_shape\raw_variant
\expert_encoding>~(faking~narrow)
}
%%% WARNING: famtool.pl relies on this message format!!!
\immediate\write16{
Faking~narrow~font~
\font_family\font_weight\font_shape\raw_variant
\expert_encoding\font_width
\space from~
\font_family\font_weight\font_shape\raw_variant
\expert_encoding
}
\transformfont{
\font_family\font_weight\font_shape\raw_variant
\expert_encoding\font_width
}{
\xscalefont{\fake_narrow_width}{
\frommtx{
\font_family\font_weight\font_shape\raw_variant
\expert_encoding
}
}
}
\fi
\fi
}
\def\latin_encoding#1#2#3#4#5{
\gdef\latex_encoding{#4}
\gdef\latex_mtx{#5}
\if_oldstyle_
\gdef\font_encoding{#3}
\else\if_expert_
\gdef\font_encoding{#2}
\else
\gdef\font_encoding{#1}
\fi\fi
\gdef\expert_font{}
\gdef\oldstyle_font{}
\if_expert_
\if_file_exists{
\font_family\font_weight\raw_shape\raw_variant
\expert_encoding\font_width.mtx
}\then
\gdef\expert_font{
\font_family\font_weight\raw_shape\raw_variant
\expert_encoding\font_width,
}
\fi
\fi
\immediate\write16{
INFO>~run~\string\installfont\space
<\font_family\font_weight\font_shape\font_variant
\font_encoding\font_width>
<\font_family\font_weight\raw_shape\raw_variant
\raw_encoding\font_width,
\if_oldstyle_
\ifx\raw_shape\caps_shape
resetosf,
\fi
\fi
\expert_font
\oldstyle_font
\latex_mtx>
<\latex_encoding\encoding_shape>
<\latex_encoding>
<\latex_family>
<\latex_weight\latex_width>
<\latex_shape>}
\installfont{
\font_family\font_weight\font_shape\font_variant
\font_encoding\font_width
}{
\font_family\font_weight\raw_shape\raw_variant
\raw_encoding\font_width,
\if_oldstyle_
\ifx\raw_shape\caps_shape
resetosf,
\fi
\fi
\expert_font
\oldstyle_font
\latex_mtx
}{
\latex_encoding\encoding_shape
}{
\latex_encoding
}{
\latex_family
}{
\latex_weight\latex_width
}{
\latex_shape
}{}
}
\def\latin_weights{
\latin_weight{r}{m}
\latin_weight{k}{m}
\latin_weight{b}{b}
\latin_weight{s}{sb}
\latin_weight{d}{db} % was {d}{sb}, SPQR changed
\latin_weight{m}{mb} % was {m}{m}, UV changed
\latin_weight{c}{eb} % UV added
\latin_weight{h}{eb} % UV added
\latin_weight{x}{eb}
\latin_weight{u}{ub}
\latin_weight{l}{l}
%\latin_weight{j}{el}
%\latin_weight{a}{ul} % UV added
}
\def\latin_widths{
\latin_width{}{}
\latin_width{n}{c}
%latin_width{c}{c}
%latin_width{x}{x}
}
\def\latin_shapes{
\latin_shape{} {} {} {n} {\_textcomp_true }
\latin_shape{c}{c}{} {sc}{\_textcomp_false}
\latin_shape{o}{o}{} {sl}{\_textcomp_true }
\latin_shape{i}{i}{i}{it}{\_textcomp_true }
}
\def\latin_encodings{
\latin_encoding{7t}{9t}{9o}{OT1}{newlatin}
\latin_encoding{8t}{9e}{9d}{T1} {newlatin}
\encoding_switches
\if_textcomp_
\latin_encoding{8c}{9c}{9c}{TS1}{textcomp}
\fi
}
\newif\if_textcomp_
\def\raw_encoding{8r}
\def\adobe_encoding{8a}
\def\expert_encoding{8x}
\def\caps_shape{c}
\def\oldstyle_shape{j}
\def\SlantAmount{167}
%%% From file: fimapgen.dtx
\def\mapfrags_subsystem{Map~fragments~writer}
\def\recordtransforms#1{\open_pout\transform_record_file{#1}}
\def\endrecordtransforms{
\close_pout\transform_record_file{Font~transformation~records}
}
\chardef\transform_record_file=\closed_stream
\let\storemapdata=\gobble_three
\def\record_transform#1#2#3#4{
\ifnum \transform_record_file=\closed_stream \else
\pout_line\transform_record_file{\string\storemapdata{#1}{#2}{#3}}
\fi
#4 \out_line{\string\storemapdata{#1}{#2}{#3}} \fi
}
\def\record_usage#1{
\ifnum \transform_record_file=\closed_stream \else
\pout_line\transform_record_file{\string\makemapentry{#1}}
\fi
}
%%% From file: fibasics.dtx
\def\needsfontinstversion#1{{
\a_dimen=#1pt
\b_dimen=\fontinstversion~pt\x_relax
\ifnum\a_dimen>\b_dimen
\immediate\write16{}
\immediate\write16{Warning:~This~file~needs~fontinst~version~#1.}
\immediate\write16{Warning:~You~are~using~version~
\fontinstversion.}
\immediate\write16{Warning:~This~may~cause~errors.}
\immediate\write16{}
\fi
}}
\if_file_exists{fontinst.rc}\then
\primitiveinput fontinst.rc
\else
\immediate\write16{No~file~fontinst.rc.}
\fi
\normalcc
\endinput
%%
%% End of file `fontinst.sty'.
More information about the tex-live
mailing list