@treeviz/gedcom-parser 2.1.11 → 2.1.15

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 (45) hide show
  1. package/dist/classes/index.js +732 -396
  2. package/dist/classes/indi.d.ts +2 -2
  3. package/dist/classes/indi.d.ts.map +1 -1
  4. package/dist/cli/index.js +733 -397
  5. package/dist/constants/index.js +731 -395
  6. package/dist/factories/index.js +731 -395
  7. package/dist/factories/kinship-factory.d.ts +2 -2
  8. package/dist/factories/kinship-factory.d.ts.map +1 -1
  9. package/dist/index.js +733 -397
  10. package/dist/kinship-translator/index.js +731 -395
  11. package/dist/kinship-translator/kinship-translator.basic.d.ts +3 -1
  12. package/dist/kinship-translator/kinship-translator.basic.d.ts.map +1 -1
  13. package/dist/kinship-translator/kinship-translator.d.ts +3 -2
  14. package/dist/kinship-translator/kinship-translator.d.ts.map +1 -1
  15. package/dist/kinship-translator/kinship-translator.de.d.ts +2 -3
  16. package/dist/kinship-translator/kinship-translator.de.d.ts.map +1 -1
  17. package/dist/kinship-translator/kinship-translator.en.d.ts.map +1 -1
  18. package/dist/kinship-translator/kinship-translator.es.d.ts +2 -3
  19. package/dist/kinship-translator/kinship-translator.es.d.ts.map +1 -1
  20. package/dist/kinship-translator/kinship-translator.fr.d.ts +2 -3
  21. package/dist/kinship-translator/kinship-translator.fr.d.ts.map +1 -1
  22. package/dist/kinship-translator/kinship-translator.hu.d.ts.map +1 -1
  23. package/dist/kinship-translator/kinship-translator.ja.d.ts.map +1 -1
  24. package/dist/kinship-translator/kinship-translator.ru.d.ts +1 -1
  25. package/dist/kinship-translator/kinship-translator.ru.d.ts.map +1 -1
  26. package/dist/kinship-translator/kinship-translator.zh.d.ts.map +1 -1
  27. package/dist/kinship-translator/patterns.de.d.ts +1 -0
  28. package/dist/kinship-translator/patterns.de.d.ts.map +1 -1
  29. package/dist/kinship-translator/patterns.es.d.ts +1 -0
  30. package/dist/kinship-translator/patterns.es.d.ts.map +1 -1
  31. package/dist/kinship-translator/patterns.fr.d.ts +1 -0
  32. package/dist/kinship-translator/patterns.fr.d.ts.map +1 -1
  33. package/dist/kinship-translator/patterns.hu.d.ts.map +1 -1
  34. package/dist/kinship-translator/patterns.ru.d.ts +1 -0
  35. package/dist/kinship-translator/patterns.ru.d.ts.map +1 -1
  36. package/dist/kinship-translator/patterns.zh.d.ts.map +1 -1
  37. package/dist/structures/gedcom.d.ts +1 -0
  38. package/dist/structures/gedcom.d.ts.map +1 -1
  39. package/dist/structures/individual.d.ts +1 -0
  40. package/dist/structures/individual.d.ts.map +1 -1
  41. package/dist/types/types.d.ts +2 -0
  42. package/dist/types/types.d.ts.map +1 -1
  43. package/dist/utils/common-creator.d.ts.map +1 -1
  44. package/dist/utils/index.js +733 -397
  45. package/package.json +1 -1
@@ -5108,14 +5108,15 @@ var Indi = class extends Common {
5108
5108
  }
5109
5109
  return foundPath;
5110
5110
  }
5111
- kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname") {
5111
+ kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname", nameOrder) {
5112
5112
  const KinshipTranslatorClass2 = getKinshipTranslatorClass();
5113
5113
  const translator = new KinshipTranslatorClass2(
5114
5114
  this,
5115
5115
  other,
5116
5116
  lang,
5117
5117
  entirePath,
5118
- showMainPerson ? displayName : void 0
5118
+ showMainPerson ? displayName : void 0,
5119
+ nameOrder
5119
5120
  );
5120
5121
  return translator.translate(!!showMainPerson);
5121
5122
  }
