Mensagem subliminar Genealogia, preliminaridades de amador enredo: histórias de famı́lia + genealogia + foto∗ importante é o conteúdo (perl: um humilde ajudante) J.João Almeida há sempre um espaço para o scripting dar uma ajuda wikificação Departamento de Informática Universidade do Minho scriptização de templates 2 de Outubro de 2012 JJoão Genealogia, preliminaridades de amador 1 JJoão Menu Genealogia, preliminaridades de amador 2 Introdução 1 Introdução 2 Genealogia 3 Formato GEDCOM Módulo Gedcom.pm Exemplo do módulo Gedcom.pm Demonstração do exemplo get-indivı́duo 4 Wikificação de GedCom Demonstração do caderno Genealógico 5 Geração de árvores Genealógicas Demonstração de templates genealógicos 6 Conclusões 7 Fim JJoão Genealogia, preliminaridades de amador Normalmente os estudos ligados à genealogia envolvem: Estrutura genealógica (GEDCOM) Várias histórias de famı́lia (LATEX) Várias histórias da miudagem (LATEX) (no meu caso particular) Fotos diversas (jpeg + tabela) um puzle onde se vão juntando novas peças... JJoão 3 Genealogia Genealogia, preliminaridades de amador 4 Formato GEDCOM Sı́ndrome de descendente do D.Afonso Henriques Algumas ferramenta permitem edição cooperativa: Formato textual; Medatada My-heritage (edição Web de boa qualidade; armadilhado) geneweb (ocaml; edição Web controlada localmente) FixMe : Falta completar as ferramentas Gramps (python) Indivı́duos famı́lias notas Várias ferramentas exportam formato Gedcom Normalmente o Gedcom é uma espaço/sintaxe pouco claro para... fontes atributos em árvore associação de Histórias, Biografias, etc fotos documentos diversos, recortes JJoão Genealogia, preliminaridades de amador Exemplos diversos nas páginas seguintes 5 JJoão 1 Genealogia, preliminaridades de amador 6 Exemplos Gedcom (cont.) 0 HEAD 1 GEDC 2 VERS 5.5 2 FORM LINEAGE-LINKED 1 CHAR UTF-8 1 LANG Portuguese 1 SOUR MYHERITAGE 2 NAME MyHeritage Family Tree Builder 2 CORP MyHeritage.com 0 @I1@ INDI 1 NAME Duarte /Pereira Dias de Almeida/ 2 GIVN Duarte 2 SURN Pereira Dias de Almeida 1 SEX M 1 BIRT 2 DATE 1922 1 FAMS @F1@ 1 FAMC @F2@ 0 @I2@ INDI 1 NAME José Jo~ ao /Antunes Guimar~ aes Dias de Almeida/ 2 GIVN José Jo~ ao 2 SURN Antunes Guimar~ aes Dias de Almeida 1 SEX M 1 FAMS @F43@ 1 FAMC @F1@ JJoão Genealogia, preliminaridades de amador Pessoa 0 1 2 2 2 @I3@ INDI NAME Maria Isabel /Antunes Guimar~ aes de Vanconcelos Pignatelli/ GIVN Maria Isabel SURN Antunes Guimar~ aes de Vanconcelos Pignatelli _MARNM Antunes Guimar~ aes de Vasconcelos Pignatelli Dias de Almeida Famı́lia 0 1 1 1 1 1 @F52@ FAM HUSB @I121@ WIFE @I123@ CHIL @I78@ CHIL @I122@ CHIL @I119@ 7 JJoão Módulo Gedcom.pm Genealogia, preliminaridades de amador 8 Exemplo do módulo Gedcom.pm Mostra individuo de uma Gedcom Paul Johnson Módulo Perl use Gedcom; my $ged parser de gedcom funções para processamento de: = Gedcom->new($gedcom_file); my @indivs indivı́duos, famı́lias atributos de indivı́duos ou famı́lia procuras = $ged->get_individual($ind); for $i (@indivs){ print $i->name , "\n"; print "Pai:", $i->father->name , "\n"; print "Mae:", $i->mother->name , "\n"; for $f ($i->fams){ print "Cc: ", $f->wife->name , "\n" ; for ($f->children){ print "\t* ", $_->name , "\n"; } } permite escrever gedcom e XML-gedcom mecanismos ricos de validação guiados por uma gramática (alguns problemas com encodings...) } JJoão Genealogia, preliminaridades de amador 9 JJoão Demonstração do exemplo get-indivı́duo Genealogia, preliminaridades de amador 10 Wikificação de GedCom Caderno de genealogia Gedcom → Zim Zim (adicionar biografias, histórias, fotos) ... Zim (corrigir completar inf. genealógica) Gedcom × individuo → famı́lia do individuo Zim → GedCom FixMe : falta completar Zim → HTML JJoão Genealogia, preliminaridades de amador 11 JJoão 2 Genealogia, preliminaridades de amador 12 Demonstração do caderno Genealógico Geração de árvores Genealógicas ... com base em templates LaTeX + Skel::Data → Scriptização de template Conversão GedCom → Caderno 1 2 3 4 JJoão Genealogia, preliminaridades de amador Construir um template LaTeX para árvores genealógicas: escrever o exemplo LaTeX substituir os especı́ficos por parâmetros ([% pai %]) substituir as listas por parâmetros ([% filhos*t2 %]) gerar esqueleto de script (mkskimport) gen2zim famı́lia.ged ... famı́lia → zim; zim famı́lia membro ... editar; zim –export -o Gen-html –template Default –index-page index ./Gen ... builds static html Gedcom × Indivı́duo → inf-famı́lia inf-famı́lia × template → pdf uso do módulo Skel::Data (templates na secção Data) 13 JJoão Demonstração de templates genealógicos Genealogia, preliminaridades de amador 14 Conclusões Template LaTeX Bricolagem genealógica: é viável gentree-h3(famı́liax) Wikificação de estruturas (por vezes com perdas) Scriptização de templates Template LaTeX scriptizado thegentree-h3(getfamı́lia(Duarte Moreira)) JJoão Genealogia, preliminaridades de amador 15 JJoão Genealogia, preliminaridades de amador 17 JJoão Fim 3 Genealogia, preliminaridades de amador 16 1 Geração de árvores genealógicas (demo) thegentree -t=3h Famjj-j.ged "Constança" Libania Leopoldina /Pereira Pimentel da Mota Castelo-Branco/ Maria da Natividade /Pimentel de Queiros Montenegro/ Caetano /Pinto de Queiros Montenegro/ Maria Constança /da Cunha Pignatelli Telles de Vasconcelos/ Maria Constança /de Queiros Montenegro Pinto Moreira/ Joana /de Almeida e Sousa/ Maria Josefa /da Cunha Pignatelli Telles de Vasconcelos/ João /Pinto Moreira de Almeida e Sousa/ João /Pinto Moreira/ Margarida Maxima /da Cunha Pignatelli Telles de Vasconcelos/ Maria José /da Cunha Tavares Osório/ Maria da Natividade /da Cunha Pignatelli Telles de Vasconcelos/ António João /Telles Pereira de Vasconcelos Pimentel/ Josefa Cândida /da Cunha Pignatelli Tavares Osório/ Joaquim /da Cunha Freire Robalo Pignatelli da Gama Sotomaior/ António /da Cunha Pignatelli de Tavares Osório Telles de Vasconcelos/ António /Telles Pereira de Vasconcelos Pimentel/ 1.1 Estrutura do thegentree a)Calcula os parâmetros x em função de base-GedCom e do Individuo b)invoca o template com esses parâmtros __DATA__ __template1__ ... [% x %] .... __template2__ ... [% x %] .... __template3__ ... [% x %] .... → gera função template1(x) → gera função template3(x) → gera função template3(x) #!/usr/bin/perl -s our ($pdf,$xpdf,$t); $t ||= "3h"; $pdf =1 if $xpdf; my $gedcom_file=shift; my $ind=shift; 4 use Gedcom; my $ged my $i = Gedcom->new($gedcom_file); = $ged->get_individual($ind); use Skel::Data ; skimport(); ## import the __DATA_ templates as functions sub M{ my $a=shift; return undef if not $a; return $a->mother} sub p{ my $a=shift; return undef if not $a; return $a->father} sub n{ my $a=shift; return ’’ if not $a; return $a->name || ’’} open(F, ">","_.tex"); print F treegen3h({ ## tree generator horizontal 3 m => n(M $i), mm => n(M(M $i)), mmm => n(M(M(M $i))), mmp => mp => n(p(M $i)), mpm => n(M(p(M $i))), mpp => p => n(p $i), pp => n(p(p $i)), ppm => n(M(p(p $i))), ppp => pm => n(M(p $i)), pmm => n(M(M(p $i))), pmp => f => [ map { $_->name} $i->famc->children], }) if ($t eq "3h"); n(p(M(M $i))), n(p(p(M $i))), n(p(p(p $i))), n(p(M(p $i))), print F treegen2v({ ## tree generator Vertical 2 m => n(M $i), mm => n(M(M $i)), mp => n(p(M $i)), p => n(p $i), pp => n(p(p $i)), pm => n(M(p $i)), f => n($i), }) if ($t eq "2v"); print F treegen3v({ ## tree generator Vertical 3 m => n(M $i), mm => n(M(M $i)), mmm => n(M(M(M $i))), mmp => n(p(M(M $i))), ...................... }) if ($t eq "3v"); close F; ‘ppdflatex -Q _.tex‘ ‘xpdf _.pdf‘ if $pdf; if $xpdf; __DATA__ __treegen3h__ \documentclass[portuges,a4paper]{article} \usepackage{babel} ............ \usepackage{pgf} \usepackage{tikz} \usetikzlibrary{trees,arrows,automata,positioning} \begin{document} \def\per#1#2{{#1\\~\hfill #2}} \def\num#1{node[person,label={[label distance={-3mm},red]172:#1}]} \def\ppp#1#2#3{\num{#1} {\per{#2}{#3}}} \begin{tikzpicture}[auto, edge from parent fork right, grow = right, node distance=2.2cm, level distance=4.2cm , ............. \node[r] (0) at(5,0) {} child { node[person] {[%p%]} child { node[person] {[%pp%]} child { node[person] {[%ppp%]} } child { node[person] {[%ppm%]} } } ............. 5 \node[r] (10) at (8,0) {} [edge from parent fork left,grow=left, level 1/.style={sibling distance=1.9cm }] [% f*child %] \end{tikzpicture} \end{document} __child__ child { node [person] {[%filho%]} } __treegen2v__ \documentclass[portuges,a4paper]{article} .............. \usepackage{gentree} .............. \begin{gentreev2} \father{[%f%]}{[%p%]}{[%pp%]}{[%pm%]}{[%m%]}{[%mp%]}{[%mm%]} \end{gentreev2} \end{document} __treegen3v__ \documentclass[portuges,a4paper]{article} ............... \begin{gentreev2} \father{[%p%]}{[%pp%]}{[%ppp%]}{[%ppm%]}{[%pm%]}{[%pmp%]}{[%pmm%]} \mother{[%m%]}{[%mp%]}{[%mpp%]}{[%mpm%]}{[%mm%]}{[%mmp%]}{[%mmm%]} \suns[% f*suns2 %] ...... __suns2__ {[%sun%]} 6