@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
@@ -4611,14 +4611,15 @@ var Indi = class extends Common {
4611
4611
  }
4612
4612
  return foundPath;
4613
4613
  }
4614
- kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname") {
4614
+ kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname", nameOrder) {
4615
4615
  const KinshipTranslatorClass2 = getKinshipTranslatorClass();
4616
4616
  const translator = new KinshipTranslatorClass2(
4617
4617
  this,
4618
4618
  other,
4619
4619
  lang,
4620
4620
  entirePath,
4621
- showMainPerson ? displayName : void 0
4621
+ showMainPerson ? displayName : void 0,
4622
+ nameOrder
4622
4623
  );
4623
4624
  return translator.translate(!!showMainPerson);
4624
4625
  }
@@ -5542,11 +5543,12 @@ var hungarianOrdinalize = (n) => {
5542
5543
 
5543
5544
  // src/kinship-translator/kinship-translator.basic.ts
5544
5545
  var KinshipTranslatorBasic = class {
5545
- constructor(path, displayName = "givenname") {
5546
+ constructor(path, displayName = "givenname", nameOrder = "first-last") {
5546
5547
  this.isOfSpouse = false;
5547
5548
  this.isSpouseOf = false;
5548
5549
  this._path = path;
5549
5550
  this.displayName = displayName;
5551
+ this.nameOrder = nameOrder;
5550
5552
  }
5551
5553
  get path() {
5552
5554
  return this._path;
@@ -5825,7 +5827,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
5825
5827
  }
5826
5828
  return `${hungarianOrdinalize(
5827
5829
  degree
5828
- )}unokatestv\xE9r ${level}x elt\xE1vol\xEDtva`;
5830
+ )}unokatestv\xE9r ${Math.abs(level)}x elt\xE1vol\xEDtva`;
5829
5831
  }
5830
5832
  auncle() {
5831
5833
  const level = this.pathN?.level ?? 0;
@@ -5869,14 +5871,25 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
5869
5871
  return `${ordinalized ? `${ordinalized}unoka` : ""}testv\xE9r ${origPrefix.replace(/nagy$/, "")}unok\xE1ja`;
5870
5872
  }
5871
5873
  parent() {
5874
+ const level = Math.abs(this.pathN?.level ?? 0);
5875
+ if (level <= 1) {
5876
+ if (this.personN?.isMale()) {
5877
+ return "apa";
5878
+ }
5879
+ if (this.personN?.isFemale()) {
5880
+ return "anya";
5881
+ }
5882
+ return "sz\xFCl\u0151";
5883
+ }
5872
5884
  const prefix = this.directPrefix();
5885
+ const gen = prefix === "nagy" ? "" : prefix;
5873
5886
  if (this.personN?.isMale()) {
5874
- return `${prefix}apa`;
5887
+ return `${gen}nagyapa`;
5875
5888
  }
5876
5889
  if (this.personN?.isFemale()) {
5877
- return `${prefix}anya`;
5890
+ return `${gen}nagyanya`;
5878
5891
  }
5879
- return `${prefix}sz\xFCl\u0151`;
5892
+ return `${gen}nagysz\xFCl\u0151`;
5880
5893
  }
5881
5894
  child() {
5882
5895
  const level = Math.abs(this.pathN?.level ?? 0);
@@ -5958,7 +5971,7 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
5958
5971
  }
5959
5972
  of(relation) {
5960
5973
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
5961
- nameOrder: "last-first"
5974
+ nameOrder: this.nameOrder
5962
5975
  });
5963
5976
  let name = formattedName.inOrder.filter(Boolean).join(" ");
5964
5977
  if (this.displayName === "none") {
@@ -6070,27 +6083,30 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6070
6083
  if (!degree) {
6071
6084
  return level < 0 ? this.nibling() : this.auncle();
6072
6085
  }
6073
- return `${ordinalize(degree)} cousin ${level}x removed`;
6086
+ return `${ordinalize(degree)} cousin ${Math.abs(level)}x removed`;
6074
6087
  }
6075
6088
  auncle() {
6076
- const prefix = this.directPrefix();
6089
+ const level = Math.abs(this.pathN?.level ?? 0);
6090
+ const greats = level <= 1 ? "" : "great-".repeat(level - 1);
6077
6091
  if (this.personN?.isMale()) {
6078
- return `${prefix}uncle`;
6092
+ return `${greats}uncle`;
6079
6093
  }
6080
6094
  if (this.personN?.isFemale()) {
6081
- return `${prefix}aunt`;
6095
+ return `${greats}aunt`;
6082
6096
  }
6083
- return `${prefix}auncle`;
6097
+ return greats ? `${greats}uncle/${greats}aunt` : "uncle/aunt";
6084
6098
  }
6085
6099
  nibling() {
6086
- const prefix = this.directPrefix();
6100
+ const level = Math.abs(this.pathN?.level ?? 0);
6101
+ const greats = level <= 2 ? "" : "great-".repeat(level - 2);
6102
+ const grand = level <= 1 ? "" : "grand";
6087
6103
  if (this.personN?.isMale()) {
6088
- return `${prefix}nephew`;
6104
+ return `${greats}${grand}nephew`;
6089
6105
  }
6090
6106
  if (this.personN?.isFemale()) {
6091
- return `${prefix}niece`;
6107
+ return `${greats}${grand}niece`;
6092
6108
  }
6093
- return `${prefix}nibling`;
6109
+ return greats || grand ? `${greats}${grand}nephew/${greats}${grand}niece` : "nephew/niece";
6094
6110
  }
6095
6111
  parent() {
6096
6112
  const prefix = this.directPrefix();
@@ -6169,7 +6185,7 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6169
6185
  }
6170
6186
  of(relation) {
6171
6187
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6172
- nameOrder: "first-last"
6188
+ nameOrder: this.nameOrder
6173
6189
  });
6174
6190
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6175
6191
  if (this.displayName === "none") {
@@ -6218,45 +6234,64 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6218
6234
  };
6219
6235
 
6220
6236
  // src/kinship-translator/patterns.de.ts
6237
+ var parentRelationsDe = {
6238
+ step: "Stief",
6239
+ foster: "Pflege",
6240
+ adopted: "Adoptiv"
6241
+ };
6221
6242
  var InLawsDe = {
6222
- "Ehepartner von (kind|tochter|sohn)": "Schwiegerkind",
6223
- "Ehefrau von (kind|tochter|sohn)": "Schwiegertochter",
6224
- "Ehemann von (kind|tochter|sohn)": "Schwiegersohn",
6225
- "mutter des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegermutter",
6226
- "vater des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegervater",
6227
- "elternteil des (Ehepartner|Ehefrau|Ehemann)s": "Schwiegerelternteil",
6228
- "Ehefrau von (Halb)?(geschwister|schwester|bruder)": "Schw\xE4gerin",
6229
- "Ehemann von (Halb)?(geschwister|schwester|bruder)": "Schwager",
6230
- "Ehepartner von (Halb)?(geschwister|schwester|bruder)": "Schwager/Schw\xE4gerin",
6231
- "(Halb)?schwester des (Ehepartner|Ehefrau|Ehemann)s": "Schw\xE4gerin",
6232
- "(Halb)?bruder des (Ehepartner|Ehefrau|Ehemann)s": "Schwager",
6233
- "(Halb)?geschwister des (Ehepartner|Ehefrau|Ehemann)s": "Schwager/Schw\xE4gerin"
6243
+ "Ehepartner von (Kind|Tochter|Sohn)": "Schwiegerkind",
6244
+ "Ehefrau von (Kind|Tochter|Sohn)": "Schwiegertochter",
6245
+ "Ehemann von (Kind|Tochter|Sohn)": "Schwiegersohn",
6246
+ "Mutter (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegermutter",
6247
+ "Vater (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegervater",
6248
+ "Elternteil (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwiegerelternteil",
6249
+ "Ehefrau von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schw\xE4gerin",
6250
+ "Ehemann von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager",
6251
+ "Ehepartner von (Halb)?-?(Geschwister|Schwester|Bruder)": "Schwager/Schw\xE4gerin",
6252
+ "(Halb)?-?(Schwester|schwester) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schw\xE4gerin",
6253
+ "(Halb)?-?(Bruder|bruder) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager",
6254
+ "(Halb)?-?(Geschwister|geschwister) (des Ehepartners|des Ehemanns|der Ehefrau)": "Schwager/Schw\xE4gerin"
6234
6255
  };
6235
6256
 
6236
6257
  // src/kinship-translator/kinship-translator.de.ts
6237
- var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6238
- directPrefix() {
6239
- const level = Math.abs(this.pathN?.level ?? 0);
6240
- if (level <= 1) {
6241
- return "";
6242
- }
6243
- if (level === 2) {
6244
- return "Gro\xDF";
6245
- }
6246
- if (level === 3) {
6247
- return "Urgro\xDF";
6248
- }
6249
- return `Ur${level - 2}-gro\xDF`;
6258
+ var sexOf = (person) => {
6259
+ if (person?.isMale?.()) {
6260
+ return "m";
6261
+ }
6262
+ if (person?.isFemale?.()) {
6263
+ return "f";
6250
6264
  }
6265
+ return "n";
6266
+ };
6267
+ var pick = (sex, male, female, neutral) => {
6268
+ if (sex === "m") {
6269
+ return male;
6270
+ }
6271
+ if (sex === "f") {
6272
+ return female;
6273
+ }
6274
+ return neutral;
6275
+ };
6276
+ var ur = (count) => count > 0 ? "Ur".repeat(count) : "";
6277
+ var genitiveArticle = (spouseType) => {
6278
+ if (spouseType === "Ehefrau") {
6279
+ return `der ${spouseType}`;
6280
+ }
6281
+ return `des ${spouseType}s`;
6282
+ };
6283
+ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6251
6284
  indirect() {
6252
6285
  let degree = Math.abs(this.pathN?.degree ?? 0);
6253
6286
  if (degree > 0) {
6254
6287
  degree = degree - 1;
6255
6288
  }
6256
- if (degree === 1) {
6257
- return `Cousin`;
6289
+ const sex = sexOf(this.personN);
6290
+ const cousin = pick(sex, "Cousin", "Cousine", "Cousin/Cousine");
6291
+ if (degree <= 1) {
6292
+ return cousin;
6258
6293
  }
6259
- return `Cousin ${degree}. Grades`;
6294
+ return `${cousin} ${degree}. Grades`;
6260
6295
  }
6261
6296
  removal() {
6262
6297
  const level = this.pathN?.level ?? 0;
@@ -6267,106 +6302,106 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6267
6302
  if (!degree) {
6268
6303
  return level < 0 ? this.nibling() : this.auncle();
6269
6304
  }
6270
- return `Cousin ${degree}. Grades ${Math.abs(level)}\xD7 entfernt`;
6305
+ return `${this.indirect()} ${Math.abs(level)}\xD7 entfernt`;
6271
6306
  }
6272
6307
  auncle() {
6273
- const prefix = this.directPrefix();
6274
- if (this.personN?.isMale()) {
6275
- return `${prefix}onkel`;
6276
- }
6277
- if (this.personN?.isFemale()) {
6278
- return `${prefix}tante`;
6308
+ const level = Math.abs(this.pathN?.level ?? 0);
6309
+ const sex = sexOf(this.personN);
6310
+ if (level <= 1) {
6311
+ return pick(sex, "Onkel", "Tante", "Onkel/Tante");
6279
6312
  }
6280
- return `${prefix}onkel/tante`;
6313
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6314
+ return pick(
6315
+ sex,
6316
+ `${prefix}onkel`,
6317
+ `${prefix}tante`,
6318
+ `${prefix}onkel/tante`
6319
+ );
6281
6320
  }
6282
6321
  nibling() {
6283
- const prefix = this.directPrefix();
6284
- if (this.personN?.isMale()) {
6285
- return `${prefix}neffe`;
6286
- }
6287
- if (this.personN?.isFemale()) {
6288
- return `${prefix}nichte`;
6322
+ const level = Math.abs(this.pathN?.level ?? 0);
6323
+ const sex = sexOf(this.personN);
6324
+ if (level <= 1) {
6325
+ return pick(sex, "Neffe", "Nichte", "Neffe/Nichte");
6289
6326
  }
6290
- return `${prefix}neffe/nichte`;
6327
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6328
+ return pick(
6329
+ sex,
6330
+ `${prefix}neffe`,
6331
+ `${prefix}nichte`,
6332
+ `${prefix}neffe/nichte`
6333
+ );
6291
6334
  }
6292
6335
  parent() {
6293
- const prefix = this.directPrefix();
6294
- if (this.personN?.isMale()) {
6295
- return `${prefix}vater`;
6296
- }
6297
- if (this.personN?.isFemale()) {
6298
- return `${prefix}mutter`;
6336
+ const level = Math.abs(this.pathN?.level ?? 0);
6337
+ const sex = sexOf(this.personN);
6338
+ if (level <= 1) {
6339
+ return pick(sex, "Vater", "Mutter", "Elternteil");
6299
6340
  }
6300
- return `${prefix}elternteil`;
6341
+ const prefix = `${ur(level - 2)}Gro\xDF`;
6342
+ return pick(
6343
+ sex,
6344
+ `${prefix}vater`,
6345
+ `${prefix}mutter`,
6346
+ `${prefix}elternteil`
6347
+ );
6301
6348
  }
6302
6349
  child() {
6303
- const prefix = this.directPrefix();
6304
- if (this.personN?.isMale()) {
6305
- return `${prefix}sohn`;
6306
- }
6307
- if (this.personN?.isFemale()) {
6308
- return `${prefix}tochter`;
6350
+ const level = Math.abs(this.pathN?.level ?? 0);
6351
+ const sex = sexOf(this.personN);
6352
+ if (level <= 1) {
6353
+ return pick(sex, "Sohn", "Tochter", "Kind");
6309
6354
  }
6310
- return `${prefix}kind`;
6355
+ const prefix = ur(level - 2);
6356
+ return pick(
6357
+ sex,
6358
+ `${prefix}Enkel`,
6359
+ `${prefix}Enkelin`,
6360
+ `${prefix}Enkelkind`
6361
+ );
6311
6362
  }
6312
6363
  sibling() {
6313
- if (this.personN?.isMale()) {
6314
- return "bruder";
6315
- }
6316
- if (this.personN?.isFemale()) {
6317
- return "schwester";
6318
- }
6319
- return "geschwister";
6364
+ return pick(sexOf(this.personN), "Bruder", "Schwester", "Geschwister");
6320
6365
  }
6321
6366
  halfBlood(relation) {
6322
6367
  if (!relation || !this.isHalfBlood) {
6323
6368
  return relation ?? "";
6324
6369
  }
6325
- if (/^[A-ZÄÖÜ]/.test(relation) || /[-\s]/.test(relation)) {
6370
+ if (/[\s-]/.test(relation) || /^(Groß|Ur)/.test(relation)) {
6326
6371
  return `Halb-${relation}`;
6327
6372
  }
6328
- return `Halb${relation}`;
6373
+ return `Halb${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
6329
6374
  }
6330
6375
  spouse() {
6331
- if (this.personN?.isMale()) {
6332
- return "Ehemann";
6333
- }
6334
- if (this.personN?.isFemale()) {
6335
- return "Ehefrau";
6336
- }
6337
- return "Ehepartner";
6376
+ return pick(sexOf(this.personN), "Ehemann", "Ehefrau", "Ehepartner");
6338
6377
  }
6339
6378
  ofSpouse(relation) {
6340
6379
  if (!relation) {
6341
6380
  return "";
6342
6381
  }
6343
- const spouse = this.path?.[1].indi;
6344
- let spouseType = "Ehepartner";
6345
- if (spouse?.isMale()) {
6346
- spouseType = "Ehemann";
6347
- }
6348
- if (spouse?.isFemale()) {
6349
- spouseType = "Ehefrau";
6350
- }
6351
- return `${relation} des ${spouseType}s`;
6382
+ const spouseType = pick(
6383
+ sexOf(this.path?.[1].indi),
6384
+ "Ehemann",
6385
+ "Ehefrau",
6386
+ "Ehepartner"
6387
+ );
6388
+ return `${relation} ${genitiveArticle(spouseType)}`;
6352
6389
  }
6353
6390
  spouseOf(relation) {
6354
6391
  if (!relation) {
6355
6392
  return "";
6356
6393
  }
6357
- const spouse = this.path?.[this.path.length - 1].indi;
6358
- let spouseType = "Ehepartner";
6359
- if (spouse?.isMale()) {
6360
- spouseType = "Ehemann";
6361
- }
6362
- if (spouse?.isFemale()) {
6363
- spouseType = "Ehefrau";
6364
- }
6394
+ const spouseType = pick(
6395
+ sexOf(this.path?.[this.path.length - 1].indi),
6396
+ "Ehemann",
6397
+ "Ehefrau",
6398
+ "Ehepartner"
6399
+ );
6365
6400
  return `${spouseType} von ${relation}`;
6366
6401
  }
6367
6402
  of(relation) {
6368
6403
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6369
- nameOrder: "first-last"
6404
+ nameOrder: this.nameOrder
6370
6405
  });
