% File:       MF Inputs ibylig.mf
% Author:     Pierre A. MacKay
% Internet:   mackay@cs.washington.edu
% Date:       Friday, 06 May 1994
% Copyright 1994 by Pierre A. MacKay
% The contents of this file are licensed free for
% use and redistribution under the terms of the  
% GNU General Public License.  For the terms of  
% this license see any publication of the Free   
% Software Foundation or any software packages   
% distributed by the Free Software Foundation.   
% 
ligtable "-": "-" =: en_dash;  % en-dash
ligtable en_dash: "-" =: em_dash;  % em-dash
 
k#:=-.5u#; kk#:=-1.5u#; kkk#:=-2u#; % three degrees of back kerning
i#:=.5u#; ii#:=1.5u#; iii#:=2u#; % three degrees of forward kerning

ligtable sp_asper: "(" =: ASCII"(", peri_spomenon =: asper_peri, 
  oxy_tone =: asper_oxy, bary_tone =: asper_bary,
  "A" =:| asper_glyph, "E" =:| asper_glyph, "H" =:| asper_glyph,
  "O" =:| asper_glyph, "W" =:| asper_glyph, "I" =:| asper_glyph,
  "U" =:| asper_glyph, "R" =:| asper_glyph;
ligtable sp_lenis: ")" =: ASCII")", peri_spomenon =: lenis_peri,
  oxy_tone =: lenis_oxy, bary_tone =: lenis_bary,
  "A" =:| lenis_glyph, "E" =:| lenis_glyph, "H" =:| lenis_glyph,
  "O" =:| lenis_glyph, "W" =:| lenis_glyph, "I" =:| lenis_glyph, 
  "U" =:| lenis_glyph, "R" =:| lenis_glyph;
%
% the glyphs for the breathings (spiritus) are not in the same code
% location as the digraph input characters, owing to the change from
% Silvio Levy's mapping to modified TLG Betacode.
%
ligtable asper_glyph:  "<" =: guillemotleft,
  "A" kern -2.5u#, "E" kern kk#, "H" kern kk#, "R" kern kk#,
  "O" kern kk#, "W" kern kk#, "I" kern kk#, "U" kern kk#;
ligtable lenis_glyph: ">" =: guillemotright,
  "A" kern kkk#, "E" kern k#, "H" kern k#, "R" kern k#,
  "O" kern k#, "W" kern k#, "I" kern k#, "U" kern k#;
ligtable asper_oxy: lenis_oxy:
  "A" kern kkk#, "E" kern k#, "H" kern k#, "R" kern k#,
  "O" kern k#, "W" kern k#, "I" kern k#, "U" kern k#;
ligtable asper_bary: lenis_bary:
  "A" kern kkk#, "E" kern k#, "H" kern k#, "R" kern k#,
  "O" kern k#, "W" kern k#, "I" kern k#, "U" kern k#;

ligtable "a": bary_tone =: a_bary, oxy_tone =: a_oxy,
  peri_spomenon =: a_peri, iotasub =: a_isub,
  "(" =: a_aspr, ")" =: a_len, "i" kern i#; % Post-positive breathings
ligtable "h": bary_tone =: h_bary, oxy_tone =: h_oxy,
  peri_spomenon =: h_peri, iotasub =: h_isub,
  "(" =: h_aspr, ")" =: h_len, "i" kern ii#,
  i_bary kern ii#, i_oxy kern ii#, i_peri kern ii#, 
  i_asproxy kern ii#, i_asprbary kern ii#, i_asprperi kern ii#, 
  i_lenoxy kern ii#, i_lenbary kern ii#, i_lenperi kern ii#; 
ligtable "w": bary_tone =: w_bary, oxy_tone =: w_oxy,
  peri_spomenon =: w_peri, iotasub =: w_isub,
  "(" =: w_aspr, ")" =: w_len, "i" kern i#, "n" kern k#; 
ligtable "e": bary_tone =: e_bary, oxy_tone =: e_oxy,
  "(" =: e_aspr, ")" =: e_len, "i" kern i#; 
ligtable "o": bary_tone =: o_bary, oxy_tone =: o_oxy,
  "(" =: o_aspr, ")" =: o_len, "n" kern k#, "h" kern k#, "l" kern k#; 
ligtable "i": bary_tone =: i_bary, oxy_tone =: i_oxy,
  peri_spomenon =: i_peri, 
  "(" =: i_aspr, ")" =: i_len, diaer =: i_diaer,
  "c" kern k#, "d" kern k#, "f" kern k#, "g" kern kk#, "h" kern kk#, 
  "k" kern k#, "l" kern k#, "n" kern kk#, "o" kern k#, "p" kern kk#, 
  "q" kern k#, "s" kern k#, "t" kern kk#, 
  "u" kern kk#, "w" kern k#, "x" kern k#, "y" kern k#;
