@treeviz/gedcom-parser 2.0.8 → 2.0.9
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 +382 -158
- package/dist/classes/indi.d.ts.map +1 -1
- package/dist/cli/index.js +382 -158
- package/dist/constants/index.js +381 -157
- package/dist/factories/index.js +381 -157
- package/dist/index.js +383 -159
- package/dist/kinship-translator/index.js +381 -157
- 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/patterns.es.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 +383 -159
- package/package.json +1 -1
package/dist/factories/index.js
CHANGED
|
@@ -1898,6 +1898,135 @@ var profilePictureCache = (gedcom, key, value) => {
|
|
|
1898
1898
|
const cached = caches.profilePictureCache?.[fullKey];
|
|
1899
1899
|
return cached;
|
|
1900
1900
|
};
|
|
1901
|
+
var isNonBiologicalPath = (path) => path.some(
|
|
1902
|
+
(item) => item.relation && item.relation !== "biological" /* BIOLOGICAL */
|
|
1903
|
+
);
|
|
1904
|
+
var invertHop = (kinship) => {
|
|
1905
|
+
if (kinship === "parent") {
|
|
1906
|
+
return "child";
|
|
1907
|
+
}
|
|
1908
|
+
if (kinship === "child") {
|
|
1909
|
+
return "parent";
|
|
1910
|
+
}
|
|
1911
|
+
return kinship;
|
|
1912
|
+
};
|
|
1913
|
+
var hopRelation = (from, toIndi, kinship, inherited) => {
|
|
1914
|
+
if (kinship === "parent" || kinship === "child") {
|
|
1915
|
+
const parent = kinship === "parent" ? toIndi : from.indi;
|
|
1916
|
+
const child = kinship === "parent" ? from.indi : toIndi;
|
|
1917
|
+
const currentRelation = child.getParentType(parent);
|
|
1918
|
+
if (currentRelation && currentRelation !== "biological" /* BIOLOGICAL */) {
|
|
1919
|
+
return currentRelation;
|
|
1920
|
+
}
|
|
1921
|
+
}
|
|
1922
|
+
if (inherited && inherited !== "biological" /* BIOLOGICAL */) {
|
|
1923
|
+
return inherited;
|
|
1924
|
+
}
|
|
1925
|
+
return void 0;
|
|
1926
|
+
};
|
|
1927
|
+
var rebuildPathFromHops = (hops, skipRelation = false) => {
|
|
1928
|
+
if (hops.length === 0) {
|
|
1929
|
+
return [];
|
|
1930
|
+
}
|
|
1931
|
+
const path = [
|
|
1932
|
+
{
|
|
1933
|
+
indi: hops[0].indi,
|
|
1934
|
+
kinship: "self",
|
|
1935
|
+
level: 0,
|
|
1936
|
+
levelUp: 0,
|
|
1937
|
+
levelDown: 0,
|
|
1938
|
+
degree: 0
|
|
1939
|
+
}
|
|
1940
|
+
];
|
|
1941
|
+
for (let i = 1; i < hops.length; i++) {
|
|
1942
|
+
const prev = path[i - 1];
|
|
1943
|
+
const { indi, kinship } = hops[i];
|
|
1944
|
+
const relation = skipRelation ? void 0 : hopRelation(prev, indi, kinship, prev.relation);
|
|
1945
|
+
if (kinship === "parent") {
|
|
1946
|
+
path.push({
|
|
1947
|
+
indi,
|
|
1948
|
+
kinship,
|
|
1949
|
+
relation,
|
|
1950
|
+
level: prev.level + 1,
|
|
1951
|
+
levelUp: prev.levelUp + 1,
|
|
1952
|
+
levelDown: prev.levelDown,
|
|
1953
|
+
degree: prev.degree
|
|
1954
|
+
});
|
|
1955
|
+
continue;
|
|
1956
|
+
}
|
|
1957
|
+
if (kinship === "child") {
|
|
1958
|
+
path.push({
|
|
1959
|
+
indi,
|
|
1960
|
+
kinship,
|
|
1961
|
+
relation,
|
|
1962
|
+
level: prev.level - 1,
|
|
1963
|
+
levelUp: prev.levelUp,
|
|
1964
|
+
levelDown: prev.levelDown + 1,
|
|
1965
|
+
degree: prev.levelUp ? prev.level > 0 ? prev.levelUp - prev.level + 1 : prev.levelDown - Math.abs(prev.level) : 0
|
|
1966
|
+
});
|
|
1967
|
+
continue;
|
|
1968
|
+
}
|
|
1969
|
+
path.push({
|
|
1970
|
+
indi,
|
|
1971
|
+
kinship,
|
|
1972
|
+
relation,
|
|
1973
|
+
level: prev.level,
|
|
1974
|
+
levelUp: prev.levelUp,
|
|
1975
|
+
levelDown: prev.levelDown,
|
|
1976
|
+
degree: prev.degree
|
|
1977
|
+
});
|
|
1978
|
+
}
|
|
1979
|
+
return path;
|
|
1980
|
+
};
|
|
1981
|
+
var storePathIfBetter = (gedcom, fromId, toId, path) => {
|
|
1982
|
+
const key = `${fromId}|${toId}`;
|
|
1983
|
+
const existing = pathCache(gedcom, key);
|
|
1984
|
+
if (existing && (!isNonBiologicalPath(existing) || isNonBiologicalPath(path))) {
|
|
1985
|
+
return;
|
|
1986
|
+
}
|
|
1987
|
+
pathCache(gedcom, key, path);
|
|
1988
|
+
};
|
|
1989
|
+
var cacheDiscoveredPath = (gedcom, path) => {
|
|
1990
|
+
const n = path.length;
|
|
1991
|
+
if (n < 2) {
|
|
1992
|
+
return;
|
|
1993
|
+
}
|
|
1994
|
+
for (let i = 0; i < n; i++) {
|
|
1995
|
+
const fromId = path[i].indi.id;
|
|
1996
|
+
if (!fromId) {
|
|
1997
|
+
continue;
|
|
1998
|
+
}
|
|
1999
|
+
for (let j = i + 1; j < n; j++) {
|
|
2000
|
+
const toId = path[j].indi.id;
|
|
2001
|
+
if (!toId) {
|
|
2002
|
+
continue;
|
|
2003
|
+
}
|
|
2004
|
+
const isOriginalPair = i === 0 && j === n - 1;
|
|
2005
|
+
const isDirectHop = j === i + 1;
|
|
2006
|
+
const slice = path.slice(i, j + 1);
|
|
2007
|
+
const sliceMixed = isNonBiologicalPath(slice);
|
|
2008
|
+
if (!isOriginalPair && !isDirectHop && sliceMixed) {
|
|
2009
|
+
continue;
|
|
2010
|
+
}
|
|
2011
|
+
const forward = i === 0 ? slice : rebuildPathFromHops(slice, !sliceMixed);
|
|
2012
|
+
const reverseHops = [
|
|
2013
|
+
{
|
|
2014
|
+
indi: slice[slice.length - 1].indi,
|
|
2015
|
+
kinship: "self"
|
|
2016
|
+
}
|
|
2017
|
+
];
|
|
2018
|
+
for (let k = slice.length - 2; k >= 0; k--) {
|
|
2019
|
+
reverseHops.push({
|
|
2020
|
+
indi: slice[k].indi,
|
|
2021
|
+
kinship: invertHop(slice[k + 1].kinship)
|
|
2022
|
+
});
|
|
2023
|
+
}
|
|
2024
|
+
const reverse = rebuildPathFromHops(reverseHops, !sliceMixed);
|
|
2025
|
+
storePathIfBetter(gedcom, fromId, toId, forward);
|
|
2026
|
+
storePathIfBetter(gedcom, toId, fromId, reverse);
|
|
2027
|
+
}
|
|
2028
|
+
}
|
|
2029
|
+
};
|
|
1901
2030
|
|
|
1902
2031
|
// src/utils/get-places.ts
|
|
1903
2032
|
var getPlaces = (common, type = ["ALL" /* All */], maxLevel = 1, level = 0, mainKey) => {
|
|
@@ -3946,7 +4075,6 @@ var Indi = class extends Common {
|
|
|
3946
4075
|
if (cache) {
|
|
3947
4076
|
return cache;
|
|
3948
4077
|
}
|
|
3949
|
-
const visited = new Individuals().append(this);
|
|
3950
4078
|
const mainItem = {
|
|
3951
4079
|
indi: this,
|
|
3952
4080
|
level: 0,
|
|
@@ -3955,129 +4083,155 @@ var Indi = class extends Common {
|
|
|
3955
4083
|
degree: 0,
|
|
3956
4084
|
kinship: "self"
|
|
3957
4085
|
};
|
|
3958
|
-
const
|
|
4086
|
+
const mainPath = [mainItem];
|
|
3959
4087
|
if (this.id === usedIndi.id) {
|
|
3960
|
-
return
|
|
4088
|
+
return mainPath;
|
|
3961
4089
|
}
|
|
3962
|
-
const
|
|
3963
|
-
|
|
3964
|
-
|
|
3965
|
-
|
|
3966
|
-
|
|
3967
|
-
|
|
3968
|
-
let helper = 0;
|
|
3969
|
-
while (queue.length > 0) {
|
|
3970
|
-
if (helper++ > 1e6) {
|
|
3971
|
-
break;
|
|
3972
|
-
}
|
|
3973
|
-
const {
|
|
3974
|
-
indi,
|
|
3975
|
-
path: path2,
|
|
3976
|
-
kinship,
|
|
3977
|
-
relation,
|
|
3978
|
-
level,
|
|
3979
|
-
levelUp,
|
|
3980
|
-
levelDown,
|
|
3981
|
-
degree,
|
|
3982
|
-
breakOnNext,
|
|
3983
|
-
breakAfterNext,
|
|
3984
|
-
inLaw
|
|
3985
|
-
} = queue.shift();
|
|
3986
|
-
if (usedIndi.id === indi.id) {
|
|
3987
|
-
if (breakOnNext) {
|
|
3988
|
-
return void 0;
|
|
4090
|
+
const bfs = (biologicalOnly) => {
|
|
4091
|
+
const visited = new Individuals().append(this);
|
|
4092
|
+
const queue = [
|
|
4093
|
+
{
|
|
4094
|
+
...mainItem,
|
|
4095
|
+
path: mainPath
|
|
3989
4096
|
}
|
|
3990
|
-
|
|
3991
|
-
|
|
3992
|
-
|
|
3993
|
-
|
|
3994
|
-
|
|
3995
|
-
if (breakOnNext || breakAfterNext) {
|
|
3996
|
-
additional.breakOnNext = breakOnNext || breakAfterNext;
|
|
3997
|
-
}
|
|
3998
|
-
if (inLaw) {
|
|
3999
|
-
additional.inLaw = inLaw;
|
|
4000
|
-
}
|
|
4001
|
-
if (kinship === "spouse" && breakAfterSpouse) {
|
|
4002
|
-
if (path2.length <= 2) {
|
|
4003
|
-
additional.inLaw = true;
|
|
4004
|
-
} else {
|
|
4005
|
-
additional.breakOnNext = true;
|
|
4097
|
+
];
|
|
4098
|
+
let helper = 0;
|
|
4099
|
+
while (queue.length > 0) {
|
|
4100
|
+
if (helper++ > 1e6) {
|
|
4101
|
+
break;
|
|
4006
4102
|
}
|
|
4007
|
-
|
|
4008
|
-
|
|
4009
|
-
|
|
4103
|
+
const {
|
|
4104
|
+
indi,
|
|
4105
|
+
path,
|
|
4106
|
+
kinship,
|
|
4107
|
+
relation,
|
|
4108
|
+
level,
|
|
4109
|
+
levelUp,
|
|
4110
|
+
levelDown,
|
|
4111
|
+
degree,
|
|
4112
|
+
breakOnNext,
|
|
4113
|
+
breakAfterNext,
|
|
4114
|
+
inLaw
|
|
4115
|
+
} = queue.shift();
|
|
4116
|
+
if (usedIndi.id === indi.id) {
|
|
4117
|
+
if (breakOnNext) {
|
|
4118
|
+
return void 0;
|
|
4119
|
+
}
|
|
4120
|
+
return path;
|
|
4121
|
+
}
|
|
4122
|
+
visited.append(indi);
|
|
4123
|
+
const additional = {};
|
|
4124
|
+
if (breakOnNext || breakAfterNext) {
|
|
4125
|
+
additional.breakOnNext = breakOnNext || breakAfterNext;
|
|
4126
|
+
}
|
|
4127
|
+
if (inLaw) {
|
|
4128
|
+
additional.inLaw = inLaw;
|
|
4129
|
+
}
|
|
4130
|
+
if (!biologicalOnly && kinship === "spouse" && breakAfterSpouse) {
|
|
4131
|
+
if (path.length <= 2) {
|
|
4132
|
+
additional.inLaw = true;
|
|
4133
|
+
} else {
|
|
4134
|
+
additional.breakOnNext = true;
|
|
4135
|
+
}
|
|
4136
|
+
}
|
|
4137
|
+
if (kinship !== "child" || !breakAfterSpouse) {
|
|
4138
|
+
indi.getBiologicalFathers().copy().merge(indi.getBiologicalMothers()).merge(indi.getFathers().copy().merge(indi.getMothers())).forEach((relative) => {
|
|
4139
|
+
if (!visited.has(relative)) {
|
|
4140
|
+
const currentRelation = indi.getParentType(relative);
|
|
4141
|
+
const isNonBiological = !!currentRelation && currentRelation !== "biological" /* BIOLOGICAL */;
|
|
4142
|
+
if (biologicalOnly && isNonBiological) {
|
|
4143
|
+
return;
|
|
4144
|
+
}
|
|
4145
|
+
if (!biologicalOnly && breakAfterNonBiological && isNonBiological) {
|
|
4146
|
+
additional.breakAfterNext = true;
|
|
4147
|
+
}
|
|
4148
|
+
const newItem = {
|
|
4149
|
+
indi: relative,
|
|
4150
|
+
kinship: "parent",
|
|
4151
|
+
relation: isNonBiological ? currentRelation : relation,
|
|
4152
|
+
level: level + 1,
|
|
4153
|
+
levelUp: levelUp + 1,
|
|
4154
|
+
levelDown,
|
|
4155
|
+
degree,
|
|
4156
|
+
...additional
|
|
4157
|
+
};
|
|
4158
|
+
queue.push({
|
|
4159
|
+
...newItem,
|
|
4160
|
+
path: [...path, newItem]
|
|
4161
|
+
});
|
|
4162
|
+
}
|
|
4163
|
+
});
|
|
4164
|
+
}
|
|
4165
|
+
indi.getChildren().forEach((relative) => {
|
|
4010
4166
|
if (!visited.has(relative)) {
|
|
4011
|
-
const currentRelation =
|
|
4012
|
-
|
|
4167
|
+
const currentRelation = relative.getParentType(indi);
|
|
4168
|
+
const isNonBiological = !!currentRelation && currentRelation !== "biological" /* BIOLOGICAL */;
|
|
4169
|
+
if (biologicalOnly && isNonBiological) {
|
|
4170
|
+
return;
|
|
4171
|
+
}
|
|
4172
|
+
if (!biologicalOnly && breakAfterNonBiological && isNonBiological) {
|
|
4013
4173
|
additional.breakAfterNext = true;
|
|
4014
4174
|
}
|
|
4015
4175
|
const newItem = {
|
|
4016
4176
|
indi: relative,
|
|
4017
|
-
kinship: "
|
|
4018
|
-
relation:
|
|
4019
|
-
level: level
|
|
4020
|
-
levelUp
|
|
4021
|
-
levelDown,
|
|
4022
|
-
degree,
|
|
4177
|
+
kinship: "child",
|
|
4178
|
+
relation: isNonBiological ? currentRelation : relation,
|
|
4179
|
+
level: level - 1,
|
|
4180
|
+
levelUp,
|
|
4181
|
+
levelDown: levelDown + 1,
|
|
4182
|
+
degree: levelUp ? level > 0 ? levelUp - level + 1 : levelDown - Math.abs(level) : 0,
|
|
4023
4183
|
...additional
|
|
4024
4184
|
};
|
|
4025
4185
|
queue.push({
|
|
4026
4186
|
...newItem,
|
|
4027
|
-
path: [...
|
|
4187
|
+
path: [...path, newItem]
|
|
4028
4188
|
});
|
|
4029
4189
|
}
|
|
4030
4190
|
});
|
|
4031
|
-
|
|
4032
|
-
|
|
4033
|
-
if (!visited.has(relative)) {
|
|
4034
|
-
const currentRelation = relative.getParentType(indi);
|
|
4035
|
-
if (breakAfterNonBiological && currentRelation !== "biological" /* BIOLOGICAL */) {
|
|
4036
|
-
additional.breakAfterNext = true;
|
|
4037
|
-
}
|
|
4038
|
-
const newItem = {
|
|
4039
|
-
indi: relative,
|
|
4040
|
-
kinship: "child",
|
|
4041
|
-
relation: currentRelation && currentRelation !== "biological" /* BIOLOGICAL */ ? currentRelation : relation,
|
|
4042
|
-
level: level - 1,
|
|
4043
|
-
levelUp,
|
|
4044
|
-
levelDown: levelDown + 1,
|
|
4045
|
-
degree: levelUp ? level > 0 ? levelUp - level + 1 : levelDown - Math.abs(level) : 0,
|
|
4046
|
-
...additional
|
|
4047
|
-
};
|
|
4048
|
-
queue.push({
|
|
4049
|
-
...newItem,
|
|
4050
|
-
path: [...path2, newItem]
|
|
4051
|
-
});
|
|
4191
|
+
if (biologicalOnly) {
|
|
4192
|
+
continue;
|
|
4052
4193
|
}
|
|
4053
|
-
|
|
4054
|
-
|
|
4055
|
-
|
|
4056
|
-
|
|
4057
|
-
|
|
4058
|
-
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4194
|
+
indi.getCoParents().forEach((relative) => {
|
|
4195
|
+
if (!visited.has(relative)) {
|
|
4196
|
+
const currentAddition = {};
|
|
4197
|
+
if (relation && relation !== "biological" /* BIOLOGICAL */) {
|
|
4198
|
+
currentAddition.relation = relation;
|
|
4199
|
+
}
|
|
4200
|
+
if (inLaw) {
|
|
4201
|
+
currentAddition.breakOnNext = true;
|
|
4202
|
+
}
|
|
4203
|
+
const newItem = {
|
|
4204
|
+
indi: relative,
|
|
4205
|
+
kinship: "spouse",
|
|
4206
|
+
level,
|
|
4207
|
+
levelUp,
|
|
4208
|
+
levelDown,
|
|
4209
|
+
degree,
|
|
4210
|
+
...additional,
|
|
4211
|
+
...currentAddition
|
|
4212
|
+
};
|
|
4213
|
+
queue.push({
|
|
4214
|
+
...newItem,
|
|
4215
|
+
path: [...path, newItem]
|
|
4216
|
+
});
|
|
4062
4217
|
}
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
4072
|
-
|
|
4073
|
-
|
|
4074
|
-
|
|
4075
|
-
path: [...path2, newItem]
|
|
4076
|
-
});
|
|
4077
|
-
}
|
|
4078
|
-
});
|
|
4218
|
+
});
|
|
4219
|
+
}
|
|
4220
|
+
return void 0;
|
|
4221
|
+
};
|
|
4222
|
+
const foundPath = bfs(false);
|
|
4223
|
+
const lastItem = foundPath?.[foundPath.length - 1];
|
|
4224
|
+
if (lastItem?.relation && lastItem.relation !== "biological" /* BIOLOGICAL */) {
|
|
4225
|
+
const biologicalPath = bfs(true);
|
|
4226
|
+
if (biologicalPath) {
|
|
4227
|
+
cacheDiscoveredPath(this._gedcom, biologicalPath);
|
|
4228
|
+
return biologicalPath;
|
|
4229
|
+
}
|
|
4079
4230
|
}
|
|
4080
|
-
|
|
4231
|
+
if (foundPath) {
|
|
4232
|
+
cacheDiscoveredPath(this._gedcom, foundPath);
|
|
4233
|
+
}
|
|
4234
|
+
return foundPath;
|
|
4081
4235
|
}
|
|
4082
4236
|
kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname") {
|
|
4083
4237
|
const KinshipTranslatorClass2 = getKinshipTranslatorClass();
|
|
@@ -5049,6 +5203,44 @@ var KinshipTranslatorBasic = class {
|
|
|
5049
5203
|
}
|
|
5050
5204
|
return this.pathN?.indi;
|
|
5051
5205
|
}
|
|
5206
|
+
/**
|
|
5207
|
+
* True when the path goes through a common ancestor whose two children
|
|
5208
|
+
* (the person we came from and the person we go to) share fewer than two
|
|
5209
|
+
* biological parents — i.e. they are half-siblings, so every collateral
|
|
5210
|
+
* relative on this path is a half-aunt/half-cousin/... too.
|
|
5211
|
+
*
|
|
5212
|
+
* Direct ancestors/descendants and paths that already use a
|
|
5213
|
+
* step/adopted/foster edge are never half-blood.
|
|
5214
|
+
*/
|
|
5215
|
+
get isHalfBlood() {
|
|
5216
|
+
const path = this.path;
|
|
5217
|
+
if (!path || path.length < 3) {
|
|
5218
|
+
return false;
|
|
5219
|
+
}
|
|
5220
|
+
if (path.some(
|
|
5221
|
+
(item) => item.relation && item.relation !== "biological" /* BIOLOGICAL */
|
|
5222
|
+
)) {
|
|
5223
|
+
return false;
|
|
5224
|
+
}
|
|
5225
|
+
let peakIndex = -1;
|
|
5226
|
+
for (let i = 1; i < path.length; i++) {
|
|
5227
|
+
if (path[i].kinship === "parent") {
|
|
5228
|
+
peakIndex = i;
|
|
5229
|
+
}
|
|
5230
|
+
}
|
|
5231
|
+
if (peakIndex <= 0 || peakIndex >= path.length - 1) {
|
|
5232
|
+
return false;
|
|
5233
|
+
}
|
|
5234
|
+
if (path[peakIndex + 1].kinship !== "child") {
|
|
5235
|
+
return false;
|
|
5236
|
+
}
|
|
5237
|
+
const siblingA = path[peakIndex - 1].indi;
|
|
5238
|
+
const siblingB = path[peakIndex + 1].indi;
|
|
5239
|
+
const parentsA = siblingA.getBiologicalParents();
|
|
5240
|
+
const parentsB = siblingB.getBiologicalParents();
|
|
5241
|
+
const inter = parentsA.intersection(parentsB);
|
|
5242
|
+
return inter.length === 1 && (parentsA.length > 1 || parentsB.length > 1);
|
|
5243
|
+
}
|
|
5052
5244
|
indirect() {
|
|
5053
5245
|
return "";
|
|
5054
5246
|
}
|
|
@@ -5076,6 +5268,9 @@ var KinshipTranslatorBasic = class {
|
|
|
5076
5268
|
relationType(relation) {
|
|
5077
5269
|
return relation ?? "";
|
|
5078
5270
|
}
|
|
5271
|
+
halfBlood(relation) {
|
|
5272
|
+
return relation ?? "";
|
|
5273
|
+
}
|
|
5079
5274
|
of(relation) {
|
|
5080
5275
|
return relation ?? "";
|
|
5081
5276
|
}
|
|
@@ -5314,14 +5509,34 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
|
|
|
5314
5509
|
return `${prefix.replace(/nagy$/, "")}unoka`;
|
|
5315
5510
|
}
|
|
5316
5511
|
sibling() {
|
|
5317
|
-
const parents1 = this.person1?.getBiologicalParents();
|
|
5318
|
-
const parentsN = this.personN?.getBiologicalParents();
|
|
5319
|
-
const inter = parents1?.intersection(parentsN);
|
|
5320
|
-
if (!inter || inter.length < 2) {
|
|
5321
|
-
return "f\xE9ltestv\xE9r";
|
|
5322
|
-
}
|
|
5323
5512
|
return "testv\xE9r";
|
|
5324
5513
|
}
|
|
5514
|
+
halfBlood(relation) {
|
|
5515
|
+
if (!relation || !this.isHalfBlood) {
|
|
5516
|
+
return relation ?? "";
|
|
5517
|
+
}
|
|
5518
|
+
const [head, ...rest] = relation.split(" ");
|
|
5519
|
+
if (!head) {
|
|
5520
|
+
return relation;
|
|
5521
|
+
}
|
|
5522
|
+
const prefixed = this.prefixHalf(head);
|
|
5523
|
+
return [prefixed, ...rest].join(" ");
|
|
5524
|
+
}
|
|
5525
|
+
/**
|
|
5526
|
+
* AkH. 139: compounds of more than two members stay closed up to 6
|
|
5527
|
+
* syllables; longer ones are hyphenated at the main boundary. A head
|
|
5528
|
+
* that is already hyphenated also takes a hyphenated half- prefix.
|
|
5529
|
+
*/
|
|
5530
|
+
prefixHalf(head) {
|
|
5531
|
+
if (head.includes("-") || !/[aáeéiíoóöőuúüű]/i.test(head)) {
|
|
5532
|
+
return `f\xE9l-${head}`;
|
|
5533
|
+
}
|
|
5534
|
+
const syllables = (head.match(/[aáeéiíoóöőuúüű]/gi) ?? []).length + 1;
|
|
5535
|
+
if (syllables > 6) {
|
|
5536
|
+
return `f\xE9l-${head}`;
|
|
5537
|
+
}
|
|
5538
|
+
return `f\xE9l${head}`;
|
|
5539
|
+
}
|
|
5325
5540
|
spouse() {
|
|
5326
5541
|
if (this.personN?.isMale()) {
|
|
5327
5542
|
return "f\xE9rj";
|
|
@@ -5520,20 +5735,22 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
|
|
|
5520
5735
|
return `${prefix}child`;
|
|
5521
5736
|
}
|
|
5522
5737
|
sibling() {
|
|
5523
|
-
const parents1 = this.person1?.getBiologicalParents();
|
|
5524
|
-
const parentsN = this.personN?.getBiologicalParents();
|
|
5525
|
-
const inter = parents1?.intersection(parentsN);
|
|
5526
|
-
let prefix = "";
|
|
5527
|
-
if (!inter || inter.length < 2) {
|
|
5528
|
-
prefix = "half-";
|
|
5529
|
-
}
|
|
5530
5738
|
if (this.personN?.isMale()) {
|
|
5531
|
-
return
|
|
5739
|
+
return "brother";
|
|
5532
5740
|
}
|
|
5533
5741
|
if (this.personN?.isFemale()) {
|
|
5534
|
-
return
|
|
5742
|
+
return "sister";
|
|
5743
|
+
}
|
|
5744
|
+
return "sibling";
|
|
5745
|
+
}
|
|
5746
|
+
halfBlood(relation) {
|
|
5747
|
+
if (!relation || !this.isHalfBlood) {
|
|
5748
|
+
return relation ?? "";
|
|
5749
|
+
}
|
|
5750
|
+
if (relation.includes(" ")) {
|
|
5751
|
+
return `half ${relation}`;
|
|
5535
5752
|
}
|
|
5536
|
-
return
|
|
5753
|
+
return `half-${relation}`;
|
|
5537
5754
|
}
|
|
5538
5755
|
spouse() {
|
|
5539
5756
|
if (this.personN?.isMale()) {
|
|
@@ -5715,20 +5932,22 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
|
|
|
5715
5932
|
return `${prefix}kind`;
|
|
5716
5933
|
}
|
|
5717
5934
|
sibling() {
|
|
5718
|
-
const parents1 = this.person1?.getBiologicalParents();
|
|
5719
|
-
const parentsN = this.personN?.getBiologicalParents();
|
|
5720
|
-
const inter = parents1?.intersection(parentsN);
|
|
5721
|
-
let prefix = "";
|
|
5722
|
-
if (!inter || inter.length < 2) {
|
|
5723
|
-
prefix = "Halb";
|
|
5724
|
-
}
|
|
5725
5935
|
if (this.personN?.isMale()) {
|
|
5726
|
-
return
|
|
5936
|
+
return "bruder";
|
|
5727
5937
|
}
|
|
5728
5938
|
if (this.personN?.isFemale()) {
|
|
5729
|
-
return
|
|
5939
|
+
return "schwester";
|
|
5940
|
+
}
|
|
5941
|
+
return "geschwister";
|
|
5942
|
+
}
|
|
5943
|
+
halfBlood(relation) {
|
|
5944
|
+
if (!relation || !this.isHalfBlood) {
|
|
5945
|
+
return relation ?? "";
|
|
5946
|
+
}
|
|
5947
|
+
if (/^[A-ZÄÖÜ]/.test(relation) || /[-\s]/.test(relation)) {
|
|
5948
|
+
return `Halb-${relation}`;
|
|
5730
5949
|
}
|
|
5731
|
-
return
|
|
5950
|
+
return `Halb${relation}`;
|
|
5732
5951
|
}
|
|
5733
5952
|
spouse() {
|
|
5734
5953
|
if (this.personN?.isMale()) {
|
|
@@ -5910,20 +6129,19 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
|
|
|
5910
6129
|
return `${prefix}enfant`;
|
|
5911
6130
|
}
|
|
5912
6131
|
sibling() {
|
|
5913
|
-
const parents1 = this.person1?.getBiologicalParents();
|
|
5914
|
-
const parentsN = this.personN?.getBiologicalParents();
|
|
5915
|
-
const inter = parents1?.intersection(parentsN);
|
|
5916
|
-
let prefix = "";
|
|
5917
|
-
if (!inter || inter.length < 2) {
|
|
5918
|
-
prefix = "demi-";
|
|
5919
|
-
}
|
|
5920
6132
|
if (this.personN?.isMale()) {
|
|
5921
|
-
return
|
|
6133
|
+
return "fr\xE8re";
|
|
5922
6134
|
}
|
|
5923
6135
|
if (this.personN?.isFemale()) {
|
|
5924
|
-
return
|
|
6136
|
+
return "s\u0153ur";
|
|
5925
6137
|
}
|
|
5926
|
-
return
|
|
6138
|
+
return "fr\xE8re/s\u0153ur";
|
|
6139
|
+
}
|
|
6140
|
+
halfBlood(relation) {
|
|
6141
|
+
if (!relation || !this.isHalfBlood) {
|
|
6142
|
+
return relation ?? "";
|
|
6143
|
+
}
|
|
6144
|
+
return `demi-${relation}`;
|
|
5927
6145
|
}
|
|
5928
6146
|
spouse() {
|
|
5929
6147
|
if (this.personN?.isMale()) {
|
|
@@ -6020,12 +6238,12 @@ var InLawsEs = {
|
|
|
6020
6238
|
"madre del (c\xF3nyuge|esposa|esposo)": "suegra",
|
|
6021
6239
|
"padre del (c\xF3nyuge|esposa|esposo)": "suegro",
|
|
6022
6240
|
"padre/madre del (c\xF3nyuge|esposa|esposo)": "suegro/suegra",
|
|
6023
|
-
"esposa de (medio )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
|
|
6024
|
-
"esposo de (medio )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
|
|
6025
|
-
"c\xF3nyuge de (medio )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
|
|
6026
|
-
"(medio )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
|
|
6027
|
-
"(medio )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
|
|
6028
|
-
"(medio )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
|
|
6241
|
+
"esposa de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
|
|
6242
|
+
"esposo de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
|
|
6243
|
+
"c\xF3nyuge de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
|
|
6244
|
+
"(medio |media |medio/a )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
|
|
6245
|
+
"(medio |media |medio/a )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
|
|
6246
|
+
"(medio |media |medio/a )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
|
|
6029
6247
|
};
|
|
6030
6248
|
|
|
6031
6249
|
// src/kinship-translator/kinship-translator.es.ts
|
|
@@ -6105,20 +6323,25 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
|
|
|
6105
6323
|
return `${prefix}hijo/hija`;
|
|
6106
6324
|
}
|
|
6107
6325
|
sibling() {
|
|
6108
|
-
const parents1 = this.person1?.getBiologicalParents();
|
|
6109
|
-
const parentsN = this.personN?.getBiologicalParents();
|
|
6110
|
-
const inter = parents1?.intersection(parentsN);
|
|
6111
|
-
let prefix = "";
|
|
6112
|
-
if (!inter || inter.length < 2) {
|
|
6113
|
-
prefix = "medio ";
|
|
6114
|
-
}
|
|
6115
6326
|
if (this.personN?.isMale()) {
|
|
6116
|
-
return
|
|
6327
|
+
return "hermano";
|
|
6117
6328
|
}
|
|
6118
6329
|
if (this.personN?.isFemale()) {
|
|
6119
|
-
return
|
|
6330
|
+
return "hermana";
|
|
6331
|
+
}
|
|
6332
|
+
return "hermano/hermana";
|
|
6333
|
+
}
|
|
6334
|
+
halfBlood(relation) {
|
|
6335
|
+
if (!relation || !this.isHalfBlood) {
|
|
6336
|
+
return relation ?? "";
|
|
6337
|
+
}
|
|
6338
|
+
if (this.personN?.isFemale()) {
|
|
6339
|
+
return `media ${relation}`;
|
|
6340
|
+
}
|
|
6341
|
+
if (this.personN?.isMale()) {
|
|
6342
|
+
return `medio ${relation}`;
|
|
6120
6343
|
}
|
|
6121
|
-
return
|
|
6344
|
+
return `medio/a ${relation}`;
|
|
6122
6345
|
}
|
|
6123
6346
|
spouse() {
|
|
6124
6347
|
if (this.personN?.isMale()) {
|
|
@@ -6300,6 +6523,7 @@ var KinshipTranslator = class {
|
|
|
6300
6523
|
} else if (personN.level !== 0) {
|
|
6301
6524
|
relation = this.removal();
|
|
6302
6525
|
}
|
|
6526
|
+
relation = this.translator?.halfBlood(relation);
|
|
6303
6527
|
relation = this.translator?.relationType(relation);
|
|
6304
6528
|
if (this.translator?.isOfSpouse) {
|
|
6305
6529
|
relation = this.translator?.ofSpouse(relation);
|