% Version 4.3. 7 July, 1998. Response to a bug report. The wrong
% angle was in the line for ligtable angleright: ">" =: guillemotright;  
% All tfm files corrected to reflect this change.

% Version 4.2. 18 July, 1997.  Small adjustments to the space between
% accent clusters and Uppercase H and I.  A little more space after
% accented iota and before taller consonants.  

% Version 4.1. 28 April, 1996.  Sevaral kerns for iota changed
% before p t and u to avoid crowding.  Medial sigma is default
% before <> [] and other non standard symbols. (Final
% at word end, sentence punctuation, and parentheses).
%
% Ligature table for ibycus4 Version 4.0 using the \bang
% character as the postpositive indication of a dot under
% any letter or letter-and-accent combination except for
% iota subscript composites.  

% CAUTION:  With this arrangement the exclamation point must
% set with \sfcode`\!=1000 or you get very odd spacing.
% This setting is supplied in ibycus4.tex

ligtable "-": "-" =: endash;  % en-dash
ligtable endash: "-" =: emdash;  % em-dash
ligtable quotesnglleft: quotesnglleft =: quotedblleft;
ligtable quotesnglright: quotesnglright =: quotedblright;
% The Adobe names guillemotleft and guillemotright (\it sic})
% are retained.
ligtable angleleft: "<" =: guillemotleft; 
ligtable angleright: ">" =: guillemotright; 

k#:=-.5u#; kk#:=-1.5u#; kkk#:=-2u#; % three degrees of back kerning
i#:=.5u#; ii#:=1.5u#; iii#:=2u#; % three degrees of forward kerning
%
% the glyphs for the breathings (spiritus) and the acute and
% grave accents are not in the same code location as the digraph 
% input characters "'" "`" "=" ")" "(", and "`" "'" are pretty
% well available for normal use when not immediately contiguous to
% accentable characters.  This is achieved by a change from
% Silvio Levy's mapping to modified TLG Betacode.
%
ligtable "(": "(" =: ASCII"(", peri_spomenon =: asper_peri, 
  quotesnglright =: asper_oxy, quotesnglleft =: 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 ")": ")" =: ASCII")", peri_spomenon =: lenis_peri,
  quotesnglright =: lenis_oxy, quotesnglleft =: 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;
%
ligtable asper_glyph:
  "A" kern -7u#, "E" kern -3u#, "H" kern -3u#, "R" kern -3u#,
  "O" kern -3.5u#, "W" kern -2.5u#, "I" kern -3u#, "U" kern -3u#;
ligtable lenis_glyph:
  "A" kern -6u#, "E" kern kkk#, "H" kern kkk#, "R" kern kkk#,
  "O" kern -2.5u#, "W" kern kkk#, "I" kern kkk#, "U" kern kkk#;
ligtable asper_oxy: lenis_oxy:
  "A" kern -6u#, "E" kern -1u#, "H" kern -1u#,
  "O" kern -2.5u#, "W" kern kk#, "I" kern -1u#, "U" kern kk#;
ligtable asper_bary: lenis_bary:
  "A" kern -5u#, "E" kern kk#, "H" kern kk#,
  "O" kern kkk#, "W" kern -1u#, "I" kern kkk#, "U" kern -1u#;
ligtable asper_peri:
  "A" kern -6.5u#,  "E" kern kkk#, "H" kern kkk#, "I" kern kkk#,
  "O" kern -3u#, "W" kern -3u#, "U" kern kkk#;
ligtable lenis_peri:
  "A" kern -6.5u#,  "E" kern kkk#, "H" kern kkk#, "I" kern kkk#,
  "O" kern -3u#, "W" kern -2.5u#, "U" kern kkk#;

ligtable "a": quotesnglleft =: a_bary, quotesnglright =: a_oxy,
  peri_spomenon =: a_peri, iotasubscript |=: a_isub, dubious |=: dotCEVaw,
  "(" =: a_aspr, ")" =: a_len, "i" kern i#; % Post-positive breathings
ligtable "h": "+" =: aspirate, quotesnglleft =: h_bary, quotesnglright =: h_oxy,
  peri_spomenon =: h_peri, iotasubscript |=: h_isub, dubious |=: dotchjz,
  "(" =: 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": quotesnglleft =: w_bary, quotesnglright =: w_oxy,
  peri_spomenon =: w_peri, iotasubscript |=: w_isub, dubious |=: dotCEVaw,
  "(" =: w_aspr, ")" =: w_len, "i" kern i#, "n" kern k#; 
ligtable "e": quotesnglleft =: e_bary, quotesnglright =: e_oxy,
  peri_spomenon =: e_peri, 
  "(" =: e_aspr, ")" =: e_len, dubious |=: dote, "i" kern i#; 
ligtable "o": quotesnglleft =: o_bary, quotesnglright =: o_oxy,
  peri_spomenon =: o_peri, 
  "(" =: o_aspr, ")" =: o_len, dubious |=: dotkos,
  "n" kern k#, "h" kern k#, "l" kern k#; 
ligtable "i": quotesnglleft =: i_bary, quotesnglright =: i_oxy,
  peri_spomenon =: i_peri,  dubious |=: doti,
  "(" =: i_aspr, ")" =: i_len, dieresis =: i_diaer,
  "c" kern k#, "d" kern k#, "f" kern k#, "g" kern -1u#, "h" kern k#, 
  "k" kern k#, "l" kern k#, "n" kern kk#, "o" kern k#, "p" kern k#, 
  "q" kern k#, "s" kern k#, "t" kern -1u#, 
  "u" kern -1u#, "w" kern k#, "x" kern k#, "y" kern k#;
ligtable "u": quotesnglleft =: u_bary, quotesnglright =: u_oxy,
  peri_spomenon =: u_peri,  dubious |=: dotJdlmnpqu,
  "(" =: u_aspr, ")" =: u_len, dieresis =: u_diaer, "i" kern i#; 
ligtable "r": "(" =: r_aspr, ")" =: r_len, 
  r_aspr: r_len: dubious |=: dotr, "i" kern i#;

ligtable a_aspr: quotesnglright =: a_asproxy, quotesnglleft =: a_asprbary,
  peri_spomenon =: a_asprperi, iotasubscript |=: a_isub, dubious |=: dotCEVaw,
  "i" kern i#;
ligtable h_aspr: quotesnglright =: h_asproxy, quotesnglleft =: h_asprbary,
  peri_spomenon =: h_asprperi, iotasubscript |=: h_isub, dubious |=: dotchjz,
  "i" kern ii#; 
ligtable w_aspr: quotesnglright =: w_asproxy, quotesnglleft =: w_asprbary,
  peri_spomenon =: w_asprperi, iotasubscript |=: w_isub, dubious |=: dotCEVaw,
  "n" kern k#; 
ligtable e_aspr: quotesnglright =: e_asproxy, quotesnglleft =: e_asprbary,
  peri_spomenon =: e_asprperi, dubious |=: dote;
ligtable o_aspr: quotesnglright =: o_asproxy, quotesnglleft =: o_asprbary,
  peri_spomenon =: o_asprperi, dubious |=: dotkos, "n" kern k#, "h" kern k#; 
ligtable i_aspr: quotesnglright =: i_asproxy, quotesnglleft =: i_asprbary,
  peri_spomenon =: i_asprperi, dubious |=: doti,
  "c" kern k#, "d" kern k#, "f" kern k#, "g" kern -1u#, "h" kern k#, 
  "k" kern k#, "l" kern k#, "n" kern kk#, "o" kern k#, "p" kern k#, 
  "q" kern k#, "s" kern k#, "t" kern -1u#, 
  "u" kern -1u#, "w" kern k#, "x" kern k#, "y" kern k#;
ligtable u_aspr: quotesnglright =: u_asproxy, quotesnglleft =: u_asprbary,
  peri_spomenon =: u_asprperi, dubious |=: dotJdlmnpqu;
		                                             
ligtable a_len: quotesnglright =: a_lenoxy, quotesnglleft =: a_lenbary,
  dubious |=: dotCEVaw,
  peri_spomenon =: a_lenperi, iotasubscript |=: a_isub;
ligtable h_len: quotesnglright =: h_lenoxy, quotesnglleft =: h_lenbary, dubious |=: dotchjz,
  peri_spomenon =: h_lenperi, iotasubscript |=: h_isub, "i" kern ii#;
ligtable w_len: quotesnglright =: w_lenoxy, quotesnglleft =: w_lenbary,
  dubious |=: dotCEVaw,
  peri_spomenon =: w_lenperi, iotasubscript |=: w_isub, "n" kern k#;
ligtable e_len: quotesnglright =: e_lenoxy, quotesnglleft =: e_lenbary,
  peri_spomenon =: e_lenperi, dubious |=: dote; 
ligtable o_len: quotesnglright =: o_lenoxy, quotesnglleft =: o_lenbary,
  peri_spomenon =: o_lenperi, dubious |=: dotkos, "n" kern k#, "h" kern k#; 
ligtable i_len: quotesnglright =: i_lenoxy, quotesnglleft =: i_lenbary,
  peri_spomenon =: i_lenperi, dubious |=: doti,
  "c" kern k#, "d" kern k#, "f" kern k#, "g" kern -1u#, "h" kern k#, 
  "k" kern k#, "l" kern k#, "n" kern kk#, "o" kern k#, "p" kern k#, 
  "q" kern k#, "s" kern k#, "t" kern -1u#, 
  "u" kern -1u#, "w" kern k#, "x" kern k#, "y" kern k#;
ligtable u_len: quotesnglright =: u_lenoxy, quotesnglleft =: u_lenbary,
  peri_spomenon =: u_lenperi, dubious |=: dotJdlmnpqu;

ligtable "K": "+" =: Koppa, dubious |=: dotDK; % Uppercase Koppa
ligtable Koppa: dubious |=: dotGZ;

% The curve of o and the hook at the top of h make kerns with
% m desirable
ligtable "m": dubious |=: dotJdlmnpqu,
  "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#;

% backward kerns for letters following accented iota
ligtable dieresis: quotesnglright =: diaeroxy, quotesnglleft =: diaerbary;

ligtable i_diaer: quotesnglright =: i_diaeroxy, quotesnglleft =: i_diaerbary;
ligtable i_bary: dieresis=: i_diaerbary, i_oxy: dieresis=:i_diaeroxy, dubious |=: doti,
  "c" kern k#, "d" kern k#, "f" kern k#, "g" kern -1u#, "h" kern k#, 
  "k" kern k#, "l" kern k#, "n" kern kk#, "o" kern k#, "p" kern k#, 
  "q" kern k#, "s" kern k#, "t" kern -1u#, 
  "u" kern -1u#, "w" kern k#, "x" kern k#, "y" kern k#;
% The widely spaced accent clusters on iota need more space before many
% consonants.  Particularly lambda and ksi.  
ligtable i_peri: i_asproxy: i_asprbary: i_asprperi: 
  i_lenoxy: i_lenbary: i_lenperi: i_diaerbary: i_diaeroxy: dubious |=: doti,
  "d" kern k#, "f" kern k#, "g" kern -1u#, "h" kern k#, 
  "n" kern kk#, "o" kern k#, "p" kern k#, 
  "q" kern k#, "s" kern k#, "t" kern k#, 
  "u" kern -1u#, "w" kern k#, "x" 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, dubious |=: dotkos, "i" kern i#; 
ligtable "A": dubious |=: dotAOQUXY, "E": dubious |=: dotCEVaw,
	 "W": dubious |=: dotBFLNPRSTW, "i" kern i#;
ligtable "n": "p": "q": dubious |=: dotJdlmnpqu, "t": dubious |=: dotbt,
  "f": "y": dubious |=: dotfy, h_isub:
  "i" kern i#;
ligtable "d": dubious |=: dotJdlmnpqu, "i" kern i#, "h" kern k#;
ligtable "b": dubious |=: dotbt,
   "i" kern ii#;
ligtable dotbt: "i" kern i#;

% forward kerns for accented upsilon and epsilon
ligtable o_oxy: o_bary: "h" kern k#, "l" kern k#, "n" kern k#,
  o_asproxy: o_lenoxy: o_asprbary: o_lenbary: o_asprperi: o_lenperi:
  dubious |=: dotkos;
ligtable u_diaer: quotesnglright =: u_diaeroxy, quotesnglleft =: u_diaerbary;
ligtable u_bary: dieresis =: u_diaerbary;
ligtable u_oxy: dieresis =: u_diaeroxy, 
   u_asprbary: u_asproxy: u_lenoxy: u_lenbary: 
   u_peri: u_asprperi: u_lenperi:
   u_diaeroxy: u_diaerbary: dubious |=: dotJdlmnpqu,
   e_oxy: e_asproxy: e_lenoxy: e_bary: e_lenbary: e_asprbary: 
   e_peri: e_asprperi: e_lenperi: dubious |=: dote,
   "i" kern i#;

% iota subscripts and forward kerns for alpha, eta and omega
ligtable a_bary: iotasubscript |=: a_isub,
  dubious |=: dotCEVaw, "i" kern
i#;
% iota after simple barytone unused nught be iota adscript.
ligtable a_oxy: a_asproxy: a_lenoxy: a_asprbary: a_peri: a_asprperi:
  a_lenperi: a_lenbary: 
  iotasubscript |=: a_isub, dubious |=: dotCEVaw, "i" kern i#;

ligtable h_bary: h_asprbary: h_oxy: h_asproxy: h_lenoxy: h_lenbary:
  h_peri: h_asprperi: h_lenperi: 
  iotasubscript |=: h_isub, dubious |=: dotchjz, "i" kern i#;

ligtable w_bary: w_asprbary: w_oxy: w_asproxy: w_lenoxy: w_lenbary:
  w_peri: w_asprperi: w_lenperi: 
  iotasubscript |=: w_isub, dubious |=: dotCEVaw, "i" kern i#, "n" kern k#;


ligtable "C": "+" =: Cigmalunate, Cigmalunate: dubious |=: dotCEVaw;
ligtable "c": "+" =: cigmalunate, cigmalunate: "z": dubious |=: dotchjz;
ligtable sigmafinal: dubious |=: dotchjz;

% One ligature for (lowercase only) sampi, one kern with lowercase iota
% and all practicable arrangements for final sigma.
% It is assumed that sigma before a punctuation mark such as . , ; ?
% and probably ) should be final but before > ] } it is more likely
% to be medial.  The treatment of ( matches ) and of { [ < matches 
% > ] } (anything elxe would be more confusing.
% Final sigma can always be forced by using the letter "j"
% The last ligature s| is the way to force medial sigma at word end.
% Note the trick at the end which allows a dot under a forced medial
% sigma.  
ligtable "s": "+" =: sampi, "i" kern i#,
  boundarychar =: sigmafinal, 
  "." =:| sigmafinal, "," =:| sigmafinal, "?" =:| sigmafinal, 
  ":" =:| sigmafinal, ";" =:| sigmafinal, "(" =:| sigmafinal,
  ")" =:| sigmafinal, "|" |=: null_space, null_space: dubious |=: dotkos;

ligtable "l": dubious |=: dotJdlmnpqu;
ligtable "g": "x": dubious |=: dotgx;
ligtable "v": dubious |=: doti;
ligtable koppa: dubious |=: dotkoppa;
ligtable "I": dubious |=: dotI;
ligtable "G": "Z": dubious |=: dotGZ;
ligtable "V": dubious |=: dotCEVaw;
ligtable "B": "F": "L": "N": "P": "R": "S": "T": dubious |=: dotBFLNPRSTW;
ligtable "H": dubious |=: dotH;
ligtable "O": "Q": "U": "X": "Y": dubious |=: dotAOQUXY;
ligtable "D": dubious |=: dotDK;
ligtable "M": dubious |=: dotM;