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
JavaScript
var D=(e,n)=>()=>(e&&(n=e(e=0)),n);var W=D(()=>{});function V(e){function n(L){let g=L.trim();return!g||g===e.unknownDate?!1:j.test(g)||K.test(g)}function a(L){let g=L.trim();if(!g||g===e.unknownDate)return e.onUnknown;if(j.test(g))return e.inYear(g);let y=K.exec(g);if(y){let R=y[1].toLowerCase(),$=y[2];switch(R){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(g)}function r(L,g){let y=L.trim(),R=g.trim();return e.lifeRange(y,R,n(y))}function u(L){let g=L.trim();return j.test(g)?e.seesDayInYear(g):n(g)?e.seesDayOnPhrase(a(g)):e.seesDayOnFullDate(g)}return{BOOKLET_UNKNOWN_DATE:e.unknownDate,isYearOnlyDate:n,onDate:a,lifeDateRange:r,seesDayOn:u}}var j,K,X=D(()=>{j=/^\d{3,4}$/,K=/^(vers|circa|environ|about|ABT|BEF|AFT|EST|CAL|INT|FROM|TO)\s+(\d{3,4})$/i});function ke(e){return e.normalize("NFD").replace(/\p{M}/gu,"").toLowerCase()}function fe(e){return he.has(ke(e))}function Q(e,n){function a(f){let i=f.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}:fe(i)?{city:null,country:i,raw:i}:{city:i,country:null,raw:i}}function r(f){let i=a(f);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 u(f,i){let h=r(i);if(!h)return"";let B=n.locationPhrase(h);return e.isYearOnlyDate(f)?`,${B}`:B}function L(f){let i=r(f);return i?n.locationPhrase(i):""}function g(f,i,h,B){let A=i.trim(),S=B.trim();return A&&A===S?{birth:"",death:u(h,S)}:{birth:u(f,A),death:u(h,S)}}function y(f,i){let h=r(f),B=r(i);if(!h&&!B)return"";if(h&&B&&h===B)return n.lifeRangeSame(h);if(h&&B)return n.lifeRangeFromTo(h,B);let A=h||B;return n.lifeRangeSingle(A)}function R(f,i){let h=e.onDate(f),B=i.trim();return h===e.onDate("")&&!B?null:B?h===e.onDate("")?L(B).trim()||null:`${h}${u(f,B)}`:h}function $(f){let i=f?.trim();return!i||i===e.onDate("")?"":` ${i}`}return{parsePlaceLabel:a,placeCore:r,afterDateLocation:u,atLocation:L,birthDeathLocationPhrases:g,lifeRangeLocation:y,marriageWhenWhere:R,embedMarriageWhenWhere:$}}var he,q=D(()=>{he=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 J(e,n){let a=e.toLowerCase();return n.some(r=>a.startsWith(r.toLowerCase()))}function Z(e,n,a){return J(e,n)?` ${e}`:`${a}${e}`}function z(e,n,a){return J(e,n)?`, ${e}`:`,${a}${e}`}var I=D(()=>{});function Le(e){return e!=null&&Be.includes(e)}function P(e){return Le(e)?e:"en"}var Be,O=D(()=>{Be=["en","fr","de","nl","es","zh","it","pt","pl","ar","he"]});function be(){let e=globalThis;return e[T]??(e[T]=new Map),e[T]}function v(e){let n=be().get(e);if(!n)throw new _(e);return n}var T,_,x=D(()=>{O();T="__GEDCOM_TS_BOOKLET_LOCALE_CACHE__";_=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 ye(e){return v(e).genderWords}function M(e,n){return ye(P(n))[e]}function ee(e,n){let a=P(n);if(a==="en")return"";if(a==="fr")return e>1?"s":"";let r=v(a).genderPhrases;return r&&!r.usesPluralS?"":e>1?"s":""}function ne(e,n){if(e<=0)return"";let a=P(n),r=v(a).genderPhrases?.recensedChildren(e);return r||(a==="en"?e===1?"1 child listed":`${e} children listed`:e===1?"1 enfant recens\xE9":`${e} enfants recens\xE9s`)}function te(e,n){if(e<=0)return"";let a=P(n),r=v(a).genderPhrases?.otherUnions(e);return r||(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 oe=D(()=>{O();x()});function re(e){let n=P(e);return v(n).messages}var ae=D(()=>{O();x();x()});function F(e,n=6,a){let r=re(a);if(e.length===0)return r.childrenNone;let u=e.map(L=>L.name);return u.length<=n?u.join(", "):`${u.slice(0,n).join(", ")} ${r.childrenMore(u.length-n)}`}var le=D(()=>{O();ae()});function se(e){return e.map(n=>n.trim()).filter(Boolean).map(n=>n.endsWith(".")?n:`${n}.`).join(" ")}function C(e){let n=e.map(r=>r.trim()).filter(Boolean);return n.length===0?"":`${n.map(r=>r.endsWith(".")?r.slice(0,-1):r).join(" ; ")}.`}function w(e){return e.trim().split(/\s+/)[0]??e}function m(e,n){return e[Math.abs(n)%e.length]}function H(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 Ce(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 ie(e,n,a){let r=a.dateModule,u=a.placeModule,L=a.unknownDates;function g(t){return t!==L&&t!=="Dates inconnues"}function y(t,s){if(t.parents.length===0)return null;let o=M(t.sex,e),l=t.parents.map(d=>d.name);return l.length===1?m(n.parentsSingle(l[0],o),s+3):m(n.parentsMultiple(H(l,n.listConjunction),o),s+3)}function R(t,s){if(s.marriageLabel)return s.marriageLabel;let o=t.events.find(l=>l.kind===String("MARR"));return o?u.marriageWhenWhere(o.date,o.place):null}function $(t,s,o){let l=M(t.sex,e),d=s.coParent.name,c=[],p=u.embedMarriageWhenWhere(R(t,s));if(p?c.push(m(n.unionWithMarriage(d,p),o+7)):c.push(m(n.unionWithoutMarriage(d,l),o+7)),s.children.length>0){let k=s.children.map(b=>w(b.name));k.length===1?c.push(m(n.unionOneChild(k[0],l),o+11)):c.push(m(n.unionManyChildren(H(k,n.listConjunction),l),o+11))}return C(c)}function f(t,s){let o=t.events.find(p=>p.kind===String("BIRT")),l=t.events.find(p=>p.kind===String("DEAT")),d=t.name,c=M(t.sex,e);if(o&&l){let p=r.onDate(o.date),k=r.onDate(l.date),b=u.birthDeathLocationPhrases(o.date,o.place,l.date,l.place),E=u.lifeRangeLocation(o.place,l.place),N=b.birth||u.afterDateLocation(o.date,o.place);return m(n.lifeBornAndDied(d,c,p,b.birth,k,b.death,r.lifeDateRange(o.date,l.date),E,r.seesDayOn(o.date),N),s)}if(o){let p=r.onDate(o.date),k=u.afterDateLocation(o.date,o.place);return m(n.lifeBirthOnly(d,c,p,k,r.seesDayOn(o.date)),s)}if(l){let p=r.onDate(l.date),k=u.afterDateLocation(l.date,l.place);return m(n.lifeDeathOnly(d,c,p,k),s+1)}return g(t.datesLabel)?m(n.lifeApproxDates(d,c,t.datesLabel),s+2):null}function i(t,s,o){let l=r.onDate(t.date),d=u.afterDateLocation(t.date,t.place),c=M(o,e);switch(t.kind){case"MARR":return m(n.eventMarriage(l,d),s);case"DIV":return n.eventDivorce(l,d);case"BAPM":case"CHR":return m(n.eventBaptism(l,d,c),s);case"BURI":return m(n.eventBurial(l,d),s);case"CREM":return n.eventCremation(l,d);case"OCCU":return n.eventOccupation(t.date,u.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 o=[],l=0;for(let d of t.events){if(h.has(d.kind))continue;let c=i(d,s+l,t.sex);c&&o.push(c),l+=1}return o}function A(t){let s=t.entries.length,o=Ee(t.subtitle),{genNum:l,letter:d}=Ce(t),c=ee(s,e);if(l>0){let k=l===1?n.chapterGen1(s,c):n.chapterGenN(l,s,c,o);return m(k,l)}let p=d??t.title;return m(n.chapterLetter(t.title,s,c,p,o),s)}function S(t,s){let o=t.familyId,l=t.partners[0]?.name??n.defaultAncestor,d=t.partners[1]?.name,c=t.children,p;if(d){let k=m(n.familyCouple(w(l),w(d),l,d),o),b=u.embedMarriageWhenWhere(t.marriageLabel),E=m(b?n.familyUnionWithMarriage(b):n.familyUnionWithoutMarriage,o+1);if(c.length===0)p=C([`${k} ${E}`,n.familyNoDescendants]);else if(c.length===1)p=C([`${k} ${E}`,m(n.familyOneChild(c[0].name),o+2)]);else if(s==="summary")p=C([`${k} ${E}`,n.familyNChildren(c.length,F(c,5,e))]);else{let N=c.map(G=>{let me=g(G.datesLabel)?` (${G.datesLabel})`:"";return`${G.name}${me}`});p=C([`${k} ${E}`,n.familyDescendantsList(H(N,n.listConjunction))])}}else p=se([m(n.familyLoneFigure(w(l),l),o),t.marriageLabel?m(n.familyMarriageNoted(u.embedMarriageWhenWhere(t.marriageLabel)),o+1):"",c.length>0?m([...n.familyDescendantsNoted(F(c,5,e)),n.familyDescendantsRecensed(ne(c.length,e),F(c,5,e))],o+2):""]);return[p]}function ge(t){let s=t.indi,o=[],l=f(t,s);if(l)o.push(l);else{let p=M(t.sex,e);o.push(m(n.personBranchPresent(t.name,p),s))}let d=y(t,s);d&&o.push(d),t.unions[0]&&(o.push($(t,t.unions[0],s)),t.unions.length>1&&o.push(te(t.unions.length-1,e)));let c=B(t,s);return c.length>0&&o.push(C(c.slice(0,2))),t.sosa!=null&&o.length>0&&o.push(`SOSA ${t.sosa}`),o.length<=1&&t.events.length===0&&t.unions.length===0?se([n.personFewRecords(t.name),n.personResearchHint]):C(o)}function pe(t){let s=t.indi,o=[],l=[],d=f(t,s);d&&l.push(d);let c=y(t,s);c&&l.push(c);let p=B(t,s);if(p.length>0&&l.push(C(p)),l.length>0?o.push(C(l)):o.push(n.personPortraitIncomplete(t.name)),t.unions.length>0){let k=t.unions.map((b,E)=>$(t,b,s+20+E));o.push(m(n.personUnionSection(C(k)),s+5))}else{let k=t.events.filter(b=>b.kind===String("MARR"));if(k.length>0){let b=k.map((E,N)=>i(E,s+30+N,t.sex));o.push(C(b))}}return t.notesPreview&&o.push(m(n.personResearchNote(t.notesPreview),s+9)),o}return{buildChapterIntroNarrative:A,buildFamilyNarrative:S,buildPersonSummaryNarrative:ge,buildPersonDetailedNarratives:pe}}var ce=D(()=>{W();oe();le()});var Re,ue,Ae,Pe,U,Y,de,ve,Me,Se,un,Ne=D(()=>{W();X();q();I();ce();Re={BIRT:"Geboorte",DEAT:"Overlijden",MARR:"Huwelijk",DIV:"Echtscheiding",BAPM:"Doop (BAPM)",CHR:"Doop",BURI:"Begrafenis",CREM:"Crematie",EVEN:"Gebeurtenis",OCCU:"Beroep"},ue={unknownDates:"Onbekende datums",unknownDate:"Onbekende datum",chapterUnknownDates:"Onbekende datums",generation1Title:"Generatie 1 \u2014 referentiepersoon",generationTitle:e=>`Generatie ${e}`,letterTitle:e=>`Letter ${e}`,chapterSubtitle:(e,n)=>`${e} persoon/personen \u2014 ${n}`,chapterDateAbout:"circa",childrenNone:"geen kinderen vermeld",childrenMore:e=>`(+ ${e} meer)`,pagesEstimate:e=>`~${e} pagina\u2019s`,pagesEmpty:"\u2014",adviceDetailed120:"Bij meer dan 120 personen levert de samenvattingsmodus een veel leesbaarder document op en wordt het sneller gegenereerd.",adviceDetailed50:"Bij meer dan 50 personen blijft de samenvattingsmodus aanbevolen voor een eerste lezing.",adviceSummary25:"Weinig personen: de detailmodus biedt een mooi blad per persoon, ideaal om af te drukken.",actTypeLabels:Re,spouseUnknown:"Echtgenoot niet vermeld",timelineTitle:e=>`Chronologische tijdlijn \u2014 ${e}`,timelineUnknownDates:"onbekende datums",pdf:{coverSubtitle:"Familiegeschiedenis uit uw GEDCOM-bestand",referencePerson:e=>`Referentiepersoon (SOSA 1): ${e}`,personCount:e=>`${e} persoon/personen in dit boekje`,localNote:"Document lokaal gegenereerd in uw browser.",tocTitle:"Inhoudsopgave",modeSummary:"Samenvattingsmodus \u2013 korte verhalen",modeDetailed:"Detailmodus \u2013 uitgebreide biografie\xEBn",contentHeading:"Inhoud van het boekje",introSummary:"Dit boekje vertelt uw stamboom in proza: geboorten, huwelijken, afstammelingen en overlijdens, gereconstrueerd uit het GEDCOM-bestand. Elk hoofdstuk opent met een generatie of letter en ontvouwt levens in korte verhalen.",introDetailed:"Dit boekje ontwikkelt elke persoon als een narratieve biografie, opeenvolgend binnen elk hoofdstuk. Elke nieuwe generatie begint op een aparte pagina.",introSosa:"SOSA-nummers worden vermeld wanneer nummering actief is. Inhoudsopgave aan het einde van het document.",familyHeading:e=>`De familie ${e}`,generationLabel:e=>`generatie ${e}`,pageFooter:e=>`Pagina ${e}`},timeline:{legendBirth:"geboorte",legendDeath:"overlijden",legendMarriage:"huwelijk",overflow:e=>`+ ${e} meer op de volgende pagina\u2019s`,continuation:"(tijdlijn vervolgd)"}},Ae={F:{born:"geboren",died:"overleden",baptized:"gedoopt",present:"aanwezig",linked:"verbonden",offspring:"kind",descendant:"nakomeling",childOf:"dochter",parentOf:"moeder"},M:{born:"geboren",died:"overleden",baptized:"gedoopt",present:"aanwezig",linked:"verbonden",offspring:"kind",descendant:"nakomeling",childOf:"zoon",parentOf:"vader"},U:{born:"geboren",died:"overleden",baptized:"gedoopt",present:"aanwezig",linked:"verbonden",offspring:"kind",descendant:"nakomeling",childOf:"kind",parentOf:"ouder"},X:{born:"geboren",died:"overleden",baptized:"gedoopt",present:"aanwezig",linked:"verbonden",offspring:"kind",descendant:"nakomeling",childOf:"kind",parentOf:"ouder"}},Pe={usesPluralS:!1,recensedChildren:e=>e===1?"1 kind vermeld":`${e} kinderen vermeld`,otherUnions:e=>e===1?"1 andere verbintenis in de stamboom":`${e} andere verbintenissen in de stamboom`},U=["in "],Y=V({unknownDate:"Onbekende datum",onUnknown:"op een onbekende datum",inYear:e=>`in ${e}`,beforeYear:e=>`v\xF3\xF3r ${e}`,afterYear:e=>`na ${e}`,aboutYear:e=>`circa ${e}`,onFullDate:e=>`op ${e}`,lifeRange:(e,n)=>`Van ${e} tot ${n}`,seesDayInYear:e=>`werd geboren in ${e}`,seesDayOnPhrase:e=>`werd geboren ${e}`,seesDayOnFullDate:e=>`werd geboren op ${e}`}),de=Q(Y,{countryPrefixes:U,countryPhrase:e=>`in ${e}`,locationPhrase:e=>Z(e,U," in "),lifeRangeSame:e=>z(e,U," in "),lifeRangeFromTo:(e,n)=>`, van ${e} tot ${n}`,lifeRangeSingle:e=>z(e,U," in ")}),ve={listConjunction:"en",defaultAncestor:"Een voorouder",parentsSingle:(e,n)=>[`kind van ${e}`,`${n.childOf} van ${e}`,`${n.descendant} van ${e}`],parentsMultiple:(e,n)=>[`${n.offspring} van ${e}`,`${n.descendant} van ${e}`,`kind van ${e}`],unionWithMarriage:(e,n)=>[`trouwt met ${e}${n}`,`verenigt zich met ${e}${n}`,`huwelijk met ${e}${n}`],unionWithoutMarriage:(e,n)=>[`${n.linked} aan ${e}`,`deelt het leven met ${e}`,`unie vermeld met ${e}`],unionOneChild:(e,n)=>[`waaronder ${e}`,`met kind ${e}`,`${n.parentOf} van ${e}`],unionManyChildren:(e,n)=>[`waaronder de kinderen ${e}`,`met nakomelingen ${e}`,`${n.parentOf} van ${e}`],lifeBornAndDied:(e,n,a,r,u,L,g,y,R,$)=>[`${e}, ${n.born} ${a}${r}, overleed ${u}${L}`,`${g}${y}, ${e} markeert deze lijn`,`${e} ${R}${$} en overleed ${u}${L}`],lifeBirthOnly:(e,n,a,r,u)=>[`${e}, ${n.born} ${a}${r}`,`Geboorte van ${e} ${a}${r}`,`${e} ${u}${r}`],lifeDeathOnly:(e,n,a,r)=>[`${e}, ${n.died} ${a}${r}`,`Overlijden van ${e} ${a}${r}`,`${e} overleed ${a}${r}`],lifeApproxDates:(e,n,a)=>[`${e}, ${n.present} in de registers rond ${a}`,`${e} wordt rond ${a} geplaatst`,`${e} (${a})`],eventMarriage:(e,n)=>[`huwelijk gevierd ${e}${n}`,`unie geregistreerd ${e}${n}`,`bruiloft ${e}${n}`,`verenigt${e}${n}`],eventDivorce:(e,n)=>`echtscheiding geregistreerd ${e}${n}`,eventBaptism:(e,n,a)=>[`doop ${e}${n}`,`${a.baptized} ${e}${n}`,`doopritueel ${e}${n}`],eventBurial:(e,n)=>[`begrafenis ${e}${n}`,`uitvaart ${e}${n}`,`begraven ${e}${n}`],eventCremation:(e,n)=>`crematie geregistreerd ${e}${n}`,eventOccupation:(e,n)=>`beroep vermeld (${e})${n}`,chapterGen1:(e,n)=>[`Startpunt van het verhaal: ${e} figuur${n} aan de wortel van de stamboom.`,`Hier begint de lijn, met ${e} referentiepersoon${n}.`],chapterGenN:(e,n,a,r)=>[`In generatie ${e} komen ${n} voorouder${a} in beeld.`,`Deze generatie telt ${n} persoon${a}${r?` (${r})`:""}.`,`${n} leven${a} kruisen elkaar in deze generatie${r?`, tussen ${r}`:""}.`],chapterLetter:(e,n,a,r,u)=>[`${e}: ${n} portret${a} te ontdekken.`,`${n} persoon${a} voor letter ${r}${u?` (${u})`:""}.`],familyCouple:(e,n,a,r)=>[`${e} en ${n}`,`Het paar ${e} \u2013 ${n}`,`${a} en ${r}`],familyUnionWithMarriage:e=>[`verenigen zich${e}`,`trouwen${e}`,`vieren hun unie${e}`],familyUnionWithoutMarriage:["vormen een unie","zijn verenigd in de registers","verschijnen als echtgenoten"],familyNoDescendants:"zonder nakomelingen vermeld in het bestand",familyOneChild:e=>[`met kind ${e}`,`krijgen ${e}`,`hebben een kind, ${e}`],familyNChildren:(e,n)=>`${e} kinderen: ${n}`,familyDescendantsList:e=>`nakomelingen: ${e}`,familyLoneFigure:(e,n)=>[`${e} neemt een centrale plaats in deze lijn`,`${n}, een leidende figuur in dit hoofdstuk`],familyMarriageNoted:e=>[`huwelijk vermeld${e}`,`unie genoteerd${e}`],familyDescendantsNoted:e=>[`nakomelingen: ${e}`],familyDescendantsRecensed:(e,n)=>`${e}: ${n}`,personBranchPresent:(e,n)=>[`${e}, ${n.present} in deze tak`,`${e} verschijnt in dit hoofdstuk`],personFewRecords:e=>`${e}: weinig akten tot nu toe`,personResearchHint:"verder onderzoek kan dit portret aanvullen",personPortraitIncomplete:e=>`${e} \u2014 portret nog aan te vullen uit de archieven.`,personUnionSection:e=>[e,`Familiekant: ${e}`,`Aan de huwelijkse kant: ${e}`],personResearchNote:e=>[`Onderzoeksnotitie: ${e}`,`De archieven vermelden: ${e}`,`Opmerkelijk: ${e}`]},Me=ie("nl",ve,{dateModule:Y,placeModule:de,unknownDates:ue.unknownDates}),Se={messages:ue,genderWords:Ae,genderPhrases:Pe,dateModule:Y,placeModule:de,narrativeModule:Me},un=Se});Ne();export{un as default};