% exrligtb.mf
%
% (c) Copyright 1995, 1996, 1997 J"org Knappen
% (c) Copyright 1990, 1992 Norbert Schwarz
%
% This file is part of ecfonts version 1.0
%
% Please read the files 00readme.txt, 00inst.txt, 00error.txt, and
% copyrite.txt for further information
%
% You find some documentation in ecdoc.tex (needs LaTeX2e)
%
% Content:
%
% ligtable and kerning programs for roman style fonts
%
%      This file should not be called for monospaced fonts !
%
%  The following ligatures are integrated:
%
%   fi
%   fl
%   ff
%   ffi
%   ffl
%
%   --
%   ---
%   -<hyphenchar>
%   >>
%   <<
%   ``
%   ''
%   ,,
%   !` and ?`

version_check(1,0);  % |version_check| was introduced in dc1.3

ligtable
    "f":   "i"=:oct"034",
           "f"=:oct"033",
           "l"=:oct"035",
           "'" kern itc#,
           "`" kern itc#,
           oct"020" kern itc#,
           oct"021" kern itc#,
           "?" kern itc#,
           "!" kern itc#,
           ")" kern itc#,
           "]" kern itc#;
ligtable
    oct"033":       % ff
          "i"=:oct"036",
          "l"=:oct"037",
          "'" kern itc#,
          "`" kern itc#,
          oct"020" kern itc#,
          oct"021" kern itc#,
          "?" kern itc#,
          "!" kern itc#,
          ")" kern itc#,
          "]" kern itc#;
ligtable
    "`":  "`"=:oct"020",
          oct"020" kern 2u#,
          "?" kern 2u#,
          "!" kern 2u#;

ligtable
    "'":  "'"=:oct"021",
          oct"021" kern 2u#,
          "?" kern 2u#,
          "!" kern 2u#;

ligtable
    "-":  "-" =: oct"025",
     oct"177" =: oct"177"; % <hyphen><hyphenchar> => <hyphenchar>

ligtable
    oct"025": "-"=:oct"026";  % "---"  => emdash

ligtable "<": "<" =: oct"023";     % "<<"
ligtable ">": ">" =: oct"024";     % ">>"
ligtable ",": "," =: oct"022";     % ",,"
ligtable "!": "`" =: oct"275";     % spanish shriek
ligtable "?": "`" =: oct"276";     % spanish query


def lig_o_table (expr k) =
             "o" kern k,  oct"256" kern k, oct"362" kern k, oct"363" kern k,
                          oct"364" kern k, oct"365" kern k, oct"366" kern k,
                          oct"367" kern k, oct"370" kern k
enddef;

def lig_a_table (expr k) =
           "a" kern k,    oct"240" kern k, oct"241" kern k, oct"340" kern k,
                          oct"341" kern k, oct"342" kern k, oct"342" kern k,
                          oct"343" kern k, oct"344" kern k, oct"345" kern k,
                          oct"346" kern k
enddef;

def lig_c_table (expr k) =
           "c" kern k,   oct"242" kern k, oct"243" kern k, oct"347" kern k
enddef;

def lig_e_table (expr k)=
             "e" kern k, oct"245" kern k, oct"246" kern k, oct"350" kern k,
                         oct"351" kern k, oct"352" kern k, oct"353" kern k
enddef;

def lig_u_table (expr k)=
             "u" kern k, oct"266" kern k, oct"267" kern k, oct"371" kern k,
                         oct"372" kern k, oct"373" kern k, oct"374" kern k
enddef;

def lig_A_table (expr k)=
             "A" kern k, oct"200" kern k, oct"201" kern k, oct"300" kern k,
                         oct"301" kern k, oct"302" kern k, oct"303" kern k,
                         oct"304" kern k, oct"305" kern k, oct"306" kern k
enddef;

def lig_O_table (expr k)=
             "O" kern k, oct"216" kern k, oct"322" kern k, oct"323" kern k,
                         oct"324" kern k, oct"325" kern k, oct"326" kern k,
                         oct"327" kern k, oct"330" kern k
