@fpw/en-wiktionary-la-modules 0.2.2 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +75 -75
  2. package/README.md +19 -15
  3. package/dist/LaEngine.d.ts +23 -23
  4. package/dist/LaEngine.js +64 -66
  5. package/dist/index.d.ts +12 -11
  6. package/dist/index.js +12 -28
  7. package/dist/modules/common.d.ts +67 -66
  8. package/dist/modules/common.js +145 -157
  9. package/dist/modules/conjugation/LaVerb.d.ts +118 -109
  10. package/dist/modules/conjugation/LaVerb.js +2861 -2295
  11. package/dist/modules/conjugation/VerbAffix.d.ts +18 -18
  12. package/dist/modules/conjugation/VerbAffix.js +19 -23
  13. package/dist/modules/conjugation/VerbForm.d.ts +204 -182
  14. package/dist/modules/conjugation/VerbForm.js +215 -199
  15. package/dist/modules/conjugation/VerbType.d.ts +54 -40
  16. package/dist/modules/conjugation/VerbType.js +66 -58
  17. package/dist/modules/declination/LaAdjData.d.ts +16 -16
  18. package/dist/modules/declination/LaAdjData.js +1474 -908
  19. package/dist/modules/declination/LaNominal.d.ts +136 -130
  20. package/dist/modules/declination/LaNominal.js +1884 -1804
  21. package/dist/modules/declination/LaNounData.d.ts +16 -2
  22. package/dist/modules/declination/LaNounData.js +935 -855
  23. package/dist/modules/declination/LaPersonalPronoun.d.ts +12 -12
  24. package/dist/modules/declination/LaPersonalPronoun.js +80 -85
  25. package/dist/modules/declination/NominalForm.d.ts +85 -69
  26. package/dist/modules/declination/NominalForm.js +101 -91
  27. package/dist/modules/declination/NominalType.d.ts +191 -120
  28. package/dist/modules/declination/NominalType.js +211 -146
  29. package/dist/modules/headword/HeadWord.d.ts +107 -107
  30. package/dist/modules/headword/HeadWord.js +28 -32
  31. package/dist/modules/headword/HeadwordParser.d.ts +29 -29
  32. package/dist/modules/headword/HeadwordParser.js +456 -452
  33. package/package.json +23 -15
  34. package/dist/LaEngine.js.map +0 -1
  35. package/dist/index.js.map +0 -1
  36. package/dist/modules/common.js.map +0 -1
  37. package/dist/modules/conjugation/LaVerb.js.map +0 -1
  38. package/dist/modules/conjugation/VerbAffix.js.map +0 -1
  39. package/dist/modules/conjugation/VerbForm.js.map +0 -1
  40. package/dist/modules/conjugation/VerbType.js.map +0 -1
  41. package/dist/modules/declination/LaAdjData.js.map +0 -1
  42. package/dist/modules/declination/LaNominal.js.map +0 -1
  43. package/dist/modules/declination/LaNounData.js.map +0 -1
  44. package/dist/modules/declination/LaPersonalPronoun.js.map +0 -1
  45. package/dist/modules/declination/NominalForm.js.map +0 -1
  46. package/dist/modules/declination/NominalType.js.map +0 -1
  47. package/dist/modules/headword/HeadWord.js.map +0 -1
  48. package/dist/modules/headword/HeadwordParser.js.map +0 -1
  49. package/src/LaEngine.ts +0 -86
  50. package/src/index.ts +0 -16
  51. package/src/modules/common.ts +0 -164
  52. package/src/modules/conjugation/LaVerb.ts +0 -2669
  53. package/src/modules/conjugation/VerbAffix.ts +0 -18
  54. package/src/modules/conjugation/VerbForm.ts +0 -223
  55. package/src/modules/conjugation/VerbType.ts +0 -55
  56. package/src/modules/declination/LaAdjData.ts +0 -1036
  57. package/src/modules/declination/LaNominal.ts +0 -2025
  58. package/src/modules/declination/LaNounData.ts +0 -897
  59. package/src/modules/declination/LaPersonalPronoun.ts +0 -92
  60. package/src/modules/declination/NominalForm.ts +0 -89
  61. package/src/modules/declination/NominalType.ts +0 -157
  62. package/src/modules/headword/HeadWord.ts +0 -132
  63. package/src/modules/headword/HeadwordParser.ts +0 -515