6371
6406
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6372
6407
  if (this.displayName === "none") {
@@ -6379,8 +6414,8 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6379
6414
  if (!name || !relation) {
6380
6415
  return relation ?? "";
6381
6416
  }
6382
- if (relation.includes(" des ") || relation.includes(" von ")) {
6383
- return relation.replace(/ (des|von) /, ` $1 ${name}s `);
6417
+ if (relation.includes(" des ") || relation.includes(" der ") || relation.includes(" von ")) {
6418
+ return relation.replace(/ (des|der|von) /, ` $1 ${name}s `);
6384
6419
  }
6385
6420
  return `${name}s ${relation}`;
6386
6421
  }
@@ -6410,50 +6445,82 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
6410
6445
  if (!relation || !this.pathN?.relation) {
6411
6446
  return relation ?? "";
6412
6447
  }
6413
- return `${this.pathN.relation} ${relation}`;
6448
+ const prefix = parentRelationsDe[this.pathN.relation];
6449
+ if (!prefix) {
6450
+ return relation;
6451
+ }
6452
+ if (prefix.endsWith("-") || prefix.endsWith(" ")) {
6453
+ return `${prefix}${relation}`;
6454
+ }
6455
+ return `${prefix}${relation.charAt(0).toLowerCase()}${relation.slice(1)}`;
6414
6456
  }
6415
6457
  };
6416
6458
 
6417
6459
  // src/kinship-translator/patterns.fr.ts
6460
+ var parentRelationsFr = {
6461
+ step: "step",
6462
+ foster: "foster",
6463
+ adopted: "adopted"
6464
+ };
6418
6465
  var InLawsFr = {
6419
6466
  "conjoint de (enfant|fille|fils)": "beau-fils/belle-fille",
6420
6467
  "\xE9pouse de (enfant|fille|fils)": "belle-fille",
6421
6468
  "mari de (enfant|fille|fils)": "gendre",
6422
- "m\xE8re du (conjoint|\xE9pouse|mari)": "belle-m\xE8re",
6423
- "p\xE8re du (conjoint|\xE9pouse|mari)": "beau-p\xE8re",
6424
- "parent du (conjoint|\xE9pouse|mari)": "beau-parent",
6469
+ "m\xE8re (du mari|du conjoint|de l'\xE9pouse)": "belle-m\xE8re",
6470
+ "p\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-p\xE8re",
6471
+ "parent (du mari|du conjoint|de l'\xE9pouse)": "beau-parent",
6425
6472
  "\xE9pouse de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "belle-s\u0153ur",
6426
6473
  "mari de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re",
6427
6474
  "conjoint de (demi-)?(fr\xE8re/s\u0153ur|s\u0153ur|fr\xE8re)": "beau-fr\xE8re/belle-s\u0153ur",
6428
- "(demi-)?s\u0153ur du (conjoint|\xE9pouse|mari)": "belle-s\u0153ur",
6429
- "(demi-)?fr\xE8re du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re",
6430
- "(demi-)?fr\xE8re/s\u0153ur du (conjoint|\xE9pouse|mari)": "beau-fr\xE8re/belle-s\u0153ur"
6475
+ "(demi-)?s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "belle-s\u0153ur",
6476
+ "(demi-)?fr\xE8re (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re",
6477
+ "(demi-)?fr\xE8re/s\u0153ur (du mari|du conjoint|de l'\xE9pouse)": "beau-fr\xE8re/belle-s\u0153ur"
6431
6478
  };
