@treeviz/gedcom-parser 2.0.8 → 2.0.10
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.
- package/dist/classes/index.js +627 -159
- package/dist/classes/indi.d.ts.map +1 -1
- package/dist/cli/index.js +627 -159
- package/dist/constants/index.js +626 -158
- package/dist/factories/index.js +626 -158
- package/dist/index.js +628 -160
- package/dist/kinship-translator/index.d.ts +1 -0
- package/dist/kinship-translator/index.d.ts.map +1 -1
- package/dist/kinship-translator/index.js +627 -159
- package/dist/kinship-translator/kinship-translator.basic.d.ts +11 -0
- package/dist/kinship-translator/kinship-translator.basic.d.ts.map +1 -1
- package/dist/kinship-translator/kinship-translator.d.ts.map +1 -1
- package/dist/kinship-translator/kinship-translator.de.d.ts +2 -1
- package/dist/kinship-translator/kinship-translator.de.d.ts.map +1 -1
- package/dist/kinship-translator/kinship-translator.en.d.ts +2 -1
- package/dist/kinship-translator/kinship-translator.en.d.ts.map +1 -1
- package/dist/kinship-translator/kinship-translator.es.d.ts +2 -1
- package/dist/kinship-translator/kinship-translator.es.d.ts.map +1 -1
- package/dist/kinship-translator/kinship-translator.fr.d.ts +2 -1
- package/dist/kinship-translator/kinship-translator.fr.d.ts.map +1 -1
- package/dist/kinship-translator/kinship-translator.hu.d.ts +8 -1
- package/dist/kinship-translator/kinship-translator.hu.d.ts.map +1 -1
- package/dist/kinship-translator/kinship-translator.interface.d.ts +1 -0
- package/dist/kinship-translator/kinship-translator.interface.d.ts.map +1 -1
- package/dist/kinship-translator/kinship-translator.ru.d.ts +18 -0
- package/dist/kinship-translator/kinship-translator.ru.d.ts.map +1 -0
- package/dist/kinship-translator/patterns.es.d.ts.map +1 -1
- package/dist/kinship-translator/patterns.ru.d.ts +2 -0
- package/dist/kinship-translator/patterns.ru.d.ts.map +1 -0
- package/dist/kinship-translator/translators.d.ts +1 -0
- package/dist/kinship-translator/translators.d.ts.map +1 -1
- package/dist/kinship-translator/types.d.ts +1 -1
- package/dist/kinship-translator/types.d.ts.map +1 -1
- package/dist/utils/cache.d.ts +14 -1
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/index.js +628 -160
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1119,7 +1119,8 @@ __export(translators_exports, {
|
|
|
1119
1119
|
en: () => KinshipTranslatorEn,
|
|
1120
1120
|
es: () => KinshipTranslatorEs,
|
|
1121
1121
|
fr: () => KinshipTranslatorFr,
|
|
1122
|
-
hu: () => KinshipTranslatorHU
|
|
1122
|
+
hu: () => KinshipTranslatorHU,
|
|
1123
|
+
ru: () => KinshipTranslatorRu
|
|
1123
1124
|
});
|
|
1124
1125
|
|
|
1125
1126
|
// src/types/types.ts
|
|
@@ -1332,6 +1333,135 @@ var profilePictureCache = (gedcom, key, value) => {
|
|
|
1332
1333
|
const cached = caches.profilePictureCache?.[fullKey];
|
|
1333
1334
|
return cached;
|
|
1334
1335
|
};
|
|
1336
|
+
var isNonBiologicalPath = (path) => path.some(
|
|
1337
|
+
(item) => item.relation && item.relation !== "biological" /* BIOLOGICAL */
|
|
1338
|
+
);
|
|
1339
|
+
var invertHop = (kinship) => {
|
|
1340
|
+
if (kinship === "parent") {
|
|
1341
|
+
return "child";
|
|
1342
|
+
}
|
|
1343
|
+
if (kinship === "child") {
|
|
1344
|
+
return "parent";
|
|
1345
|
+
}
|
|
1346
|
+
return kinship;
|
|
1347
|
+
};
|
|
1348
|
+
var hopRelation = (from, toIndi, kinship, inherited) => {
|
|
1349
|
+
if (kinship === "parent" || kinship === "child") {
|
|
1350
|
+
const parent = kinship === "parent" ? toIndi : from.indi;
|
|
1351
|
+
const child = kinship === "parent" ? from.indi : toIndi;
|
|
1352
|
+
const currentRelation = child.getParentType(parent);
|
|
1353
|
+
if (currentRelation && currentRelation !== "biological" /* BIOLOGICAL */) {
|
|
1354
|
+
return currentRelation;
|
|
1355
|
+
}
|
|
1356
|
+
}
|
|
1357
|
+
if (inherited && inherited !== "biological" /* BIOLOGICAL */) {
|
|
1358
|
+
return inherited;
|
|
1359
|
+
}
|
|
1360
|
+
return void 0;
|
|
1361
|
+
};
|
|
1362
|
+
var rebuildPathFromHops = (hops, skipRelation = false) => {
|
|
1363
|
+
if (hops.length === 0) {
|
|
1364
|
+
return [];
|
|
1365
|
+
}
|
|
1366
|
+
const path = [
|
|
1367
|
+
{
|
|
1368
|
+
indi: hops[0].indi,
|
|
1369
|
+
kinship: "self",
|
|
1370
|
+
level: 0,
|
|
1371
|
+
levelUp: 0,
|
|
1372
|
+
levelDown: 0,
|
|
1373
|
+
degree: 0
|
|
1374
|
+
}
|
|
1375
|
+
];
|
|
1376
|
+
for (let i = 1; i < hops.length; i++) {
|
|
1377
|
+
const prev = path[i - 1];
|
|
1378
|
+
const { indi, kinship } = hops[i];
|
|
1379
|
+
const relation = skipRelation ? void 0 : hopRelation(prev, indi, kinship, prev.relation);
|
|
1380
|
+
if (kinship === "parent") {
|
|
1381
|
+
path.push({
|
|
1382
|
+
indi,
|
|
1383
|
+
kinship,
|
|
1384
|
+
relation,
|
|
1385
|
+
level: prev.level + 1,
|
|
1386
|
+
levelUp: prev.levelUp + 1,
|
|
1387
|
+
levelDown: prev.levelDown,
|
|
1388
|
+
degree: prev.degree
|
|
1389
|
+
});
|
|
1390
|
+
continue;
|
|
1391
|
+
}
|
|
1392
|
+
if (kinship === "child") {
|
|
1393
|
+
path.push({
|
|
1394
|
+
indi,
|
|
1395
|
+
kinship,
|
|
1396
|
+
relation,
|
|
1397
|
+
level: prev.level - 1,
|
|
1398
|
+
levelUp: prev.levelUp,
|
|
1399
|
+
levelDown: prev.levelDown + 1,
|
|
1400
|
+
degree: prev.levelUp ? prev.level > 0 ? prev.levelUp - prev.level + 1 : prev.levelDown - Math.abs(prev.level) : 0
|
|
1401
|
+
});
|
|
1402
|
+
continue;
|
|
1403
|
+
}
|
|
1404
|
+
path.push({
|
|
1405
|
+
indi,
|
|
1406
|
+
kinship,
|
|
1407
|
+
relation,
|
|
1408
|
+
level: prev.level,
|
|
1409
|
+
levelUp: prev.levelUp,
|
|
1410
|
+
levelDown: prev.levelDown,
|
|
1411
|
+
degree: prev.degree
|
|
1412
|
+
});
|
|
1413
|
+
}
|
|
1414
|
+
return path;
|
|
1415
|
+
};
|
|
1416
|
+
var storePathIfBetter = (gedcom, fromId, toId, path) => {
|
|
1417
|
+
const key = `${fromId}|${toId}`;
|
|
1418
|
+
const existing = pathCache(gedcom, key);
|
|
1419
|
+
if (existing && (!isNonBiologicalPath(existing) || isNonBiologicalPath(path))) {
|
|
1420
|
+
return;
|
|
1421
|
+
}
|
|
1422
|
+
pathCache(gedcom, key, path);
|
|
1423
|
+
};
|
|
1424
|
+
var cacheDiscoveredPath = (gedcom, path) => {
|
|
1425
|
+
const n = path.length;
|
|
1426
|
+
if (n < 2) {
|
|
1427
|
+
return;
|
|
1428
|
+
}
|
|
1429
|
+
for (let i = 0; i < n; i++) {
|
|
1430
|
+
const fromId = path[i].indi.id;
|
|
1431
|
+
if (!fromId) {
|
|
1432
|
+
continue;
|
|
1433
|
+
}
|
|
1434
|
+
for (let j = i + 1; j < n; j++) {
|
|
1435
|
+
const toId = path[j].indi.id;
|
|
1436
|
+
if (!toId) {
|
|
1437
|
+
continue;
|
|
1438
|
+
}
|
|
1439
|
+
const isOriginalPair = i === 0 && j === n - 1;
|
|
1440
|
+
const isDirectHop = j === i + 1;
|
|
1441
|
+
const slice = path.slice(i, j + 1);
|
|
1442
|
+
const sliceMixed = isNonBiologicalPath(slice);
|
|
1443
|
+
if (!isOriginalPair && !isDirectHop && sliceMixed) {
|
|
1444
|
+
continue;
|
|
1445
|
+
}
|
|
1446
|
+
const forward = i === 0 ? slice : rebuildPathFromHops(slice, !sliceMixed);
|
|
1447
|
+
const reverseHops = [
|
|
1448
|
+
{
|
|
1449
|
+
indi: slice[slice.length - 1].indi,
|
|
1450
|
+
kinship: "self"
|
|
1451
|
+
}
|
|
1452
|
+
];
|
|
1453
|
+
for (let k = slice.length - 2; k >= 0; k--) {
|
|
1454
|
+
reverseHops.push({
|
|
1455
|
+
indi: slice[k].indi,
|
|
1456
|
+
kinship: invertHop(slice[k + 1].kinship)
|
|
1457
|
+
});
|
|
1458
|
+
}
|
|
1459
|
+
const reverse = rebuildPathFromHops(reverseHops, !sliceMixed);
|
|
1460
|
+
storePathIfBetter(gedcom, fromId, toId, forward);
|
|
1461
|
+
storePathIfBetter(gedcom, toId, fromId, reverse);
|
|
1462
|
+
}
|
|
1463
|
+
}
|
|
1464
|
+
};
|
|
1335
1465
|
|
|
1336
1466
|
// src/utils/get-all-prop.ts
|
|
1337
1467
|
var getAllProp = (indi, prop) => {
|
|
@@ -2997,7 +3127,6 @@ var Indi = class extends Common {
|
|
|
2997
3127
|
if (cache) {
|
|
2998
3128
|
return cache;
|
|
2999
3129
|
}
|
|
3000
|
-
const visited = new Individuals().append(this);
|
|
3001
3130
|
const mainItem = {
|
|
3002
3131
|
indi: this,
|
|
3003
3132
|
level: 0,
|
|
@@ -3006,129 +3135,155 @@ var Indi = class extends Common {
|
|
|
3006
3135
|
degree: 0,
|
|
3007
3136
|
kinship: "self"
|
|
3008
3137
|
};
|
|
3009
|
-
const
|
|
3138
|
+
const mainPath = [mainItem];
|
|
3010
3139
|
if (this.id === usedIndi.id) {
|
|
3011
|
-
return
|
|
3140
|
+
return mainPath;
|
|
3012
3141
|
}
|
|
3013
|
-
const
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
let helper = 0;
|
|
3020
|
-
while (queue.length > 0) {
|
|
3021
|
-
if (helper++ > 1e6) {
|
|
3022
|
-
break;
|
|
3023
|
-
}
|
|
3024
|
-
const {
|
|
3025
|
-
indi,
|
|
3026
|
-
path: path2,
|
|
3027
|
-
kinship,
|
|
3028
|
-
relation,
|
|
3029
|
-
level,
|
|
3030
|
-
levelUp,
|
|
3031
|
-
levelDown,
|
|
3032
|
-
degree,
|
|
3033
|
-
breakOnNext,
|
|
3034
|
-
breakAfterNext,
|
|
3035
|
-
inLaw
|
|
3036
|
-
} = queue.shift();
|
|
3037
|
-
if (usedIndi.id === indi.id) {
|
|
3038
|
-
if (breakOnNext) {
|
|
3039
|
-
return void 0;
|
|
3142
|
+
const bfs = (biologicalOnly) => {
|
|
3143
|
+
const visited = new Individuals().append(this);
|
|
3144
|
+
const queue = [
|
|
3145
|
+
{
|
|
3146
|
+
...mainItem,
|
|
3147
|
+
path: mainPath
|
|
3040
3148
|
}
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
if (breakOnNext || breakAfterNext) {
|
|
3047
|
-
additional.breakOnNext = breakOnNext || breakAfterNext;
|
|
3048
|
-
}
|
|
3049
|
-
if (inLaw) {
|
|
3050
|
-
additional.inLaw = inLaw;
|
|
3051
|
-
}
|
|
3052
|
-
if (kinship === "spouse" && breakAfterSpouse) {
|
|
3053
|
-
if (path2.length <= 2) {
|
|
3054
|
-
additional.inLaw = true;
|
|
3055
|
-
} else {
|
|
3056
|
-
additional.breakOnNext = true;
|
|
3149
|
+
];
|
|
3150
|
+
let helper = 0;
|
|
3151
|
+
while (queue.length > 0) {
|
|
3152
|
+
if (helper++ > 1e6) {
|
|
3153
|
+
break;
|
|
3057
3154
|
}
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3155
|
+
const {
|
|
3156
|
+
indi,
|
|
3157
|
+
path,
|
|
3158
|
+
kinship,
|
|
3159
|
+
relation,
|
|
3160
|
+
level,
|
|
3161
|
+
levelUp,
|
|
3162
|
+
levelDown,
|
|
3163
|
+
degree,
|
|
3164
|
+
breakOnNext,
|
|
3165
|
+
breakAfterNext,
|
|
3166
|
+
inLaw
|
|
3167
|
+
} = queue.shift();
|
|
3168
|
+
if (usedIndi.id === indi.id) {
|
|
3169
|
+
if (breakOnNext) {
|
|
3170
|
+
return void 0;
|
|
3171
|
+
}
|
|
3172
|
+
return path;
|
|
3173
|
+
}
|
|
3174
|
+
visited.append(indi);
|
|
3175
|
+
const additional = {};
|
|
3176
|
+
if (breakOnNext || breakAfterNext) {
|
|
3177
|
+
additional.breakOnNext = breakOnNext || breakAfterNext;
|
|
3178
|
+
}
|
|
3179
|
+
if (inLaw) {
|
|
3180
|
+
additional.inLaw = inLaw;
|
|
3181
|
+
}
|
|
3182
|
+
if (!biologicalOnly && kinship === "spouse" && breakAfterSpouse) {
|
|
3183
|
+
if (path.length <= 2) {
|
|
3184
|
+
additional.inLaw = true;
|
|
3185
|
+
} else {
|
|
3186
|
+
additional.breakOnNext = true;
|
|
3187
|
+
}
|
|
3188
|
+
}
|
|
3189
|
+
if (kinship !== "child" || !breakAfterSpouse) {
|
|
3190
|
+
indi.getBiologicalFathers().copy().merge(indi.getBiologicalMothers()).merge(indi.getFathers().copy().merge(indi.getMothers())).forEach((relative) => {
|
|
3191
|
+
if (!visited.has(relative)) {
|
|
3192
|
+
const currentRelation = indi.getParentType(relative);
|
|
3193
|
+
const isNonBiological = !!currentRelation && currentRelation !== "biological" /* BIOLOGICAL */;
|
|
3194
|
+
if (biologicalOnly && isNonBiological) {
|
|
3195
|
+
return;
|
|
3196
|
+
}
|
|
3197
|
+
if (!biologicalOnly && breakAfterNonBiological && isNonBiological) {
|
|
3198
|
+
additional.breakAfterNext = true;
|
|
3199
|
+
}
|
|
3200
|
+
const newItem = {
|
|
3201
|
+
indi: relative,
|
|
3202
|
+
kinship: "parent",
|
|
3203
|
+
relation: isNonBiological ? currentRelation : relation,
|
|
3204
|
+
level: level + 1,
|
|
3205
|
+
levelUp: levelUp + 1,
|
|
3206
|
+
levelDown,
|
|
3207
|
+
degree,
|
|
3208
|
+
...additional
|
|
3209
|
+
};
|
|
3210
|
+
queue.push({
|
|
3211
|
+
...newItem,
|
|
3212
|
+
path: [...path, newItem]
|
|
3213
|
+
});
|
|
3214
|
+
}
|
|
3215
|
+
});
|
|
3216
|
+
}
|
|
3217
|
+
indi.getChildren().forEach((relative) => {
|
|
3061
3218
|
if (!visited.has(relative)) {
|
|
3062
|
-
const currentRelation =
|
|
3063
|
-
|
|
3219
|
+
const currentRelation = relative.getParentType(indi);
|
|
3220
|
+
const isNonBiological = !!currentRelation && currentRelation !== "biological" /* BIOLOGICAL */;
|
|
3221
|
+
if (biologicalOnly && isNonBiological) {
|
|
3222
|
+
return;
|
|
3223
|
+
}
|
|
3224
|
+
if (!biologicalOnly && breakAfterNonBiological && isNonBiological) {
|
|
3064
3225
|
additional.breakAfterNext = true;
|
|
3065
3226
|
}
|
|
3066
3227
|
const newItem = {
|
|
3067
3228
|
indi: relative,
|
|
3068
|
-
kinship: "
|
|
3069
|
-
relation:
|
|
3070
|
-
level: level
|
|
3071
|
-
levelUp
|
|
3072
|
-
levelDown,
|
|
3073
|
-
degree,
|
|
3229
|
+
kinship: "child",
|
|
3230
|
+
relation: isNonBiological ? currentRelation : relation,
|
|
3231
|
+
level: level - 1,
|
|
3232
|
+
levelUp,
|
|
3233
|
+
levelDown: levelDown + 1,
|
|
3234
|
+
degree: levelUp ? level > 0 ? levelUp - level + 1 : levelDown - Math.abs(level) : 0,
|
|
3074
3235
|
...additional
|
|
3075
3236
|
};
|
|
3076
3237
|
queue.push({
|
|
3077
3238
|
...newItem,
|
|
3078
|
-
path: [...
|
|
3239
|
+
path: [...path, newItem]
|
|
3079
3240
|
});
|
|
3080
3241
|
}
|
|
3081
3242
|
});
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
if (!visited.has(relative)) {
|
|
3085
|
-
const currentRelation = relative.getParentType(indi);
|
|
3086
|
-
if (breakAfterNonBiological && currentRelation !== "biological" /* BIOLOGICAL */) {
|
|
3087
|
-
additional.breakAfterNext = true;
|
|
3088
|
-
}
|
|
3089
|
-
const newItem = {
|
|
3090
|
-
indi: relative,
|
|
3091
|
-
kinship: "child",
|
|
3092
|
-
relation: currentRelation && currentRelation !== "biological" /* BIOLOGICAL */ ? currentRelation : relation,
|
|
3093
|
-
level: level - 1,
|
|
3094
|
-
levelUp,
|
|
3095
|
-
levelDown: levelDown + 1,
|
|
3096
|
-
degree: levelUp ? level > 0 ? levelUp - level + 1 : levelDown - Math.abs(level) : 0,
|
|
3097
|
-
...additional
|
|
3098
|
-
};
|
|
3099
|
-
queue.push({
|
|
3100
|
-
...newItem,
|
|
3101
|
-
path: [...path2, newItem]
|
|
3102
|
-
});
|
|
3243
|
+
if (biologicalOnly) {
|
|
3244
|
+
continue;
|
|
3103
3245
|
}
|
|
3104
|
-
|
|
3105
|
-
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
3246
|
+
indi.getCoParents().forEach((relative) => {
|
|
3247
|
+
if (!visited.has(relative)) {
|
|
3248
|
+
const currentAddition = {};
|
|
3249
|
+
if (relation && relation !== "biological" /* BIOLOGICAL */) {
|
|
3250
|
+
currentAddition.relation = relation;
|
|
3251
|
+
}
|
|
3252
|
+
if (inLaw) {
|
|
3253
|
+
currentAddition.breakOnNext = true;
|
|
3254
|
+
}
|
|
3255
|
+
const newItem = {
|
|
3256
|
+
indi: relative,
|
|
3257
|
+
kinship: "spouse",
|
|
3258
|
+
level,
|
|
3259
|
+
levelUp,
|
|
3260
|
+
levelDown,
|
|
3261
|
+
degree,
|
|
3262
|
+
...additional,
|
|
3263
|
+
...currentAddition
|
|
3264
|
+
};
|
|
3265
|
+
queue.push({
|
|
3266
|
+
...newItem,
|
|
3267
|
+
path: [...path, newItem]
|
|
3268
|
+
});
|
|
3113
3269
|
}
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
3119
|
-
|
|
3120
|
-
|
|
3121
|
-
|
|
3122
|
-
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
path: [...path2, newItem]
|
|
3127
|
-
});
|
|
3128
|
-
}
|
|
3129
|
-
});
|
|
3270
|
+
});
|
|
3271
|
+
}
|
|
3272
|
+
return void 0;
|
|
3273
|
+
};
|
|
3274
|
+
const foundPath = bfs(false);
|
|
3275
|
+
const lastItem = foundPath?.[foundPath.length - 1];
|
|
3276
|
+
if (lastItem?.relation && lastItem.relation !== "biological" /* BIOLOGICAL */) {
|
|
3277
|
+
const biologicalPath = bfs(true);
|
|
3278
|
+
if (biologicalPath) {
|
|
3279
|
+
cacheDiscoveredPath(this._gedcom, biologicalPath);
|
|
3280
|
+
return biologicalPath;
|
|
3281
|
+
}
|
|
3130
3282
|
}
|
|
3131
|
-
|
|
3283
|
+
if (foundPath) {
|
|
3284
|
+
cacheDiscoveredPath(this._gedcom, foundPath);
|
|
3285
|
+
}
|
|
3286
|
+
return foundPath;
|
|
3132
3287
|
}
|
|
3133
3288
|
kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname") {
|
|
3134
3289
|
const KinshipTranslatorClass2 = getKinshipTranslatorClass();
|
|
@@ -4107,6 +4262,44 @@ var KinshipTranslatorBasic = class {
|
|
|
4107
4262
|
}
|
|
4108
4263
|
return this.pathN?.indi;
|
|
4109
4264
|
}
|
|
4265
|
+
/**
|
|
4266
|
+
* True when the path goes through a common ancestor whose two children
|
|
4267
|
+
* (the person we came from and the person we go to) share fewer than two
|
|
4268
|
+
* biological parents — i.e. they are half-siblings, so every collateral
|
|
4269
|
+
* relative on this path is a half-aunt/half-cousin/... too.
|
|
4270
|
+
*
|
|
4271
|
+
* Direct ancestors/descendants and paths that already use a
|
|
4272
|
+
* step/adopted/foster edge are never half-blood.
|
|
4273
|
+
*/
|
|
4274
|
+
get isHalfBlood() {
|
|
4275
|
+
const path = this.path;
|
|
4276
|
+
if (!path || path.length < 3) {
|
|
4277
|
+
return false;
|
|
4278
|
+
}
|
|
4279
|
+
if (path.some(
|
|
4280
|
+
(item) => item.relation && item.relation !== "biological" /* BIOLOGICAL */
|
|
4281
|
+
)) {
|
|
4282
|
+
return false;
|
|
4283
|
+
}
|
|
4284
|
+
let peakIndex = -1;
|
|
4285
|
+
for (let i = 1; i < path.length; i++) {
|
|
4286
|
+
if (path[i].kinship === "parent") {
|
|
4287
|
+
peakIndex = i;
|
|
4288
|
+
}
|
|
4289
|
+
}
|
|
4290
|
+
if (peakIndex <= 0 || peakIndex >= path.length - 1) {
|
|
4291
|
+
return false;
|
|
4292
|
+
}
|
|
4293
|
+
if (path[peakIndex + 1].kinship !== "child") {
|
|
4294
|
+
return false;
|
|
4295
|
+
}
|
|
4296
|
+
const siblingA = path[peakIndex - 1].indi;
|
|
4297
|
+
const siblingB = path[peakIndex + 1].indi;
|
|
4298
|
+
const parentsA = siblingA.getBiologicalParents();
|
|
4299
|
+
const parentsB = siblingB.getBiologicalParents();
|
|
4300
|
+
const inter = parentsA.intersection(parentsB);
|
|
4301
|
+
return inter.length === 1 && (parentsA.length > 1 || parentsB.length > 1);
|
|
4302
|
+
}
|
|
4110
4303
|
indirect() {
|
|
4111
4304
|
return "";
|
|
4112
4305
|
}
|
|
@@ -4134,6 +4327,9 @@ var KinshipTranslatorBasic = class {
|
|
|
4134
4327
|
relationType(relation) {
|
|
4135
4328
|
return relation ?? "";
|
|
4136
4329
|
}
|
|
4330
|
+
halfBlood(relation) {
|
|
4331
|
+
return relation ?? "";
|
|
4332
|
+
}
|
|
4137
4333
|
of(relation) {
|
|
4138
4334
|
return relation ?? "";
|
|
4139
4335
|
}
|
|
@@ -4372,14 +4568,34 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
|
|
|
4372
4568
|
return `${prefix.replace(/nagy$/, "")}unoka`;
|
|
4373
4569
|
}
|
|
4374
4570
|
sibling() {
|
|
4375
|
-
const parents1 = this.person1?.getBiologicalParents();
|
|
4376
|
-
const parentsN = this.personN?.getBiologicalParents();
|
|
4377
|
-
const inter = parents1?.intersection(parentsN);
|
|
4378
|
-
if (!inter || inter.length < 2) {
|
|
4379
|
-
return "f\xE9ltestv\xE9r";
|
|
4380
|
-
}
|
|
4381
4571
|
return "testv\xE9r";
|
|
4382
4572
|
}
|
|
4573
|
+
halfBlood(relation) {
|
|
4574
|
+
if (!relation || !this.isHalfBlood) {
|
|
4575
|
+
return relation ?? "";
|
|
4576
|
+
}
|
|
4577
|
+
const [head, ...rest] = relation.split(" ");
|
|
4578
|
+
if (!head) {
|
|
4579
|
+
return relation;
|
|
4580
|
+
}
|
|
4581
|
+
const prefixed = this.prefixHalf(head);
|
|
4582
|
+
return [prefixed, ...rest].join(" ");
|
|
4583
|
+
}
|
|
4584
|
+
/**
|
|
4585
|
+
* AkH. 139: compounds of more than two members stay closed up to 6
|
|
4586
|
+
* syllables; longer ones are hyphenated at the main boundary. A head
|
|
4587
|
+
* that is already hyphenated also takes a hyphenated half- prefix.
|
|
4588
|
+
*/
|
|
4589
|
+
prefixHalf(head) {
|
|
4590
|
+
if (head.includes("-") || !/[aáeéiíoóöőuúüű]/i.test(head)) {
|
|
4591
|
+
return `f\xE9l-${head}`;
|
|
4592
|
+
}
|
|
4593
|
+
const syllables = (head.match(/[aáeéiíoóöőuúüű]/gi) ?? []).length + 1;
|
|
4594
|
+
if (syllables > 6) {
|
|
4595
|
+
return `f\xE9l-${head}`;
|
|
4596
|
+
}
|
|
4597
|
+
return `f\xE9l${head}`;
|
|
4598
|
+
}
|
|
4383
4599
|
spouse() {
|
|
4384
4600
|
if (this.personN?.isMale()) {
|
|
4385
4601
|
return "f\xE9rj";
|
|
@@ -4578,20 +4794,22 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
|
|
|
4578
4794
|
return `${prefix}child`;
|
|
4579
4795
|
}
|
|
4580
4796
|
sibling() {
|
|
4581
|
-
const parents1 = this.person1?.getBiologicalParents();
|
|
4582
|
-
const parentsN = this.personN?.getBiologicalParents();
|
|
4583
|
-
const inter = parents1?.intersection(parentsN);
|
|
4584
|
-
let prefix = "";
|
|
4585
|
-
if (!inter || inter.length < 2) {
|
|
4586
|
-
prefix = "half-";
|
|
4587
|
-
}
|
|
4588
4797
|
if (this.personN?.isMale()) {
|
|
4589
|
-
return
|
|
4798
|
+
return "brother";
|
|
4590
4799
|
}
|
|
4591
4800
|
if (this.personN?.isFemale()) {
|
|
4592
|
-
return
|
|
4801
|
+
return "sister";
|
|
4593
4802
|
}
|
|
4594
|
-
return
|
|
4803
|
+
return "sibling";
|
|
4804
|
+
}
|
|
4805
|
+
halfBlood(relation) {
|
|
4806
|
+
if (!relation || !this.isHalfBlood) {
|
|
4807
|
+
return relation ?? "";
|
|
4808
|
+
}
|
|
4809
|
+
if (relation.includes(" ")) {
|
|
4810
|
+
return `half ${relation}`;
|
|
4811
|
+
}
|
|
4812
|
+
return `half-${relation}`;
|
|
4595
4813
|
}
|
|
4596
4814
|
spouse() {
|
|
4597
4815
|
if (this.personN?.isMale()) {
|
|
@@ -4773,20 +4991,22 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
|
|
|
4773
4991
|
return `${prefix}kind`;
|
|
4774
4992
|
}
|
|
4775
4993
|
sibling() {
|
|
4776
|
-
const parents1 = this.person1?.getBiologicalParents();
|
|
4777
|
-
const parentsN = this.personN?.getBiologicalParents();
|
|
4778
|
-
const inter = parents1?.intersection(parentsN);
|
|
4779
|
-
let prefix = "";
|
|
4780
|
-
if (!inter || inter.length < 2) {
|
|
4781
|
-
prefix = "Halb";
|
|
4782
|
-
}
|
|
4783
4994
|
if (this.personN?.isMale()) {
|
|
4784
|
-
return
|
|
4995
|
+
return "bruder";
|
|
4785
4996
|
}
|
|
4786
4997
|
if (this.personN?.isFemale()) {
|
|
4787
|
-
return
|
|
4998
|
+
return "schwester";
|
|
4999
|
+
}
|
|
5000
|
+
return "geschwister";
|
|
5001
|
+
}
|
|
5002
|
+
halfBlood(relation) {
|
|
5003
|
+
if (!relation || !this.isHalfBlood) {
|
|
5004
|
+
return relation ?? "";
|
|
5005
|
+
}
|
|
5006
|
+
if (/^[A-ZÄÖÜ]/.test(relation) || /[-\s]/.test(relation)) {
|
|
5007
|
+
return `Halb-${relation}`;
|
|
4788
5008
|
}
|
|
4789
|
-
return
|
|
5009
|
+
return `Halb${relation}`;
|
|
4790
5010
|
}
|
|
4791
5011
|
spouse() {
|
|
4792
5012
|
if (this.personN?.isMale()) {
|
|
@@ -4968,20 +5188,19 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
|
|
|
4968
5188
|
return `${prefix}enfant`;
|
|
4969
5189
|
}
|
|
4970
5190
|
sibling() {
|
|
4971
|
-
const parents1 = this.person1?.getBiologicalParents();
|
|
4972
|
-
const parentsN = this.personN?.getBiologicalParents();
|
|
4973
|
-
const inter = parents1?.intersection(parentsN);
|
|
4974
|
-
let prefix = "";
|
|
4975
|
-
if (!inter || inter.length < 2) {
|
|
4976
|
-
prefix = "demi-";
|
|
4977
|
-
}
|
|
4978
5191
|
if (this.personN?.isMale()) {
|
|
4979
|
-
return
|
|
5192
|
+
return "fr\xE8re";
|
|
4980
5193
|
}
|
|
4981
5194
|
if (this.personN?.isFemale()) {
|
|
4982
|
-
return
|
|
5195
|
+
return "s\u0153ur";
|
|
5196
|
+
}
|
|
5197
|
+
return "fr\xE8re/s\u0153ur";
|
|
5198
|
+
}
|
|
5199
|
+
halfBlood(relation) {
|
|
5200
|
+
if (!relation || !this.isHalfBlood) {
|
|
5201
|
+
return relation ?? "";
|
|
4983
5202
|
}
|
|
4984
|
-
return
|
|
5203
|
+
return `demi-${relation}`;
|
|
4985
5204
|
}
|
|
4986
5205
|
spouse() {
|
|
4987
5206
|
if (this.personN?.isMale()) {
|
|
@@ -5078,12 +5297,12 @@ var InLawsEs = {
|
|
|
5078
5297
|
"madre del (c\xF3nyuge|esposa|esposo)": "suegra",
|
|
5079
5298
|
"padre del (c\xF3nyuge|esposa|esposo)": "suegro",
|
|
5080
5299
|
"padre/madre del (c\xF3nyuge|esposa|esposo)": "suegro/suegra",
|
|
5081
|
-
"esposa de (medio )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
|
|
5082
|
-
"esposo de (medio )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
|
|
5083
|
-
"c\xF3nyuge de (medio )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
|
|
5084
|
-
"(medio )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
|
|
5085
|
-
"(medio )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
|
|
5086
|
-
"(medio )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
|
|
5300
|
+
"esposa de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
|
|
5301
|
+
"esposo de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
|
|
5302
|
+
"c\xF3nyuge de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
|
|
5303
|
+
"(medio |media |medio/a )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
|
|
5304
|
+
"(medio |media |medio/a )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
|
|
5305
|
+
"(medio |media |medio/a )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
|
|
5087
5306
|
};
|
|
5088
5307
|
|
|
5089
5308
|
// src/kinship-translator/kinship-translator.es.ts
|
|
@@ -5163,20 +5382,25 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
|
|
|
5163
5382
|
return `${prefix}hijo/hija`;
|
|
5164
5383
|
}
|
|
5165
5384
|
sibling() {
|
|
5166
|
-
const parents1 = this.person1?.getBiologicalParents();
|
|
5167
|
-
const parentsN = this.personN?.getBiologicalParents();
|
|
5168
|
-
const inter = parents1?.intersection(parentsN);
|
|
5169
|
-
let prefix = "";
|
|
5170
|
-
if (!inter || inter.length < 2) {
|
|
5171
|
-
prefix = "medio ";
|
|
5172
|
-
}
|
|
5173
5385
|
if (this.personN?.isMale()) {
|
|
5174
|
-
return
|
|
5386
|
+
return "hermano";
|
|
5175
5387
|
}
|
|
5176
5388
|
if (this.personN?.isFemale()) {
|
|
5177
|
-
return
|
|
5389
|
+
return "hermana";
|
|
5178
5390
|
}
|
|
5179
|
-
return
|
|
5391
|
+
return "hermano/hermana";
|
|
5392
|
+
}
|
|
5393
|
+
halfBlood(relation) {
|
|
5394
|
+
if (!relation || !this.isHalfBlood) {
|
|
5395
|
+
return relation ?? "";
|
|
5396
|
+
}
|
|
5397
|
+
if (this.personN?.isFemale()) {
|
|
5398
|
+
return `media ${relation}`;
|
|
5399
|
+
}
|
|
5400
|
+
if (this.personN?.isMale()) {
|
|
5401
|
+
return `medio ${relation}`;
|
|
5402
|
+
}
|
|
5403
|
+
return `medio/a ${relation}`;
|
|
5180
5404
|
}
|
|
5181
5405
|
spouse() {
|
|
5182
5406
|
if (this.personN?.isMale()) {
|
|
@@ -5265,6 +5489,249 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
|
|
|
5265
5489
|
}
|
|
5266
5490
|
};
|
|
5267
5491
|
|
|
5492
|
+
// src/kinship-translator/patterns.ru.ts
|
|
5493
|
+
var InLawsRu = {
|
|
5494
|
+
"\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",
|
|
5495
|
+
"\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",
|
|
5496
|
+
"\u043C\u0443\u0436 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C",
|
|
5497
|
+
"\u043C\u0430\u0442\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0451\u0449\u0430",
|
|
5498
|
+
"\u043E\u0442\u0435\u0446 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C",
|
|
5499
|
+
"\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",
|
|
5500
|
+
"\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",
|
|
5501
|
+
"\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",
|
|
5502
|
+
"\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",
|
|
5503
|
+
"(\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",
|
|
5504
|
+
"(\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",
|
|
5505
|
+
"(\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"
|
|
5506
|
+
};
|
|
5507
|
+
|
|
5508
|
+
// src/kinship-translator/kinship-translator.ru.ts
|
|
5509
|
+
var GENITIVE = {
|
|
5510
|
+
\u0441\u044B\u043D: "\u0441\u044B\u043D\u0430",
|
|
5511
|
+
\u0434\u043E\u0447\u044C: "\u0434\u043E\u0447\u0435\u0440\u0438",
|
|
5512
|
+
\u0440\u0435\u0431\u0451\u043D\u043E\u043A: "\u0440\u0435\u0431\u0451\u043D\u043A\u0430",
|
|
5513
|
+
\u0431\u0440\u0430\u0442: "\u0431\u0440\u0430\u0442\u0430",
|
|
5514
|
+
\u0441\u0435\u0441\u0442\u0440\u0430: "\u0441\u0435\u0441\u0442\u0440\u044B",
|
|
5515
|
+
\u0441\u0438\u0431\u043B\u0438\u043D\u0433: "\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430",
|
|
5516
|
+
\u043E\u0442\u0435\u0446: "\u043E\u0442\u0446\u0430",
|
|
5517
|
+
\u043C\u0430\u0442\u044C: "\u043C\u0430\u0442\u0435\u0440\u0438",
|
|
5518
|
+
\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C: "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044F",
|
|
5519
|
+
\u043C\u0443\u0436: "\u043C\u0443\u0436\u0430",
|
|
5520
|
+
\u0436\u0435\u043D\u0430: "\u0436\u0435\u043D\u044B",
|
|
5521
|
+
\u0441\u0443\u043F\u0440\u0443\u0433: "\u0441\u0443\u043F\u0440\u0443\u0433\u0430",
|
|
5522
|
+
\u0441\u0443\u043F\u0440\u0443\u0433\u0430: "\u0441\u0443\u043F\u0440\u0443\u0433\u0438"
|
|
5523
|
+
};
|
|
5524
|
+
var toGenitive = (word) => GENITIVE[word] ?? word;
|
|
5525
|
+
var cousinWord = (degree, sex) => {
|
|
5526
|
+
const stem = degree <= 1 ? "\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D" : degree === 2 ? "\u0442\u0440\u043E\u044E\u0440\u043E\u0434\u043D" : degree === 3 ? "\u0447\u0435\u0442\u0432\u0435\u0440\u043E\u044E\u0440\u043E\u0434\u043D" : `${degree + 1}-\u044E\u0440\u043E\u0434\u043D`;
|
|
5527
|
+
if (sex === "m") {
|
|
5528
|
+
return `${stem}\u044B\u0439 \u0431\u0440\u0430\u0442`;
|
|
5529
|
+
}
|
|
5530
|
+
if (sex === "f") {
|
|
5531
|
+
return `${stem}\u0430\u044F \u0441\u0435\u0441\u0442\u0440\u0430`;
|
|
5532
|
+
}
|
|
5533
|
+
return `${stem}\u044B\u0439 \u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430`;
|
|
5534
|
+
};
|
|
5535
|
+
var praRepeat = (count) => count > 0 ? "\u043F\u0440\u0430".repeat(count) : "";
|
|
5536
|
+
var sexOf = (person) => {
|
|
5537
|
+
if (person?.isMale?.()) {
|
|
5538
|
+
return "m";
|
|
5539
|
+
}
|
|
5540
|
+
if (person?.isFemale?.()) {
|
|
5541
|
+
return "f";
|
|
5542
|
+
}
|
|
5543
|
+
return "n";
|
|
5544
|
+
};
|
|
5545
|
+
var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
|
|
5546
|
+
indirect() {
|
|
5547
|
+
let degree = Math.abs(this.pathN?.degree ?? 0);
|
|
5548
|
+
if (degree > 0) {
|
|
5549
|
+
degree = degree - 1;
|
|
5550
|
+
}
|
|
5551
|
+
return cousinWord(degree, sexOf(this.personN));
|
|
5552
|
+
}
|
|
5553
|
+
removal() {
|
|
5554
|
+
const level = this.pathN?.level ?? 0;
|
|
5555
|
+
let degree = Math.abs(this.pathN?.degree ?? 0);
|
|
5556
|
+
if (degree > 0) {
|
|
5557
|
+
degree = degree - 1;
|
|
5558
|
+
}
|
|
5559
|
+
if (!degree) {
|
|
5560
|
+
return level < 0 ? this.nibling() : this.auncle();
|
|
5561
|
+
}
|
|
5562
|
+
const removed = Math.abs(level);
|
|
5563
|
+
return `${cousinWord(degree, sexOf(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
|
|
5564
|
+
}
|
|
5565
|
+
auncle() {
|
|
5566
|
+
const level = Math.abs(this.pathN?.level ?? 0);
|
|
5567
|
+
const pra = praRepeat(Math.max(0, level - 2));
|
|
5568
|
+
const sex = sexOf(this.personN);
|
|
5569
|
+
if (sex === "m") {
|
|
5570
|
+
return `${pra}\u0434\u044F\u0434\u044F`;
|
|
5571
|
+
}
|
|
5572
|
+
if (sex === "f") {
|
|
5573
|
+
return `${pra}\u0442\u0451\u0442\u044F`;
|
|
5574
|
+
}
|
|
5575
|
+
return `${pra}\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F`;
|
|
5576
|
+
}
|
|
5577
|
+
nibling() {
|
|
5578
|
+
const level = Math.abs(this.pathN?.level ?? 0);
|
|
5579
|
+
const pra = praRepeat(Math.max(0, level - 2));
|
|
5580
|
+
const sex = sexOf(this.personN);
|
|
5581
|
+
if (sex === "m") {
|
|
5582
|
+
return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
|
|
5583
|
+
}
|
|
5584
|
+
if (sex === "f") {
|
|
5585
|
+
return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
|
|
5586
|
+
}
|
|
5587
|
+
return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
|
|
5588
|
+
}
|
|
5589
|
+
parent() {
|
|
5590
|
+
const level = Math.abs(this.pathN?.level ?? 0);
|
|
5591
|
+
const sex = sexOf(this.personN);
|
|
5592
|
+
if (level <= 1) {
|
|
5593
|
+
if (sex === "m") {
|
|
5594
|
+
return "\u043E\u0442\u0435\u0446";
|
|
5595
|
+
}
|
|
5596
|
+
if (sex === "f") {
|
|
5597
|
+
return "\u043C\u0430\u0442\u044C";
|
|
5598
|
+
}
|
|
5599
|
+
return "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C";
|
|
5600
|
+
}
|
|
5601
|
+
if (level === 2) {
|
|
5602
|
+
if (sex === "m") {
|
|
5603
|
+
return "\u0434\u0435\u0434";
|
|
5604
|
+
}
|
|
5605
|
+
if (sex === "f") {
|
|
5606
|
+
return "\u0431\u0430\u0431\u0443\u0448\u043A\u0430";
|
|
5607
|
+
}
|
|
5608
|
+
return "\u0434\u0435\u0434/\u0431\u0430\u0431\u0443\u0448\u043A\u0430";
|
|
5609
|
+
}
|
|
5610
|
+
const pra = praRepeat(level - 2);
|
|
5611
|
+
if (sex === "m") {
|
|
5612
|
+
return `${pra}\u0434\u0435\u0434`;
|
|
5613
|
+
}
|
|
5614
|
+
if (sex === "f") {
|
|
5615
|
+
return `${pra}\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
|
|
5616
|
+
}
|
|
5617
|
+
return `${pra}\u0434\u0435\u0434/\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
|
|
5618
|
+
}
|
|
5619
|
+
child() {
|
|
5620
|
+
const level = Math.abs(this.pathN?.level ?? 0);
|
|
5621
|
+
const sex = sexOf(this.personN);
|
|
5622
|
+
if (level <= 1) {
|
|
5623
|
+
if (sex === "m") {
|
|
5624
|
+
return "\u0441\u044B\u043D";
|
|
5625
|
+
}
|
|
5626
|
+
if (sex === "f") {
|
|
5627
|
+
return "\u0434\u043E\u0447\u044C";
|
|
5628
|
+
}
|
|
5629
|
+
return "\u0440\u0435\u0431\u0451\u043D\u043E\u043A";
|
|
5630
|
+
}
|
|
5631
|
+
if (level === 2) {
|
|
5632
|
+
if (sex === "m") {
|
|
5633
|
+
return "\u0432\u043D\u0443\u043A";
|
|
5634
|
+
}
|
|
5635
|
+
if (sex === "f") {
|
|
5636
|
+
return "\u0432\u043D\u0443\u0447\u043A\u0430";
|
|
5637
|
+
}
|
|
5638
|
+
return "\u0432\u043D\u0443\u043A/\u0432\u043D\u0443\u0447\u043A\u0430";
|
|
5639
|
+
}
|
|
5640
|
+
const pra = praRepeat(level - 2);
|
|
5641
|
+
if (sex === "m") {
|
|
5642
|
+
return `${pra}\u0432\u043D\u0443\u043A`;
|
|
5643
|
+
}
|
|
5644
|
+
if (sex === "f") {
|
|
5645
|
+
return `${pra}\u0432\u043D\u0443\u0447\u043A\u0430`;
|
|
5646
|
+
}
|
|
5647
|
+
return `${pra}\u0432\u043D\u0443\u043A/\u0432\u043D\u0443\u0447\u043A\u0430`;
|
|
5648
|
+
}
|
|
5649
|
+
sibling() {
|
|
5650
|
+
const sex = sexOf(this.personN);
|
|
5651
|
+
if (sex === "m") {
|
|
5652
|
+
return "\u0431\u0440\u0430\u0442";
|
|
5653
|
+
}
|
|
5654
|
+
if (sex === "f") {
|
|
5655
|
+
return "\u0441\u0435\u0441\u0442\u0440\u0430";
|
|
5656
|
+
}
|
|
5657
|
+
return "\u0441\u0438\u0431\u043B\u0438\u043D\u0433";
|
|
5658
|
+
}
|
|
5659
|
+
halfBlood(relation) {
|
|
5660
|
+
if (!relation || !this.isHalfBlood) {
|
|
5661
|
+
return relation ?? "";
|
|
5662
|
+
}
|
|
5663
|
+
if (/сестра|дочь|мать|тётя|бабушка|жена|племянница|внучка/.test(
|
|
5664
|
+
relation
|
|
5665
|
+
)) {
|
|
5666
|
+
return `\u0441\u0432\u043E\u0434\u043D\u0430\u044F ${relation}`;
|
|
5667
|
+
}
|
|
5668
|
+
return `\u0441\u0432\u043E\u0434\u043D\u044B\u0439 ${relation}`;
|
|
5669
|
+
}
|
|
5670
|
+
spouse() {
|
|
5671
|
+
const sex = sexOf(this.personN);
|
|
5672
|
+
if (sex === "m") {
|
|
5673
|
+
return "\u043C\u0443\u0436";
|
|
5674
|
+
}
|
|
5675
|
+
if (sex === "f") {
|
|
5676
|
+
return "\u0436\u0435\u043D\u0430";
|
|
5677
|
+
}
|
|
5678
|
+
return "\u0441\u0443\u043F\u0440\u0443\u0433";
|
|
5679
|
+
}
|
|
5680
|
+
ofSpouse(relation) {
|
|
5681
|
+
if (!relation) {
|
|
5682
|
+
return "";
|
|
5683
|
+
}
|
|
5684
|
+
const spouse = this.path?.[1].indi;
|
|
5685
|
+
const sex = sexOf(spouse);
|
|
5686
|
+
const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
|
|
5687
|
+
return `${relation} ${toGenitive(spouseType)}`;
|
|
5688
|
+
}
|
|
5689
|
+
spouseOf(relation) {
|
|
5690
|
+
if (!relation) {
|
|
5691
|
+
return "";
|
|
5692
|
+
}
|
|
5693
|
+
const spouse = this.path?.[this.path.length - 1].indi;
|
|
5694
|
+
const sex = sexOf(spouse);
|
|
5695
|
+
const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
|
|
5696
|
+
return `${spouseType} ${toGenitive(relation)}`;
|
|
5697
|
+
}
|
|
5698
|
+
of(relation) {
|
|
5699
|
+
const formattedName = nameFormatter(this.path?.[0]?.indi, {
|
|
5700
|
+
nameOrder: "first-last"
|
|
5701
|
+
});
|
|
5702
|
+
let name = formattedName.inOrder.filter(Boolean).join(" ");
|
|
5703
|
+
if (this.displayName === "none") {
|
|
5704
|
+
name = "";
|
|
5705
|
+
} else if (this.displayName === "givenname") {
|
|
5706
|
+
name = formattedName.givenname;
|
|
5707
|
+
} else if (this.displayName === "surname") {
|
|
5708
|
+
name = `${formattedName.surname}`;
|
|
5709
|
+
}
|
|
5710
|
+
if (!name || !relation) {
|
|
5711
|
+
return relation ?? "";
|
|
5712
|
+
}
|
|
5713
|
+
return `${name}: ${relation}`;
|
|
5714
|
+
}
|
|
5715
|
+
inLaw(relation) {
|
|
5716
|
+
let inLawRelation = relation;
|
|
5717
|
+
Object.keys(InLawsRu).find((pattern) => {
|
|
5718
|
+
const regex = new RegExp(`^${pattern}$`);
|
|
5719
|
+
if (relation?.match(regex)) {
|
|
5720
|
+
inLawRelation = InLawsRu[pattern];
|
|
5721
|
+
return true;
|
|
5722
|
+
}
|
|
5723
|
+
return false;
|
|
5724
|
+
});
|
|
5725
|
+
return inLawRelation ?? "";
|
|
5726
|
+
}
|
|
5727
|
+
relationType(relation) {
|
|
5728
|
+
if (!relation || !this.pathN?.relation) {
|
|
5729
|
+
return relation ?? "";
|
|
5730
|
+
}
|
|
5731
|
+
return `${this.pathN.relation} ${relation}`;
|
|
5732
|
+
}
|
|
5733
|
+
};
|
|
5734
|
+
|
|
5268
5735
|
// src/kinship-translator/kinship-translator.ts
|
|
5269
5736
|
var KinshipTranslator = class {
|
|
5270
5737
|
constructor(person1, person2, lang = "en", entirePath, displayName = "givenname") {
|
|
@@ -5358,6 +5825,7 @@ var KinshipTranslator = class {
|
|
|
5358
5825
|
} else if (personN.level !== 0) {
|
|
5359
5826
|
relation = this.removal();
|
|
5360
5827
|
}
|
|
5828
|
+
relation = this.translator?.halfBlood(relation);
|
|
5361
5829
|
relation = this.translator?.relationType(relation);
|
|
5362
5830
|
if (this.translator?.isOfSpouse) {
|
|
5363
5831
|
relation = this.translator?.ofSpouse(relation);
|
|
@@ -6694,7 +7162,7 @@ var Families = class _Families extends List {
|
|
|
6694
7162
|
// package.json
|
|
6695
7163
|
var package_default = {
|
|
6696
7164
|
name: "@treeviz/gedcom-parser",
|
|
6697
|
-
version: "2.0.
|
|
7165
|
+
version: "2.0.10"};
|
|
6698
7166
|
|
|
6699
7167
|
// src/utils/get-product-details.ts
|
|
6700
7168
|
var isDevelopment = () => {
|
|
@@ -8031,4 +8499,4 @@ if (isDev) {
|
|
|
8031
8499
|
}
|
|
8032
8500
|
var parser_default = GedcomTree;
|
|
8033
8501
|
|
|
8034
|
-
export { ACCEPTED_DATE_FORMATS, ACCEPTED_DATE_FORMATS_REGEX, ADOPTED, BIOLOGICAL, BIRTH, BIRTH_ASC, BIRTH_DESC, Common, CommonDate, CommonName, CommonNote, CustomTags, DATE_ASC, DATE_DESC, DEATH_ASC, DEATH_DESC, DEFAULT, EVERY, Existed, FEMALE, FOSTER, FRIEND, Fam, Families, GedCom, parser_default as GedcomTree, ID_GETTER_REG, ID_REG, ID_SPLIT_REG, Indi, Individuals, KinshipTranslator, KinshipTranslatorBasic, KinshipTranslatorDe as KinshipTranslatorDE, KinshipTranslatorEn as KinshipTranslatorEN, KinshipTranslatorEs as KinshipTranslatorES, KinshipTranslatorFr as KinshipTranslatorFR, KinshipTranslatorHU, LINE_REG, List, MALE, MAX_FILE_SIZE_TO_SYNC, OTHER, Obje, Objects, PARTNER, PartnerType, PlaceType, REF_LINE_REG, Range, RelationType, Repo, Repositories, SEALING, SINGLE, SPOUSE, STEP, Sour, Sources, Subm, Submitters, UNKOWN, commonDateFormatter, create, createCommon, createCommonDate, createCommonName, createCommonNote, createFam, createGedCom, createIndi, createObje, createProxy, createRepo, createSour, createSubm, dateFormatter, parser_default as default, extractSeparationYears, extractSplitPoints, findMatchingRangeForSplitRange, fromTuple, generateSplitRanges, getAllProp, getBirthAsc, getCacheManagerFactory, getDateLocale, getFamilyWith, getI18n, getKinshipTranslatorClass, getListTag, getMarriageAsc, getMarriageAscAndBirth, getMarriageAscAndChildBirth, getName, getNameAsc, getNameAscAndBirth, getNameDesc, getPlaceParserProvider, getPlaceParts, getPlaceTranslatorProvider, getPlaces, getRawSize, getValidKey, getValidKeys, getValidTag, getVersion, hungarianOrdinalize, i18n, idGetter, implemented, inRange, initializeCache, isCommonDate, isDevelopment, isGedcomString, isId, isIntersectedRange, isOnlyMainProp, isRangeContained, isValidKey, marriageDateFormatter, mergeGedcoms, nameFormatter, notImplemented, noteDateFormatter, ordinalize, parseRangeBounds, pathCache, placeTranslator, profilePictureCache, relativesCache, resetCacheManagerFactory, resetDateLocaleProvider, resetI18nProvider, resetKinshipTranslatorClass, resetPlaceParserProvider, resetPlaceTranslatorProvider, resetRelativesCache, setCacheManagerFactory, setDateLocaleProvider, setI18nProvider, setKinshipTranslatorClass, setNestedGroup, setPlaceParserProvider, setPlaceTranslatorProvider, splitOverlappingRanges, splitRange, translators_exports as translators, validateGedcomContent };
|
|
8502
|
+
export { ACCEPTED_DATE_FORMATS, ACCEPTED_DATE_FORMATS_REGEX, ADOPTED, BIOLOGICAL, BIRTH, BIRTH_ASC, BIRTH_DESC, Common, CommonDate, CommonName, CommonNote, CustomTags, DATE_ASC, DATE_DESC, DEATH_ASC, DEATH_DESC, DEFAULT, EVERY, Existed, FEMALE, FOSTER, FRIEND, Fam, Families, GedCom, parser_default as GedcomTree, ID_GETTER_REG, ID_REG, ID_SPLIT_REG, Indi, Individuals, KinshipTranslator, KinshipTranslatorBasic, KinshipTranslatorDe as KinshipTranslatorDE, KinshipTranslatorEn as KinshipTranslatorEN, KinshipTranslatorEs as KinshipTranslatorES, KinshipTranslatorFr as KinshipTranslatorFR, KinshipTranslatorHU, KinshipTranslatorRu as KinshipTranslatorRU, LINE_REG, List, MALE, MAX_FILE_SIZE_TO_SYNC, OTHER, Obje, Objects, PARTNER, PartnerType, PlaceType, REF_LINE_REG, Range, RelationType, Repo, Repositories, SEALING, SINGLE, SPOUSE, STEP, Sour, Sources, Subm, Submitters, UNKOWN, cacheDiscoveredPath, commonDateFormatter, create, createCommon, createCommonDate, createCommonName, createCommonNote, createFam, createGedCom, createIndi, createObje, createProxy, createRepo, createSour, createSubm, dateFormatter, parser_default as default, extractSeparationYears, extractSplitPoints, findMatchingRangeForSplitRange, fromTuple, generateSplitRanges, getAllProp, getBirthAsc, getCacheManagerFactory, getDateLocale, getFamilyWith, getI18n, getKinshipTranslatorClass, getListTag, getMarriageAsc, getMarriageAscAndBirth, getMarriageAscAndChildBirth, getName, getNameAsc, getNameAscAndBirth, getNameDesc, getPlaceParserProvider, getPlaceParts, getPlaceTranslatorProvider, getPlaces, getRawSize, getValidKey, getValidKeys, getValidTag, getVersion, hungarianOrdinalize, i18n, idGetter, implemented, inRange, initializeCache, isCommonDate, isDevelopment, isGedcomString, isId, isIntersectedRange, isOnlyMainProp, isRangeContained, isValidKey, marriageDateFormatter, mergeGedcoms, nameFormatter, notImplemented, noteDateFormatter, ordinalize, parseRangeBounds, pathCache, placeTranslator, profilePictureCache, relativesCache, resetCacheManagerFactory, resetDateLocaleProvider, resetI18nProvider, resetKinshipTranslatorClass, resetPlaceParserProvider, resetPlaceTranslatorProvider, resetRelativesCache, setCacheManagerFactory, setDateLocaleProvider, setI18nProvider, setKinshipTranslatorClass, setNestedGroup, setPlaceParserProvider, setPlaceTranslatorProvider, splitOverlappingRanges, splitRange, translators_exports as translators, validateGedcomContent };
|