% excligtb.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:
%
%  ligatures and kerning for "caps and small caps" fonts
%
%     This file should not be called for monospaced fonts !
%
% The following ligatures are integrated:
%
%   --
%   ---
%   -<hyphenchar>
%   >>
%   <<
%   ``
%   ''
%   ,,
%   !` and ?`
%

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

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


ligtable
    "`":  "`"=:oct"020",
          oct"020" kern 2u#,
          "?" kern 2u#,
          "!" kern 2u#;

ligtable
    "'":  "'"=:oct"021",
          oct"021" kern 2u#,
          "?" kern 2u#,
          "!" kern 2u#;
%
%
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
enddef;
def lig_co_table =
             "o":  oct"256": oct"362": oct"363":
                          oct"364": oct"365": oct"366":
                          oct"367"
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"343" kern k, oct"344" kern k, oct"345" kern k,
                          oct"346" 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
enddef;
def lig_ca_table =
           "a":    oct"241": oct"242": oct"340":
                          oct"341": oct"342":
                          oct"343": oct"344": oct"345":
                          oct"346"
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_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_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_cA_table =
             "A": oct"200": oct"201": oct"300": oct"301": oct"302":
             oct"303": oct"304": oct"305"
enddef;

def lig_cO_table =
             "O": oct"216": oct"322": oct"323": oct"324": oct"325":
                  oct"326": oct"330"
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"330" 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;

%
%
%
%
 k#:=-.5u#; ku#:=-1.0u#; 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#,
   "y" kern ku#, oct"270" kern ku#, oct"375" kern ku#,
   "v" kern ku#, "w" kern k#, "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
        "P":
        "T":
        "Y":    "a" kern kk#,
                lig_A_table(kk#);
 ligtable
        "F":
        "V":
        "W":
                if serifs:
                lig_a_table(kkk#),
                lig_A_table(kkk#),
                else:
                lig_a_table(kk#),
                lig_A_table(kk#),
                fi
        "K":
        "X":    lig_o_table(k#),
                lig_O_table(k#),
                lig_c_table(k#),
                lig_CGQ_table(k#),
                "g" kern k#, oct"247" kern k#,
                "q" kern k#;
 ligtable
        "O":
        "D":    "x" kern k#,
                "X" kern k#,
                "w" kern k#,
                "W" kern k#,
                lig_a_table(k#),
                lig_A_table(k#),
                "v" kern k#,
                "V" kern k#,
                "y" kern k#, oct"375" kern k#, oct"270" kern k#,
                "Y" kern k#, oct"335" kern k#, oct"230" kern k#;
 ligtable
        lig_cA_table:
                if serifs:
                "R":
                fi
                lig_c_table(k#),
                lig_CGQ_table(k#),
                lig_o_table(k#),
                lig_O_table(k#),
                "g" kern k#,  oct"247" kern k#,
                lig_u_table(k#),
                lig_U_table(k#),
                "q" kern k#,
        "L":
                "T" kern kk#, oct"224" kern kk#, oct"225" kern kk#,
                "t" kern kk#, oct"264" kern kk#, oct"265" kern kk#,
                "Y" kern kk#, oct"230" kern kk#, oct"335" kern kk#,
                "y" kern kk#, oct"270" kern kk#, oct"375" kern kk#,
                "V" kern kkk#,
                "v" kern kkk#,
                "W" kern kkk#,
                "w" kern kkk#;
 ligtable
        "I":
                "I" kern -k#; % Richard III

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

 ligtable
        "p":
        "t":
        "y":    lig_a_table(kk#);
 ligtable
        "f":
        "v":
        "w":
                if serifs:
                lig_a_table(kkk#)
                else:
                lig_a_table(kk#)
                fi,
        "k":
        "x":    lig_o_table(k#),
                lig_c_table(k#),
                "g" kern k#, oct"247" kern k#,
                "q" kern k#;
 ligtable
        lig_co_table:
        "d":    "x" kern k#,
                "w" kern k#,
                lig_a_table(k#),
                "v" kern k#,
                "y" kern k#, oct"270" kern k#, oct"375" kern k#;
 ligtable
        lig_ca_table:
                if serifs: "r": fi
                lig_c_table(k#),
                lig_o_table(k#),
                "g" kern k#, oct"247" kern k#,
                lig_u_table(k#),
                "q" kern k#,
        "l":    "'" kern kk#,
                "t" kern kk#,  oct"264" kern kk#, oct"265" kern kk#,
                "y" kern kk#,  oct"270" kern k#, oct"375" kern k#,
                "v" kern kkk#,
                "w" kern kkk#;
 ligtable
        "i":    "i" kern -k#; % skiing


endinput;
