@fpw/en-wiktionary-la-modules 0.0.16 → 0.1.3

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 (37) hide show
  1. package/dist/LaEngine.d.ts +7 -8
  2. package/dist/LaEngine.js +1 -1
  3. package/dist/LaEngine.js.map +1 -1
  4. package/dist/modules/conjugation/LaVerb.d.ts +5 -3
  5. package/dist/modules/conjugation/LaVerb.js +207 -31
  6. package/dist/modules/conjugation/LaVerb.js.map +1 -1
  7. package/dist/modules/conjugation/VerbType.d.ts +5 -1
  8. package/dist/modules/conjugation/VerbType.js +4 -0
  9. package/dist/modules/conjugation/VerbType.js.map +1 -1
  10. package/dist/modules/declination/LaAdjData.d.ts +1 -1
  11. package/dist/modules/declination/LaAdjData.js +45 -24
  12. package/dist/modules/declination/LaAdjData.js.map +1 -1
  13. package/dist/modules/declination/LaNominal.d.ts +6 -3
  14. package/dist/modules/declination/LaNominal.js +190 -168
  15. package/dist/modules/declination/LaNominal.js.map +1 -1
  16. package/dist/modules/declination/LaNounData.js +65 -64
  17. package/dist/modules/declination/LaNounData.js.map +1 -1
  18. package/dist/modules/declination/LaPersonalPronoun.d.ts +7 -29
  19. package/dist/modules/declination/LaPersonalPronoun.js +73 -56
  20. package/dist/modules/declination/LaPersonalPronoun.js.map +1 -1
  21. package/dist/modules/declination/NominalType.d.ts +116 -0
  22. package/dist/modules/declination/NominalType.js +142 -0
  23. package/dist/modules/declination/NominalType.js.map +1 -0
  24. package/dist/modules/headword/HeadWord.d.ts +3 -3
  25. package/dist/modules/headword/HeadwordParser.d.ts +2 -2
  26. package/dist/modules/headword/HeadwordParser.js.map +1 -1
  27. package/package.json +8 -9
  28. package/src/LaEngine.ts +8 -9
  29. package/src/modules/conjugation/LaVerb.ts +213 -36
  30. package/src/modules/conjugation/VerbType.ts +4 -0
  31. package/src/modules/declination/LaAdjData.ts +47 -24
  32. package/src/modules/declination/LaNominal.ts +216 -184
  33. package/src/modules/declination/LaNounData.ts +67 -66
  34. package/src/modules/declination/LaPersonalPronoun.ts +76 -63
  35. package/src/modules/declination/NominalType.ts +153 -0
  36. package/src/modules/headword/HeadWord.ts +3 -3
  37. package/src/modules/headword/HeadwordParser.ts +18 -18
@@ -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.
@@ -43,9 +43,12 @@ export interface ConjOptions {
43
43
 
44
44
  // use short i in perfect infinitive of īre (iisse vs īsse)
45
45
  ireWithShortPerfInf?: boolean;
46
+
47
+ // make ēsse the infinitive of edō instead of edere
48
+ reorderEdere?: boolean;
46
49
  }
47
50
 