@@ -1,897 +0,0 @@
1
- /**
2
- * This is a complete re-implementation of Wiktionary's Module:la-adj/data, developed by Benwing2.
3
- * It was converted from Lua to TypeScript by Folke Will <folko@solhost.org>.
4
- *
5
- * Original source: https://en.wiktionary.org/wiki/Module:la-noun/data
6
- * Based on version: https://en.wiktionary.org/w/index.php?title=Module:la-noun/data&oldid=67964055
7
- *
8
- * Lua idioms, function and variable names kept as in the original in order to easily
9
- * backport later changes to this implementation.
10
- *
11
- * For that reason, it's suggested to add a type-aware wrapper around this class and leave
12
- * this code unchanged instead of improving the types and use of idioms in this class.
13
- *
14
- */
15
- import { strip_macrons } from "../common";
16
- import { NumberTantum, SegmentData } from "./LaNominal";
17
- import { getNominalForm, setNominalForm } from "./NominalForm";
18
- import { hasNominalType, NominalType } from "./NominalType";
19
-
20
- export const m_noun_decl: Map<string, ((data: SegmentData, args: string[]) => void)> = new Map([
21
- ["1", (data, args) => {
22
- const stem = args[0];
23
-
24
- setNominalForm(data.forms, "nom_sg", [stem + "a"]);
25
- setNominalForm(data.forms, "gen_sg", [stem + "ae"]);
26
- setNominalForm(data.forms, "dat_sg", [stem + "ae"]);
27
- setNominalForm(data.forms, "acc_sg", [stem + "am"]);
28
- setNominalForm(data.forms, "abl_sg", [stem + "ā"]);
29
- setNominalForm(data.forms, "voc_sg", [stem + "a"]);
30
-
31
- setNominalForm(data.forms, "nom_pl", [stem + "ae"]);
32
- setNominalForm(data.forms, "gen_pl", [stem + "ārum"]);
33
- setNominalForm(data.forms, "dat_pl", [stem + "īs"]);
34
- setNominalForm(data.forms, "acc_pl", [stem + "ās"]);
35
- setNominalForm(data.forms, "abl_pl", [stem + "īs"]);
36
- setNominalForm(data.forms, "voc_pl", [stem + "ae"]);
37
-
38
- if (data.types.has(NominalType.Abus)) {
39
- data.subtitles.push(["dative/ablative plural in ", "'-ābus'"]);
40
- setNominalForm(data.forms, "dat_pl", [stem + "ābus"]);
41
- setNominalForm(data.forms, "abl_pl", [stem + "ābus"]);
42
- } else if (data.types.has(NominalType.NotAbus)) {
43
- data.subtitles.push(["dative/ablative plural in ", "'-īs'"]);
44
- }
45
-
46
- if (data.types.has(NominalType.Am)) {
47
- data.subtitles.push(["nominative/vocative singular in ", "'-ām'"]);
48
- setNominalForm(data.forms, "nom_sg", [stem + "ām"]);
49
- setNominalForm(data.forms, "acc_sg", [stem + "ām"]);
50
- setNominalForm(data.forms, "voc_sg", [stem + "ām"]);
51
- setNominalForm(data.forms, "abl_sg", [stem + "ām", stem + "ā"]);
52
- } else if (data.types.has(NominalType.Greek)) {
53
- if (data.types.has(NominalType.Ma)) {
54
- data.subtitles.push("masculine Greek-type with nominative singular in '-ās'");
55
- setNominalForm(data.forms, "nom_sg", [stem + "ās"]);
56
- setNominalForm(data.forms, "acc_sg", [stem + "ān"]);
57
- setNominalForm(data.forms, "voc_sg", [stem + "ā"]);
58
- } else if (data.types.has(NominalType.Me)) {
59
- data.subtitles.push("masculine Greek-type with nominative singular in '-ēs'");
60
- setNominalForm(data.forms, "nom_sg", [stem + "ēs"]);
61
- setNominalForm(data.forms, "acc_sg", [stem + "ēn"]);
62
- setNominalForm(data.forms, "abl_sg", [stem + "ē"]);
63
- setNominalForm(data.forms, "voc_sg", [stem + "ē"]);
64
- } else {
65
- data.subtitles.push("Greek-type");
66
- setNominalForm(data.forms, "nom_sg", [stem + "ē"]);
67
- setNominalForm(data.forms, "gen_sg", [stem + "ēs"]);
68
- setNominalForm(data.forms, "acc_sg", [stem + "ēn"]);
69
- setNominalForm(data.forms, "abl_sg", [stem + "ē"]);
70
- setNominalForm(data.forms, "voc_sg", [stem + "ē"]);
71
- }
72
- } else if (data.types.has(NominalType.NotGreek)) {
73
- data.subtitles.push("non-Greek-type");
74
- } else if (data.types.has(NominalType.NotAm)) {
75
- data.subtitles.push(["nominative/vocative singular in ", "'-a'"]);
76
- }
77
-
78
- if (data.loc) {
79
- setNominalForm(data.forms, "loc_sg", [stem + "ae"]);
80
- setNominalForm(data.forms, "loc_pl", [stem + "īs"]);
81
- }
82
- }],
83
- ["2", (data, args) => {
84
- const stem1 = args[0];
85
- const stem2 = args[1];
86
-
87
- setNominalForm(data.forms, "nom_sg", [stem1 + "us"]);
88
- setNominalForm(data.forms, "gen_sg", [stem1 + "ī"]);
89
- setNominalForm(data.forms, "dat_sg", [stem1 + "ō"]);
90
- setNominalForm(data.forms, "acc_sg", [stem1 + "um"]);
91
- setNominalForm(data.forms, "abl_sg", [stem1 + "ō"]);
92
- setNominalForm(data.forms, "voc_sg", [stem1 + "e"]);
93
-
94
- setNominalForm(data.forms, "nom_pl", [stem1 + "ī"]);
95
- setNominalForm(data.forms, "gen_pl", [stem1 + "ōrum"]);
96
- setNominalForm(data.forms, "dat_pl", [stem1 + "īs"]);
97
- setNominalForm(data.forms, "acc_pl", [stem1 + "ōs"]);
98
- setNominalForm(data.forms, "abl_pl", [stem1 + "īs"]);
99
- setNominalForm(data.forms, "voc_pl", [stem1 + "ī"]);
100
-
101
- if (data.types.has(NominalType.Neuter)) {
102
- data.subtitles.push("neuter");
103
- setNominalForm(data.forms, "nom_sg", [stem1 + "um"]);
104
- setNominalForm(data.forms, "voc_sg", [stem1 + "um"]);
105
-
106
- setNominalForm(data.forms, "nom_pl", [stem1 + "a"]);
107
- setNominalForm(data.forms, "acc_pl", [stem1 + "a"]);
108
- setNominalForm(data.forms, "voc_pl", [stem1 + "a"]);
109
-
110
- if (data.types.has(NominalType.Ium)) {
111
- setNominalForm(data.forms, "nom_sg", [stem1 + "ium"]);
112
- if (!data.declOpts.suppressOldGenitive) {
113
- setNominalForm(data.forms, "gen_sg", [stem1 + "iī", stem1 + "ī"]);
114
- } else {
115
- setNominalForm(data.forms, "gen_sg", [stem1 + "iī"]);
116
- }
117
- setNominalForm(data.forms, "dat_sg", [stem1 + "iō"]);
118
- setNominalForm(data.forms, "acc_sg", [stem1 + "ium"]);
119
- setNominalForm(data.forms, "abl_sg", [stem1 + "iō"]);
120
- setNominalForm(data.forms, "voc_sg", [stem1 + "ium"]);
121
-
122
- setNominalForm(data.forms, "nom_pl", [stem1 + "ia"]);
123
- setNominalForm(data.forms, "gen_pl", [stem1 + "iōrum"]);
124
- setNominalForm(data.forms, "dat_pl", [stem1 + "iīs"]);
125
- setNominalForm(data.forms, "acc_pl", [stem1 + "ia"]);
126
- setNominalForm(data.forms, "abl_pl", [stem1 + "iīs"]);
127
- setNominalForm(data.forms, "voc_pl", [stem1 + "ia"]);
128
-
129
- if (!data.declOpts.suppressOldGenitive) {
130
- data.notes.set("gen_sg2", "Found in older Latin (until the Augustan Age).");
131
- }
132
- } else if (data.types.has(NominalType.a)) {
133
- data.subtitles.push("nominative/accusative/vocative plural in '-a'");
134
-
135
- setNominalForm(data.forms, "nom_sg", [stem1 + "us"]);
136
- setNominalForm(data.forms, "acc_sg", [stem1 + "us"]);
137
- setNominalForm(data.forms, "voc_sg", [stem1 + "us"]);
138
-
139
- setNominalForm(data.forms, "nom_pl", [stem1 + "a"]);
140
- setNominalForm(data.forms, "acc_pl", [stem1 + "a"]);
141
- setNominalForm(data.forms, "voc_pl", [stem1 + "a"]);
142
- } else if (data.types.has(NominalType.Vom)) {
143
- data.subtitles.push("nominative singular in '-om' after 'v'");
144
- setNominalForm(data.forms, "nom_sg", [stem1 + "om"]);
145
- setNominalForm(data.forms, "acc_sg", [stem1 + "om"]);
146
- setNominalForm(data.forms, "voc_sg", [stem1 + "om"]);
147
- } else if (data.types.has(NominalType.Greek) && data.types.has(NominalType.Us)) {
148
- data.subtitles.push("Greek-type");
149
- data.subtitles.push("nominative/accusative/vocative in '-os'");
150
-
151
- setNominalForm(data.forms, "nom_sg", [stem1 + "os"]);
152
- setNominalForm(data.forms, "acc_sg", [stem1 + "os"]);
153
- setNominalForm(data.forms, "voc_sg", [stem1 + "os"]);
154
-
155
- setNominalForm(data.forms, "nom_pl", [stem1 + "ē"]);
156
- setNominalForm(data.forms, "gen_pl", [stem1 + "ōn"]);
157
- setNominalForm(data.forms, "acc_pl", [stem1 + "ē"]);
158
- setNominalForm(data.forms, "voc_pl", [stem1 + "ē"]);
159
- } else if (data.types.has(NominalType.Greek)) {
160
- data.subtitles.push("Greek-type");
161
- setNominalForm(data.forms, "nom_sg", [stem1 + "on"]);
162
- setNominalForm(data.forms, "acc_sg", [stem1 + "on"]);
163
- setNominalForm(data.forms, "voc_sg", [stem1 + "on"]);
164
- } else if (data.types.has(NominalType.Us)) {
165
- data.subtitles.push("nominative/accusative/vocative in '-us'");
166
- setNominalForm(data.forms, "nom_sg", [stem1 + "us"]);
167
- setNominalForm(data.forms, "acc_sg", [stem1 + "us"]);
168
- setNominalForm(data.forms, "voc_sg", [stem1 + "us"]);
169
-
170
- setNominalForm(data.forms, "nom_pl", [stem1 + "ī"]);
171
- setNominalForm(data.forms, "acc_pl", [stem1 + "ōs"]);
172
- setNominalForm(data.forms, "voc_pl", [stem1 + "ī"]);
173
- } else if (data.types.has(NominalType.NotGreek) || data.types.has(NominalType.NotUs)) {
174
- data.subtitles.push("nominative/accusative/vocative in '-um'");
175
- }
176
- } else if (data.types.has(NominalType.Er)) {
177
- if (stem1.match(/[aiouy]r$/)) {
178
- data.subtitles.push("nominative singular in '-r'");
179
- } else {
180
- data.subtitles.push("nominative singular in '-er'");
181
- }
182
-
183
- setNominalForm(data.forms, "nom_sg", [stem1]);
184
- setNominalForm(data.forms, "gen_sg", [stem2 + "ī"]);
185
- setNominalForm(data.forms, "dat_sg", [stem2 + "ō"]);
186
- setNominalForm(data.forms, "acc_sg", [stem2 + "um"]);
187
- setNominalForm(data.forms, "abl_sg", [stem2 + "ō"]);
188
- setNominalForm(data.forms, "voc_sg", [stem1]);
189
-
190
- setNominalForm(data.forms, "nom_pl", [stem2 + "ī"]);
191
- setNominalForm(data.forms, "gen_pl", [stem2 + "ōrum"]);
192
- setNominalForm(data.forms, "dat_pl", [stem2 + "īs"]);
193
- setNominalForm(data.forms, "acc_pl", [stem2 + "ōs"]);
194
- setNominalForm(data.forms, "abl_pl", [stem2 + "īs"]);
195
- setNominalForm(data.forms, "voc_pl", [stem2 + "ī"]);
196
- } else if (data.types.has(NominalType.Ius)) {
197
- setNominalForm(data.forms, "nom_sg", [stem1 + "ius"]);
198
- if (!data.declOpts.suppressOldGenitive) {
199
- setNominalForm(data.forms, "gen_sg", [stem1 + "iī", stem1 + "ī"]);
200
- } else {
201
- setNominalForm(data.forms, "gen_sg", [stem1 + "iī"]);
202
- }
203
- setNominalForm(data.forms, "dat_sg", [stem1 + "iō"]);
204
- setNominalForm(data.forms, "acc_sg", [stem1 + "ium"]);
205
- setNominalForm(data.forms, "abl_sg", [stem1 + "iō"]);
206
-
207
- if (data.types.has(NominalType.VocI)) {
208
- setNominalForm(data.forms, "voc_sg", [stem1 + "ī"]);
209
- } else {
210
- setNominalForm(data.forms, "voc_sg", [stem1 + "ie"]);
211
- }
212
-
213
- setNominalForm(data.forms, "nom_pl", [stem1 + "iī"]);
214
- setNominalForm(data.forms, "gen_pl", [stem1 + "iōrum"]);
215
- setNominalForm(data.forms, "dat_pl", [stem1 + "iīs"]);
216
- setNominalForm(data.forms, "acc_pl", [stem1 + "iōs"]);
217
- setNominalForm(data.forms, "abl_pl", [stem1 + "iīs"]);
218
- setNominalForm(data.forms, "voc_pl", [stem1 + "iī"]);
219
-
220
- if (!data.declOpts.suppressOldGenitive) {
221
- data.notes.set("gen_sg2", "Found in older Latin (until the Augustan Age).");
222
- }
223
- } else if (data.types.has(NominalType.Vos)) {
224
- data.subtitles.push("nominative singular in '-os' after 'v'");
225
- setNominalForm(data.forms, "nom_sg", [stem1 + "os"]);
226
- setNominalForm(data.forms, "acc_sg", [stem1 + "om"]);
227
- } else if (data.types.has(NominalType.Greek)) {
228
- data.subtitles.push("Greek-type");
229
- setNominalForm(data.forms, "nom_sg", [stem1 + "os"]);
230
- setNominalForm(data.forms, "acc_sg", [stem1 + "on"]);
231
- } else if (data.types.has(NominalType.NotGreek)) {
232
- data.subtitles.push("non-Greek-type");
233
- }
234
-
235
- if (data.types.has(NominalType.GenPluM)) {
236
- data.subtitles.push(["contracted", " genitive plural"]);
237
- data.notes.set("gen_pl2", "Contraction found in poetry.");
238
- if (data.types.has(NominalType.Ius) || data.types.has(NominalType.Ium)) {
239
- setNominalForm(data.forms, "gen_pl", [stem2 + "iōrum", stem2 + "ium"]);
240
- } else {
241
- setNominalForm(data.forms, "gen_pl", [stem2 + "ōrum", stem2 + "um"]);
242
- }
243
- } else if (data.types.has(NominalType.NotGenPluM)) {
244
- data.subtitles.push(["normal", " genitive plural"]);
245
- }
246
-
247
- if (data.loc) {
248
- if (data.types.has(NominalType.Ius) || data.types.has(NominalType.Ium)) {
249
- setNominalForm(data.forms, "loc_sg", [stem2 + "iī"]);
250
- setNominalForm(data.forms, "loc_pl", [stem2 + "iīs"]);
251
- } else {
252
- setNominalForm(data.forms, "loc_sg", [stem2 + "ī"]);
253
- setNominalForm(data.forms, "loc_pl", [stem2 + "īs"]);
254
- }
255
- }
256
- }],
257
- ["3", (data, args) => {
258
- let stem1 = args[0];
259
- const stem2 = args[1];
260
-
261
- function parisyllabic_type(): string {
262
- const stem1_vowels = strip_macrons(stem1).replace(/[^AEIOUYaeiouy]/g, "");
263
- const stem2_vowels = strip_macrons(stem2).replace(/[^AEIOUYaeiouy]/g, "");
264
- return stem1_vowels.length > stem2_vowels.length ? "parisyllabic" : "imparisyllabic";
265
- }
266
-
267
- function non_i_stem_type() {
268
- return parisyllabic_type() + " non-i-stem";
269
- }
270
-
271
- setNominalForm(data.forms, "nom_sg", [stem1]);
272
- setNominalForm(data.forms, "gen_sg", [stem2 + "is"]);
273
- setNominalForm(data.forms, "dat_sg", [stem2 + "ī"]);
274
- setNominalForm(data.forms, "acc_sg", [stem2 + "em"]);
275
- setNominalForm(data.forms, "abl_sg", [stem2 + "e"]);
276
- setNominalForm(data.forms, "voc_sg", [stem1]);
277
-
278
- setNominalForm(data.forms, "nom_pl", [stem2 + "ēs"]);
279
- setNominalForm(data.forms, "gen_pl", [stem2 + "um"]);
280
- setNominalForm(data.forms, "dat_pl", [stem2 + "ibus"]);
281
- setNominalForm(data.forms, "acc_pl", [stem2 + "ēs"]);
282
- setNominalForm(data.forms, "abl_pl", [stem2 + "ibus"]);
283
- setNominalForm(data.forms, "voc_pl", [stem2 + "ēs"]);
284
-
285
- let acc_sg_i_stem_subtype = false;
286
- let not_acc_sg_i_stem_subtype = false;
287
-
288
- for (const subtype of data.types.keys()) {
289
- if (acc_sg_i_stem_subtypes.has(subtype)) {
290
- acc_sg_i_stem_subtype = true;
291
- break;
292
- }
293
- }
294
-
295
- for (const [acc_sg_subtype, [endings, title]] of acc_sg_i_stem_subtypes) {
296
- if (hasNominalType(data.types, "not_" + acc_sg_subtype)) {
297
- not_acc_sg_i_stem_subtype = true;
298
- break;
299
- }
300
- }
301
-
302
- let abl_sg_i_stem_subtype = false;
303
- let not_abl_sg_i_stem_subtype = false;
304
- for (const subtype of data.types.keys()) {
305
- if (abl_sg_i_stem_subtypes.has(subtype)) {
306
- abl_sg_i_stem_subtype = true;
307
- break;
308
- }
309
- }
310
-
311
- for (const [abl_sg_subtype, [endings, title]] of abl_sg_i_stem_subtypes) {
312
- if (hasNominalType(data.types, "not_" + abl_sg_subtype)) {
313
- not_abl_sg_i_stem_subtype = true;
314
- break;
315
- }
316
- }
317
-
318
-
319
- if (data.types.has(NominalType.Greek)) {
320
- data.subtitles.push("Greek-type");
321
-
322
- if (data.types.has(NominalType.Er)) {
323
- data.subtitles.push("variant with nominative singular in '-ēr'");
324
- stem1 = extract_stem(stem1, "ēr");
325
-
326
- setNominalForm(data.forms, "nom_sg", [stem1 + "ēr"]);
327
- setNominalForm(data.forms, "gen_sg", [stem1 + "eris"]);
328
- setNominalForm(data.forms, "dat_sg", [stem1 + "erī"]);
329
- setNominalForm(data.forms, "acc_sg", [stem1 + "era", stem1 + "erem"]);
330
- setNominalForm(data.forms, "abl_sg", [stem1 + "ere"]);
331
- setNominalForm(data.forms, "voc_sg", [stem1 + "ēr"]);
332
-
333
- setNominalForm(data.forms, "nom_pl", [stem1 + "erēs"]);
334
- setNominalForm(data.forms, "gen_pl", [stem1 + "erum"]);
335
- setNominalForm(data.forms, "dat_pl", [stem1 + "eribus"]);
336
- setNominalForm(data.forms, "acc_pl", [stem1 + "erēs"]);
337
- setNominalForm(data.forms, "abl_pl", [stem1 + "eribus"]);
338
- setNominalForm(data.forms, "voc_pl", [stem1 + "erēs"]);
339
- } else if (data.types.has(NominalType.On)) {
340
- data.subtitles.push("variant with nominative singular in '-ōn'");
341
- stem1 = extract_stem(stem1, "ōn");
342
-
343
- setNominalForm(data.forms, "nom_sg", [stem1 + "ōn"]);
344
- setNominalForm(data.forms, "gen_sg", [stem1 + "ontis", stem1 + "ontos"]);
345
- setNominalForm(data.forms, "dat_sg", [stem1 + "ontī"]);
346
- setNominalForm(data.forms, "acc_sg", [stem1 + "onta"]);
347
- setNominalForm(data.forms, "abl_sg", [stem1 + "onte"]);
348
- setNominalForm(data.forms, "voc_sg", [stem1 + "ōn"]);
349
-
350
- setNominalForm(data.forms, "nom_pl", [stem1 + "ontēs"]);
351
- setNominalForm(data.forms, "gen_pl", [stem1 + "ontum", stem1 + "ontium"]);
352
- setNominalForm(data.forms, "dat_pl", [stem1 + "ontibus"]);
353
- setNominalForm(data.forms, "acc_pl", [stem1 + "ontēs", stem1 + "ontās"]);
354
- setNominalForm(data.forms, "abl_pl", [stem1 + "ontibus"]);
355
- setNominalForm(data.forms, "voc_pl", [stem1 + "ontēs"]);
356
- } else if (data.types.has(NominalType.I)) {
357
- data.subtitles.push("i-stem");
358
- setNominalForm(data.forms, "gen_sg", [stem2 + "is", stem2 + "eōs", stem2 + "ios"]);
359
- setNominalForm(data.forms, "acc_sg", [stem2 + "im", stem2 + "in", stem2 + "em"]);
360
- setNominalForm(data.forms, "abl_sg", [stem2 + "ī", stem2 + "e"]);
361
- setNominalForm(data.forms, "voc_sg", [stem2 + "is", stem2 + "i"]);
362
-
363
- data.notes.set("acc_sg3", "Found sometimes in Medieval and New Latin.");
364
- data.notes.set("abl_sg2", "Found sometimes in Medieval and New Latin.");
365
-
366
- setNominalForm(data.forms, "nom_pl", [stem2 + "ēs", stem2 + "eis"]);
367
- setNominalForm(data.forms, "gen_pl", [stem2 + "ium", stem2 + "eōn"]);
368
- setNominalForm(data.forms, "acc_pl", [stem2 + "ēs", stem2 + "eis"]);
369
- setNominalForm(data.forms, "voc_pl", [stem2 + "ēs", stem2 + "eis"]);
370
-
371
- if (data.types.has(NominalType.poetic_esi)) {
372
- setNominalForm(data.forms, "dat_pl", [stem2 + "ibus", stem2 + "esi"]);
373
- setNominalForm(data.forms, "abl_pl", [stem2 + "ibus", stem2 + "esi"]);
374
- data.notes.set("dat_pl2", "Primarily in poetry.");
375
- data.notes.set("abl_pl2", "Primarily in poetry.");
376
- }
377
- } else {
378
- data.subtitles.push("normal variant");
379
-
380
- setNominalForm(data.forms, "gen_sg", [stem2 + "os"]);
381
- if (stem2.match(/y$/)) {
382
- setNominalForm(data.forms, "acc_sg", [stem2 + "n"]);
383
- } else {
384
- setNominalForm(data.forms, "acc_sg", [stem2 + "a"]);
385
- }
386
- setNominalForm(data.forms, "nom_pl", [stem2 + "es"]);
387
- setNominalForm(data.forms, "acc_pl", [stem2 + "as"]);
388
- setNominalForm(data.forms, "voc_pl", [stem2 + "es"]);
389
-
390
- if (stem1.match(/[iyï]s$/)) {
391
- setNominalForm(data.forms, "voc_sg", [stem1, stem1.replace(/s/g, "")]);
392
- data.notes.set("voc_sg2", "In poetry.");
393
- }
394
- }
395
- } else if (data.types.has(NominalType.NotGreek)) {
396
- data.subtitles.push("non-Greek-type");
397
- }
398
-
399
- if (data.types.has(NominalType.Polis)) {
400
- stem1 = extract_stem(stem1, "polis");
401
- data.subtitles.push("i-stem, partially Greek-type");
402
- setNominalForm(data.forms, "nom_sg", [stem1 + "polis"]);
403
- setNominalForm(data.forms, "gen_sg", [stem1 + "polis"]);
404
- setNominalForm(data.forms, "dat_sg", [stem1 + "polī"]);
405
- setNominalForm(data.forms, "acc_sg", [stem1 + "polim", stem1 + "polin"]);
406
- setNominalForm(data.forms, "abl_sg", [stem1 + "polī"]);
407
- setNominalForm(data.forms, "voc_sg", [stem1 + "polis", stem1 + "polī"]);
408
- } else if (data.types.has(NominalType.NotPolis)) {
409
- data.subtitles.push(non_i_stem_type());
410
- }
411
-
412
- if (data.types.has(NominalType.Neuter)) {
413
- data.subtitles.push("neuter");
414
-
415
- setNominalForm(data.forms, "acc_sg", [stem1]);
416
-
417
- if (data.types.has(NominalType.I)) {
418
- if (data.types.has(NominalType.Pure)) {
419
- data.subtitles.push("“pure” i-stem");
420
-
421
- setNominalForm(data.forms, "abl_sg", [stem2 + "ī"]);
422
-
423
- setNominalForm(data.forms, "nom_pl", [stem2 + "ia"]);
424
- setNominalForm(data.forms, "gen_pl", [stem2 + "ium"]);
425
- setNominalForm(data.forms, "acc_pl", [stem2 + "ia"]);
426
- setNominalForm(data.forms, "voc_pl", [stem2 + "ia"]);
427
- } else {
428
- data.subtitles.push("i-stem");
429
- setNominalForm(data.forms, "nom_pl", [stem2 + "a"]);
430
- setNominalForm(data.forms, "gen_pl", [stem2 + "ium", stem2 + "um"]);
431
- setNominalForm(data.forms, "acc_pl", [stem2 + "a"]);
432
- setNominalForm(data.forms, "voc_pl", [stem2 + "a"]);
433
- }
434
- } else {
435
- data.subtitles.push(non_i_stem_type());
436
- setNominalForm(data.forms, "nom_pl", [stem2 + "a"]);
437
- setNominalForm(data.forms, "acc_pl", [stem2 + "a"]);
438
- setNominalForm(data.forms, "voc_pl", [stem2 + "a"]);
439
- }
440
- } else if (data.types.has(NominalType.I) || acc_sg_i_stem_subtype || abl_sg_i_stem_subtype) {
441
- if (data.types.has(NominalType.NotNeuter)) {
442
- data.subtitles.push("non-neuter i-stem");
443
- } else {
444
- data.subtitles.push("i-stem");
445
- }
446
-
447
- setNominalForm(data.forms, "gen_pl", [stem2 + "ium"]);
448
- if (!data.declOpts.suppressNonNeuterIStemAccIs) {
449
- setNominalForm(data.forms, "acc_pl", [stem2 + "ēs", stem2 + "īs"]);
450
- } else {
451
- setNominalForm(data.forms, "acc_pl", [stem2 + "ēs"]);
452
- }
453
-
454
- for (const subtype of data.types) {
455
- const acc_sg_i_stem_props = acc_sg_i_stem_subtypes.get(subtype);
456
- if (acc_sg_i_stem_props) {
457
- setNominalForm(data.forms, "acc_sg", []);
458
- for (const ending of acc_sg_i_stem_props[0]) {
459
- setNominalForm(data.forms, "acc_sg", (getNominalForm(data.forms, "acc_sg") || []).concat([stem2 + ending]));
460
- }
461
- if (data.num != "pl") {
462
- data.subtitles.push(acc_sg_i_stem_props[1]);
463
- }
464
- break;
465
- }
466
- }
467
-
468
- for (const subtype of data.types) {
469
- const abl_sg_i_stem_props = abl_sg_i_stem_subtypes.get(subtype);
470
- if (abl_sg_i_stem_props) {
471
- setNominalForm(data.forms, "abl_sg", []);
472
- for (const ending of abl_sg_i_stem_props[0]) {
473
- setNominalForm(data.forms, "abl_sg", (getNominalForm(data.forms, "abl_sg") || []).concat([stem2 + ending]));
474
- }
475
- if (data.num != "pl") {
476
- data.subtitles.push(abl_sg_i_stem_props[1]);
477
- }
478
- break;
479
- }
480
- }
481
- } else if (data.types.has(NominalType.Neuter) && data.types.has(NominalType.NotI)) {
482
- data.subtitles.push("non-neuter " + non_i_stem_type());
483
- } else if (data.types.has(NominalType.NotNeuter)) {
484
- data.subtitles.push("non-neuter");
485
- } else if (data.types.has(NominalType.NotI)) {
486
- data.subtitles.push(non_i_stem_type());
487
- }
488
-
489
- if (data.loc) {
490
- const loc_sg = Array.from(getNominalForm(data.forms, "dat_sg") || []);
491
- const abl_sg = getNominalForm(data.forms, "abl_sg") || [];
492
- for (const form of abl_sg) {
493
- insert_if_not(loc_sg, form);
494
- }
495
- setNominalForm(data.forms, "loc_sg", loc_sg);
496
- setNominalForm(data.forms, "loc_pl", getNominalForm(data.forms, "abl_pl") || []);
497
- }
498
- }],
499
- ["4", (data, args) => {
500
- const stem = args[0];
501
-
502
- setNominalForm(data.forms, "nom_sg", [stem + "us"]);
503
- setNominalForm(data.forms, "gen_sg", [stem + "ūs"]);
504
- setNominalForm(data.forms, "dat_sg", [stem + "uī"]);
505
- setNominalForm(data.forms, "acc_sg", [stem + "um"]);
506
- setNominalForm(data.forms, "abl_sg", [stem + "ū"]);
507
- setNominalForm(data.forms, "voc_sg", [stem + "us"]);
508
-
509
- setNominalForm(data.forms, "nom_pl", [stem + "ūs"]);
510
- setNominalForm(data.forms, "gen_pl", [stem + "uum"]);
511
- setNominalForm(data.forms, "dat_pl", [stem + "ibus"]);
512
- setNominalForm(data.forms, "acc_pl", [stem + "ūs"]);
513
- setNominalForm(data.forms, "abl_pl", [stem + "ibus"]);
514
- setNominalForm(data.forms, "voc_pl", [stem + "ūs"]);
515
-
516
- if (data.types.has(NominalType.Echo)) {
517
- data.subtitles.push("nominative/vocative singular in '-ō'");
518
- setNominalForm(data.forms, "nom_sg", [stem + "ō"]);
519
- setNominalForm(data.forms, "voc_sg", [stem + "ō"]);
520
- } else if (data.types.has(NominalType.argo)) {
521
- data.subtitles.push("nominative/accusative/vocative singular in '-ō', ablative singular in '-uī'");
522
- setNominalForm(data.forms, "nom_sg", [stem + "ō"]);
523
- setNominalForm(data.forms, "acc_sg", [stem + "ō"]);
524
- setNominalForm(data.forms, "abl_sg", [stem + "uī"]);
525
- setNominalForm(data.forms, "voc_sg", [stem + "ō"]);
526
- } else if (data.types.has(NominalType.Callisto)) {
527
- data.subtitles.push("all cases except the genitive singular in '-ō'");
528
- setNominalForm(data.forms, "nom_sg", [stem + "ō"]);
529
- setNominalForm(data.forms, "dat_sg", [stem + "ō"]);
530
- setNominalForm(data.forms, "acc_sg", [stem + "ō"]);
531
- setNominalForm(data.forms, "abl_sg", [stem + "ō"]);
532
- setNominalForm(data.forms, "voc_sg", [stem + "ō"]);
533
- }
534
-
535
- if (data.types.has(NominalType.Neuter)) {
536
- data.subtitles.push("neuter");
537
-
538
- setNominalForm(data.forms, "nom_sg", [stem + "ū"]);
539
- setNominalForm(data.forms, "dat_sg", [stem + "ū"]);
540
- setNominalForm(data.forms, "acc_sg", [stem + "ū"]);
541
- setNominalForm(data.forms, "voc_sg", [stem + "ū"]);
542
-
543
- setNominalForm(data.forms, "nom_pl", [stem + "ua"]);
544
- setNominalForm(data.forms, "acc_pl", [stem + "ua"]);
545
- setNominalForm(data.forms, "voc_pl", [stem + "ua"]);
546
- }
547
-
548
- if (data.types.has(NominalType.Ubus)) {
549
- data.subtitles.push("dative/ablative plural in '-ubus'");
550
-
551
- setNominalForm(data.forms, "dat_pl", [stem + "ubus"]);
552
- setNominalForm(data.forms, "abl_pl", [stem + "ubus"]);
553
- } else if (data.types.has(NominalType.NotUbus)) {
554
- data.subtitles.push("'-ibus'");
555
- }
556
-
557
- if (data.loc) {
558
- setNominalForm(data.forms, "loc_sg", getNominalForm(data.forms, "abl_sg") || []);
559
- setNominalForm(data.forms, "loc_pl", getNominalForm(data.forms, "abl_pl") || []);
560
- }
561
-
562
- }],
563
- ["5", (data, args) => {
564
- let stem = args[0];
565
-
566
- if (data.types.has(NominalType.i)) {
567
- stem = stem + "i";
568
- }
569
-
570
- setNominalForm(data.forms, "nom_sg", [stem + "ēs"]);
571
- setNominalForm(data.forms, "gen_sg", [stem + "eī"]);
572
- setNominalForm(data.forms, "dat_sg", [stem + "eī"]);
573
- setNominalForm(data.forms, "acc_sg", [stem + "em"]);
574
- setNominalForm(data.forms, "abl_sg", [stem + "ē"]);
575
- setNominalForm(data.forms, "voc_sg", [stem + "ēs"]);
576
-
577
- setNominalForm(data.forms, "nom_pl", [stem + "ēs"]);
578
- setNominalForm(data.forms, "gen_pl", [stem + "ērum"]);
579
- setNominalForm(data.forms, "dat_pl", [stem + "ēbus"]);
580
- setNominalForm(data.forms, "acc_pl", [stem + "ēs"]);
581
- setNominalForm(data.forms, "abl_pl", [stem + "ēbus"]);
582
- setNominalForm(data.forms, "voc_pl", [stem + "ēs"]);
583
-
584
- if (data.types.has(NominalType.i)) {
585
- setNominalForm(data.forms, "gen_sg", [stem + "ēī"]);
586
- setNominalForm(data.forms, "dat_sg", [stem + "ēī"]);
587
- }
588
-
589
- if (data.loc) {
590
- setNominalForm(data.forms, "loc_sg", [stem + "ē"]);
591
- setNominalForm(data.forms, "loc_pl", [stem + "ēbus"]);
592
- }
593
- }],
594
- ["0", (data, args) => {
595
- const stem = args[0];
596
-
597
- setNominalForm(data.forms, "nom_sg", [stem]);
598
- setNominalForm(data.forms, "gen_sg", [stem]);
599
- setNominalForm(data.forms, "dat_sg", [stem]);
600
- setNominalForm(data.forms, "acc_sg", [stem]);
601
- setNominalForm(data.forms, "abl_sg", [stem]);
602
- setNominalForm(data.forms, "voc_sg", [stem]);
603
-
604
- setNominalForm(data.forms, "nom_pl", [stem]);
605
- setNominalForm(data.forms, "gen_pl", [stem]);
606
- setNominalForm(data.forms, "dat_pl", [stem]);
607
- setNominalForm(data.forms, "acc_pl", [stem]);
608
- setNominalForm(data.forms, "abl_pl", [stem]);
609
- setNominalForm(data.forms, "voc_pl", [stem]);
610
-
611
- if (data.loc) {
612
- setNominalForm(data.forms, "loc_sg", [stem]);
613
- setNominalForm(data.forms, "loc_pl", [stem]);
614
- }
615
- }],
616
- ["indecl", (data, args) => {
617
- data.title = "Not declined; used only in the nominative and accusative singular";
618
-
619
- const stem = args[0];
620
-
621
- setNominalForm(data.forms, "nom_sg", ["-"]);
622
- setNominalForm(data.forms, "gen_sg", ["-"]);
623
- setNominalForm(data.forms, "dat_sg", ["-"]);
624
- setNominalForm(data.forms, "acc_sg", ["-"]);
625
- setNominalForm(data.forms, "abl_sg", ["-"]);
626
- setNominalForm(data.forms, "voc_sg", ["-"]);
627
-
628
- setNominalForm(data.forms, "nom_pl", ["-"]);
629
- setNominalForm(data.forms, "gen_pl", ["-"]);
630
- setNominalForm(data.forms, "dat_pl", ["-"]);
631
- setNominalForm(data.forms, "acc_pl", ["-"]);
632
- setNominalForm(data.forms, "abl_pl", ["-"]);
633
- setNominalForm(data.forms, "voc_pl", ["-"]);
634
-
635
- setNominalForm(data.forms, "nom_sg", [stem]);
636
- setNominalForm(data.forms, "acc_sg", [stem]);
637
- data.num = NumberTantum.Singular;
638
- }],
639
- ["irreg", (data, args) => {
640
- const stem = args[0];
641
- setNominalForm(data.forms, "nom_sg", ["-"]);
642
- setNominalForm(data.forms, "gen_sg", ["-"]);
643
- setNominalForm(data.forms, "dat_sg", ["-"]);
644
- setNominalForm(data.forms, "acc_sg", ["-"]);
645
- setNominalForm(data.forms, "abl_sg", ["-"]);
646
- setNominalForm(data.forms, "voc_sg", ["-"]);
647
-
648
- setNominalForm(data.forms, "nom_pl", ["-"]);
649
- setNominalForm(data.forms, "gen_pl", ["-"]);
650
- setNominalForm(data.forms, "dat_pl", ["-"]);
651
- setNominalForm(data.forms, "acc_pl", ["-"]);
652
- setNominalForm(data.forms, "abl_pl", ["-"]);
653
- setNominalForm(data.forms, "voc_pl", ["-"]);
654
-
655
- if (stem == "bōs") {
656
- setNominalForm(data.forms, "nom_sg", ["bōs"]);
657
- setNominalForm(data.forms, "gen_sg", ["bovis"]);
658
- setNominalForm(data.forms, "dat_sg", ["bovī"]);
659
- setNominalForm(data.forms, "acc_sg", ["bovem"]);
660
- setNominalForm(data.forms, "abl_sg", ["bove"]);
661
- setNominalForm(data.forms, "voc_sg", ["bōs"]);
662
-
663
- setNominalForm(data.forms, "nom_pl", ["bovēs"]);
664
- setNominalForm(data.forms, "gen_pl", ["boum"]);
665
- if (!data.declOpts.suppressRareIrregForms) {
666
- setNominalForm(data.forms, "dat_pl", ["bōbus", "būbus"]);
667
- setNominalForm(data.forms, "abl_pl", ["bōbus", "būbus"]);
668
- } else {
669
- setNominalForm(data.forms, "dat_pl", ["bōbus"]);
670
- setNominalForm(data.forms, "abl_pl", ["bōbus"]);
671
- }
672
- setNominalForm(data.forms, "acc_pl", ["bovēs"]);
673
- setNominalForm(data.forms, "voc_pl", ["bovēs"]);
674
- } else if (stem == "cherub") {
675
- data.title = "mostly indeclinable";
676
- data.subtitles.push("with a distinct plural");
677
-
678
- setNominalForm(data.forms, "nom_sg", ["cherub"]);
679
- setNominalForm(data.forms, "gen_sg", ["cherub"]);
680
- setNominalForm(data.forms, "dat_sg", ["cherub"]);
681
- setNominalForm(data.forms, "acc_sg", ["cherub"]);
682
- setNominalForm(data.forms, "abl_sg", ["cherub"]);
683
- setNominalForm(data.forms, "voc_sg", ["cherub"]);
684
-
685
- setNominalForm(data.forms, "nom_pl", ["cherubim", "cherubin"]);
686
- setNominalForm(data.forms, "gen_pl", ["cherubim", "cherubin"]);
687
- setNominalForm(data.forms, "dat_pl", ["cherubim", "cherubin"]);
688
- setNominalForm(data.forms, "acc_pl", ["cherubim", "cherubin"]);
689
- setNominalForm(data.forms, "abl_pl", ["cherubim", "cherubin"]);
690
- setNominalForm(data.forms, "voc_pl", ["cherubim", "cherubin"]);
691
- } else if (stem == "deus") {
692
- setNominalForm(data.forms, "nom_sg", ["deus"]);
693
- setNominalForm(data.forms, "gen_sg", ["deī"]);
694
- setNominalForm(data.forms, "dat_sg", ["deō"]);
695
- setNominalForm(data.forms, "acc_sg", ["deum"]);
696
- setNominalForm(data.forms, "abl_sg", ["deō"]);
697
- setNominalForm(data.forms, "voc_sg", ["deus"]);
698
-
699
- setNominalForm(data.forms, "nom_pl", ["dī", "diī", "deī"]);
700
- setNominalForm(data.forms, "gen_pl", ["deōrum", "deûm", "divom"]);
701
- setNominalForm(data.forms, "dat_pl", ["dīs", "diīs", "deīs"]);
702
- setNominalForm(data.forms, "acc_pl", ["deōs"]);
703
- setNominalForm(data.forms, "abl_pl", ["dīs", "diīs", "deīs"]);
704
- setNominalForm(data.forms, "voc_pl", ["dī", "diī", "deī"]);
705
- } else if (stem == "Deus") {
706
- setNominalForm(data.forms, "nom_sg", ["Deus"]);
707
- setNominalForm(data.forms, "gen_sg", ["Deī"]);
708
- setNominalForm(data.forms, "dat_sg", ["Deō"]);
709
- setNominalForm(data.forms, "acc_sg", ["Deum"]);
710
- setNominalForm(data.forms, "abl_sg", ["Deō"]);
711
- setNominalForm(data.forms, "voc_sg", ["Deus"]);
712
- data.num = NumberTantum.Singular;
713
- } else if (stem == "domus") {
714
- data.title = "fourth/second-declension noun";
715
-
716
- setNominalForm(data.forms, "nom_sg", ["domus"]);
717
- if (!data.declOpts.suppressRareIrregForms) {
718
- setNominalForm(data.forms, "gen_sg", ["domūs", "domī"]);
719
- setNominalForm(data.forms, "dat_sg", ["domuī", "domō", "domū"]);
720
- setNominalForm(data.forms, "abl_sg", ["domū", "domō"]);
721
-
722
- setNominalForm(data.forms, "gen_pl", ["domuum", "domōrum"]);
723
- setNominalForm(data.forms, "acc_pl", ["domūs", "domōs"]);
724
- } else {
725
- setNominalForm(data.forms, "gen_sg", ["domūs"]);
726
- setNominalForm(data.forms, "dat_sg", ["domuī"]);
727
- setNominalForm(data.forms, "abl_sg", ["domō"]);
728
-
729
- setNominalForm(data.forms, "gen_pl", ["domuum", "domōrum"]);
730
- setNominalForm(data.forms, "acc_pl", ["domōs"]);
731
- }
732
- setNominalForm(data.forms, "acc_sg", ["domum"]);
733
- setNominalForm(data.forms, "voc_sg", ["domus"]);
734
- setNominalForm(data.forms, "loc_sg", ["domī"]);
735
-
736
- setNominalForm(data.forms, "nom_pl", ["domūs"]);
737
- setNominalForm(data.forms, "dat_pl", ["domibus"]);
738
- setNominalForm(data.forms, "abl_pl", ["domibus"]);
739
- setNominalForm(data.forms, "voc_pl", ["domūs"]);
740
- setNominalForm(data.forms, "loc_pl", ["domibus"]);
741
-
742
- data.loc = true;
743
- } else if (stem == "Iēsus" || stem == "Iēsūs") {
744
- data.subtitles.push("highly irregular");
745
- const ij = stem[0];
746
- setNominalForm(data.forms, "nom_sg", [stem]);
747
- setNominalForm(data.forms, "gen_sg", [ij + "ēsū"]);
748
- setNominalForm(data.forms, "dat_sg", [ij + "ēsū"]);
749
- setNominalForm(data.forms, "acc_sg", [ij + "ēsum"]);
750
- setNominalForm(data.forms, "abl_sg", [ij + "ēsū"]);
751
- setNominalForm(data.forms, "voc_sg", [ij + "ēsū"]);
752
- data.num = NumberTantum.Singular;
753
- } else if (stem == "Jesus") {
754
- data.subtitles.push("highly irregular");
755
- const ij = stem[0];
756
- setNominalForm(data.forms, "nom_sg", [stem]);
757
- setNominalForm(data.forms, "gen_sg", [ij + "esu"]);
758
- setNominalForm(data.forms, "dat_sg", [ij + "esu"]);
759
- setNominalForm(data.forms, "acc_sg", [ij + "esum"]);
760
- setNominalForm(data.forms, "abl_sg", [ij + "esu"]);
761
- setNominalForm(data.forms, "voc_sg", [ij + "esu"]);
762
- data.num = NumberTantum.Singular;
763
- } else if (stem == "iūgerum" || stem == "jūgerum") {
764
- const ij = stem[0];
765
- data.title = "second–third-declension hybrid noun";
766
- data.subtitles.push("neuter");
767
-
768
- setNominalForm(data.forms, "nom_sg", [ij + "ūgerum"]);
769
- setNominalForm(data.forms, "gen_sg", [ij + "ūgerī"]);
770
- setNominalForm(data.forms, "dat_sg", [ij + "ūgerō"]);
771
- setNominalForm(data.forms, "acc_sg", [ij + "ūgerum"]);
772
- setNominalForm(data.forms, "abl_sg", [ij + "ūgerō"]);
773
- setNominalForm(data.forms, "voc_sg", [ij + "ūgerum"]);
774
- setNominalForm(data.forms, "nom_pl", [ij + "ūgera"]);
775
- setNominalForm(data.forms, "gen_pl", [ij + "ūgerum"]);
776
- setNominalForm(data.forms, "dat_pl", [ij + "ūgeribus"]);
777
- setNominalForm(data.forms, "acc_pl", [ij + "ūgera"]);
778
- setNominalForm(data.forms, "abl_pl", [ij + "ūgeribus", ij + "ūgerīs"]);
779
- setNominalForm(data.forms, "voc_pl", [ij + "ūgera"]);
780
-
781
- data.notes.set("abl_pl2", "Once only, in:<br/>M. Terentius Varro, 'Res Rusticae', bk I, ch. x");
782
- } else if (stem == "sūs") {
783
- setNominalForm(data.forms, "nom_sg", ["sūs"]);
784
- setNominalForm(data.forms, "gen_sg", ["suis"]);
785
- setNominalForm(data.forms, "dat_sg", ["suī"]);
786
- setNominalForm(data.forms, "acc_sg", ["suem"]);
787
- setNominalForm(data.forms, "abl_sg", ["sue"]);
788
- setNominalForm(data.forms, "voc_sg", ["sūs"]);
789
-
790
- setNominalForm(data.forms, "nom_pl", ["suēs"]);
791
- setNominalForm(data.forms, "gen_pl", ["suum"]);
792
- setNominalForm(data.forms, "dat_pl", ["suibus", "sūbus", "subus"]);
793
- setNominalForm(data.forms, "acc_pl", ["suēs"]);
794
- setNominalForm(data.forms, "abl_pl", ["suibus", "sūbus", "subus"]);
795
- setNominalForm(data.forms, "voc_pl", ["suēs"]);
796
- } else if (stem == "ēthos") {
797
- data.subtitles.push("irregular");
798
- data.subtitles.push("Greek-type");
799
-
800
- setNominalForm(data.forms, "nom_sg", ["ēthos"]);
801
- setNominalForm(data.forms, "gen_sg", ["ētheos"]);
802
- setNominalForm(data.forms, "acc_sg", ["ēthos"]);
803
- setNominalForm(data.forms, "voc_sg", ["ēthos"]);
804
-
805
- setNominalForm(data.forms, "nom_pl", ["ēthea", "ēthē"]);
806
- setNominalForm(data.forms, "dat_pl", ["ēthesi", "ēthesin"]);
807
- setNominalForm(data.forms, "acc_pl", ["ēthea", "ēthē"]);
808
- setNominalForm(data.forms, "abl_pl", ["ēthesi", "ēthesin"]);
809
- setNominalForm(data.forms, "voc_pl", ["ēthea", "ēthē"]);
810
- } else if (stem == "lexis") {
811
- data.subtitles.push("irregular");
812
- data.subtitles.push("Greek-type");
813
-
814
- setNominalForm(data.forms, "nom_sg", ["lexis"]);
815
- setNominalForm(data.forms, "gen_sg", ["lexeōs"]);
816
- setNominalForm(data.forms, "acc_pl", ["lexeis"]);
817
- } else if (stem == "Athōs") {
818
- data.subtitles.push("highly irregular");
819
- data.subtitles.push("Greek-type");
820
-
821
- setNominalForm(data.forms, "nom_sg", ["Athōs"]);
822
- setNominalForm(data.forms, "gen_sg", ["Athō"]);
823
- setNominalForm(data.forms, "dat_sg", ["Athō"]);
824
- setNominalForm(data.forms, "acc_sg", ["Athō", "Athōn"]);
825
- setNominalForm(data.forms, "abl_sg", ["Athō"]);
826
- setNominalForm(data.forms, "voc_sg", ["Athōs"]);
827
- data.num = NumberTantum.Singular;
828
- } else if (stem == "vēnum") {
829
- data.title = "fourth/second-declension noun";
830
- data.subtitles.push("defective");
831
-
832
- setNominalForm(data.forms, "dat_sg", ["vēnuī", "vēnō"]);
833
- setNominalForm(data.forms, "acc_sg", ["vēnum"]);
834
- data.num = NumberTantum.Singular;
835
- } else if (stem == "vīs") {
836
- data.subtitles.push("irregular");
837
- data.subtitles.push("defective");
838
-
839
- if (!data.declOpts.suppressRareIrregForms) {
840
- setNominalForm(data.forms, "gen_sg", ["*vīs"]);
841
- setNominalForm(data.forms, "dat_sg", ["*vī"]);
842
-
843
- setNominalForm(data.forms, "acc_pl", ["vīrēs", "vīrīs"]);
844
- } else {
845
- setNominalForm(data.forms, "acc_pl", ["vīrēs"]);
846
- }
847
-
848
- setNominalForm(data.forms, "nom_sg", ["vīs"]);
849
- setNominalForm(data.forms, "acc_sg", ["vim"]);
850
- setNominalForm(data.forms, "abl_sg", ["vī"]);
851
- setNominalForm(data.forms, "voc_sg", ["vīs"]);
852
-
853
- setNominalForm(data.forms, "nom_pl", ["vīrēs"]);
854
- setNominalForm(data.forms, "gen_pl", ["vīrium"]);
855
- setNominalForm(data.forms, "dat_pl", ["vīribus"]);
856
- setNominalForm(data.forms, "abl_pl", ["vīribus"]);
857
- setNominalForm(data.forms, "voc_pl", ["vīrēs"]);
858
- } else {
859
- throw Error(`Stem ${stem} not recognized.`);
860
- }
861
- }],
862
- ]);
863
-
864
- const acc_sg_i_stem_subtypes = new Map<NominalType, [string[], string]>([
865
- [NominalType.AccIm, [["im"], "accusative singular in '-im'"]],
866
- [NominalType.AccImIn, [["im", "in"], "accusative singular in '-im' or '-in'"]],
867
- [NominalType.AccImInEm, [["im", "in", "em"], "accusative singular in '-im', '-in' or '-em'"]],
868
- [NominalType.AccImEm, [["im", "em"], "accusative singular in '-im' or '-em'"]],
869
- [NominalType.AccImOccEm, [["im", "em"], "accusative singular in '-im' or occasionally '-em'"]],
870
- [NominalType.AccEmIm, [["em", "im"], "accusative singular in '-em' or '-im'"]],
871
- ]);
872
-
873
- const abl_sg_i_stem_subtypes = new Map<NominalType, [string[], string]>([
874
- [NominalType.AblI, [["ī"], "ablative singular in '-ī'"]],
875
- [NominalType.AblIE, [["ī", "e"], "ablative singular in '-ī' or '-e'"]],
876
- [NominalType.AblEI, [["e", "ī"], "ablative singular in '-e' or '-ī'"]],
877
- [NominalType.AblEOccI, [["e", "ī"], "ablative singular in '-e' or occasionally '-ī'"]],
878
- ]);
879
-
880
- function extract_stem(form: string, ending: string): string {
881
- const base = form.match(new RegExp(`^(.*)${ending}$`));
882
- if (!base) {
883
- throw Error(`Form ${form} should end in -${ending}`);
884
- }
885
- return base[1];
886
- }
887
-
888
- function insert_if_not(data: string[], entry: string, pos = 0) {
889
- if (data.includes(entry)) {
890
- return;
891
- }
892
- if (pos == 0) {
893
- data.push(entry);
894
- } else {
895
- data.splice(pos - 1, 0, entry);
896
- }
897
- }