@fpw/en-wiktionary-la-modules 0.1.2 → 0.1.5

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 (30) hide show
  1. package/dist/modules/conjugation/LaVerb.d.ts +3 -1
  2. package/dist/modules/conjugation/LaVerb.js +201 -32
  3. package/dist/modules/conjugation/LaVerb.js.map +1 -1
  4. package/dist/modules/conjugation/VerbType.d.ts +5 -1
  5. package/dist/modules/conjugation/VerbType.js +4 -0
  6. package/dist/modules/conjugation/VerbType.js.map +1 -1
  7. package/dist/modules/declination/LaAdjData.d.ts +1 -1
  8. package/dist/modules/declination/LaAdjData.js +45 -24
  9. package/dist/modules/declination/LaAdjData.js.map +1 -1
  10. package/dist/modules/declination/LaNominal.d.ts +9 -5
  11. package/dist/modules/declination/LaNominal.js +195 -171
  12. package/dist/modules/declination/LaNominal.js.map +1 -1
  13. package/dist/modules/declination/LaNounData.js +65 -64
  14. package/dist/modules/declination/LaNounData.js.map +1 -1
  15. package/dist/modules/declination/LaPersonalPronoun.js +1 -0
  16. package/dist/modules/declination/LaPersonalPronoun.js.map +1 -1
  17. package/dist/modules/declination/NominalType.d.ts +116 -0
  18. package/dist/modules/declination/NominalType.js +142 -0
  19. package/dist/modules/declination/NominalType.js.map +1 -0
  20. package/dist/modules/headword/HeadwordParser.js +2 -1
  21. package/dist/modules/headword/HeadwordParser.js.map +1 -1
  22. package/package.json +1 -1
  23. package/src/modules/conjugation/LaVerb.ts +206 -35
  24. package/src/modules/conjugation/VerbType.ts +4 -0
  25. package/src/modules/declination/LaAdjData.ts +47 -24
  26. package/src/modules/declination/LaNominal.ts +223 -187
  27. package/src/modules/declination/LaNounData.ts +67 -66
  28. package/src/modules/declination/LaPersonalPronoun.ts +1 -0
  29. package/src/modules/declination/NominalType.ts +153 -0
  30. package/src/modules/headword/HeadwordParser.ts +2 -1
@@ -5,7 +5,7 @@
5
5
  * A few new options to suppress certain rate forms were added.
6
6
  *
7
7
  * Original source: https://en.wiktionary.org/wiki/Module:la-verb
8
- * Based on version: https://en.wiktionary.org/w/index.php?title=Module:la-verb&oldid=63102127
8
+ * Based on version: https://en.wiktionary.org/w/index.php?title=Module:la-verb&oldid=67964189
9
9
  *
10
10
  * Lua idioms, function and variable names kept as in the original in order to easily
11
11
  * backport later changes to this implementation.
@@ -25,6 +25,7 @@ export interface ConjOptions {
25
25
  suppressUndVariants?: boolean;
26
26
  suppressIPerfect?: boolean;
27
27
  suppressPoet?: boolean;
28
+ suppressArchaic?: boolean;
28
29
  ireWithShortPerfInf?: boolean;
29
30
  reorderEdere?: boolean;
30
31
  }
@@ -98,6 +99,7 @@ export declare class LaVerb {
98
99
  private make_perfect_passive;
99
100
  private override;
100
101
  private add_prefix_suffix;
102
+ private notes_override;
101
103
  private set_linked_forms;
102
104
  private setup_irreg_conjs;
103
105
  private lengthen_prefix;
@@ -8,7 +8,7 @@ exports.LaVerb = void 0;
8
8
  * A few new options to suppress certain rate forms were added.
9
9
  *
10
10
  * Original source: https://en.wiktionary.org/wiki/Module:la-verb
11
- * Based on version: https://en.wiktionary.org/w/index.php?title=Module:la-verb&oldid=63102127
11
+ * Based on version: https://en.wiktionary.org/w/index.php?title=Module:la-verb&oldid=67964189
12
12
  *
13
13
  * Lua idioms, function and variable names kept as in the original in order to easily
14
14
  * backport later changes to this implementation.
@@ -75,6 +75,7 @@ class LaVerb {
75
75
  "np",
76
76
  "highlydef",
77
77
  "sigm",
78
+ "sigmpasv",
78
79
  ]);
