UNPKG

gedcom-ts

Version:

TypeScript GEDCOM toolkit for browser apps: import .ged/.zip, edit typed genealogy data, and export GEDCOM or GEDZIP.

2 lines (1 loc) 17.2 kB
var D=(e,n)=>()=>(e&&(n=e(e=0)),n);var w=D(()=>{});function Y(e){function n(L){let m=L.trim();return!m||m===e.unknownDate?!1:z.test(m)||_.test(m)}function a(L){let m=L.trim();if(!m||m===e.unknownDate)return e.onUnknown;if(z.test(m))return e.inYear(m);let y=_.exec(m);if(y){let C=y[1].toLowerCase(),$=y[2];switch(C){case"bef":return e.beforeYear($);case"aft":return e.afterYear($);case"vers":case"circa":case"environ":case"about":case"abt":case"est":case"cal":return e.aboutYear($);default:return e.inYear($)}}return e.onFullDate(m)}function o(L,m){let y=L.trim(),C=m.trim();return e.lifeRange(y,C,n(y))}function c(L){let m=L.trim();return z.test(m)?e.seesDayInYear(m):n(m)?e.seesDayOnPhrase(a(m)):e.seesDayOnFullDate(m)}return{BOOKLET_UNKNOWN_DATE:e.unknownDate,isYearOnlyDate:n,onDate:a,lifeDateRange:o,seesDayOn:c}}var z,_,V=D(()=>{z=/^\d{3,4}$/,_=/^(vers|circa|environ|about|ABT|BEF|AFT|EST|CAL|INT|FROM|TO)\s+(\d{3,4})$/i});function pe(e){return e.normalize("NFD").replace(/\p{M}/gu,"").toLowerCase()}function he(e){return ge.has(pe(e))}function j(e,n){function a(k){let i=k.trim();if(!i)return null;let h=i.indexOf(", ");return h>=0?{city:i.slice(0,h).trim(),country:i.slice(h+2).trim(),raw:i}:he(i)?{city:null,country:i,raw:i}:{city:i,country:null,raw:i}}function o(k){let i=a(k);return i?i.city&&i.country?`${i.city}, ${n.countryPhrase(i.country)}`:i.city?i.city:i.country?n.countryPhrase(i.country):i.raw:""}function c(k,i){let h=o(i);if(!h)return"";let B=n.locationPhrase(h);return e.isYearOnlyDate(k)?`,${B}`:B}function L(k){let i=o(k);return i?n.locationPhrase(i):""}function m(k,i,h,B){let P=i.trim(),N=B.trim();return P&&P===N?{birth:"",death:c(h,N)}:{birth:c(k,P),death:c(h,N)}}function y(k,i){let h=o(k),B=o(i);if(!h&&!B)return"";if(h&&B&&h===B)return n.lifeRangeSame(h);if(h&&B)return n.lifeRangeFromTo(h,B);let P=h||B;return n.lifeRangeSingle(P)}function C(k,i){let h=e.onDate(k),B=i.trim();return h===e.onDate("")&&!B?null:B?h===e.onDate("")?L(B).trim()||null:`${h}${c(k,B)}`:h}function $(k){let i=k?.trim();return!i||i===e.onDate("")?"":` ${i}`}return{parsePlaceLabel:a,placeCore:o,afterDateLocation:c,atLocation:L,birthDeathLocationPhrases:m,lifeRangeLocation:y,marriageWhenWhere:C,embedMarriageWhenWhere:$}}var ge,X=D(()=>{ge=new Set(["france","germany","deutschland","spain","espana","italy","italia","belgium","switzerland","united kingdom","uk","england","scotland","ireland","portugal","netherlands","holland","luxembourg","austria","poland","russia","canada","united states","usa","morocco","algeria","tunisia","allemagne","espagne","italie","belgique","suisse","royaume-uni","angleterre","\xE9cosse","irlande","pays-bas","pologne","russie","\xE9tats-unis","maroc","alg\xE9rie","tunisie","nederland","polska","\xF6sterreich","schweiz","\u0645\u0635\u0631","\u05D9\u05E9\u05E8\u05D0\u05DC"].map(e=>e.normalize("NFD").replace(/\p{M}/gu,"").toLowerCase()))});function fe(e,n){let a=e.toLowerCase();return n.some(o=>a.startsWith(o.toLowerCase()))}function J(e,n,a){return fe(e,n)?` ${e}`:`${a}${e}`}var Z=D(()=>{});function Be(e){return e!=null&&ke.includes(e)}function A(e){return Be(e)?e:"en"}var ke,T=D(()=>{ke=["en","fr","de","nl","es","zh","it","pt","pl","ar","he"]});function Le(){let e=globalThis;return e[v]??(e[v]=new Map),e[v]}function S(e){let n=Le().get(e);if(!n)throw new W(e);return n}var v,W,x=D(()=>{T();v="__GEDCOM_TS_BOOKLET_LOCALE_CACHE__";W=class extends Error{constructor(n){super(`Booklet locale "${n}" is not loaded. Call await ensureBookletLocale("${n}") before using sync booklet APIs.`),this.name="BookletLocaleNotLoadedError"}}});function be(e){return S(e).genderWords}function M(e,n){return be(A(n))[e]}function Q(e,n){let a=A(n);if(a==="en")return"";if(a==="fr")return e>1?"s":"";let o=S(a).genderPhrases;return o&&!o.usesPluralS?"":e>1?"s":""}function q(e,n){if(e<=0)return"";let a=A(n),o=S(a).genderPhrases?.recensedChildren(e);return o||(a==="en"?e===1?"1 child listed":`${e} children listed`:e===1?"1 enfant recens\xE9":`${e} enfants recens\xE9s`)}function I(e,n){if(e<=0)return"";let a=A(n),o=S(a).genderPhrases?.otherUnions(e);return o||(a==="en"?e===1?"1 other union cited in the tree":`${e} other unions cited in the tree`:e===1?"1 autre union cit\xE9e dans l'arbre":`${e} autres unions cit\xE9es dans l'arbre`)}var ee=D(()=>{T();x()});function ne(e){let n=A(e);return S(n).messages}var te=D(()=>{T();x();x()});function F(e,n=6,a){let o=ne(a);if(e.length===0)return o.childrenNone;let c=e.map(L=>L.name);return c.length<=n?c.join(", "):`${c.slice(0,n).join(", ")} ${o.childrenMore(c.length-n)}`}var re=D(()=>{T();te()});function oe(e){return e.map(n=>n.trim()).filter(Boolean).map(n=>n.endsWith(".")?n:`${n}.`).join(" ")}function E(e){let n=e.map(o=>o.trim()).filter(Boolean);return n.length===0?"":`${n.map(o=>o.endsWith(".")?o.slice(0,-1):o).join(" ; ")}.`}function U(e){return e.trim().split(/\s+/)[0]??e}function p(e,n){return e[Math.abs(n)%e.length]}function K(e,n){switch(e.length){case 0:return"";case 1:return e[0];case 2:return`${e[0]} ${n} ${e[1]}`;default:return`${e.slice(0,-1).join(", ")} ${n} ${e.at(-1)}`}}function De(e){let n=e.key.match(/^gen-(\d+)$/);return n?{genNum:Number(n[1]),letter:null}:{genNum:0,letter:e.key.match(/^letter-(.+)$/)?.[1]??null}}function Ee(e){return e.includes("\u2014")?e.split("\u2014").pop()?.trim()??"":""}function ae(e,n,a){let o=a.dateModule,c=a.placeModule,L=a.unknownDates;function m(t){return t!==L&&t!=="Dates inconnues"}function y(t,s){if(t.parents.length===0)return null;let r=M(t.sex,e),l=t.parents.map(d=>d.name);return l.length===1?p(n.parentsSingle(l[0],r),s+3):p(n.parentsMultiple(K(l,n.listConjunction),r),s+3)}function C(t,s){if(s.marriageLabel)return s.marriageLabel;let r=t.events.find(l=>l.kind===String("MARR"));return r?c.marriageWhenWhere(r.date,r.place):null}function $(t,s,r){let l=M(t.sex,e),d=s.coParent.name,u=[],g=c.embedMarriageWhenWhere(C(t,s));if(g?u.push(p(n.unionWithMarriage(d,g),r+7)):u.push(p(n.unionWithoutMarriage(d,l),r+7)),s.children.length>0){let f=s.children.map(b=>U(b.name));f.length===1?u.push(p(n.unionOneChild(f[0],l),r+11)):u.push(p(n.unionManyChildren(K(f,n.listConjunction),l),r+11))}return E(u)}function k(t,s){let r=t.events.find(g=>g.kind===String("BIRT")),l=t.events.find(g=>g.kind===String("DEAT")),d=t.name,u=M(t.sex,e);if(r&&l){let g=o.onDate(r.date),f=o.onDate(l.date),b=c.birthDeathLocationPhrases(r.date,r.place,l.date,l.place),R=c.lifeRangeLocation(r.place,l.place),O=b.birth||c.afterDateLocation(r.date,r.place);return p(n.lifeBornAndDied(d,u,g,b.birth,f,b.death,o.lifeDateRange(r.date,l.date),R,o.seesDayOn(r.date),O),s)}if(r){let g=o.onDate(r.date),f=c.afterDateLocation(r.date,r.place);return p(n.lifeBirthOnly(d,u,g,f,o.seesDayOn(r.date)),s)}if(l){let g=o.onDate(l.date),f=c.afterDateLocation(l.date,l.place);return p(n.lifeDeathOnly(d,u,g,f),s+1)}return m(t.datesLabel)?p(n.lifeApproxDates(d,u,t.datesLabel),s+2):null}function i(t,s,r){let l=o.onDate(t.date),d=c.afterDateLocation(t.date,t.place),u=M(r,e);switch(t.kind){case"MARR":return p(n.eventMarriage(l,d),s);case"DIV":return n.eventDivorce(l,d);case"BAPM":case"CHR":return p(n.eventBaptism(l,d,u),s);case"BURI":return p(n.eventBurial(l,d),s);case"CREM":return n.eventCremation(l,d);case"OCCU":return n.eventOccupation(t.date,c.atLocation(t.place));default:return`${t.label.toLowerCase()} ${l}${d}`}}let h=new Set([String("BIRT"),String("DEAT"),String("MARR")]);function B(t,s){let r=[],l=0;for(let d of t.events){if(h.has(d.kind))continue;let u=i(d,s+l,t.sex);u&&r.push(u),l+=1}return r}function P(t){let s=t.entries.length,r=Ee(t.subtitle),{genNum:l,letter:d}=De(t),u=Q(s,e);if(l>0){let f=l===1?n.chapterGen1(s,u):n.chapterGenN(l,s,u,r);return p(f,l)}let g=d??t.title;return p(n.chapterLetter(t.title,s,u,g,r),s)}function N(t,s){let r=t.familyId,l=t.partners[0]?.name??n.defaultAncestor,d=t.partners[1]?.name,u=t.children,g;if(d){let f=p(n.familyCouple(U(l),U(d),l,d),r),b=c.embedMarriageWhenWhere(t.marriageLabel),R=p(b?n.familyUnionWithMarriage(b):n.familyUnionWithoutMarriage,r+1);if(u.length===0)g=E([`${f} ${R}`,n.familyNoDescendants]);else if(u.length===1)g=E([`${f} ${R}`,p(n.familyOneChild(u[0].name),r+2)]);else if(s==="summary")g=E([`${f} ${R}`,n.familyNChildren(u.length,F(u,5,e))]);else{let O=u.map(G=>{let me=m(G.datesLabel)?` (${G.datesLabel})`:"";return`${G.name}${me}`});g=E([`${f} ${R}`,n.familyDescendantsList(K(O,n.listConjunction))])}}else g=oe([p(n.familyLoneFigure(U(l),l),r),t.marriageLabel?p(n.familyMarriageNoted(c.embedMarriageWhenWhere(t.marriageLabel)),r+1):"",u.length>0?p([...n.familyDescendantsNoted(F(u,5,e)),n.familyDescendantsRecensed(q(u.length,e),F(u,5,e))],r+2):""]);return[g]}function ce(t){let s=t.indi,r=[],l=k(t,s);if(l)r.push(l);else{let g=M(t.sex,e);r.push(p(n.personBranchPresent(t.name,g),s))}let d=y(t,s);d&&r.push(d),t.unions[0]&&(r.push($(t,t.unions[0],s)),t.unions.length>1&&r.push(I(t.unions.length-1,e)));let u=B(t,s);return u.length>0&&r.push(E(u.slice(0,2))),t.sosa!=null&&r.length>0&&r.push(`SOSA ${t.sosa}`),r.length<=1&&t.events.length===0&&t.unions.length===0?oe([n.personFewRecords(t.name),n.personResearchHint]):E(r)}function de(t){let s=t.indi,r=[],l=[],d=k(t,s);d&&l.push(d);let u=y(t,s);u&&l.push(u);let g=B(t,s);if(g.length>0&&l.push(E(g)),l.length>0?r.push(E(l)):r.push(n.personPortraitIncomplete(t.name)),t.unions.length>0){let f=t.unions.map((b,R)=>$(t,b,s+20+R));r.push(p(n.personUnionSection(E(f)),s+5))}else{let f=t.events.filter(b=>b.kind===String("MARR"));if(f.length>0){let b=f.map((R,O)=>i(R,s+30+O,t.sex));r.push(E(b))}}return t.notesPreview&&r.push(p(n.personResearchNote(t.notesPreview),s+9)),r}return{buildChapterIntroNarrative:P,buildFamilyNarrative:N,buildPersonSummaryNarrative:ce,buildPersonDetailedNarratives:de}}var le=D(()=>{w();ee();re()});var Re,ie,Ce,Pe,se,H,ue,Ae,Se,Me,un,Ne=D(()=>{w();V();X();Z();le();Re={BIRT:"Geburt",DEAT:"Tod",MARR:"Heirat",DIV:"Scheidung",BAPM:"Taufe (BAPM)",CHR:"Taufe",BURI:"Beerdigung",CREM:"Ein\xE4scherung",EVEN:"Ereignis",OCCU:"Beruf"},ie={unknownDates:"Unbekannte Daten",unknownDate:"Unbekanntes Datum",chapterUnknownDates:"Unbekannte Daten",generation1Title:"Generation 1 \u2014 Referenzperson",generationTitle:e=>`Generation ${e}`,letterTitle:e=>`Buchstabe ${e}`,chapterSubtitle:(e,n)=>`${e} Person(en) \u2014 ${n}`,chapterDateAbout:"circa",childrenNone:"keine Kinder verzeichnet",childrenMore:e=>`(+ ${e} weitere)`,pagesEstimate:e=>`~${e} Seiten`,pagesEmpty:"\u2014",adviceDetailed120:"Bei mehr als 120 Personen erzeugt der Kurzmodus ein deutlich besser lesbares Dokument und wird schneller generiert.",adviceDetailed50:"Ab 50 Personen wird der Kurzmodus f\xFCr eine erste Lekt\xFCre weiterhin empfohlen.",adviceSummary25:"Wenige Personen: Der Detailmodus bietet eine sch\xF6ne Seite pro Person, ideal zum Ausdrucken.",actTypeLabels:Re,spouseUnknown:"Ehepartner nicht erfasst",timelineTitle:e=>`Chronologische Zeitleiste \u2014 ${e}`,timelineUnknownDates:"unbekannte Daten",pdf:{coverSubtitle:"Familiengeschichte aus Ihrer GEDCOM-Datei",referencePerson:e=>`Referenzperson (SOSA 1): ${e}`,personCount:e=>`${e} Person(en) in diesem Heft`,localNote:"Dokument lokal in Ihrem Browser erstellt.",tocTitle:"Inhaltsverzeichnis",modeSummary:"Kurzmodus \u2013 kurze Erz\xE4hlungen",modeDetailed:"Detailmodus \u2013 ausf\xFChrliche Biografien",contentHeading:"Inhalt des Hefts",introSummary:"Dieses Heft erz\xE4hlt Ihren Stammbaum in Prosa: Geburten, Ehen, Nachkommenschaft und Todesf\xE4lle, rekonstruiert aus der GEDCOM-Datei. Jedes Kapitel beginnt mit einer Generation oder einem Buchstaben und entfaltet Lebensl\xE4ufe in kurzen Erz\xE4hlungen.",introDetailed:"Dieses Heft entwickelt jede Person als narrative Biografie, fortlaufend innerhalb jedes Kapitels. Jede neue Generation beginnt auf einer eigenen Seite.",introSosa:"SOSA-Nummern werden erw\xE4hnt, wenn die Nummerierung aktiv ist. Inhaltsverzeichnis am Ende des Dokuments.",familyHeading:e=>`Die Familie ${e}`,generationLabel:e=>`Generation ${e}`,pageFooter:e=>`Seite ${e}`},timeline:{legendBirth:"Geburt",legendDeath:"Tod",legendMarriage:"Heirat",overflow:e=>`+ ${e} weitere auf den folgenden Seiten`,continuation:"(Zeitleiste fortgesetzt)"}},Ce={F:{born:"geboren",died:"verstorben",baptized:"getauft",present:"vertreten",linked:"verbunden",offspring:"Kind",descendant:"Nachfahrin",childOf:"Tochter",parentOf:"Mutter"},M:{born:"geboren",died:"verstorben",baptized:"getauft",present:"vertreten",linked:"verbunden",offspring:"Kind",descendant:"Nachkomme",childOf:"Sohn",parentOf:"Vater"},U:{born:"geboren",died:"verstorben",baptized:"getauft",present:"vertreten",linked:"verbunden",offspring:"Kind",descendant:"Nachkomme",childOf:"Kind",parentOf:"Elternteil"},X:{born:"geboren",died:"verstorben",baptized:"getauft",present:"vertreten",linked:"verbunden",offspring:"Kind",descendant:"Nachkomme",childOf:"Kind",parentOf:"Elternteil"}},Pe={usesPluralS:!1,recensedChildren:e=>e===1?"1 Kind verzeichnet":`${e} Kinder verzeichnet`,otherUnions:e=>e===1?"1 weitere Verbindung im Stammbaum":`${e} weitere Verbindungen im Stammbaum`},se=["in "],H=Y({unknownDate:"Unbekanntes Datum",onUnknown:"an einem unbekannten Datum",inYear:e=>`im Jahr ${e}`,beforeYear:e=>`vor ${e}`,afterYear:e=>`nach ${e}`,aboutYear:e=>`um ${e}`,onFullDate:e=>`am ${e}`,lifeRange:(e,n)=>`Von ${e} bis ${n}`,seesDayInYear:e=>`wurde im Jahr ${e} geboren`,seesDayOnPhrase:e=>`wurde ${e} geboren`,seesDayOnFullDate:e=>`wurde am ${e} geboren`}),ue=j(H,{countryPrefixes:se,countryPhrase:e=>`in ${e}`,locationPhrase:e=>J(e,se," in "),lifeRangeSame:e=>`, ${e}`,lifeRangeFromTo:(e,n)=>`, von ${e} bis ${n}`,lifeRangeSingle:e=>`, ${e}`}),Ae={listConjunction:"und",defaultAncestor:"Ein Vorfahre",parentsSingle:(e,n)=>[`Kind von ${e}`,`${n.childOf} von ${e}`,`${n.descendant} von ${e}`],parentsMultiple:(e,n)=>[`${n.offspring} von ${e}`,`${n.descendant} von ${e}`,`Kind von ${e}`],unionWithMarriage:(e,n)=>[`heiratet ${e}${n}`,`vereint sich mit ${e}${n}`,`Ehe mit ${e}${n}`],unionWithoutMarriage:(e,n)=>[`${n.linked} mit ${e}`,`teilt das Leben mit ${e}`,`Union verzeichnet mit ${e}`],unionOneChild:(e,n)=>[`darunter ${e}`,`mit Kind ${e}`,`${n.parentOf} von ${e}`],unionManyChildren:(e,n)=>[`darunter die Kinder ${e}`,`mit Nachkommen ${e}`,`${n.parentOf} von ${e}`],lifeBornAndDied:(e,n,a,o,c,L,m,y,C,$)=>[`${e}, ${n.born} ${a}${o}, verstarb ${c}${L}`,`${m}${y}, ${e} pr\xE4gt diese Linie`,`${e} ${C}${$} und verstarb ${c}${L}`],lifeBirthOnly:(e,n,a,o,c)=>[`${e}, ${n.born} ${a}${o}`,`Geburt von ${e} ${a}${o}`,`${e} ${c}${o}`],lifeDeathOnly:(e,n,a,o)=>[`${e}, ${n.died} ${a}${o}`,`Tod von ${e} ${a}${o}`,`${e} verstarb ${a}${o}`],lifeApproxDates:(e,n,a)=>[`${e}, ${n.present} in den Registern um ${a}`,`${e} wird um ${a} eingeordnet`,`${e} (${a})`],eventMarriage:(e,n)=>[`Eheschlie\xDFung ${e}${n}`,`Union verzeichnet ${e}${n}`,`Hochzeit ${e}${n}`,`vereinigt${e}${n}`],eventDivorce:(e,n)=>`Scheidung verzeichnet ${e}${n}`,eventBaptism:(e,n,a)=>[`Taufe ${e}${n}`,`${a.baptized} ${e}${n}`,`Taufritus ${e}${n}`],eventBurial:(e,n)=>[`Beerdigung ${e}${n}`,`Bestattung ${e}${n}`,`Beisetzung ${e}${n}`],eventCremation:(e,n)=>`Ein\xE4scherung verzeichnet ${e}${n}`,eventOccupation:(e,n)=>`Beruf vermerkt (${e})${n}`,chapterGen1:(e,n)=>[`Ausgangspunkt der Erz\xE4hlung: ${e} Figur${n} an der Wurzel des Stammbaums.`,`Hier beginnt die Linie, mit ${e} Referenzperson${n}.`],chapterGenN:(e,n,a,o)=>[`In Generation ${e} treten ${n} Vorfahr${a} auf die B\xFChne.`,`Diese Generation umfasst ${n} Person${a}${o?` (${o})`:""}.`,`${n} Leben${a} kreuzen sich in dieser Generation${o?`, zwischen ${o}`:""}.`],chapterLetter:(e,n,a,o,c)=>[`${e}: ${n} Portr\xE4t${a} zu entdecken.`,`${n} Person${a} f\xFCr den Buchstaben ${o}${c?` (${c})`:""}.`],familyCouple:(e,n,a,o)=>[`${e} und ${n}`,`Das Paar ${e} \u2013 ${n}`,`${a} und ${o}`],familyUnionWithMarriage:e=>[`vereinigen sich${e}`,`heiraten${e}`,`feiern ihre Union${e}`],familyUnionWithoutMarriage:["bilden eine Union","sind in den Registern vereint","erscheinen als Ehepartner"],familyNoDescendants:"ohne Nachkommen in der Datei verzeichnet",familyOneChild:e=>[`mit Kind ${e}`,`geb\xE4ren ${e}`,`haben ein Kind, ${e}`],familyNChildren:(e,n)=>`${e} Kinder: ${n}`,familyDescendantsList:e=>`Nachkommen: ${e}`,familyLoneFigure:(e,n)=>[`${e} nimmt einen zentralen Platz in dieser Linie ein`,`${n}, eine Leitfigur in diesem Kapitel`],familyMarriageNoted:e=>[`Ehe verzeichnet${e}`,`Union vermerkt${e}`],familyDescendantsNoted:e=>[`Nachkommen: ${e}`],familyDescendantsRecensed:(e,n)=>`${e}: ${n}`,personBranchPresent:(e,n)=>[`${e}, ${n.present} in diesem Zweig`,`${e} erscheint in diesem Kapitel`],personFewRecords:e=>`${e}: bisher wenige Eintr\xE4ge`,personResearchHint:"weitere Recherchen k\xF6nnen dieses Portr\xE4t vervollst\xE4ndigen",personPortraitIncomplete:e=>`${e} \u2014 Portr\xE4t noch aus den Archiven zu vervollst\xE4ndigen.`,personUnionSection:e=>[e,`Familienseite: ${e}`,`Auf der ehelichen Seite: ${e}`],personResearchNote:e=>[`Recherchenotiz: ${e}`,`Die Archive vermerken: ${e}`,`Bemerkenswert: ${e}`]},Se=ae("de",Ae,{dateModule:H,placeModule:ue,unknownDates:ie.unknownDates}),Me={messages:ie,genderWords:Ce,genderPhrases:Pe,dateModule:H,placeModule:ue,narrativeModule:Se},un=Me});Ne();export{un as default};