6432
6479
 
6433
6480
  // src/kinship-translator/kinship-translator.fr.ts
6434
- var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6435
- directPrefix() {
6436
- const level = Math.abs(this.pathN?.level ?? 0);
6437
- if (level <= 1) {
6438
- return "";
6439
- }
6440
- if (level === 2) {
6441
- return "grand-";
6442
- }
6443
- if (level === 3) {
6444
- return "arri\xE8re-grand-";
6445
- }
6446
- return `arri\xE8re${level - 2}-grand-`;
6481
+ var sexOf2 = (person) => {
6482
+ if (person?.isMale?.()) {
6483
+ return "m";
6484
+ }
6485
+ if (person?.isFemale?.()) {
6486
+ return "f";
6447
6487
  }
6488
+ return "n";
6489
+ };
6490
+ var pick2 = (sex, male, female, neutral) => {
6491
+ if (sex === "m") {
6492
+ return male;
6493
+ }
6494
+ if (sex === "f") {
6495
+ return female;
6496
+ }
6497
+ return neutral;
6498
+ };
6499
+ var arriere = (count) => count > 0 ? "arri\xE8re-".repeat(count) : "";
6500
+ var frenchOrdinal = (n) => n === 1 ? "1er" : `${n}e`;
6501
+ var isFeminineRelation = (relation) => /mère|fille|sœur|tante|nièce|cousine|épouse/.test(relation);
6502
+ var ofSpousePrep = (spouseType) => {
6503
+ if (spouseType === "\xE9pouse") {
6504
+ return "de l'";
6505
+ }
6506
+ return "du ";
6507
+ };
6508
+ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6448
6509
  indirect() {
6449
6510
  let degree = Math.abs(this.pathN?.degree ?? 0);
6450
6511
  if (degree > 0) {
6451
6512
  degree = degree - 1;
6452
6513
  }
6453
- if (degree === 1) {
6454
- return `cousin`;
6514
+ const cousin = pick2(
6515
+ sexOf2(this.personN),
6516
+ "cousin",
6517
+ "cousine",
6518
+ "cousin/cousine"
6519
+ );
6520
+ if (degree <= 1) {
6521
+ return cousin;
6455
6522
  }
6456
- return `cousin au ${ordinalize(degree)} degr\xE9`;
6523
+ return `${cousin} au ${frenchOrdinal(degree)} degr\xE9`;
6457
6524
  }
6458
6525
  removal() {
6459
6526
  const level = this.pathN?.level ?? 0;
@@ -6464,56 +6531,57 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6464
6531
  if (!degree) {
6465
6532
  return level < 0 ? this.nibling() : this.auncle();
6466
6533
  }
6467
- return `cousin au ${ordinalize(degree)} degr\xE9 ${Math.abs(level)}\xD7 \xE9loign\xE9`;
6534
+ return `${this.indirect()} ${Math.abs(level)}\xD7 \xE9loign\xE9`;
6468
6535
  }
6469
6536
  auncle() {
6470
- const prefix = this.directPrefix();
6471
- if (this.personN?.isMale()) {
6472
- return `${prefix}oncle`;
6473
- }
6474
- if (this.personN?.isFemale()) {
6475
- return `${prefix}tante`;
6537
+ const level = Math.abs(this.pathN?.level ?? 0);
6538
+ const sex = sexOf2(this.personN);
6539
+ const base = pick2(sex, "oncle", "tante", "oncle/tante");
6540
+ if (level <= 1) {
6541
+ return base;
6476
6542
  }
6477
- return `${prefix}oncle/tante`;
6543
+ const grands = pick2(
6544
+ sex,
6545
+ "grand-oncle",
6546
+ "grand-tante",
6547
+ "grand-oncle/tante"
6548
+ );
6549
+ return `${arriere(level - 2)}${grands}`;
6478
6550
  }
6479
6551
  nibling() {
6480
- const prefix = this.directPrefix();
6481
- if (this.personN?.isMale()) {
6482
- return `${prefix}neveu`;
6483
- }
6484
- if (this.personN?.isFemale()) {
6485
- return `${prefix}ni\xE8ce`;
6552
+ const level = Math.abs(this.pathN?.level ?? 0);
6553
+ const sex = sexOf2(this.personN);
6554
+ if (level <= 1) {
6555
+ return pick2(sex, "neveu", "ni\xE8ce", "neveu/ni\xE8ce");
6486
6556
  }
6487
- return `${prefix}neveu/ni\xE8ce`;
6557
+ const grands = pick2(
6558
+ sex,
6559
+ "grand-neveu",
6560
+ "grande-ni\xE8ce",
6561
+ "grand-neveu/grande-ni\xE8ce"
6562
+ );
6563
+ return `${arriere(level - 2)}${grands}`;
6488
6564
  }
6489
6565
  parent() {
6490
- const prefix = this.directPrefix();
6491
- if (this.personN?.isMale()) {
6492
- return `${prefix}p\xE8re`;
6493
- }
6494
- if (this.personN?.isFemale()) {
6495
- return `${prefix}m\xE8re`;
6566
+ const level = Math.abs(this.pathN?.level ?? 0);
6567
+ const sex = sexOf2(this.personN);
6568
+ if (level <= 1) {
6569
+ return pick2(sex, "p\xE8re", "m\xE8re", "parent");
6496
6570
  }
6497
- return `${prefix}parent`;
6571
+ const grands = pick2(sex, "grand-p\xE8re", "grand-m\xE8re", "grand-parent");
6572
+ return `${arriere(level - 2)}${grands}`;
6498
6573
  }
6499
6574
  child() {
6500
- const prefix = this.directPrefix();
6501
- if (this.personN?.isMale()) {
6502
- return `${prefix}fils`;
6503
- }
6504
- if (this.personN?.isFemale()) {
6505
- return `${prefix}fille`;
6575
+ const level = Math.abs(this.pathN?.level ?? 0);
6576
+ const sex = sexOf2(this.personN);
6577
+ if (level <= 1) {
6578
+ return pick2(sex, "fils", "fille", "enfant");
6506
6579
  }
6507
- return `${prefix}enfant`;
6580
+ const petits = pick2(sex, "petit-fils", "petite-fille", "petit-enfant");
6581
+ return `${arriere(level - 2)}${petits}`;
6508
6582
  }
6509
6583
  sibling() {
6510
- if (this.personN?.isMale()) {
6511
- return "fr\xE8re";
6512
- }
6513
- if (this.personN?.isFemale()) {
6514
- return "s\u0153ur";
6515
- }
6516
- return "fr\xE8re/s\u0153ur";
6584
+ return pick2(sexOf2(this.personN), "fr\xE8re", "s\u0153ur", "fr\xE8re/s\u0153ur");
6517
6585
  }
6518
6586
  halfBlood(relation) {
6519
6587
  if (!relation || !this.isHalfBlood) {
@@ -6522,45 +6590,35 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6522
6590
  return `demi-${relation}`;
6523
6591
  }
6524
6592
  spouse() {
6525
- if (this.personN?.isMale()) {
6526
- return "mari";
6527
- }
6528
- if (this.personN?.isFemale()) {
6529
- return "\xE9pouse";
6530
- }
6531
- return "conjoint";
6593
+ return pick2(sexOf2(this.personN), "mari", "\xE9pouse", "conjoint");
6532
6594
  }
6533
6595
  ofSpouse(relation) {
6534
6596
  if (!relation) {
6535
6597
  return "";
6536
6598
  }
6537
- const spouse = this.path?.[1].indi;
6538
- let spouseType = "conjoint";
6539
- if (spouse?.isMale()) {
6540
- spouseType = "mari";
6541
- }
6542
- if (spouse?.isFemale()) {
6543
- spouseType = "\xE9pouse";
6544
- }
6545
- return `${relation} du ${spouseType}`;
6599
+ const spouseType = pick2(
6600
+ sexOf2(this.path?.[1].indi),
6601
+ "mari",
6602
+ "\xE9pouse",
6603
+ "conjoint"
6604
+ );
6605
+ return `${relation} ${ofSpousePrep(spouseType)}${spouseType}`;
6546
6606
  }
6547
6607
  spouseOf(relation) {
6548
6608
  if (!relation) {
6549
6609
  return "";
6550
6610
  }
6551
- const spouse = this.path?.[this.path.length - 1].indi;
6552
- let spouseType = "conjoint";
6553
- if (spouse?.isMale()) {
6554
- spouseType = "mari";
6555
- }
6556
- if (spouse?.isFemale()) {
6557
- spouseType = "\xE9pouse";
6558
- }
6611
+ const spouseType = pick2(
6612
+ sexOf2(this.path?.[this.path.length - 1].indi),
6613
+ "mari",
6614
+ "\xE9pouse",
6615
+ "conjoint"
6616
+ );
6559
6617
  return `${spouseType} de ${relation}`;
6560
6618
  }
6561
6619
  of(relation) {
6562
6620
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6563
- nameOrder: "first-last"
6621
+ nameOrder: this.nameOrder
6564
6622
  });
6565
6623
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6566
6624
  if (this.displayName === "none") {
@@ -6576,6 +6634,9 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6576
6634
  if (relation.includes(" du ") || relation.includes(" de ")) {
6577
6635
  return relation.replace(/ (du|de) /, ` $1 ${name} `);
6578
6636
  }
6637
+ if (relation.includes(" de l'")) {
6638
+ return relation.replace(" de l'", ` de ${name} l'`);
6639
+ }
6579
6640
  return `${relation} de ${name}`;
6580
6641
  }
6581
6642
  inLaw(relation) {
@@ -6604,50 +6665,118 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
6604
6665
  if (!relation || !this.pathN?.relation) {
6605
6666
  return relation ?? "";
6606
6667
  }
6607
- return `${this.pathN.relation} ${relation}`;
6668
+ const kind = parentRelationsFr[this.pathN.relation];
6669
+ if (!kind) {
6670
+ return relation;
6671
+ }
6672
+ if (kind === "step") {
6673
+ return `${isFeminineRelation(relation) ? "belle-" : "beau-"}${relation}`;
6674
+ }
6675
+ if (kind === "adopted") {
6676
+ return `${relation} ${isFeminineRelation(relation) ? "adoptive" : "adoptif"}`;
6677
+ }
6678
+ if (kind === "foster") {
6679
+ return `${relation} d'accueil`;
6680
+ }
6681
+ return relation;
6608
6682
  }
6609
6683
  };
6610
6684
 
6611
6685
  // src/kinship-translator/patterns.es.ts
6686
+ var parentRelationsEs = {
6687
+ step: {
6688
+ padre: "padrastro",
6689
+ madre: "madrastra",
6690
+ hijo: "hijastro",
6691
+ hija: "hijastra",
6692
+ hermano: "hermanastro",
6693
+ hermana: "hermanastra",
6694
+ abuelo: "abuelastro",
6695
+ abuela: "abuelastra"
6696
+ }
6697
+ };
6612
6698
  var InLawsEs = {
6613
6699
  "c\xF3nyuge de (hijo/hija|hija|hijo)": "yerno/nuera",
6614
6700
  "esposa de (hijo/hija|hija|hijo)": "nuera",
6615
6701
  "esposo de (hijo/hija|hija|hijo)": "yerno",
6616
- "madre del (c\xF3nyuge|esposa|esposo)": "suegra",
6617
- "padre del (c\xF3nyuge|esposa|esposo)": "suegro",
6618
- "padre/madre del (c\xF3nyuge|esposa|esposo)": "suegro/suegra",
6702
+ "madre (del c\xF3nyuge|del esposo|de la esposa)": "suegra",
6703
+ "padre (del c\xF3nyuge|del esposo|de la esposa)": "suegro",
6704
+ "padre/madre (del c\xF3nyuge|del esposo|de la esposa)": "suegro/suegra",
6619
6705
  "esposa de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
6620
6706
  "esposo de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
6621
6707
  "c\xF3nyuge de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
6622
- "(medio |media |medio/a )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
6623
- "(medio |media |medio/a )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
6624
- "(medio |media |medio/a )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
6708
+ "(medio |media |medio/a )?hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ada",
6709
+ "(medio |media |medio/a )?hermano (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado",
6710
+ "(medio |media |medio/a )?hermano/hermana (del c\xF3nyuge|del esposo|de la esposa)": "cu\xF1ado/cu\xF1ada"
6625
6711
  };
6626
6712
 
6627
6713
  // src/kinship-translator/kinship-translator.es.ts
6628
- var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6629
- directPrefix() {
6630
- const level = Math.abs(this.pathN?.level ?? 0);
6631
- if (level <= 1) {
6632
- return "";
6633
- }
6634
- if (level === 2) {
6635
- return "bisabuel";
6636
- }
6637
- if (level === 3) {
6638
- return "tatarabuel";
6639
- }
6640
- return `t\xE1tara${level - 2}-abuel`;
6714
+ var sexOf3 = (person) => {
6715
+ if (person?.isMale?.()) {
6716
+ return "m";
6641
6717
  }
6718
+ if (person?.isFemale?.()) {
6719
+ return "f";
6720
+ }
6721
+ return "n";
6722
+ };
6723
+ var pick3 = (sex, male, female, neutral) => {
6724
+ if (sex === "m") {
6725
+ return male;
6726
+ }
6727
+ if (sex === "f") {
6728
+ return female;
6729
+ }
6730
+ return neutral;
6731
+ };
6732
+ var SPANISH_ORDINALS_M = [
6733
+ "",
6734
+ "",
6735
+ "segundo",
6736
+ "tercero",
6737
+ "cuarto",
6738
+ "quinto",
6739
+ "sexto",
6740
+ "s\xE9ptimo",
6741
+ "octavo",
6742
+ "noveno",
6743
+ "d\xE9cimo"
6744
+ ];
6745
+ var SPANISH_ORDINALS_F = [
6746
+ "",
6747
+ "",
6748
+ "segunda",
6749
+ "tercera",
6750
+ "cuarta",
6751
+ "quinta",
6752
+ "sexta",
6753
+ "s\xE9ptima",
6754
+ "octava",
6755
+ "novena",
6756
+ "d\xE9cima"
6757
+ ];
6758
+ var spanishOrdinal = (n, sex) => {
6759
+ const list = sex === "f" ? SPANISH_ORDINALS_F : SPANISH_ORDINALS_M;
6760
+ return list[n] ?? `${n}.\xBA`;
6761
+ };
6762
+ var ofSpousePrep2 = (spouseType) => {
6763
+ if (spouseType === "esposa") {
6764
+ return "de la ";
6765
+ }
6766
+ return "del ";
6767
+ };
6768
+ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6642
6769
  indirect() {
6643
6770
  let degree = Math.abs(this.pathN?.degree ?? 0);
6644
6771
  if (degree > 0) {
6645
6772
  degree = degree - 1;
6646
6773
  }
6647
- if (degree === 1) {
6648
- return `primo`;
6774
+ const sex = sexOf3(this.personN);
6775
+ const cousin = pick3(sex, "primo", "prima", "primo/prima");
6776
+ if (degree <= 1) {
6777
+ return cousin;
6649
6778
  }
6650
- return `primo ${ordinalize(degree)}`;
6779
+ return `${cousin} ${spanishOrdinal(degree, sex)}`;
6651
6780
  }
6652
6781
  removal() {
6653
6782
  const level = this.pathN?.level ?? 0;
@@ -6658,56 +6787,133 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6658
6787
  if (!degree) {
6659
6788
  return level < 0 ? this.nibling() : this.auncle();
6660
6789
  }
6661
- return `primo ${ordinalize(degree)} ${Math.abs(level)}\xD7 separado`;
6790
+ return `${this.indirect()} ${Math.abs(level)}\xD7 separado`;
6662
6791
  }
6663
6792
  auncle() {
6664
- const prefix = this.directPrefix();
6665
- if (this.personN?.isMale()) {
6666
- return `${prefix}t\xEDo`;
6793
+ const level = Math.abs(this.pathN?.level ?? 0);
6794
+ const sex = sexOf3(this.personN);
6795
+ if (level <= 1) {
6796
+ return pick3(sex, "t\xEDo", "t\xEDa", "t\xEDo/t\xEDa");
6667
6797
  }
6668
- if (this.personN?.isFemale()) {
6669
- return `${prefix}t\xEDa`;
6798
+ if (level === 2) {
6799
+ return pick3(sex, "t\xEDo abuelo", "t\xEDa abuela", "t\xEDo/t\xEDa abuelo");
6800
+ }
6801
+ if (level === 3) {
6802
+ return pick3(
6803
+ sex,
6804
+ "t\xEDo bisabuelo",
6805
+ "t\xEDa bisabuela",
6806
+ "t\xEDo/t\xEDa bisabuelo"
6807
+ );
6670
6808
  }
6671
- return `${prefix}t\xEDo/t\xEDa`;
6809
+ return pick3(
6810
+ sex,
6811
+ `t\xEDo abuelo (${level - 1}.\xBA)`,
6812
+ `t\xEDa abuela (${level - 1}.\xAA)`,
6813
+ `t\xEDo/t\xEDa abuelo (${level - 1}.\xBA)`
6814
+ );
6672
6815
  }
6673
6816
  nibling() {
6674
- const prefix = this.directPrefix();
6675
- if (this.personN?.isMale()) {
6676
- return `${prefix}sobrino`;
6817
+ const level = Math.abs(this.pathN?.level ?? 0);
6818
+ const sex = sexOf3(this.personN);
6819
+ if (level <= 1) {
6820
+ return pick3(sex, "sobrino", "sobrina", "sobrino/sobrina");
6677
6821
  }
6678
- if (this.personN?.isFemale()) {
6679
- return `${prefix}sobrina`;
6822
+ if (level === 2) {
6823
+ return pick3(
6824
+ sex,
6825
+ "sobrino nieto",
6826
+ "sobrina nieta",
6827
+ "sobrino/sobrina nieto"
6828
+ );
6829
+ }
6830
+ if (level === 3) {
6831
+ return pick3(
6832
+ sex,
6833
+ "sobrino bisnieto",
6834
+ "sobrina bisnieta",
6835
+ "sobrino/sobrina bisnieto"
6836
+ );
6680
6837
  }
6681
- return `${prefix}sobrino/sobrina`;
6838
+ return pick3(
6839
+ sex,
6840
+ `sobrino nieto (${level - 1}.\xBA)`,
6841
+ `sobrina nieta (${level - 1}.\xAA)`,
6842
+ `sobrino/sobrina nieto (${level - 1}.\xBA)`
6843
+ );
6682
6844
  }
6683
6845
  parent() {
6684
- const prefix = this.directPrefix();
6685
- if (this.personN?.isMale()) {
6686
- return `${prefix}padre`;
6846
+ const level = Math.abs(this.pathN?.level ?? 0);
6847
+ const sex = sexOf3(this.personN);
6848
+ if (level <= 1) {
6849
+ return pick3(sex, "padre", "madre", "padre/madre");
6687
6850
  }
6688
- if (this.personN?.isFemale()) {
6689
- return `${prefix}madre`;
6851
+ if (level === 2) {
6852
+ return pick3(sex, "abuelo", "abuela", "abuelo/abuela");
6853
+ }
6854
+ if (level === 3) {
6855
+ return pick3(sex, "bisabuelo", "bisabuela", "bisabuelo/bisabuela");
6856
+ }
6857
+ if (level === 4) {
6858
+ return pick3(
6859
+ sex,
6860
+ "tatarabuelo",
6861
+ "tatarabuela",
6862
+ "tatarabuelo/tatarabuela"
6863
+ );
6864
+ }
6865
+ if (level === 5) {
6866
+ return pick3(
6867
+ sex,
6868
+ "trastatarabuelo",
6869
+ "trastatarabuela",
6870
+ "trastatarabuelo/trastatarabuela"
6871
+ );
6690
6872
  }
6691
- return `${prefix}padre/madre`;
6873
+ return pick3(
6874
+ sex,
6875
+ `abuelo (${level}.\xBA)`,
6876
+ `abuela (${level}.\xAA)`,
6877
+ `abuelo/abuela (${level}.\xBA)`
6878
+ );
6692
6879
  }
6693
6880
  child() {
6694
- const prefix = this.directPrefix();
6695
- if (this.personN?.isMale()) {
6696
- return `${prefix}hijo`;
6881
+ const level = Math.abs(this.pathN?.level ?? 0);
6882
+ const sex = sexOf3(this.personN);
6883
+ if (level <= 1) {
6884
+ return pick3(sex, "hijo", "hija", "hijo/hija");
6697
6885
  }
6698
- if (this.personN?.isFemale()) {
6699
- return `${prefix}hija`;
6886
+ if (level === 2) {
6887
+ return pick3(sex, "nieto", "nieta", "nieto/nieta");
6700
6888
  }
6701
- return `${prefix}hijo/hija`;
6702
- }
6703
- sibling() {
6704
- if (this.personN?.isMale()) {
6705
- return "hermano";
6889
+ if (level === 3) {
6890
+ return pick3(sex, "bisnieto", "bisnieta", "bisnieto/bisnieta");
6706
6891
  }
6707
- if (this.personN?.isFemale()) {
6708
- return "hermana";
6892
+ if (level === 4) {
6893
+ return pick3(
6894
+ sex,
6895
+ "tataranieto",
6896
+ "tataranieta",
6897
+ "tataranieto/tataranieta"
6898
+ );
6899
+ }
6900
+ if (level === 5) {
6901
+ return pick3(
6902
+ sex,
6903
+ "trastataranieto",
6904
+ "trastataranieta",
6905
+ "trastataranieto/trastataranieta"
6906
+ );
6709
6907
  }
6710
- return "hermano/hermana";
6908
+ return pick3(
6909
+ sex,
6910
+ `nieto (${level}.\xBA)`,
6911
+ `nieta (${level}.\xAA)`,
6912
+ `nieto/nieta (${level}.\xBA)`
6913
+ );
6914
+ }
6915
+ sibling() {
6916
+ return pick3(sexOf3(this.personN), "hermano", "hermana", "hermano/hermana");
6711
6917
  }
6712
6918
  halfBlood(relation) {
6713
6919
  if (!relation || !this.isHalfBlood) {
@@ -6722,45 +6928,35 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6722
6928
  return `medio/a ${relation}`;
6723
6929
  }
6724
6930
  spouse() {
6725
- if (this.personN?.isMale()) {
6726
- return "esposo";
6727
- }
6728
- if (this.personN?.isFemale()) {
6729
- return "esposa";
6730
- }
6731
- return "c\xF3nyuge";
6931
+ return pick3(sexOf3(this.personN), "esposo", "esposa", "c\xF3nyuge");
6732
6932
  }
6733
6933
  ofSpouse(relation) {
6734
6934
  if (!relation) {
6735
6935
  return "";
6736
6936
  }
6737
- const spouse = this.path?.[1].indi;
6738
- let spouseType = "c\xF3nyuge";
6739
- if (spouse?.isMale()) {
6740
- spouseType = "esposo";
6741
- }
6742
- if (spouse?.isFemale()) {
6743
- spouseType = "esposa";
6744
- }
6745
- return `${relation} del ${spouseType}`;
6937
+ const spouseType = pick3(
6938
+ sexOf3(this.path?.[1].indi),
6939
+ "esposo",
6940
+ "esposa",
6941
+ "c\xF3nyuge"
6942
+ );
6943
+ return `${relation} ${ofSpousePrep2(spouseType)}${spouseType}`;
6746
6944
  }
6747
6945
  spouseOf(relation) {
6748
6946
  if (!relation) {
6749
6947
  return "";
6750
6948
  }
6751
- const spouse = this.path?.[this.path.length - 1].indi;
6752
- let spouseType = "c\xF3nyuge";
6753
- if (spouse?.isMale()) {
6754
- spouseType = "esposo";
6755
- }
6756
- if (spouse?.isFemale()) {
6757
- spouseType = "esposa";
6758
- }
6949
+ const spouseType = pick3(
6950
+ sexOf3(this.path?.[this.path.length - 1].indi),
6951
+ "esposo",
6952
+ "esposa",
6953
+ "c\xF3nyuge"
6954
+ );
6759
6955
  return `${spouseType} de ${relation}`;
6760
6956
  }
6761
6957
  of(relation) {
6762
6958
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
6763
- nameOrder: "first-last"
6959
+ nameOrder: this.nameOrder
6764
6960
  });
6765
6961
  let name = formattedName.inOrder.filter(Boolean).join(" ");
6766
6962
  if (this.displayName === "none") {
@@ -6773,8 +6969,8 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6773
6969
  if (!name || !relation) {
6774
6970
  return relation ?? "";
6775
6971
  }
6776
- if (relation.includes(" del ") || relation.includes(" de ")) {
6777
- return relation.replace(/ (del|de) /, ` $1 ${name} `);
6972
+ if (relation.includes(" del ") || relation.includes(" de la ") || relation.includes(" de ")) {
6973
+ return relation.replace(/ (del|de la|de) /, ` $1 ${name} `);
6778
6974
  }
6779
6975
  return `${relation} de ${name}`;
6780
6976
  }
@@ -6804,7 +7000,20 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
6804
7000
  if (!relation || !this.pathN?.relation) {
6805
7001
  return relation ?? "";
6806
7002
  }
6807
- return `${this.pathN.relation} ${relation}`;
7003
+ const mapped = parentRelationsEs[this.pathN.relation]?.[relation];
7004
+ if (mapped) {
7005
+ return mapped;
7006
+ }
7007
+ if (this.pathN.relation === "step") {
7008
+ return `${relation} pol\xEDtico`;
7009
+ }
7010
+ if (this.pathN.relation === "adopted") {
7011
+ return `${relation} adoptivo`;
7012
+ }
7013
+ if (this.pathN.relation === "foster") {
7014
+ return `${relation} de acogida`;
7015
+ }
7016
+ return relation;
6808
7017
  }
6809
7018
  };
6810
7019
 
@@ -6813,15 +7022,35 @@ var InLawsRu = {
6813
7022
  "\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",
6814
7023
  "\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",
6815
7024
  "\u043C\u0443\u0436 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C",
6816
- "\u043C\u0430\u0442\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0451\u0449\u0430",
6817
- "\u043E\u0442\u0435\u0446 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C",
6818
- "\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",
7025
+ "\u043C\u0430\u0442\u044C \u0436\u0435\u043D\u044B": "\u0442\u0451\u0449\u0430",
7026
+ "\u043C\u0430\u0442\u044C \u043C\u0443\u0436\u0430": "\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7027
+ "\u043C\u0430\u0442\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0451\u0449\u0430/\u0441\u0432\u0435\u043A\u0440\u043E\u0432\u044C",
7028
+ "\u043E\u0442\u0435\u0446 \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C",
7029
+ "\u043E\u0442\u0435\u0446 \u043C\u0443\u0436\u0430": "\u0441\u0432\u0451\u043A\u043E\u0440",
7030
+ "\u043E\u0442\u0435\u0446 \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0441\u0432\u0451\u043A\u043E\u0440",
7031
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0436\u0435\u043D\u044B": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
7032
+ "\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",
7033
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C \u0441\u0443\u043F\u0440\u0443\u0433\u0430": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
6819
7034
  "\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",
6820
7035
  "\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",
6821
7036
  "\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",
6822
- "(\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",
6823
- "(\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",
6824
- "(\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"
7037
+ "(\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",
7038
+ "(\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",
7039
+ "(\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",
7040
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u0436\u0435\u043D\u044B": "\u0448\u0443\u0440\u0438\u043D",
7041
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 \u043C\u0443\u0436\u0430": "\u0434\u0435\u0432\u0435\u0440\u044C",
7042
+ "(\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",
7043
+ "(\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",
7044
+ "(\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",
7045
+ "(\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"
7046
+ };
7047
+ var parentRelationsRu = {
7048
+ step: {
7049
+ \u043E\u0442\u0435\u0446: "\u043E\u0442\u0447\u0438\u043C",
7050
+ \u043C\u0430\u0442\u044C: "\u043C\u0430\u0447\u0435\u0445\u0430",
7051
+ \u0441\u044B\u043D: "\u043F\u0430\u0441\u044B\u043D\u043E\u043A",
7052
+ \u0434\u043E\u0447\u044C: "\u043F\u0430\u0434\u0447\u0435\u0440\u0438\u0446\u0430"
7053
+ }
6825
7054
  };
6826
7055
 
6827
7056
  // src/kinship-translator/kinship-translator.ru.ts
@@ -6852,7 +7081,7 @@ var cousinWord = (degree, sex) => {
6852
7081
  return `${stem}\u044B\u0439 \u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430`;
6853
7082
  };
6854
7083
  var praRepeat = (count) => count > 0 ? "\u043F\u0440\u0430".repeat(count) : "";
6855
- var sexOf = (person) => {
7084
+ var sexOf4 = (person) => {
6856
7085
  if (person?.isMale?.()) {
6857
7086
  return "m";
6858
7087
  }
@@ -6867,7 +7096,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
6867
7096
  if (degree > 0) {
6868
7097
  degree = degree - 1;
6869
7098
  }
6870
- return cousinWord(degree, sexOf(this.personN));
7099
+ return cousinWord(degree, sexOf4(this.personN));
6871
7100
  }
6872
7101
  removal() {
6873
7102
  const level = this.pathN?.level ?? 0;
@@ -6879,35 +7108,53 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
6879
7108
  return level < 0 ? this.nibling() : this.auncle();
6880
7109
  }
6881
7110
  const removed = Math.abs(level);
6882
- return `${cousinWord(degree, sexOf(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
7111
+ return `${cousinWord(degree, sexOf4(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
6883
7112
  }
6884
7113
  auncle() {
6885
7114
  const level = Math.abs(this.pathN?.level ?? 0);
6886
- const pra = praRepeat(Math.max(0, level - 2));
6887
- const sex = sexOf(this.personN);
7115
+ const sex = sexOf4(this.personN);
7116
+ if (level <= 1) {
7117
+ if (sex === "m") {
7118
+ return "\u0434\u044F\u0434\u044F";
7119
+ }
7120
+ if (sex === "f") {
7121
+ return "\u0442\u0451\u0442\u044F";
7122
+ }
7123
+ return "\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F";
7124
+ }
7125
+ const pra = praRepeat(level - 2);
6888
7126
  if (sex === "m") {
6889
- return `${pra}\u0434\u044F\u0434\u044F`;
7127
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434`;
6890
7128
  }
6891
7129
  if (sex === "f") {
6892
- return `${pra}\u0442\u0451\u0442\u044F`;
7130
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u0430\u044F ${pra}\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
6893
7131
  }
6894
- return `${pra}\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F`;
7132
+ return `\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D\u044B\u0439 ${pra}\u0434\u0435\u0434/\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
6895
7133
  }
6896
7134
  nibling() {
6897
7135
  const level = Math.abs(this.pathN?.level ?? 0);
6898
- const pra = praRepeat(Math.max(0, level - 2));
6899
- const sex = sexOf(this.personN);
7136
+ const sex = sexOf4(this.personN);
7137
+ if (level <= 1) {
7138
+ if (sex === "m") {
7139
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A";
7140
+ }
7141
+ if (sex === "f") {
7142
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
7143
+ }
7144
+ return "\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430";
7145
+ }
7146
+ const pra = praRepeat(level - 2);
6900
7147
  if (sex === "m") {
6901
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
7148
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u044B\u0439 \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
6902
7149
  }
6903
7150
  if (sex === "f") {
6904
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7151
+ return `${pra}\u0432\u043D\u0443\u0447\u0430\u0442\u0430\u044F \u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
6905
7152
  }
6906
- return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
7153
+ 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`;
6907
7154
  }
6908
7155
  parent() {
6909
7156
  const level = Math.abs(this.pathN?.level ?? 0);
6910
- const sex = sexOf(this.personN);
7157
+ const sex = sexOf4(this.personN);
6911
7158
  if (level <= 1) {
6912
7159
  if (sex === "m") {
6913
7160
  return "\u043E\u0442\u0435\u0446";
@@ -6937,7 +7184,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
6937
7184
  }
6938
7185
  child() {
6939
7186
  const level = Math.abs(this.pathN?.level ?? 0);
6940
- const sex = sexOf(this.personN);
7187
+ const sex = sexOf4(this.personN);
6941
7188
  if (level <= 1) {
6942
7189
  if (sex === "m") {
6943
7190
  return "\u0441\u044B\u043D";
@@ -6966,14 +7213,14 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
6966
7213
  return `${pra}\u0432\u043D\u0443\u043A/\u0432\u043D\u0443\u0447\u043A\u0430`;
6967
7214
  }
6968
7215
  sibling() {
6969
- const sex = sexOf(this.personN);
7216
+ const sex = sexOf4(this.personN);
6970
7217
  if (sex === "m") {
6971
7218
  return "\u0431\u0440\u0430\u0442";
6972
7219
  }
6973
7220
  if (sex === "f") {
6974
7221
  return "\u0441\u0435\u0441\u0442\u0440\u0430";
6975
7222
  }
6976
- return "\u0441\u0438\u0431\u043B\u0438\u043D\u0433";
7223
+ return "\u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430";
6977
7224
  }
6978
7225
  halfBlood(relation) {
6979
7226
  if (!relation || !this.isHalfBlood) {
@@ -6987,7 +7234,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
6987
7234
  return `\u0441\u0432\u043E\u0434\u043D\u044B\u0439 ${relation}`;
6988
7235
  }
6989
7236
  spouse() {
6990
- const sex = sexOf(this.personN);
7237
+ const sex = sexOf4(this.personN);
6991
7238
  if (sex === "m") {
6992
7239
  return "\u043C\u0443\u0436";
6993
7240
  }
@@ -7001,7 +7248,7 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7001
7248
  return "";
7002
7249
  }
7003
7250
  const spouse = this.path?.[1].indi;
7004
- const sex = sexOf(spouse);
7251
+ const sex = sexOf4(spouse);
7005
7252
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
7006
7253
  return `${relation} ${toGenitive(spouseType)}`;
7007
7254
  }
@@ -7010,13 +7257,13 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7010
7257
  return "";
7011
7258
  }
7012
7259
  const spouse = this.path?.[this.path.length - 1].indi;
7013
- const sex = sexOf(spouse);
7260
+ const sex = sexOf4(spouse);
7014
7261
  const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
7015
7262
  return `${spouseType} ${toGenitive(relation)}`;
7016
7263
  }
7017
7264
  of(relation) {
7018
7265
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7019
- nameOrder: "first-last"
7266
+ nameOrder: this.nameOrder
7020
7267
  });
7021
7268
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7022
7269
  if (this.displayName === "none") {
@@ -7047,7 +7294,22 @@ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
7047
7294
  if (!relation || !this.pathN?.relation) {
7048
7295
  return relation ?? "";
7049
7296
  }
7050
- return `${this.pathN.relation} ${relation}`;
7297
+ const mapped = parentRelationsRu[this.pathN.relation]?.[relation];
7298
+ if (mapped) {
7299
+ return mapped;
7300
+ }
7301
+ if (this.pathN.relation === "step") {
7302
+ return `\u043D\u0435\u0440\u043E\u0434\u043D\u043E\u0439 ${relation}`;
7303
+ }
7304
+ if (this.pathN.relation === "adopted") {
7305
+ return /сестра|дочь|мать|тётя|бабушка|жена|племянница|внучка/.test(
7306
+ relation
7307
+ ) ? `\u043F\u0440\u0438\u0451\u043C\u043D\u0430\u044F ${relation}` : `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
7308
+ }
7309
+ if (this.pathN.relation === "foster") {
7310
+ return `\u043F\u0440\u0438\u0451\u043C\u043D\u044B\u0439 ${relation}`;
7311
+ }
7312
+ return relation;
7051
7313
  }
7052
7314
  };
7053
7315
 
@@ -7071,7 +7333,7 @@ var InLawsJa = {
7071
7333
  };
7072
7334
 
7073
7335
  // src/kinship-translator/kinship-translator.ja.ts
7074
- var sexOf2 = (person) => {
7336
+ var sexOf5 = (person) => {
7075
7337
  if (person?.isMale?.()) {
7076
7338
  return "m";
7077
7339
  }
@@ -7080,7 +7342,7 @@ var sexOf2 = (person) => {
7080
7342
  }
7081
7343
  return "n";
7082
7344
  };
7083
- var pick = (sex, male, female, neutral) => {
7345
+ var pick4 = (sex, male, female, neutral) => {
7084
7346
  if (sex === "m") {
7085
7347
  return male;
7086
7348
  }
@@ -7093,18 +7355,18 @@ var lineal = (level, sex, kind) => {
7093
7355
  const L = Math.max(1, level);
7094
7356
  if (kind === "asc") {
7095
7357
  if (L <= 1) {
7096
- return pick(sex, "\u7236", "\u6BCD", "\u89AA");
7358
+ return pick4(sex, "\u7236", "\u6BCD", "\u89AA");
7097
7359
  }
7098
7360
  if (L === 2) {
7099
- return pick(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7361
+ return pick4(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7100
7362
  }
7101
7363
  if (L === 3) {
7102
- return pick(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7364
+ return pick4(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7103
7365
  }
7104
7366
  if (L === 4) {
7105
- return pick(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7367
+ return pick4(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7106
7368
  }
7107
- return pick(
7369
+ return pick4(
7108
7370
  sex,
7109
7371
  `${L - 1}\u4E16\u306E\u7956\u7236`,
7110
7372
  `${L - 1}\u4E16\u306E\u7956\u6BCD`,
@@ -7112,7 +7374,7 @@ var lineal = (level, sex, kind) => {
7112
7374
  );
7113
7375
  }
7114
7376
  if (L <= 1) {
7115
- return pick(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
7377
+ return pick4(sex, "\u606F\u5B50", "\u5A18", "\u5B50");
7116
7378
  }
7117
7379
  if (L === 2) {
7118
7380
  return "\u5B6B";
@@ -7159,52 +7421,52 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7159
7421
  }
7160
7422
  auncle() {
7161
7423
  const level = Math.abs(this.pathN?.level ?? 0);
7162
- const sex = sexOf2(this.personN);
7163
- if (level <= 2) {
7164
- return pick(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
7424
+ const sex = sexOf5(this.personN);
7425
+ if (level <= 1) {
7426
+ return pick4(sex, "\u304A\u3058", "\u304A\u3070", "\u304A\u3058/\u304A\u3070");
7165
7427
  }
7166
- if (level === 3) {
7167
- return pick(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
7428
+ if (level === 2) {
7429
+ return pick4(sex, "\u5927\u304A\u3058", "\u5927\u304A\u3070", "\u5927\u304A\u3058/\u5927\u304A\u3070");
7168
7430
  }
7169
- return pick(
7431
+ return pick4(
7170
7432
  sex,
7171
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058`,
7172
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3070`,
7173
- `${level - 2}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
7433
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058`,
7434
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3070`,
7435
+ `${level - 1}\u4EE3\u524D\u306E\u304A\u3058/\u304A\u3070`
7174
7436
  );
7175
7437
  }
7176
7438
  nibling() {
7177
7439
  const level = Math.abs(this.pathN?.level ?? 0);
7178
- const sex = sexOf2(this.personN);
7179
- if (level <= 2) {
7180
- return pick(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
7440
+ const sex = sexOf5(this.personN);
7441
+ if (level <= 1) {
7442
+ return pick4(sex, "\u7525", "\u59EA", "\u7525/\u59EA");
7181
7443
  }
7182
- if (level === 3) {
7183
- return pick(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
7444
+ if (level === 2) {
7445
+ return pick4(sex, "\u5927\u7525", "\u5927\u59EA", "\u5927\u7525/\u5927\u59EA");
7184
7446
  }
7185
- return pick(
7447
+ return pick4(
7186
7448
  sex,
7187
- `${level - 2}\u4EE3\u4E0B\u306E\u7525`,
7188
- `${level - 2}\u4EE3\u4E0B\u306E\u59EA`,
7189
- `${level - 2}\u4EE3\u4E0B\u306E\u7525/\u59EA`
7449
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525`,
7450
+ `${level - 1}\u4EE3\u4E0B\u306E\u59EA`,
7451
+ `${level - 1}\u4EE3\u4E0B\u306E\u7525/\u59EA`
7190
7452
  );
7191
7453
  }
7192
7454
  parent() {
7193
7455
  return lineal(
7194
7456
  Math.abs(this.pathN?.level ?? 0),
7195
- sexOf2(this.personN),
7457
+ sexOf5(this.personN),
7196
7458
  "asc"
7197
7459
  );
7198
7460
  }
7199
7461
  child() {
7200
7462
  return lineal(
7201
7463
  Math.abs(this.pathN?.level ?? 0),
7202
- sexOf2(this.personN),
7464
+ sexOf5(this.personN),
7203
7465
  "desc"
7204
7466
  );
7205
7467
  }
7206
7468
  sibling() {
7207
- return pick(sexOf2(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
7469
+ return pick4(sexOf5(this.personN), "\u5144\u5F1F", "\u59C9\u59B9", "\u5144\u5F1F\u59C9\u59B9");
7208
7470
  }
7209
7471
  halfBlood(relation) {
7210
7472
  if (!relation || !this.isHalfBlood) {
@@ -7213,14 +7475,14 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7213
7475
  return `\u7570\u7236\u6BCD\u306E${relation}`;
7214
7476
  }
7215
7477
  spouse() {
7216
- return pick(sexOf2(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7478
+ return pick4(sexOf5(this.personN), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7217
7479
  }
7218
7480
  ofSpouse(relation) {
7219
7481
  if (!relation) {
7220
7482
  return "";
7221
7483
  }
7222
- const spouseType = pick(
7223
- sexOf2(this.path?.[1].indi),
7484
+ const spouseType = pick4(
7485
+ sexOf5(this.path?.[1].indi),
7224
7486
  "\u592B",
7225
7487
  "\u59BB",
7226
7488
  "\u914D\u5076\u8005"
@@ -7232,12 +7494,12 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7232
7494
  return "";
7233
7495
  }
7234
7496
  const spouse = this.path?.[this.path.length - 1].indi;
7235
- const spouseType = pick(sexOf2(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7497
+ const spouseType = pick4(sexOf5(spouse), "\u592B", "\u59BB", "\u914D\u5076\u8005");
7236
7498
  return `${relation}\u306E${spouseType}`;
7237
7499
  }
7238
7500
  of(relation) {
7239
7501
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7240
- nameOrder: "last-first"
7502
+ nameOrder: this.nameOrder
7241
7503
  });
7242
7504
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7243
7505
  if (this.displayName === "none") {
@@ -7268,7 +7530,28 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7268
7530
  if (!relation || !this.pathN?.relation) {
7269
7531
  return relation ?? "";
7270
7532
  }
7271
- return `${this.pathN.relation}\u306E${relation}`;
7533
+ if (this.pathN.relation === "step") {
7534
+ if (relation === "\u7236") {
7535
+ return "\u7EE7\u7236";
7536
+ }
7537
+ if (relation === "\u6BCD") {
7538
+ return "\u7D99\u6BCD";
7539
+ }
7540
+ if (relation === "\u606F\u5B50") {
7541
+ return "\u7D99\u5B50";
7542
+ }
7543
+ if (relation === "\u5A18") {
7544
+ return "\u7D99\u5A18";
7545
+ }
7546
+ return `\u7D99${relation}`;
7547
+ }
7548
+ if (this.pathN.relation === "adopted") {
7549
+ return `\u990A\u5B50\u306E${relation}`;
7550
+ }
7551
+ if (this.pathN.relation === "foster") {
7552
+ return `\u91CC\u89AA\u306E${relation}`;
7553
+ }
7554
+ return relation;
7272
7555
  }
7273
7556
  };
7274
7557
 
@@ -7277,22 +7560,32 @@ var InLawsZh = {
7277
7560
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u914D\u5076": "\u513F\u5AB3/\u5973\u5A7F",
7278
7561
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u59BB\u5B50": "\u513F\u5AB3",
7279
7562
  "(\u5B50\u5973|\u5973\u513F|\u513F\u5B50)\u7684\u4E08\u592B": "\u5973\u5A7F",
7280
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
7281
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
7282
- "(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
7563
+ "\u59BB\u5B50\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD",
7564
+ "\u4E08\u592B\u7684\u6BCD\u4EB2": "\u5A46\u5A46",
7565
+ "(\u914D\u5076)\u7684\u6BCD\u4EB2": "\u5CB3\u6BCD/\u5A46\u5A46",
7566
+ "\u59BB\u5B50\u7684\u7236\u4EB2": "\u5CB3\u7236",
7567
+ "\u4E08\u592B\u7684\u7236\u4EB2": "\u516C\u516C",
7568
+ "(\u914D\u5076)\u7684\u7236\u4EB2": "\u5CB3\u7236/\u516C\u516C",
7569
+ "\u59BB\u5B50\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD",
7570
+ "\u4E08\u592B\u7684\u7236\u6BCD": "\u516C\u516C\u5A46\u5A46",
7571
+ "(\u914D\u5076)\u7684\u7236\u6BCD": "\u5CB3\u7236\u5CB3\u6BCD/\u516C\u516C\u5A46\u5A46",
7283
7572
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u59BB\u5B50": "\u5AC2\u5B50/\u5F1F\u59B9",
7284
7573
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u4E08\u592B": "\u59D0\u592B/\u59B9\u592B",
7285
7574
  "(\u5F02\u7236\u6BCD\u7684)?(\u5144\u5F1F\u59D0\u59B9|\u59D0\u59B9|\u5144\u5F1F)\u7684\u914D\u5076": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
7286
7575
  "(\u5F02\u7236\u6BCD\u7684)?\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59D0\u592B/\u59B9\u592B",
7287
7576
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u5AC2\u5B50/\u5F1F\u59B9",
7288
7577
  "(\u5F02\u7236\u6BCD\u7684)?\u5144\u5F1F\u59D0\u59B9\u7684(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9",
7289
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
7290
- "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
7578
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u59D0\u59B9": "\u59E8\u5B50",
7579
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u59D0\u59B9": "\u59D1\u5B50",
7580
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u59D0\u59B9": "\u59D1\u5B50/\u59E8\u5B50",
7581
+ "(\u5F02\u7236\u6BCD\u7684)?\u59BB\u5B50\u7684\u5144\u5F1F": "\u5185\u5144/\u5185\u5F1F",
7582
+ "(\u5F02\u7236\u6BCD\u7684)?\u4E08\u592B\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4",
7583
+ "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076)\u7684\u5144\u5F1F": "\u5927\u4F2F/\u5C0F\u53D4/\u5185\u5144/\u5185\u5F1F",
7291
7584
  "(\u5F02\u7236\u6BCD\u7684)?(\u914D\u5076|\u59BB\u5B50|\u4E08\u592B)\u7684\u5144\u5F1F\u59D0\u59B9": "\u59FB\u4EB2\u5144\u5F1F\u59D0\u59B9"
7292
7585
  };
7293
7586
 
7294
7587
  // src/kinship-translator/kinship-translator.zh.ts
7295
- var sexOf3 = (person) => {
7588
+ var sexOf6 = (person) => {
7296
7589
  if (person?.isMale?.()) {
7297
7590
  return "m";
7298
7591
  }
@@ -7301,7 +7594,7 @@ var sexOf3 = (person) => {
7301
7594
  }
7302
7595
  return "n";
7303
7596
  };
7304
- var pick2 = (sex, male, female, neutral) => {
7597
+ var pick5 = (sex, male, female, neutral) => {
7305
7598
  if (sex === "m") {
7306
7599
  return male;
7307
7600
  }
@@ -7314,41 +7607,41 @@ var lineal2 = (level, sex, kind) => {
7314
7607
  const L = Math.max(1, level);
7315
7608
  if (kind === "asc") {
7316
7609
  if (L <= 1) {
7317
- return pick2(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
7610
+ return pick5(sex, "\u7236\u4EB2", "\u6BCD\u4EB2", "\u7236\u6BCD");
7318
7611
  }
7319
7612
  if (L === 2) {
7320
- return pick2(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7613
+ return pick5(sex, "\u7956\u7236", "\u7956\u6BCD", "\u7956\u7236\u6BCD");
7321
7614
  }
7322
7615
  if (L === 3) {
7323
- return pick2(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7616
+ return pick5(sex, "\u66FE\u7956\u7236", "\u66FE\u7956\u6BCD", "\u66FE\u7956\u7236\u6BCD");
7324
7617
  }
7325
7618
  if (L === 4) {
7326
- return pick2(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7619
+ return pick5(sex, "\u9AD8\u7956\u7236", "\u9AD8\u7956\u6BCD", "\u9AD8\u7956\u7236\u6BCD");
7327
7620
  }
7328
- return pick2(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
7621
+ return pick5(sex, `${L}\u4E16\u7956`, `${L}\u4E16\u7956\u6BCD`, `${L}\u4E16\u7956\u7236\u6BCD`);
7329
7622
  }
7330
7623
  if (L <= 1) {
7331
- return pick2(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
7624
+ return pick5(sex, "\u513F\u5B50", "\u5973\u513F", "\u5B50\u5973");
7332
7625
  }
7333
7626
  if (L === 2) {
7334
- return pick2(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
7627
+ return pick5(sex, "\u5B59\u5B50", "\u5B59\u5973", "\u5B59\u5B50\u5973");
7335
7628
  }
7336
7629
  if (L === 3) {
7337
- return pick2(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
7630
+ return pick5(sex, "\u66FE\u5B59", "\u66FE\u5B59\u5973", "\u66FE\u5B59\u5B50\u5973");
7338
7631
  }
7339
7632
  if (L === 4) {
7340
- return pick2(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
7633
+ return pick5(sex, "\u7384\u5B59", "\u7384\u5B59\u5973", "\u7384\u5B59\u5B50\u5973");
7341
7634
  }
7342
- return pick2(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
7635
+ return pick5(sex, `${L}\u4E16\u5B59`, `${L}\u4E16\u5B59\u5973`, `${L}\u4E16\u5B59\u5B50\u5973`);
7343
7636
  };
7344
7637
  var cousinPlain2 = (degree, sex) => {
7345
7638
  if (degree <= 1) {
7346
- return pick2(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
7639
+ return pick5(sex, "\u5802\u8868\u5144\u5F1F", "\u5802\u8868\u59D0\u59B9", "\u5802\u8868\u4EB2");
7347
7640
  }
7348
7641
  if (degree === 2) {
7349
- return pick2(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
7642
+ return pick5(sex, "\u4ECE\u5802\u8868\u5144\u5F1F", "\u4ECE\u5802\u8868\u59D0\u59B9", "\u4ECE\u5802\u8868\u4EB2");
7350
7643
  }
7351
- return pick2(
7644
+ return pick5(
7352
7645
  sex,
7353
7646
  `${degree}\u4EE3\u5802\u8868\u5144\u5F1F`,
7354
7647
  `${degree}\u4EE3\u5802\u8868\u59D0\u59B9`,
@@ -7361,7 +7654,7 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7361
7654
  if (degree > 0) {
7362
7655
  degree = degree - 1;
7363
7656
  }
7364
- return cousinPlain2(degree, sexOf3(this.personN));
7657
+ return cousinPlain2(degree, sexOf6(this.personN));
7365
7658
  }
7366
7659
  removal() {
7367
7660
  const level = this.pathN?.level ?? 0;
@@ -7373,56 +7666,56 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7373
7666
  return level < 0 ? this.nibling() : this.auncle();
7374
7667
  }
7375
7668
  const removed = Math.abs(level);
7376
- return `${cousinPlain2(degree, sexOf3(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
7669
+ return `${cousinPlain2(degree, sexOf6(this.personN))}\uFF08\u9694${removed}\u4EE3\uFF09`;
7377
7670
  }
7378
7671
  auncle() {
7379
7672
  const level = Math.abs(this.pathN?.level ?? 0);
7380
- const sex = sexOf3(this.personN);
7381
- if (level <= 2) {
7382
- return pick2(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
7673
+ const sex = sexOf6(this.personN);
7674
+ if (level <= 1) {
7675
+ return pick5(sex, "\u53D4\u53D4", "\u963F\u59E8", "\u53D4\u4F2F/\u59D1\u59E8");
7383
7676
  }
7384
- if (level === 3) {
7385
- return pick2(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
7677
+ if (level === 2) {
7678
+ return pick5(sex, "\u4F2F\u53D4\u7956\u7236", "\u59D1\u7956\u6BCD", "\u4F2F\u53D4\u7956\u7236\u6BCD");
7386
7679
  }
7387
- return pick2(
7680
+ return pick5(
7388
7681
  sex,
7389
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u53D4`,
7390
- `${level - 2}\u4EE3\u524D\u7684\u963F\u59E8`,
7391
- `${level - 2}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
7682
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u53D4`,
7683
+ `${level - 1}\u4EE3\u524D\u7684\u963F\u59E8`,
7684
+ `${level - 1}\u4EE3\u524D\u7684\u53D4\u4F2F/\u59D1\u59E8`
7392
7685
  );
7393
7686
  }
7394
7687
  nibling() {
7395
7688
  const level = Math.abs(this.pathN?.level ?? 0);
7396
- const sex = sexOf3(this.personN);
7397
- if (level <= 2) {
7398
- return pick2(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
7689
+ const sex = sexOf6(this.personN);
7690
+ if (level <= 1) {
7691
+ return pick5(sex, "\u4F84\u5B50", "\u4F84\u5973", "\u4F84\u5B50\u5973");
7399
7692
  }
7400
- if (level === 3) {
7401
- return pick2(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
7693
+ if (level === 2) {
7694
+ return pick5(sex, "\u4F84\u5B59", "\u4F84\u5B59\u5973", "\u4F84\u5B59\u5B50\u5973");
7402
7695
  }
7403
- return pick2(
7696
+ return pick5(
7404
7697
  sex,
7405
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
7406
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5973`,
7407
- `${level - 2}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
7698
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50`,
7699
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5973`,
7700
+ `${level - 1}\u4EE3\u4E0B\u7684\u4F84\u5B50\u5973`
7408
7701
  );
7409
7702
  }
7410
7703
  parent() {
7411
7704
  return lineal2(
7412
7705
  Math.abs(this.pathN?.level ?? 0),
7413
- sexOf3(this.personN),
7706
+ sexOf6(this.personN),
7414
7707
  "asc"
7415
7708
  );
7416
7709
  }
7417
7710
  child() {
7418
7711
  return lineal2(
7419
7712
  Math.abs(this.pathN?.level ?? 0),
7420
- sexOf3(this.personN),
7713
+ sexOf6(this.personN),
7421
7714
  "desc"
7422
7715
  );
7423
7716
  }
7424
7717
  sibling() {
7425
- return pick2(sexOf3(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
7718
+ return pick5(sexOf6(this.personN), "\u5144\u5F1F", "\u59D0\u59B9", "\u5144\u5F1F\u59D0\u59B9");
7426
7719
  }
7427
7720
  halfBlood(relation) {
7428
7721
  if (!relation || !this.isHalfBlood) {
@@ -7431,14 +7724,14 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7431
7724
  return `\u5F02\u7236\u6BCD\u7684${relation}`;
7432
7725
  }
7433
7726
  spouse() {
7434
- return pick2(sexOf3(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7727
+ return pick5(sexOf6(this.personN), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7435
7728
  }
7436
7729
  ofSpouse(relation) {
7437
7730
  if (!relation) {
7438
7731
  return "";
7439
7732
  }
7440
- const spouseType = pick2(
7441
- sexOf3(this.path?.[1].indi),
7733
+ const spouseType = pick5(
7734
+ sexOf6(this.path?.[1].indi),
7442
7735
  "\u4E08\u592B",
7443
7736
  "\u59BB\u5B50",
7444
7737
  "\u914D\u5076"
@@ -7450,12 +7743,12 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7450
7743
  return "";
7451
7744
  }
7452
7745
  const spouse = this.path?.[this.path.length - 1].indi;
7453
- const spouseType = pick2(sexOf3(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7746
+ const spouseType = pick5(sexOf6(spouse), "\u4E08\u592B", "\u59BB\u5B50", "\u914D\u5076");
7454
7747
  return `${relation}\u7684${spouseType}`;
7455
7748
  }
7456
7749
  of(relation) {
7457
7750
  const formattedName = nameFormatter(this.path?.[0]?.indi, {
7458
- nameOrder: "last-first"
7751
+ nameOrder: this.nameOrder
7459
7752
  });
7460
7753
  let name = formattedName.inOrder.filter(Boolean).join(" ");
7461
7754
  if (this.displayName === "none") {
@@ -7486,27 +7779,68 @@ var KinshipTranslatorZh = class extends KinshipTranslatorBasic {
7486
7779
  if (!relation || !this.pathN?.relation) {
7487
7780
  return relation ?? "";
7488
7781
  }
7489
- return `${this.pathN.relation}${relation}`;
7782
+ if (this.pathN.relation === "step") {
7783
+ if (relation === "\u7236\u4EB2") {
7784
+ return "\u7EE7\u7236";
7785
+ }
7786
+ if (relation === "\u6BCD\u4EB2") {
7787
+ return "\u7EE7\u6BCD";
7788
+ }
7789
+ if (relation === "\u513F\u5B50") {
7790
+ return "\u7EE7\u5B50";
7791
+ }
7792
+ if (relation === "\u5973\u513F") {
7793
+ return "\u7EE7\u5973";
7794
+ }
7795
+ return `\u7EE7${relation}`;
7796
+ }
7797
+ if (this.pathN.relation === "adopted") {
7798
+ if (relation === "\u7236\u4EB2") {
7799
+ return "\u517B\u7236";
7800
+ }
7801
+ if (relation === "\u6BCD\u4EB2") {
7802
+ return "\u517B\u6BCD";
7803
+ }
7804
+ if (relation === "\u513F\u5B50") {
7805
+ return "\u517B\u5B50";
7806
+ }
7807
+ if (relation === "\u5973\u513F") {
7808
+ return "\u517B\u5973";
7809
+ }
7810
+ return `\u517B${relation}`;
7811
+ }
7812
+ if (this.pathN.relation === "foster") {
7813
+ return `\u5BC4\u517B${relation}`;
7814
+ }
7815
+ return relation;
7490
7816
  }
7491
7817
  };
7492
7818
 
7493
7819
  // src/kinship-translator/kinship-translator.ts
7820
+ var nameOrderForLang = (lang) => lang === "hu" || lang === "ja" || lang === "zh" ? "last-first" : "first-last";
7494
7821
  var KinshipTranslator = class {
7495
- constructor(person1, person2, lang = "en", entirePath, displayName = "givenname") {
7822
+ constructor(person1, person2, lang = "en", entirePath, displayName = "givenname", nameOrder) {
7496
7823
  this.displayName = displayName;
7497
7824
  this.lang = lang;
7498
7825
  this.entirePath = entirePath;
7499
7826
  this.person1 = person1;
7500
7827
  this.person2 = typeof person2 === "string" ? this.person1.getGedcom()?.indi(person2) : person2;
7501
7828
  this.path = this.person1.path(this.person2);
7829
+ const order = nameOrder ?? nameOrderForLang(lang);
7830
+ this.nameOrder = order;
7502
7831
  if (translators_exports[lang]) {
7503
7832
  this.translator = new translators_exports[lang](
7504
7833
  this.path ?? [],
7505
- displayName
7834
+ displayName,
7835
+ order
7506
7836
  );
7507
7837
  }
7508
7838
  if (!this.translator) {
7509
- this.translator = new KinshipTranslatorEn(this.path ?? [], displayName);
7839
+ this.translator = new KinshipTranslatorEn(
7840
+ this.path ?? [],
7841
+ displayName,
7842
+ order
7843
+ );
7510
7844
  }
7511
7845
  }
7512
7846
  get path0() {
@@ -7551,14 +7885,16 @@ var KinshipTranslator = class {
7551
7885
  showMainPerson,
7552
7886
  this.lang,
7553
7887
  false,
7554
- this.displayName
7888
+ this.displayName,
7889
+ this.nameOrder
7555
7890
  ),
7556
7891
  relative: this.path?.[index - 1]?.indi.kinship(
7557
7892
  path2.indi.id,
7558
7893
  showMainPerson,
7559
7894
  this.lang,
7560
7895
  false,
7561
- this.displayName
7896
+ this.displayName,
7897
+ this.nameOrder
7562
7898
  )
7563
7899
  }));
7564
7900
  return path;