@@ -6039,11 +6040,12 @@ var hungarianOrdinalize = (n) => {
6039
6040
 
6040
6041
  // src/kinship-translator/kinship-translator.basic.ts
6041
6042
  var KinshipTranslatorBasic = class {
6042
- constructor(path, displayName = "givenname") {
6043
+ constructor(path, displayName = "givenname", nameOrder = "first-last") {
6043
6044
  this.isOfSpouse = false;
6044
6045
  this.isSpouseOf = false;
6045
6046
  this._path = path;
6046
6047
  this.displayName = displayName;
6048
+ this.nameOrder = nameOrder;
6047
6049
  }
6048
6050
  get path() {
6049
6051
  return this._path;
@@ -6322,7 +6324,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6322
6324
  }
6323
6325
  return `${hungarianOrdinalize(
6324
6326
  degree
6325
- )}unokatestv\xE9r ${level}x elt\xE1vol\xEDtva`;
6327
+ )}unokatestv\xE9r ${Math.abs(level)}x elt\xE1vol\xEDtva`;
6326
6328
  }
6327
6329
  auncle() {
6328
6330
  const level = this.pathN?.level ?? 0;
@@ -6366,14 +6368,25 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6366
6368
  return `${ordinalized ? `${ordinalized}unoka` : ""}testv\xE9r ${origPrefix.replace(/nagy$/, "")}unok\xE1ja`;
6367
6369
  }
6368
6370
  parent() {
6371
+ const level = Math.abs(this.pathN?.level ?? 0);
6372
+ if (level <= 1) {
6373
+ if (this.personN?.isMale()) {
6374
+ return "apa";
6375
+ }
6376
+ if (this.personN?.isFemale()) {
6377
+ return "anya";
6378
+ }
6379
+ return "sz\xFCl\u0151";
6380
+ }
6369
6381
  const prefix = this.directPrefix();
6382
+ const gen = prefix === "nagy" ? "" : prefix;
6370
6383
  if (this.personN?.isMale()) {
6371
- return `${prefix}apa`;
6384
+ return `${gen}nagyapa`;
6372
6385
  }
6373
6386
  if (this.personN?.isFemale()) {
6374
- return `${prefix}anya`;
6387
+ return `${gen}nagyanya`;
6375
6388
  }
6376
- return `${prefix}sz\xFCl\u0151`;
6389
+ return `${gen}nagysz\xFCl\u0151`;
6377
6390
  }
6378
6391
  child() {
6379
6392
  const level = Math.abs(this.pathN?.level ?? 0);
@@ -6455,7 +6468,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6455
6468
  }
6456
6469
  of(relation) {
6457
6470
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6458
- nameOrder: "last-first"
6471
+ nameOrder: this.nameOrder
6459
6472
  });
6460
6473
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6461
6474
  if (this.displayName === "none") {
@@ -6567,27 +6580,30 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6567
6580
  if (!degree) {
6568
6581
  return level < 0 ? this.nibling() : this.auncle();
6569
6582
  }
6570
- return `${ordinalize(degree)} cousin ${level}x removed`;
6583
+ return `${ordinalize(degree)} cousin ${Math.abs(level)}x removed`;
6571
6584
  }
6572
6585
  auncle() {
6573
- const prefix = this.directPrefix();
6586
+ const level = Math.abs(this.pathN?.level ?? 0);
6587
+ const greats = level <= 1 ? "" : "great-".repeat(level - 1);
6574
6588
  if (this.personN?.isMale()) {
6575
- return `${prefix}uncle`;
6589
+ return `${greats}uncle`;
6576
6590
  }
6577
6591
  if (this.personN?.isFemale()) {
6578
- return `${prefix}aunt`;
6592
+ return `${greats}aunt`;
6579
6593
  }
6580
- return `${prefix}auncle`;
6594
+ return greats ? `${greats}uncle/${greats}aunt` : "uncle/aunt";
6581
6595
  }
6582
6596
  nibling() {
6583
- const prefix = this.directPrefix();
6597
+ const level = Math.abs(this.pathN?.level ?? 0);
6598
+ const greats = level <= 2 ? "" : "great-".repeat(level - 2);
6599
+ const grand = level <= 1 ? "" : "grand";
6584
6600
  if (this.personN?.isMale()) {
6585
- return `${prefix}nephew`;
6601
+ return `${greats}${grand}nephew`;
6586
6602
  }
6587
6603
  if (this.personN?.isFemale()) {
6588
- return `${prefix}niece`;
6604
+ return `${greats}${grand}niece`;
6589
6605
  }
6590
- return `${prefix}nibling`;
6606
+ return greats || grand ? `${greats}${grand}nephew/${greats}${grand}niece` : "nephew/niece";
6591
6607
  }
6592
6608
  parent() {
6593
6609
  const prefix = this.directPrefix();
@@ -6666,7 +6682,7 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6666
6682
  }
6667
6683
  of(relation) {
6668
6684
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6669
- nameOrder: "first-last"
6685
+ nameOrder: this.nameOrder
6670
6686
  });
6671
6687
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6672
6688
  if (this.displayName === "none") {
@@ -6715,45 +6731,64 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6715
6731
  };
6716
6732
 
6717
6733
  // src/kinship-translator/patterns.de.ts
6734
+ var parentRelationsDe = {
6735
+ step: "Stief",
6736
+ foster: "Pflege",
6737
+ adopted: "Adoptiv"
6738
+ };
6718
6739
  var InLawsDe = {
6719
- "Ehepartner von (kind|tochter|sohn)": "Schwiegerkind",
6720
- "Ehefrau von (kind|tochter|sohn)": "Schwiegertochter",
6721
- "Ehemann von (kind|tochter|sohn)": "Schwiegersohn",
6722
- "mutter des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegermutter",
6723
- "vater des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegervater",
6724
- "elternteil des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegerelternteil",
6725
- "Ehefrau von (Halb)?(geschwister|schwester|bruder)": "Schw\xE4gerin",
6726
- "Ehemann von (Halb)?(geschwister|schwester|bruder)": "Schwager",
6727
- "Ehepartner von (Halb)?(geschwister|schwester|bruder)": "Schwager/Schw\xE4gerin",
6728
- "(Halb)?schwester des (Ehepartner|Ehefrau|Ehemann)s": "Schw\xE4gerin",
6729
- "(Halb)?bruder des (Ehepartner|Ehefrau|Ehemann)s": "Schwager",
6730
- "(Halb)?geschwister des (Ehepartner|Ehefrau|Ehemann)s": "Schwager/Schw\xE4gerin"
6740
+ "Ehepartner von (Kind|Tochter|Sohn)": "Schwiegerkind",
6741
+ "Ehefrau von (Kind|Tochter|Sohn)": "Schwiegertochter",
6742
+ "Ehemann von (Kind|Tochter|Sohn)": "Schwiegersohn",
6743
+ "Mutter (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegermutter",
6744
+ "Vater (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegervater",
6745
+ "Elternteil (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegerelternteil",
6746
+ "Ehefrau von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schw\xE4gerin",
6747
+ "Ehemann von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager",
6748
+ "Ehepartner von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager/Schw\xE4gerin",
6749
+ "(Halb)?-?(Schwester|schwester) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schw\xE4gerin",
6750
+ "(Halb)?-?(Bruder|bruder) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager",
6751
+ "(Halb)?-?(Geschwister|geschwister) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager/Schw\xE4gerin"
6731
6752
  };
6732
6753
 
6733
6754
  // src/kinship-translator/kinship-translator.de.ts
6734
- var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6735
- directPrefix() {
6736
- const level = Math.abs(this.pathN?.level ?? 0);
6737
- if (level <= 1) {
6738
- return "";
6739
- }
6740
- if (level === 2) {
6741
- return "Gro\xDF";
6742
- }
6743
- if (level === 3) {
6744
- return "Urgro\xDF";
6745
- }
6746
- return `Ur${level - 2}-gro\xDF`;
6755
+ var sexOf = (person) => {
6756
+ if (person?.isMale?.()) {
6757
+ return "m";
6758
+ }
6759
+ if (person?.isFemale?.()) {
6760
+ return "f";
6747
6761
  }
6762
+ return "n";
6763
+ };
6764
+ var pick = (sex, male, female, neutral) => {
6765
+ if (sex === "m") {
6766
+ return male;
6767
+ }
6768
+ if (sex === "f") {
6769
+ return female;
6770
+ }
6771
+ return neutral;
6772
+ };
6773
+ var ur = (count) => count > 0 ? "Ur".repeat(count) : "";
6774
+ var genitiveArticle = (spouseType) => {
6775
+ if (spouseType === "Ehefrau") {
6776
+ return `der ${spouseType}`;
6777
+ }
6778
+ return `des ${spouseType}s`;
6779
+ };
6780
+ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6748
6781
  indirect() {
6749
6782
  let degree = Math.abs(this.pathN?.degree ?? 0);
6750
6783
  if (degree > 0) {
6751
6784
  degree = degree - 1;
6752
6785
  }
6753
- if (degree === 1) {
6754
- return `Cousin`;
6786
+ const sex = sexOf(this.personN);
6787
+ const cousin = pick(sex, "Cousin", "Cousine", "Cousin/Cousine");
6788
+ if (degree <= 1) {
6789
+ return cousin;
6755
6790
  }
6756
- return `Cousin ${degree}. Grades`;
6791
+ return `${cousin} ${degree}. Grades`;
6757
6792
  }
6758
6793
  removal() {
6759
6794
  const level = this.pathN?.level ?? 0;
@@ -6764,106 +6799,106 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6764
6799
  if (!degree) {
6765
6800
  return level < 0 ? this.nibling() : this.auncle();
6766
6801
  }
6767
- return `Cousin ${degree}. Grades ${Math.abs(level)}\xD7 entfernt`;
6802
+ return `${this.indirect()} ${Math.abs(level)}\xD7 entfernt`;
6768
6803
  }
6769
6804
  auncle() {
6770
- const prefix = this.directPrefix();
6771
- if (this.personN?.isMale()) {
6772
- return `${prefix}onkel`;
6773
- }
6774
- if (this.personN?.isFemale()) {
6775
- return `${prefix}tante`;
6805
+ const level = Math.abs(this.pathN?.level ?? 0);
6806
+ const sex = sexOf(this.personN);
6807
+ if (level <= 1) {
6808
+ return pick(sex, "Onkel", "Tante", "Onkel/Tante");
6776
6809
  }
6777
- return `${prefix}onkel/tante`;
6810
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6811
+ return pick(
6812
+ sex,
6813
+ `${prefix}onkel`,
6814
+ `${prefix}tante`,
6815
+ `${prefix}onkel/tante`
6816
+ );
6778
6817
  }
6779
6818
  nibling() {
6780
- const prefix = this.directPrefix();
6781
- if (this.personN?.isMale()) {
6782
- return `${prefix}neffe`;
6783
- }
6784
- if (this.personN?.isFemale()) {
6785
- return `${prefix}nichte`;
6819
+ const level = Math.abs(this.pathN?.level ?? 0);
6820
+ const sex = sexOf(this.personN);
6821
+ if (level <= 1) {
6822
+ return pick(sex, "Neffe", "Nichte", "Neffe/Nichte");
6786
6823
  }
6787
- return `${prefix}neffe/nichte`;
6824
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6825
+ return pick(
6826
+ sex,
6827
+ `${prefix}neffe`,
6828
+ `${prefix}nichte`,
6829
+ `${prefix}neffe/nichte`
6830
+ );
6788
6831
  }
6789
6832
  parent() {
6790
- const prefix = this.directPrefix();
6791
- if (this.personN?.isMale()) {
6792
- return `${prefix}vater`;
6793
- }
6794
- if (this.personN?.isFemale()) {
6795
- return `${prefix}mutter`;
6833
+ const level = Math.abs(this.pathN?.level ?? 0);
6834
+ const sex = sexOf(this.personN);
6835
+ if (level <= 1) {
6836
+ return pick(sex, "Vater", "Mutter", "Elternteil");
6796
6837
  }
6797
- return `${prefix}elternteil`;
6838
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6839
+ return pick(
6840
+ sex,
6841
+ `${prefix}vater`,
6842
+ `${prefix}mutter`,
6843
+ `${prefix}elternteil`
6844
+ );
6798
6845
  }
6799
6846
  child() {
6800
- const prefix = this.directPrefix();
6801
- if (this.personN?.isMale()) {
6802
- return `${prefix}sohn`;
6803
- }
6804
- if (this.personN?.isFemale()) {
6805
- return `${prefix}tochter`;
6847
+ const level = Math.abs(this.pathN?.level ?? 0);
6848
+ const sex = sexOf(this.personN);
6849
+ if (level <= 1) {
6850
+ return pick(sex, "Sohn", "Tochter", "Kind");
6806
6851
  }
6807
- return `${prefix}kind`;
6852
+ const prefix = ur(level - 2);
6853
+ return pick(
6854
+ sex,
6855
+ `${prefix}Enkel`,
6856
+ `${prefix}Enkelin`,
6857
+ `${prefix}Enkelkind`
6858
+ );
6808
6859
  }
6809
6860
  sibling() {
6810
- if (this.personN?.isMale()) {
6811
- return "bruder";
6812
- }
6813
- if (this.personN?.isFemale()) {
6814
- return "schwester";
6815
- }
6816
- return "geschwister";
6861
+ return pick(sexOf(this.personN), "Bruder", "Schwester", "Geschwister");
6817
6862
  }
6818
6863
  halfBlood(relation) {
6819
6864
  if (!relation || !this.isHalfBlood) {
6820
6865
  return relation ?? "";
6821
6866
  }
6822
- if (/^[A-ZÄÖÜ]/.test(relation) || /[-\s]/.test(relation)) {
6867
+ if (/[\s-]/.test(relation) || /^(Groß|Ur)/.test(relation)) {
6823
6868
  return `Halb-${relation}`;
6824
6869
  }
6825
- return `Halb${relation}`;
6870
+ return `Halb${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
6826
6871
  }
6827
6872
  spouse() {
6828
- if (this.personN?.isMale()) {
6829
- return "Ehemann";
6830
- }
6831
- if (this.personN?.isFemale()) {
6832
- return "Ehefrau";
6833
- }
6834
- return "Ehepartner";
6873
+ return pick(sexOf(this.personN), "Ehemann", "Ehefrau", "Ehepartner");
6835
6874
  }
6836
6875
  ofSpouse(relation) {
6837
6876
  if (!relation) {
6838
6877
  return "";
6839
6878
  }
6840
- const spouse = this.path?.[1].indi;
6841
- let spouseType = "Ehepartner";
6842
- if (spouse?.isMale()) {
6843
- spouseType = "Ehemann";
6844
- }
6845
- if (spouse?.isFemale()) {
6846
- spouseType = "Ehefrau";
6847
- }
6848
- return `${relation} des ${spouseType}s`;
6879
+ const spouseType = pick(
6880
+ sexOf(this.path?.[1].indi),
6881
+ "Ehemann",
6882
+ "Ehefrau",
6883
+ "Ehepartner"
6884
+ );
6885
+ return `${relation} ${genitiveArticle(spouseType)}`;
6849
6886
  }
6850
6887
  spouseOf(relation) {
6851
6888
  if (!relation) {
6852
6889
  return "";
6853
6890
  }
6854
- const spouse = this.path?.[this.path.length - 1].indi;
6855
- let spouseType = "Ehepartner";
6856
- if (spouse?.isMale()) {
6857
- spouseType = "Ehemann";
6858
- }
6859
- if (spouse?.isFemale()) {
6860
- spouseType = "Ehefrau";
6861
- }
6891
+ const spouseType = pick(
6892
+ sexOf(this.path?.[this.path.length - 1].indi),
6893
+ "Ehemann",
6894
+ "Ehefrau",
6895
+ "Ehepartner"
6896
+ );
6862
6897
  return `${spouseType} von ${relation}`;
6863
6898
  }
6864
6899
  of(relation) {
6865
6900
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6866
- nameOrder: "first-last"
6901
+ nameOrder: this.nameOrder
6867
6902
  });