48
- export interface Conjugation {
51
+ export interface VerbData {
49
52
  templateType: "conjugation";
50
53
 
51
54
  info: ConjugationInfo;
@@ -132,6 +135,7 @@ export class LaVerb {
132
135
  "np",
133
136
  "highlydef",
134
137
  "sigm",
138
+ "sigmpasv",
135
139
  ]);
136
140
 
137
141
  private static potential_lemma_slots = [
@@ -151,7 +155,7 @@ export class LaVerb {
151
155
  this.setup_conjs();
152
156
  }
153
157
 
154
- public make_data(args: ArgMap): Conjugation {
158
+ public make_data(args: ArgMap): VerbData {
155
159
  for (const slot of this.iter_slots(true, false)) {
156
160
  if (!args.has(slot)) {
157
161
  args.set(slot, "");
@@ -261,6 +265,7 @@ export class LaVerb {
261
265
  this.override(data, args);
262
266
  this.set_linked_forms(data, typeinfo);
263
267
  this.add_prefix_suffix(data);
268
+ this.notes_override(data, args);
264
269
 
265
270
  return {
266
271
  templateType: "conjugation",
@@ -346,6 +351,72 @@ export class LaVerb {
346
351
  }
347
352
  this.make_pres_3rd(data, typeinfo, typeinfo.pres_stem);
348
353
  this.make_perf_and_supine(data, typeinfo);
354
+
355
+ if (typeinfo.pres_stem.match(/nōsc/)) {
356
+ const sub = (str: string, x: number, y: number) => {
357
+ return str.substring(x - 1, str.length + y + 1);
358
+ };
359
+ this.add_form(data, "2s_perf_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "stī", 2);
360
+ this.add_form(data, "1p_perf_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "mus", 2);
361
+ this.add_form(data, "2p_perf_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "stis", 2);
362
+ this.add_form(data, "3p_perf_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "runt", 3);
363
+ this.add_form(data, "1s_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "ram", 2);
364
+ this.add_form(data, "2s_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rās", 2);
365
+ this.add_form(data, "3s_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rat", 2);
366
+ this.add_form(data, "1p_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rāmus", 2);
367
+ this.add_form(data, "2p_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rātis", 2);
368
+ this.add_form(data, "3p_plup_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rant", 2);
369
+ this.add_form(data, "1s_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rō", 2);
370
+ this.add_form(data, "2s_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "ris", 2);
371
+ this.add_form(data, "3s_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rit", 2);
372
+ this.add_form(data, "1p_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rimus", 2);
373
+ this.add_form(data, "2p_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "ritis", 2);
374
+ this.add_form(data, "3p_futp_actv_indc", "", sub(typeinfo.perf_stem[0], 1, -2) + "rint", 2);
375
+ this.add_form(data, "1s_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rim", 2);
376
+ this.add_form(data, "2s_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rīs", 2);
377
+ this.add_form(data, "3s_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rit", 2);
378
+ this.add_form(data, "1p_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rīmus", 2);
379
+ this.add_form(data, "2p_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rītis", 2);
380
+ this.add_form(data, "3p_perf_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "rint", 2);
381
+ this.add_form(data, "1s_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "ssem", 2);
382
+ this.add_form(data, "2s_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "ssēs", 2);
383
+ this.add_form(data, "3s_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "sset", 2);
384
+ this.add_form(data, "1p_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "ssēmus", 2);
385
+ this.add_form(data, "2p_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "ssētis", 2);
386
+ this.add_form(data, "3p_plup_actv_subj", "", sub(typeinfo.perf_stem[0], 1, -2) + "ssent", 2);
387
+ this.add_form(data, "perf_actv_inf", "", sub(typeinfo.perf_stem[0], 1, -2) + "sse", 2);
388
+
389
+ const note = "The verb \"nōscō\" and its compounds frequently drop the syllables \"vi\" and \"ve\" from their perfect, pluperfect and future perfect conjugations.";
390
+ data.footnotes.set("2s_perf_actv_indc", [note]);
391
+ data.footnotes.set("1p_perf_actv_indc", [note]);
392
+ data.footnotes.set("2p_perf_actv_indc", [note]);
393
+ data.footnotes.set("3p_perf_actv_indc", [note]);
394
+ data.footnotes.set("1s_plup_actv_indc", [note]);
395
+ data.footnotes.set("2s_plup_actv_indc", [note]);
396
+ data.footnotes.set("3s_plup_actv_indc", [note]);
397
+ data.footnotes.set("1p_plup_actv_indc", [note]);
398
+ data.footnotes.set("2p_plup_actv_indc", [note]);
399
+ data.footnotes.set("3p_plup_actv_indc", [note]);
400
+ data.footnotes.set("1s_futp_actv_indc", [note]);
401
+ data.footnotes.set("2s_futp_actv_indc", [note]);
402
+ data.footnotes.set("3s_futp_actv_indc", [note]);
403
+ data.footnotes.set("1p_futp_actv_indc", [note]);
404
+ data.footnotes.set("2p_futp_actv_indc", [note]);
405
+ data.footnotes.set("3p_futp_actv_indc", [note]);
406
+ data.footnotes.set("1s_perf_actv_subj", [note]);
407
+ data.footnotes.set("2s_perf_actv_subj", [note]);
408
+ data.footnotes.set("3s_perf_actv_subj", [note]);
409
+ data.footnotes.set("1p_perf_actv_subj", [note]);
410
+ data.footnotes.set("2p_perf_actv_subj", [note]);
411
+ data.footnotes.set("3p_perf_actv_subj", [note]);
412
+ data.footnotes.set("1s_plup_actv_subj", [note]);
413
+ data.footnotes.set("2s_plup_actv_subj", [note]);
414
+ data.footnotes.set("3s_plup_actv_subj", [note]);
415
+ data.footnotes.set("1p_plup_actv_subj", [note]);
416
+ data.footnotes.set("2p_plup_actv_subj", [note]);
417
+ data.footnotes.set("3p_plup_actv_subj", [note]);
418
+ data.footnotes.set("perf_actv_inf", [note]);
419
+ }
349
420
  });
350
421
 
351
422
  this.conjugations.set("3rd-io", (args: ArgMap, data: ConjugationData, typeinfo: ConjugationInfo) => {
@@ -602,6 +673,10 @@ export class LaVerb {
602
673
  }
603
674
  }
604
675
 
676
+ if (orig_lemma.startsWith("-")) {
677
+ addVerbType(subtypes, "suffix");
678
+ }
679
+
605
680
  let conjtype: ConjType;
606
681
  let base = "";
607
682
  let auto_perf = "";
@@ -614,11 +689,20 @@ export class LaVerb {
614
689
  ["ō", []],
615
690
  ["or", ["depon"]],
616
691
  ["at", ["impers"]],
617
- ["ātur", ["depon", "impers"]]
692
+ ["ātur", ["depon", "impers"]],
693
+ ["ī", ["perfaspres"]]
618
694
  ]));
619
695
  if (auto_perf_supine) {
620
- auto_perf = base + "āv";
621
- auto_supine = base + "āt";
696
+ if (hasVerbType(subtypes, "perfaspres")) {
697
+ auto_perf = base;
698
+ } else {
699
+ auto_perf = base + "āv";
700
+ auto_supine = base + "āt";
701
+ }
702
+ if (hasVerbType(subtypes, "suffix")) {
703
+ addVerbType(subtypes, "p3inf");
704
+ addVerbType(subtypes, "sigmpasv");
705
+ }
622
706
  }
623
707
  } else if (conj_arg == "2") {
624
708
  conjtype = "2nd";
@@ -626,11 +710,19 @@ export class LaVerb {
626
710
  ["eō", []],
627
711
  ["eor", ["depon"]],
628
712
  ["et", ["impers"]],
629
- ["ētur", ["depon", "impers"]]
713
+ ["ētur", ["depon", "impers"]],
714
+ ["ī", ["perfaspres"]]
630
715
  ]));
631
716
  if (auto_perf_supine) {
632
- auto_perf = base + "u";
633
- auto_supine = base + "it";
717
+ if (hasVerbType(subtypes, "perfaspres")) {
718
+ auto_perf = base;
719
+ } else {
720
+ auto_perf = base + "u";
721
+ auto_supine = base + "it";
722
+ }
723
+ }
724
+ if (hasVerbType(subtypes, "suffix")) {
725
+ addVerbType(subtypes, "sigmpasv");
634
726
  }
635
727
  } else if (conj_arg == "3") {
636
728
  [base, detected_subtypes] = this.get_subtype_by_ending(lemma, "", subtypes, new Map([
@@ -644,7 +736,8 @@ export class LaVerb {
644
736
  ["ō", []],
645
737
  ["or", ["depon"]],
646
738
  ["it", ["impers"]],
647
- ["itur", ["depon", "impers"]]
739
+ ["itur", ["depon", "impers"]],
740
+ ["ī", ["perfaspres"]],
648
741
  ]));
649
742
  if (hasVerbType(subtypes, "I")) {
650
743
  conjtype = "3rd-io";
@@ -652,26 +745,36 @@ export class LaVerb {
652
745
  conjtype = "3rd";
653
746
  }
654
747
  }
748
+ if (hasVerbType(subtypes, "perfaspres")) {
749
+ auto_perf = base;
750
+ }
751
+ if (hasVerbType(subtypes, "suffix")) {
752
+ auto_perf = "-";
753
+ auto_supine = "-";
754
+ addVerbType(subtypes, "sigmpasv");
755
+ }
655
756
  } else if (conj_arg == "4") {
656
757
  conjtype = "4th";
657
758
  [base, detected_subtypes] = this.get_subtype_by_ending(lemma, "4", subtypes, new Map([
658
759
  ["iō", []],
659
760
  ["ior", ["depon"]],
660
761
  ["it", ["impers"]],
661
- ["ītur", ["depon", "impers"]]
762
+ ["ītur", ["depon", "impers"]],
763
+ ["ī", ["perfaspres"]]
662
764
  ]));
663
765
 
664
- if (auto_perf_supine == "++" && this.options.suppressIPerfect) {
665
- auto_perf_supine = "+";
666
- }
667
-
668
- if (auto_perf_supine == "++") {
766
+ if (hasVerbType(subtypes, "perfaspres")) {
767
+ auto_perf = base;
768
+ } else if (auto_perf_supine == "++") {
669
769
  auto_perf = base + "īv/" + base + "i";
670
770
  auto_supine = base + "īt";
671
771
  } else if (auto_perf_supine == "+") {
672
772
  auto_perf = base + "īv";
673
773
  auto_supine = base + "īt";
674
774
  }
775
+ if (hasVerbType(subtypes, "suffix")) {
776
+ addVerbType(subtypes, "sigm");
777
+ }
675
778
  } else if (conj_arg == "irreg") {
676
779
  let prefix: string;
677
780
  conjtype = "irreg";
@@ -722,27 +825,29 @@ export class LaVerb {
722
825
  args.set("1", base);
723
826
  let perf_stem = "";
724
827
  let supine_stem = "";
725
- if (hasVerbType(subtypes, "depon") || hasVerbType(subtypes, "semidepon")) {
828
+ if (hasVerbType(subtypes, "depon") || hasVerbType(subtypes, "semidepon") || hasVerbType(subtypes, "perfaspres")) {
726
829
  supine_stem = args.get("3") || auto_supine;
727
- if (supine_stem == "-") {
830
+ if (supine_stem == "-" && !hasVerbType(subtypes, "suffix")) {
728
831
  supine_stem = "";
729
832
  }
730
833
  if (!supine_stem) {
731
- addVerbType(subtypes, "noperf");
834
+ if (hasVerbType(subtypes, "depon") || hasVerbType(subtypes, "semidepon")) {
835
+ addVerbType(subtypes, "noperf");
836
+ }
732
837
  addVerbType(subtypes, "nosup");
733
838
  }
734
839
  args.set("2", supine_stem);
735
840
  args.delete("3");
736
841
  } else {
737
842
  perf_stem = args.get("3") || auto_perf;
738
- if (perf_stem == "-") {
843
+ if (perf_stem == "-" && !hasVerbType(subtypes, "suffix")) {
739
844
  perf_stem = "";
740
845
  }
741
846
  if (!perf_stem) {
742
847
  addVerbType(subtypes, "noperf");
743
848
  }
744
849
  supine_stem = args.get("4") || auto_supine;
745
- if (supine_stem == "-") {
850
+ if (supine_stem == "-" && !hasVerbType(subtypes, "suffix")) {
746
851
  supine_stem = "";
747
852
  }
748
853
  if (!supine_stem) {
@@ -763,7 +868,7 @@ export class LaVerb {
763
868
 
764
869
  for (const subtype of subtypes) {
765
870
  if (!this.allowed_subtypes.has(subtype)) {
766
- if (!(conjtype == "3rd" && subtype == "-I") && !(conjtype == "3rd-io" && subtype == "I")) {
871
+ if (!(conjtype == "3rd" && subtype == "-I") && !(conjtype == "3rd-io" && subtype == "I") && !(subtype == "suffix")) {
767
872
  throw Error(`Unrecognized verb subtype: ${subtype}`);
768
873
  }
769
874
  }
@@ -815,18 +920,21 @@ export class LaVerb {
815
920
  pres_stem = this.ine(args.get("1"));
816
921
  supine_stem = this.ine(args.get("2"));
817
922
  perf_stem = this.ine(args.get("3")); // added by @fpw for reverti
923
+ } else if (hasVerbType(typeinfo.subtypes, "perfaspres")) {
924
+ perf_stem = this.ine(args.get("1"));
925
+ supine_stem = this.ine(args.get("2"));
818
926
  } else {
819
927
  pres_stem = this.ine(args.get("1"));
820
928
  perf_stem = this.ine(args.get("2"));
821
929
  supine_stem = this.ine(args.get("3"));
822
930
  }
823
931
 
824
- if (hasVerbType(typeinfo.subtypes, "perfaspres") && !pres_stem) {
825
- pres_stem = "whatever";
826
- }
827
-
828
932
  if (!pres_stem) {
829
- throw Error("Present stem has not been provided");
933
+ if (hasVerbType(typeinfo.subtypes, "perfaspres")) {
934
+ pres_stem = "-";
935
+ } else {
936
+ throw Error("No present stem");
937
+ }
830
938
  }
831
939
 
832
940
  typeinfo.pres_stem = pres_stem;
@@ -1291,7 +1399,7 @@ export class LaVerb {
1291
1399
  endingMap.set("acc", endings.acc);
1292
1400
  endingMap.set("abl", endings.abl);
1293
1401
 
1294
- if (base.match(/[uv]end$/)) {
1402
+ if (base.match(/[uv]end$/) || hasVerbType(typeinfo.subtypes, "nound")) {
1295
1403
  und_variant = false;
1296
1404
  }
1297
1405
 
@@ -1437,6 +1545,7 @@ export class LaVerb {
1437
1545
  if (hasVerbType(typeinfo.subtypes, "perfaspres")) {
1438
1546
  this.insert_if_not(data.categories, "Latin defective verbs");
1439
1547
  this.insert_if_not(data.categories, "Latin active-only verbs");
1548
+ this.insert_if_not(data.categories, "Latin verbs with missing present stem");
1440
1549
  this.insert_if_not(data.categories, "Latin verbs with perfect forms having imperfective meanings");
1441
1550
 
1442
1551
  setVerbForm(data.forms, "perf_actv_ptc", getVerbForm(data.forms, "perf_pasv_ptc") || []);
@@ -1622,14 +1731,41 @@ export class LaVerb {
1622
1731
  newvals.push(fv.replace(/^(.*).$/, "$1" + "ier"));
1623
1732
  }
1624
1733
  setVerbForm(data.forms, form, newvals);
1625
- data.footnotes.set(form, ["The present passive infinitive in -ier is a rare poetic form which is attested for this verb."]);
1734
+ data.footnotes.set(form, ["The present passive infinitive in -ier is a rare poetic form which is attested."]);
1626
1735
  }
1627
1736
 
1628
1737
  if (hasVerbType(typeinfo.subtypes, "poetsyncperf") && !this.options.suppressPoet) {
1629
1738
  const sss: [string, string][] = [
1739
+ // infinitive
1630
1740
  ["perf_actv_inf", "sse"],
1741
+ // perfect actives
1631
1742
  ["2s_perf_actv_indc", "stī"],
1743
+ ["3s_perf_actv_indc", "t"],
1744
+ ["1p_perf_actv_indc", "mus"],
1632
1745
  ["2p_perf_actv_indc", "stis"],
1746
+ ["3p_perf_actv_indc", "runt"],
1747
+ // pluperfect actives
1748
+ ["1s_plup_actv_indc", "ram"],
1749
+ ["2s_plup_actv_indc", "rās"],
1750
+ ["3s_plup_actv_indc", "rat"],
1751
+ ["1p_plup_actv_indc", "rāmus"],
1752
+ ["2p_plup_actv_indc", "rātis"],
1753
+ ["3p_plup_actv_indc", "rant"],
1754
+ // future perfect actives
1755
+ ["1s_futp_actv_indc", "rō"],
1756
+ ["2s_futp_actv_indc", "ris"],
1757
+ ["3s_futp_actv_indc", "rit"],
1758
+ ["1p_futp_actv_indc", "rimus"],
1759
+ ["2p_futp_actv_indc", "ritis"],
1760
+ ["3p_futp_actv_indc", "rint"],
1761
+ // perfect subjunctives
1762
+ ["1s_perf_actv_subj", "rim"],
1763
+ ["2s_perf_actv_subj", "rīs"],
1764
+ ["3s_perf_actv_subj", "rit"],
1765
+ ["1p_perf_actv_subj", "rīmus"],
1766
+ ["2p_perf_actv_subj", "rītis"],
1767
+ ["3p_perf_actv_subj", "rint"],
1768
+ // pluperfect subjunctive
1633
1769
  ["1s_plup_actv_subj", "ssem"],
1634
1770
  ["2s_plup_actv_subj", "ssēs"],
1635
1771
  ["3s_plup_actv_subj", "sset"],
@@ -1641,10 +1777,12 @@ export class LaVerb {
1641
1777
  const add_sync_perf = (form: string, suff_sync: string) => {
1642
1778
  const formval = getVerbForm(data.forms, form) || [];
1643
1779
  for (const fv of formval) {
1644
- const regex1 = new RegExp(`vi${suff_sync}$`);
1645
- const regex2 = new RegExp(`[aeiouyāēīōūȳăĕĭŏŭ]ui${suff_sync}$`);
1646
- if (fv.match(regex1) || fv.match(regex2)) {
1647
- const rep = fv.substr(0, fv.length - suff_sync.length - 2) + suff_sync;
1780
+ const regex1 = new RegExp(`v[ieē]${suff_sync}$`);
1781
+ const regex2 = new RegExp(`vē${suff_sync}$`);
1782
+ const regex3 = new RegExp(`[aeiouyāēīōūȳăĕĭŏŭ]u[ieē]${suff_sync}$`);
1783
+ const regex4 = new RegExp(`[aeiouyāēīōūȳăĕĭŏŭ]uē${suff_sync}$`);
1784
+ if (fv.match(regex1) || fv.match(regex2) || fv.match(regex3) || fv.match(regex4)) {
1785
+ const rep = fv.substring(0, fv.length - suff_sync.length - 2) + suff_sync;
1648
1786
  this.insert_if_not(formval, rep);
1649
1787
  }
1650
1788
  }
@@ -1689,13 +1827,13 @@ export class LaVerb {
1689
1827
  }
1690
1828
 
1691
1829
  private make_perfect_passive(data: ConjugationData) {
1692
- const ppp = getVerbForm(data.forms, "perf_pasv_ptc") || [];
1830
+ let ppp: string[] | undefined = getVerbForm(data.forms, "perf_pasv_ptc") || [];
1693
1831
  const ppplinks: string[] = [];
1694
1832
  for (const pppform of ppp) {
1695
1833
  ppplinks.push(`[[${pppform}]]`);
1696
1834
  }
1697
1835
 
1698
- const ppplink = ppplinks.join(" or ");
1836
+ let ppplink = ppplinks.join(" or ");
1699
1837
  const sumlink = "[[sum]]";
1700
1838
 
1701
1839
  const text_for_slot = new Map<string, string>([
@@ -1726,6 +1864,15 @@ export class LaVerb {
1726
1864
  (passiveSuffix || "");
1727
1865
  setVerbForm(data.forms, slot, [entry]);
1728
1866
  }
1867
+
1868
+ ppp = getVerbForm(data.forms, "1s_pres_actv_indc");
1869
+ if (ppp && ppp[0] == "faciō") {
1870
+ ppplink = "[[factum]]";
1871
+ for (const [slot, text] of text_for_slot) {
1872
+ const ts = getVerbForm(data.forms, slot) ?? [];
1873
+ setVerbForm(data.forms, slot, [ts[0] + " or " + ppplink + " + " + text + " of " + sumlink]);
1874
+ }
1875
+ }
1729
1876
  }
1730
1877
 
1731
1878
  private override(data: ConjugationData, args: ArgMap) {
@@ -1804,6 +1951,14 @@ export class LaVerb {
1804
1951
  }
1805
1952
  }
1806
1953
 
1954
+ private notes_override(data: ConjugationData, args: ArgMap) {
1955
+ if (args.get("notes") == "-") {
1956
+ for (const key of data.footnotes.keys()) {
1957
+ data.footnotes.set(key, [""]);
1958
+ }
1959
+ }
1960
+ }
1961
+
1807
1962
  private set_linked_forms(data: ConjugationData, typeinfo: ConjugationInfo) {
1808
1963
  for (const slot of LaVerb.potential_lemma_slots) {
1809
1964
  const linked_forms: string[] = [];
@@ -1938,6 +2093,17 @@ export class LaVerb {
1938
2093
  this.make_supine(data, typeinfo, [prefix + "dict"]);
1939
2094
 
1940
2095
  this.add_form(data, "2s_pres_actv_impr", prefix, "dīc", 1);
2096
+
2097
+ if (!this.options.suppressPoet) {
2098
+ this.add_form(data, "2s_pres_actv_impr", prefix, "dīc", 1);
2099
+ data.footnotes.set("2s_pres_actv_impr", ["Archaic."]);
2100
+ if (prefix == "") {
2101
+ this.add_form(data, "1s_futr_actv_indc", prefix, "dīcēbō", 2);
2102
+ this.add_form(data, "3s_futr_actv_indc", prefix, "dīcēbit", 2);
2103
+ data.footnotes.set("1s_futr_actv_indc", ["Archaic."]);
2104
+ data.footnotes.set("3s_futr_actv_indc", ["Archaic."]);
2105
+ }
2106
+ }
1941
2107
  });
1942
2108
 
1943
2109
  this.irreg_conjugations.set("do", (args: ArgMap, data: ConjugationData, typeinfo: ConjugationInfo) => {
@@ -2011,7 +2177,12 @@ export class LaVerb {
2011
2177
  this.add_2_forms(data, "pres_actv_impr", prefix, "ēs", "ēste");
2012
2178
  this.add_23_forms(data, "futr_actv_impr", prefix, "ēstō", "ēstō", "ēstōte", []);
2013
2179
 
2014
- this.add_form(data, "pres_actv_inf", prefix, "ēsse");
2180
+ if (this.options.reorderEdere) {
2181
+ // switch order to make ēsse the lemma
2182
+ setVerbForm(data.forms, "pres_actv_inf", [prefix + "ēsse", prefix + "edere"]);
2183
+ } else {
2184
+ this.add_form(data, "pres_actv_inf", prefix, "ēsse");
2185
+ }
2015
2186
  });
2016
2187
 
2017
2188
  this.irreg_conjugations.set("eo", (args: ArgMap, data: ConjugationData, typeinfo: ConjugationInfo) => {
@@ -2339,6 +2510,7 @@ export class LaVerb {
2339
2510
 
2340
2511
  this.irreg_conjugations.set("coepi", (args: ArgMap, data: ConjugationData, typeinfo: ConjugationInfo) => {
2341
2512
  data.categories.push("Latin third conjugation verbs");
2513
+ data.categories.push("Latin verbs with missing present stem");
2342
2514
  data.categories.push("Latin defective verbs");
2343
2515
 
2344
2516
  const prefix = typeinfo.prefix;
@@ -2391,6 +2563,11 @@ export class LaVerb {
2391
2563
  setVerbForm(data.forms, "2p_pres_actv_subj", [prefix_s + "sītis"]);
2392
2564
  setVerbForm(data.forms, "3p_pres_actv_subj", [prefix_s + "sint"]);
2393
2565
 
2566
+ if (prefix_s == "ad" && !this.options.suppressPoet) {
2567
+ this.add_form(data, "3p_pres_actv_subj", "", "adessint", 2);
2568
+ data.footnotes.set("3p_pres_actv_subj", ["Archaic."]);
2569
+ }
2570
+
2394
2571
  setVerbForm(data.forms, "1s_impf_actv_subj", [prefix_e + "essem", prefix_f + "forem"]);
2395
2572
  setVerbForm(data.forms, "2s_impf_actv_subj", [prefix_e + "essēs", prefix_f + "forēs"]);
2396
2573
  setVerbForm(data.forms, "3s_impf_actv_subj", [prefix_e + "esset", prefix_f + "foret"]);
@@ -30,10 +30,14 @@ export enum VerbType {
30
30
  NeuterPlural = "np",
31
31
  HighlyDefective = "highlydef",
32
32
  SigM = "sigm",
33
+ SigMPassive = "sigmpasv",
34
+ NoUND = "nound",
35
+ Suffix = "suffix",
33
36
 
34
37
  NoIStem = "-I",
35
38
  NoDeponent = "-depon",
36
39
  NoImpersonal = "-impers",
40
+ NoPerfAsPres = "-perfaspres",
37
41
  }
38
42
 
39
43
  export function addVerbType(types: Set<VerbType>, verbType: string) {