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.3 kB
JavaScript
var D=(e,t)=>()=>(e&&(t=e(e=0)),t);var w=D(()=>{});function V(e){function t(y){let p=y.trim();return!p||p===e.unknownDate?!1:_.test(p)||j.test(p)}function r(y){let p=y.trim();if(!p||p===e.unknownDate)return e.onUnknown;if(_.test(p))return e.inYear(p);let k=j.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 a(y,p){let k=y.trim(),E=p.trim();return e.lifeRange(k,E,t(k))}function u(y){let p=y.trim();return _.test(p)?e.seesDayInYear(p):t(p)?e.seesDayOnPhrase(r(p)):e.seesDayOnFullDate(p)}return{BOOKLET_UNKNOWN_DATE:e.unknownDate,isYearOnlyDate:t,onDate:r,lifeDateRange:a,seesDayOn:u}}var _,j,X=D(()=>{_=/^\d{3,4}$/,j=/^(vers|circa|environ|about|ABT|BEF|AFT|EST|CAL|INT|FROM|TO)\s+(\d{3,4})$/i});function fe(e){return e.normalize("NFD").replace(/\p{M}/gu,"").toLowerCase()}function Be(e){return he.has(fe(e))}function q(e,t){function r(B){let i=B.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}:Be(i)?{city:null,country:i,raw:i}:{city:i,country:null,raw:i}}function a(B){let i=r(B);return i?i.city&&i.country?`${i.city}, ${t.countryPhrase(i.country)}`:i.city?i.city:i.country?t.countryPhrase(i.country):i.raw:""}function u(B,i){let h=a(i);if(!h)return"";let L=t.locationPhrase(h);return e.isYearOnlyDate(B)?`,${L}`:L}function y(B){let i=a(B);return i?t.locationPhrase(i):""}function p(B,i,h,L){let A=i.trim(),N=L.trim();return A&&A===N?{birth:"",death:u(h,N)}:{birth:u(B,A),death:u(h,N)}}function k(B,i){let h=a(B),L=a(i);if(!h&&!L)return"";if(h&&L&&h===L)return t.lifeRangeSame(h);if(h&&L)return t.lifeRangeFromTo(h,L);let A=h||L;return t.lifeRangeSingle(A)}function E(B,i){let h=e.onDate(B),L=i.trim();return h===e.onDate("")&&!L?null:L?h===e.onDate("")?y(L).trim()||null:`${h}${u(B,L)}`:h}function b(B){let i=B?.trim();return!i||i===e.onDate("")?"":` ${i}`}return{parsePlaceLabel:r,placeCore:a,afterDateLocation:u,atLocation:y,birthDeathLocationPhrases:p,lifeRangeLocation:k,marriageWhenWhere:E,embedMarriageWhenWhere:b}}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,t){let r=e.toLowerCase();return t.some(a=>r.startsWith(a.toLowerCase()))}function Z(e,t,r){return J(e,t)?` ${e}`:`${r}${e}`}function H(e,t,r){return J(e,t)?`, ${e}`:`,${r}${e}`}var I=D(()=>{});function ye(e){return e!=null&&Le.includes(e)}function P(e){return ye(e)?e:"en"}var Le,T=D(()=>{Le=["en","fr","de","nl","es","zh","it","pt","pl","ar","he"]});function $e(){let e=globalThis;return e[v]??(e[v]=new Map),e[v]}function M(e){let t=$e().get(e);if(!t)throw new Y(e);return t}var v,Y,x=D(()=>{T();v="__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 ke(e){return M(e).genderWords}function S(e,t){return ke(P(t))[e]}function ee(e,t){let r=P(t);if(r==="en")return"";if(r==="fr")return e>1?"s":"";let a=M(r).genderPhrases;return a&&!a.usesPluralS?"":e>1?"s":""}function te(e,t){if(e<=0)return"";let r=P(t),a=M(r).genderPhrases?.recensedChildren(e);return a||(r==="en"?e===1?"1 child listed":`${e} children listed`:e===1?"1 enfant recens\xE9":`${e} enfants recens\xE9s`)}function oe(e,t){if(e<=0)return"";let r=P(t),a=M(r).genderPhrases?.otherUnions(e);return a||(r==="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 ne=D(()=>{T();x()});function ae(e){let t=P(e);return M(t).messages}var re=D(()=>{T();x();x()});function F(e,t=6,r){let a=ae(r);if(e.length===0)return a.childrenNone;let u=e.map(y=>y.name);return u.length<=t?u.join(", "):`${u.slice(0,t).join(", ")} ${a.childrenMore(u.length-t)}`}var le=D(()=>{T();re()});function se(e){return e.map(t=>t.trim()).filter(Boolean).map(t=>t.endsWith(".")?t:`${t}.`).join(" ")}function C(e){let t=e.map(a=>a.trim()).filter(Boolean);return t.length===0?"":`${t.map(a=>a.endsWith(".")?a.slice(0,-1):a).join(" ; ")}.`}function U(e){return e.trim().split(/\s+/)[0]??e}function g(e,t){return e[Math.abs(t)%e.length]}function z(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 Ce(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 Re(e){return e.includes("\u2014")?e.split("\u2014").pop()?.trim()??"":""}function ie(e,t,r){let a=r.dateModule,u=r.placeModule,y=r.unknownDates;function p(o){return o!==y&&o!=="Dates inconnues"}function k(o,s){if(o.parents.length===0)return null;let n=S(o.sex,e),l=o.parents.map(d=>d.name);return l.length===1?g(t.parentsSingle(l[0],n),s+3):g(t.parentsMultiple(z(l,t.listConjunction),n),s+3)}function E(o,s){if(s.marriageLabel)return s.marriageLabel;let n=o.events.find(l=>l.kind===String("MARR"));return n?u.marriageWhenWhere(n.date,n.place):null}function b(o,s,n){let l=S(o.sex,e),d=s.coParent.name,c=[],m=u.embedMarriageWhenWhere(E(o,s));if(m?c.push(g(t.unionWithMarriage(d,m),n+7)):c.push(g(t.unionWithoutMarriage(d,l),n+7)),s.children.length>0){let f=s.children.map($=>U($.name));f.length===1?c.push(g(t.unionOneChild(f[0],l),n+11)):c.push(g(t.unionManyChildren(z(f,t.listConjunction),l),n+11))}return C(c)}function B(o,s){let n=o.events.find(m=>m.kind===String("BIRT")),l=o.events.find(m=>m.kind===String("DEAT")),d=o.name,c=S(o.sex,e);if(n&&l){let m=a.onDate(n.date),f=a.onDate(l.date),$=u.birthDeathLocationPhrases(n.date,n.place,l.date,l.place),R=u.lifeRangeLocation(n.place,l.place),O=$.birth||u.afterDateLocation(n.date,n.place);return g(t.lifeBornAndDied(d,c,m,$.birth,f,$.death,a.lifeDateRange(n.date,l.date),R,a.seesDayOn(n.date),O),s)}if(n){let m=a.onDate(n.date),f=u.afterDateLocation(n.date,n.place);return g(t.lifeBirthOnly(d,c,m,f,a.seesDayOn(n.date)),s)}if(l){let m=a.onDate(l.date),f=u.afterDateLocation(l.date,l.place);return g(t.lifeDeathOnly(d,c,m,f),s+1)}return p(o.datesLabel)?g(t.lifeApproxDates(d,c,o.datesLabel),s+2):null}function i(o,s,n){let l=a.onDate(o.date),d=u.afterDateLocation(o.date,o.place),c=S(n,e);switch(o.kind){case"MARR":return g(t.eventMarriage(l,d),s);case"DIV":return t.eventDivorce(l,d);case"BAPM":case"CHR":return g(t.eventBaptism(l,d,c),s);case"BURI":return g(t.eventBurial(l,d),s);case"CREM":return t.eventCremation(l,d);case"OCCU":return t.eventOccupation(o.date,u.atLocation(o.place));default:return`${o.label.toLowerCase()} ${l}${d}`}}let h=new Set([String("BIRT"),String("DEAT"),String("MARR")]);function L(o,s){let n=[],l=0;for(let d of o.events){if(h.has(d.kind))continue;let c=i(d,s+l,o.sex);c&&n.push(c),l+=1}return n}function A(o){let s=o.entries.length,n=Re(o.subtitle),{genNum:l,letter:d}=Ce(o),c=ee(s,e);if(l>0){let f=l===1?t.chapterGen1(s,c):t.chapterGenN(l,s,c,n);return g(f,l)}let m=d??o.title;return g(t.chapterLetter(o.title,s,c,m,n),s)}function N(o,s){let n=o.familyId,l=o.partners[0]?.name??t.defaultAncestor,d=o.partners[1]?.name,c=o.children,m;if(d){let f=g(t.familyCouple(U(l),U(d),l,d),n),$=u.embedMarriageWhenWhere(o.marriageLabel),R=g($?t.familyUnionWithMarriage($):t.familyUnionWithoutMarriage,n+1);if(c.length===0)m=C([`${f} ${R}`,t.familyNoDescendants]);else if(c.length===1)m=C([`${f} ${R}`,g(t.familyOneChild(c[0].name),n+2)]);else if(s==="summary")m=C([`${f} ${R}`,t.familyNChildren(c.length,F(c,5,e))]);else{let O=c.map(W=>{let ge=p(W.datesLabel)?` (${W.datesLabel})`:"";return`${W.name}${ge}`});m=C([`${f} ${R}`,t.familyDescendantsList(z(O,t.listConjunction))])}}else m=se([g(t.familyLoneFigure(U(l),l),n),o.marriageLabel?g(t.familyMarriageNoted(u.embedMarriageWhenWhere(o.marriageLabel)),n+1):"",c.length>0?g([...t.familyDescendantsNoted(F(c,5,e)),t.familyDescendantsRecensed(te(c.length,e),F(c,5,e))],n+2):""]);return[m]}function pe(o){let s=o.indi,n=[],l=B(o,s);if(l)n.push(l);else{let m=S(o.sex,e);n.push(g(t.personBranchPresent(o.name,m),s))}let d=k(o,s);d&&n.push(d),o.unions[0]&&(n.push(b(o,o.unions[0],s)),o.unions.length>1&&n.push(oe(o.unions.length-1,e)));let c=L(o,s);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?se([t.personFewRecords(o.name),t.personResearchHint]):C(n)}function me(o){let s=o.indi,n=[],l=[],d=B(o,s);d&&l.push(d);let c=k(o,s);c&&l.push(c);let m=L(o,s);if(m.length>0&&l.push(C(m)),l.length>0?n.push(C(l)):n.push(t.personPortraitIncomplete(o.name)),o.unions.length>0){let f=o.unions.map(($,R)=>b(o,$,s+20+R));n.push(g(t.personUnionSection(C(f)),s+5))}else{let f=o.events.filter($=>$.kind===String("MARR"));if(f.length>0){let $=f.map((R,O)=>i(R,s+30+O,o.sex));n.push(C($))}}return o.notesPreview&&n.push(g(t.personResearchNote(o.notesPreview),s+9)),n}return{buildChapterIntroNarrative:A,buildFamilyNarrative:N,buildPersonSummaryNarrative:pe,buildPersonDetailedNarratives:me}}var ce=D(()=>{w();ne();le()});var Ee,ue,Ae,Pe,G,K,de,Me,Se,Ne,ct,Oe=D(()=>{w();X();Q();I();ce();Ee={BIRT:"Nascimento",DEAT:"Falecimento",MARR:"Casamento",DIV:"Div\xF3rcio",BAPM:"Batismo (BAPM)",CHR:"Batismo",BURI:"Sepultamento",CREM:"Crema\xE7\xE3o",EVEN:"Evento",OCCU:"Profiss\xE3o"},ue={unknownDates:"Datas desconhecidas",unknownDate:"Data desconhecida",chapterUnknownDates:"Datas desconhecidas",generation1Title:"Gera\xE7\xE3o 1 \u2014 pessoa de refer\xEAncia",generationTitle:e=>`Gera\xE7\xE3o ${e}`,letterTitle:e=>`Letra ${e}`,chapterSubtitle:(e,t)=>`${e} pessoa(s) \u2014 ${t}`,chapterDateAbout:"cerca de",childrenNone:"nenhum filho registado",childrenMore:e=>`(+ ${e} mais)`,pagesEstimate:e=>`~${e} p\xE1ginas`,pagesEmpty:"\u2014",adviceDetailed120:"Com mais de 120 pessoas, o modo Resumo produz um documento muito mais leg\xEDvel e gera-se mais depressa.",adviceDetailed50:"Para al\xE9m de 50 pessoas, o modo Resumo continua recomendado para uma primeira leitura.",adviceSummary25:"Poucas pessoas: o modo Detalhado oferece uma bela ficha por p\xE1gina, ideal para impress\xE3o.",actTypeLabels:Ee,spouseUnknown:"C\xF4njuge n\xE3o registado",timelineTitle:e=>`Linha do tempo cronol\xF3gica \u2014 ${e}`,timelineUnknownDates:"datas desconhecidas",pdf:{coverSubtitle:"Hist\xF3ria familiar a partir do seu ficheiro GEDCOM",referencePerson:e=>`Pessoa de refer\xEAncia (SOSA 1): ${e}`,personCount:e=>`${e} pessoa(s) neste livrete`,localNote:"Documento gerado localmente no seu navegador.",tocTitle:"\xCDndice",modeSummary:"Modo resumo - narrativas curtas",modeDetailed:"Modo detalhado - biografias alargadas",contentHeading:"Conte\xFAdo do livrete",introSummary:"Este livrete conta a sua \xE1rvore em prosa: nascimentos, uni\xF5es, descend\xEAncia e falecimentos reconstru\xEDdos a partir do GEDCOM. Cada cap\xEDtulo abre numa gera\xE7\xE3o ou letra, e desdobra vidas em narrativas curtas.",introDetailed:"Este livrete desenvolve cada figura como biografia narrativa, em sequ\xEAncia em cada cap\xEDtulo. Cada nova gera\xE7\xE3o come\xE7a numa p\xE1gina dedicada.",introSosa:"Os n\xFAmeros SOSA s\xE3o mencionados quando a numera\xE7\xE3o est\xE1 ativa. \xCDndice no final do documento.",familyHeading:e=>`A fam\xEDlia ${e}`,generationLabel:e=>`gera\xE7\xE3o ${e}`,pageFooter:e=>`P\xE1gina ${e}`},timeline:{legendBirth:"nascimento",legendDeath:"falecimento",legendMarriage:"casamento",overflow:e=>`+ ${e} mais nas p\xE1ginas seguintes`,continuation:"(linha do tempo continuada)"}},Ae={F:{born:"nascida",died:"falecida",baptized:"batizada",present:"presente",linked:"unida",offspring:"filha",descendant:"descendente",childOf:"filha",parentOf:"m\xE3e"},M:{born:"nascido",died:"falecido",baptized:"batizado",present:"presente",linked:"unido",offspring:"filho",descendant:"descendente",childOf:"filho",parentOf:"pai"},U:{born:"nascido/a",died:"falecido/a",baptized:"batizado/a",present:"presente",linked:"unido/a",offspring:"filho/a",descendant:"descendente",childOf:"filho/a",parentOf:"progenitor"},X:{born:"nascido/a",died:"falecido/a",baptized:"batizado/a",present:"presente",linked:"unido/a",offspring:"filho/a",descendant:"descendente",childOf:"filho/a",parentOf:"progenitor"}},Pe={usesPluralS:!1,recensedChildren:e=>e===1?"1 filho/a registado/a":`${e} filhos registados`,otherUnions:e=>e===1?"1 outra uni\xE3o citada na \xE1rvore":`${e} outras uni\xF5es citadas na \xE1rvore`},G=["em "],K=V({unknownDate:"Data desconhecida",onUnknown:"em data desconhecida",inYear:e=>`em ${e}`,beforeYear:e=>`antes de ${e}`,afterYear:e=>`depois de ${e}`,aboutYear:e=>`por volta de ${e}`,onFullDate:e=>`a ${e}`,lifeRange:(e,t)=>`De ${e} a ${t}`,seesDayInYear:e=>`nasce em ${e}`,seesDayOnPhrase:e=>`nasce ${e}`,seesDayOnFullDate:e=>`nasce a ${e}`}),de=q(K,{countryPrefixes:G,countryPhrase:e=>`em ${e}`,locationPhrase:e=>Z(e,G," em "),lifeRangeSame:e=>H(e,G," em "),lifeRangeFromTo:(e,t)=>`, de ${e} a ${t}`,lifeRangeSingle:e=>H(e,G," em ")}),Me={listConjunction:"e",defaultAncestor:"Um antepassado",parentsSingle:(e,t)=>[`filho/a de ${e}`,`${t.childOf} de ${e}`,`${t.descendant} de ${e}`],parentsMultiple:(e,t)=>[`${t.offspring} de ${e}`,`${t.descendant} de ${e}`,`filho/a de ${e}`],unionWithMarriage:(e,t)=>[`casa com ${e}${t}`,`une-se a ${e}${t}`,`casamento com ${e}${t}`],unionWithoutMarriage:(e,t)=>[`${t.linked} a ${e}`,`partilha a vida com ${e}`,`uni\xE3o registada com ${e}`],unionOneChild:(e,t)=>[`incluindo ${e}`,`com filho/a ${e}`,`${t.parentOf} de ${e}`],unionManyChildren:(e,t)=>[`incluindo os filhos ${e}`,`com descend\xEAncia ${e}`,`${t.parentOf} de ${e}`],lifeBornAndDied:(e,t,r,a,u,y,p,k,E,b)=>[`${e}, ${t.born} ${r}${a}, faleceu ${u}${y}`,`${p}${k}, ${e} marca esta linhagem`,`${e} ${E}${b} e faleceu ${u}${y}`],lifeBirthOnly:(e,t,r,a,u)=>[`${e}, ${t.born} ${r}${a}`,`Nascimento de ${e} ${r}${a}`,`${e} ${u}${a}`],lifeDeathOnly:(e,t,r,a)=>[`${e}, ${t.died} ${r}${a}`,`Falecimento de ${e} ${r}${a}`,`${e} faleceu ${r}${a}`],lifeApproxDates:(e,t,r)=>[`${e}, ${t.present} nos registos por volta de ${r}`,`Situa-se ${e} por volta de ${r}`,`${e} (${r})`],eventMarriage:(e,t)=>[`casamento celebrado ${e}${t}`,`uni\xE3o registada ${e}${t}`,`bodas celebradas ${e}${t}`,`une-se${e}${t}`],eventDivorce:(e,t)=>`div\xF3rcio registado ${e}${t}`,eventBaptism:(e,t,r)=>[`batismo ${e}${t}`,`${r.baptized} ${e}${t}`,`rito batismal ${e}${t}`],eventBurial:(e,t)=>[`enterro ${e}${t}`,`funeral ${e}${t}`,`sepultura ${e}${t}`],eventCremation:(e,t)=>`crema\xE7\xE3o registada ${e}${t}`,eventOccupation:(e,t)=>`profiss\xE3o anotada (${e})${t}`,chapterGen1:(e,t)=>[`Ponto de partida da narrativa: ${e} figura${t} na raiz da \xE1rvore.`,`Aqui come\xE7a a linhagem, com ${e} pessoa${t} de refer\xEAncia.`],chapterGenN:(e,t,r,a)=>[`Na gera\xE7\xE3o ${e}, ${t} antepassado${r} entram em cena.`,`Esta gera\xE7\xE3o inclui ${t} pessoa${r}${a?` (${a})`:""}.`,`${t} vida${r} cruzam-se nesta gera\xE7\xE3o${a?`, entre ${a}`:""}.`],chapterLetter:(e,t,r,a,u)=>[`${e}: ${t} retrato${r} a descobrir.`,`${t} pessoa${r} para a letra ${a}${u?` (${u})`:""}.`],familyCouple:(e,t,r,a)=>[`${e} e ${t}`,`O casal ${e} \u2013 ${t}`,`${r} e ${a}`],familyUnionWithMarriage:e=>[`unem-se${e}`,`casam${e}`,`celebram a sua uni\xE3o${e}`],familyUnionWithoutMarriage:["formam uma uni\xE3o","est\xE3o unidos nos registos","aparecem como c\xF4njuges"],familyNoDescendants:"sem descend\xEAncia registada no ficheiro",familyOneChild:e=>[`com filho/a ${e}`,`d\xE3o \xE0 luz ${e}`,`t\xEAm um filho/a, ${e}`],familyNChildren:(e,t)=>`${e} filhos: ${t}`,familyDescendantsList:e=>`descend\xEAncia: ${e}`,familyLoneFigure:(e,t)=>[`${e} ocupa um lugar central nesta linhagem`,`${t}, figura de refer\xEAncia neste cap\xEDtulo`],familyMarriageNoted:e=>[`casamento registado${e}`,`uni\xE3o anotada${e}`],familyDescendantsNoted:e=>[`descend\xEAncia: ${e}`],familyDescendantsRecensed:(e,t)=>`${e}: ${t}`,personBranchPresent:(e,t)=>[`${e}, ${t.present} neste ramo`,`${e} figura neste cap\xEDtulo`],personFewRecords:e=>`${e}: poucos registos por agora`,personResearchHint:"investiga\xE7\xF5es futuras poder\xE3o completar este retrato",personPortraitIncomplete:e=>`${e} \u2014 retrato ainda por completar nos arquivos.`,personUnionSection:e=>[e,`Lado familiar: ${e}`,`No plano conjugal: ${e}`],personResearchNote:e=>[`Nota de pesquisa: ${e}`,`Os arquivos indicam: ${e}`,`A reter: ${e}`]},Se=ie("pt",Me,{dateModule:K,placeModule:de,unknownDates:ue.unknownDates}),Ne={messages:ue,genderWords:Ae,genderPhrases:Pe,dateModule:K,placeModule:de,narrativeModule:Se},ct=Ne});Oe();export{ct as default};