6868
6903
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6869
6904
  if (this.displayName === "none") {
@@ -6876,8 +6911,8 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6876
6911
  if (!name || !relation) {
6877
6912
  return relation ?? "";
6878
6913
  }
6879
- if (relation.includes(" des ") || relation.includes(" von ")) {
6880
- return relation.replace(/ (des|von) /, ` $1 ${name}s `);
6914
+ if (relation.includes(" des ") || relation.includes(" der ") || relation.includes(" von ")) {
6915
+ return relation.replace(/ (des|der|von) /, ` $1 ${name}s `);
6881
6916
  }
6882
6917
  return `${name}s ${relation}`;
6883
6918
  }
@@ -6907,50 +6942,82 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6907
6942
  if (!relation || !this.pathN?.relation) {
6908
6943
  return relation ?? "";
6909
6944
  }
6910
- return `${this.pathN.relation} ${relation}`;
6945
+ const prefix = parentRelationsDe[this.pathN.relation];
6946
+ if (!prefix) {
6947
+ return relation;
6948
+ }
6949
+ if (prefix.endsWith("-") || prefix.endsWith(" ")) {
6950
+ return `${prefix}${relation}`;
6951
+ }
6952
+ return `${prefix}${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
6911
6953
  }
6912
6954
  };
6913
6955
 
6914
6956
  // src/kinship-translator/patterns.fr.ts
6957
+ var parentRelationsFr = {
6958
+ step: "step",
6959
+ foster: "foster",
6960
+ adopted: "adopted"
6961
+ };
6915
6962
  var InLawsFr = {
6916
6963
  "conjoint de (enfant|fille|fils)": "beau-fils/belle-fille",
6917
6964
  "\xE9pouse de (enfant|fille|fils)": "belle-fille",
6918
6965
  "mari de (enfant|fille|fils)": "gendre",
6919
- "m\xE8re du (conjoint|\xE9pouse|mari)": "belle-m\xE8re",
6920
- "p\xE8re du (conjoint|\xE9pouse|mari)": "beau-p\xE8re",
6921
- "parent du (conjoint|\xE9pouse|mari)": "beau-parent",
6966
+ "m\xE8re (du mari|du conjoint|de l'\xE9pouse)": "belle-m\xE8re",
6967
+ "p\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-p\xE8re",
6968
+ "parent (du mari|du conjoint|de l'\xE9pouse)": "beau-parent",
6922
6969
  "\xE9pouse de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "belle-s\u0153ur",
6923
6970
  "mari de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re",
6924
6971
  "conjoint de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re/belle-s\u0153ur",
6925
- "(demi-)?s\u0153ur du (conjoint|\xE9pouse|mari)": "belle-s\u0153ur",
6926
- "(demi-)?fr\xE8re du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re",
6927
- "(demi-)?fr\xE8re/s\u0153ur du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re/belle-s\u0153ur"
6972
+ "(demi-)?s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "belle-s\u0153ur",
6973
+ "(demi-)?fr\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re",
6974
+ "(demi-)?fr\xE8re/s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re/belle-s\u0153ur"
6928
6975
  };
6929
6976
 
6930
6977
  // src/kinship-translator/kinship-translator.fr.ts
6931
- var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6932
- directPrefix() {
6933
- const level = Math.abs(this.pathN?.level ?? 0);
6934
- if (level <= 1) {
6935
- return "";
6936
- }
6937
- if (level === 2) {
6938
- return "grand-";
6939
- }
6940
- if (level === 3) {
6941
- return "arri\xE8re-grand-";
6942
- }
6943
- return `arri\xE8re${level - 2}-grand-`;
6978
+ var sexOf2 = (person) => {
6979
+ if (person?.isMale?.()) {
6980
+ return "m";
6981
+ }
6982
+ if (person?.isFemale?.()) {
6983
+ return "f";
6944
6984
  }
6985
+ return "n";
6986
+ };
6987
+ var pick2 = (sex, male, female, neutral) => {
6988
+ if (sex === "m") {
6989
+ return male;
6990
+ }
6991
+ if (sex === "f") {
6992
+ return female;
6993
+ }
6994
+ return neutral;
6995
+ };
6996
+ var arriere = (count) => count > 0 ? "arri\xE8re-".repeat(count) : "";
6997
+ var frenchOrdinal = (n) => n === 1 ? "1er" : `${n}e`;
6998
+ var isFeminineRelation = (relation) => /mère|fille|sœur|tante|nièce|cousine|épouse/.test(relation);
6999
+ var ofSpousePrep = (spouseType) => {
7000
+ if (spouseType === "\xE9pouse") {
7001
+ return "de l'";
7002
+ }
7003
+ return "du ";
7004
+ };
7005
+ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6945
7006
  indirect() {
6946
7007
  let degree = Math.abs(this.pathN?.degree ?? 0);
6947
7008
  if (degree > 0) {
6948
7009
  degree = degree - 1;
6949
7010
  }
6950
- if (degree === 1) {
6951
- return `cousin`;
7011
+ const cousin = pick2(
7012
+ sexOf2(this.personN),
7013
+ "cousin",
7014
+ "cousine",
7015
+ "cousin/cousine"
7016
+ );
7017
+ if (degree <= 1) {
7018
+ return cousin;
6952
7019
  }
6953
- return `cousin au ${ordinalize(degree)} degr\xE9`;
7020
+ return `${cousin} au ${frenchOrdinal(degree)} degr\xE9`;
6954
7021
  }
6955
7022
  removal() {
6956
7023
  const level = this.pathN?.level ?? 0;
@@ -6961,56 +7028,57 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6961
7028
  if (!degree) {
6962
7029
  return level < 0 ? this.nibling() : this.auncle();
6963
7030
  }
6964
- return `cousin au ${ordinalize(degree)} degr\xE9 ${Math.abs(level)}\xD7 \xE9loign\xE9`;
7031
+ return `${this.indirect()} ${Math.abs(level)}\xD7 \xE9loign\xE9`;
6965
7032
  }
6966
7033
  auncle() {
6967
- const prefix = this.directPrefix();
6968
- if (this.personN?.isMale()) {
6969
- return `${prefix}oncle`;
6970
- }
6971
- if (this.personN?.isFemale()) {
6972
- return `${prefix}tante`;
7034
+ const level = Math.abs(this.pathN?.level ?? 0);
7035
+ const sex = sexOf2(this.personN);
7036
+ const base = pick2(sex, "oncle", "tante", "oncle/tante");
7037
+ if (level <= 1) {
7038
+ return base;
6973
7039
  }
6974
- return `${prefix}oncle/tante`;
7040
+ const grands = pick2(
7041
+ sex,
7042
+ "grand-oncle",
7043
+ "grand-tante",
7044
+ "grand-oncle/tante"
7045
+ );
7046
+ return `${arriere(level - 2)}${grands}`;
6975
7047
  }
6976
7048
  nibling() {
6977
- const prefix = this.directPrefix();
6978
- if (this.personN?.isMale()) {
6979
- return `${prefix}neveu`;
6980
- }
6981
- if (this.personN?.isFemale()) {
6982
- return `${prefix}ni\xE8ce`;
7049
+ const level = Math.abs(this.pathN?.level ?? 0);
7050
+ const sex = sexOf2(this.personN);
7051
+ if (level <= 1) {
7052
+ return pick2(sex, "neveu", "ni\xE8ce", "neveu/ni\xE8ce");
6983
7053
  }
6984
- return `${prefix}neveu/ni\xE8ce`;
7054
+ const grands = pick2(
7055
+ sex,
7056
+ "grand-neveu",
7057
+ "grande-ni\xE8ce",
7058
+ "grand-neveu/grande-ni\xE8ce"
7059
+ );
7060
+ return `${arriere(level - 2)}${grands}`;
6985
7061
  }
6986
7062
  parent() {
6987
- const prefix = this.directPrefix();
6988
- if (this.personN?.isMale()) {
6989
- return `${prefix}p\xE8re`;
6990
- }
6991
- if (this.personN?.isFemale()) {
6992
- return `${prefix}m\xE8re`;
7063
+ const level = Math.abs(this.pathN?.level ?? 0);
7064
+ const sex = sexOf2(this.personN);
7065
+ if (level <= 1) {
7066
+ return pick2(sex, "p\xE8re", "m\xE8re", "parent");
6993
7067
  }
6994
- return `${prefix}parent`;
7068
+ const grands = pick2(sex, "grand-p\xE8re", "grand-m\xE8re", "grand-parent");
7069
+ return `${arriere(level - 2)}${grands}`;
6995
7070
  }
6996
7071
  child() {
6997
- const prefix = this.directPrefix();
6998
- if (this.personN?.isMale()) {
6999
- return `${prefix}fils`;
7000
- }
7001
- if (this.personN?.isFemale()) {
7002
- return `${prefix}fille`;
7072
+ const level = Math.abs(this.pathN?.level ?? 0);
7073
+ const sex = sexOf2(this.personN);
7074
+ if (level <= 1) {
7075
+ return pick2(sex, "fils", "fille", "enfant");
7003
7076
  }
7004
- return `${prefix}enfant`;
7077
+ const petits = pick2(sex, "petit-fils", "petite-fille", "petit-enfant");
7078
+ return `${arriere(level - 2)}${petits}`;
7005
7079
  }
7006
7080
  sibling() {
7007
- if (this.personN?.isMale()) {
7008
- return "fr\xE8re";
7009
- }
7010
- if (this.personN?.isFemale()) {
7011
- return "s\u0153ur";
7012
- }
7013
- return "fr\xE8re/s\u0153ur";
7081
+ return pick2(sexOf2(this.personN), "fr\xE8re", "s\u0153ur", "fr\xE8re/s\u0153ur");
7014
7082
  }
7015
7083
  halfBlood(relation) {
7016
7084
  if (!relation || !this.isHalfBlood) {
@@ -7019,45 +7087,35 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7019
7087
  return `demi-${relation}`;
7020
7088
  }
7021
7089
  spouse() {
7022
- if (this.personN?.isMale()) {
7023
- return "mari";
7024
- }
7025
- if (this.personN?.isFemale()) {
7026
- return "\xE9pouse";
7027
- }
7028
- return "conjoint";
7090
+ return pick2(sexOf2(this.personN), "mari", "\xE9pouse", "conjoint");
7029
7091
  }
7030
7092
  ofSpouse(relation) {
7031
7093
  if (!relation) {
7032
7094
  return "";
7033
7095
  }
7034
- const spouse = this.path?.[1].indi;
7035
- let spouseType = "conjoint";
7036
- if (spouse?.isMale()) {
7037
- spouseType = "mari";
7038
- }
7039
- if (spouse?.isFemale()) {
7040
- spouseType = "\xE9pouse";
7041
- }
7042
- return `${relation} du ${spouseType}`;
7096
+ const spouseType = pick2(
7097
+ sexOf2(this.path?.[1].indi),
7098
+ "mari",
7099
+ "\xE9pouse",
7100
+ "conjoint"
7101
+ );
7102
+ return `${relation} ${ofSpousePrep(spouseType)}${spouseType}`;
7043
7103
  }
7044
7104
  spouseOf(relation) {
7045
7105
  if (!relation) {
7046
7106
  return "";
7047
7107
  }
7048
- const spouse = this.path?.[this.path.length - 1].indi;
7049
- let spouseType = "conjoint";
7050
- if (spouse?.isMale()) {
7051
- spouseType = "mari";
7052
- }
7053
- if (spouse?.isFemale()) {
7054
- spouseType = "\xE9pouse";
7055
- }
7108
+ const spouseType = pick2(
7109
+ sexOf2(this.path?.[this.path.length - 1].indi),
7110
+ "mari",
7111
+ "\xE9pouse",
7112
+ "conjoint"
7113
+ );
7056
7114
  return `${spouseType} de ${relation}`;
7057
7115
  }
7058
7116
  of(relation) {
7059
7117
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7060
- nameOrder: "first-last"
7118
+ nameOrder: this.nameOrder
7061
7119
  });
7062
7120
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7063
7121
  if (this.displayName === "none") {
@@ -7073,6 +7131,9 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7073
7131
  if (relation.includes(" du ") || relation.includes(" de ")) {
7074
7132
  return relation.replace(/ (du|de) /, ` $1 ${name} `);
7075
7133
  }
7134
+ if (relation.includes(" de l'")) {
7135
+ return relation.replace(" de l'", ` de ${name} l'`);
7136
+ }
7076
7137
  return `${relation} de ${name}`;
