1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
% 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;
|