enddef;

def lig_CGQ_table (expr k)=
             "C" kern k, "G" kern k, oct"202" kern k, oct"203" kern k,
                    oct"207" kern k, oct"307" kern k, "Q" kern k
enddef;

def lig_U_table (expr k)=
             "U" kern k, oct"226" kern k, oct"227" kern k, oct"331" kern k, 
             oct"332" kern k, oct"333" kern k, oct"334" kern k
enddef;

def lig_cA_table =
             "A": oct"200": oct"300": oct"301": oct"302":
             oct"303": oct"304": oct"305":
enddef;

k#:=-.5u#; ku#:=-1u#; kk#:=-1.5u#; kkk#:=-2u#; % four degrees of kerning

ligtable boundarychar:
   oct"020" kern -kk#, oct"021" kern -kk#, oct"022" kern -kk#,
   oct"055" kern -kk#, oct"140" kern -kk#, oct"047" kern -kk#;

ligtable oct"022":
   oct"015" kern 2u#, "," kern 2u#,
         oct"015":
   oct"022" kern 2u#,
   "j" kern -kkk#, oct"032" kern -kkk#, "g" kern -ku#, oct"247" kern -ku#,
   "y" kern -ku#, oct"270" kern -ku#, oct"375" kern -ku#,
   "v" kern kk#, "w" kern ku#, "V" kern kkk#, "W" kern kk#,
   "Y" kern kk#,  oct"230" kern kk#, oct"335" kern kk#,
   lig_O_table(k#), lig_CGQ_table(k#),
   boundarychar kern -kk#;

ligtable oct"020":
   oct"140" kern 2u#, oct"020" kern 2u#, boundarychar kern -kk#;

ligtable oct"021":
   oct"047" kern 2u#, oct"021" kern 2u#, boundarychar kern -kk#;

ligtable oct"024": % ">>"
   "." kern kk#, "," kern kk#;

ligtable
      "k":  "W" kern kk#, "V" kern kk#,
      if serifs: "v":    lig_a_table(-u#), fi
      "w": lig_e_table(k#),
           lig_a_table(k#),
           lig_o_table(k#),
           lig_c_table(k#);

ligtable
      "P":   lig_A_table(kk#),
      "y": oct"270": oct"375": % \"y, \'y  
             lig_o_table(k#),
             lig_e_table(k#),
             lig_a_table(k#),
             "." kern kk#,
             "," kern kk#;
ligtable
      "F":"V": "W":
           if serifs:
             "o" kern kk#,
             "a" kern kk#,
             "e" kern kk#,
             "y" kern kk#,
             "u" kern kk#,
             "r" kern kk#,
             "v" kern kk#,
             "s" kern kk#,
             "c" kern kk#,
             "d" kern kk#,
             "g" kern kk#,
             "m" kern kk#,
             "n" kern kk#,
             "p" kern kk#,
             "w" kern kk#,
             "z" kern kk#,
             oct"346" kern kk#,
             oct"370" kern kk#,
             lig_A_table(kkk#),
            else:
             "o" kern k#,
             "a" kern k#,
             "e" kern k#,
             "y" kern k#,
             "u" kern k#,
             "r" kern k#,
             "v" kern k#,
             "s" kern k#,
             "c" kern k#,
             "d" kern k#,
             "g" kern k#,
             "m" kern k#,
             "n" kern k#,
             "p" kern k#,
             "w" kern k#,
             "z" kern k#,
             oct"346" kern k#,
             oct"370" kern k#,
             lig_A_table(kk#),
            fi
       "X":  lig_O_table(k#),
             lig_CGQ_table(k#);

ligtable "K":  if serifs:
                 "v" kern kk#,
                 "w" kern k#,
               else:
                 "v" kern k#,
               fi 
               lig_o_table(k#),
               lig_CGQ_table(k#);

ligtable
       "T": oct"224": oct"225": % \v{T}, \c{T}
               "y" kern if serifs: k# else: kk# fi,
       "Y": oct"230": oct"335": % \"Y, \'Y
               "e" kern kk#,
               "o" kern kk#,
               "r" kern kk#,
               "a" kern kk#,
               "u" kern kk#,
               "n" kern kk#,
               oct"031" kern kk#, % \i
               "c" kern kk#, 
               "d" kern kk#,
               "g" kern kk#,
               "p" kern kk#,
               "s" kern kk#,
               "v" kern kk#,
               "w" kern kk#,
               "x" kern kk#,
               "z" kern kk#,
               lig_A_table(kk#);
ligtable
 "O": oct"216": oct"322": oct"323": oct"324": oct"325": oct"326": oct"330":
 "D": oct"204": oct"320":
               "X" kern k#,
               "W" kern k#,
               lig_A_table(k#),
               "V" kern k#,
               "Y" kern k#, oct"230" kern k#, oct"335" kern k#;
if serifs:
ligtable
       "m": "n": "h": 
               "W" kern kk#, "V" kern kk#,
       oct"253": oct"254": oct"255": oct"361": % \'n, \v{n}, \ng, \~n
               "t" kern k#,
               lig_u_table(k#),
               "b" kern k#,
               "y" kern k#,
               "v" kern k#,
               "w" kern k#;
ligtable
       "c": oct"242": oct"243": oct"347": % \'c, \v{c}, \c{c}
               "h" kern k#,
               "k" kern k#;
fi
ligtable
 "o": oct"256": oct"362": oct"363": oct"364": oct"365": oct"366": oct"370":
 "b": "p":     lig_e_table(-k#),
               lig_o_table(-k#),
               "x" kern k#,
               "d" kern -k#,
               lig_c_table(-k#),
               "q" kern -k#,
 "a": oct"240": oct"340": oct"341": oct"342": oct"343": oct"344": oct"345": 
              if serifs:
               "v" kern k#,
               "j" kern u#,
              else:
               "r" kern k#,
              fi
 "t": oct"264": oct"265":   
              "y" kern k#, oct"270" kern k#, oct"375" kern k#,
 "u": oct"266": oct"267": oct"371": oct"372": oct"373": oct"374":
              "w" kern k#;
ligtable
       lig_cA_table
              "y" kern if serifs: kk# else: k# fi,
              oct"270" kern if serifs: kk# else: k# fi,
              oct"375" kern if serifs: kk# else: k# fi,
       oct"202": %\k{A}
              "v" kern if serifs: kkk# else: k# fi, 
              "w" kern if serifs: kk# else: k# fi,
              lig_c_table(k#),
              "d" kern k#, oct"244" kern k#, 
              oct"236" kern k#, oct"360" kern k#,
              lig_e_table(k#),
              lig_o_table(k#),
              "q" kern k#,
  if serifs: "R":  oct"217": fi 
              "t" kern k#, oct"264" kern k#, oct"265" kern k#,
              lig_CGQ_table(k#),
              lig_O_table(k#),
              lig_U_table(k#),
  "L": oct"210": oct"211": oct"212":
       "T" kern kk#, oct"224" kern kk#, oct"225" kern kk#,
       "Y" kern kk#, oct"230" kern kk#, oct"335" kern kk#,
       "V" kern kkk#,
       "W" kern kkk#;
ligtable "g": "j" kern -k#; % logjam
ligtable "I": "I" kern -k#; % Richard III
ligtable "e": "V" kern kk#; % eV
ligtable oct"241": % \k{a}
    if serifs: "g" kern -k# , "p" kern -k#, fi\\ "w" kern k#;
ligtable oct"252": % \l
     "'" kern -k#
       if not serifs: ,
         "a" kern k#, oct"241" kern k#, "c" kern k#, oct"242" kern k#,
         "d" kern k#, "e" kern k#, oct"246" kern k#, "g" kern k#,
         "o" kern k#, oct"363" kern k#, "s" kern k#, oct"261" kern k#
       fi;

endinput;