7077
7138
  }
7078
7139
  inLaw(relation) {
@@ -7101,50 +7162,118 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
7101
7162
  if (!relation || !this.pathN?.relation) {
7102
7163
  return relation ?? "";
7103
7164
  }
7104
- return `${this.pathN.relation} ${relation}`;
7165
+ const kind = parentRelationsFr[this.pathN.relation];
7166
+ if (!kind) {
7167
+ return relation;
7168
+ }
7169
+ if (kind === "step") {
7170
+ return `${isFeminineRelation(relation) ? "belle-" : "beau-"}${relation}`;
7171
+ }
7172
+ if (kind === "adopted") {
7173
+ return `${relation} ${isFeminineRelation(relation) ? "adoptive" : "adoptif"}`;
7174
+ }
7175
+ if (kind === "foster") {
7176
+ return `${relation} d'accueil`;
7177
+ }
7178
+ return relation;
7105
7179
  }
7106
7180
  };
7107
7181
 
7108
7182
  // src/kinship-translator/patterns.es.ts
7183
+ var parentRelationsEs = {
7184
+ step: {
7185
+ padre: "padrastro",
7186
+ madre: "madrastra",
7187
+ hijo: "hijastro",
7188
+ hija: "hijastra",
7189
+ hermano: "hermanastro",
7190
+ hermana: "hermanastra",
7191
+ abuelo: "abuelastro",
7192
+ abuela: "abuelastra"
7193
+ }
7194
+ };
7109
7195
  var InLawsEs = {
7110
7196
  "c\xF3nyuge de (hijo/hija|hija|hijo)": "yerno/nuera",
7111
7197
  "esposa de (hijo/hija|hija|hijo)": "nuera",
7112
7198
  "esposo de (hijo/hija|hija|hijo)": "yerno",
7113
- "madre del (c\xF3nyuge|esposa|esposo)": "suegra",
7114
- "padre del (c\xF3nyuge|esposa|esposo)": "suegro",
7115
- "padre/madre del (c\xF3nyuge|esposa|esposo)": "suegro/suegra",
7199
+ "madre (del c\xF3nyuge|del esposo|de la esposa)": "suegra",
7200
+ "padre (del c\xF3nyuge|del esposo|de la esposa)": "suegro",
7201
+ "padre/madre (del c\xF3nyuge|del esposo|de la esposa)": "suegro/suegra",
7116
7202
  "esposa de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
7117
7203
  "esposo de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
7118
7204
  "c\xF3nyuge de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
7119
- "(medio |media |medio/a )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
7120
- "(medio |media |medio/a )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
7121
- "(medio |media |medio/a )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
7205
+ "(medio |media |medio/a )?hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ada",
7206
+ "(medio |media |medio/a )?hermano (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado",
7207
+ "(medio |media |medio/a )?hermano/hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado/cu\xF1ada"
7122
7208
  };
7123
7209
 
7124
7210
  // src/kinship-translator/kinship-translator.es.ts
