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,t)=>()=>(e&&(t=e(e=0)),t);var w=D(()=>{});function q(e){function t(L){let p=L.trim();return!p||p===e.unknownDate?!1:_.test(p)||V.test(p)}function l(L){let p=L.trim();if(!p||p===e.unknownDate)return e.onUnknown;if(_.test(p))return e.inYear(p);let k=V.exec(p);if(k){let E=k[1].toLowerCase(),b=k[2];switch(E){case"bef":return e.beforeYear(b);case"aft":return e.afterYear(b);case"vers":case"circa":case"environ":case"about":case"abt":case"est":case"cal":return e.aboutYear(b);default:return e.inYear(b)}}return e.onFullDate(p)}function r(L,p){let k=L.trim(),E=p.trim();return e.lifeRange(k,E,t(k))}function u(L){let p=L.trim();return _.test(p)?e.seesDayInYear(p):t(p)?e.seesDayOnPhrase(l(p)):e.seesDayOnFullDate(p)}return{BOOKLET_UNKNOWN_DATE:e.unknownDate,isYearOnlyDate:t,onDate:l,lifeDateRange:r,seesDayOn:u}}var _,V,X=D(()=>{_=/^\d{3,4}$/,V=/^(vers|circa|environ|about|ABT|BEF|AFT|EST|CAL|INT|FROM|TO)\s+(\d{3,4})$/i});function me(e){return e.normalize("NFD").replace(/\p{M}/gu,"").toLowerCase()}function fe(e){return ge.has(me(e))}function j(e,t){function l(B){let s=B.trim();if(!s)return null;let f=s.indexOf(", ");return f>=0?{city:s.slice(0,f).trim(),country:s.slice(f+2).trim(),raw:s}:fe(s)?{city:null,country:s,raw:s}:{city:s,country:null,raw:s}}function r(B){let s=l(B);return s?s.city&&s.country?`${s.city}, ${t.countryPhrase(s.country)}`:s.city?s.city:s.country?t.countryPhrase(s.country):s.raw:""}function u(B,s){let f=r(s);if(!f)return"";let $=t.locationPhrase(f);return e.isYearOnlyDate(B)?`,${$}`:$}function L(B){let s=r(B);return s?t.locationPhrase(s):""}function p(B,s,f,$){let A=s.trim(),N=$.trim();return A&&A===N?{birth:"",death:u(f,N)}:{birth:u(B,A),death:u(f,N)}}function k(B,s){let f=r(B),$=r(s);if(!f&&!$)return"";if(f&&$&&f===$)return t.lifeRangeSame(f);if(f&&$)return t.lifeRangeFromTo(f,$);let A=f||$;return t.lifeRangeSingle(A)}function E(B,s){let f=e.onDate(B),$=s.trim();return f===e.onDate("")&&!$?null:$?f===e.onDate("")?L($).trim()||null:`${f}${u(B,$)}`:f}function b(B){let s=B?.trim();return!s||s===e.onDate("")?"":` ${s}`}return{parsePlaceLabel:l,placeCore:r,afterDateLocation:u,atLocation:L,birthDeathLocationPhrases:p,lifeRangeLocation:k,marriageWhenWhere:E,embedMarriageWhenWhere:b}}var ge,Q=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 v(e,t){let l=e.toLowerCase();return t.some(r=>l.startsWith(r.toLowerCase()))}var J=D(()=>{});function Be(e){return e!=null&&he.includes(e)}function P(e){return Be(e)?e:"en"}var he,T=D(()=>{he=["en","fr","de","nl","es","zh","it","pt","pl","ar","he"]});function $e(){let e=globalThis;return e[x]??(e[x]=new Map),e[x]}function M(e){let t=$e().get(e);if(!t)throw new Y(e);return t}var x,Y,F=D(()=>{T();x="__GEDCOM_TS_BOOKLET_LOCALE_CACHE__";Y=class extends Error{constructor(t){super(`Booklet locale "${t}" is not loaded. Call await ensureBookletLocale("${t}") before using sync booklet APIs.`),this.name="BookletLocaleNotLoadedError"}}});function Le(e){return M(e).genderWords}function S(e,t){return Le(P(t))[e]}function Z(e,t){let l=P(t);if(l==="en")return"";if(l==="fr")return e>1?"s":"";let r=M(l).genderPhrases;return r&&!r.usesPluralS?"":e>1?"s":""}function I(e,t){if(e<=0)return"";let l=P(t),r=M(l).genderPhrases?.recensedChildren(e);return r||(l==="en"?e===1?"1 child listed":`${e} children listed`:e===1?"1 enfant recens\xE9":`${e} enfants recens\xE9s`)}function ee(e,t){if(e<=0)return"";let l=P(t),r=M(l).genderPhrases?.otherUnions(e);return r||(l==="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 te=D(()=>{T();F()});function oe(e){let t=P(e);return M(t).messages}var ne=D(()=>{T();F();F()});function U(e,t=6,l){let r=oe(l);if(e.length===0)return r.childrenNone;let u=e.map(L=>L.name);return u.length<=t?u.join(", "):`${u.slice(0,t).join(", ")} ${r.childrenMore(u.length-t)}`}var re=D(()=>{T();ne()});function ae(e){return e.map(t=>t.trim()).filter(Boolean).map(t=>t.endsWith(".")?t:`${t}.`).join(" ")}function C(e){let t=e.map(r=>r.trim()).filter(Boolean);return t.length===0?"":`${t.map(r=>r.endsWith(".")?r.slice(0,-1):r).join(" ; ")}.`}function z(e){return e.trim().split(/\s+/)[0]??e}function m(e,t){return e[Math.abs(t)%e.length]}function H(e,t){switch(e.length){case 0:return"";case 1:return e[0];case 2:return`${e[0]} ${t} ${e[1]}`;default:return`${e.slice(0,-1).join(", ")} ${t} ${e.at(-1)}`}}function be(e){let t=e.key.match(/^gen-(\d+)$/);return t?{genNum:Number(t[1]),letter:null}:{genNum:0,letter:e.key.match(/^letter-(.+)$/)?.[1]??null}}function De(e){return e.includes("\u2014")?e.split("\u2014").pop()?.trim()??"":""}function le(e,t,l){let r=l.dateModule,u=l.placeModule,L=l.unknownDates;function p(o){return o!==L&&o!=="Dates inconnues"}function k(o,i){if(o.parents.length===0)return null;let n=S(o.sex,e),a=o.parents.map(d=>d.name);return a.length===1?m(t.parentsSingle(a[0],n),i+3):m(t.parentsMultiple(H(a,t.listConjunction),n),i+3)}function E(o,i){if(i.marriageLabel)return i.marriageLabel;let n=o.events.find(a=>a.kind===String("MARR"));return n?u.marriageWhenWhere(n.date,n.place):null}function b(o,i,n){let a=S(o.sex,e),d=i.coParent.name,c=[],g=u.embedMarriageWhenWhere(E(o,i));if(g?c.push(m(t.unionWithMarriage(d,g),n+7)):c.push(m(t.unionWithoutMarriage(d,a),n+7)),i.children.length>0){let h=i.children.map(y=>z(y.name));h.length===1?c.push(m(t.unionOneChild(h[0],a),n+11)):c.push(m(t.unionManyChildren(H(h,t.listConjunction),a),n+11))}return C(c)}function B(o,i){let n=o.events.find(g=>g.kind===String("BIRT")),a=o.events.find(g=>g.kind===String("DEAT")),d=o.name,c=S(o.sex,e);if(n&&a){let g=r.onDate(n.date),h=r.onDate(a.date),y=u.birthDeathLocationPhrases(n.date,n.place,a.date,a.place),R=u.lifeRangeLocation(n.place,a.place),O=y.birth||u.afterDateLocation(n.date,n.place);return m(t.lifeBornAndDied(d,c,g,y.birth,h,y.death,r.lifeDateRange(n.date,a.date),R,r.seesDayOn(n.date),O),i)}if(n){let g=r.onDate(n.date),h=u.afterDateLocation(n.date,n.place);return m(t.lifeBirthOnly(d,c,g,h,r.seesDayOn(n.date)),i)}if(a){let g=r.onDate(a.date),h=u.afterDateLocation(a.date,a.place);return m(t.lifeDeathOnly(d,c,g,h),i+1)}return p(o.datesLabel)?m(t.lifeApproxDates(d,c,o.datesLabel),i+2):null}function s(o,i,n){let a=r.onDate(o.date),d=u.afterDateLocation(o.date,o.place),c=S(n,e);switch(o.kind){case"MARR":return m(t.eventMarriage(a,d),i);case"DIV":return t.eventDivorce(a,d);case"BAPM":case"CHR":return m(t.eventBaptism(a,d,c),i);case"BURI":return m(t.eventBurial(a,d),i);case"CREM":return t.eventCremation(a,d);case"OCCU":return t.eventOccupation(o.date,u.atLocation(o.place));default:return`${o.label.toLowerCase()} ${a}${d}`}}let f=new Set([String("BIRT"),String("DEAT"),String("MARR")]);function $(o,i){let n=[],a=0;for(let d of o.events){if(f.has(d.kind))continue;let c=s(d,i+a,o.sex);c&&n.push(c),a+=1}return n}function A(o){let i=o.entries.length,n=De(o.subtitle),{genNum:a,letter:d}=be(o),c=Z(i,e);if(a>0){let h=a===1?t.chapterGen1(i,c):t.chapterGenN(a,i,c,n);return m(h,a)}let g=d??o.title;return m(t.chapterLetter(o.title,i,c,g,n),i)}function N(o,i){let n=o.familyId,a=o.partners[0]?.name??t.defaultAncestor,d=o.partners[1]?.name,c=o.children,g;if(d){let h=m(t.familyCouple(z(a),z(d),a,d),n),y=u.embedMarriageWhenWhere(o.marriageLabel),R=m(y?t.familyUnionWithMarriage(y):t.familyUnionWithoutMarriage,n+1);if(c.length===0)g=C([`${h} ${R}`,t.familyNoDescendants]);else if(c.length===1)g=C([`${h} ${R}`,m(t.familyOneChild(c[0].name),n+2)]);else if(i==="summary")g=C([`${h} ${R}`,t.familyNChildren(c.length,U(c,5,e))]);else{let O=c.map(W=>{let pe=p(W.datesLabel)?` (${W.datesLabel})`:"";return`${W.name}${pe}`});g=C([`${h} ${R}`,t.familyDescendantsList(H(O,t.listConjunction))])}}else g=ae([m(t.familyLoneFigure(z(a),a),n),o.marriageLabel?m(t.familyMarriageNoted(u.embedMarriageWhenWhere(o.marriageLabel)),n+1):"",c.length>0?m([...t.familyDescendantsNoted(U(c,5,e)),t.familyDescendantsRecensed(I(c.length,e),U(c,5,e))],n+2):""]);return[g]}function ue(o){let i=o.indi,n=[],a=B(o,i);if(a)n.push(a);else{let g=S(o.sex,e);n.push(m(t.personBranchPresent(o.name,g),i))}let d=k(o,i);d&&n.push(d),o.unions[0]&&(n.push(b(o,o.unions[0],i)),o.unions.length>1&&n.push(ee(o.unions.length-1,e)));let c=$(o,i);return c.length>0&&n.push(C(c.slice(0,2))),o.sosa!=null&&n.length>0&&n.push(`SOSA ${o.sosa}`),n.length<=1&&o.events.length===0&&o.unions.length===0?ae([t.personFewRecords(o.name),t.personResearchHint]):C(n)}function de(o){let i=o.indi,n=[],a=[],d=B(o,i);d&&a.push(d);let c=k(o,i);c&&a.push(c);let g=$(o,i);if(g.length>0&&a.push(C(g)),a.length>0?n.push(C(a)):n.push(t.personPortraitIncomplete(o.name)),o.unions.length>0){let h=o.unions.map((y,R)=>b(o,y,i+20+R));n.push(m(t.personUnionSection(C(h)),i+5))}else{let h=o.events.filter(y=>y.kind===String("MARR"));if(h.length>0){let y=h.map((R,O)=>s(R,i+30+O,o.sex));n.push(C(y))}}return o.notesPreview&&n.push(m(t.personResearchNote(o.notesPreview),i+9)),n}return{buildChapterIntroNarrative:A,buildFamilyNarrative:N,buildPersonSummaryNarrative:ue,buildPersonDetailedNarratives:de}}var ie=D(()=>{w();te();re()});var Ce,se,Re,Ee,G,K,ce,Ae,Pe,Me,it,Se=D(()=>{w();X();Q();J();ie();Ce={BIRT:"Nascita",DEAT:"Decesso",MARR:"Matrimonio",DIV:"Divorzio",BAPM:"Battesimo (BAPM)",CHR:"Battesimo",BURI:"Sepoltura",CREM:"Cremazione",EVEN:"Evento",OCCU:"Professione"},se={unknownDates:"Date sconosciute",unknownDate:"Data sconosciuta",chapterUnknownDates:"Date sconosciute",generation1Title:"Generazione 1 \u2014 persona di riferimento",generationTitle:e=>`Generazione ${e}`,letterTitle:e=>`Lettera ${e}`,chapterSubtitle:(e,t)=>`${e} persona/e \u2014 ${t}`,chapterDateAbout:"circa",childrenNone:"nessun figlio elencato",childrenMore:e=>`(+ altri ${e})`,pagesEstimate:e=>`~${e} pagine`,pagesEmpty:"\u2014",adviceDetailed120:"Con pi\xF9 di 120 persone, la modalit\xE0 Riassunto produce un documento molto pi\xF9 leggibile e si genera pi\xF9 rapidamente.",adviceDetailed50:"Oltre 50 persone, la modalit\xE0 Riassunto resta consigliata per una prima lettura.",adviceSummary25:"Poche persone: la modalit\xE0 Dettagliata offre una bella scheda per pagina, ideale per la stampa.",actTypeLabels:Ce,spouseUnknown:"Coniuge non registrato",timelineTitle:e=>`Cronologia \u2014 ${e}`,timelineUnknownDates:"date sconosciute",pdf:{coverSubtitle:"Storia familiare dal tuo file GEDCOM",referencePerson:e=>`Persona di riferimento (SOSA 1): ${e}`,personCount:e=>`${e} persona/e in questo libretto`,localNote:"Documento generato localmente nel tuo browser.",tocTitle:"Indice",modeSummary:"Modalit\xE0 riassunto - racconti brevi",modeDetailed:"Modalit\xE0 dettagliata - biografie ampliate",contentHeading:"Contenuto del libretto",introSummary:"Questo libretto racconta il tuo albero in prosa: nascite, unioni, discendenza e decessi ricostruiti dal GEDCOM. Ogni capitolo si apre su una generazione o una lettera, poi svela le vite in brevi racconti.",introDetailed:"Questo libretto sviluppa ogni figura come biografia narrativa, in sequenza in ogni capitolo. Ogni nuova generazione inizia su una pagina dedicata.",introSosa:"I numeri SOSA sono menzionati quando la numerazione \xE8 attiva. Indice alla fine del documento.",familyHeading:e=>`La famiglia ${e}`,generationLabel:e=>`generazione ${e}`,pageFooter:e=>`Pagina ${e}`},timeline:{legendBirth:"nascita",legendDeath:"decesso",legendMarriage:"matrimonio",overflow:e=>`+ altri ${e} nelle pagine seguenti`,continuation:"(cronologia continuata)"}},Re={F:{born:"nata",died:"morta",baptized:"battezzata",present:"presente",linked:"unita",offspring:"figlia",descendant:"discendente",childOf:"figlia",parentOf:"madre"},M:{born:"nato",died:"morto",baptized:"battezzato",present:"presente",linked:"unito",offspring:"figlio",descendant:"discendente",childOf:"figlio",parentOf:"padre"},U:{born:"nato/a",died:"morto/a",baptized:"battezzato/a",present:"presente",linked:"unito/a",offspring:"figlio/a",descendant:"discendente",childOf:"figlio/a",parentOf:"genitore"},X:{born:"nato/a",died:"morto/a",baptized:"battezzato/a",present:"presente",linked:"unito/a",offspring:"figlio/a",descendant:"discendente",childOf:"figlio/a",parentOf:"genitore"}},Ee={usesPluralS:!1,recensedChildren:e=>e===1?"1 figlio/a censito/a":`${e} figli censiti`,otherUnions:e=>e===1?"1 altra unione citata nell'albero":`${e} altre unioni citate nell'albero`},G=["in "],K=q({unknownDate:"Data sconosciuta",onUnknown:"in data sconosciuta",inYear:e=>`nel ${e}`,beforeYear:e=>`prima del ${e}`,afterYear:e=>`dopo il ${e}`,aboutYear:e=>`verso il ${e}`,onFullDate:e=>`il ${e}`,lifeRange:(e,t)=>`Dal ${e} al ${t}`,seesDayInYear:e=>`nasce nel ${e}`,seesDayOnPhrase:e=>`nasce ${e}`,seesDayOnFullDate:e=>`nasce il ${e}`}),ce=j(K,{countryPrefixes:G,countryPhrase:e=>`in ${e}`,locationPhrase:e=>v(e,G)?` ${e}`:` a ${e}`,lifeRangeSame:e=>v(e,G)?`, ${e}`:`, a ${e}`,lifeRangeFromTo:(e,t)=>`, da ${e} a ${t}`,lifeRangeSingle:e=>v(e,G)?`, ${e}`:`, a ${e}`}),Ae={listConjunction:"e",defaultAncestor:"Un antenato",parentsSingle:(e,t)=>[`figlio/a di ${e}`,`${t.childOf} di ${e}`,`${t.descendant} di ${e}`],parentsMultiple:(e,t)=>[`${t.offspring} di ${e}`,`${t.descendant} di ${e}`,`figlio/a di ${e}`],unionWithMarriage:(e,t)=>[`sposa ${e}${t}`,`si unisce a ${e}${t}`,`matrimonio con ${e}${t}`],unionWithoutMarriage:(e,t)=>[`${t.linked} a ${e}`,`condivide la vita con ${e}`,`unione registrata con ${e}`],unionOneChild:(e,t)=>[`tra cui ${e}`,`con figlio/a ${e}`,`${t.parentOf} di ${e}`],unionManyChildren:(e,t)=>[`tra cui i figli ${e}`,`con discendenza ${e}`,`${t.parentOf} di ${e}`],lifeBornAndDied:(e,t,l,r,u,L,p,k,E,b)=>[`${e}, ${t.born} ${l}${r}, scompare ${u}${L}`,`${p}${k}, ${e} segna questo lignaggio`,`${e} ${E}${b} e scompare ${u}${L}`],lifeBirthOnly:(e,t,l,r,u)=>[`${e}, ${t.born} ${l}${r}`,`Nascita di ${e} ${l}${r}`,`${e} ${u}${r}`],lifeDeathOnly:(e,t,l,r)=>[`${e}, ${t.died} ${l}${r}`,`Morte di ${e} ${l}${r}`,`${e} scompare ${l}${r}`],lifeApproxDates:(e,t,l)=>[`${e}, ${t.present} nei registri intorno al ${l}`,`Si colloca ${e} intorno al ${l}`,`${e} (${l})`],eventMarriage:(e,t)=>[`matrimonio celebrato ${e}${t}`,`unione registrata ${e}${t}`,`nozze celebrate ${e}${t}`,`si unisce${e}${t}`],eventDivorce:(e,t)=>`divorzio registrato ${e}${t}`,eventBaptism:(e,t,l)=>[`battesimo ${e}${t}`,`${l.baptized} ${e}${t}`,`rito battesimale ${e}${t}`],eventBurial:(e,t)=>[`sepoltura ${e}${t}`,`funerali ${e}${t}`,`inumazione ${e}${t}`],eventCremation:(e,t)=>`cremazione registrata ${e}${t}`,eventOccupation:(e,t)=>`professione annotata (${e})${t}`,chapterGen1:(e,t)=>[`Punto di partenza del racconto: ${e} figur${e>1?"e":"a"} alla radice dell'albero.`,`Qui inizia la linea, con ${e} person${e>1?"e":"a"} di riferimento.`],chapterGenN:(e,t,l,r)=>[`Nella generazione ${e}, ${t} antenat${t>1?"i":"o"} entrano in scena.`,`Questa generazione comprende ${t} person${t>1?"e":"a"}${r?` (${r})`:""}.`,`${t} destini si incrociano in questa generazione${r?`, tra ${r}`:""}.`],chapterLetter:(e,t,l,r,u)=>[`${e}: ${t} ritratt${t>1?"i":"o"} da scoprire.`,`${t} person${t>1?"e":"a"} per la lettera ${r}${u?` (${u})`:""}.`],familyCouple:(e,t,l,r)=>[`${e} e ${t}`,`La coppia ${e} \u2013 ${t}`,`${l} e ${r}`],familyUnionWithMarriage:e=>[`si uniscono${e}`,`si sposano${e}`,`celebrano la loro unione${e}`],familyUnionWithoutMarriage:["formano un'unione","sono uniti nei registri","appaiono come coniugi"],familyNoDescendants:"senza discendenza registrata nel file",familyOneChild:e=>[`con figlio/a ${e}`,`danno alla luce ${e}`,`hanno un figlio/a, ${e}`],familyNChildren:(e,t)=>`${e} figli: ${t}`,familyDescendantsList:e=>`discendenza: ${e}`,familyLoneFigure:(e,t)=>[`${e} occupa un posto centrale in questo lignaggio`,`${t}, figura di riferimento in questo capitolo`],familyMarriageNoted:e=>[`matrimonio registrato${e}`,`unione annotata${e}`],familyDescendantsNoted:e=>[`discendenza: ${e}`],familyDescendantsRecensed:(e,t)=>`${e}: ${t}`,personBranchPresent:(e,t)=>[`${e}, ${t.present} in questo ramo`,`${e} compare in questo capitolo`],personFewRecords:e=>`${e}: pochi atti per ora`,personResearchHint:"ulteriori ricerche potranno completare questo ritratto",personPortraitIncomplete:e=>`${e} \u2014 ritratto ancora da completare negli archivi.`,personUnionSection:e=>[e,`Lato famiglia: ${e}`,`Sul versante coniugale: ${e}`],personResearchNote:e=>[`Nota di ricerca: ${e}`,`Gli archivi precisano: ${e}`,`Da ricordare: ${e}`]},Pe=le("it",Ae,{dateModule:K,placeModule:ce,unknownDates:se.unknownDates}),Me={messages:se,genderWords:Re,genderPhrases:Ee,dateModule:K,placeModule:ce,narrativeModule:Pe},it=Me});Se();export{it as default};