diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/utilities/fontinst/inputs/base |
Initial commit
Diffstat (limited to 'fonts/utilities/fontinst/inputs/base')
-rw-r--r-- | fonts/utilities/fontinst/inputs/base/bbox.sty | 163 | ||||
-rw-r--r-- | fonts/utilities/fontinst/inputs/base/cfntinst.sty | 3688 | ||||
-rw-r--r-- | fonts/utilities/fontinst/inputs/base/finstmsc.sty | 1470 | ||||
-rw-r--r-- | fonts/utilities/fontinst/inputs/base/fontinst.ini | 97 | ||||
-rw-r--r-- | fonts/utilities/fontinst/inputs/base/fontinst.sty | 3676 | ||||
-rw-r--r-- | fonts/utilities/fontinst/inputs/base/multislot.sty | 234 | ||||
-rw-r--r-- | fonts/utilities/fontinst/inputs/base/xfntinst.sty | 3775 |
7 files changed, 13103 insertions, 0 deletions
diff --git a/fonts/utilities/fontinst/inputs/base/bbox.sty b/fonts/utilities/fontinst/inputs/base/bbox.sty new file mode 100644 index 0000000000..d06bc8f47c --- /dev/null +++ b/fonts/utilities/fontinst/inputs/base/bbox.sty @@ -0,0 +1,163 @@ + +% bbox.sty -- bounding box extension for fontinst +% +% This file defines the following commands for setting, resetting, +% and unsetting the bounding boxes of glyphs: +% +% \setglyphbb{GLYPH}{LEFT}{BOTTOM}{RIGHT}{TOP} +% \resetglyphbb{GLYPH}{LEFT}{BOTTOM}{RIGHT}{TOP} +% \unsetglyphbb{GLYPH} +% +% It also defines the following four integer expressions for +% quering bounding box metrics: +% +% \bbleft{GLYPH} +% \bbbottom{GLYPH} +% \bbright{GLYPH} +% \bbtop{GLYPH} +% +% For glyphs that do not have a bounding box set, they default +% to using the "TeX box" of the glyph. +% +% Finally, the file changes AFM-to-MTX conversions so that bounding +% box information is converted to \setglyphbb commands and augments +% font transformation and reglyphing to preserve this information. + + +\needsfontinstversion{1.927} + +\fontinstcc + +\def\resetglyphbb#1#2#3#4#5{ + \eval_expr_to\a_count{#2} + \eval_expr_to\b_count{#3} + \eval_expr_to\c_count{#4} + \eval_expr_to\d_count{#5} + \x_cs\edef{gb-#1}{ + {\the\a_count}{\the\b_count}{\the\c_count}{\the\d_count} + } +} +\def\setglyphbb#1#2#3#4#5{ + \if_undefined{gb-\glyph_name_modifier{#1}}\then + \resetglyphbb{\glyph_name_modifier{#1}}{#2}{#3}{#4}{#5} + \fi +} +\def\unsetglyphbb#1{\x_cs\let{gb-#1}=\x_relax} + +\def\first_of_four#1#2#3#4{#1} +\def\second_of_four#1#2#3#4{#2} +\def\third_of_four#1#2#3#4{#3} +\def\fourth_of_four#1#2#3#4{#4} + +\def\bbleft#1{ + \if_defined{gb-#1}\then + \expandafter\expandafter \expandafter\first_of_four + \csname gb-#1\endcsname + \else + 0 + \fi +} +\def\bbbottom#1{ + \if_defined{gb-#1}\then + \expandafter\expandafter \expandafter\second_of_four + \csname gb-#1\endcsname + \else + \neg{\depth{#1}} + \fi +} +\def\bbright#1{ + \if_defined{gb-#1}\then + \expandafter\expandafter \expandafter\third_of_four + \csname gb-#1\endcsname + \else + \width{#1} + \fi +} +\def\bbtop#1{ + \if_defined{gb-#1}\then + \expandafter\expandafter \expandafter\fourth_of_four + \csname gb-#1\endcsname + \else + \height{#1} + \fi +} + + +% Make \afmtomtx generate \setglyphbb commands: +\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} + } + \out_line{ + \string\setglyphbb{\char_name} + {\the\bbox_llx}{\the\bbox_lly}{\the\bbox_urx}{\the\bbox_ury} + } +} + + +% Make sure \setglyphbb is transformed OK. +% Slanting of course cannot be done exactly when only the bbox +% is known. +\def\mtxtomtx_setglyphbb#1#2#3#4#5{ + \eval_expr_to\a_count{\add{ + \scale{#2}{\int{x-scale}} + }{ + \scale{#3}{\int{slant-scale}} + }} + \eval_expr_to\b_count{\scale{#3}{\int{y-scale}}} + \eval_expr_to\c_count{\add{ + \scale{#4}{\int{x-scale}} + }{ + \scale{#5}{\int{slant-scale}} + }} + \eval_expr_to\d_count{\scale{#5}{\int{y-scale}}} + \out_line{ + \string\setglyphbb{#1} + {\the\a_count}{\the\b_count}{\the\c_count}{\the\d_count} + } +} + +\add_to\mtxtomtx_redefinitions{ + \let\setglyphbb=\mtxtomtx_setglyphbb +} + +% Finally, for completeness, the analogous thing for reglyphing. + +\def\reglyph_setglyphbb#1#2#3#4#5{ + \command_survivance=0 + \def\glyphname{#1} + \csname slots-#1\endcsname + \iftokeep\command_survivance\then + \out_line{ + \string\setglyphbb{\glyphname}{#2}{#3}{#4}{#5} + } + \fi +} + +\add_to\reglyph_redefinitions{ + \let\setglyphbb=\reglyph_setglyphbb +} + + +\normalcc + + +\endinput + + diff --git a/fonts/utilities/fontinst/inputs/base/cfntinst.sty b/fonts/utilities/fontinst/inputs/base/cfntinst.sty new file mode 100644 index 0000000000..033e21175d --- /dev/null +++ b/fonts/utilities/fontinst/inputs/base/cfntinst.sty @@ -0,0 +1,3688 @@ +%% +%% This is file `cfntinst.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,boundaryCompability') +%% fitrig.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.933} +\ifx\ProvidesPackage\undefined + \def\NeedsTeXFormat#1{} + \def\ProvidesPackage#1[#2]{} +\fi +\ProvidesPackage{fontinst} +[2007/01/23 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 +\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@ne + \b_count=\m@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@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@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@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@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@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@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@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@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\ifisglyph{\glyph_name_modifier{#1}-not}\then + \fontinstwarning{\string\glyphpcc}{ + Base~glyph~`\glyph_name_modifier{#1}'~not~appended,\messagebreak + because~it~is~so~far~unencoded~in~the~glyph~base + } + \else + \fontinsterror{\string\glyphpcc}{ + Base~glyph~not~set.\messagebreak + This~could~be~a~sign~that~the~AFM~file~is~buggy + }\error_help_a + \fi\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^^@} + } + \x_resetint\slot_name\slot_number + \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{ + \ifisint{#1}\then + \global\result=\int{#1} + \else + \global\result=-1 + \fi + \x_relax +} +\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{boundarychar}\then + \x_setint{\percent_char boundarychar}{\int{boundarychar}} + \immediate\write16{Please~use~\string\setleftboundary\space + and/or~\string\makerightboundary^^J + instead~of~setting~the~boundarychar~integer.} + \fi + \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} + \def\do_slot{\bgroup + \ifisint{boundarychar}\then + \ifnum \int{boundarychar}=\slot_number + \def\vpl_liglabel{\out_liglabel\boundary_liglabel} + \fi + \fi + } + \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\substitute_generic#1#2#3{ + \edef\a_macro{#2} + \edef\b_macro{#3} + \ifx \a_macro \b_macro + \x_cs\let{sub-#3}\undefined_command + \else + \x_cs\let{sub-#3}\a_macro + \x_cs\def{typ-#3}{#1} + \fi +} +\def\substitutesilent{\substitute_generic{ssub}} +\def\substitutenoisy{\substitute_generic{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: fitrig.dtx +\chardef\nin@ty=90 +\chardef\@clxxx=180 +\chardef\@lxxi=71 +\mathchardef\@mmmmlxviii=4068 +\chardef\@coeffz=72 +\chardef\@coefb=42 +\mathchardef\@coefc=840 +\mathchardef\@coefd=5040 +\def\TG@rem@pt#1{\expandafter\lose_measure\the#1\space} +\def\TG@term#1{ + \dimen@\@tempb\dimen@ + \advance\dimen@ #1\p@ +} +\def\TG@series{ + \dimen@\@lxxi\dimen@ + \divide \dimen@ \@mmmmlxviii + \edef\@tempa{\TG@rem@pt\dimen@} + \dimen@\@tempa\dimen@ + \edef\@tempb{\TG@rem@pt\dimen@} + \divide\dimen@\@coeffz + \advance\dimen@\m@ne\p@ + \TG@term\@coefb + \TG@term{-\@coefc}% + \TG@term\@coefd + \dimen@\@tempa\dimen@ + \divide\dimen@ \@coefd +} +\def\CalculateSin#1{{% + \if_undefined{sin(\number#1)}\then + \dimen@=#1\p@ + \TG@@sin + \x_cs\xdef{sin(\number#1)}{\TG@rem@pt\dimen@} + \fi +}} +\def\CalculateCos#1{{% + \if_undefined{cos(\number#1)}\then + \dimen@=\nin@ty\p@ + \advance \dimen@ -#1\p@ + \TG@@sin + \x_cs\xdef{cos(\number#1)}{\TG@rem@pt\dimen@} + \fi +}} +\def\TG@@sin{% + \ifdim\TG@reduce>+% + \else\ifdim\TG@reduce<-% + \else\TG@series\fi\fi +} +\def\TG@reduce#1#2{ + \dimen@#1#2\nin@ty\p@ + \advance\dimen@#2-\@clxxx\p@ + \dimen@-\dimen@ + \TG@@sin +} +\def\UseSin#1{\csname sin(\number#1)\endcsname} +\def\UseCos#1{\csname cos(\number#1)\endcsname} +\chardef\z@num\z@ +\x_cs\let{sin(0)} \z@num +\x_cs\let{cos(0)} \@ne +\x_cs\let{sin(90)} \@ne +\x_cs\let{cos(90)} \z@num +\x_cs\let{sin(-90)}\m@ne +\x_cs\let{cos(-90)}\z@num +\x_cs\let{sin(180)}\z@num +\x_cs\let{cos(180)}\m@ne +\def\CalculateTan#1{{% + \if_undefined{tan(\number#1)}\then + \CalculateSin{#1}% + \CalculateCos{#1}% + \a_dimen\UseCos{#1}\p@ + \divide \a_dimen \@iv + \b_dimen\UseSin{#1}\p@ + \b_dimen\two@fourteen\b_dimen + \divide\b_dimen\a_dimen + \x_cs\xdef{tan(\number#1)}{\TG@rem@pt\b_dimen} + \fi +}} +\def\UseTan#1{\csname tan(\number#1)\endcsname} +\mathchardef\two@fourteen=16384 +\chardef\@iv=4 +\x_cs\def{tan(90)}{\errmessage{Infinite tan !}} +\expandafter\let + \csname tan(-90)\expandafter\endcsname \csname tan(90)\endcsname +%%% 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 + \afm_write_setkern{#1}{#2}{\the\a_count} + \else\ifnum \a_count<-\minimum_kern + \afm_write_setkern{#1}{#2}{\the\a_count} + \fi\fi + \fi\fi +} +\afm_let{KPX}{KP} +\def\afm_write_setkern#1#2#3{\out_line{\string\setkern{#1}{#2}{#3}}} +\afm_def{C}(#1~;#2){\init_afm{#1}\do_list[#2]\afm_char} +\afm_def{CH}(<#1>~;#2){\uppercase{\init_afm{"#1}}\do_list[#2]\afm_char} +\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{ + \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} + {\number -\bbox_lly} + {\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\definealias#1#2#3{ + \expandafter\def \csname GN-#1 \expandafter\endcsname + \expandafter{ \csname g-#2 \expandafter\endcsname + \csname i-#3\endcsname} +} +\def\glyph_alias#1{ + \expandafter\expandafter \expandafter\glyph_alias_i + \csname GN-#1\endcsname +} +\def\glyph_alias_i#1#2{ + \expandafter\gobble_three \string#1 +} +\let\charnameprefix\empty +\def\charnamealias#1{ + \if_defined{GN-\charnameprefix#1}\then + \glyph_alias{\charnameprefix#1} + \else\if_defined{GN-#1}\then + \glyph_alias{#1} + \else + #1 + \fi\fi +} +\def\alias_incr#1{ + \expandafter\expandafter \expandafter\alias_incr_i + \csname GN-#1\endcsname +} +\def\alias_incr_i#1#2{ + \ifx#2\x_relax + \mathchardef#2=\@ne + \else + \a_count=#2 + \advance\a_count\@ne + \mathchardef#2=\a_count + \fi +} +\def\alias_char_name#1{ + \if_defined{GN-\charnameprefix#1}\then + \edef\char_name{ + \string\aliased{#1}{\glyph_alias{\charnameprefix#1}} + } + \alias_incr{\charnameprefix#1} + \else\if_defined{GN-#1}\then + \edef\char_name{ + \string\aliased{#1}{\glyph_alias{#1}} + } + \alias_incr{#1} + \else + \edef\char_name{#1} + \fi\fi +} +\def\autoaliasafm{ + \begingroup + \list_def{N}(##1){\alias_char_name{##1}} + \def\afm_write_setkern##1##2##3{ + \out_line{ + \string\setkern{\charnamealias{##1}}{\charnamealias{##2}}{##3} + } + } + \def\init_cc##1{% + \edef\char_name{\charnamealias{##1}} + \out_line{\string\setglyph{\char_name}} + } + \list_def{PCC}(##1~##2~##3){ + \afm_length\a_count{##2} + \afm_length\b_count{##3} + \out_lline{\string\glyphpcc + {\charnamealias{##1}}{\the\a_count}{\the\b_count}} + } +} +\def\endautoaliasafm{\endgroup} +\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@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{{ + \let\a_macro=\empty_command + \_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{} + \ifisstr{etx-name}\then + \def\do_slot{\x_cs\edef{slots-\slot_name}{\the\slot_number}} + \def\declarepsencoding##1##2##3{ + \a_toks={{##1}{##2}{##3}} + \out_line{\string\providepsencoding\the\a_toks} + \ifnum \transform_record_file=\closed_stream \else + \pout_line\transform_record_file + {\string\providepsencoding\the\a_toks} + \fi + } + \directfalse + \inputetx{\str{etx-name}} + \edef\a_macro{\a_macro\string\reencodefont{\str{etx-name}}} + \fi + \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@ne + \else + \expandafter\egroup \expandafter\e_count + \csname slots-#1\endcsname + \fi + \else + \e_count=#5 + \fi + \out_line{ + \ifnum \e_count>\m@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 +} +\let\declarepsencoding=\gobble_three +\let\providepsencoding=\gobble_three +%%% 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 `cfntinst.sty'. diff --git a/fonts/utilities/fontinst/inputs/base/finstmsc.sty b/fonts/utilities/fontinst/inputs/base/finstmsc.sty new file mode 100644 index 0000000000..d2fd613cef --- /dev/null +++ b/fonts/utilities/fontinst/inputs/base/finstmsc.sty @@ -0,0 +1,1470 @@ +%% +%% This is file `finstmsc.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: `misc') +%% ficonv.dtx (with options: `misc') +%% fimapgen.dtx (with options: `map') +%% fibasics.dtx (with options: `pkg2,misc') +%% +%% 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.933} +\ifx\ProvidesPackage\undefined + \def\NeedsTeXFormat#1{} + \def\ProvidesPackage#1[#2]{} +\fi +\ProvidesPackage{fontinst} +[2007/01/23 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 +\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@ne + \b_count=\m@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@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@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@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@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@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@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@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@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} +\let\setleftboundary=\gobble_one +\let\endsetleftboundary=\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 +\let\setfontdimen\gobble_two +\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} +\let\setkern=\gobble_three +\long\def\setglyph#1\endsetglyph{} +\def\setrawglyph#1#2#3#4#5#6#7#8{} +\def\setscaledrawglyph#1#2#3#4#5#6#7#8#9{} +\let\setnotglyph=\setrawglyph +\let\setscalednotglyph=\setscaledrawglyph +\def\ifisglyph#1\then{\iffalse} +\let\ifareglyphs=\ifisglyph +%%% From file: ficonv.dtx +\newif\ifmissingslots +\x_cs\def{o-.notdef}#1{\global\missingslotstrue} +{ + \catcode`\/=\active + \catcode`\]=\active + \gdef\enctoetx#1#2{{ + \catcode`\/=\active + \catcode`\]=\active + \def/##1[{ + \encname_to_etx ##1~{#1}{#2} + \a_count=0 + \global\missingslotsfalse + \let/=\encslot_to_etx + } + \def]~def{} + \make_etx{#1}{#2} + }} +} +\def\encname_to_etx#1~#2#3{ + \out_line{\percent_char\space REMOVE~THE~FOLLOWING~LINE~IF~ + THIS~FILE~IS~MODIFIED~OR~RENAMED.} + \out_line{\string\declarepsencoding{#3}{#1}{\string\download{#2.enc}}} + \out_line{} +} +\def\encslot_to_etx#1~{ + \csname o-#1\endcsname{ + \ifmissingslots + \out_line{\string\nextslot{\the\a_count}} + \fi + \global\missingslotsfalse + \out_line{\string\setslot{#1}} + \out_line{\string\endsetslot} + \out_line{} + } + \advance\a_count by 1 +} +\def\make_etx#1#2{ + \open_out{\temp_prefix#2.etx} + \out_line{\percent_char~Filename:~#2.etx} + \out_line{\percent_char~Created~by:~tex~\jobname} + \out_line{\percent_char~Created~using:~\string\enctoetx{#1}{#2}} + \out_line{} + \out_line{\percent_char~This~file~contains~the~ + information~of~#1.enc~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{} + \out_line{\string\documentclass[twocolumn]{article}} + \out_line{\string\usepackage{fontdoc}[2005/05/13]} + \out_line{} + \out_line{\string\begin{document}} + \out_line{} + \out_line{This~document~describes~the~#1~encoding.} + \out_line{It~was~automatically~generated~by~the} + \out_line{\string\texttt{fontinst}~package.} + \out_line{} + \out_line{\string\encoding} + \out_line{} + \out_line{\string\needsfontinstversion{\fontinstversion}} + \out_line{} + \primitiveinput #1.enc\x_relax + \out_line{} + \out_line{\string\end encoding} + \out_line{} + \out_line{\string\end{document}} + \close_out{Encoding} +} +\def\notdef_name{.notdef} +\def\etxtoenc#1#2{\begingroup + \a_count=\z@ + \loop + \x_cs\let{name-\the\a_count}=\notdef_name + \ifnum \@cclv>\a_count + \advance \a_count \@ne + \repeat + \def\do_slot{ + \x_cs\ifx{name-\the\slot_number}\notdef_name + \x_cs\edef{name-\the\slot_number}{\slot_name} + \fi + } + \process_csep_list\inputetx #1,\process_csep_list, + \make_enc{#1}{#2} +\endgroup} +\def\make_enc#1#2{ + \setstr{encodingname}{fontinst-autoenc-#1} + \def\a_macro##1{ + \add_to\b_macro{##1.etx} + \def\a_macro####1{ + \add_to\b_macro{,~####1.etx} + } + } + \let\b_macro\empty_command + \process_csep_list\a_macro #1,\process_csep_list, + \open_out{#2.enc} + \out_line{\percent_char !PS-Adobe-3.0~Resource-Encoding} + \out_line{\percent_char\space @psencodingfile\left_brace_char} + \ref_to_sourcefile{author}\b_macro + \ref_to_sourcefile{version}\b_macro + \out_line{\percent_char\four_spaces date~=~"generated~ + \the\year/ + \ifnum10>\month0\fi\the\month/ + \ifnum10>\day0\fi\the\day",} + \out_line{\percent_char\four_spaces filename~=~"\out_filename",} + \ref_to_sourcefile{email}\b_macro + \ifisstr{address}\then + \out_line{\percent_char\four_spaces address~=~\str{address}} + \fi + \out_line{\percent_char\four_spaces codetable~=~"ISO/ASCII",} + \out_line{\percent_char\four_spaces checksum~=~"",} + \out_line{\percent_char\four_spaces abstract~=~" + This~is~a~postscript~encoding~file,~automatically~ + generated~by~fontinst~from~\b_macro."} + \out_line{\percent_char\space\right_brace_char} + \out_line{} + \out_line{\percent_char\space Created~by:~tex~\jobname} + \out_line{\percent_char\space Created~using:~ + \string\etxtoenc{#1}{#2}} + \out_line{} + \out_line{\percent_char\space This~file~should~be~installed~ + somewhere~that~your~DVI} + \out_line{\percent_char\space to~postscript~driver~looks~for~files.~ + It~is~needed~for} + \out_line{\percent_char\space reencoding~some~font~you~have~ + transformed.} + \out_line{} + \out_line{\percent_char\space After~installing~this~file,~you~ + should~add~the~following} + \out_line{\percent_char\space line~(minus~\percent_char)~ + to~your~finstmsc.rc~file:} + \out_line{\percent_char\space\string\declarepsencoding + {#1}{\str{encodingname}}{\string\download{\out_filename}}} + \edef\a_macro{ + \noexpand\declarepsencoding{#1}{\str{encodingname}} + {\noexpand\download{\out_filename}} + } + \a_macro + \out_line{} + \out_line{\percent_char\percent_char BeginResource:~ + encoding~\str{encodingname}} + \out_line{/\str{encodingname}\space[} + \b_count=8 + \a_count=\z@ + \loop + \ifnum 8=\b_count + \b_count=\z@ + \out_line{\percent_char\space\the\a_count} + \fi + \out_line{/\csname name-\the\a_count \endcsname} + \ifnum \@cclv>\a_count + \advance \a_count \@ne + \advance \b_count \@ne + \repeat + \out_line{]~def} + \out_line{\percent_char\percent_char EndResource} + \out_line{} + \out_line{\percent_char\space End~of~file~\out_filename.} + \close_out{Encoding~vector} +} +\def\ref_to_sourcefile#1#2{ + \ifisstr{#1}\then + \out_line{\percent_char\four_spaces #1~=~\str{#1},} + \else + \out_line{\percent_char\four_spaces #1~=~"See~file~#2",} + \fi +} +\def\write_cmap_body#1{ + \out_line{1~begincodespacerange~<00>~<FF>~endcodespacerange} + \let\do_slot=\_a_true + \def\Unicode##1##2{\cmap_charseq{\cmap_codepoint{##1}{##2}}} + \let\charseq=\cmap_charseq + \inputetx{#1} +} +\def\cmap_codepoint#1#2{ + \uppercase{\a_count="#1\x_relax} + \ifnum "10000>\a_count + \format_hex\b_macro{\a_count}{4} + \edef\a_macro{\a_macro \b_macro \space} + \else + \advance \a_count -"10000 + \d_count=\a_count + \divide \a_count "400 + \b_count=\a_count + \multiply \b_count "400 + \advance \d_count -\b_count + \advance \a_count "D800 + \advance \d_count "DC00~ + \format_hex\b_macro{\a_count}{4} + \format_hex\c_macro{\d_count}{4} + \edef\a_macro{\a_macro \b_macro \c_macro \space} + \fi +} +\def\cmap_charseq#1{% + \if_a_ + \bgroup + \let\Unicode=\cmap_codepoint + \let\a_macro=\empty_command + #1 + \format_hex\b_macro{\slot_number}{2} + \out_line{1~beginbfchar~<\b_macro>~<~\a_macro>~endbfchar} + \egroup + \_a_false + \fi +} +\def\etxtocmap#1#2{\begingroup + \inputetx{#1} + \open_out{#2.cmap} + \out_line{\percent_char !PS-Adobe-3.0~Resource-CMap} + \out_line{\percent_char\percent_char + DocumentNeededResources:~procset~CIDInit} + \out_line{\percent_char\percent_char + IncludeResource:~procset~CIDInit} + \setstr{cmapname}{fontinst-#2} + \out_line{\percent_char\percent_char + BeginResource:~CMap~\str{cmapname}} + \out_line{/CIDInit~/ProcSet~findresource~begin} + \out_line{7~dict~begin} + \out_line{begincmap} + \out_line{/CMapName~/\str{cmapname}~def} + \out_line{/CMapType~2~def} + \write_cmap_body{#1} + \out_line{endcmap} + \out_line{CMapName~currentdict~/CMap~defineresource~pop} + \out_line{end} + \out_line{end} + \out_line{\percent_char\percent_char EndResource} + \out_line{\percent_char\percent_char EOF} + \close_out{ToUnicode~CMap} +\endgroup} +\let\aliased=\second_of_two +%%% From file: fimapgen.dtx +\def\mapfrags_subsystem{Map~fragments~writer} +\newcount\process_generation +\process_generation=0 +\def\process_generation_succ{1} +\def\extract_font_generation#1{ + \if_defined{Tf-#1}\then + \expandafter\expandafter \expandafter\first_of_three + \csname Tf-#1\endcsname + \else + \m@ne + \fi +} +\def\storemapdata#1#2#3{ + \expandafter\def \expandafter\a_macro + \expandafter{ \expandafter{ \the\process_generation}{#2}{#3}} + \ifnum \extract_font_generation{#1}<\process_generation \else + \x_cs\ifx{Tf-#1}\a_macro + \fontinstinfo\mapfrags_subsystem + {Repeated~definition~of~font~#1} + \else + \fontinstwarning\mapfrags_subsystem + {Inconsistent~redefinition~of~font~#1} + \fi + \fi + \x_cs\let{Tf-#1}=\a_macro +} +\let\transformfont\x_relax +\let\reencodefont\x_relax +\let\reglyphfont\x_relax +\def\makemapentry#1{\begingroup + \def\TeX_font_name{#1} + \ifnum \extract_font_generation{#1}<\process_generation + \if_file_exists{#1.mtx}\then + \inputmtx{#1} + \fi\fi + \ifnum \extract_font_generation{#1}<\process_generation + \from_unknown{#1} + \x_cs\xdef{Tf-#1}{ + {\process_generation_succ}{\noexpand\from_unknown{#1}}{} + } + \else + \expandafter\expandafter \expandafter\make_map_entry + \csname Tf-#1\endcsname + \fi + \endgroup +} +\def\make_map_entry#1#2#3{ + \ifnum #1=\process_generation + \def\font_transforms{#3} + #2 + \_a_false + \let\transformfont\concat_transformfont + \let\reencodefont\concat_reencodefont + \let\reglyphfont\_a_true + \font_transforms + \if_a_ + \fontinsterror\mapfrags_subsystem{ + \string\makemapentry\space for~reglyphed~font + }{ No~entry~for~font~\TeX_font_name\space + can~be~written,\messagebreak + since~it~had~been~reglyphed!~\error_help_a + } + \else + \entry_makers_list + \fi + \expandafter\gdef \csname Tf-\TeX_font_name \expandafter\endcsname + \expandafter{\expandafter{\process_generation_succ}{#2}{#3}} + \fi +} +\def\fromafm#1#2{ + \def\source_font_TeX_name{#1} + \def\PS_font_name{#2} +} +\def\frompl#1{ + \def\source_font_TeX_name{#1} +} +\def\frommtx#1{% + \ifnum \extract_font_generation{#1}<\process_generation + \if_file_exists{#1.mtx}\then + \inputmtx{#1} + \fi\fi + \ifnum \extract_font_generation{#1}<\process_generation + \from_unknown{#1} + \x_cs\xdef{Tf-#1}{ + {\the\process_generation}{\noexpand\from_unknown{#1}}{} + } + \else + \expandafter\expandafter \expandafter\from_mtx + \csname Tf-#1\endcsname + \fi +} +\def\from_mtx#1#2#3{ + \edef\font_transforms{#3\font_transforms} + #2 +} +\def\fromvpl{ + \ifx \empty_command\font_transforms \else + \fontinsterror\mapfrags_subsystem{ + Font~is~virtual,~it~cannot~be~transformed}{ + No~entry~for~font~\TeX_font_name\space can~be~written. + \messagebreak\error_help_a + } + \fi + \let\maker_do\gobble_one +} +\def\AssumeMetafont{ + \def\frompl{ + \ifx \empty_command\font_transforms \else + \fontinsterror\mapfrags_subsystem{ + A~Metafont~cannot~be~transformed}{ + No~entry~for~font~\TeX_font_name\space can~be~written. + \messagebreak\error_help_a + } + \fi + \let\maker_do\gobble_one + } +} +\def\from_unknown#1{ + \fontinstwarningnoline\mapfrags_subsystem{ + No~map~data~stored~for~font~#1.\messagebreak + No~entry~for~\TeX_font_name\space will~be~written,\messagebreak + due~to~insufficient~information} + \includewarning\warn_unknown_source + \let\maker_do\gobble_one +} +\let\font_transforms\empty_command +\newdimen\xscale_factor \newdimen\slant_factor +\xscale_factor=\p@ \slant_factor=\z@ +\let\reencode_etx\empty_command +\def\concat_transformfont#1#2{ + \edef\a_macro{\make_factor{#1}} + \xscale_factor=\a_macro\xscale_factor + \slant_factor=\a_macro\slant_factor + \advance \slant_factor \make_factor{#2}\p@ +} +\def\concat_reencodefont#1{\def\reencode_etx{#1}} +\def\adddriver#1#2{ + \x_cs\ifx{make_#1}\x_relax + \fontinsterror\mapfrags_subsystem + {There~is~no~entry~maker~for~#1}\error_help_a + \else + \x_cs\ifx{output_#1}\x_relax \_a_true \else + \x_cs\ifx{output_#1}\closed_stream \_a_true \else + \_a_false + \fi\fi + \if_a_ + \x_cs\open_pout{output_#1}{#2} + \expandafter\add_to \expandafter\entry_makers_list + \expandafter{ \expandafter\maker_do + \csname make_#1\endcsname} + \fi + \fi +} +\let\entry_makers_list\empty_command +\let\maker_do\x_relax +\def\donedrivers{ + \def\maker_do##1{ + \x_cs\close_pout{output\expandafter\gobble_five\string##1} + {Map~file~fragments} + } + \entry_makers_list + \let\maker_do\x_relax + \let\entry_makers_list\empty_command + \errorstopmode + \reportwarnings + \advance \process_generation \thr@@ + \edef\process_generation_succ{\the\process_generation} + \advance \process_generation \m@ne +} +\def\gobble_five#1#2#3#4#5{} +\g_let\warnings_list=\empty_command +\def\warning_do#1#2#3{ + \noexpand\warning_do \noexpand#2 + \ifx #1#2 + \expandafter#3 \expandafter\x_relax + \else + \expandafter#3 \expandafter#1 + \fi +} +\def\includewarning#1{ + \xdef\warnings_list{ + \expandafter\swap_two \expandafter#1 \warnings_list + \if_equal\x_relax\then \else + \noexpand\warning_do \noexpand#1 + \fi + } +} +\def\reportwarnings{ + \begingroup + \let\warning_do=\x_relax + \warnings_list + \endgroup + \g_let\warnings_list=\empty_command +} +\def\warn_unknown_source{ + \fontinstwarningnoline\mapfrags_subsystem{ + Some~font~is~missing~from~the~output~file(s),\messagebreak + since~its~source~is~unknown} +} +\def\warn_undecided_data{ + \fontinstwarningnoline\mapfrags_subsystem{ + Check~the~output~file(s)--some~data~could~not~be~determined} +} +\def\warn_uncertain_data{ + \fontinstwarningnoline\mapfrags_subsystem{ + Check~the~output~file(s)--some~data~was~considered~uncertain} +} +\def\declarepsencoding#1#2#3{\x_cs\gdef{pse-#1}{{#2}{#3}}} +\def\providepsencoding#1#2#3{ + \if_undefined{pse-#1}\then + \declarepsencoding{#1}{#2}{#3} + \fi +} +\let\download=\gobble_one +\def\fulldownload#1{\download{#1}} +\def\encodingdownload#1{\download{#1}} +\declarepsencoding{8r}{TeXBase1Encoding}{\encodingdownload{8r.enc}} +\declarepsencoding{8a}{StandardEncoding}{} +\def\specifypsfont#1#2{\x_cs\def{psf-#1}{#2}} +\def\AssumeLWFN{\let\get_PS_font_file\LWFN_get_PS_font_file} +\def\unknown_str{?????} +\edef\clueless_str{\unknown_str ?} +\let\TeX_font_name\unknown_str +\let\source_font_TeX_name\unknown_str +\let\PS_font_name\unknown_str +\def\get_PS_font_name{\let\PS_font_name\clueless_str} +\def\AssumeAMSBSYY{\def\get_PS_font_name{ + \uppercase \expandafter{ \expandafter\def + \expandafter\PS_font_name \expandafter{ \source_font_TeX_name} + } +}} +\def\AssumeBaKoMa{\def\get_PS_font_name{ + \lowercase \expandafter{ \expandafter\def + \expandafter\PS_font_name \expandafter{ \source_font_TeX_name} + } +}} +\let\PS_font_file\unknown_str +\resetstr{PSfontsuffix}{.pfa} +\def\normal_get_PS_font_file{ + \edef\PS_font_file{\source_font_TeX_name\str{PSfontsuffix}} +} +\let\get_PS_font_file=\normal_get_PS_font_file +\def\LWFN_get_PS_font_file{ + \ifx \PS_font_name\unknown_str \get_PS_font_name \fi + \ifx \PS_font_name\clueless_str + \normal_get_PS_font_file + \includewarning\warn_uncertain_data + \else + \begingroup + \aftergroup\def \aftergroup\PS_font_file + \aftergroup{ + \a_count=4~ + \expandafter\expandafter \expandafter\aftergroup + \expandafter\swap_two \expandafter\abbreviate_PS_font_name + \PS_font_name \x_relax + \aftergroup} + \endgroup + \fi +} +\def\abbreviate_PS_font_name#1{ + \ifx \x_relax#1 \else + \ifnum \uccode`#1=`#1 + \a_count=2 + \aftergroup#1 + \else\ifx -#1 + \a_count=\z@ + \else\ifnum \a_count>\z@ + \advance \a_count \m@ne + \aftergroup#1 + \fi\fi\fi + \expandafter\abbreviate_PS_font_name + \fi +} +\def\make_debug{ + \pout_line\output_debug{Driver~data~for~font~\TeX_font_name:} + \pout_lline\output_debug{Source~font~TeX~name:~\source_font_TeX_name} + \ifx \reencode_etx\empty_command \else + \pout_lline\output_debug{Font~reencoded~using~\reencode_etx.etx.} + \fi + \ifdim \xscale_factor=\p@ \else + \pout_lline\output_debug{Font~x-scaled~by~ + \expandafter\lose_measure\the\xscale_factor. + } + \fi + \ifdim \slant_factor=\z@ \else + \pout_lline\output_debug{Font~slanted~by~ + \expandafter\lose_measure\the\slant_factor. + } + \fi + \debug_values_hook +} +\def\debug_value#1{ + \ifx #1\unknown_str + \csname get_ \expandafter\gobble_one \string#1 \endcsname + \fi + \pout_lline\output_debug{\string#1:~#1} + \ifx #1\clueless_str \includewarning\warn_undecided_data \fi +} +\def\debugvalue#1{ + \expandafter\add_to \expandafter\debug_values_hook + \expandafter{ \expandafter\debug_value \csname#1\endcsname} +} +\let\debug_values_hook\empty_command +\debugvalue{PS_font_name} +\newtoks\downloads_list +\def\append_download#1#2{ + \edef\a_macro{ + \downloads_list = + \noexpand\expandafter{ \noexpand\the \downloads_list + \noexpand#1 {#2} } + } + \a_macro +} +\def\make_dvips{ + \downloads_list={} + \let\postscript_code\empty_command + \def\download{\append_download\download} + \def\fulldownload{\append_download\fulldownload} + \def\encodingdownload{\append_download\encodingdownload} + \ifx \reencode_etx\empty_command \else + \if_undefined{pse-\reencode_etx}\then + \etxtoenc{\reencode_etx}{\reencode_etx} + \fi + \expandafter\expandafter \expandafter\second_of_two + \csname pse-\reencode_etx\endcsname + \edef\postscript_code{\postscript_code\space + \expandafter\expandafter \expandafter\first_of_two + \csname pse-\reencode_etx\endcsname + \space ReEncodeFont + } + \fi + \ifdim \xscale_factor=\p@ \else + \edef\postscript_code{\postscript_code + \space\expandafter\lose_measure\the\xscale_factor + \space ExtendFont + } + \fi + \ifdim \slant_factor=\z@ \else + \edef\postscript_code{\postscript_code + \space\expandafter\lose_measure\the\slant_factor + \space SlantFont + } + \fi + \ifx \PS_font_name\unknown_str \get_PS_font_name \fi + \ifx \PS_font_name\clueless_str + \includewarning\warn_undecided_data + \_a_true + \else + \if_undefined{psf-\PS_font_name}\then + \_a_true + \else + \csname psf-\PS_font_name \endcsname + \_a_false + \fi\fi + \if_a_ + \ifx \PS_font_file\unknown_str \get_PS_font_file \fi + \append_download\download{\PS_font_file} + \ifx \PS_font_file\clueless_str + \includewarning\warn_undecided_data + \fi + \fi + \def\download##1{~<##1} + \def\fulldownload##1{~<<##1} + \def\encodingdownload##1{~<[##1} + \pout_line\output_dvips{ + \TeX_font_name\space\PS_font_name + \expandafter\empty_command \the\downloads_list + \ifx \postscript_code\empty_command \else + \space"\postscript_code\space" + \fi + } +} +\def\make_dvipdfm{ + \def\font_encoding{default} + \ifx \reencode_etx\empty_command \else + \if_undefined{pse-\reencode_etx}\then + \etxtoenc{\reencode_etx}{\reencode_etx} + \fi + \def\download##1{\def\font_encoding{##1}} + \expandafter\expandafter \expandafter\second_of_two + \csname pse-\reencode_etx\endcsname + \fi + \let\options_text\empty_command + \ifdim \xscale_factor=\p@ \else + \edef\options_text{\options_text\space + -e~\expandafter\lose_measure\the\xscale_factor + } + \fi + \ifdim \slant_factor=\z@ \else + \edef\options_text{\options_text\space + -s~\expandafter\lose_measure\the\slant_factor + } + \fi + \ifx \PS_font_name\unknown_str \get_PS_font_name \fi + \if_or \if_equal\PS_font_name\clueless_str \or_else + \if_undefined{psf-\PS_font_name} + \then + \ifx \PS_font_file\unknown_str \get_PS_font_file \fi + \ifx \PS_font_file\clueless_str + \includewarning\warn_undecided_data + \fi + \let\a_macro=\PS_font_file + \else + \let\a_macro=\PS_font_name + \def\download##1{\def\a_macro{##1}} + \csname psf-\PS_font_name \endcsname + \fi + \pout_line\output_dvipdfm{ + \TeX_font_name\space\font_encoding\space\a_macro + \options_text + } +} +\def\make_pltotf{ + \pout_line\output_pltotf{pltotf~\TeX_font_name.pl~ + \ifisstr{TFMfileprefix}\then \str{TFMfileprefix}\fi + \TeX_font_name.tfm + } +} +%%% 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{finstmsc.rc}\then + \primitiveinput finstmsc.rc +\else + \immediate\write16{No~file~finstmsc.rc.} +\fi +\normalcc +\endinput +%% +%% End of file `finstmsc.sty'. diff --git a/fonts/utilities/fontinst/inputs/base/fontinst.ini b/fonts/utilities/fontinst/inputs/base/fontinst.ini new file mode 100644 index 0000000000..3769e47f6f --- /dev/null +++ b/fonts/utilities/fontinst/inputs/base/fontinst.ini @@ -0,0 +1,97 @@ +%% +%% This is file `fontinst.ini', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% fibasics.dtx (with options: `ini') +%% +%% 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 +\chardef\active=13 + +\chardef\@ne=1 +\chardef\tw@=2 +\chardef\thr@@=3 +\chardef\sixt@@n=16 +\chardef\@cclv=255 +\mathchardef\@cclvi=256 +\mathchardef\@m=1000 +\mathchardef\@M=10000 +\mathchardef\@MM=20000 + +\count10=22 % allocates \count registers 23, 24, ... +\count11=9 % allocates \dimen registers 10, 11, ... +\count15=9 % allocates \toks registers 10, 11, ... +\count16=-1 % allocates input streams 0, 1, ... +\count17=-1 % allocates output streams 0, 1, ... +\count20=255 % allocates insertions 254, 253, ... +\countdef\insc@unt=20 % the insertion counter +\countdef\allocationnumber=21 % the most recent allocation +\countdef\m@ne=22 \m@ne=-1 % a handy constant +\def\wlog{\immediate\write\m@ne} % write on log file (only) + +\countdef\count@=255 +\dimendef\dimen@=0 + +\outer\def\newcount{\alloc@0\count\countdef\insc@unt} +\outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt} +\outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi} +\outer\def\newread{\alloc@6\read\chardef\sixt@@n} +\outer\def\newwrite{\alloc@7\write\chardef\sixt@@n} + +\def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne + \ch@ck#1#4#2% make sure there's still room + \allocationnumber=\count1#1% + \global#3#5=\allocationnumber + \wlog{\string#5=\string#2\the\allocationnumber}} +\outer\def\newinsert#1{\global\advance\insc@unt by\m@ne + \ch@ck0\insc@unt\count + \ch@ck1\insc@unt\dimen + \ch@ck2\insc@unt\skip + \ch@ck4\insc@unt\box + \allocationnumber=\insc@unt + \global\chardef#1=\allocationnumber + \wlog{\string#1=\string\insert\the\allocationnumber}} +\def\ch@ck#1#2#3{\ifnum\count1#1<#2% + \else\errmessage{No~room~for~a~new~#3}\fi} + +\outer\def\newif#1{\count@\escapechar \escapechar\m@ne + \expandafter\expandafter\expandafter + \edef\@if#1{true}{\let\noexpand#1=\noexpand\iftrue}% + \expandafter\expandafter\expandafter + \edef\@if#1{false}{\let\noexpand#1=\noexpand\iffalse}% + \@if#1{false}\escapechar\count@} % the condition starts out false +\def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname} +{\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required + +\newdimen\p@ \p@=1pt % this saves macro space and time +\newdimen\z@ \z@=0pt % can be used both for 0pt and 0 + +\def\space{~} +\let\bgroup={ +\let\egroup=} + +\def\loop#1\repeat{\def\body{#1}\iterate} +\def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next} +\let\repeat=\fi % this makes \loop...\if...\repeat skippable + +\def\supereject{\par\penalty-\@MM} +\outer\def\bye{\par\vfill\supereject\end} +\endinput +%% +%% End of file `fontinst.ini'. diff --git a/fonts/utilities/fontinst/inputs/base/fontinst.sty b/fonts/utilities/fontinst/inputs/base/fontinst.sty new file mode 100644 index 0000000000..c19adcf838 --- /dev/null +++ b/fonts/utilities/fontinst/inputs/base/fontinst.sty @@ -0,0 +1,3676 @@ +%% +%% 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') +%% fitrig.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.933} +\ifx\ProvidesPackage\undefined + \def\NeedsTeXFormat#1{} + \def\ProvidesPackage#1[#2]{} +\fi +\ProvidesPackage{fontinst} +[2007/01/23 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 +\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@ne + \b_count=\m@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@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@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@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@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@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@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@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@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\ifisglyph{\glyph_name_modifier{#1}-not}\then + \fontinstwarning{\string\glyphpcc}{ + Base~glyph~`\glyph_name_modifier{#1}'~not~appended,\messagebreak + because~it~is~so~far~unencoded~in~the~glyph~base + } + \else + \fontinsterror{\string\glyphpcc}{ + Base~glyph~not~set.\messagebreak + This~could~be~a~sign~that~the~AFM~file~is~buggy + }\error_help_a + \fi\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\substitute_generic#1#2#3{ + \edef\a_macro{#2} + \edef\b_macro{#3} + \ifx \a_macro \b_macro + \x_cs\let{sub-#3}\undefined_command + \else + \x_cs\let{sub-#3}\a_macro + \x_cs\def{typ-#3}{#1} + \fi +} +\def\substitutesilent{\substitute_generic{ssub}} +\def\substitutenoisy{\substitute_generic{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: fitrig.dtx +\chardef\nin@ty=90 +\chardef\@clxxx=180 +\chardef\@lxxi=71 +\mathchardef\@mmmmlxviii=4068 +\chardef\@coeffz=72 +\chardef\@coefb=42 +\mathchardef\@coefc=840 +\mathchardef\@coefd=5040 +\def\TG@rem@pt#1{\expandafter\lose_measure\the#1\space} +\def\TG@term#1{ + \dimen@\@tempb\dimen@ + \advance\dimen@ #1\p@ +} +\def\TG@series{ + \dimen@\@lxxi\dimen@ + \divide \dimen@ \@mmmmlxviii + \edef\@tempa{\TG@rem@pt\dimen@} + \dimen@\@tempa\dimen@ + \edef\@tempb{\TG@rem@pt\dimen@} + \divide\dimen@\@coeffz + \advance\dimen@\m@ne\p@ + \TG@term\@coefb + \TG@term{-\@coefc}% + \TG@term\@coefd + \dimen@\@tempa\dimen@ + \divide\dimen@ \@coefd +} +\def\CalculateSin#1{{% + \if_undefined{sin(\number#1)}\then + \dimen@=#1\p@ + \TG@@sin + \x_cs\xdef{sin(\number#1)}{\TG@rem@pt\dimen@} + \fi +}} +\def\CalculateCos#1{{% + \if_undefined{cos(\number#1)}\then + \dimen@=\nin@ty\p@ + \advance \dimen@ -#1\p@ + \TG@@sin + \x_cs\xdef{cos(\number#1)}{\TG@rem@pt\dimen@} + \fi +}} +\def\TG@@sin{% + \ifdim\TG@reduce>+% + \else\ifdim\TG@reduce<-% + \else\TG@series\fi\fi +} +\def\TG@reduce#1#2{ + \dimen@#1#2\nin@ty\p@ + \advance\dimen@#2-\@clxxx\p@ + \dimen@-\dimen@ + \TG@@sin +} +\def\UseSin#1{\csname sin(\number#1)\endcsname} +\def\UseCos#1{\csname cos(\number#1)\endcsname} +\chardef\z@num\z@ +\x_cs\let{sin(0)} \z@num +\x_cs\let{cos(0)} \@ne +\x_cs\let{sin(90)} \@ne +\x_cs\let{cos(90)} \z@num +\x_cs\let{sin(-90)}\m@ne +\x_cs\let{cos(-90)}\z@num +\x_cs\let{sin(180)}\z@num +\x_cs\let{cos(180)}\m@ne +\def\CalculateTan#1{{% + \if_undefined{tan(\number#1)}\then + \CalculateSin{#1}% + \CalculateCos{#1}% + \a_dimen\UseCos{#1}\p@ + \divide \a_dimen \@iv + \b_dimen\UseSin{#1}\p@ + \b_dimen\two@fourteen\b_dimen + \divide\b_dimen\a_dimen + \x_cs\xdef{tan(\number#1)}{\TG@rem@pt\b_dimen} + \fi +}} +\def\UseTan#1{\csname tan(\number#1)\endcsname} +\mathchardef\two@fourteen=16384 +\chardef\@iv=4 +\x_cs\def{tan(90)}{\errmessage{Infinite tan !}} +\expandafter\let + \csname tan(-90)\expandafter\endcsname \csname tan(90)\endcsname +%%% 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 + \afm_write_setkern{#1}{#2}{\the\a_count} + \else\ifnum \a_count<-\minimum_kern + \afm_write_setkern{#1}{#2}{\the\a_count} + \fi\fi + \fi\fi +} +\afm_let{KPX}{KP} +\def\afm_write_setkern#1#2#3{\out_line{\string\setkern{#1}{#2}{#3}}} +\afm_def{C}(#1~;#2){\init_afm{#1}\do_list[#2]\afm_char} +\afm_def{CH}(<#1>~;#2){\uppercase{\init_afm{"#1}}\do_list[#2]\afm_char} +\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{ + \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} + {\number -\bbox_lly} + {\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\definealias#1#2#3{ + \expandafter\def \csname GN-#1 \expandafter\endcsname + \expandafter{ \csname g-#2 \expandafter\endcsname + \csname i-#3\endcsname} +} +\def\glyph_alias#1{ + \expandafter\expandafter \expandafter\glyph_alias_i + \csname GN-#1\endcsname +} +\def\glyph_alias_i#1#2{ + \expandafter\gobble_three \string#1 +} +\let\charnameprefix\empty +\def\charnamealias#1{ + \if_defined{GN-\charnameprefix#1}\then + \glyph_alias{\charnameprefix#1} + \else\if_defined{GN-#1}\then + \glyph_alias{#1} + \else + #1 + \fi\fi +} +\def\alias_incr#1{ + \expandafter\expandafter \expandafter\alias_incr_i + \csname GN-#1\endcsname +} +\def\alias_incr_i#1#2{ + \ifx#2\x_relax + \mathchardef#2=\@ne + \else + \a_count=#2 + \advance\a_count\@ne + \mathchardef#2=\a_count + \fi +} +\def\alias_char_name#1{ + \if_defined{GN-\charnameprefix#1}\then + \edef\char_name{ + \string\aliased{#1}{\glyph_alias{\charnameprefix#1}} + } + \alias_incr{\charnameprefix#1} + \else\if_defined{GN-#1}\then + \edef\char_name{ + \string\aliased{#1}{\glyph_alias{#1}} + } + \alias_incr{#1} + \else + \edef\char_name{#1} + \fi\fi +} +\def\autoaliasafm{ + \begingroup + \list_def{N}(##1){\alias_char_name{##1}} + \def\afm_write_setkern##1##2##3{ + \out_line{ + \string\setkern{\charnamealias{##1}}{\charnamealias{##2}}{##3} + } + } + \def\init_cc##1{% + \edef\char_name{\charnamealias{##1}} + \out_line{\string\setglyph{\char_name}} + } + \list_def{PCC}(##1~##2~##3){ + \afm_length\a_count{##2} + \afm_length\b_count{##3} + \out_lline{\string\glyphpcc + {\charnamealias{##1}}{\the\a_count}{\the\b_count}} + } +} +\def\endautoaliasafm{\endgroup} +\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@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{{ + \let\a_macro=\empty_command + \_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{} + \ifisstr{etx-name}\then + \def\do_slot{\x_cs\edef{slots-\slot_name}{\the\slot_number}} + \def\declarepsencoding##1##2##3{ + \a_toks={{##1}{##2}{##3}} + \out_line{\string\providepsencoding\the\a_toks} + \ifnum \transform_record_file=\closed_stream \else + \pout_line\transform_record_file + {\string\providepsencoding\the\a_toks} + \fi + } + \directfalse + \inputetx{\str{etx-name}} + \edef\a_macro{\a_macro\string\reencodefont{\str{etx-name}}} + \fi + \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@ne + \else + \expandafter\egroup \expandafter\e_count + \csname slots-#1\endcsname + \fi + \else + \e_count=#5 + \fi + \out_line{ + \ifnum \e_count>\m@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 +} +\let\declarepsencoding=\gobble_three +\let\providepsencoding=\gobble_three +%%% 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'. diff --git a/fonts/utilities/fontinst/inputs/base/multislot.sty b/fonts/utilities/fontinst/inputs/base/multislot.sty new file mode 100644 index 0000000000..fac7214405 --- /dev/null +++ b/fonts/utilities/fontinst/inputs/base/multislot.sty @@ -0,0 +1,234 @@ +% multislot.sty +% +% Second version + + +\needsfontinstversion{1.900} +% Relies heavily on _etx_pass_hook commands. + + +%%%%%%%%%%%%%%% RESOURCES USED %%%%%%%%%%%%%%% +% +% The following classes of control sequences are used by the multislot +% routines, in addition to the ones defined below and the ones fontinst +% normally uses: +% +% \name-NUM +% +% where NUM is a number consisting of one, two, or three decimal digits. +% These are also used by \pltomtx, so they probably already exist as +% hash table entries. + + + +%%%%%%%%%%%%%%% SAVE CATCODES %%%%%%%%%%%%%%% +% +% Save the current values of the catcodes of space, @, NL, ~ and _. +% _ and @ are made letters, ~ is a space, and space and NL are ignored. + +\edef\spacecatcode{\the\catcode`\ } +\edef\atcatcode{\the\catcode`\@} +\edef\nlcatcode{\the\catcode`\^^M} +\edef\underscorecatcode{\the\catcode`\_} +\edef\tildecatcode{\the\catcode`\~} + +\catcode`\ =9 +\catcode`\^^M=9 +\catcode`\@=11 +\catcode`\_=11 +\catcode`\~=10 + + +%%%%%%%%%%%%%%% MULTIPLE SLOT COMMANDS %%%%%%%%%%%%%%% +% +% The user-level commands are quite simple. As usual, you can write +% +% \setslot{NAME} +% <slot commands> +% \endsetslot +% +% to assign a glyph to a slot. The difference is that if there are +% multiple \setslot commands for a slot, this will no longer cause +% strange results. Instead, only the first \setslot-\endsetslot pair +% for each slot will be used, the others are ignored. +% +% If you instead write +% +% \resetslot{NAME} +% <slot commands> +% \endsetslot +% +% then this will override any earlier occurences of \setslot or +% \resetslot. Finally, there is the command +% +% \unsetslot{NUMBER} +% +% which makes fontinst forget any earlier occurences of \setslot +% or \resetslot commands for that particular slot. + + +% The way this works is that every \setslot or \resetslot command is +% implicitly assigned an index, namely the number of such commands +% perviously encountered since the start of the ETX pass. The count +% register \slot_index is allocated to keep track of the current +% index: + +\newcount\slot_index +\def\clear_slot_index{\slot_index=\m@ne} +\add_to\pre_first_etx_pass_hook{\clear_slot_index} +\add_to\pre_second_etx_pass_hook{\clear_slot_index} +\add_to\pre_third_etx_pass_hook{\clear_slot_index} +\add_to\pre_fourth_etx_pass_hook{\clear_slot_index} + +% \setslot, \setleftboundary, and \setrightboundary increments the +% counter just before checking it. + + + +% The point of maintaining the index is that the index of the +% \setslot (or whatever) that actually sets a particular slot gets +% stored in the \name-SLOT control sequence (which is \mathchardef'ed +% to the index). After assignments are made, all a \setslot (or +% whatever) needs to do is to check whether the stored index matches +% the current one, and gobble itself if they don't. + +% The basic check is performed by the command \later_index_check. +% This has the syntax +% +% \later_index_check{SLOT}{<else-code>} +% +% and expands to nothing if this \setslot will be active, but to +% <else-code> if it will not. +\def\later_index_check#1{ + \x_cs\ifnum {name-#1}=\slot_index + \expandafter\gobble_one + \else + \expandafter\identity_one + \fi +} +% However, when deciding which \setslots will be active, the condition +% to test is slightly different: is the control sequence in question +% already defined to be a mathchar token? If it isn't, then this will +% be the active \setslot. +\def\setslot_index_check#1{\x_cs\setslot_index_check_i{name-#1}} +\def\temp_command#1{ + \def\setslot_index_check_ii##1#1##2\setslot_index_check_ii{##1} + \def\setslot_index_check_i##1{ + \expandafter\setslot_index_check_ii \expandafter\ifx + \expandafter$ \meaning##1 #1 0 \setslot_index_check_ii $ + \expandafter\identity_one + \else + \mathchardef##1=\slot_index + \expandafter\gobble_one + \fi + } +} +\expandafter\temp_command \expandafter{ \string\mathchar " } + +% The stated definition of \setslot_index_check should thus be in +% force during the first etx pass, but after that the +% \later_index_check definition should rule. +\add_to\post_first_etx_pass_hook{ + \let\setslot_index_check=\later_index_check +} + +% The following is used to ignore a \setslot--\endsetslot or +% \setleftboundary--\endsetleftboundary construction; the argument is +% the command which marks the end. The reason not to use +% \gobble_setslot is that it still executes \end_do_slot, which is +% quite wrong for the kind of ignoring done here. +\def\ignore_to_end#1{ + \bgroup + \let#1=\fi + \expandafter + \egroup + \iffalse +} + + +% The \setslot, \setleftboundary, and \setrightboundary commands must +% be equipped with checks at the start. +\def\checked_setslot{ + \advance \slot_index \@ne + \setslot_index_check{\the\slot_number}{ + \advance \slot_number \@ne + \ignore_to_end\endsetslot + } + \unchecked_setslot +} + +\def\checked_setleftboundary{ + \advance \slot_index \@ne + \setslot_index_check{leftboundary}{\ignore_to_end\endsetleftboundary} + \unchecked_setleftboundary +} + +\def\checked_setrightboundary#1{ + \advance \slot_index \@ne + \setslot_index_check{\the\slot_number}{ + \advance \slot_number \@ne + \gobble_two + } + \unchecked_setrightboundary{#1} +} +\add_to\pre_first_etx_pass_hook{ + \let\unchecked_setslot=\setslot + \let\setslot=\checked_setslot + \let\unchecked_setleftboundary=\setleftboundary + \let\setleftboundary=\checked_setleftboundary + \let\unchecked_setrightboundary=\setrightboundary + \let\setrightboundary=\checked_setrightboundary +} +% But that's it, as far as the \set... commands are concerned. + + +% What about \unsetslot? In principle, it _should_ just be a matter of +\def\unsetslot#1{ + \eval_expr{#1} + \x_cs\let{name-\the\result}\undefined_command +} +\add_to\post_first_etx_pass_hook{\let\unsetslot=\gobble_one} +% given which \resetslot is simply +\def\resetslot{\unsetslot\slot_number \setslot} +% and this sort-of works, but not quite. +% +% The problem is that the ordinary slot assignment table, which is +% used for ligature and kerning instructions, is not updated by +% \unsetslot. Hence ligatures and kerns will be generated as if all +% glyphs that have been set for a slot are present there; after +% +% \nextslot{108} +% \setslot{l} \endsetslot +% +% \nextslot{108} +% \resetslot{lambda} \endsetslot +% +% the effect will be as if one had given the command +% +% \setleftkerning{lambda}{l}{1000} +% +% and moreover the same happens for ligatures, so an f + l -> fl +% ligature will also work as an f + lambda -> fl ligature. +% +% This is of course a BUG, and there doesn't seem to be any way +% around it, short of adding another pass of reading ETX files. Doing +% so would probably not be worth the effort, since the usefulness of +% a \resetslot command is not clear; unlike \resetglyph, it cannot be +% used to amend an existing \set..., but only to override it. + + + +%%%%%%%%%%%%%%% RESTORE CATCODES %%%%%%%%%%%%%%% +% +% Restore the catcodes that were changed. + +\catcode`\@=\atcatcode +\catcode`\^^M=\nlcatcode +\catcode`\ =\spacecatcode +\catcode`\~=\tildecatcode +\catcode`\_=\underscorecatcode + +%%%%%%%%%%%%%%% THE END %%%%%%%%%%%%%%% + +\endinput + diff --git a/fonts/utilities/fontinst/inputs/base/xfntinst.sty b/fonts/utilities/fontinst/inputs/base/xfntinst.sty new file mode 100644 index 0000000000..d13e974623 --- /dev/null +++ b/fonts/utilities/fontinst/inputs/base/xfntinst.sty @@ -0,0 +1,3775 @@ +%% +%% This is file `xfntinst.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') +%% fitrig.dtx (with options: `pkg') +%% ficonv.dtx (with options: `pkg') +%% filtfam.dtx (with options: `pkg,textcomp,debug,oldstyle') +%% 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.933} +\ifx\ProvidesPackage\undefined + \def\NeedsTeXFormat#1{} + \def\ProvidesPackage#1[#2]{} +\fi +\ProvidesPackage{fontinst} +[2007/01/23 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 +\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@ne + \b_count=\m@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@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@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@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@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@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@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@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@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\ifisglyph{\glyph_name_modifier{#1}-not}\then + \fontinstwarning{\string\glyphpcc}{ + Base~glyph~`\glyph_name_modifier{#1}'~not~appended,\messagebreak + because~it~is~so~far~unencoded~in~the~glyph~base + } + \else + \fontinsterror{\string\glyphpcc}{ + Base~glyph~not~set.\messagebreak + This~could~be~a~sign~that~the~AFM~file~is~buggy + }\error_help_a + \fi\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\substitute_generic#1#2#3{ + \edef\a_macro{#2} + \edef\b_macro{#3} + \ifx \a_macro \b_macro + \x_cs\let{sub-#3}\undefined_command + \else + \x_cs\let{sub-#3}\a_macro + \x_cs\def{typ-#3}{#1} + \fi +} +\def\substitutesilent{\substitute_generic{ssub}} +\def\substitutenoisy{\substitute_generic{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: fitrig.dtx +\chardef\nin@ty=90 +\chardef\@clxxx=180 +\chardef\@lxxi=71 +\mathchardef\@mmmmlxviii=4068 +\chardef\@coeffz=72 +\chardef\@coefb=42 +\mathchardef\@coefc=840 +\mathchardef\@coefd=5040 +\def\TG@rem@pt#1{\expandafter\lose_measure\the#1\space} +\def\TG@term#1{ + \dimen@\@tempb\dimen@ + \advance\dimen@ #1\p@ +} +\def\TG@series{ + \dimen@\@lxxi\dimen@ + \divide \dimen@ \@mmmmlxviii + \edef\@tempa{\TG@rem@pt\dimen@} + \dimen@\@tempa\dimen@ + \edef\@tempb{\TG@rem@pt\dimen@} + \divide\dimen@\@coeffz + \advance\dimen@\m@ne\p@ + \TG@term\@coefb + \TG@term{-\@coefc}% + \TG@term\@coefd + \dimen@\@tempa\dimen@ + \divide\dimen@ \@coefd +} +\def\CalculateSin#1{{% + \if_undefined{sin(\number#1)}\then + \dimen@=#1\p@ + \TG@@sin + \x_cs\xdef{sin(\number#1)}{\TG@rem@pt\dimen@} + \fi +}} +\def\CalculateCos#1{{% + \if_undefined{cos(\number#1)}\then + \dimen@=\nin@ty\p@ + \advance \dimen@ -#1\p@ + \TG@@sin + \x_cs\xdef{cos(\number#1)}{\TG@rem@pt\dimen@} + \fi +}} +\def\TG@@sin{% + \ifdim\TG@reduce>+% + \else\ifdim\TG@reduce<-% + \else\TG@series\fi\fi +} +\def\TG@reduce#1#2{ + \dimen@#1#2\nin@ty\p@ + \advance\dimen@#2-\@clxxx\p@ + \dimen@-\dimen@ + \TG@@sin +} +\def\UseSin#1{\csname sin(\number#1)\endcsname} +\def\UseCos#1{\csname cos(\number#1)\endcsname} +\chardef\z@num\z@ +\x_cs\let{sin(0)} \z@num +\x_cs\let{cos(0)} \@ne +\x_cs\let{sin(90)} \@ne +\x_cs\let{cos(90)} \z@num +\x_cs\let{sin(-90)}\m@ne +\x_cs\let{cos(-90)}\z@num +\x_cs\let{sin(180)}\z@num +\x_cs\let{cos(180)}\m@ne +\def\CalculateTan#1{{% + \if_undefined{tan(\number#1)}\then + \CalculateSin{#1}% + \CalculateCos{#1}% + \a_dimen\UseCos{#1}\p@ + \divide \a_dimen \@iv + \b_dimen\UseSin{#1}\p@ + \b_dimen\two@fourteen\b_dimen + \divide\b_dimen\a_dimen + \x_cs\xdef{tan(\number#1)}{\TG@rem@pt\b_dimen} + \fi +}} +\def\UseTan#1{\csname tan(\number#1)\endcsname} +\mathchardef\two@fourteen=16384 +\chardef\@iv=4 +\x_cs\def{tan(90)}{\errmessage{Infinite tan !}} +\expandafter\let + \csname tan(-90)\expandafter\endcsname \csname tan(90)\endcsname +%%% 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 + \afm_write_setkern{#1}{#2}{\the\a_count} + \else\ifnum \a_count<-\minimum_kern + \afm_write_setkern{#1}{#2}{\the\a_count} + \fi\fi + \fi\fi +} +\afm_let{KPX}{KP} +\def\afm_write_setkern#1#2#3{\out_line{\string\setkern{#1}{#2}{#3}}} +\afm_def{C}(#1~;#2){\init_afm{#1}\do_list[#2]\afm_char} +\afm_def{CH}(<#1>~;#2){\uppercase{\init_afm{"#1}}\do_list[#2]\afm_char} +\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{ + \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} + {\number -\bbox_lly} + {\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\definealias#1#2#3{ + \expandafter\def \csname GN-#1 \expandafter\endcsname + \expandafter{ \csname g-#2 \expandafter\endcsname + \csname i-#3\endcsname} +} +\def\glyph_alias#1{ + \expandafter\expandafter \expandafter\glyph_alias_i + \csname GN-#1\endcsname +} +\def\glyph_alias_i#1#2{ + \expandafter\gobble_three \string#1 +} +\let\charnameprefix\empty +\def\charnamealias#1{ + \if_defined{GN-\charnameprefix#1}\then + \glyph_alias{\charnameprefix#1} + \else\if_defined{GN-#1}\then + \glyph_alias{#1} + \else + #1 + \fi\fi +} +\def\alias_incr#1{ + \expandafter\expandafter \expandafter\alias_incr_i + \csname GN-#1\endcsname +} +\def\alias_incr_i#1#2{ + \ifx#2\x_relax + \mathchardef#2=\@ne + \else + \a_count=#2 + \advance\a_count\@ne + \mathchardef#2=\a_count + \fi +} +\def\alias_char_name#1{ + \if_defined{GN-\charnameprefix#1}\then + \edef\char_name{ + \string\aliased{#1}{\glyph_alias{\charnameprefix#1}} + } + \alias_incr{\charnameprefix#1} + \else\if_defined{GN-#1}\then + \edef\char_name{ + \string\aliased{#1}{\glyph_alias{#1}} + } + \alias_incr{#1} + \else + \edef\char_name{#1} + \fi\fi +} +\def\autoaliasafm{ + \begingroup + \list_def{N}(##1){\alias_char_name{##1}} + \def\afm_write_setkern##1##2##3{ + \out_line{ + \string\setkern{\charnamealias{##1}}{\charnamealias{##2}}{##3} + } + } + \def\init_cc##1{% + \edef\char_name{\charnamealias{##1}} + \out_line{\string\setglyph{\char_name}} + } + \list_def{PCC}(##1~##2~##3){ + \afm_length\a_count{##2} + \afm_length\b_count{##3} + \out_lline{\string\glyphpcc + {\charnamealias{##1}}{\the\a_count}{\the\b_count}} + } +} +\def\endautoaliasafm{\endgroup} +\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@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{{ + \let\a_macro=\empty_command + \_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{} + \ifisstr{etx-name}\then + \def\do_slot{\x_cs\edef{slots-\slot_name}{\the\slot_number}} + \def\declarepsencoding##1##2##3{ + \a_toks={{##1}{##2}{##3}} + \out_line{\string\providepsencoding\the\a_toks} + \ifnum \transform_record_file=\closed_stream \else + \pout_line\transform_record_file + {\string\providepsencoding\the\a_toks} + \fi + } + \directfalse + \inputetx{\str{etx-name}} + \edef\a_macro{\a_macro\string\reencodefont{\str{etx-name}}} + \fi + \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@ne + \else + \expandafter\egroup \expandafter\e_count + \csname slots-#1\endcsname + \fi + \else + \e_count=#5 + \fi + \out_line{ + \ifnum \e_count>\m@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 + \if_oldstyle_ + \gdef\oldstyle_variant{\oldstyle_shape} + \if_file_exists{ + \font_family\font_weight\raw_shape\oldstyle_variant + \adobe_encoding\font_width.afm + }\then + \fake_shape_oldstyle_encoding + \else + \gdef\oldstyle_variant{\caps_shape} + \if_file_exists{ + \font_family\font_weight\raw_shape\oldstyle_variant + \adobe_encoding\font_width.afm + }\then + \fake_shape_oldstyle_encoding + \fi + \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_oldstyle_encoding{ + \if_file_exists{ + \font_family\font_weight\raw_shape\oldstyle_variant + \adobe_encoding\font_width.mtx + }\then % no action required + \else + \immediate\write16{ + INFO>~run~\string\transformfont\space\space + <\font_family\font_weight\raw_shape\oldstyle_variant + \raw_encoding\font_width>~from~ + <\font_family\font_weight\raw_shape\oldstyle_variant + \adobe_encoding\font_width> + } + \transformfont{ + \font_family\font_weight\raw_shape\oldstyle_variant + \raw_encoding\font_width + }{ + \reencodefont{\raw_encoding}{ + \fromafm{ + \font_family\font_weight\raw_shape\oldstyle_variant + \adobe_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 + \if_oldstyle_ + \fake_shape_o_oldstyle_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 +} +\def\fake_shape_o_oldstyle_encoding{ + \if_file_exists{ + \font_family\font_weight\oldstyle_variant + \raw_encoding\font_width.mtx + }\then + \if_file_exists{ + \font_family\font_weight\font_shape\oldstyle_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\oldstyle_variant + \raw_encoding\font_width>~from~ + <\font_family\font_weight\oldstyle_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\oldstyle_variant + \raw_encoding\font_width + \space from~ + \font_family\font_weight\oldstyle_variant + \raw_encoding\font_width + } + \transformfont{ + \font_family\font_weight\font_shape\oldstyle_variant + \raw_encoding\font_width + }{ + \slantfont{\SlantAmount}{ + \frommtx{ + \font_family\font_weight\oldstyle_variant + \raw_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 + \if_oldstyle_ + \if_file_exists{ + \font_family\font_weight\raw_shape\oldstyle_variant + \raw_variant\raw_encoding\font_width.mtx + }\then + \gdef\oldstyle_font{ + unsetnum, + \font_family\font_weight\raw_shape\oldstyle_variant + \raw_variant\raw_encoding\font_width, + resetosf, + } + \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 +} +\let\declarepsencoding=\gobble_three +\let\providepsencoding=\gobble_three +%%% 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 `xfntinst.sty'. |