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.4 kB
JavaScript
var D=(e,n)=>()=>(e&&(n=e(e=0)),n);var w=D(()=>{});function V(e){function n(B){let p=B.trim();return!p||p===e.unknownDate?!1:_.test(p)||K.test(p)}function r(B){let p=B.trim();if(!p||p===e.unknownDate)return e.onUnknown;if(_.test(p))return e.inYear(p);let k=K.exec(p);if(k){let R=k[1].toLowerCase(),b=k[2];switch(R){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(B,p){let k=B.trim(),R=p.trim();return e.lifeRange(k,R,n(k))}function u(B){let p=B.trim();return _.test(p)?e.seesDayInYear(p):n(p)?e.seesDayOnPhrase(r(p)):e.seesDayOnFullDate(p)}return{BOOKLET_UNKNOWN_DATE:e.unknownDate,isYearOnlyDate:n,onDate:r,lifeDateRange:a,seesDayOn:u}}var _,K,X=D(()=>{_=/^\d{3,4}$/,K=/^(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 ye(e){return he.has(fe(e))}function q(e,n){function r(y){let i=y.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}:ye(i)?{city:null,country:i,raw:i}:{city:i,country:null,raw:i}}function a(y){let i=r(y);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(y,i){let h=a(i);if(!h)return"";let L=n.locationPhrase(h);return e.isYearOnlyDate(y)?`,${L}`:L}function B(y){let i=a(y);return i?n.locationPhrase(i):""}function p(y,i,h,L){let A=i.trim(),N=L.trim();return A&&A===N?{birth:"",death:u(h,N)}:{birth:u(y,A),death:u(h,N)}}function k(y,i){let h=a(y),L=a(i);if(!h&&!L)return"";if(h&&L&&h===L)return n.lifeRangeSame(h);if(h&&L)return n.lifeRangeFromTo(h,L);let A=h||L;return n.lifeRangeSingle(A)}function R(y,i){let h=e.onDate(y),L=i.trim();return h===e.onDate("")&&!L?null:L?h===e.onDate("")?B(L).trim()||null:`${h}${u(y,L)}`:h}function b(y){let i=y?.trim();return!i||i===e.onDate("")?"":` ${i}`}return{parsePlaceLabel:r,placeCore:a,afterDateLocation:u,atLocation:B,birthDeathLocationPhrases:p,lifeRangeLocation:k,marriageWhenWhere:R,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,n){let r=e.toLowerCase();return n.some(a=>r.startsWith(a.toLowerCase()))}function Z(e,n,r){return J(e,n)?` ${e}`:`${r}${e}`}function j(e,n,r){return J(e,n)?`, ${e}`:`,${r}${e}`}var I=D(()=>{});function Be(e){return e!=null&&Le.includes(e)}function P(e){return Be(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 n=$e().get(e);if(!n)throw new H(e);return n}var v,H,x=D(()=>{T();v="__GEDCOM_TS_BOOKLET_LOCALE_CACHE__";H=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 ke(e){return M(e).genderWords}function S(e,n){return ke(P(n))[e]}function ee(e,n){let r=P(n);if(r==="en")return"";if(r==="fr")return e>1?"s":"";let a=M(r).genderPhrases;return a&&!a.usesPluralS?"":e>1?"s":""}function ne(e,n){if(e<=0)return"";let r=P(n),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 te(e,n){if(e<=0)return"";let r=P(n),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 oe=D(()=>{T();x()});function re(e){let n=P(e);return M(n).messages}var ae=D(()=>{T();x();x()});function F(e,n=6,r){let a=re(r);if(e.length===0)return a.childrenNone;let u=e.map(B=>B.name);return u.length<=n?u.join(", "):`${u.slice(0,n).join(", ")} ${a.childrenMore(u.length-n)}`}var le=D(()=>{T();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(a=>a.trim()).filter(Boolean);return n.length===0?"":`${n.map(a=>a.endsWith(".")?a.slice(0,-1):a).join(" ; ")}.`}function U(e){return e.trim().split(/\s+/)[0]??e}function g(e,n){return e[Math.abs(n)%e.length]}function Y(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,r){let a=r.dateModule,u=r.placeModule,B=r.unknownDates;function p(t){return t!==B&&t!=="Dates inconnues"}function k(t,s){if(t.parents.length===0)return null;let o=S(t.sex,e),l=t.parents.map(d=>d.name);return l.length===1?g(n.parentsSingle(l[0],o),s+3):g(n.parentsMultiple(Y(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 b(t,s,o){let l=S(t.sex,e),d=s.coParent.name,c=[],m=u.embedMarriageWhenWhere(R(t,s));if(m?c.push(g(n.unionWithMarriage(d,m),o+7)):c.push(g(n.unionWithoutMarriage(d,l),o+7)),s.children.length>0){let f=s.children.map($=>U($.name));f.length===1?c.push(g(n.unionOneChild(f[0],l),o+11)):c.push(g(n.unionManyChildren(Y(f,n.listConjunction),l),o+11))}return C(c)}function y(t,s){let o=t.events.find(m=>m.kind===String("BIRT")),l=t.events.find(m=>m.kind===String("DEAT")),d=t.name,c=S(t.sex,e);if(o&&l){let m=a.onDate(o.date),f=a.onDate(l.date),$=u.birthDeathLocationPhrases(o.date,o.place,l.date,l.place),E=u.lifeRangeLocation(o.place,l.place),O=$.birth||u.afterDateLocation(o.date,o.place);return g(n.lifeBornAndDied(d,c,m,$.birth,f,$.death,a.lifeDateRange(o.date,l.date),E,a.seesDayOn(o.date),O),s)}if(o){let m=a.onDate(o.date),f=u.afterDateLocation(o.date,o.place);return g(n.lifeBirthOnly(d,c,m,f,a.seesDayOn(o.date)),s)}if(l){let m=a.onDate(l.date),f=u.afterDateLocation(l.date,l.place);return g(n.lifeDeathOnly(d,c,m,f),s+1)}return p(t.datesLabel)?g(n.lifeApproxDates(d,c,t.datesLabel),s+2):null}function i(t,s,o){let l=a.onDate(t.date),d=u.afterDateLocation(t.date,t.place),c=S(o,e);switch(t.kind){case"MARR":return g(n.eventMarriage(l,d),s);case"DIV":return n.eventDivorce(l,d);case"BAPM":case"CHR":return g(n.eventBaptism(l,d,c),s);case"BURI":return g(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 L(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 f=l===1?n.chapterGen1(s,c):n.chapterGenN(l,s,c,o);return g(f,l)}let m=d??t.title;return g(n.chapterLetter(t.title,s,c,m,o),s)}function N(t,s){let o=t.familyId,l=t.partners[0]?.name??n.defaultAncestor,d=t.partners[1]?.name,c=t.children,m;if(d){let f=g(n.familyCouple(U(l),U(d),l,d),o),$=u.embedMarriageWhenWhere(t.marriageLabel),E=g($?n.familyUnionWithMarriage($):n.familyUnionWithoutMarriage,o+1);if(c.length===0)m=C([`${f} ${E}`,n.familyNoDescendants]);else if(c.length===1)m=C([`${f} ${E}`,g(n.familyOneChild(c[0].name),o+2)]);else if(s==="summary")m=C([`${f} ${E}`,n.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} ${E}`,n.familyDescendantsList(Y(O,n.listConjunction))])}}else m=se([g(n.familyLoneFigure(U(l),l),o),t.marriageLabel?g(n.familyMarriageNoted(u.embedMarriageWhenWhere(t.marriageLabel)),o+1):"",c.length>0?g([...n.familyDescendantsNoted(F(c,5,e)),n.familyDescendantsRecensed(ne(c.length,e),F(c,5,e))],o+2):""]);return[m]}function pe(t){let s=t.indi,o=[],l=y(t,s);if(l)o.push(l);else{let m=S(t.sex,e);o.push(g(n.personBranchPresent(t.name,m),s))}let d=k(t,s);d&&o.push(d),t.unions[0]&&(o.push(b(t,t.unions[0],s)),t.unions.length>1&&o.push(te(t.unions.length-1,e)));let c=L(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 me(t){let s=t.indi,o=[],l=[],d=y(t,s);d&&l.push(d);let c=k(t,s);c&&l.push(c);let m=L(t,s);if(m.length>0&&l.push(C(m)),l.length>0?o.push(C(l)):o.push(n.personPortraitIncomplete(t.name)),t.unions.length>0){let f=t.unions.map(($,E)=>b(t,$,s+20+E));o.push(g(n.personUnionSection(C(f)),s+5))}else{let f=t.events.filter($=>$.kind===String("MARR"));if(f.length>0){let $=f.map((E,O)=>i(E,s+30+O,t.sex));o.push(C($))}}return t.notesPreview&&o.push(g(n.personResearchNote(t.notesPreview),s+9)),o}return{buildChapterIntroNarrative:A,buildFamilyNarrative:N,buildPersonSummaryNarrative:pe,buildPersonDetailedNarratives:me}}var ce=D(()=>{w();oe();le()});var Re,ue,Ae,Pe,G,z,de,Me,Se,Ne,un,Oe=D(()=>{w();X();Q();I();ce();Re={BIRT:"Nacimiento",DEAT:"Fallecimiento",MARR:"Matrimonio",DIV:"Divorcio",BAPM:"Bautismo (BAPM)",CHR:"Bautismo",BURI:"Entierro",CREM:"Cremaci\xF3n",EVEN:"Evento",OCCU:"Ocupaci\xF3n"},ue={unknownDates:"Fechas desconocidas",unknownDate:"Fecha desconocida",chapterUnknownDates:"Fechas desconocidas",generation1Title:"Generaci\xF3n 1 \u2014 persona de referencia",generationTitle:e=>`Generaci\xF3n ${e}`,letterTitle:e=>`Letra ${e}`,chapterSubtitle:(e,n)=>`${e} persona(s) \u2014 ${n}`,chapterDateAbout:"hacia",childrenNone:"ning\xFAn hijo registrado",childrenMore:e=>`(+ ${e} m\xE1s)`,pagesEstimate:e=>`~${e} p\xE1ginas`,pagesEmpty:"\u2014",adviceDetailed120:"Con m\xE1s de 120 personas, el modo Resumen produce un documento mucho m\xE1s legible y se genera m\xE1s r\xE1pido.",adviceDetailed50:"M\xE1s all\xE1 de 50 personas, el modo Resumen sigue siendo recomendable para una primera lectura.",adviceSummary25:"Pocas personas: el modo Detallado ofrece una bonita ficha por p\xE1gina, ideal para imprimir.",actTypeLabels:Re,spouseUnknown:"C\xF3nyuge no registrado",timelineTitle:e=>`L\xEDnea de tiempo cronol\xF3gica \u2014 ${e}`,timelineUnknownDates:"fechas desconocidas",pdf:{coverSubtitle:"Historia familiar desde su archivo GEDCOM",referencePerson:e=>`Persona de referencia (SOSA 1): ${e}`,personCount:e=>`${e} persona(s) en este folleto`,localNote:"Documento generado localmente en su navegador.",tocTitle:"\xCDndice",modeSummary:"Modo resumen - relatos breves",modeDetailed:"Modo detallado - biograf\xEDas ampliadas",contentHeading:"Contenido del folleto",introSummary:"Este folleto cuenta su \xE1rbol en prosa: nacimientos, uniones, descendencia y fallecimientos reconstruidos a partir del GEDCOM. Cada cap\xEDtulo abre con una generaci\xF3n o una letra, y despliega vidas en relatos breves.",introDetailed:"Este folleto desarrolla cada figura como biograf\xEDa narrativa, en secuencia dentro de cada cap\xEDtulo. Cada nueva generaci\xF3n comienza en una p\xE1gina dedicada.",introSosa:"Los n\xFAmeros SOSA se mencionan cuando la numeraci\xF3n est\xE1 activa. \xCDndice al final del documento.",familyHeading:e=>`La familia ${e}`,generationLabel:e=>`generaci\xF3n ${e}`,pageFooter:e=>`P\xE1gina ${e}`},timeline:{legendBirth:"nacimiento",legendDeath:"fallecimiento",legendMarriage:"matrimonio",overflow:e=>`+ ${e} m\xE1s en las p\xE1ginas siguientes`,continuation:"(l\xEDnea de tiempo continuada)"}},Ae={F:{born:"nace",died:"fallece",baptized:"bautizada",present:"presente",linked:"unida",offspring:"hija",descendant:"descendiente",childOf:"hija",parentOf:"madre"},M:{born:"nace",died:"fallece",baptized:"bautizado",present:"presente",linked:"unido",offspring:"hijo",descendant:"descendiente",childOf:"hijo",parentOf:"padre"},U:{born:"nace",died:"fallece",baptized:"bautizado/a",present:"presente",linked:"unido/a",offspring:"hijo/a",descendant:"descendiente",childOf:"hijo/a",parentOf:"progenitor"},X:{born:"nace",died:"fallece",baptized:"bautizado/a",present:"presente",linked:"unido/a",offspring:"hijo/a",descendant:"descendiente",childOf:"hijo/a",parentOf:"progenitor"}},Pe={usesPluralS:!1,recensedChildren:e=>e===1?"1 hijo/a registrado/a":`${e} hijos registrados`,otherUnions:e=>e===1?"1 otra uni\xF3n citada en el \xE1rbol":`${e} otras uniones citadas en el \xE1rbol`},G=["en "],z=V({unknownDate:"Fecha desconocida",onUnknown:"en fecha desconocida",inYear:e=>`en ${e}`,beforeYear:e=>`antes de ${e}`,afterYear:e=>`despu\xE9s de ${e}`,aboutYear:e=>`hacia ${e}`,onFullDate:e=>`el ${e}`,lifeRange:(e,n,r)=>r?`De ${e} a ${n}`:`Del ${e} al ${n}`,seesDayInYear:e=>`nace en ${e}`,seesDayOnPhrase:e=>`nace ${e}`,seesDayOnFullDate:e=>`nace el ${e}`}),de=q(z,{countryPrefixes:G,countryPhrase:e=>`en ${e}`,locationPhrase:e=>Z(e,G," en "),lifeRangeSame:e=>j(e,G," en "),lifeRangeFromTo:(e,n)=>`, de ${e} a ${n}`,lifeRangeSingle:e=>j(e,G," en ")}),Me={listConjunction:"y",defaultAncestor:"Un antepasado",parentsSingle:(e,n)=>[`hijo/a de ${e}`,`${n.childOf} de ${e}`,`${n.descendant} de ${e}`],parentsMultiple:(e,n)=>[`${n.offspring} de ${e}`,`${n.descendant} de ${e}`,`hijo/a de ${e}`],unionWithMarriage:(e,n)=>[`se casa con ${e}${n}`,`se une a ${e}${n}`,`matrimonio con ${e}${n}`],unionWithoutMarriage:(e,n)=>[`${n.linked} a ${e}`,`comparte la vida con ${e}`,`uni\xF3n registrada con ${e}`],unionOneChild:(e,n)=>[`incluido ${e}`,`con hijo/a ${e}`,`${n.parentOf} de ${e}`],unionManyChildren:(e,n)=>[`incluidos los hijos ${e}`,`con descendencia ${e}`,`${n.parentOf} de ${e}`],lifeBornAndDied:(e,n,r,a,u,B,p,k,R,b)=>[`${e}, ${n.born} ${r}${a}, falleci\xF3 ${u}${B}`,`${p}${k}, ${e} marca este linaje`,`${e} ${R}${b} y falleci\xF3 ${u}${B}`],lifeBirthOnly:(e,n,r,a,u)=>[`${e}, ${n.born} ${r}${a}`,`Nacimiento de ${e} ${r}${a}`,`${e} ${u}${a}`],lifeDeathOnly:(e,n,r,a)=>[`${e}, ${n.died} ${r}${a}`,`Fallecimiento de ${e} ${r}${a}`,`${e} falleci\xF3 ${r}${a}`],lifeApproxDates:(e,n,r)=>[`${e}, ${n.present} en los registros hacia ${r}`,`Se sit\xFAa a ${e} alrededor de ${r}`,`${e} (${r})`],eventMarriage:(e,n)=>[`matrimonio celebrado ${e}${n}`,`uni\xF3n registrada ${e}${n}`,`bodas celebradas ${e}${n}`,`se une${e}${n}`],eventDivorce:(e,n)=>`divorcio registrado ${e}${n}`,eventBaptism:(e,n,r)=>[`bautismo ${e}${n}`,`${r.baptized} ${e}${n}`,`rito bautismal ${e}${n}`],eventBurial:(e,n)=>[`entierro ${e}${n}`,`funeral ${e}${n}`,`sepultura ${e}${n}`],eventCremation:(e,n)=>`cremaci\xF3n registrada ${e}${n}`,eventOccupation:(e,n)=>`ocupaci\xF3n anotada (${e})${n}`,chapterGen1:(e,n)=>[`Punto de partida del relato: ${e} figura${n} en la ra\xEDz del \xE1rbol.`,`Aqu\xED comienza el linaje, con ${e} persona${n} de referencia.`],chapterGenN:(e,n,r,a)=>[`En la generaci\xF3n ${e}, ${n} antepasado${r} entran en escena.`,`Esta generaci\xF3n incluye ${n} persona${r}${a?` (${a})`:""}.`,`${n} vida${r} se cruzan en esta generaci\xF3n${a?`, entre ${a}`:""}.`],chapterLetter:(e,n,r,a,u)=>[`${e}: ${n} retrato${r} por descubrir.`,`${n} persona${r} para la letra ${a}${u?` (${u})`:""}.`],familyCouple:(e,n,r,a)=>[`${e} y ${n}`,`La pareja ${e} \u2013 ${n}`,`${r} y ${a}`],familyUnionWithMarriage:e=>[`se unen${e}`,`se casan${e}`,`celebran su uni\xF3n${e}`],familyUnionWithoutMarriage:["forman una uni\xF3n","est\xE1n unidos en los registros","aparecen como c\xF3nyuges"],familyNoDescendants:"sin descendencia registrada en el archivo",familyOneChild:e=>[`con hijo/a ${e}`,`dan a luz a ${e}`,`tienen un hijo/a, ${e}`],familyNChildren:(e,n)=>`${e} hijos: ${n}`,familyDescendantsList:e=>`descendencia: ${e}`,familyLoneFigure:(e,n)=>[`${e} ocupa un lugar central en este linaje`,`${n}, figura emblem\xE1tica de este cap\xEDtulo`],familyMarriageNoted:e=>[`matrimonio registrado${e}`,`uni\xF3n anotada${e}`],familyDescendantsNoted:e=>[`descendencia: ${e}`],familyDescendantsRecensed:(e,n)=>`${e}: ${n}`,personBranchPresent:(e,n)=>[`${e}, ${n.present} en esta rama`,`${e} figura en este cap\xEDtulo`],personFewRecords:e=>`${e}: pocos actos por ahora`,personResearchHint:"investigaciones futuras pueden completar este retrato",personPortraitIncomplete:e=>`${e} \u2014 retrato a\xFAn por completar en los archivos.`,personUnionSection:e=>[e,`Lado familiar: ${e}`,`En el lado conyugal: ${e}`],personResearchNote:e=>[`Nota de investigaci\xF3n: ${e}`,`Los archivos indican: ${e}`,`Cabe recordar: ${e}`]},Se=ie("es",Me,{dateModule:z,placeModule:de,unknownDates:ue.unknownDates}),Ne={messages:ue,genderWords:Ae,genderPhrases:Pe,dateModule:z,placeModule:de,narrativeModule:Se},un=Ne});Oe();export{un as default};