%%
%% This is file `fontdoc.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% fibasics.dtx  (with options: `doc')
%% ficommon.dtx  (with options: `doc')
%% fimain.dtx  (with options: `doc')
%% fimapgen.dtx  (with options: `doc')
%% 
%% This is a generated file.
%% 
%% Copyright 1993, 1994, 1995, 1996 Alan Jeffrey,
%% hacked and maintained 1997, 1998 Sebastian Rahtz,
%% copyright 1998, 1999, 2000, 2001 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.
%% This file may also be distributed by itself provided it is unchanged
%% and accompanied by some prominent file which states the location of
%% the sources for the fontinst system, from which this file was
%% generated.
%% 
%%% From file: fibasics.dtx
\def\fontinstversion{1.933}
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
\ProvidesPackage{fontdoc}
[2007/01/23 v\fontinstversion\space
  fontinst documentation package]
\newcommand*\needsfontinstversion[1]{%
   \ifFD@spec@
      \comment{Automatic processing of this document as a data file
      requires \textsf{fontinst} v\,#1 or higher.}%
   \else
      \Bheading{Needs fontinst v\thinspace#1}%
   \fi
}
\newif\ifFD@spec@
\FD@spec@false
\DeclareOption{specification}{\FD@spec@true}
\DeclareOption{hypertex}{
   \providecommand*\FD@codepoint[1]{%
      \uppercase{\edef\@tempa{#1}}%
      \special{html:<a href="%
         http://www.unicode.org/cgi-bin/refglyph?24-\@tempa
         ">%
      }%
      \texttt{U+\@tempa}%
      \special{html:</a>}%
   }%
}
\DeclareOption{pdftex}{
   \providecommand*\FD@codepoint[1]{%
      \mbox{%
         \uppercase{\edef\@tempa{#1}}%
         \ifx \pdfstartlink\@undefined
            \pdfannotlink
         \else
            \pdfstartlink
         \fi attr {/Border [0 0 0]} user {%
            /Subtype /Link /A <<%
               /S /URI /URI (%
                  http://www.unicode.org/cgi-bin/refglyph?24-\@tempa
               )%
            >>}%
         \textcolor{blue}{\texttt{U+\@tempa}}%
         \pdfendlink
      }%
   }%
   \AtEndOfPackage{\RequirePackage[pdftex]{color}}%
}
\InputIfFileExists{fontdoc.cfg}{%
   \typeout{*************************************^^J%
            * Local config file fontdoc.cfg used^^J%
            *************************************}%
}{}
\ProcessOptions\relax
\RequirePackage{amstext}
\newcount\a@count
\newcount\b@count
\newdimen\a@dimen
\def\x@cs#1#2{\expandafter#1\csname#2\endcsname}
\def\FD@swap@two#1#2{#2#1}
\newcommand\Aheading[1]{%
   \par\pagebreak[1]\addvspace\medskipamount
   \noindent\textbf{#1}\vadjust{\penalty200}\par
}
\newcommand\Bheading[1]{\par\noindent\textbf{#1}}
\raggedbottom
\ifdim 1sp>\lineskiplimit \lineskiplimit=0.5pt \fi
\newcommand\plain{\texttt{plain}}
\let\plainint=\int
\let\plaindiv=\div
\let\plainneg=\neg
\let\plainmax=\max
\let\plainmin=\min
\newcount\list@item@counter
\newcommand\TypesetList[8]{%
   \begingroup
      \list@item@counter=\z@
      \def\do##1{\advance\list@item@counter\@ne}%
      #8%
      \ifcase \list@item@counter \or
         \def\do##1{#1#7{##1}}%
      \or
         \def\do##1{%
            \advance\list@item@counter\@ne
            \ifnum \list@item@counter=\@ne #1\else #2\fi
            #7{##1}%
         }%
      \else
         \advance\list@item@counter\m@ne
         \expandafter\def \expandafter\do \expandafter##\expandafter1%
            \expandafter{\expandafter\ifnum \the\list@item@counter
               =\list@item@counter
               #4%
            \else\ifnum \z@=\list@item@counter
               #1%
            \else
               #3%
            \fi\fi
            \advance\list@item@counter\@ne
            #7{##1}%
         }%
      \fi
      \ifnum \z@=\list@item@counter
         #6%
      \else
         \list@item@counter=\z@
         #8%
         #5%
      \fi
   \endgroup
}
\let\x@relax=\relax
\def\eTeX#1{\do{\eTeXlogo\nolinebreak[3] v\,#1}}
\def\eTeXlogo{\ensuremath{\varepsilon}-\kern-.125em\TeX}
\def\pdfTeX#1#2{%
   \do{pdf\TeX\nolinebreak[3] v\,%
      \ifnum #1<100\space
         0.\ifnum #1<10\space 0\fi
      \else
         \expandafter\FD@swap@two \expandafter.%
      \fi
      #1#2%
   }
}
\def\needsTeXextension#1#2{%
   \Bheading{Needs
      \TypesetList{}{ or }{, }{, or }{}{(unspecified)}{\@firstofone}{#1}}%
}
\let\then=\iffalse
\let\Else=\else
\let\Fi=\fi
\def\generic@if#1{\iftrue}
\newcommand\showbranches{%
   \let\generic@if=\branches@if
   \let\then=\x@relax
   \let\Else=\branches@else
   \let\Fi=\branches@fi
}
\newcount\saved@slot@number
\def\branches@if#1{%
   \ifnum \branches@type=\tw@
      \begin{IfBranchDummy}%
      \textit{ if #1 then}%
   \else
      \par
      \ifFD@tight@\else \addvspace\medskipamount \fi
      \noindent\textit{If #1 then}%
   \fi
   \saved@slot@number=\slot@number
   \gdef\branches@type{0}%
   \let\par=\branches@par
}
\def\branches@else{%
   \ifnum \branches@type=\z@
      \textit{ relax else}%
      \gdef\branches@type{1}%
   \else
      \par
      \end{IfBranch}%
      \noindent\textit{Else}%
      \gdef\branches@type{2}%
   \fi
   \global\slot@number=\saved@slot@number
   \let\par=\branches@par
}
\def\branches@fi{%
   \ifnum \branches@type=\thr@@
      \expandafter\end \expandafter{\@currenvir}%
      \expandafter\gdef \expandafter\FD@saved@fis
         \expandafter{\FD@saved@fis \space fi}%
   \else
      \end{IfBranch}%
      \gdef\FD@saved@fis{Fi}%
   \fi
   \gdef\branches@type{3}%
   \let\par=\branches@par
}
\gdef\branches@type{4}
\def\branches@par{%
   \@restorepar
   \ifnum \branches@type=\thr@@
      \noindent\textit{\FD@saved@fis}\par
   \else
      \begin{IfBranch}%
   \fi
   \gdef\branches@type{4}%
}
\newif\ifFD@tight@
\newenvironment{IfBranch}{%
   \list{}{%
      \ifFD@tight@
         \setlength\topsep{\z@skip}%
         \@beginparpenalty=\z@
         \@endparpenalty=\z@
         \setlength\leftmargin{1em}%
      \else
         \setlength\topsep{\medskipamount}%
         \@beginparpenalty=-10%
         \@endparpenalty=\@beginparpenalty
         \setlength\leftmargin{\z@}%
      \fi
      \setlength\partopsep{\z@skip}%
      \setlength\itemsep{\z@skip}%
      \setlength\parsep{\z@ plus\p@}%
      \setlength\rightmargin{\z@}%
      \setlength\itemindent{\z@}%
   }%
   \item[]%
}{\endlist}
\newenvironment{IfBranchDummy}{}{}
\begingroup
   \catcode`\,=13
   \gdef\print@csep@list#1#2{%
      $%
      \ifnum "8000=\mathcode`\,\else
         \mathchardef\private@comma=\mathcode`\,%
         \mathcode`\,="8000\x@relax
      \fi
      #1%
      \let,=\active@comma
      #2%
      $%
   }
\endgroup
\def\active@comma{\private@comma \penalty\binoppenalty}
\let\messagebreak\space
\def\fontinsterror#1#2#3{%
   \Bheading{Error} observed by #1:%
   \begin{quote}#2.\end{quote}%
}
\def\fontinstwarning#1#2{
   \Bheading{Warning} from #1:%
   \begin{quote}#2.\end{quote}%
}
\let\fontinstwarningnoline=\fontinstwarning
\def\fontinstinfo#1#2{
   \Bheading{Info} from #1:%
   \begin{quote}#2.\end{quote}%
}
%%% From file: ficommon.dtx
\DeclareRobustCommand\PrintChar[1]{%
   \leavevmode
   \begingroup
      \count@=#1\relax
      \ifnum \@xxxii>\count@
         \advance \count@ 64%
         \InvisibleCharPrefix
         \PrintVisibleChar\count@
         \InvisibleCharSuffix
      \else\ifnum 127>\count@
         \PrintVisibleChar\count@
      \else
         \InvisibleCharPrefix
         \ifnum 127=\count@ \PrintVisibleChar{63}\else
            \@tempcnta=\count@
            \divide \count@ \sixt@@n
            \@tempcntb=\count@
            \multiply \count@ \sixt@@n
            \advance \@tempcnta -\count@
            \advance \@tempcntb \ifnum 9<\@tempcntb 87\else 48\fi
            \advance \@tempcnta \ifnum 9<\@tempcnta 87\else 48\fi
            \char\@tempcntb \char\@tempcnta
         \fi
         \InvisibleCharSuffix
      \fi\fi
   \endgroup
}
\newcommand\InvisibleCharPrefix{%
   \/\em
   \PrintVisibleChar{`\^}\PrintVisibleChar{`\^}%
}
\newcommand\InvisibleCharSuffix{\/}
\newcommand\PrintVisibleChar[1]{%
   \ifcase #1%
   \or\or\or\or\or\or\or\or \or\or\or\or\or\or\or\or
   \or\or\or\or\or\or\or\or \or\or\or\or\or\or\or\or
   % "20
      \textvisiblespace \or!\or\textquotedbl \or\#\or\textdollar
      \or\%\or\&\or\textquoteright\or(\or)\or*\or+\or,\or-\or.\or/%
   \or % "30
      0\or1\or2\or3\or4\or5\or6\or7\or8\or9\or:\or;\or
      \textless\or=\or\textgreater\or?%
   \or % "40
      @\or A\or B\or C\or D\or E\or F\or G\or
      H\or I\or J\or K\or L\or M\or N\or O%
   \or % "50
      P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z\or [\or
      \textbackslash \or]\or\textasciicircum \or\textunderscore
   \or % "60
      \textquoteleft \or a\or b\or c\or d\or e\or f\or g\or h\or
      i\or j\or k\or l\or m\or n\or o%
   \or % "70
      p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\or
      \textbraceleft \or\textbar \or\textbraceright \or\textasciitilde
   \fi
}
\DeclareTextCommandDefault{\textvisiblespace}{%
   \makebox[\fontdimen\tw@\font]{%
      \hfil
      \vrule \@height.3ex%
      \vbox{\hrule \@width .66\fontdimen\tw@\font}%
      \vrule \@height.3ex%
      \hfil
   }%
}
\def\FD@quoted@PrintChar#1{"\number#1"}
\count@=32
\begingroup
   \catcode\z@=12\relax
   \@firstofone{%
\endgroup
   \loop
      \if \ifnum 11=\catcode\count@ 1\else \ifnum 12=\catcode\count@
            1\else 0\fi\fi 1%
         \uccode\z@=\count@
         \uppercase{\def\@tempa{^^@}}%
      \else
         \edef\@tempa{\noexpand\PrintChar{\the\count@}}%
      \fi
      \x@cs\let{FD@printable@\the\count@}=\@tempa
      \advance \count@ \@ne
   \ifnum 127>\count@ \repeat
}
\@namedef{FD@printable@34}{\PrintChar{34}} % "
\@namedef{FD@printable@60}{\PrintChar{60}} % <
\@namedef{FD@printable@62}{\PrintChar{62}} % >
\def\MakePrintable#1#2#3{%
   \begingroup
      \toks@={}%
      \escapechar=`\\%
      \@tempswafalse
      \FD@printable@#3\protect\FD@printable@
      \toks@=\expandafter{%
         \expandafter\let \csname if#2\expandafter\endcsname
         \csname if\if@tempswa false\else true\fi \expandafter\endcsname
         \expandafter\def \expandafter#1\expandafter{\the\toks@}%
      }%
   \expandafter\endgroup \the\toks@
}
\def\FD@printable@iii{%
   \expandafter\futurelet \expandafter\@let@token
   \expandafter\FD@printable@iv \string
}
\def\FD@printable@iv{%
   \ifx \@let@token\@sptoken
      \expandafter\FD@printable@v
   \else
      \expandafter\FD@printable@vi
   \fi
}
\begingroup
   \catcode`3=\catcode`a
   \catcode`2=\catcode`a
   \@firstofone{\gdef\FD@printable@v} {%
      \toks@=\expandafter{\the \expandafter\toks@ \FD@printable@32}%
      \FD@printable@
   }
\endgroup
\def\FD@printable@vi#1{%
   \if \ifnum `#1<\@xxxii 1\else \ifnum `#1>126 1\else 0\fi\fi 1%
      \toks@=\expandafter{\the\expandafter\toks@
         \expandafter\PrintChar \expandafter{\number`#1}%
      }%
   \else
      \toks@=\expandafter{\the\expandafter\expandafter\expandafter\toks@
         \csname FD@printable@\number`#1\endcsname}%
   \fi
   \FD@printable@
}
\def\FD@printable@{\futurelet\@let@token \FD@printable@i}
\def\FD@printable@i{%
   \csname FD@printable@%
      \ifcat \noexpand\@let@token \noexpand\FD@printable@
         \ifx \@let@token\protect ii\else vii\fi
      \else iii\fi
   \endcsname
}
\def\FD@printable@ii\protect#1{%
   \@ifundefined{FD@printable\expandafter\zap@space\string#1 \@empty}{%
      \PackageError{fontdoc}{Command \protect#1 not allowed in string}%
         \@eha
   }{\csname FD@printable\expandafter\zap@space\string#1 \@empty
     \endcsname}%
}
\def\FD@printable@vii{\expandafter\FD@printable@vi \string}
\expandafter\let
   \csname FD@printable\string\FD@printable@\endcsname \@empty
\@namedef{FD@printable\string\PrintChar}#1{%
   \if \ifnum #1<\@xxxii 1\else \ifnum #1>126 1\else 0\fi\fi 1%
      \toks@=\expandafter{\the\expandafter\toks@
         \expandafter\PrintChar \expandafter{\number#1}%
      }%
   \else
      \toks@=\expandafter{\the\expandafter\expandafter\expandafter\toks@
         \csname FD@printable@\number#1\endcsname}%
   \fi
   \FD@printable@
}
\newcommand*\ExpandAndMakePrintable[3]{%
   \protected@edef\@tempa{{#2}{#3}}%
   \expandafter\MakePrintable \expandafter#1\@tempa
}
\def\FD@string@func#1#2{%
   \relax
   \ifnum \spacefactor=\@ne $\mkern1mu\else$\fi
   \mathrm{#1}($%
   #2%
   \ifnum \spacefactor=\@ne $\mkern-1mu\else $\fi)\mkern1mu$%
   \spacefactor=\@ne
}
\newcommand\TypesetStringExpression[1]{%
   \protected@edef\@tempa{%
      \noexpand\MakePrintable \noexpand\@tempa {FD@swa}{#1}%
   }%
   \@tempa
   \FD@typeset@string{\@tempa}%
}
\def\FD@typeset@string#1{%
   \mbox{%
      \normalfont\ttfamily
      \spacefactor=\@ne
      #1%
      \ifnum \spacefactor=\@ne $\mkern-1mu\m@th$\fi
   }%
}
\let\ifFD@swa\iffalse
\DeclareRobustCommand\str[1]{\FD@string@func{s}{#1}}
\@namedef{FD@printable\string\str}#1{%
   \MakePrintable\@tempa{FD@swa}{#1}%
   \begingroup
      \let\PrintChar=\FD@quoted@PrintChar
   \if \ifFD@swa \@ifundefined{FD@s-\@tempa}{0}{1}\else 0\fi 1%
      \expandafter
   \endgroup
      \csname FD@s-\@tempa\endcsname
   \else
   \endgroup
      \toks@=\expandafter{\the\expandafter\toks@
         \expandafter\str \expandafter{\@tempa}}%
      \@tempswatrue
   \fi
   \FD@printable@
}
\DeclareRobustCommand\strint[1]{\FD@string@func{int}{#1}}
\@namedef{FD@printable\string\strint}#1{%
   \MakePrintable\@tempa{FD@swa}{#1}%
   \protected@edef\@tempa{%
      \ifFD@swa \protect\FD@simple@int \else \strint \fi{\@tempa}%
   }
   \toks@=\expandafter{\the\expandafter\toks@ \@tempa}%
   \@tempswatrue
   \FD@printable@
}
\DeclareRobustCommand\macroparameter[1]{%
   \gdef\FD@expression{\text{\normalfont\itshape\##1}}%
   \global\chardef\FD@priority=5%
   \global\FD@bracket@level=\z@
   \FD@evaluate@false
}
\@namedef{FD@printable\string\macroparameter}#1{%
   \toks@=\expandafter{\the\toks@\textrm{\emph{\##1}}}%
   \@tempswatrue
   \FD@printable@
}
\newcommand\TypesetIntegerExpression[1]{%
   \protected@edef\@tempa{#1}%
   \expandafter\FD@eval@expr \expandafter{\@tempa}%
   \FD@expression
}
\newcount\FD@result
\newcount\FD@bracket@level
\def\FD@evaluate@true{\global\let\ifFD@evaluate@\iftrue}
\def\FD@evaluate@false{\global\let\ifFD@evaluate@\iffalse}
\FD@evaluate@false
\def\FD@eval@expr#1{%
   \expandafter\expandafter \expandafter\ifx
         \expandafter\@car#1\x@relax\@nil \protect
      #1%
   \else\ifcat \expandafter\noexpand \@car#1\x@relax\@nil 0%
      \global\FD@result=#1\x@relax
      \xdef\FD@expression{\the\FD@result}%
      \global\chardef\FD@priority=\ifnum \FD@result<\z@ 4\else 6\fi
      \global\FD@bracket@level=\z@
   \else
      \begingroup
      \MakePrintable\@tempa{FD@swa}{#1}%
      \global\FD@bracket@level=\ifFD@swa\z@\else\@ne\fi
      \protected@xdef\FD@expression{\protect\mbox{\texttt{\@tempa}}}%
      \endgroup
      \global\chardef\FD@priority=5%
      \FD@evaluate@false
   \fi\fi
}
\DeclareRobustCommand\add[2]{%
   \begingroup
   \FD@eval@expr{#1}%
   \let\@tempa=\FD@expression
   \ifFD@evaluate@ \a@count=\FD@result \fi
   \b@count=\FD@bracket@level
   \FD@eval@expr{#2}%
   \protected@xdef\FD@expression{\@tempa+\FD@expression}%
   \ifFD@evaluate@ \global\advance \FD@result \a@count \fi
   \ifnum \FD@bracket@level<\b@count
      \global\FD@bracket@level=\b@count
   \fi
   \global\chardef\FD@priority=\z@
   \endgroup
}
\DeclareRobustCommand\sub[2]{%
   \begingroup
   \FD@eval@expr{#1}%
   \let\@tempa=\FD@expression
   \ifFD@evaluate@ \a@count=\FD@result \fi
   \b@count=\FD@bracket@level
   \FD@eval@expr{#2}%
   \ifnum \FD@priority<\@ne \FD@bracket@expression \fi
   \protected@xdef\FD@expression{\@tempa-\FD@expression}%
   \ifFD@evaluate@
      \advance \a@count -\FD@result
      \global\FD@result=\a@count
   \fi
   \ifnum \FD@bracket@level<\b@count
      \global\FD@bracket@level=\b@count
   \fi
   \global\chardef\FD@priority=\z@
   \endgroup
}
\def\FD@subexpression#1{${%
   \advance \binoppenalty \FD@commapenalty
   \advance \relpenalty \FD@commapenalty
   \advance \FD@commapenalty \FD@commapenalty
   $#1$}$%
}
\newcount\FD@commapenalty
\FD@commapenalty=\binoppenalty
\advance \FD@commapenalty \relpenalty
\def\FD@bracket@expression{%
   \protected@xdef\FD@expression{%
      \ifcase\FD@bracket@level \or \protect\bigl \or \protect\Bigl \or
         \protect\biggl \else \protect\Biggl \fi (%
      \protect\FD@subexpression{\FD@expression}%
      \ifcase\FD@bracket@level \or \protect\bigr \or \protect\Bigr \or
         \protect\biggr \else \protect\Biggr \fi )%
   }%
   \global\chardef\FD@priority=5%
   \global\advance \FD@bracket@level \@ne
}
\DeclareRobustCommand\int[1]{%
   \begingroup
   \MakePrintable\@tempa{FD@swa}{#1}%
   \protected@xdef\FD@expression{%
      \ifFD@swa
         \text{\protect\FD@simple@int{\@tempa}}%
      \else
         \protect\FD@integer@func{int}{\@tempa}%
      \fi
   }%
   \global\chardef\FD@priority=5%
   \global\FD@bracket@level=\ifFD@swa\z@\else\@ne\fi
   \FD@evaluate@false
   \endgroup
}
\def\FD@simple@int#1{{\normalfont\itshape #1\/}}
\def\FD@integer@func#1#2{%
   \mathop{\mathrm{#1}{}}(\text{\FD@typeset@string{#2}})%
}
\DeclareRobustCommand\neg[1]{%
   \FD@eval@expr{#1}%
   \ifnum 5>\FD@priority \FD@bracket@expression \fi
   \protected@xdef\FD@expression{-\FD@expression}%
   \global\chardef\FD@priority=4%
   \ifFD@evaluate@ \global\FD@result=-\FD@result \fi
}
\DeclareRobustCommand\mul[2]{%
   \begingroup
   \FD@eval@expr{#1}%
   \ifnum \FD@priority<\@ne \FD@bracket@expression \fi
   \let\@tempa=\FD@expression
   \ifFD@evaluate@ \a@count=\FD@result \fi
   \b@count=\FD@bracket@level
   \let\FD@left@priority=\FD@priority
   \FD@eval@expr{#2}%
   \ifnum \FD@priority<\@ne \FD@bracket@expression \fi
   \protected@xdef\FD@expression{%
      \@tempa
      \if \ifnum \FD@left@priority=\@ne e%
          \else\ifnum \FD@priority<\thr@@ e%
          \else\ifodd \FD@priority i\else e\fi\fi\fi e%
         \cdot
      \fi
      \FD@expression
   }%
   \ifFD@evaluate@ \global\multiply \FD@result \a@count \fi
   \ifnum \FD@bracket@level<\b@count
      \global\FD@bracket@level=\b@count
   \fi
   \a@count=%
      \ifnum \FD@priority=\@ne 1%
      \else\ifnum \FD@left@priority=\@ne 2%
      \else\ifodd\FD@left@priority
         \ifodd\FD@priority 5\else 3\fi
      \else
         \ifodd\FD@priority 4\else 2\fi
      \fi\fi\fi
   \global\chardef\FD@priority=\a@count
   \endgroup
}
\DeclareRobustCommand\div[2]{%
   \begingroup
   \FD@eval@expr{#1}%
   \ifnum \FD@priority<\@ne \FD@bracket@expression \fi
   \let\@tempa=\FD@expression
   \ifFD@evaluate@ \a@count=\FD@result \fi
   \b@count=\FD@bracket@level
   \FD@eval@expr{#2}%
   \ifnum 4>\FD@priority \FD@bracket@expression \fi
   \ifnum \FD@bracket@level<\b@count
      \global\FD@bracket@level=\b@count
   \fi
   \protected@xdef\FD@expression{%
      \@tempa
      \ifcase\FD@bracket@level \or \protect\big \or \protect\Big \or
         \protect\bigg \else \protect\Bigg \fi /%
      \FD@expression
   }%
   \ifFD@evaluate@
      \divide \a@count \FD@result
      \global\FD@result=\a@count
   \fi
   \global\chardef\FD@priority=\@ne
   \endgroup
}
\def\FD@eval@spec@expr#1#2#3{%
   \expandafter\ifx \@car#1\x@relax\@nil #2%
      #3#1%
   \else
      \FD@eval@expr{#1}%
   \fi
}
\DeclareRobustCommand\max[2]{%
   \begingroup
   \toks@={}%
   \a@count=-\maxdimen
   \b@count=\z@
   \FD@eval@spec@expr{\max{#1}{#2}}{\max}{\FD@maxmin@comma}%
   \ifnum \a@count>\FD@bracket@level
      \global\FD@bracket@level=\a@count
   \fi
   \protected@xdef\FD@expression{%
      \protect\plainmax
      \ifcase\FD@bracket@level \protect\@firstofone \or \protect\bigl
         \or \protect\Bigl \or \protect\biggl \else \protect\Biggl
      \fi{\{}%
      \the\toks@
      \protect\FD@subexpression{\FD@expression}%
      \ifcase\FD@bracket@level \protect\@firstofone \or \protect\bigl
         \or \protect\Bigl \or \protect\biggl \else \protect\Biggl
      \fi{\}}%
   }%
   \ifFD@evaluate@
      \ifnum \a@count>\FD@result \global\FD@result=\a@count \fi
   \fi
   \global\chardef\FD@priority=5%
   \global\advance \FD@bracket@level \@ne
   \endgroup
}
\DeclareRobustCommand\min[2]{%
   \begingroup
   \toks@={}%
   \a@count=\maxdimen
   \b@count=\z@
   \FD@eval@spec@expr{\min{#1}{#2}}{\min}{\FD@maxmin@comma}%
   \ifnum \a@count>\FD@bracket@level
      \global\FD@bracket@level=\a@count
   \fi
   \protected@xdef\FD@expression{%
      \protect\plainmin
      \ifcase\FD@bracket@level \protect\@firstofone \or \protect\bigl
         \or \protect\Bigl \or \protect\biggl \else \protect\Biggl
      \fi{\{}%
      \the\toks@
      \protect\FD@subexpression{\FD@expression}%
      \ifcase\FD@bracket@level \protect\@firstofone \or \protect\bigl
         \or \protect\Bigl \or \protect\biggl \else \protect\Biggl
      \fi{\}}%
   }%
   \ifFD@evaluate@
      \ifnum \a@count<\FD@result \global\FD@result=\a@count \fi
   \fi
   \global\chardef\FD@priority=5%
   \global\advance \FD@bracket@level \@ne
   \endgroup
}
\def\FD@maxmin@comma#1#2#3{%
   \FD@eval@spec@expr{#2}{#1}{\FD@maxmin@comma}%
   \toks@=\expandafter{\the\expandafter\toks@
      \expandafter\protect \expandafter\FD@subexpression
      \expandafter{\FD@expression}%
      ,\penalty\FD@commapenalty\,%
   }
   \ifFD@evaluate@
      \ifnum \a@count \ifx\max#1<\else>\fi \FD@result
         \a@count=\FD@result
      \fi
   \fi
   \ifnum \b@count<\FD@bracket@level \b@count=\FD@bracket@level \fi
   \FD@eval@spec@expr{#3}{#1}{\FD@maxmin@comma}%
}
\DeclareRobustCommand\half[1]{%
   \begingroup
   \FD@eval@expr{#1}%
   \ifnum \FD@priority<\@ne \FD@bracket@expression \fi
   \a@count=%
      \ifnum \FD@priority=\@ne 1%
      \else\ifodd\FD@priority 5%
      \else 3\fi\fi
   \global\chardef\FD@priority=\a@count
   \protected@xdef\FD@expression{%
      \protect\frac{1}{2}%
      \ifnum \FD@priority>\thr@@ \else \cdot \fi
      \FD@expression
   }%
   \ifFD@evaluate@
      \ifodd \FD@result
         \global\advance \FD@result \@ne
         \global\divide \FD@result \tw@
         \ifodd\FD@result \global\advance \FD@result \m@ne \fi
      \else
         \global\divide \FD@result \tw@
      \fi
   \fi
   \endgroup
}
\DeclareRobustCommand\otherhalf[1]{%
   \begingroup
   \FD@eval@expr{#1}%
   \ifnum \FD@priority<\@ne \FD@bracket@expression \fi
   \a@count=%
      \ifnum \FD@priority=\@ne 1%
      \else\ifodd\FD@priority 5%
      \else 3\fi\fi
   \global\chardef\FD@priority=\a@count
   \protected@xdef\FD@expression{%
      \protect\frac{1}{2}%
      \ifnum \FD@priority>\thr@@ \else \cdot \fi
      \FD@expression
   }%
   \ifFD@evaluate@
      \ifodd \FD@result
         \global\advance \FD@result \@ne
         \global\divide \FD@result \tw@
         \ifodd\FD@result\else \global\advance \FD@result \m@ne \fi
      \else
         \global\divide \FD@result \tw@
      \fi
   \fi
   \endgroup
}
\DeclareRobustCommand\scale[2]{%
   \begingroup
   \FD@eval@expr{#1}%
   \ifnum \FD@priority<\@ne \FD@bracket@expression \fi
   \let\@tempa=\FD@expression
   \ifFD@evaluate@ \a@count=\FD@result \fi
   \b@count=\FD@bracket@level
   \let\FD@left@priority=\FD@priority
   \FD@eval@expr{#2}%
   \if \ifnum \FD@bracket@level<\@ne \ifnum \FD@priority>\thr@@
         1\else 0\fi\else 0\fi 1%
      \protected@xdef\FD@expression{%
         \protect\frac{\FD@expression}{1000}%
         \if \ifnum \FD@left@priority<\thr@@ e\else
             \ifodd \FD@left@priority i\else e\fi\fi e%
            \cdot
         \fi
         \@tempa
      }
      \global\chardef\FD@priority=%
         \ifnum \FD@left@priority=\@ne 1\else
         \ifodd\FD@left@priority 5\else 3\fi\fi
      \global\FD@bracket@level=\b@count
   \else
      \ifnum \FD@priority<\@ne \FD@bracket@expression \fi
      \protected@xdef\FD@expression{%
         \@tempa
         \if \ifnum \FD@left@priority=\@ne e%
             \else\ifnum \FD@priority<\thr@@ e%
             \else\ifodd \FD@priority i\else e\fi\fi\fi e%
            \cdot
         \fi
         \FD@expression
         \ifcase\FD@bracket@level \or \protect\big \or \protect\Big
            \or \protect\bigg \else \protect\Bigg \fi /1000%
      }%
      \ifnum \FD@bracket@level<\b@count
         \global\FD@bracket@level=\b@count
      \fi
      \global\chardef\FD@priority=\@ne
   \fi
   \ifFD@evaluate@
      \global\multiply \FD@result \a@count
      \global\divide \FD@result 500
      \ifodd \FD@result
         \global\advance \FD@result \ifnum 0>\FD@result - \fi \@ne
      \fi
      \global\divide \FD@result \tw@
   \fi
   \endgroup
}
\def\ifnumber#1#2#3\then{%
   \FD@evaluate@false
   \generic@if{%
      $\TypesetIntegerExpression{#1}#2\TypesetIntegerExpression{#3}$%
   }%
}
\newcommand\setint[2]{%
   \Bheading{Default} \(\TypesetIntegerExpression{\int{#1}}\) =
   \(\TypesetIntegerExpression{#2}\)%
}
\newcommand\setstr[2]{%
   \Bheading{Default} \TypesetStringExpression{\str{#1}} =
   \TypesetStringExpression{#2}%
}
\newcommand\setdim[2]{%
   \a@dimen=#2\relax
   \Bheading{Default} \TypesetStringExpression{#1} dimen = \the\a@dimen
}
\def\setcommand#1{\ifx#1\undefined@command
   \expandafter\gdef\expandafter#1\else
   \expandafter\gdef\expandafter\a@command\fi}
\newcommand\resetint[2]{%
   \Bheading{Value} \(\TypesetIntegerExpression{\int{#1}}\) =
   \(\TypesetIntegerExpression{#2}\)%
}
\newcommand\resetstr[2]{%
   \Bheading{Value} \TypesetStringExpression{\str{#1}} =
   \TypesetStringExpression{#2}%
}
\newcommand\resetdim[2]{%
   \a@dimen=#2\relax
   \Bheading{Value} \TypesetStringExpression{#1} dimen = \the\a@dimen
}
\def\resetcommand#1{\gdef#1}
\def\ifisint#1\then{%
   \generic@if{integer $\TypesetIntegerExpression{\int{#1}}$ set}%
}
\def\ifisstr#1\then{%
   \generic@if{string \TypesetStringExpression{#1} set}%
}
\def\ifisdim#1\then{%
   \generic@if{dimension \TypesetStringExpression{#1} set}%
}
\def\ifiscommand#1\then{%
   \generic@if{command \normalfont{\ttfamily\string#1} set}%
}
\def\offcommand#1{\Bheading{Turn off} \texttt{\string#1}}
\def\oncommand#1{\Bheading{Turn on} \texttt{\string#1}}
\newcommand\SetStringVariable[2]{%
   \protected@edef\@tempa{\noexpand\MakePrintable \noexpand\@tempa
      {FD@swa}{#2}}%
   \@tempa
   \protected@edef\@tempa{%
      \toks@=\noexpand\expandafter{\noexpand\the \toks@ \@tempa}%
      \ifFD@swa \noexpand\@tempswatrue \fi
   }%
   \protected@edef\@tempb{\noexpand\MakePrintable \noexpand\@tempb
      {FD@swa}{#1}}%
   \@tempb
   \ifFD@swa
      \begingroup
         \let\PrintChar=\FD@quoted@PrintChar
         \global\expandafter\let \csname FD@s-\@tempb\endcsname \@tempa
      \endgroup
   \else
      \PackageError{fontdoc}{Names of string variables must be
         simple\MessageBreak if they are to be assigned values}\@eha
   \fi
}
\def\foreach(#1)#2{%
   \def\next##1\endfor(#1){%
      \@for\@tempa:=#2\do{%
         \SetStringVariable{#1}{\@tempa}%
         ##1%
      }%
   }%
   \next
}
\def\comment{\par\noindent}
\let\begincomment=\iftrue
\let\endcomment=\fi
%%% From file: fimain.dtx
\def\inputetx#1{%
   \begingroup
      \edef\lowercase@file{\lowercase{%
         \edef\noexpand\lowercase@file{#1}%
      }}%
      \lowercase@file
      \global\slot@number=0%
      \FD@slot@known@true
      \IfFileExists{\lowercase@file.etx}{%
         \FD@relax@encoding@tricks
         \@@input \@filef@und
         \let\relax=\x@relax
      }{%
         \PackageError{fontdoc}{File #1.etx not found}%
            {\@eha\MessageBreak You can \protect\inputetx\space
             some other file now, if you want.}%
      }
   \endgroup
}
\def\FD@relax@encoding@tricks{%
   \def\relax{\let\relax=\x@relax\iffalse}%
   \let\encoding=\fi
   \outer\x@cs\def{endencoding}{\endinput}%
}
\def\encoding{%
   \par
   \ifFD@spec@ \addvspace{\bigskipamount}\fi
   \begin{flushleft}
   \global\slot@number=\z@
}
\outer\def\endencoding{%
   \end{flushleft}
   \ifFD@spec@ \addvspace{\bigskipamount}\fi
}
\newcommand\setslot[1]{%
   \protected@edef\slot@name{%
      \noexpand\MakePrintable \noexpand\slot@name {FD@swa}{#1}%
   }%
   \slot@name
   \FD@tight@true
   \Aheading{Slot
      \ifFD@slot@known@
         \the\slot@number\space
      \else
         \(\FD@slot@expression + \the\slot@number\)
      \fi
      `\FD@typeset@string{\slot@name}'%
   }%
   \protected@edef\@currentlabel{%
      \ifFD@slot@known@
         \the\slot@number
      \else
         \protect\(%
         \FD@slot@expression+\the\slot@number
         \protect\)%
      \fi
      \space(\protect\FD@typeset@string{\slot@name})%
   }%
   \ifFD@slot@known@ \ifslot@comment@ \comment{\slot@comment}\fi\fi
}
\def\endsetslot{%
   \global\advance \slot@number \@ne
   \FD@tight@false
}
\newcount\slot@number
\def\FD@slot@known@true{\global\let\ifFD@slot@known@\iftrue}
\def\FD@slot@known@false{\global\let\ifFD@slot@known@\iffalse}
\FD@slot@known@true
\newcommand\nextslot[1]{%
   \FD@evaluate@true
   \FD@eval@expr{#1}%
   \ifFD@evaluate@
      \global\slot@number=\FD@result
      \FD@slot@known@true
   \else
      \global\let\FD@slot@expression=\FD@expression
      \global\slot@number=\z@
      \FD@slot@known@false
   \fi
}
\newcommand\skipslots[1]{%
   \FD@evaluate@true
   \FD@eval@expr{#1}%
   \ifFD@evaluate@
      \global\advance \slot@number \FD@result
   \else
      \ifFD@slot@known@
         \global\let\FD@slot@expression=\FD@expression
      \else
         \protected@xdef\FD@slot@expression{%
            \FD@slot@expression+\FD@expression
         }%
      \fi
      \FD@slot@known@false
   \fi
}
\newcommand\setleftboundary[1]{%
   \protected@edef\slot@name{%
      \noexpand\MakePrintable \noexpand\slot@name {FD@swa}{#1}%
   }%
   \slot@name
   \FD@tight@true
   \Aheading{Left boundary `\FD@typeset@string{\slot@name}'}%
   \protected@edef\@currentlabel{%
      left boundary (\protect\FD@typeset@string{\slot@name})%
   }%
}
\let\endsetleftboundary=\FD@tight@false
\newcommand\setrightboundary[1]{%
   \Aheading{Right boundary slot
      \ifFD@slot@known@
         \the\slot@number\space
      \else
         \(\FD@slot@expression + \the\slot@number\)
      \fi
      `\TypesetStringExpression{#1}'%
   }%
   \global\advance \slot@number \@ne
}
\newcommand\ligature[3]{%
   \Bheading{\ifFD@spec@ Ordinary ligature\else Ligature\fi}
   \@nameuse{FD@lig-#1}{#2}{#3}%
}
\newcommand\Ligature[3]{%
   \Bheading{\ifFD@spec@ Mandatory ligature\else Ligature\fi}
   \@nameuse{FD@lig-#1}{#2}{#3}%
}
\newcommand\oddligature[4]{%
   \Bheading{Odd\footnote{#1} ligature}
   \@nameuse{FD@lig-#2}{#3}{#4}%
}
\x@cs\def{FD@lig-LIG}#1#2{%
   \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}%
   ${}\rightarrow{}$\typeset@glyph{#2}%
}
\x@cs\def{FD@lig-/LIG}#1#2{%
   \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}%
   ${}\rightarrow{}$%
   \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#2}%
}
\x@cs\def{FD@lig-LIG/}#1#2{%
   \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}%
   ${}\rightarrow{}$%
   \typeset@glyph{#2}${}*{}$\typeset@glyph{#1}%
}
\x@cs\def{FD@lig-/LIG/}#1#2{%
   \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}%
   ${}\rightarrow{}$%
   \FD@typeset@string{\slot@name}${}*{}$%
   \typeset@glyph{#2}${}*{}$\typeset@glyph{#1}%
}
\x@cs\def{FD@lig-/LIG>}#1#2{%
   \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}%
   ${}\rightarrow{}$%
   \FD@typeset@string{\slot@name}${}*\lfloor$\typeset@glyph{#2}%
}
\x@cs\def{FD@lig-LIG/>}#1#2{%
   \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}%
   ${}\rightarrow{}$%
   \typeset@glyph{#2}${}*\lfloor$\typeset@glyph{#1}%
}
\x@cs\def{FD@lig-/LIG/>}#1#2{%
   \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}%
   ${}\rightarrow{}$%
   \FD@typeset@string{\slot@name}${}*\lfloor$%
   \typeset@glyph{#2}${}*{}$\typeset@glyph{#1}%
}
\x@cs\def{FD@lig-/LIG/>>}#1#2{%
   \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}%
   ${}\rightarrow{}$%
   \FD@typeset@string{\slot@name}${}*{}$%
   \typeset@glyph{#2}${}*\lfloor$\typeset@glyph{#1}%
}
\def\nextlarger#1{\Bheading{Next larger} \typeset@glyph{#1}}
\def\makerightboundary#1{%
   \Bheading{Right boundary marker slot} designation \typeset@glyph{#1}%
}
\newcommand*\Unicode[2]{%
   \comment{%
      \spaceskip=\fontdimen2\font minus 1.1\fontdimen4\font
      Unicode character \FD@codepoint{#1}%
      \ifx \par#2\par \else , \FD@charname{#2}\fi.%
      \linepenalty=300\par
   }%
}
\newcommand*\textunicode[2]{%
   \FD@codepoint{#1} \ifx\par#2\par\else(\FD@charname{#2})\fi
}
\providecommand*\FD@codepoint[1]{\texttt{U+\uppercase{#1}}}
\providecommand*\FD@charname[1]{\textsc{\lowercase{#1}}}
\newcommand\charseq[1]{%
   \comment{Unicode character sequence:}%
   \begin{IfBranch}%
      \def\Unicode##1##2{%
         \noindent\FD@codepoint{##1}
         \ifx\par##2\par\else(\FD@charname{##2})\fi
         \par
      }%
      #1%
   \end{IfBranch}%
}
\def\varchar{\Bheading{Extensible glyph:}}
\def\vartop#1{\Bheading{Top} \typeset@glyph{#1}}
\def\varmid#1{\Bheading{Middle} \typeset@glyph{#1}}
\def\varbot#1{\Bheading{Bottom} \typeset@glyph{#1}}
\def\varrep#1{\Bheading{Repeated} \typeset@glyph{#1}}
\let\endvarchar\relax
\newif\ifslot@comment@
\slot@comment@false
\def\slot@comment{}
\newcommand\setslotcomment[1]{%
   \slot@comment@true
   \gdef\slot@comment{#1}%
}
\newcommand\resetslotcomment[1]{\gdef\slot@comment{#1}}
\newcommand\unsetslotcomment{%
   \slot@comment@false
   \global\let\slot@comment\@empty
}
\let\slot@font=\nullfont
\newcommand\useexamplefont[1]{\font\slot@font=#1 }
\newcommand\slotexample{%
   \ifFD@slot@known@{\slot@font\char\slot@number}\fi
}
\newcommand\setfontdimen[2]{%
   \Bheading{Fontdimen} \TypesetStringExpression{#1} is
   \(\TypesetIntegerExpression{\int{#2}}\)%
}
\newcommand\ifdirect{\generic@if{direct}}
\def\inputmtx#1{%
   \begingroup
      \edef\lowercase@file{\lowercase{%
         \edef\noexpand\lowercase@file{#1}%
      }}%
      \lowercase@file
      \let\endmetrics@hook=\@empty
      \IfFileExists{\lowercase@file.mtx}{%
         \skip@mtx@preamble
         \@@input \@filef@und
         \let\relax=\x@relax
      }{%
         \PackageError{fontdoc}{File #1.mtx not found}%
            {\@eha\MessageBreak You can \protect\inputmtx\space
             some other file now, if you want.}%
      }
      \endmetrics@hook
   \endgroup
}
\def\skip@mtx@preamble{%
   \def\relax{\let\relax=\x@relax\iffalse}%
   \let\metrics=\fi
   \outer\x@cs\def{endmetrics}{\endinput}%
}
\def\metrics{%
   \begin{flushleft}%
   \let\endmetrics@hook=\@empty
}
\outer\def\endmetrics{%
   \endmetrics@hook
   \end{flushleft}%
}
\def\ProvidesMtxPackage#1{%
   \endmetrics@hook
   \announce@package{#1}%
   \def\endmetrics@hook{\finish@package{#1}}
   \global\x@cs\let{FD@pack-#1}\@empty
}
\def\announce@package#1{%
   \Aheading{[Start of metric package \textsf{#1}.}%
}
\def\finish@package#1{%
      \Aheading{End of metric package \textsf{#1}.]}%
   \par\addvspace\medskipamount
}
\newcommand\usemtxpackage[2][\x@relax]{%
   \ifx \x@relax#1%
      \@for\@tempa:=#2\do{%
         \x@cs\ifx{FD@pack-\@tempa}\@empty \else
            \inputmtx{\@tempa}%
         \fi
      }%
   \else
      \@tempswafalse
      \@for\@tempa:=#1\do{%
         \x@cs\ifx{FD@pack-\@tempa}\@empty \else \@tempswatrue \fi
      }%
      \if@tempswa
         \inputmtx{#2}%
      \fi
   \fi
}
\newcommand\setkern[3]{%
   \Bheading{Kern} \typeset@glyph{#1}${{}+{}}$\typeset@glyph{#2}%
   ${}\rightarrow \TypesetIntegerExpression{#3}$%
}
\newcommand\resetkern[3]{%
   \Bheading{Override kern} \typeset@glyph{#1}${{}+{}}$\typeset@glyph{#2}%
   ${}\rightarrow \TypesetIntegerExpression{#3}$%
}
\newcommand\setleftkerning[3]{%
   \Bheading{Kern} \typeset@glyph{#1} on the left like
   \typeset@glyph{#2} \ConditionallyScaled{#3}}
\newcommand\setrightkerning[3]{%
   \Bheading{Kern} \typeset@glyph{#1} on the right like
   \typeset@glyph{#2} \ConditionallyScaled{#3}}
\newcommand\setleftrightkerning[3]{%
   \Bheading{Kern} \typeset@glyph{#1} on the left and right like
   \typeset@glyph{#2} \ConditionallyScaled{#3}}
\newcommand\ConditionallyScaled[1]{%
   \FD@evaluate@true
   \FD@eval@expr{#1}%
   \@tempswatrue
   \ifFD@evaluate@ \ifnum \FD@result=\@m \@tempswafalse \fi\fi
   \FD@evaluate@false
   \if@tempswa scaled \(\FD@expression\)\else \ignorespaces \fi
}
\DeclareRobustCommand\kerning[2]{%
   \begingroup
   \MakePrintable\@tempa{FD@swa}{#1}%
   \MakePrintable\@tempb{FD@swa}{#2}%
   \protected@xdef\FD@expression{%
      \mathop{\protect\mathrm{k{}}}(%
      \text{\protect\FD@typeset@string{\@tempa}}%
      ,\penalty\FD@commapenalty
      \text{\protect\FD@typeset@string{\@tempb}}%
      )%
   }%
   \global\chardef\FD@priority=5%
   \global\FD@bracket@level=\@ne
   \FD@evaluate@false
   \endgroup
}
\def\ifiskern#1#2\then{%
   \generic@if{kern \typeset@glyph{#1}${}+{}$\typeset@glyph{#2} set}%
}
\newcommand\unsetkerns[2]{%
   \Bheading{Remove} all kerning pairs in
   \FD@typeset@string@set{#1}${}\times{}$\FD@typeset@string@set{#2}%
}
\def\FD@typeset@string@set#1{%
   \toks@={}%
   \@for\@tempa:=#1\do{%
      \protected@edef\@tempa{%
         \noexpand\MakePrintable \noexpand\@tempa {FD@swa}{\@tempa}%
      }%
      \@tempa
      \toks@=\expandafter{\the\expandafter\toks@
         \expandafter\do \expandafter{\@tempa}}%
   }%
   \expandafter\FD@typeset@string@set@ \expandafter{\the\toks@}%
}
\def\FD@typeset@string@set@#1{%
   \TypesetList{$\{$}{$,\penalty\FD@commapenalty{}$}%
      {$,\penalty\FD@commapenalty{}$}{$,\penalty\FD@commapenalty{}$}%
      {$\}$}{$\emptyset$}{\FD@typeset@string}{#1}%
}
\newcommand\noleftkerning[1]{%
   \Bheading{Remove kerns} on the left of glyphs in
   \FD@typeset@string@set{#1}.}
\newcommand\norightkerning[1]{%
   \Bheading{Remove kerns} on the right of glyphs in
   \FD@typeset@string@set{#1}.}
\newcommand\noleftrightkerning[1]{%
   \Bheading{Remove kerns} on any side of glyphs in
   \FD@typeset@string@set{#1}.}
\let\typeset@glyph=\TypesetStringExpression
\DeclareRobustCommand\width[1]{\FD@glyph@metric{w}{#1}}
\DeclareRobustCommand\height[1]{\FD@glyph@metric{h}{#1}}
\DeclareRobustCommand\depth[1]{\FD@glyph@metric{d}{#1}}
\DeclareRobustCommand\italic[1]{\FD@glyph@metric{i}{#1}}
\def\FD@glyph@metric#1#2{%
   \begingroup
   \MakePrintable\@tempa{FD@swa}{#2}%
   \protected@xdef\FD@expression{%
      \protect\FD@integer@func{#1}{\@tempa}%
   }%
   \global\chardef\FD@priority=5%
   \global\FD@bracket@level=\@ne
   \FD@evaluate@false
   \endgroup
}
\newcommand\setglyph[1]{%
   \FD@tight@true
   \Aheading{Set glyph `\typeset@glyph{#1}'}%
}
\newcommand\resetglyph[1]{%
   \FD@tight@true
   \Aheading{Reset glyph `\typeset@glyph{#1}'}}
\let\endsetglyph=\FD@tight@false
\let\endresetglyph=\FD@tight@false
\newcommand\setrawglyph[8]{%
   \Aheading{Glyph `\typeset@glyph{#1}'}
   \Bheading{Taken from} slot $\TypesetIntegerExpression{#4}$ in
   font \TypesetStringExpression{#2}%
}
\newcommand\setscaledrawglyph[9]{%
   \Aheading{Glyph `\typeset@glyph{#1}'}
   \Bheading{Taken from} slot $\TypesetIntegerExpression{#5}$ in
   font \TypesetStringExpression{#2} \ConditionallyScaled{#4}%
}
\newcommand\setnotglyph[8]{%
   \Aheading{Pseudoglyph `\typeset@glyph{#1-not}'}%
}
\newcommand\setscalednotglyph[9]{%
  \setnotglyph{#1}{#2}{#3}{#5}{#6}{#7}{#8}{#9}%
}
\newcommand\unsetglyph[1]{%
   \Aheading{Unset glyph `\typeset@glyph{#1}'}}
\newcommand\glyph[2]{%
   \Bheading{Glyph} `\typeset@glyph{#1}' \ConditionallyScaled{#2}%
}
\newcommand\glyphrule[2]{%
   \Bheading{Rule} $\TypesetIntegerExpression{#1}$ by
   $\TypesetIntegerExpression{#2}$%
}
\newcommand\glyphspecial[1]{%
   \Bheading{Special} `\TypesetStringExpression{#1}'}
\newcommand\glyphwarning[1]{%
   \Bheading{Warning} `\TypesetStringExpression{#1}'}
\newcommand\movert[1]{\Bheading{Rt}~$\TypesetIntegerExpression{#1}$}
\newcommand\moveup[1]{\Bheading{Up}~$\TypesetIntegerExpression{#1}$}
\newcommand\push{\Bheading{Push}}
\newcommand\pop{\Bheading{Pop}}
\newcommand\resetwidth[1]{%
   \Bheading{Reset width to $\TypesetIntegerExpression{#1}$}%
}
\newcommand\resetheight[1]{%
   \Bheading{Reset height to $\TypesetIntegerExpression{#1}$}%
}
\newcommand\resetdepth[1]{%
   \Bheading{Reset depth to $\TypesetIntegerExpression{#1}$}%
}
\newcommand\resetitalic[1]{%
   \Bheading{Reset italic to $\TypesetIntegerExpression{#1}$}%
}
\def\glyphpcc#1#2#3{
   \push
      \movert{#2}
      \moveup{#3}
      \glyph{#1}{1000}
   \pop
}
\DeclareRobustCommand\glyphbboxright{%
   \gdef\FD@expression{\protect\mathrm{glyphbboxright}}
   \global\chardef\FD@priority=\tw@
   \global\FD@bracket@level=\z@
   \FD@evaluate@false
}
\newcommand\samesize[1]{%
   \Bheading{Reset dimensions to those of `\typeset@glyph{#1}'.}%
}
\def\ifisglyph#1\then{\generic@if{glyph \typeset@glyph{#1} set}}
\def\ifareglyphs#1\then{%
   \generic@if{all glyphs in \FD@typeset@string@set{#1} are set}%
}
\def\ifisinslot#1#2\then{%
   \generic@if{glyph \typeset@glyph{#1} assigned to slot
   $\TypesetIntegerExpression{#2}$}%
}
\def\ifoption#1\then{%
   \generic@if{option \TypesetStringExpression{#1}}%
}
%%% From file: fimapgen.dtx
\def\mapfrags_subsystem{Map~fragments~writer}
\def\declarepsencoding#1#2#3{\comment{%
   This file corresponds to the \FD@typeset@string{#2} encoding vector.}}
\newcommand\providepsencoding[3]{}
\endinput
%%
%% End of file `fontdoc.sty'.