ligtable "u": bary_tone =: u_bary, oxy_tone =: u_oxy,
  peri_spomenon =: u_peri, 
  "(" =: u_aspr, ")" =: u_len, diaer =: u_diaer, "i" kern i#; 
ligtable "r": "(" =: r_aspr, ")" =: r_len, "i" kern i#; 

ligtable a_aspr: oxy_tone =: a_asproxy, bary_tone =: a_asprbary,
  peri_spomenon =: a_asprperi, iotasub =: a_asprisub, "i" kern i#;
ligtable h_aspr: oxy_tone =: h_asproxy, bary_tone =: h_asprbary,
  peri_spomenon =: h_asprperi, iotasub =: h_asprisub, "i" kern ii#; 
ligtable w_aspr: oxy_tone =: w_asproxy, bary_tone =: w_asprbary,
  peri_spomenon =: w_asprperi, iotasub =: w_asprisub, "n" kern k#; 
ligtable e_aspr: oxy_tone =: e_asproxy, bary_tone =: e_lenbary; 
ligtable o_aspr: oxy_tone =: o_asproxy, bary_tone =: o_asprbary,
  "n" kern k#, "h" kern k#; 
ligtable i_aspr: oxy_tone =: i_asproxy, bary_tone =: i_asprbary,
  peri_spomenon =: i_asprperi;
ligtable u_aspr: oxy_tone =: u_asproxy, bary_tone =: u_asprbary,
  peri_spomenon =: u_asprperi;
ligtable r_aspr: "i" kern i#;
		                                             
ligtable a_len: oxy_tone =: a_lenoxy, bary_tone =: a_lenbary,
  peri_spomenon =: a_lenperi, iotasub =: a_lenisub;
ligtable h_len: oxy_tone =: h_lenoxy, bary_tone =: h_lenbary,
  peri_spomenon =: h_lenperi, iotasub =: h_lenisub, "i" kern ii#;
ligtable w_len: oxy_tone =: w_lenoxy, bary_tone =: w_lenbary,
  peri_spomenon =: w_lenperi, iotasub =: w_lenisub, "n" kern k#;
ligtable e_len: oxy_tone =: e_lenoxy, bary_tone =: e_asprbary; 
ligtable o_len: oxy_tone =: o_lenoxy, bary_tone =: o_lenbary,
  "n" kern k#, "h" kern k#; 
ligtable i_len: oxy_tone =: i_lenoxy, bary_tone =: i_lenbary,
  peri_spomenon =: i_lenperi;
ligtable u_len: oxy_tone =: u_lenoxy, bary_tone =: u_lenbary,
  peri_spomenon =: u_lenperi;
ligtable r_len: "i" kern i#;

ligtable "K": "+" =: Koppa; % Uppercase Koppa

% The curve of o and the hook at the top of h make kerns with
% m desirable
ligtable "m": "o" kern k#, o_oxy kern k#, o_bary kern k#,
  "h" kern k#, h_oxy kern k#, h_bary kern k#, h_peri kern k#,
  h_isub kern k#, h_oxyisub kern k#, h_baryisub kern k#, 
  h_periisub kern k#;

% backward kerns for letters following accented iota
ligtable i_bary: diaer=: i_barydiaer, i_oxy: diaer=:i_oxydiaer, 
  i_peri: i_asproxy: i_asprbary: i_asprperi: 
   i_lenoxy: i_lenbary: i_lenperi: 
  "c" kern k#, "d" kern k#, "f" kern k#, "g" kern kk#, "h" kern kk#, 
  "k" kern k#, "l" kern k#, "n" kern kk#, "o" kern k#, "p" kern kk#, 
  "q" kern k#, "s" kern k#, "t" kern kk#, 
  "u" kern kk#, "w" kern k#, "x" kern k#, "y" kern k#;
% all needed forward kerns except for vowels, rho and sigma
% also a back kern for dh, but only when h is unaccented.
ligtable "k": "+" =: koppa, "i" kern i#; % lowercase koppa (also kern)
ligtable "A": "E": "W": 
   "f": "n": "p": "q": "t": "y": h_asprisub: h_lenisub: 
   "i" kern i#;
ligtable "d": "i" kern i#, "h" kern k#, h_isub kern k#;
ligtable "b":
   "i" kern ii#;