7125
- var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7126
- directPrefix() {
7127
- const level = Math.abs(this.pathN?.level ?? 0);
7128
- if (level <= 1) {
7129
- return "";
7130
- }
7131
- if (level === 2) {
7132
- return "bisabuel";
7133
- }
7134
- if (level === 3) {
7135
- return "tatarabuel";
7136
- }
7137
- return `t\xE1tara${level - 2}-abuel`;
7211
+ var sexOf3 = (person) => {
7212
+ if (person?.isMale?.()) {
7213
+ return "m";
7138
7214
  }
7215
+ if (person?.isFemale?.()) {
7216
+ return "f";
7217
+ }
7218
+ return "n";
7219
+ };
7220
+ var pick3 = (sex, male, female, neutral) => {
7221
+ if (sex === "m") {
7222
+ return male;
7223
+ }
7224
+ if (sex === "f") {
7225
+ return female;
7226
+ }
7227
+ return neutral;
7228
+ };
7229
+ var SPANISH_ORDINALS_M = [
7230
+ "",
7231
+ "",
7232
+ "segundo",
7233
+ "tercero",
7234
+ "cuarto",
7235
+ "quinto",
7236
+ "sexto",
7237
+ "s\xE9ptimo",
7238
+ "octavo",
7239
+ "noveno",
7240
+ "d\xE9cimo"
7241
+ ];
7242
+ var SPANISH_ORDINALS_F = [
7243
+ "",
7244
+ "",
7245
+ "segunda",
7246
+ "tercera",
7247
+ "cuarta",
7248
+ "quinta",
7249
+ "sexta",
7250
+ "s\xE9ptima",
7251
+ "octava",
7252
+ "novena",
7253
+ "d\xE9cima"
7254
+ ];
7255
+ var spanishOrdinal = (n, sex) => {
7256
+ const list = sex === "f" ? SPANISH_ORDINALS_F : SPANISH_ORDINALS_M;
7257
+ return list[n] ?? `${n}.\xBA`;
7258
+ };
7259
+ var ofSpousePrep2 = (spouseType) => {
7260
+ if (spouseType === "esposa") {
7261
+ return "de la ";
7262
+ }
7263
+ return "del ";
7264
+ };
7265
+ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7139
7266
  indirect() {
7140
7267
  let degree = Math.abs(this.pathN?.degree ?? 0);
7141
7268
  if (degree > 0) {
7142
7269
  degree = degree - 1;
7143
7270
  }
7144
- if (degree === 1) {
7145
- return `primo`;
7271
+ const sex = sexOf3(this.personN);
7272
+ const cousin = pick3(sex, "primo", "prima", "primo/prima");
7273
+ if (degree <= 1) {
7274
+ return cousin;
7146
7275
  }
7147
- return `primo ${ordinalize(degree)}`;
7276
+ return `${cousin} ${spanishOrdinal(degree, sex)}`;
7148
7277
  }
7149
7278
  removal() {
7150
7279
  const level = this.pathN?.level ?? 0;
@@ -7155,56 +7284,133 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7155
7284
  if (!degree) {
7156
7285
  return level < 0 ? this.nibling() : this.auncle();
7157
7286
  }
7158
- return `primo ${ordinalize(degree)} ${Math.abs(level)}\xD7 separado`;
7287
+ return `${this.indirect()} ${Math.abs(level)}\xD7 separado`;
7159
7288
  }
7160
7289
  auncle() {
7161
- const prefix = this.directPrefix();
7162
- if (this.personN?.isMale()) {
7163
- return `${prefix}t\xEDo`;
7290
+ const level = Math.abs(this.pathN?.level ?? 0);
7291
+ const sex = sexOf3(this.personN);
7292
+ if (level <= 1) {
7293
+ return pick3(sex, "t\xEDo", "t\xEDa", "t\xEDo/t\xEDa");
7164
7294
  }
7165
- if (this.personN?.isFemale()) {
7166
- return `${prefix}t\xEDa`;
7295
+ if (level === 2) {
7296
+ return pick3(sex, "t\xEDo abuelo", "t\xEDa abuela", "t\xEDo/t\xEDa abuelo");
7297
+ }
7298
+ if (level === 3) {
7299
+ return pick3(
7300
+ sex,
7301
+ "t\xEDo bisabuelo",
7302
+ "t\xEDa bisabuela",
7303
+ "t\xEDo/t\xEDa bisabuelo"
7304
+ );
7167
7305
  }
7168
- return `${prefix}t\xEDo/t\xEDa`;
7306
+ return pick3(
7307
+ sex,
7308
+ `t\xEDo abuelo (${level - 1}.\xBA)`,
7309
+ `t\xEDa abuela (${level - 1}.\xAA)`,
7310
+ `t\xEDo/t\xEDa abuelo (${level - 1}.\xBA)`
7311
+ );
7169
7312
  }
7170
7313
  nibling() {
7171
- const prefix = this.directPrefix();
7172
- if (this.personN?.isMale()) {
7173
- return `${prefix}sobrino`;
7314
+ const level = Math.abs(this.pathN?.level ?? 0);
7315
+ const sex = sexOf3(this.personN);
7316
+ if (level <= 1) {
7317
+ return pick3(sex, "sobrino", "sobrina", "sobrino/sobrina");
7174
7318
  }
7175
- if (this.personN?.isFemale()) {
7176
- return `${prefix}sobrina`;
7319
+ if (level === 2) {
7320
+ return pick3(
7321
+ sex,
7322
+ "sobrino nieto",
7323
+ "sobrina nieta",
7324
+ "sobrino/sobrina nieto"
7325
+ );
7326
+ }
7327
+ if (level === 3) {
7328
+ return pick3(
7329
+ sex,
7330
+ "sobrino bisnieto",
7331
+ "sobrina bisnieta",
7332
+ "sobrino/sobrina bisnieto"
7333
+ );
7177
7334
  }
7178
- return `${prefix}sobrino/sobrina`;
7335
+ return pick3(
7336
+ sex,
7337
+ `sobrino nieto (${level - 1}.\xBA)`,
7338
+ `sobrina nieta (${level - 1}.\xAA)`,
7339
+ `sobrino/sobrina nieto (${level - 1}.\xBA)`
7340
+ );
7179
7341
  }
7180
7342
  parent() {
7181
- const prefix = this.directPrefix();
7182
- if (this.personN?.isMale()) {
7183
- return `${prefix}padre`;
7343
+ const level = Math.abs(this.pathN?.level ?? 0);
7344
+ const sex = sexOf3(this.personN);
7345
+ if (level <= 1) {
7346
+ return pick3(sex, "padre", "madre", "padre/madre");
7184
7347
  }
7185
- if (this.personN?.isFemale()) {
7186
- return `${prefix}madre`;
7348
+ if (level === 2) {
7349
+ return pick3(sex, "abuelo", "abuela", "abuelo/abuela");
7350
+ }
7351
+ if (level === 3) {
7352
+ return pick3(sex, "bisabuelo", "bisabuela", "bisabuelo/bisabuela");
7353
+ }
7354
+ if (level === 4) {
7355
+ return pick3(
7356
+ sex,
7357
+ "tatarabuelo",
7358
+ "tatarabuela",
7359
+ "tatarabuelo/tatarabuela"
7360
+ );
7361
+ }
7362
+ if (level === 5) {
7363
+ return pick3(
7364
+ sex,
7365
+ "trastatarabuelo",
7366
+ "trastatarabuela",
7367
+ "trastatarabuelo/trastatarabuela"
7368
+ );
7187
7369
  }
7188
- return `${prefix}padre/madre`;
7370
+ return pick3(
7371
+ sex,
7372
+ `abuelo (${level}.\xBA)`,
7373
+ `abuela (${level}.\xAA)`,
7374
+ `abuelo/abuela (${level}.\xBA)`
7375
+ );
7189
7376
  }
7190
7377
  child() {
7191
- const prefix = this.directPrefix();
7192
- if (this.personN?.isMale()) {
7193
- return `${prefix}hijo`;
7378
+ const level = Math.abs(this.pathN?.level ?? 0);
7379
+ const sex = sexOf3(this.personN);
7380
+ if (level <= 1) {
7381
+ return pick3(sex, "hijo", "hija", "hijo/hija");
7194
7382
  }
7195
- if (this.personN?.isFemale()) {
7196
- return `${prefix}hija`;
7383
+ if (level === 2) {
7384
+ return pick3(sex, "nieto", "nieta", "nieto/nieta");
7197
7385
  }
7198
- return `${prefix}hijo/hija`;
7199
- }
7200
- sibling() {
7201
- if (this.personN?.isMale()) {
7202
- return "hermano";
7386
+ if (level === 3) {
7387
+ return pick3(sex, "bisnieto", "bisnieta", "bisnieto/bisnieta");
7203
7388
  }
7204
- if (this.personN?.isFemale()) {
7205
- return "hermana";
7389
+ if (level === 4) {
7390
+ return pick3(
7391
+ sex,
7392
+ "tataranieto",
7393
+ "tataranieta",
7394
+ "tataranieto/tataranieta"
7395
+ );
7396
+ }
7397
+ if (level === 5) {
7398
+ return pick3(
7399
+ sex,
7400
+ "trastataranieto",
7401
+ "trastataranieta",
7402
+ "trastataranieto/trastataranieta"
7403
+ );
7206
7404
  }
7207
- return "hermano/hermana";
7405
+ return pick3(
7406
+ sex,
7407
+ `nieto (${level}.\xBA)`,
7408
+ `nieta (${level}.\xAA)`,
7409
+ `nieto/nieta (${level}.\xBA)`
7410
+ );
7411
+ }
7412
+ sibling() {
7413
+ return pick3(sexOf3(this.personN), "hermano", "hermana", "hermano/hermana");
7208
7414
  }
7209
7415
  halfBlood(relation) {
7210
7416
  if (!relation || !this.isHalfBlood) {
@@ -7219,45 +7425,35 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7219
7425
  return `medio/a ${relation}`;
7220
7426
  }
7221
7427
  spouse() {
7222
- if (this.personN?.isMale()) {
7223
- return "esposo";
7224
- }
7225
- if (this.personN?.isFemale()) {
7226
- return "esposa";
7227
- }
7228
- return "c\xF3nyuge";
7428
+ return pick3(sexOf3(this.personN), "esposo", "esposa", "c\xF3nyuge");
7229
7429
  }
7230
7430
  ofSpouse(relation) {
7231
7431
  if (!relation) {
7232
7432
  return "";
7233
7433
  }
7234
- const spouse = this.path?.[1].indi;
7235
- let spouseType = "c\xF3nyuge";
7236
- if (spouse?.isMale()) {
7237
- spouseType = "esposo";
7238
- }
7239
- if (spouse?.isFemale()) {
7240
- spouseType = "esposa";
7241
- }
7242
- return `${relation} del ${spouseType}`;
7434
+ const spouseType = pick3(
7435
+ sexOf3(this.path?.[1].indi),
7436
+ "esposo",
7437
+ "esposa",
7438
+ "c\xF3nyuge"
7439
+ );
7440
+ return `${relation} ${ofSpousePrep2(spouseType)}${spouseType}`;
7243
7441
  }
7244
7442
  spouseOf(relation) {
7245
7443
  if (!relation) {
7246
7444
  return "";
7247
7445
  }
7248
- const spouse = this.path?.[this.path.length - 1].indi;
7249
- let spouseType = "c\xF3nyuge";
7250
- if (spouse?.isMale()) {
7251
- spouseType = "esposo";
7252
- }
7253
- if (spouse?.isFemale()) {
7254
- spouseType = "esposa";
7255
- }
7446
+ const spouseType = pick3(
7447
+ sexOf3(this.path?.[this.path.length - 1].indi),
7448
+ "esposo",
7449
+ "esposa",
7450
+ "c\xF3nyuge"
7451
+ );
7256
7452
  return `${spouseType} de ${relation}`;
7257
7453
  }
7258
7454
  of(relation) {
7259
7455
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7260
- nameOrder: "first-last"
7456
+ nameOrder: this.nameOrder
7261
7457
  });
7262
7458
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7263
7459
  if (this.displayName === "none") {
@@ -7270,8 +7466,8 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7270
7466
  if (!name || !relation) {
7271
7467
  return relation ?? "";
7272
7468
  }
7273
- if (relation.includes(" del ") || relation.includes(" de ")) {
7274
- return relation.replace(/ (del|de) /, ` $1 ${name} `);
7469
+ if (relation.includes(" del ") || relation.includes(" de la ") || relation.includes(" de ")) {
7470
+ return relation.replace(/ (del|de la|de) /, ` $1 ${name} `);
7275
7471
  }
7276
7472
  return `${relation} de ${name}`;
7277
7473
  }
@@ -7301,7 +7497,20 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
7301
7497
  if (!relation || !this.pathN?.relation) {
7302
7498
  return relation ?? "";
7303
7499
  }
7304
- return `${this.pathN.relation} ${relation}`;
7500
+ const mapped = parentRelationsEs[this.pathN.relation]?.[relation];
7501
+ if (mapped) {
7502
+ return mapped;
7503
+ }
7504
+ if (this.pathN.relation === "step") {
7505
+ return `${relation} pol\xEDtico`;
7506
+ }
7507
+ if (this.pathN.relation === "adopted") {
7508
+ return `${relation} adoptivo`;
7509
+ }
7510
+ if (this.pathN.relation === "foster") {
7511
+ return `${relation} de acogida`;
7512
+ }
7513
+ return relation;
7305
7514
  }
7306
7515
  };
7307
7516
 
@@ -7310,15 +7519,35 @@ var InLawsRu = {
7310
7519
  "\u0441\u0443\u043F\u0440\u0443\u0433(?:\u0430)? (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C/\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
7311
7520
  "\u0436\u0435\u043D\u0430 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
7312
7521
  "\u043C\u0443\u0436 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C",
7313
- "\u043C\u0430\u0442\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0451\u0449\u0430",
7314
- "\u043E\u0442\u0435\u0446 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C",
7315
- "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
7522
+ "\u043C\u0430\u0442\u044C \u0436\u0435\u043D\u044B": "\u0442\u0451\u0449\u0430",
7523
+ "\u043C\u0430\u0442\u044C \u043C\u0443\u0436\u0430": "\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7524
+ "\u043C\u0430\u0442\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0451\u0449\u0430/\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7525
+ "\u043E\u0442\u0435\u0446 \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C",
7526
+ "\u043E\u0442\u0435\u0446 \u043C\u0443\u0436\u0430": "\u0441\u0432\u0451\u043A\u043E\u0440",
7527
+ "\u043E\u0442\u0435\u0446 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0441\u0432\u0451\u043A\u043E\u0440",
7528
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
7529
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u043C\u0443\u0436\u0430": "\u0441\u0432\u0451\u043A\u043E\u0440/\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7530
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
7316
7531
  "\u0436\u0435\u043D\u0430 (\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?(\u0431\u0440\u0430\u0442\u0430|\u0441\u0435\u0441\u0442\u0440\u044B|\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430)": "\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
7317
7532
  "\u043C\u0443\u0436 (\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?(\u0431\u0440\u0430\u0442\u0430|\u0441\u0435\u0441\u0442\u0440\u044B|\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430)": "\u0437\u044F\u0442\u044C",
7318
7533
  "\u0441\u0443\u043F\u0440\u0443\u0433(?:\u0430)? (\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?(\u0431\u0440\u0430\u0442\u0430|\u0441\u0435\u0441\u0442\u0440\u044B|\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430)": "\u0437\u044F\u0442\u044C/\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
7319
- "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0435\u0441\u0442\u0440\u0430 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0437\u043E\u043B\u043E\u0432\u043A\u0430",
7320
- "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0448\u0443\u0440\u0438\u043D",
7321
- "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0438\u0431\u043B\u0438\u043D\u0433 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0448\u0443\u0440\u0438\u043D/\u0437\u043E\u043B\u043E\u0432\u043A\u0430"
7534
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0435\u0441\u0442\u0440\u0430 \u0436\u0435\u043D\u044B": "\u0441\u0432\u043E\u044F\u0447\u0435\u043D\u0438\u0446\u0430",
7535
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0435\u0441\u0442\u0440\u0430 \u043C\u0443\u0436\u0430": "\u0437\u043E\u043B\u043E\u0432\u043A\u0430",
7536
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0435\u0441\u0442\u0440\u0430 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0441\u0432\u043E\u044F\u0447\u0435\u043D\u0438\u0446\u0430/\u0437\u043E\u043B\u043E\u0432\u043A\u0430",
7537
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u0436\u0435\u043D\u044B": "\u0448\u0443\u0440\u0438\u043D",
7538
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u043C\u0443\u0436\u0430": "\u0434\u0435\u0432\u0435\u0440\u044C",
7539
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0448\u0443\u0440\u0438\u043D/\u0434\u0435\u0432\u0435\u0440\u044C",
7540
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0438\u0431\u043B\u0438\u043D\u0433 \u0436\u0435\u043D\u044B": "\u0448\u0443\u0440\u0438\u043D/\u0441\u0432\u043E\u044F\u0447\u0435\u043D\u0438\u0446\u0430",
7541
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0438\u0431\u043B\u0438\u043D\u0433 \u043C\u0443\u0436\u0430": "\u0434\u0435\u0432\u0435\u0440\u044C/\u0437\u043E\u043B\u043E\u0432\u043A\u0430",
7542
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0438\u0431\u043B\u0438\u043D\u0433 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0448\u0443\u0440\u0438\u043D/\u0437\u043E\u043B\u043E\u0432\u043A\u0430"
7543
+ };
7544
+ var parentRelationsRu = {
7545
+ step: {
7546
+ \u043E\u0442\u0435\u0446: "\u043E\u0442\u0447\u0438\u043C",
7547
+ \u043C\u0430\u0442\u044C: "\u043C\u0430\u0447\u0435\u0445\u0430",
7548
+ \u0441\u044B\u043D: "\u043F\u0430\u0441\u044B\u043D\u043E\u043A",
7549
+ \u0434\u043E\u0447\u044C: "\u043F\u0430\u0434\u0447\u0435\u0440\u0438\u0446\u0430"
7550
+ }
7322
7551
  };
7323
7552
 
7324
7553
  // src/kinship-translator/kinship-translator.ru.ts
@@ -7349,7 +7578,7 @@ var cousinWord = (degree, sex) => {
7349
7578
  return `${stem}\u044B\u0439 \u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430`;
7350
7579
  };
7351
7580
  var praRepeat = (count) => count > 0 ? "\u043F\u0440\u0430".repeat(count) : "";
7352
- var sexOf = (person) => {
7581
+ var sexOf4 = (person) => {
7353
7582
  if (person?.isMale?.()) {
7354
7583
  return "m";
7355
7584
  }
@@ -7364,7 +7593,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7364
7593
  if (degree > 0) {
7365
7594
  degree = degree - 1;
7366
7595
  }
7367
- return cousinWord(degree, sexOf(this.personN));
7596
+ return cousinWord(degree, sexOf4(this.personN));
7368
7597
  }
7369
7598
  removal() {
7370
7599
  const level = this.pathN?.level ?? 0;
@@ -7376,35 +7605,53 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7376
7605
  return level < 0 ? this.nibling() : this.auncle();
7377
7606
  }
7378
7607
  const removed = Math.abs(level);
7379
- return `${cousinWord(degree, sexOf(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
7608
+ return `${cousinWord(degree, sexOf4(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
7380
7609
  }
7381
7610
  auncle() {
7382
7611
  const level = Math.abs(this.pathN?.level ?? 0);
7383
- const pra = praRepeat(Math.max(0, level - 2));
7384
- const sex = sexOf(this.personN);
7612
+ const sex = sexOf4(this.personN);
7613
+ if (level <= 1) {
7614
+ if (sex === "m") {
7615
+ return "\u0434\u044F\u0434\u044F";
7616
+ }
7617
+ if (sex === "f") {
7618
+ return "\u0442\u0451\u0442\u044F";
7619
+ }
7620
+ return "\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F";
7621
+ }
7622
+ const pra = praRepeat(level - 2);
7385
7623
  if (sex === "m") {
7386
- return `${pra}\u0434\u044F\u0434\u044F`;
7624
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434`;
7387
7625
  }
7388
7626
  if (sex === "f") {
7389
- return `${pra}\u0442\u0451\u0442\u044F`;
7627
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u0430\u044F ${pra}\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
7390
7628
  }
7391
- return `${pra}\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F`;
7629
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434/\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
7392
7630
  }
7393
7631
  nibling() {
7394
7632
  const level = Math.abs(this.pathN?.level ?? 0);
7395
- const pra = praRepeat(Math.max(0, level - 2));
7396
- const sex = sexOf(this.personN);
7633
+ const sex = sexOf4(this.personN);
7634
+ if (level <= 1) {
7635
+ if (sex === "m") {
7636
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A";
7637
+ }
7638
+ if (sex === "f") {
7639
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
7640
+ }
7641
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
7642
+ }
7643
+ const pra = praRepeat(level - 2);
7397
7644
  if (sex === "m") {
7398
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
7645
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u044B\u0439 \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
7399
7646
  }
7400
7647
  if (sex === "f") {
7401
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7648
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u0430\u044F \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7402
7649
  }
7403
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7650
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u044B\u0439 \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7404
7651
  }
7405
7652
  parent() {
7406
7653
  const level = Math.abs(this.pathN?.level ?? 0);
7407
- const sex = sexOf(this.personN);
7654
+ const sex = sexOf4(this.personN);
7408
7655
  if (level <= 1) {
7409
7656
  if (sex === "m") {
7410
7657
  return "\u043E\u0442\u0435\u0446";
@@ -7434,7 +7681,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7434
7681
  }
7435
7682
  child() {
7436
7683
  const level = Math.abs(this.pathN?.level ?? 0);
7437
- const sex = sexOf(this.personN);
7684
+ const sex = sexOf4(this.personN);
7438
7685
  if (level <= 1) {
7439
7686
  if (sex === "m") {
7440
7687
  return "\u0441\u044B\u043D";
@@ -7463,14 +7710,14 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7463
7710
  return `${pra}\u0432\u043D\u0443\u043A/\u0432\u043D\u0443\u0447\u043A\u0430`;
7464
7711
  }
7465
7712
  sibling() {
7466
- const sex = sexOf(this.personN);
7713
+ const sex = sexOf4(this.personN);
7467
7714
  if (sex === "m") {
7468
7715
  return "\u0431\u0440\u0430\u0442";
7469
7716
  }
7470
7717
  if (sex === "f") {
7471
7718
  return "\u0441\u0435\u0441\u0442\u0440\u0430";
7472
7719
  }
7473
- return "\u0441\u0438\u0431\u043B\u0438\u043D\u0433";
7720
+ return "\u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430";
7474
7721
  }
7475
7722
  halfBlood(relation) {
7476
7723
  if (!relation || !this.isHalfBlood) {
@@ -7484,7 +7731,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7484
7731
  return `\u0441\u0432\u043E\u0434\u043D\u044B\u0439 ${relation}`;
7485
7732
  }
7486
7733
  spouse() {
7487
- const sex = sexOf(this.personN);
7734
+ const sex = sexOf4(this.personN);
7488
7735
  if (sex === "m") {
7489
7736
  return "\u043C\u0443\u0436";
7490
7737
  }
@@ -7498,7 +7745,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7498
7745
  return "";
7499
7746
  }
7500
7747
  const spouse = this.path?.[1].indi;
7501
- const sex = sexOf(spouse);
7748
+ const sex = sexOf4(spouse);
7502
7749
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
7503
7750
  return `${relation} ${toGenitive(spouseType)}`;
7504
7751
  }
@@ -7507,13 +7754,13 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7507
7754
  return "";
7508
7755
  }
7509
7756
  const spouse = this.path?.[this.path.length - 1].indi;
7510
- const sex = sexOf(spouse);
7757
+ const sex = sexOf4(spouse);
7511
7758
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
7512
7759
  return `${spouseType} ${toGenitive(relation)}`;
7513
7760
  }
7514
7761
  of(relation) {
7515
7762
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7516
- nameOrder: "first-last"
7763
+ nameOrder: this.nameOrder
7517
7764
  });
7518
7765
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7519
7766
  if (this.displayName === "none") {
@@ -7544,7 +7791,22 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7544
7791
  if (!relation || !this.pathN?.relation) {
7545
7792
  return relation ?? "";
7546
7793
  }
7547
- return `${this.pathN.relation} ${relation}`;
7794
+ const mapped = parentRelationsRu[this.pathN.relation]?.[relation];
7795
+ if (mapped) {
7796
+ return mapped;
7797
+ }
7798
+ if (this.pathN.relation === "step") {
7799
+ return `\u043D\u0435\u0440\u043E\u0434\u043D\u043E\u0439 ${relation}`;
7800
+ }
7801
+ if (this.pathN.relation === "adopted") {
7802
+ return /сестра|дочь|мать|тётя|бабушка|жена|племянница|внучка/.test(
7803
+ relation
7804
+ ) ? `\u043F\u0440\u0438\u0451\u043C\u043D\u0430\u044F ${relation}` : `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
7805
+ }
7806
+ if (this.pathN.relation === "foster") {
7807
+ return `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
7808
+ }
7809
+ return relation;
7548
7810
  }
7549
7811
  };
7550
7812
 
@@ -7568,7 +7830,7 @@ var InLawsJa = {
7568
7830
  };
7569
7831
 
7570
7832
  // src/kinship-translator/kinship-translator.ja.ts
7571
- var sexOf2 = (person) => {
7833
+ var sexOf5 = (person) => {
7572
7834
  if (person?.isMale?.()) {
7573
7835
  return "m";
7574
7836
  }
@@ -7577,7 +7839,7 @@ var sexOf2 = (person) => {
7577
7839
  }
7578
7840
  return "n";
7579
7841
  };
7580
- var pick = (sex, male, female, neutral) => {
7842
+ var pick4 = (sex, male, female, neutral) => {
7581
7843
  if (sex === "m") {
7582
7844
  return male;
7583
7845
  }
@@ -7590,18 +7852,18 @@ var lineal = (level, sex, kind) => {
7590
7852
  const L = Math.max(1, level);
7591
7853
  if (kind === "asc") {
7592
7854
  if (L <= 1) {
7593
- return pick(sex, "\u7236", "\u6BCD", "\u89AA");
7855
+ return pick4(sex, "\u7236", "\u6BCD", "\u89AA");
7594
7856
  }
7595
7857
  if (L === 2) {
7596
- return pick(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7858
+ return pick4(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7597
7859
  }
7598
7860
  if (L === 3) {
7599
- return pick(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7861
+ return pick4(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7600
7862
  }
7601
7863
  if (L === 4) {
7602
- return pick(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7864
+ return pick4(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7603
7865
  }
7604
- return pick(
7866
+ return pick4(
7605
7867
  sex,
7606
7868
  `${L - 1}\u4E16\u306E\u7956\u7236`,
7607
7869
  `${L - 1}\u4E16\u306E\u7956\u6BCD`,
@@ -7609,7 +7871,7 @@ var lineal = (level, sex, kind) => {
7609
7871
  );
7610
7872
  }
7611
7873
  if (L <= 1) {
7612
- return pick(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
7874
+ return pick4(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
7613
7875
  }
7614
7876
  if (L === 2) {
7615
7877
  return "\u5B6B";
@@ -7656,52 +7918,52 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7656
7918
  }
7657
7919
  auncle() {
7658
7920
  const level = Math.abs(this.pathN?.level ?? 0);
7659
- const sex = sexOf2(this.personN);
7660
- if (level <= 2) {
7661
- return pick(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
7921
+ const sex = sexOf5(this.personN);
7922
+ if (level <= 1) {
7923
+ return pick4(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
7662
7924
  }
7663
- if (level === 3) {
7664
- return pick(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
7925
+ if (level === 2) {
7926
+ return pick4(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
7665
7927
  }
7666
- return pick(
7928
+ return pick4(
7667
7929
  sex,
7668
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058`,
7669
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3070`,
7670
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
7930
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058`,
7931
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3070`,
7932
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
7671
7933
  );
7672
7934
  }
7673
7935
  nibling() {
7674
7936
  const level = Math.abs(this.pathN?.level ?? 0);
7675
- const sex = sexOf2(this.personN);
7676
- if (level <= 2) {
7677
- return pick(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
7937
+ const sex = sexOf5(this.personN);
7938
+ if (level <= 1) {
7939
+ return pick4(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
7678
7940
  }
7679
- if (level === 3) {
7680
- return pick(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
7941
+ if (level === 2) {
7942
+ return pick4(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
7681
7943
  }
7682
- return pick(
7944
+ return pick4(
7683
7945
  sex,
7684
- `${level - 2}\u4EE3\u4E0B\u306E\u7525`,
7685
- `${level - 2}\u4EE3\u4E0B\u306E\u59EA`,
7686
- `${level - 2}\u4EE3\u4E0B\u306E\u7525/\u59EA`
7946
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525`,
7947
+ `${level - 1}\u4EE3\u4E0B\u306E\u59EA`,
7948
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525/\u59EA`
7687
7949
  );
7688
7950
  }
7689
7951
  parent() {
7690
7952
  return lineal(
7691
7953
  Math.abs(this.pathN?.level ?? 0),
7692
- sexOf2(this.personN),
7954
+ sexOf5(this.personN),
7693
7955
  "asc"
7694
7956
  );
7695
7957
  }
7696
7958
  child() {
7697
7959
  return lineal(
7698
7960
  Math.abs(this.pathN?.level ?? 0),
7699
- sexOf2(this.personN),
7961
+ sexOf5(this.personN),
7700
7962
  "desc"
7701
7963
  );
7702
7964
  }
7703
7965
  sibling() {
7704
- return pick(sexOf2(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
7966
+ return pick4(sexOf5(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
7705
7967
  }
7706
7968
  halfBlood(relation) {
7707
7969
  if (!relation || !this.isHalfBlood) {
@@ -7710,14 +7972,14 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7710
7972
  return `\u7570\u7236\u6BCD\u306E${relation}`;
7711
7973
  }
7712
7974
  spouse() {
7713
- return pick(sexOf2(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7975
+ return pick4(sexOf5(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7714
7976
  }
7715
7977
  ofSpouse(relation) {
7716
7978
  if (!relation) {
7717
7979
  return "";
7718
7980
  }
7719
- const spouseType = pick(
7720
- sexOf2(this.path?.[1].indi),
7981
+ const spouseType = pick4(
7982
+ sexOf5(this.path?.[1].indi),
7721
7983
  "\u592B",
7722
7984
  "\u59BB",
7723
7985
  "\u914D\u5076\u8005"
@@ -7729,12 +7991,12 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7729
7991
  return "";
7730
7992
  }
7731
7993
  const spouse = this.path?.[this.path.length - 1].indi;
7732
- const spouseType = pick(sexOf2(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7994
+ const spouseType = pick4(sexOf5(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7733
7995
  return `${relation}\u306E${spouseType}`;
7734
7996
  }
7735
7997
  of(relation) {
7736
7998
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7737
- nameOrder: "last-first"
7999
+ nameOrder: this.nameOrder
7738
8000
  });
7739
8001
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7740
8002
  if (this.displayName === "none") {
@@ -7765,7 +8027,28 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7765
8027
  if (!relation || !this.pathN?.relation) {
7766
8028
  return relation ?? "";
7767
8029
  }
7768
- return `${this.pathN.relation}\u306E${relation}`;
8030
+ if (this.pathN.relation === "step") {
8031
+ if (relation === "\u7236") {
8032
+ return "\u7EE7\u7236";
8033
+ }
8034
+ if (relation === "\u6BCD") {
8035
+ return "\u7D99\u6BCD";
8036
+ }
8037
+ if (relation === "\u606F\u5B50") {
8038
+ return "\u7D99\u5B50";
8039
+ }
8040
+ if (relation === "\u5A18") {
8041
+ return "\u7D99\u5A18";
8042
+ }
8043
+ return `\u7D99${relation}`;
8044
+ }
8045
+ if (this.pathN.relation === "adopted") {
8046
+ return `\u990A\u5B50\u306E${relation}`;
8047
+ }
8048
+ if (this.pathN.relation === "foster") {
8049
+ return `\u91CC\u89AA\u306E${relation}`;
8050
+ }
8051
+ return relation;
7769
8052
  }
7770
8053
  };
7771
8054
 
@@ -7774,22 +8057,32 @@ var InLawsZh = {
7774
8057
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u914D\u5076": "\u513F\u5AB3/\u5973\u5A7F",
7775
8058
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u59BB\u5B50": "\u513F\u5AB3",
7776
8059
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u4E08\u592B": "\u5973\u5A7F",
7777
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
7778
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
7779
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
8060
+ "\u59BB\u5B50\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD",
8061
+ "\u4E08\u592B\u7684\u6BCD\u4EB2": "\u5A46\u5A46",
8062
+ "(\u914D\u5076)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
8063
+ "\u59BB\u5B50\u7684\u7236\u4EB2": "\u5CB3\u7236",
8064
+ "\u4E08\u592B\u7684\u7236\u4EB2": "\u516C\u516C",
8065
+ "(\u914D\u5076)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
8066
+ "\u59BB\u5B50\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD",
8067
+ "\u4E08\u592B\u7684\u7236\u6BCD": "\u516C\u516C\u5A46\u5A46",
8068
+ "(\u914D\u5076)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
7780
8069
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u59BB\u5B50": "\u5AC2\u5B50/\u5F1F\u59B9",
7781
8070
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u4E08\u592B": "\u59D0\u592B/\u59B9\u592B",
7782
8071
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u914D\u5076": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
7783
8072
  "(\u5F02\u7236\u6BCD\u7684)?\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59D0\u592B/\u59B9\u592B",
7784
8073
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u5AC2\u5B50/\u5F1F\u59B9",
7785
8074
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
7786
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
7787
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
8075
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u59D0\u59B9": "\u59E8\u5B50",
8076
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u59D0\u59B9": "\u59D1\u5B50",
8077
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
8078
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u5144\u5F1F": "\u5185\u5144/\u5185\u5F1F",
8079
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4",
8080
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
7788
8081
  "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F\u59D0\u59B9": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9"
7789
8082
  };
7790
8083
 
7791
8084
  // src/kinship-translator/kinship-translator.zh.ts
7792
- var sexOf3 = (person) => {
8085
+ var sexOf6 = (person) => {
7793
8086
  if (person?.isMale?.()) {
7794
8087
  return "m";
7795
8088
  }
@@ -7798,7 +8091,7 @@ var sexOf3 = (person) => {
7798
8091
  }
7799
8092
  return "n";
7800
8093
  };
7801
- var pick2 = (sex, male, female, neutral) => {
8094
+ var pick5 = (sex, male, female, neutral) => {
7802
8095
  if (sex === "m") {
7803
8096
  return male;
7804
8097
  }
@@ -7811,41 +8104,41 @@ var lineal2 = (level, sex, kind) => {
7811
8104
  const L = Math.max(1, level);
7812
8105
  if (kind === "asc") {
7813
8106
  if (L <= 1) {
7814
- return pick2(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
8107
+ return pick5(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
7815
8108
  }
7816
8109
  if (L === 2) {
7817
- return pick2(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
8110
+ return pick5(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7818
8111
  }
7819
8112
  if (L === 3) {
7820
- return pick2(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
8113
+ return pick5(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7821
8114
  }
7822
8115
  if (L === 4) {
7823
- return pick2(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
8116
+ return pick5(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7824
8117
  }
7825
- return pick2(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
8118
+ return pick5(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
7826
8119
  }
7827
8120
  if (L <= 1) {
7828
- return pick2(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
8121
+ return pick5(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
7829
8122
  }
7830
8123
  if (L === 2) {
7831
- return pick2(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
8124
+ return pick5(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
7832
8125
  }
7833
8126
  if (L === 3) {
7834
- return pick2(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
8127
+ return pick5(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
7835
8128
  }
7836
8129
  if (L === 4) {
7837
- return pick2(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
8130
+ return pick5(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
7838
8131
  }
7839
- return pick2(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
8132
+ return pick5(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
7840
8133
  };
7841
8134
  var cousinPlain2 = (degree, sex) => {
7842
8135
  if (degree <= 1) {
7843
- return pick2(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
8136
+ return pick5(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
7844
8137
  }
7845
8138
  if (degree === 2) {
7846
- return pick2(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
8139
+ return pick5(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
7847
8140
  }
7848
- return pick2(
8141
+ return pick5(
7849
8142
  sex,
7850
8143
  `${degree}\u4EE3\u5802\u8868\u5144\u5F1F`,
7851
8144
  `${degree}\u4EE3\u5802\u8868\u59D0\u59B9`,
@@ -7858,7 +8151,7 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7858
8151
  if (degree > 0) {
7859
8152
  degree = degree - 1;
7860
8153
  }
7861
- return cousinPlain2(degree, sexOf3(this.personN));
8154
+ return cousinPlain2(degree, sexOf6(this.personN));
7862
8155
  }
7863
8156
  removal() {
7864
8157
  const level = this.pathN?.level ?? 0;
@@ -7870,56 +8163,56 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7870
8163
  return level < 0 ? this.nibling() : this.auncle();
7871
8164
  }
7872
8165
  const removed = Math.abs(level);
7873
- return `${cousinPlain2(degree, sexOf3(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
8166
+ return `${cousinPlain2(degree, sexOf6(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
7874
8167
  }
7875
8168
  auncle() {
7876
8169
  const level = Math.abs(this.pathN?.level ?? 0);
7877
- const sex = sexOf3(this.personN);
7878
- if (level <= 2) {
7879
- return pick2(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
8170
+ const sex = sexOf6(this.personN);
8171
+ if (level <= 1) {
8172
+ return pick5(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
7880
8173
  }
7881
- if (level === 3) {
7882
- return pick2(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
8174
+ if (level === 2) {
8175
+ return pick5(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
7883
8176
  }
7884
- return pick2(
8177
+ return pick5(
7885
8178
  sex,
7886
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u53D4`,
7887
- `${level - 2}\u4EE3\u524D\u7684\u963F\u59E8`,
7888
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
8179
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u53D4`,
8180
+ `${level - 1}\u4EE3\u524D\u7684\u963F\u59E8`,
8181
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
7889
8182
  );
7890
8183
  }
7891
8184
  nibling() {
7892
8185
  const level = Math.abs(this.pathN?.level ?? 0);
7893
- const sex = sexOf3(this.personN);
7894
- if (level <= 2) {
7895
- return pick2(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
8186
+ const sex = sexOf6(this.personN);
8187
+ if (level <= 1) {
8188
+ return pick5(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
7896
8189
  }
7897
- if (level === 3) {
7898
- return pick2(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
8190
+ if (level === 2) {
8191
+ return pick5(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
7899
8192
  }
7900
- return pick2(
8193
+ return pick5(
7901
8194
  sex,
7902
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
7903
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5973`,
7904
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
8195
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
8196
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5973`,
8197
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
7905
8198
  );
7906
8199
  }
7907
8200
  parent() {
7908
8201
  return lineal2(
7909
8202
  Math.abs(this.pathN?.level ?? 0),
7910
- sexOf3(this.personN),
8203
+ sexOf6(this.personN),
7911
8204
  "asc"
7912
8205
  );
7913
8206
  }
7914
8207
  child() {
7915
8208
  return lineal2(
7916
8209
  Math.abs(this.pathN?.level ?? 0),
7917
- sexOf3(this.personN),
8210
+ sexOf6(this.personN),
7918
8211
  "desc"
7919
8212
  );
7920
8213
  }
7921
8214
  sibling() {
7922
- return pick2(sexOf3(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
8215
+ return pick5(sexOf6(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
7923
8216
  }
7924
8217
  halfBlood(relation) {
7925
8218
  if (!relation || !this.isHalfBlood) {
@@ -7928,14 +8221,14 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7928
8221
  return `\u5F02\u7236\u6BCD\u7684${relation}`;
7929
8222
  }
7930
8223
  spouse() {
7931
- return pick2(sexOf3(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
8224
+ return pick5(sexOf6(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7932
8225
  }
7933
8226
  ofSpouse(relation) {
7934
8227
  if (!relation) {
7935
8228
  return "";
7936
8229
  }
7937
- const spouseType = pick2(
7938
- sexOf3(this.path?.[1].indi),
8230
+ const spouseType = pick5(
8231
+ sexOf6(this.path?.[1].indi),
7939
8232
  "\u4E08\u592B",
7940
8233
  "\u59BB\u5B50",
7941
8234
  "\u914D\u5076"
@@ -7947,12 +8240,12 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7947
8240
  return "";
7948
8241
  }
7949
8242
  const spouse = this.path?.[this.path.length - 1].indi;
7950
- const spouseType = pick2(sexOf3(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
8243
+ const spouseType = pick5(sexOf6(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7951
8244
  return `${relation}\u7684${spouseType}`;
7952
8245
  }
7953
8246
  of(relation) {
7954
8247
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7955
- nameOrder: "last-first"
8248
+ nameOrder: this.nameOrder
7956
8249
  });
7957
8250
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7958
8251
  if (this.displayName === "none") {
@@ -7983,27 +8276,68 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7983
8276
  if (!relation || !this.pathN?.relation) {
7984
8277
  return relation ?? "";
7985
8278
  }
7986
- return `${this.pathN.relation}${relation}`;
8279
+ if (this.pathN.relation === "step") {
8280
+ if (relation === "\u7236\u4EB2") {
8281
+ return "\u7EE7\u7236";
8282
+ }
8283
+ if (relation === "\u6BCD\u4EB2") {
8284
+ return "\u7EE7\u6BCD";
8285
+ }
8286
+ if (relation === "\u513F\u5B50") {
8287
+ return "\u7EE7\u5B50";
8288
+ }
8289
+ if (relation === "\u5973\u513F") {
8290
+ return "\u7EE7\u5973";
8291
+ }
8292
+ return `\u7EE7${relation}`;
8293
+ }
8294
+ if (this.pathN.relation === "adopted") {
8295
+ if (relation === "\u7236\u4EB2") {
8296
+ return "\u517B\u7236";
8297
+ }
8298
+ if (relation === "\u6BCD\u4EB2") {
8299
+ return "\u517B\u6BCD";
8300
+ }
8301
+ if (relation === "\u513F\u5B50") {
8302
+ return "\u517B\u5B50";
8303
+ }
8304
+ if (relation === "\u5973\u513F") {
8305
+ return "\u517B\u5973";
8306
+ }
8307
+ return `\u517B${relation}`;
8308
+ }
8309
+ if (this.pathN.relation === "foster") {
8310
+ return `\u5BC4\u517B${relation}`;
8311
+ }
8312
+ return relation;
7987
8313
  }
7988
8314
  };
7989
8315
 
7990
8316
  // src/kinship-translator/kinship-translator.ts
8317
+ var nameOrderForLang = (lang) => lang === "hu" || lang === "ja" || lang === "zh" ? "last-first" : "first-last";
7991
8318
  var KinshipTranslator = class {
7992
- constructor(person1, person2, lang = "en", entirePath, displayName = "givenname") {
8319
+ constructor(person1, person2, lang = "en", entirePath, displayName = "givenname", nameOrder) {
7993
8320
  this.displayName = displayName;
7994
8321
  this.lang = lang;
7995
8322
  this.entirePath = entirePath;
7996
8323
  this.person1 = person1;
7997
8324
  this.person2 = typeof person2 === "string" ? this.person1.getGedcom()?.indi(person2) : person2;
7998
8325
  this.path = this.person1.path(this.person2);
8326
+ const order = nameOrder ?? nameOrderForLang(lang);
8327
+ this.nameOrder = order;
7999
8328
  if (translators_exports[lang]) {
8000
8329
  this.translator = new translators_exports[lang](
8001
8330
  this.path ?? [],
8002
- displayName
8331
+ displayName,
8332
+ order
8003
8333
  );
8004
8334
  }
8005
8335
  if (!this.translator) {
8006
- this.translator = new KinshipTranslatorEn(this.path ?? [], displayName);
8336
+ this.translator = new KinshipTranslatorEn(
8337
+ this.path ?? [],
8338
+ displayName,
8339
+ order
8340
+ );
8007
8341
  }
8008
8342
  }
8009
8343
  get path0() {
@@ -8048,14 +8382,16 @@ var KinshipTranslator = class {
8048
8382
  showMainPerson,
8049
8383
  this.lang,
8050
8384
  false,
8051
- this.displayName
8385
+ this.displayName,
8386
+ this.nameOrder
8052
8387
  ),
8053
8388
  relative: this.path?.[index - 1]?.indi.kinship(
8054
8389
  path2.indi.id,
8055
8390
  showMainPerson,
8056
8391
  this.lang,
8057
8392
  false,
8058
- this.displayName
8393
+ this.displayName,
8394
+ this.nameOrder
8059
8395
  )
8060
8396
  }));
8061
8397
  return path;