79
80
  this.conjugations = new Map();
80
81
  this.irreg_conjugations = new Map();
@@ -182,6 +183,7 @@ class LaVerb {
182
183
  this.override(data, args);
183
184
  this.set_linked_forms(data, typeinfo);
184
185
  this.add_prefix_suffix(data);
186
+ this.notes_override(data, args);
185
187
  return {
186
188
  templateType: "conjugation",
187
189
  info: typeinfo,
@@ -264,6 +266,70 @@ class LaVerb {
264
266
  }
265
267
  this.make_pres_3rd(data, typeinfo, typeinfo.pres_stem);
266
268
  this.make_perf_and_supine(data, typeinfo);
269
+ if (typeinfo.pres_stem.match(/nōsc/) && !this.options.suppressArchaic) {
270
+ const sub = (str, x, y) => {
271
+ return str.substring(x - 1, str.length + y + 1);
272
+ };
273
+ this.add_form(data, "2s_perf_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "stī", 2);
274
+ this.add_form(data, "1p_perf_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "mus", 2);
275
+ this.add_form(data, "2p_perf_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "stis", 2);
276
+ this.add_form(data, "3p_perf_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "runt", 3);
277
+ this.add_form(data, "1s_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "ram", 2);
278
+ this.add_form(data, "2s_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rās", 2);
279
+ this.add_form(data, "3s_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rat", 2);
280
+ this.add_form(data, "1p_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rāmus", 2);
281
+ this.add_form(data, "2p_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rātis", 2);
282
+ this.add_form(data, "3p_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rant", 2);
283
+ this.add_form(data, "1s_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rō", 2);
284
+ this.add_form(data, "2s_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "ris", 2);
285
+ this.add_form(data, "3s_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rit", 2);
286
+ this.add_form(data, "1p_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rimus", 2);
287
+ this.add_form(data, "2p_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "ritis", 2);
288
+ this.add_form(data, "3p_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rint", 2);
289
+ this.add_form(data, "1s_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rim", 2);
290
+ this.add_form(data, "2s_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rīs", 2);
291
+ this.add_form(data, "3s_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rit", 2);
292
+ this.add_form(data, "1p_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rīmus", 2);
293
+ this.add_form(data, "2p_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rītis", 2);
294
+ this.add_form(data, "3p_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rint", 2);
295
+ this.add_form(data, "1s_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "ssem", 2);
296
+ this.add_form(data, "2s_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "ssēs", 2);
297
+ this.add_form(data, "3s_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "sset", 2);
298
+ this.add_form(data, "1p_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "ssēmus", 2);
299
+ this.add_form(data, "2p_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "ssētis", 2);
300
+ this.add_form(data, "3p_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "ssent", 2);
301
+ this.add_form(data, "perf_actv_inf", "", sub(typeinfo.perf_stem[0], 1, -2) + "sse", 2);
302
+ const note = "The verb \"nōscō\" and its compounds frequently drop the syllables \"vi\" and \"ve\" from their perfect, pluperfect and future perfect conjugations.";
303
+ data.footnotes.set("2s_perf_actv_indc", [note]);
304
+ data.footnotes.set("1p_perf_actv_indc", [note]);
305
+ data.footnotes.set("2p_perf_actv_indc", [note]);
306
+ data.footnotes.set("3p_perf_actv_indc", [note]);
307
+ data.footnotes.set("1s_plup_actv_indc", [note]);
308
+ data.footnotes.set("2s_plup_actv_indc", [note]);
309
+ data.footnotes.set("3s_plup_actv_indc", [note]);
310
+ data.footnotes.set("1p_plup_actv_indc", [note]);
311
+ data.footnotes.set("2p_plup_actv_indc", [note]);
312
+ data.footnotes.set("3p_plup_actv_indc", [note]);
313
+ data.footnotes.set("1s_futp_actv_indc", [note]);
314
+ data.footnotes.set("2s_futp_actv_indc", [note]);
315
+ data.footnotes.set("3s_futp_actv_indc", [note]);
316
+ data.footnotes.set("1p_futp_actv_indc", [note]);
317
+ data.footnotes.set("2p_futp_actv_indc", [note]);
318
+ data.footnotes.set("3p_futp_actv_indc", [note]);
319
+ data.footnotes.set("1s_perf_actv_subj", [note]);
320
+ data.footnotes.set("2s_perf_actv_subj", [note]);
321
+ data.footnotes.set("3s_perf_actv_subj", [note]);
322
+ data.footnotes.set("1p_perf_actv_subj", [note]);
323
+ data.footnotes.set("2p_perf_actv_subj", [note]);
324
+ data.footnotes.set("3p_perf_actv_subj", [note]);
325
+ data.footnotes.set("1s_plup_actv_subj", [note]);
326
+ data.footnotes.set("2s_plup_actv_subj", [note]);
327
+ data.footnotes.set("3s_plup_actv_subj", [note]);
328
+ data.footnotes.set("1p_plup_actv_subj", [note]);
329
+ data.footnotes.set("2p_plup_actv_subj", [note]);
330
+ data.footnotes.set("3p_plup_actv_subj", [note]);
331
+ data.footnotes.set("perf_actv_inf", [note]);
332
+ }
267
333
  });
268
334
  this.conjugations.set("3rd-io", (args, data, typeinfo) => {
269
335
  this.get_regular_stems(args, typeinfo);
@@ -303,7 +369,6 @@ class LaVerb {
303
369
  this.make_pres_4th(data, typeinfo, typeinfo.pres_stem);
304
370
  this.make_perf_and_supine(data, typeinfo);
305
371
  if (!this.options.suppressPoet) {
306
- // guard added by @fpw
307
372
  if (this.form_contains((0, VerbForm_1.getVerbForm)(data.forms, "1s_pres_actv_indc"), "serviō") || this.form_contains((0, VerbForm_1.getVerbForm)(data.forms, "1s_pres_actv_indc"), "saeviō")) {
308
373
  this.add_forms(data, "impf_actv_indc", typeinfo.pres_stem, ["iēbam", "ībam"], ["iēbās", "ībās"], ["iēbat", "ībat"], ["iēbāmus", "ībāmus"], ["iēbātis", "ībātis"], ["iēbant", "ībant"]);
309
374
  this.add_forms(data, "futr_actv_indc", typeinfo.pres_stem, ["iam", "ībō"], ["iēs", "ībis"], ["iet", "ībit"], ["iēmus", "ībimus"], ["iētis", "ībitis"], ["ient", "ībunt"]);
@@ -492,6 +557,9 @@ class LaVerb {
492
557
  conj_arg = base_conj_arg;
493
558
  }
494
559
  }
560
+ if (orig_lemma.startsWith("-")) {
561
+ (0, VerbType_1.addVerbType)(subtypes, "suffix");
562
+ }
495
563
  let conjtype;
496
564
  let base = "";
497
565
  let auto_perf = "";
@@ -504,11 +572,21 @@ class LaVerb {
504
572
  ["ō", []],
505
573
  ["or", ["depon"]],
506
574
  ["at", ["impers"]],
507
- ["ātur", ["depon", "impers"]]
575
+ ["ātur", ["depon", "impers"]],
576
+ ["ī", ["perfaspres"]]
508
577
  ]));
509
578
  if (auto_perf_supine) {
510
- auto_perf = base + "āv";
511
- auto_supine = base + "āt";
579
+ if ((0, VerbType_1.hasVerbType)(subtypes, "perfaspres")) {
580
+ auto_perf = base;
581
+ }
582
+ else {
583
+ auto_perf = base + "āv";
584
+ auto_supine = base + "āt";
585
+ }
586
+ if ((0, VerbType_1.hasVerbType)(subtypes, "suffix")) {
587
+ (0, VerbType_1.addVerbType)(subtypes, "p3inf");
588
+ (0, VerbType_1.addVerbType)(subtypes, "sigmpasv");
589
+ }
512
590
  }
513
591
  }
514
592
  else if (conj_arg == "2") {
@@ -517,11 +595,20 @@ class LaVerb {
517
595
  ["eō", []],
518
596
  ["eor", ["depon"]],
519
597
  ["et", ["impers"]],
520
- ["ētur", ["depon", "impers"]]
598
+ ["ētur", ["depon", "impers"]],
599
+ ["ī", ["perfaspres"]]
521
600
  ]));
522
601
  if (auto_perf_supine) {
523
- auto_perf = base + "u";
524
- auto_supine = base + "it";
602
+ if ((0, VerbType_1.hasVerbType)(subtypes, "perfaspres")) {
603
+ auto_perf = base;
604
+ }
605
+ else {
606
+ auto_perf = base + "u";
607
+ auto_supine = base + "it";
608
+ }
609
+ }
610
+ if ((0, VerbType_1.hasVerbType)(subtypes, "suffix")) {
611
+ (0, VerbType_1.addVerbType)(subtypes, "sigmpasv");
525
612
  }
526
613
  }
527
614
  else if (conj_arg == "3") {
@@ -537,7 +624,8 @@ class LaVerb {
537
624
  ["ō", []],
538
625
  ["or", ["depon"]],
539
626
  ["it", ["impers"]],
540
- ["itur", ["depon", "impers"]]
627
+ ["itur", ["depon", "impers"]],
628
+ ["ī", ["perfaspres"]],
541
629
  ]));
542
630
  if ((0, VerbType_1.hasVerbType)(subtypes, "I")) {
543
631
  conjtype = "3rd-io";
@@ -546,6 +634,14 @@ class LaVerb {
546
634
  conjtype = "3rd";
547
635
  }
548
636
  }
637
+ if ((0, VerbType_1.hasVerbType)(subtypes, "perfaspres")) {
638
+ auto_perf = base;
639
+ }
640
+ if ((0, VerbType_1.hasVerbType)(subtypes, "suffix")) {
641
+ auto_perf = "-";
642
+ auto_supine = "-";
643
+ (0, VerbType_1.addVerbType)(subtypes, "sigmpasv");
644
+ }
549
645
  }
550
646
  else if (conj_arg == "4") {
551
647
  conjtype = "4th";
@@ -553,12 +649,13 @@ class LaVerb {
553
649
  ["iō", []],
554
650
  ["ior", ["depon"]],
555
651
  ["it", ["impers"]],
556
- ["ītur", ["depon", "impers"]]
652
+ ["ītur", ["depon", "impers"]],
653
+ ["ī", ["perfaspres"]]
557
654
  ]));
558
- if (auto_perf_supine == "++" && this.options.suppressIPerfect) {
559
- auto_perf_supine = "+";
655
+ if ((0, VerbType_1.hasVerbType)(subtypes, "perfaspres")) {
656
+ auto_perf = base;
560
657
  }
561
- if (auto_perf_supine == "++") {
658
+ else if (auto_perf_supine == "++") {
562
659
  auto_perf = base + "īv/" + base + "i";
563
660
  auto_supine = base + "īt";
564
661
  }
@@ -566,6 +663,9 @@ class LaVerb {
566
663
  auto_perf = base + "īv";
567
664
  auto_supine = base + "īt";
568
665
  }
666
+ if ((0, VerbType_1.hasVerbType)(subtypes, "suffix")) {
667
+ (0, VerbType_1.addVerbType)(subtypes, "sigm");
668
+ }
569
669
  }
570
670
  else if (conj_arg == "irreg") {
571
671
  let prefix;
@@ -617,13 +717,15 @@ class LaVerb {
617
717
  args.set("1", base);
618
718
  let perf_stem = "";
619
719
  let supine_stem = "";
620
- if ((0, VerbType_1.hasVerbType)(subtypes, "depon") || (0, VerbType_1.hasVerbType)(subtypes, "semidepon")) {
720
+ if ((0, VerbType_1.hasVerbType)(subtypes, "depon") || (0, VerbType_1.hasVerbType)(subtypes, "semidepon") || (0, VerbType_1.hasVerbType)(subtypes, "perfaspres")) {
621
721
  supine_stem = args.get("3") || auto_supine;
622
- if (supine_stem == "-") {
722
+ if (supine_stem == "-" && !(0, VerbType_1.hasVerbType)(subtypes, "suffix")) {
623
723
  supine_stem = "";
624
724
  }
625
725
  if (!supine_stem) {
626
- (0, VerbType_1.addVerbType)(subtypes, "noperf");
726
+ if ((0, VerbType_1.hasVerbType)(subtypes, "depon") || (0, VerbType_1.hasVerbType)(subtypes, "semidepon")) {
727
+ (0, VerbType_1.addVerbType)(subtypes, "noperf");
728
+ }
627
729
  (0, VerbType_1.addVerbType)(subtypes, "nosup");
628
730
  }
629
731
  args.set("2", supine_stem);
@@ -631,14 +733,14 @@ class LaVerb {
631
733
  }
632
734
  else {
633
735
  perf_stem = args.get("3") || auto_perf;
634
- if (perf_stem == "-") {
736
+ if (perf_stem == "-" && !(0, VerbType_1.hasVerbType)(subtypes, "suffix")) {
635
737
  perf_stem = "";
636
738
  }
637
739
  if (!perf_stem) {
638
740
  (0, VerbType_1.addVerbType)(subtypes, "noperf");
639
741
  }
640
742
  supine_stem = args.get("4") || auto_supine;
641
- if (supine_stem == "-") {
743
+ if (supine_stem == "-" && !(0, VerbType_1.hasVerbType)(subtypes, "suffix")) {
642
744
  supine_stem = "";
643
745
  }
644
746
  if (!supine_stem) {
@@ -657,7 +759,7 @@ class LaVerb {
657
759
  }
658
760
  for (const subtype of subtypes) {
659
761
  if (!this.allowed_subtypes.has(subtype)) {
660
- if (!(conjtype == "3rd" && subtype == "-I") && !(conjtype == "3rd-io" && subtype == "I")) {
762
+ if (!(conjtype == "3rd" && subtype == "-I") && !(conjtype == "3rd-io" && subtype == "I") && !(subtype == "suffix")) {
661
763
  throw Error(`Unrecognized verb subtype: ${subtype}`);
662
764
  }
663
765
  }
@@ -705,16 +807,22 @@ class LaVerb {
705
807
  supine_stem = this.ine(args.get("2"));
706
808
  perf_stem = this.ine(args.get("3")); // added by @fpw for reverti
707
809
  }
810
+ else if ((0, VerbType_1.hasVerbType)(typeinfo.subtypes, "perfaspres")) {
811
+ perf_stem = this.ine(args.get("1"));
812
+ supine_stem = this.ine(args.get("2"));
813
+ }
708
814
  else {
709
815
  pres_stem = this.ine(args.get("1"));
710
816
  perf_stem = this.ine(args.get("2"));
711
817
  supine_stem = this.ine(args.get("3"));
712
818
  }
713
- if ((0, VerbType_1.hasVerbType)(typeinfo.subtypes, "perfaspres") && !pres_stem) {
714
- pres_stem = "whatever";
715
- }
716
819
  if (!pres_stem) {
717
- throw Error("Present stem has not been provided");
820
+ if ((0, VerbType_1.hasVerbType)(typeinfo.subtypes, "perfaspres")) {
821
+ pres_stem = "-";
822
+ }
823
+ else {
824
+ throw Error("No present stem");
825
+ }
718
826
  }
719
827
  typeinfo.pres_stem = pres_stem;
720
828
  if (perf_stem) {
@@ -1113,7 +1221,7 @@ class LaVerb {
1113
1221
  endingMap.set("dat", endings.dat);
1114
1222
  endingMap.set("acc", endings.acc);
1115
1223
  endingMap.set("abl", endings.abl);
1116
- if (base.match(/[uv]end$/)) {
1224
+ if (base.match(/[uv]end$/) || (0, VerbType_1.hasVerbType)(typeinfo.subtypes, "nound")) {
1117
1225
  und_variant = false;
1118
1226
  }
1119
1227
  if (this.options.suppressUndVariants) {
@@ -1254,6 +1362,7 @@ class LaVerb {
1254
1362
  if ((0, VerbType_1.hasVerbType)(typeinfo.subtypes, "perfaspres")) {
1255
1363
  this.insert_if_not(data.categories, "Latin defective verbs");
1256
1364
  this.insert_if_not(data.categories, "Latin active-only verbs");
1365
+ this.insert_if_not(data.categories, "Latin verbs with missing present stem");
1257
1366
  this.insert_if_not(data.categories, "Latin verbs with perfect forms having imperfective meanings");
1258
1367
  (0, VerbForm_1.setVerbForm)(data.forms, "perf_actv_ptc", (0, VerbForm_1.getVerbForm)(data.forms, "perf_pasv_ptc") || []);
1259
1368
  (0, VerbForm_1.setVerbForm)(data.forms, "pres_actv_inf", (0, VerbForm_1.getVerbForm)(data.forms, "perf_actv_inf") || []);
@@ -1422,13 +1531,40 @@ class LaVerb {
1422
1531
  newvals.push(fv.replace(/^(.*).$/, "$1" + "ier"));
1423
1532
  }
1424
1533
  (0, VerbForm_1.setVerbForm)(data.forms, form, newvals);
1425
- data.footnotes.set(form, ["The present passive infinitive in -ier is a rare poetic form which is attested for this verb."]);
1534
+ data.footnotes.set(form, ["The present passive infinitive in -ier is a rare poetic form which is attested."]);
1426
1535
  }
1427
1536
  if ((0, VerbType_1.hasVerbType)(typeinfo.subtypes, "poetsyncperf") && !this.options.suppressPoet) {
1428
1537
  const sss = [
1538
+ // infinitive
1429
1539
  ["perf_actv_inf", "sse"],
1540
+ // perfect actives
1430
1541
  ["2s_perf_actv_indc", "stī"],
1542
+ ["3s_perf_actv_indc", "t"],
1543
+ ["1p_perf_actv_indc", "mus"],
1431
1544
  ["2p_perf_actv_indc", "stis"],
1545
+ ["3p_perf_actv_indc", "runt"],
1546
+ // pluperfect actives
1547
+ ["1s_plup_actv_indc", "ram"],
1548
+ ["2s_plup_actv_indc", "rās"],
1549
+ ["3s_plup_actv_indc", "rat"],
1550
+ ["1p_plup_actv_indc", "rāmus"],
1551
+ ["2p_plup_actv_indc", "rātis"],
1552
+ ["3p_plup_actv_indc", "rant"],
1553
+ // future perfect actives
1554
+ ["1s_futp_actv_indc", "rō"],
1555
+ ["2s_futp_actv_indc", "ris"],
1556
+ ["3s_futp_actv_indc", "rit"],
1557
+ ["1p_futp_actv_indc", "rimus"],
1558
+ ["2p_futp_actv_indc", "ritis"],
1559
+ ["3p_futp_actv_indc", "rint"],
1560
+ // perfect subjunctives
1561
+ ["1s_perf_actv_subj", "rim"],
1562
+ ["2s_perf_actv_subj", "rīs"],
1563
+ ["3s_perf_actv_subj", "rit"],
1564
+ ["1p_perf_actv_subj", "rīmus"],
1565
+ ["2p_perf_actv_subj", "rītis"],
1566
+ ["3p_perf_actv_subj", "rint"],
1567
+ // pluperfect subjunctive
1432
1568
  ["1s_plup_actv_subj", "ssem"],
1433
1569
  ["2s_plup_actv_subj", "ssēs"],
1434
1570
  ["3s_plup_actv_subj", "sset"],
@@ -1439,10 +1575,12 @@ class LaVerb {
1439
1575
  const add_sync_perf = (form, suff_sync) => {
1440
1576
  const formval = (0, VerbForm_1.getVerbForm)(data.forms, form) || [];
1441
1577
  for (const fv of formval) {
1442
- const regex1 = new RegExp(`vi${suff_sync}$`);
1443
- const regex2 = new RegExp(`[aeiouyāēīōūȳăĕĭŏŭ]ui${suff_sync}$`);
1444
- if (fv.match(regex1) || fv.match(regex2)) {
1445
- const rep = fv.substr(0, fv.length - suff_sync.length - 2) + suff_sync;
1578
+ const regex1 = new RegExp(`v[ieē]${suff_sync}$`);
1579
+ const regex2 = new RegExp(`vē${suff_sync}$`);
1580
+ const regex3 = new RegExp(`[aeiouyāēīōūȳăĕĭŏŭ]u[ieē]${suff_sync}$`);
1581
+ const regex4 = new RegExp(`[aeiouyāēīōūȳăĕĭŏŭ]uē${suff_sync}$`);
1582
+ if (fv.match(regex1) || fv.match(regex2) || fv.match(regex3) || fv.match(regex4)) {
1583
+ const rep = fv.substring(0, fv.length - suff_sync.length - 2) + suff_sync;
1446
1584
  this.insert_if_not(formval, rep);
1447
1585
  }
1448
1586
  }
@@ -1482,12 +1620,13 @@ class LaVerb {
1482
1620
  return allEmpty;
1483
1621
  }
1484
1622
  make_perfect_passive(data) {
1485
- const ppp = (0, VerbForm_1.getVerbForm)(data.forms, "perf_pasv_ptc") || [];
1623
+ var _a;
1624
+ let ppp = (0, VerbForm_1.getVerbForm)(data.forms, "perf_pasv_ptc") || [];
1486
1625
  const ppplinks = [];
1487
1626
  for (const pppform of ppp) {
1488
1627
  ppplinks.push(`[[${pppform}]]`);
1489
1628
  }
1490
- const ppplink = ppplinks.join(" or ");
1629
+ let ppplink = ppplinks.join(" or ");
1491
1630
  const sumlink = "[[sum]]";
1492
1631
  const text_for_slot = new Map([
1493
1632
  ["perf_pasv_indc", "present active indicative"],
@@ -1515,6 +1654,14 @@ class LaVerb {
1515
1654
  (passiveSuffix || "");
1516
1655
  (0, VerbForm_1.setVerbForm)(data.forms, slot, [entry]);
1517
1656
  }
1657
+ ppp = (0, VerbForm_1.getVerbForm)(data.forms, "1s_pres_actv_indc");
1658
+ if (ppp && ppp[0] == "faciō") {
1659
+ ppplink = "[[factum]]";
1660
+ for (const [slot, text] of text_for_slot) {
1661
+ const ts = (_a = (0, VerbForm_1.getVerbForm)(data.forms, slot)) !== null && _a !== void 0 ? _a : [];
1662
+ (0, VerbForm_1.setVerbForm)(data.forms, slot, [ts[0] + " or " + ppplink + " + " + text + " of " + sumlink]);
1663
+ }
1664
+ }
1518
1665
  }
1519
1666
  override(data, args) {
1520
1667
  for (const slot of this.iter_slots(true, false)) {
@@ -1590,6 +1737,13 @@ class LaVerb {
1590
1737
  }
1591
1738
  }
1592
1739
  }
1740
+ notes_override(data, args) {
1741
+ if (args.get("notes") == "-") {
1742
+ for (const key of data.footnotes.keys()) {
1743
+ data.footnotes.set(key, [""]);
1744
+ }
1745
+ }
1746
+ }
1593
1747
  set_linked_forms(data, typeinfo) {
1594
1748
  for (const slot of LaVerb.potential_lemma_slots) {
1595
1749
  const linked_forms = [];
@@ -1697,6 +1851,16 @@ class LaVerb {
1697
1851
  this.make_perf(data, [prefix + "dīx"]);
1698
1852
  this.make_supine(data, typeinfo, [prefix + "dict"]);
1699
1853
  this.add_form(data, "2s_pres_actv_impr", prefix, "dīc", 1);
1854
+ if (!this.options.suppressArchaic) {
1855
+ this.add_form(data, "2s_pres_actv_impr", prefix, "dīc", 1);
1856
+ data.footnotes.set("2s_pres_actv_impr", ["Archaic."]);
1857
+ if (prefix == "") {
1858
+ this.add_form(data, "1s_futr_actv_indc", prefix, "dīcēbō", 2);
1859
+ this.add_form(data, "3s_futr_actv_indc", prefix, "dīcēbit", 2);
1860
+ data.footnotes.set("1s_futr_actv_indc", ["Archaic."]);
1861
+ data.footnotes.set("3s_futr_actv_indc", ["Archaic."]);
1862
+ }
1863
+ }
1700
1864
  });
1701
1865
  this.irreg_conjugations.set("do", (args, data, typeinfo) => {
1702
1866
  data.categories.push("Latin first conjugation verbs");
@@ -1832,7 +1996,7 @@ class LaVerb {
1832
1996
  prefix_supine = prefix_supine || prefix_pres;
1833
1997
  this.make_pres_3rd(data, typeinfo, prefix_pres + "fer");
1834
1998
  if (!prefix_perf) {
1835
- if (this.options.suppressPoet) {
1999
+ if (this.options.suppressArchaic) {
1836
2000
  // added by @fpw
1837
2001
  this.make_perf(data, ["tul"]);
1838
2002
  }
@@ -1998,6 +2162,7 @@ class LaVerb {
1998
2162
  });
1999
2163
  this.irreg_conjugations.set("coepi", (args, data, typeinfo) => {
2000
2164
  data.categories.push("Latin third conjugation verbs");
2165
+ data.categories.push("Latin verbs with missing present stem");
2001
2166
  data.categories.push("Latin defective verbs");
2002
2167
  const prefix = typeinfo.prefix;
2003
2168
  this.make_perf(data, [prefix + "coep"]);
@@ -2039,6 +2204,10 @@ class LaVerb {
2039
2204
  (0, VerbForm_1.setVerbForm)(data.forms, "1p_pres_actv_subj", [prefix_s + "sīmus"]);
2040
2205
  (0, VerbForm_1.setVerbForm)(data.forms, "2p_pres_actv_subj", [prefix_s + "sītis"]);
2041
2206
  (0, VerbForm_1.setVerbForm)(data.forms, "3p_pres_actv_subj", [prefix_s + "sint"]);
2207
+ if (prefix_s == "ad" && !this.options.suppressArchaic) {
2208
+ this.add_form(data, "3p_pres_actv_subj", "", "adessint", 2);
2209
+ data.footnotes.set("3p_pres_actv_subj", ["Archaic."]);
2210
+ }
2042
2211
  (0, VerbForm_1.setVerbForm)(data.forms, "1s_impf_actv_subj", [prefix_e + "essem", prefix_f + "forem"]);
2043
2212
  (0, VerbForm_1.setVerbForm)(data.forms, "2s_impf_actv_subj", [prefix_e + "essēs", prefix_f + "forēs"]);
2044
2213
  (0, VerbForm_1.setVerbForm)(data.forms, "3s_impf_actv_subj", [prefix_e + "esset", prefix_f + "foret"]);