% forward kerns for accented upsilon and epsilon
ligtable o_oxy: o_bary: "h" kern k#, "l" kern k#, "n" kern k#;
ligtable u_oxy: diaer =: u_oxydiaer, 
   u_asprbary: u_asproxy: u_lenoxy: u_lenbary: 
   u_peri: u_asprperi: u_lenperi:  
   e_bary: e_lenbary: e_oxy: e_asproxy: e_lenoxy: e_asprbary: 
   "i" kern i#;

% iota subscripts and forward kerns for alpha, eta and omega
ligtable a_bary: iotasub =: a_baryisub; % iota after simple barytone not used
					% so no kern needed.
ligtable a_oxy: iotasub =: a_oxyisub, "i" kern i#; 
ligtable a_asproxy: iotasub =: a_asproxyisub, "i" kern i#;
ligtable a_lenoxy: iotasub =: a_lenoxyisub, "i" kern i#; 
ligtable a_asprbary: iotasub =: a_asprbaryisub, "i" kern i#;
ligtable a_peri: iotasub =: a_periisub, "i" kern i#; 
ligtable a_asprperi: iotasub =: a_asprperiisub, "i" kern i#;
ligtable a_lenperi: iotasub =: a_lenperiisub, "i" kern i#; 
ligtable a_lenbary: iotasub =: a_lenbaryisub, "i" kern i#;
ligtable h_bary: iotasub =: h_baryisub; 
ligtable h_asprbary: iotasub =: h_asprbaryisub, "i" kern i#;
ligtable h_oxy: iotasub =: h_oxyisub, "i" kern i#; 
ligtable h_asproxy: iotasub =: h_asproxyisub, "i" kern i#;
ligtable h_lenoxy: iotasub =: h_lenoxyisub, "i" kern i#; 
ligtable h_lenbary: iotasub =: h_lenbaryisub, "i" kern i#;
ligtable h_peri: iotasub =: h_periisub, "i" kern i#; 
ligtable h_asprperi: iotasub =: h_asprperiisub, "i" kern i#;
ligtable h_lenperi: iotasub =: h_lenperiisub, "i" kern i#;
ligtable w_bary: iotasub =: w_baryisub, "n" kern k#; 
ligtable w_asprbary: iotasub =: w_asprbaryisub, "n" kern k#;
ligtable w_oxy: iotasub =: w_oxyisub, "i" kern i#, "n" kern k#; 
ligtable w_asproxy: iotasub =: w_asproxyisub, "i" kern i#, "n" kern k#;
ligtable w_lenoxy: iotasub =: w_lenoxyisub, "i" kern i#, "n" kern k#; 
ligtable w_lenbary: iotasub =: w_lenbaryisub, "n" kern k#;
ligtable w_peri: iotasub =: w_periisub, "i" kern i#, "n" kern k#; 
ligtable w_asprperi: iotasub =: w_asprperiisub, "i" kern i#, "n" kern k#;
ligtable w_lenperi: iotasub =: w_lenperiisub, "i" kern i#, "n" kern k#;

ligtable diaer: oxy_tone =: diaeroxy, bary_tone =: diaerbary;
ligtable i_diaer: oxy_tone =: i_oxydiaer, bary_tone =: i_barydiaer;
ligtable u_bary: diaer =: u_oxydiaer;
ligtable u_diaer: oxy_tone =: u_oxydiaer, bary_tone =: u_barydiaer;

ligtable asper_peri: "A" kern kkk#; % asper_peri + A
%
% `` and '' can be used for ` and '
% 
ligtable bary_tone: diaer =: diaerbary, bary_tone =: quoteleft,
  "A" kern kkk#;
ligtable oxy_tone: diaer =: diaeroxy, oxy_tone =: quoteright;


ligtable "C": "+" =: lunate_Cigma;
ligtable "c": "+" =: lunate_cigma;

% One ligature for (lowercase only) sampi, one kern with lowercase iota
% and all practicable arrangements for final sigma.
% THe last ligature s| is the way to force medial sigma at word end.
% Note that final sigma can be forced by using the letter "j"

ligtable "s": "+" =: sampi, "i" kern i#,
  boundarychar =: final_sigma, 
  "." =:| final_sigma, "," =:| final_sigma, "?" =:| final_sigma, 
  ":" =:| final_sigma, ";" =:| final_sigma, "(" =:| final_sigma,
  ")" =:| final_sigma, "*" =:| final_sigma, "!" =:| final_sigma, 
  "%" =:| final_sigma, "<" =:| final_sigma, ">" =:| final_sigma,
  "[" =:| final_sigma, "]" =:| final_sigma, "{" =:| final_sigma,
  "}" =:| final_sigma, "|" |=: null_space;
