diff --git a/ChangeLog b/ChangeLog index 6f8ea817f..c8da41f9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-02-11 Don Allingham + * src/Merge/_MergePlace.py: merge from 2.2 tree + * src/GrampsDbUtils/_GedcomParse.py: parsing improvements + * src/GrampsDbUtils/_GedcomLex.py: parsing improvements + 2007-02-10 Don Allingham * src/GrampsDb/_GrampsGEDDB.py: new GEDCOM parser module * src/RelLib/_BaseObject.py: new GEDCOM parser module @@ -11,6 +16,25 @@ * src/GrampsDbUtils/Makefile.am: new GEDCOM parser module * src/ArgHandler.py: new GEDCOM parser module * example/gedcom/sample.ged: added test cases +2007-02-11 Don Allingham + * src/Merge/_MergePlace.py (MergePlaces.merge): fix typo on + add_source_reference + +2007-02-07 Zsolt Foldvari + * src/DisplayTabs/_NoteTab.py: move "rich text" notes to 2.3 branch. + +2007-02-06 Brian Matherly + * src/docgen/PdfDoc.py: provide a more useful error when reportlab crashes + +2007-02-06 Douglas Blank + * src/ReportBase/_ReportDialog.py: 0000905: Typo in catching exceptions in + buggy reports + * src/plugins/holidays.xml: 0000906: Canada holidays patch + +2007-02-06 Don Allingham + * src/GrampsDb/_ReadGedcom.py: fix cal/est parsing + * src/DisplayTabs/_ButtonTab.py: catch window already being open + * example/gedcom/sample.ged: Add est/cal samples 2007-02-10 Brian Matherly * src/BaseDoc.py: remove unused functions diff --git a/example/gedcom/sample.ged b/example/gedcom/sample.ged index 4b3078326..31a748b49 100755 --- a/example/gedcom/sample.ged +++ b/example/gedcom/sample.ged @@ -1,878 +1,730 @@ 0 HEAD -1 SOUR GRAMPS -2 VERS 2.3.0-0.SVN8038M -2 NAME GRAMPS -1 DEST GEDCOM 5.5 -1 DATE 11 FEB 2007 -1 CHAR UTF-8 -1 SUBM @SUBM@ -1 FILE /home/dona/branches/gramps23/example/gedcom/sample.ged -1 COPR Copyright (c) 2007 Don Allingham. +1 SOUR FTW +2 VERS 8.0 +2 NAME Family Tree Maker for Windows +2 CORP Genealogy.com +3 ADDR 39500 Stevenson Pl. #204 +4 CONT Fremont, CA 95439 +3 PHON (510) 794-6850 +1 DEST FTW +1 DATE 3 JUN 2001 +1 CHAR ANSEL +1 FILE C:\My Documents\Family Tree\Sample.GED 1 GEDC 2 VERS 5.5 2 FORM LINEAGE-LINKED -0 @SUBM@ SUBM -1 NAME Don Allingham -1 ADDR Not Provided -2 CONT City (not provided), Postal code (not provided) -2 CONT Country (not provided) -2 ADR1 Not Provided -2 ADR2 City (not provided), Postal code (not provided) -0 @I02@ INDI -1 REFN 2 -1 NAME Alice Paula /Perkins/ -2 GIVN Alice Paula -2 SURN Perkins -2 SOUR @S1600@@ -3 PAGE 1933 BIRTH: NV, Washoe Co., Sparks, Birth Certificate, Nevada State Department of Health, Vital Records, Sparks, NV, certificate #599632 -3 DATA -4 TEXT Alice Paula Perkins born 22 Nov 1933, Sparks, Washoe Co, Nevada daughte -5 CONC r of Paul Perkins and Stella Mason. -2 SOUR @S1601@@ -1 SEX F -1 BIRT -2 DATE 22 NOV 1933 -2 PLAC Sparks, Washoe Co., NV -1 FAMS @F0000@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I03@ INDI -1 REFN 3 -1 NAME Martin /Smith/ -2 GIVN Martin -2 SURN Smith -1 SEX M -1 BIRT -2 DATE BET. 1794 - 1796 -2 PLAC Tommarp, Kristianstad Lan, Sweden -1 DEAT -2 DATE deceased -2 PLAC Sweden -2 AGNC Some type of agency -2 CAUS Killer tomatoes -2 AGE 94y -1 ADOP Y -1 FAMC @F04@ -1 FAMS @F03@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I04@ INDI -1 REFN 4 -1 NAME Elna /Jefferson/ -2 GIVN Elna -2 SURN Jefferson -1 SEX F -1 BIRT -2 DATE 14 SEP 1800 -2 PLAC Gladsax, Kristianstad Lan, Sweden -1 DEAT -2 PLAC Sweden -1 FAMS @F03@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I05@ INDI -1 REFN 5 -1 NAME Martin /Smith/ -2 GIVN Martin -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 19 NOV 1830 -2 PLAC Gladsax, Kristianstad Lan, Sweden -1 DEAT -2 DATE BET. 1899 - 1905 -2 PLAC Sweden -1 FAMC @F03@ -1 FAMS @F05@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I06@ INDI -1 REFN 6 -1 NAME Kerstina /Hansdotter/ -2 GIVN Kerstina -2 SURN Hansdotter -1 SEX F -1 BIRT -2 DATE 29 NOV 1832 -2 PLAC Smestorp, Kristianstad Lan, Sweden -1 DEAT -2 DATE BEF 1908 -2 PLAC Sweden -1 FAMS @F05@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I07@ INDI -1 REFN 7 -1 NAME Gustaf /Smith/ , Sr. -2 GIVN Gustaf -2 SURN Smith -2 NSFX , Sr. -1 SEX M -1 BIRT -2 DATE 28 NOV 1862 -2 PLAC Grostorp, Kristianstad Lan, Sweden -1 DEAT -2 DATE BEF 23 JUL 1930 -2 PLAC Sparks, Washoe Co., NV -1 FAMC @F05@ -1 FAMS @F06@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I08@ INDI -1 REFN 8 -1 NAME Anna /Hansdotter/ -2 GIVN Anna -2 SURN Hansdotter -1 SEX F -1 BIRT -2 DATE 2 OCT 1864 -2 PLAC Loderup, Malmous Lan, Sweden -1 DEAT -2 DATE 29 SEP 1945 -2 PLAC Sparks, Washoe Co., NV -1 FAMS @F06@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I09@ INDI -1 REFN 9 -1 NAME Kirsti Marie /Smith/ -2 GIVN Kirsti Marie -2 SURN Smith -1 SEX F -1 BIRT -2 DATE 15 DEC 1886 -2 PLAC Ronne, Bornholm, Denmark -1 DEAT -2 DATE 18 JUL 1966 -2 PLAC San Francisco, San Francisco Co., CA -1 FAMC @F06@ -1 FAMS @F07@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I10@ INDI -1 REFN 10 -1 NAME Astrid Shermanna Augusta /Smith/ -2 GIVN Astrid Shermanna Augusta -2 SURN Smith -1 SEX F -1 BIRT -2 DATE 31 JAN 1889 -2 PLAC Ronne, Bornholm, Denmark -1 DEAT -2 DATE 21 DEC 1963 -2 PLAC San Francisco, San Francisco Co., CA -1 FAMC @F06@ -1 FAMS @F08@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I11@ INDI -1 REFN 11 -1 NAME Hjalmar /Smith/ -2 GIVN Hjalmar -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 31 JAN 1893 -2 PLAC Ronne, Bornholm, Denmark -1 DEAT -2 DATE 25 SEP 1894 -2 PLAC Ronne, Bornholm, Denmark -1 FAMC @F06@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I12@ INDI -1 REFN 12 -1 NAME Hjalmar /Smith/ -2 GIVN Hjalmar -2 SURN Smith -2 SOUR @S1600@@ -1 SEX M -1 BIRT -2 DATE 7 APR 1895 -2 PLAC Ronne, Bornholm, Denmark -1 DEAT -2 DATE 26 JUN 1975 -2 PLAC Reno, Washoe Co., NV -1 FAMC @F06@ -1 FAMS @F09@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I13@ INDI -1 REFN 13 -1 NAME Gus /Smith/ -2 GIVN Gus -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 11 SEP 1897 -2 PLAC Ronne, Bornholm, Denmark -1 DEAT -2 DATE 21 OCT 1963 -2 PLAC San Francisco, San Francisco Co., CA -1 FAMC @F06@ -1 FAMS @F10@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I14@ INDI -1 REFN 14 -1 NAME Carl Emil /Smith/ -2 GIVN Carl Emil -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 20 DEC 1899 -2 PLAC Ronne, Bornholm, Denmark -1 DEAT -2 DATE 28 JAN 1959 -2 PLAC Reno, Washoe Co., NV -1 FAMC @F06@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I15@ INDI -1 REFN 15 -1 NAME Hans Peter /Smith/ -2 GIVN Hans Peter -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 17 APR 1904 -2 PLAC Ronne, Bornholm, Denmark -1 DEAT -2 DATE 29 JAN 1977 -2 PLAC San Francisco, San Francisco Co., CA -1 FAMC @F06@ -1 FAMS @F11@ -1 FAMS @F15@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I16@ INDI -1 REFN 16 -1 NAME Edwin /Willard/ -2 GIVN Edwin -2 SURN Willard -1 SEX M -1 BIRT -2 DATE ABT 1886 -1 FAMS @F07@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @I17@ INDI -1 REFN 17 -1 NAME Herman Julius /Nielsen/ -2 GIVN Herman Julius -2 SURN Nielsen -1 SEX M -1 BIRT -2 DATE 31 AUG 1889 -2 PLAC Ronne, Bornholm, Denmark -1 DEAT -2 DATE 1945 -1 FAMS @F08@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I18@ INDI -1 REFN 18 -1 NAME John Hjalmar /Smith/ -2 GIVN John Hjalmar -2 SURN Smith -2 SOUR @S1601@@ -1 SEX M -1 BIRT -2 DATE 30 JAN 1932 -2 PLAC San Francisco, San Francisco Co, CA -1 FAMC @F09@ -1 FAMS @F0000@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I19@ INDI -1 REFN 19 -1 NAME Marjorie Lee /Smith/ -2 GIVN Marjorie Lee -2 SURN Smith -2 SOUR @S1600@@ -1 SEX F -1 BIRT -2 DATE 4 NOV 1934 -2 PLAC Reno, Washoe Co. NV -1 FAMC @F09@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I20@ INDI -1 REFN 20 -1 NAME Evelyn /Michaels/ -2 GIVN Evelyn -2 SURN Michaels -1 SEX F -1 BIRT -2 DATE ABT 1897 -1 FAMS @F10@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I21@ INDI -1 REFN 21 -1 NAME Jennifer /Anderson/ -2 GIVN Jennifer -2 SURN Anderson -1 SEX F -1 BIRT -2 DATE 5 NOV 1907 -2 PLAC Ronne, Bornholm, Denmark -1 DEAT -2 DATE 29 MAY 1985 -2 PLAC San Francisco, San Francisco Co., , CA -1 FAMS @F15@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I22@ INDI -1 REFN 22 -1 NAME Lillie Harriet /Jones/ -2 GIVN Lillie Harriet -2 SURN Jones -1 SEX F -1 BIRT -2 DATE 2 MAY 1910 -2 PLAC Ronne, Bornholm, Denmark -1 DEAT -2 DATE 26 JUN 1990 -1 FAMS @F11@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I23@ INDI -1 REFN 23 -1 NAME Magnes /Smith/ -2 GIVN Magnes -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 6 OCT 1858 -2 PLAC Simrishamn, Kristianstad Lan, Sweden -1 DEAT -2 DATE 20 FEB 1910 -2 PLAC Ronne, Bornholm, Denmark -1 FAMC @F05@ -1 FAMS @F12@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I24@ INDI -1 REFN 24 -1 NAME Emil /Smith/ -2 GIVN Emil -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 27 SEP 1860 -2 PLAC Simrishamn, Kristianstad Lan, Sweden -1 FAMC @F05@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I25@ INDI -1 REFN 25 -1 NAME Anna /Streiffert/ -2 GIVN Anna -2 SURN Streiffert -1 SEX F -1 BIRT -2 DATE 23 SEP 1860 -2 PLAC Hoya/Jona/Hoia, Sweden -1 DEAT -2 DATE 2 FEB 1927 -2 PLAC Ronne, Bornholm, Denmark -1 FAMS @F12@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I26@ INDI -1 REFN 26 -1 NAME Hanna /Smith/ -2 GIVN Hanna -2 SURN Smith -1 SEX F -1 BIRT -2 DATE 29 JAN 1821 -2 PLAC Gladsax, Kristianstad Lan, Sweden -1 FAMC @F03@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I27@ INDI -1 REFN 27 -1 NAME Ingar /Smith/ -2 GIVN Ingar -2 SURN Smith -1 SEX F -1 BIRT -2 DATE AFT 1823 -2 PLAC Gladsax, Kristianstad Lan, Sweden -1 FAMC @F03@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I28@ INDI -1 REFN 28 -1 NAME Ingeman /Smith/ -2 GIVN Ingeman -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 29 JAN 1826 -2 PLAC Gladsax, Kristianstad Lan, Sweden -1 FAMC @F03@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I29@ INDI -1 REFN 29 -1 NAME Marjorie Alice /Smith/ -2 GIVN Marjorie Alice -2 SURN Smith -2 SOUR @S1600@@ -1 SEX F -1 BIRT -2 DATE 5 FEB 1960 -2 PLAC San Jose, Santa Clara Co., CA -1 FAMC @F0000@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I30@ INDI -1 REFN 30 -1 NAME Lloyd /Smith/ -2 GIVN Lloyd -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 13 MAR 1935 -2 PLAC San Francisco, San Francisco Co., CA -1 FAMC @F11@ -1 FAMS @F13@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I31@ INDI -1 REFN 31 -1 NAME Janis Elaine /Green/ -2 GIVN Janis Elaine -2 SURN Green -1 SEX F -1 BIRT -2 DATE 2 DEC 1935 -1 FAMS @F13@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I32@ INDI -1 REFN 32 -1 NAME Eric Lloyd /Smith/ -2 GIVN Eric Lloyd -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 28 AUG 1963 -2 PLAC San Francisco, San Francisco Co., CA -1 FAMC @F13@ -1 FAMS @F14@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I33@ INDI -1 REFN 33 -1 NAME Keith Lloyd /Smith/ -2 GIVN Keith Lloyd -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 11 AUG 1966 -2 PLAC San Francisco, San Francisco Co., CA -1 FAMC @F13@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I34@ INDI -1 REFN 34 -1 NAME Craig Peter /Smith/ -2 GIVN Craig Peter -2 SURN Smith -1 SEX M -1 BIRT -2 DATE AFT 1966 -2 PLAC San Francisco, San Francisco Co., CA -1 FAMC @F13@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I35@ INDI -1 REFN 35 -1 NAME Lars Peter /Smith/ -2 GIVN Lars Peter -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 16 SEP 1991 -2 PLAC Santa Rosa, Sonoma Co., CA -1 FAMC @F14@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I36@ INDI -1 REFN 36 -1 NAME Darcy /Horne/ -2 GIVN Darcy -2 SURN Horne -1 SEX F -1 BIRT -2 DATE 2 JUL 1966 -2 PLAC Sacramento, Sacramento Co., CA -1 FAMS @F14@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I37@ INDI -1 REFN 37 -1 NAME Ingeman /Smith/ -2 GIVN Ingeman -2 SURN Smith -1 SEX M -1 BIRT -2 DATE ABT 1770 -2 PLAC Sweden -1 FAMS @F04@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I38@ INDI -1 REFN 38 -1 NAME Marta /Ericsdotter/ -2 GIVN Marta -2 SURN Ericsdotter -1 SEX F -1 BIRT -2 DATE ABT 1775 -2 PLAC Sweden -1 FAMS @F04@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I39@ INDI -1 REFN 39 -1 NAME Marjorie /Ohman/ -2 GIVN Marjorie -2 SURN Ohman -2 SOUR @S1602@@ -2 SOUR @S1600@@ -1 SEX F -1 BIRT -2 DATE 3 JUN 1903 -2 PLAC Denver, Denver Co., CO -1 DEAT -2 DATE 22 JUN 1980 -2 PLAC Reno, Washoe Co., NV -1 FAMS @F09@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I40@ INDI -1 REFN 40 -1 NAME Janice Ann /Adams/ -2 GIVN Janice Ann -2 SURN Adams -1 SEX F -1 BIRT -2 DATE 26 AUG 1965 -2 PLAC Fremont, Alameda Co., CA -1 FAMS @F01@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I41@ INDI -1 REFN 41 -1 NAME Amber Marie /Smith/ -2 GIVN Amber Marie -2 SURN Smith -1 SEX F -1 BIRT -2 DATE 12 APR 1998 -2 PLAC Hayward, Alameda Co., CA -1 FAMC @F01@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I42@ INDI -1 REFN 42 -1 NAME Mason Michael /Smith/ -2 GIVN Mason Michael -2 SURN Smith -1 SEX M -1 BIRT -2 DATE 26 JUN 1996 -2 PLAC Hayward, Alameda Co., CA -1 FAMC @F01@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @I43@ INDI -1 REFN 43 -1 NAME Really Old /Guy/ -2 GIVN Really Old -2 SURN Guy -1 SEX M -1 BIRT -2 DATE 26 JUN 34 B.C. -2 PLAC Hayward, Alameda Co., CA -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +1 _SCHEMA +2 INDI +3 _FA1 +4 LABL Marriage fact +3 _FA2 +4 LABL Fact 2 +3 _FA3 +4 LABL Fact 3 +3 _FA4 +4 LABL Fact 4 +3 _FA5 +4 LABL Fact 5 +3 _FA6 +4 LABL Fact 6 +3 _FA7 +4 LABL Fact 7 +3 _FA8 +4 LABL Fact 8 +3 _FA9 +4 LABL Fact 9 +3 _FA10 +4 LABL Fact 10 +3 _FA11 +4 LABL Fact 11 +3 _FA12 +4 LABL Fact 12 +3 _FA13 +4 LABL Fact 13 +3 _MREL +4 LABL Relationship to Mother +3 _FREL +4 LABL Relationship to Father +2 FAM +3 _FA1 +4 LABL Marriage fact +3 _FA2 +4 LABL Fact 2 +3 _MSTAT +4 LABL Marriage Beginning Status +3 _MEND +4 LABL Marriage Ending Status 0 @IC3a2b1@ INDI -1 REFN 3 1 NAME Edwin Michael /Smith/ -2 GIVN Edwin Michael -2 SURN Smith -2 NOTE This is a note attached to a name -2 SOUR @S1600@@ +2 NOTE This is a note attached to a name +2 SOUR @S1600@ +1 _UID THIS_IS_A_UID +1 AFN GXXX-XX +1 RFN MY-RFN +1 ASSO @I07@ +2 RELA SomeRelationship +2 NOTE This is a note for the ASSOC import +2 SOUR @S1600@ 1 SEX M -1 BIRT -2 TYPE Edwin Michael Smith's Birth event -2 DATE 24 MAY 1961 -2 PLAC San Jose, Santa Clara Co., CA -1 BAPL -2 DATE MAR 1852 -1 EVEN My Custom Event of Smith, Edwin Michael -2 TYPE My Custom Event -2 DATE 2000 -1 None THIS_IS_A_UID -1 None GXXX-XX +1 TITL Grand Poobah +1 OBJE +2 FORM jpeg +2 FILE O0.jpg +1 BIRT Edwin Michael Smith's Birth event +2 DATE EST 24 MAY 1961 +2 PLAC San Jose, Santa Clara Co., CA +3 FORM city, county, state +2 FAMC @F02@ +1 OCCU +2 PLAC Software Engineer +1 EDUC +2 DATE BET. 1979 - 1984 +2 PLAC UC Berkeley +1 RESI +2 DATE CAL 1 JAN 1985 +2 ADDR Address Line 0 +3 ADR1 Adr1 line +3 ADR2 Adr2 line +3 CITY City line +3 STAE State line +3 POST Post line +2 NOTE This is the residence note +2 PHON 123-456-7890 1 SSN 123-456-7890 1 CAST cast keyword 1 DSCR dscr keyword 1 IDNO idno keyword 1 NATI nati keyword 1 NCHI nchi keyword -1 RESI -2 DATE 1 JAN 1985 -2 ADDR Adr1 line ,Adr2 line -3 CITY City line -3 STAE State line -3 POST Post line -2 PHON 123-456-7890 -2 NOTE This is the residence note -1 FAMC @F0000@ +1 _DEG +2 DATE 1984 +2 PLAC B.S.E.E. +1 OBJE +2 FORM jpg +2 FILE C:\Images\MyImages\test.jpg +2 TITL Random title 1 FAMS @F01@ -1 NOTE This is a test. So is this. -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:24:13 -0 @F0000@ FAM -1 REFN 0 -1 HUSB @I18@ -1 WIFE @I02@ -1 MARR -2 DATE 4 JUN 1954 -2 PLAC Sparks, Washoe Co., NV -2 SOUR @S0000@ -1 CHIL @IC3a2b1@ -1 CHIL @I29@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 +1 FAMC @F02@ +0 @I02@ INDI +1 NAME Alice Paula /Perkins/ +2 SOUR @S1600@ +3 PAGE 1933 BIRTH: NV, Washoe Co., Sparks, Birth Certificate, Nevada State Department of Health, Vital Records, Sparks, NV, certificate #599632 +3 DATA +4 TEXT Alice Paula Perkins born 22 Nov 1933, Sparks, Washoe Co, Nevada daughter of Paul Perkins and Stella Mason. +2 SOUR @S1601@ +1 SEX F +1 OBJE +2 FORM jpeg +2 FILE foo/O0.jpg +1 BIRT +2 DATE 22 NOV 1933 +2 PLAC Sparks, Washoe Co., NV +1 REFN 3 +1 FAMS @F02@ +0 @I03@ INDI +1 NAME Martin /Smith/ +1 SEX M +1 BIRT +2 DATE BET. 1794 - 1796 +2 PLAC Tommarp, Kristianstad Lan, Sweden +1 DEAT +2 DATE deceased +2 PLAC Sweden +2 AGNC Some type of agency +2 AGE 94y +2 CAUS Killer tomatoes +1 ADOP +2 FAMC @F04@ +3 ADOP @I38@ +1 REFN 366 +1 FAMS @F03@ +1 FAMC @F04@ +0 @I04@ INDI +1 NAME Elna /Jefferson/ +1 SEX F +1 BIRT +2 DATE 14 SEP 1800 +2 PLAC Gladsax, Kristianstad Lan, Sweden +1 DEAT +2 PLAC Sweden +1 CHR +2 DATE 16 SEP 1800 +2 PLAC Gladsax, Kristianstad Lan, Sweden +1 REFN 367 +1 FAMS @F03@ +0 @I05@ INDI +1 NAME Martin /Smith/ +1 SEX M +1 BIRT +2 DATE 19 NOV 1830 +2 PLAC Gladsax, Kristianstad Lan, Sweden +1 DEAT +2 DATE BET. 1899 - 1905 +2 PLAC Sweden +1 BAPM +2 DATE 23 NOV 1830 +2 PLAC Gladsax, Kristianstad Lan, Sweden +1 REFN 371 +1 FAMS @F05@ +1 FAMC @F03@ +1 NOTE @NI05@ +0 @NI05@ NOTE +1 CONC +1 CONT BIOGRAPHY +1 CONT Martin was listed as being a Husman, (owning a house as opposed to a +1 CONT farm) in the house records of Gladsax. +0 @I06@ INDI +1 NAME Kerstina /Hansdotter/ +1 SEX F +1 BIRT +2 DATE 29 NOV 1832 +2 PLAC Smestorp, Kristianstad Lan, Sweden +1 DEAT +2 DATE BEF. 1908 +2 PLAC Sweden +1 REFN 374 +1 FAMS @F05@ +0 @I07@ INDI +1 NAME Gustaf /Smith/, Sr. +1 SEX M +1 BIRT +2 DATE 28 NOV 1862 +2 PLAC Grostorp, Kristianstad Lan, Sweden +1 DEAT +2 DATE BEF. 23 JUL 1930 +2 PLAC Sparks, Washoe Co., NV +1 IMMI +2 DATE 21 MAY 1908 +2 PLAC Copenhagen, Denmark +1 CHR +2 DATE 7 DEC 1862 +2 PLAC Gladsax, Kristianstad Lan, Sweden +1 REFN 377 +1 FAMS @F06@ +1 FAMC @F05@ +0 @I08@ INDI +1 NAME Anna /Hansdotter/ +1 SEX F +1 BIRT +2 DATE 2 OCT 1864 +2 PLAC Loderup, Malmous Lan, Sweden +1 DEAT +2 DATE 29 SEP 1945 +2 PLAC Sparks, Washoe Co., NV +1 FAMS @F06@ +0 @I09@ INDI +1 NAME Kirsti Marie /Smith/ +1 SEX F +1 BIRT +2 DATE 15 DEC 1886 +2 PLAC Ronne, Bornholm, Denmark +1 DEAT +2 DATE 18 JUL 1966 +2 PLAC San Francisco, San Francisco Co., CA +1 FAMS @F07@ +1 FAMC @F06@ +0 @I10@ INDI +1 NAME Astrid Shermanna Augusta /Smith/ +1 SEX F +1 BIRT +2 DATE 31 JAN 1889 +2 PLAC Ronne, Bornholm, Denmark +1 DEAT +2 DATE 21 DEC 1963 +2 PLAC San Francisco, San Francisco Co., CA +1 FAMS @F08@ +1 FAMC @F06@ +0 @I11@ INDI +1 NAME Hjalmar /Smith/ +1 SEX M +1 BIRT +2 DATE 31 JAN 1893 +2 PLAC Ronne, Bornholm, Denmark +1 DEAT +2 DATE 25 SEP 1894 +2 PLAC Ronne, Bornholm, Denmark +1 FAMC @F06@ +0 @I12@ INDI +1 NAME Hjalmar /Smith/ +2 SOUR @S1600@ +1 SEX M +1 BIRT +2 DATE 7 APR 1895 +2 PLAC Ronne, Bornholm, Denmark +1 DEAT +2 DATE 26 JUN 1975 +2 PLAC Reno, Washoe Co., NV +1 BAPM +2 DATE 3 JUN 1895 +2 PLAC Ronne Bornholm, Denmark +1 IMMI +2 DATE 14 NOV 1912 +2 PLAC Copenhagen, Denmark +1 REFN 364 +1 FAMS @F09@ +1 FAMC @F06@ +1 NOTE @NI12@ +0 @NI12@ NOTE +1 CONC +1 CONT BIOGRAPHY +1 CONT Hjalmar sailed from Copenhagen, Denmark on the OSCAR II, 14 November +1 CONT 1912 arriving in New York 27 November 1912. He was seventeen years +1 CONT old. On the ship passenger list his trade was listed as a Blacksmith. +1 CONT He came to Reno, Nevada and lived with his sister Marie for a time +1 CONT before settling in Sparks. He worked for Southern Pacific Railroad as +1 CONT a car inspector for a time, then went to work for Standard Oil +1 CONT Company. He enlisted in the army at Sparks 7 December 1917 and served +1 CONT as a Corporal in the Medical Corp until his discharge 12 August 1919 +1 CONT at the Presidio in San Francisco, California. Both he and Marjorie are +1 CONT buried in the Masonic Memorial Gardens Mausoleum in Reno, he the 30th +1 CONT June 1975, and she the 25th of June 1980. +0 @I13@ INDI +1 NAME Gus /Smith/ +1 SEX M +1 BIRT +2 DATE 11 SEP 1897 +2 PLAC Ronne, Bornholm, Denmark +1 DEAT +2 DATE 21 OCT 1963 +2 PLAC San Francisco, San Francisco Co., CA +1 FAMS @F10@ +1 FAMC @F06@ +0 @I14@ INDI +1 NAME Carl Emil /Smith/ +1 SEX M +1 BIRT +2 DATE 20 DEC 1899 +2 PLAC Ronne, Bornholm, Denmark +1 DEAT +2 DATE 28 JAN 1959 +2 PLAC Reno, Washoe Co., NV +1 FAMC @F06@ +0 @I15@ INDI +1 NAME Hans Peter /Smith/ +1 SEX M +1 BIRT +2 DATE 17 APR 1904 +2 PLAC Ronne, Bornholm, Denmark +1 DEAT +2 DATE 29 JAN 1977 +2 PLAC San Francisco, San Francisco Co., CA +1 FAMS @F11@ +1 FAMS @F15@ +1 FAMC @F06@ +0 @I16@ INDI +1 NAME Edwin /Willard/ +1 SEX M +1 BIRT +2 DATE ABT. 1886 +1 FAMS @F07@ +0 @I17@ INDI +1 NAME Herman Julius /Nielsen/ +1 SEX M +1 BIRT +2 DATE 31 AUG 1889 +2 PLAC Ronne, Bornholm, Denmark +1 DEAT +2 DATE 1945 +1 FAMS @F08@ +0 @I18@ INDI +1 NAME John Hjalmar /Smith/ +2 SOUR @S1601@ +1 SEX M +1 BIRT +2 DATE 30 JAN 1932 +2 PLAC San Francisco, San Francisco Co, CA +1 FAMS @F02@ +1 FAMC @F09@ +0 @I19@ INDI +1 NAME Marjorie Lee /Smith/ +2 SOUR @S1600@ +1 SEX F +1 BIRT +2 DATE 4 NOV 1934 +2 PLAC Reno, Washoe Co. NV +1 FAMC @F09@ +0 @I20@ INDI +1 NAME Evelyn /Michaels/ +1 SEX F +1 BIRT +2 DATE ABT. 1897 +1 FAMS @F10@ +0 @I21@ INDI +1 NAME Jennifer /Anderson/ +1 SEX F +1 BIRT +2 DATE 5 NOV 1907 +2 PLAC Ronne, Bornholm, Denmark +1 DEAT +2 DATE 29 MAY 1985 +2 PLAC San Francisco, San Francisco Co., , CA +1 FAMS @F15@ +0 @I22@ INDI +1 NAME Lillie Harriet /Jones/ +1 SEX F +1 BIRT +2 DATE 2 MAY 1910 +2 PLAC Ronne, Bornholm, Denmark +1 DEAT +2 DATE 26 JUN 1990 +1 FAMS @F11@ +0 @I23@ INDI +1 NAME Magnes /Smith/ +1 SEX M +1 BIRT +2 DATE 6 OCT 1858 +2 PLAC Simrishamn, Kristianstad Lan, Sweden +1 DEAT +2 DATE 20 FEB 1910 +2 PLAC Ronne, Bornholm, Denmark +1 FAMS @F12@ +1 FAMC @F05@ +0 @I24@ INDI +1 NAME Emil /Smith/ +1 SEX M +1 BIRT +2 DATE 27 SEP 1860 +2 PLAC Simrishamn, Kristianstad Lan, Sweden +1 FAMC @F05@ +0 @I25@ INDI +1 NAME Anna /Streiffert/ +1 SEX F +1 BIRT +2 DATE 23 SEP 1860 +2 PLAC Hoya/Jona/Hoia, Sweden +1 DEAT +2 DATE 2 FEB 1927 +2 PLAC Ronne, Bornholm, Denmark +1 FAMS @F12@ +0 @I26@ INDI +1 NAME Hanna /Smith/ +1 SEX F +1 BIRT +2 DATE 29 JAN 1821 +2 PLAC Gladsax, Kristianstad Lan, Sweden +1 FAMC @F03@ +0 @I27@ INDI +1 NAME Ingar /Smith/ +1 SEX F +1 BIRT +2 DATE AFT. 1823 +2 PLAC Gladsax, Kristianstad Lan, Sweden +1 FAMC @F03@ +0 @I28@ INDI +1 NAME Ingeman /Smith/ +1 SEX M +1 BIRT +2 DATE 29 JAN 1826 +2 PLAC Gladsax, Kristianstad Lan, Sweden +1 FAMC @F03@ +0 @I29@ INDI +1 NAME Marjorie Alice /Smith/ +2 SOUR @S1600@ +1 SEX F +1 BIRT +2 DATE 5 FEB 1960 +2 PLAC San Jose, Santa Clara Co., CA +1 FAMC @F02@ +0 @I30@ INDI +1 NAME Lloyd /Smith/ +1 SEX M +1 BIRT +2 DATE 13 MAR 1935 +2 PLAC San Francisco, San Francisco Co., CA +1 FAMS @F13@ +1 FAMC @F11@ +0 @I31@ INDI +1 NAME Janis Elaine /Green/ +1 SEX F +1 BIRT +2 DATE 2 DEC 1935 +1 FAMS @F13@ +0 @I32@ INDI +1 NAME Eric Lloyd /Smith/ +1 SEX M +1 BIRT +2 DATE 28 AUG 1963 +2 PLAC San Francisco, San Francisco Co., CA +1 FAMS @F14@ +1 FAMC @F13@ +0 @I33@ INDI +1 NAME Keith Lloyd /Smith/ +1 SEX M +1 BIRT +2 DATE 11 AUG 1966 +2 PLAC San Francisco, San Francisco Co., CA +1 FAMC @F13@ +0 @I34@ INDI +1 NAME Craig Peter /Smith/ +1 SEX M +1 BIRT +2 DATE AFT. 1966 +2 PLAC San Francisco, San Francisco Co., CA +1 FAMC @F13@ +0 @I35@ INDI +1 NAME Lars Peter /Smith/ +1 SEX M +1 BIRT +2 DATE 16 SEP 1991 +2 PLAC Santa Rosa, Sonoma Co., CA +1 FAMC @F14@ +0 @I36@ INDI +1 NAME Darcy /Horne/ +1 SEX F +1 BIRT +2 DATE 2 JUL 1966 +2 PLAC Sacramento, Sacramento Co., CA +1 FAMS @F14@ +0 @I37@ INDI +1 NAME Ingeman /Smith/ +1 SEX M +1 BIRT +2 DATE ABT. 1770 +2 PLAC Sweden +1 FAMS @F04@ +0 @I38@ INDI +1 NAME Marta /Ericsdotter/ +1 SEX F +1 BIRT +2 DATE ABT. 1775 +2 PLAC Sweden +1 FAMS @F04@ +0 @I39@ INDI +1 NAME Marjorie /Ohman/ +2 SOUR @S1602@ +2 SOUR @S1600@ +1 SEX F +1 BIRT +2 DATE 3 JUN 1903 +2 PLAC Denver, Denver Co., CO +1 DEAT +2 DATE 22 JUN 1980 +2 PLAC Reno, Washoe Co., NV +1 REFN 365 +1 FAMS @F09@ +0 @I40@ INDI +1 NAME Janice Ann /Adams/ +1 SEX F +1 BIRT +2 DATE 26 AUG 1965 +2 PLAC Fremont, Alameda Co., CA +1 OCCU +2 PLAC Retail Manager +1 _DEG +2 DATE 1988 +2 PLAC Business Management +1 FAMS @F01@ +0 @I41@ INDI +1 NAME Amber Marie /Smith/ +1 SEX F +1 BIRT +2 DATE 12 APR 1998 +2 PLAC Hayward, Alameda Co., CA +1 CHR +2 DATE 26 APR 1998 +2 PLAC Community Presbyterian Church, Danville, CA +1 FAMC @F01@ +0 @I42@ INDI +1 NAME Mason Michael /Smith/ +1 SEX M +1 BIRT +2 DATE 26 JUN 1996 +2 PLAC Hayward, Alameda Co., CA +1 CHR +2 DATE 10 JUL 1996 +2 PLAC Community Presbyterian Church, Danville, CA +1 FAMC @F01@ +0 @I43@ INDI +1 NAME Really Old /Guy/ +1 SEX M +1 BIRT +2 DATE 26 JUN 34 B.C. +2 PLAC Hayward, Alameda Co., CA 0 @F01@ FAM -1 REFN 1 1 HUSB @IC3a2b1@ 1 WIFE @I40@ +1 CHIL @I42@ +2 _FREL Adopted +2 _MREL Adopted +1 CHIL @I41@ +2 _FREL Natural +2 _MREL Natural 1 MARR 2 DATE 27 MAY 1995 -2 PLAC San Ramon, Conta Costa Co., CA +2 PLAC San Ramon, Conta Costa Co., CA 1 ENGA 2 DATE 5 OCT 1994 -2 PLAC San Francisco, CA -1 CHIL @I42@ -1 CHIL @I41@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 PLAC San Francisco, CA +0 @F02@ FAM +1 HUSB @I18@ +1 WIFE @I02@ +1 CHIL @I29@ +2 _FREL Adopted +2 _MREL Adopted +1 MARR +2 DATE 4 JUN 1954 +2 PLAC Sparks, Washoe Co., NV +2 SOUR Hannah was the widow of James Matthewson. +1 OBJE +2 FORM jpg +2 FILE test.jpg +2 TITL Random title 0 @F03@ FAM -1 REFN 3 1 HUSB @I03@ 1 WIFE @I04@ -1 MARR -2 DATE ABT 1816 -2 PLAC Gladsax, Kristianstad Lan, Sweden 1 CHIL @I26@ +2 _FREL Natural +2 _MREL Natural 1 CHIL @I27@ +2 _FREL Natural +2 _MREL Natural 1 CHIL @I28@ +2 _FREL Natural +2 _MREL Natural 1 CHIL @I05@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 _FREL Natural +2 _MREL Natural +1 MARR +2 DATE ABT. 1816 +2 PLAC Gladsax, Kristianstad Lan, Sweden 0 @F04@ FAM -1 REFN 4 1 HUSB @I37@ 1 WIFE @I38@ -1 MARR -2 DATE ABT 1790 -2 PLAC Sweden 1 CHIL @I03@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 +2 _FREL Natural +2 _MREL Natural +1 MARR +2 DATE ABT. 1790 +2 PLAC Sweden 0 @F05@ FAM -1 REFN 5 1 HUSB @I05@ 1 WIFE @I06@ -1 MARR -2 DATE ABT 1856 1 CHIL @I23@ +2 _FREL Natural +2 _MREL Natural 1 CHIL @I24@ +2 _FREL Natural +2 _MREL Natural 1 CHIL @I07@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 _FREL Natural +2 _MREL Natural +1 MARR +2 DATE ABT. 1856 0 @F06@ FAM -1 REFN 6 1 HUSB @I07@ 1 WIFE @I08@ +1 CHIL @I09@ +2 _FREL Natural +2 _MREL Natural +1 CHIL @I10@ +2 _FREL Natural +2 _MREL Natural +1 CHIL @I11@ +2 _FREL Natural +2 _MREL Natural +1 CHIL @I12@ +2 _FREL Natural +2 _MREL Natural +1 CHIL @I13@ +2 _FREL Natural +2 _MREL Natural +1 CHIL @I14@ +2 _FREL Natural +2 _MREL Natural +1 CHIL @I15@ +2 _FREL Natural +2 _MREL Natural 1 MARR 2 DATE 27 NOV 1885 -2 PLAC Ronne, Bornholm, Denmark -1 CHIL @I09@ -1 CHIL @I10@ -1 CHIL @I11@ -1 CHIL @I12@ -1 CHIL @I13@ -1 CHIL @I14@ -1 CHIL @I15@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 PLAC Ronne, Bornholm, Denmark 0 @F07@ FAM -1 REFN 7 1 HUSB @I16@ 1 WIFE @I09@ 1 MARR -2 DATE ABT 1910 -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 DATE ABT. 1910 0 @F08@ FAM -1 REFN 8 1 HUSB @I17@ 1 WIFE @I10@ 1 MARR 2 DATE 30 NOV 1912 -2 PLAC Ronne, Bornholm, Denmark -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 PLAC Ronne, Bornholm, Denmark 0 @F09@ FAM -1 REFN 9 1 HUSB @I12@ 1 WIFE @I39@ +1 CHIL @I18@ +2 _FREL Natural +2 _MREL Natural +1 CHIL @I19@ +2 _FREL Natural +2 _MREL Natural 1 MARR 2 DATE 31 OCT 1927 -2 PLAC Reno, Washoe Co., NV -1 CHIL @I18@ -1 CHIL @I19@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 PLAC Reno, Washoe Co., NV 0 @F10@ FAM -1 REFN 10 1 HUSB @I13@ 1 WIFE @I20@ 1 MARR -2 DATE ABT 1920 -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 DATE ABT. 1920 0 @F11@ FAM -1 REFN 11 1 HUSB @I15@ 1 WIFE @I22@ 1 CHIL @I30@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 _FREL Adopted +2 _MREL Adopted 0 @F12@ FAM -1 REFN 12 1 HUSB @I23@ 1 WIFE @I25@ 1 MARR 2 DATE 24 AUG 1884 -2 PLAC Ronne, Bornholm, Denmark -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 PLAC Ronne, Bornholm, Denmark 0 @F13@ FAM -1 REFN 13 1 HUSB @I30@ 1 WIFE @I31@ +1 CHIL @I32@ +2 _FREL Natural +2 _MREL Natural +1 CHIL @I33@ +2 _FREL Natural +2 _MREL Natural +1 CHIL @I34@ +2 _FREL Natural +2 _MREL Natural 1 MARR 2 DATE 10 AUG 1958 -2 PLAC San Francisco, San Francisco Co., CA -1 CHIL @I32@ -1 CHIL @I33@ -1 CHIL @I34@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 PLAC San Francisco, San Francisco Co., CA 0 @F14@ FAM -1 REFN 14 1 HUSB @I32@ 1 WIFE @I36@ -1 MARR -2 DATE 12 JUL 1986 -2 PLAC Woodland, Yolo Co., CA -2 HUSB -3 AGE 30y -2 WIFE -3 AGE 330y 1 CHIL @I35@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +2 _FREL Natural +2 _MREL Natural +1 MARR +2 HUSB +3 AGE 30y +2 WIFE +3 AGE 330y +2 DATE 12 JUL 1986 +2 PLAC Woodland, Yolo Co., CA 0 @F15@ FAM -1 REFN 15 1 HUSB @I15@ 1 WIFE @I21@ -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @S0000@ SOUR -1 TITL Hannah was the widow of James Matthewson. -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 -0 @S1600@@ SOUR -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @S1601@@ SOUR -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:24 -0 @S1602@@ SOUR -1 CHAN -2 DATE 11 FEB 2007 -3 TIME 11:23:25 +0 @S1600@ SOUR +1 TITL Birth Certificate +1 REPO @R00@ +2 CALN +3 MEDI Book +0 @S1601@ SOUR +1 TITL Birth Record +2 CONC s +1 REPO @R00@ +2 CALN +3 MEDI Book +0 @S1602@ SOUR +1 TITL Birth, Death and Marriage Records +1 REPO @R00@ +2 CALN +3 MEDI Book +0 @R00@ REPO +1 NAME Repository Name +1 ADDR Repository Address 0 TRLR diff --git a/help/nl/figures/bookreport.png b/help/nl/figures/bookreport.png index 480fd744c..c7f00f56a 100644 Binary files a/help/nl/figures/bookreport.png and b/help/nl/figures/bookreport.png differ diff --git a/help/nl/figures/cfe-ar.png b/help/nl/figures/cfe-ar.png index f969e1401..0fb4ff211 100644 Binary files a/help/nl/figures/cfe-ar.png and b/help/nl/figures/cfe-ar.png differ diff --git a/help/nl/figures/cfe-df.png b/help/nl/figures/cfe-df.png index 362df4a58..4dfa8acb6 100644 Binary files a/help/nl/figures/cfe-df.png and b/help/nl/figures/cfe-df.png differ diff --git a/help/nl/figures/child-ref.png b/help/nl/figures/child-ref.png index 7001e1634..18566a132 100644 Binary files a/help/nl/figures/child-ref.png and b/help/nl/figures/child-ref.png differ diff --git a/help/nl/figures/column-editor.png b/help/nl/figures/column-editor.png index 75d821399..83f7ca90e 100644 Binary files a/help/nl/figures/column-editor.png and b/help/nl/figures/column-editor.png differ diff --git a/help/nl/figures/comp-people.png b/help/nl/figures/comp-people.png index 1a809ed54..0ab35fbe2 100644 Binary files a/help/nl/figures/comp-people.png and b/help/nl/figures/comp-people.png differ diff --git a/help/nl/figures/date-selection.png b/help/nl/figures/date-selection.png index 9ea0dff31..43712cb5e 100644 Binary files a/help/nl/figures/date-selection.png and b/help/nl/figures/date-selection.png differ diff --git a/help/nl/figures/edit-ad.png b/help/nl/figures/edit-ad.png index 90bc50a28..7db22ae1c 100644 Binary files a/help/nl/figures/edit-ad.png and b/help/nl/figures/edit-ad.png differ diff --git a/help/nl/figures/edit-an.png b/help/nl/figures/edit-an.png index 2c4064c1c..e48df5cac 100644 Binary files a/help/nl/figures/edit-an.png and b/help/nl/figures/edit-an.png differ diff --git a/help/nl/figures/edit-at.png b/help/nl/figures/edit-at.png index 28449d8bb..b0783bde0 100644 Binary files a/help/nl/figures/edit-at.png and b/help/nl/figures/edit-at.png differ diff --git a/help/nl/figures/edit-bm.png b/help/nl/figures/edit-bm.png index 656f9c131..af8f12822 100644 Binary files a/help/nl/figures/edit-bm.png and b/help/nl/figures/edit-bm.png differ diff --git a/help/nl/figures/edit-family.png b/help/nl/figures/edit-family.png index 28987f6c5..0d21345c1 100644 Binary files a/help/nl/figures/edit-family.png and b/help/nl/figures/edit-family.png differ diff --git a/help/nl/figures/edit-media.png b/help/nl/figures/edit-media.png index 2a31314cc..0906586e2 100644 Binary files a/help/nl/figures/edit-media.png and b/help/nl/figures/edit-media.png differ diff --git a/help/nl/figures/edit-person-assoc.png b/help/nl/figures/edit-person-assoc.png index 4d461b114..cddb8a327 100644 Binary files a/help/nl/figures/edit-person-assoc.png and b/help/nl/figures/edit-person-assoc.png differ diff --git a/help/nl/figures/edit-person-attributes.png b/help/nl/figures/edit-person-attributes.png index 00a7b7585..c5b9efddb 100644 Binary files a/help/nl/figures/edit-person-attributes.png and b/help/nl/figures/edit-person-attributes.png differ diff --git a/help/nl/figures/edit-person-gallery.png b/help/nl/figures/edit-person-gallery.png index aad5445c1..3ce35561a 100644 Binary files a/help/nl/figures/edit-person-gallery.png and b/help/nl/figures/edit-person-gallery.png differ diff --git a/help/nl/figures/edit-person-internet.png b/help/nl/figures/edit-person-internet.png index fbdd82bb8..d9231c272 100644 Binary files a/help/nl/figures/edit-person-internet.png and b/help/nl/figures/edit-person-internet.png differ diff --git a/help/nl/figures/edit-person-lds.png b/help/nl/figures/edit-person-lds.png index 6830d7fd4..74176b391 100644 Binary files a/help/nl/figures/edit-person-lds.png and b/help/nl/figures/edit-person-lds.png differ diff --git a/help/nl/figures/edit-person-notes.png b/help/nl/figures/edit-person-notes.png index aa6613943..a863a7409 100644 Binary files a/help/nl/figures/edit-person-notes.png and b/help/nl/figures/edit-person-notes.png differ diff --git a/help/nl/figures/edit-person-sources.png b/help/nl/figures/edit-person-sources.png index df50b4686..4208b76ad 100644 Binary files a/help/nl/figures/edit-person-sources.png and b/help/nl/figures/edit-person-sources.png differ diff --git a/help/nl/figures/edit-person.png b/help/nl/figures/edit-person.png index 9d5c9cd3b..c859f5051 100644 Binary files a/help/nl/figures/edit-person.png and b/help/nl/figures/edit-person.png differ diff --git a/help/nl/figures/edit-plc.png b/help/nl/figures/edit-plc.png index 82a43af3e..484575733 100644 Binary files a/help/nl/figures/edit-plc.png and b/help/nl/figures/edit-plc.png differ diff --git a/help/nl/figures/edit-rel.png b/help/nl/figures/edit-rel.png index 17397972a..04c9e38a7 100644 Binary files a/help/nl/figures/edit-rel.png and b/help/nl/figures/edit-rel.png differ diff --git a/help/nl/figures/edit-si.png b/help/nl/figures/edit-si.png index 322f214c6..9320e807f 100644 Binary files a/help/nl/figures/edit-si.png and b/help/nl/figures/edit-si.png differ diff --git a/help/nl/figures/edit-src.png b/help/nl/figures/edit-src.png index d72a186d2..f1d3c7de0 100644 Binary files a/help/nl/figures/edit-src.png and b/help/nl/figures/edit-src.png differ diff --git a/help/nl/figures/events.png b/help/nl/figures/events.png index 55488d3d8..4beb04956 100644 Binary files a/help/nl/figures/events.png and b/help/nl/figures/events.png differ diff --git a/help/nl/figures/export-druid.png b/help/nl/figures/export-druid.png index 5ad1cb68d..f09fc2bb9 100644 Binary files a/help/nl/figures/export-druid.png and b/help/nl/figures/export-druid.png differ diff --git a/help/nl/figures/family-list.png b/help/nl/figures/family-list.png index 14f3275aa..a648dffe3 100644 Binary files a/help/nl/figures/family-list.png and b/help/nl/figures/family-list.png differ diff --git a/help/nl/figures/family-warn.png b/help/nl/figures/family-warn.png index 14f109473..a7a5bfdf9 100644 Binary files a/help/nl/figures/family-warn.png and b/help/nl/figures/family-warn.png differ diff --git a/help/nl/figures/family.png b/help/nl/figures/family.png index 9673a63b6..fac9891dc 100644 Binary files a/help/nl/figures/family.png and b/help/nl/figures/family.png differ diff --git a/help/nl/figures/find-people.png b/help/nl/figures/find-people.png index c9f277765..ea42a75c9 100644 Binary files a/help/nl/figures/find-people.png and b/help/nl/figures/find-people.png differ diff --git a/help/nl/figures/first-open.png b/help/nl/figures/first-open.png index 32489f442..885b72301 100644 Binary files a/help/nl/figures/first-open.png and b/help/nl/figures/first-open.png differ diff --git a/help/nl/figures/gedcom-export.png b/help/nl/figures/gedcom-export.png index f65ca8b79..a0cd30ca9 100644 Binary files a/help/nl/figures/gedcom-export.png and b/help/nl/figures/gedcom-export.png differ diff --git a/help/nl/figures/mainwin.png b/help/nl/figures/mainwin.png index 5378cb274..48ffc7010 100644 Binary files a/help/nl/figures/mainwin.png and b/help/nl/figures/mainwin.png differ diff --git a/help/nl/figures/media.png b/help/nl/figures/media.png index 99e0f61b7..c99ca8959 100644 Binary files a/help/nl/figures/media.png and b/help/nl/figures/media.png differ diff --git a/help/nl/figures/merge-people.png b/help/nl/figures/merge-people.png index 13a5a6353..73de6de61 100644 Binary files a/help/nl/figures/merge-people.png and b/help/nl/figures/merge-people.png differ diff --git a/help/nl/figures/merge-plc.png b/help/nl/figures/merge-plc.png index e99649ba3..86c471458 100644 Binary files a/help/nl/figures/merge-plc.png and b/help/nl/figures/merge-plc.png differ diff --git a/help/nl/figures/merge-src.png b/help/nl/figures/merge-src.png index ba7b49600..3bc5a9482 100644 Binary files a/help/nl/figures/merge-src.png and b/help/nl/figures/merge-src.png differ diff --git a/help/nl/figures/noside-nofilt.png b/help/nl/figures/noside-nofilt.png index 813aa8302..f68566d22 100644 Binary files a/help/nl/figures/noside-nofilt.png and b/help/nl/figures/noside-nofilt.png differ diff --git a/help/nl/figures/places.png b/help/nl/figures/places.png index ede6a7589..72c45431c 100644 Binary files a/help/nl/figures/places.png and b/help/nl/figures/places.png differ diff --git a/help/nl/figures/prefs.png b/help/nl/figures/prefs.png index 09b14c981..8bc30b4e7 100644 Binary files a/help/nl/figures/prefs.png and b/help/nl/figures/prefs.png differ diff --git a/help/nl/figures/repository.png b/help/nl/figures/repository.png index d50d7ec54..d88b299ba 100644 Binary files a/help/nl/figures/repository.png and b/help/nl/figures/repository.png differ diff --git a/help/nl/figures/scratch-pad.png b/help/nl/figures/scratch-pad.png index 1b3c58bc7..1880d6445 100644 Binary files a/help/nl/figures/scratch-pad.png and b/help/nl/figures/scratch-pad.png differ diff --git a/help/nl/figures/select-family.png b/help/nl/figures/select-family.png index 791537d57..646e83dab 100644 Binary files a/help/nl/figures/select-family.png and b/help/nl/figures/select-family.png differ diff --git a/help/nl/figures/select-person.png b/help/nl/figures/select-person.png index 900ec2b03..cffb7b54b 100644 Binary files a/help/nl/figures/select-person.png and b/help/nl/figures/select-person.png differ diff --git a/help/nl/figures/side-filt.png b/help/nl/figures/side-filt.png index e6739bd87..2bc378a01 100644 Binary files a/help/nl/figures/side-filt.png and b/help/nl/figures/side-filt.png differ diff --git a/help/nl/figures/sources.png b/help/nl/figures/sources.png index e28cad739..59573c8cb 100644 Binary files a/help/nl/figures/sources.png and b/help/nl/figures/sources.png differ diff --git a/help/nl/nl.po b/help/nl/nl.po index 645d245b9..f57312e3f 100644 --- a/help/nl/nl.po +++ b/help/nl/nl.po @@ -1,15 +1,15 @@ -# translation of nl.po to Dutch +# translation of gramps help to Dutch msgid "" msgstr "" "Project-Id-Version: nl\n" "POT-Creation-Date: 2006-10-28 22:45-0600\n" -"PO-Revision-Date: 2006-11-24 20:36+0100\n" +"PO-Revision-Date: 2007-02-09 21:28+0100\n" "Last-Translator: Frederik De Richter \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.10.2\n" +"X-Generator: KBabel 1.11.2\n" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. @@ -616,7 +616,7 @@ msgstr "Kies een gegevensbestand" #: C/gramps.xml:439(para) msgid "If GRAMPS is started without a database selected, the initial screen will have little functionality. Most operations will not be available. To load a database, select either New to create a new database, or Open to open an existing database. GRAMPS keeps track of your recently opened databases, and these can be selected by clicking on the arrow next to the Open button and choosing from the drop down menu." -msgstr "Wanneer GRAMPS opstart zonder daat een gegevensbestand gekozen wordt, zal het opstartscherm weinig functionaliteit bieden.De meeste bewerkingen zijn niet beschikbaar. Om een gegevensbestand te laden, kiest u Nieuw om een nieuw gegevensbestand aan te maken, of Openen om een bestaand gegevensbestand te openen. GRAMPS houdt bij welke gegevensbestanden laatst geopend werden. Deze kunnen geselecteerd worden door op de pijl naast de Openen knop te klikken en dan een bestand te kiezen van het menu." +msgstr "Wanneer GRAMPS opstart zonder dat een gegevensbestand gekozen wordt, zal het opstartscherm weinig functionaliteit bieden.De meeste bewerkingen zijn niet beschikbaar. Om een gegevensbestand te laden, kiest u Nieuw om een nieuw gegevensbestand aan te maken, of Openen om een bestaand gegevensbestand te openen. GRAMPS houdt bij welke gegevensbestanden laatst geopend werden. Deze kunnen geselecteerd worden door op de pijl naast de Openen knop te klikken en dan een bestand te kiezen van het menu." #: C/gramps.xml:449(title) msgid "Initial Window" @@ -640,7 +640,7 @@ msgstr "Gebruikershandleiding" #: C/gramps.xml:478(para) msgid "An electronic version of the manual that you can access while you work in GRAMPS." -msgstr "Een electronische versie van de handleiding die u kunt raadplegen terwijl u in GRAMPS werkt." +msgstr "Een elektronische versie van de handleiding die u kunt raadplegen terwijl u in GRAMPS werkt." #: C/gramps.xml:484(term) msgid "FAQ" @@ -680,7 +680,7 @@ msgstr "GRAMPS mailing-lijsten" #: C/gramps.xml:520(para) msgid "Gives you direct access to GRAMPS' mailing list archives." -msgstr "Geeft u onmiddelijk toegang tot de archieeven van de GRAMPS mailing-lijsten" +msgstr "Geeft u onmiddelijk toegang tot de archieven van de GRAMPS mailing-lijsten" #: C/gramps.xml:526(term) msgid "Report a bug" @@ -688,7 +688,7 @@ msgstr "Rapporteer een fout" #: C/gramps.xml:529(para) msgid "Choose this item to file a bug report in our bug tracking system. (Remember, GRAMPS is a living project. We want to know about any problems you encounter so we can work to solve them for everyone's benefit.)" -msgstr "Kies dit item om een foutrapport door te geven naar het foutopvolgingssysteem. (Denk eraann, GRAMPS is een levend project. We willen graag alle problemen die u tegenkomt, weten, zodat we oplossingen kunnen zoeken zodat GRAMPS steeds beter wordt." +msgstr "Kies dit item om een foutrapport door te geven naar het foutopvolgingssysteem. (Denk eraan, GRAMPS is een levend project. We willen graag alle problemen die u tegenkomt, weten, zodat we oplossingen kunnen zoeken zodat GRAMPS steeds beter wordt." #: C/gramps.xml:537(term) msgid "About" @@ -736,7 +736,7 @@ msgstr "Voortgangsbalk" #: C/gramps.xml:603(para) msgid "The Progress Bar is located in the lower left corner of the GRAMPS window. It displays the progress of time consuming operations, such as opening and saving large databases, importing and exporting to other formats, generating web sites, etc. When you are not doing these types of operations, the Progress Bar is blank." -msgstr "De voortgangsbalk bevindt zich links onderaan in het GRAMPS-venster. Het geeft het voortschrijden van langdurende operaties weer, zoals openen en opslaan van grote gevensbestanden, het importeren en exporteren van en naar andere formaten, het aanmaken van web sites, enz. De balk blijft leeg indien geen van deze langdurende operaties worden uitgevoerd." +msgstr "De voortgangsbalk bevindt zich links onderaan in het GRAMPS-venster. Het geeft het voortschrijden van langdurende operaties weer, zoals openen en opslaan van grote gegevensbestanden, het importeren en exporteren van en naar andere formaten, het aanmaken van web sites, enz. De balk blijft leeg indien geen van deze langdurende operaties worden uitgevoerd." #: C/gramps.xml:613(term) msgid "Status Bar" @@ -880,11 +880,11 @@ msgstr "Wanneer GRAMPS de eerste keer een gegevensbestand opent, zal het Persone #: C/gramps.xml:776(para) msgid "You'll note that people are grouped according to their family names. To the left of each family name is an arrow. Clicking it once will reveal the entire list of people sharing that name. Clicking the arrow again will \"roll up\" the list and show only the family name." -msgstr "U ziet dat de personen gegroepeerd worden op basis van hun familienamen. Links van elke familie staat een pijltje. Door hier éénmaal op te klikken, wordt de volledige lijst van personen met die naam getoond. Door nomaals te klikken op de pijl, wordt de lijst \"opgerold\" en wordt enkel de familienaam getoond." +msgstr "U ziet dat de personen gegroepeerd worden op basis van hun familienamen. Links van elke familie staat een pijltje. Door hier éénmaal op te klikken, wordt de volledige lijst van personen met die naam getoond. Door nogmaals te klikken op de pijl, wordt de lijst \"opgerold\" en wordt enkel de familienaam getoond." #: C/gramps.xml:782(para) msgid "By default, the People View, displays the following columns: Names, GRAMPS ID numbers, Gender, and their Birth and Death dates. You can add or remove columns to and from the display by calling up the Column Editor dialog (EditColumn Editor) and checking or unchecking the boxes listed. You can also change the position of a column in People View by clicking and dragging it to a new position in the Editor. Once you have made the changes you want, click OK to exit the Editor and see your changes in the People View." -msgstr "Standaard worden volgende kolommen getoond in het personenescherm: Namen, GRAMPS ID nummers, Gesalcht, en de Geboorte en Overlijdensdatum. U kunt kolommen op het scherm toevoegen of verwijderen door gebruik te maken van de Kolommen Aanpaaen dialoog (BewerkenKolommen aanpassen) en de vereiste vakjes aan of af te vinken. U kunt ook de relatieve positie van een kolom veranderen in het personenscherm door de kolom aan te klikken en te verslepen. Na alle doorgevoerde veranderingen klikt u op de OK knop om uw aanpassingen te kunnen zien in het personenscherm. " +msgstr "Standaard worden volgende kolommen getoond in het personenescherm: Namen, GRAMPS ID nummers, Geslacht, en de Geboorte en Overlijdensdatum. U kunt kolommen op het scherm toevoegen of verwijderen door gebruik te maken van de Kolommen Aanpassen dialoog (BewerkenKolommen aanpassen) en de vereiste vakjes aan of af te vinken. U kunt ook de relatieve positie van een kolom veranderen in het personenscherm door de kolom aan te klikken en te verslepen. Na alle doorgevoerde veranderingen klikt u op de OK knop om uw aanpassingen te kunnen zien in het personenscherm. " #: C/gramps.xml:798(title) C/gramps.xml:6210(term) msgid "Column Editor" @@ -972,7 +972,7 @@ msgstr "" #: C/gramps.xml:937(para) msgid "If you are not careful, it is possible to create multiple families with the same parents. This is rarely what the user wants to do. If you attempt to add a new family that has the same parents as an existing family, GRAMPS will issue a warning dialog. If you get this dialog, you should probably Cancel the edit, and then use the Select button to select the existing family." -msgstr "Het is mogelijk om meerdere families aan te maken met de zelfde ouders indien u niet voorzichtig bent. Dit is niet de normale situatie die de gebruiker wenst. GRAMPS zal dan ook een waarschuwingsdialoog tonen indien u tracht een nieuwe familie aan te maken met dezelfde ouders als een reeds bestaande familie. Wanneer deze dialoog getoond wordt, is het waarschijnlijk beter aanpassingen te verwerpen en door gebruik te maken van de Selecten knop een bestaande familie te kiezen." +msgstr "Het is mogelijk om meerdere families aan te maken met de zelfde ouders indien u niet voorzichtig bent. Dit is niet de normale situatie die de gebruiker wenst. GRAMPS zal dan ook een waarschuwingsdialoog tonen indien u tracht een nieuwe familie aan te maken met dezelfde ouders als een reeds bestaande familie. Wanneer deze dialoog getoond wordt, is het waarschijnlijk beter aanpassingen te verwerpen en door gebruik te maken van de Selecteren knop een bestaande familie te kiezen." #: C/gramps.xml:950(term) C/gramps.xml:6112(guilabel) msgid "Family" @@ -1012,7 +1012,7 @@ msgstr "Familielijstscherm." #: C/gramps.xml:1024(para) msgid "Unlike the Relationships View, clicking the Remove button in this view will remove the family from the database. All people will remain, but all relationships between the people in the family will be removed." -msgstr "In tegenstelling tot het Scherm Relaties zal door aanklikken van de Verwijder knop, de familie wel degelijk verwijderd worden uit het gegevensbestand. Alle personen blijven behouden, maar alle relaties tussen personen in de familie worden verwijderd." +msgstr "In tegenstelling tot het Relatiescherm zal door aanklikken van de Verwijder knop, de familie wel degelijk verwijderd worden uit het gegevensbestand. Alle personen blijven behouden, maar alle relaties tussen personen in de familie worden verwijderd." #: C/gramps.xml:1034(para) msgid "The Pedigree View displays a family tree of the Active person's ancestors. The Pedigree View shows up to five generations, depending on the size of the window. Each person is indicated by a box labeled with his or her name, birth and death information, and optionally an image if available. Two lines branch from each box. The top one shows the person's father and the bottom one the mother. Solid lines represent birth relations, while dashed lines represent non-birth relations such as adoption, step-parenthood, guardianship, etc." @@ -1020,7 +1020,7 @@ msgstr "" #: C/gramps.xml:1054(phrase) msgid "Shows Pedigree View." -msgstr "" +msgstr "Toont stamboomscherm" #: C/gramps.xml:1060(para) msgid "To the left of the Active person is a left arrow button. If the Active person has children, clicking this button expands a list of the Active person's children. Selecting one of the children makes that child the active Person." @@ -1036,7 +1036,7 @@ msgstr "Menu kinderen" #: C/gramps.xml:1085(phrase) msgid "Shows Children Menu in Pedigree View." -msgstr "" +msgstr "Toont kinderen in het stamboomscherm." #: C/gramps.xml:1091(para) msgid "The right-hand side of the window shows two right arrow buttons. When the top button is clicked, the Father of the Active person becomes the Active person. Clicking the bottom button makes the Mother of the Active person the Active person." @@ -1176,7 +1176,7 @@ msgstr "Aanpassen GEDCOM" #: C/gramps.xml:1381(para) msgid "Please keep in mind that some information in a GEDCOM file may be lost during import into GRAMPS. Simply opening and viewing the file will not change it. However, if any changes were made and they were not abandoned upon exit, exiting GRAMPS will save the data, with possible data loss." -msgstr "Denk eraan dat sommige informatie in een GEDCOM-bestand verloren kan gaan bij het importeren in GRAMPS. Het bestand wordt niet veranderd wanneer u enkel het bestand opent en bekijkt. Wanneer u echter aanpassingen maakte en deze niet verworpen hebt bij het sluiten van het bestand, zal bij het afsluiten van GRAMPS, de gevens worden opgeslagen met mogelijk verlies van informatie tot gevolg." +msgstr "Denk eraan dat sommige informatie in een GEDCOM-bestand verloren kan gaan bij het importeren in GRAMPS. Het bestand wordt niet veranderd wanneer u enkel het bestand opent en bekijkt. Wanneer u echter aanpassingen maakte en deze niet verworpen hebt bij het sluiten van het bestand, zal bij het afsluiten van GRAMPS, de gegevens worden opgeslagen met mogelijk verlies van informatie tot gevolg." #: C/gramps.xml:1390(title) msgid "Saving Changes to Your Database" @@ -1192,7 +1192,7 @@ msgstr "" #: C/gramps.xml:1407(para) msgid "If you want to return your database to the way it was when you opened it, select FileAbandon changes and quit. (This is just like quitting without saving in other programs.)" -msgstr "Wanneer u terug wilt keren naar de oorspronkelijk teostand voor veranderingen van het gegevensbestand, gebruikt u BestandVeranderingen verwerpen en verlaten. (Dit is eigenljk zoals programma verlaten zonder op te slaan zoals in vele andere programma's.)" +msgstr "Wanneer u terug wilt keren naar de oorspronkelijk toestand voor veranderingen van het gegevensbestand, gebruikt u BestandVeranderingen verwerpen en verlaten. (Dit is eigenlijk zoals programma verlaten zonder op te slaan zoals in vele andere programma's.)" #: C/gramps.xml:1415(para) msgid "If you would like to save your database under a different name, you can do so by choosing FileSave as... and specifying the name (and, optionally, the format) of your new database. Note that \"Save as\" will allow you to continue editing the newly saved database. If this is not what you want to do, you may wish to use the \"Export\" command instead." @@ -1256,11 +1256,11 @@ msgstr "GRAMPS-gegevensbestand (grdb)" #: C/gramps.xml:1490(para) msgid "The native GRAMPS database format is a specific form of Berkeley database (BSDDB) with a special structure of data tables. This format is binary and architecture-dependent. It is very quick and efficient, but not generally portable across computers with different binary architecture (e.g. i386 vs alpha)." -msgstr "Het basisformaat van het GRAMPS-gegevensbestand is een specifieke vorm van een Berkeley Database (BSDDB met een speciale structuur van de gegevenstabellen. Dit formaat is binair en is architectuurafhankelijk. Het is zeer snel en efficiënt, maar niet algemeen verplaatsbaar naar andere computers met een andere binaire archtectuur (bijv. i386 t.o.v. alpha)." +msgstr "Het basisformaat van het GRAMPS-gegevensbestand is een specifieke vorm van een Berkeley Database (BSDDB met een speciale structuur van de gegevenstabellen. Dit formaat is binair en is architectuurafhankelijk. Het is zeer snel en efficiënt, maar niet algemeen verplaatsbaar naar andere computers met een andere binaire architectuur (bijv. i386 t.o.v. alpha)." #: C/gramps.xml:1502(para) msgid "The GRAMPS XML file was the default format for older versions of GRAMPS. Unlike the grdb format, it is architecture independent and human-readable. The database may also have references to non-local (external) media objects, therefore it is not guaranteed to be completely portable. The GRAMPS XML database is created by saving ( FileSave As... ) or exporting ( FileExport... ) data in that format" -msgstr "HEt GRAMPS XML bestand was de standaard voor de oudere versies van GRAMPS. Dit formaat is architectuur-onafhankelijk en kan door mensen gelezen worden, dit in tegenstelling tot het grdb-formaat. Het gegevensbestand kan ook verwijzingen bevatten naar niet-locale (externe) media voorwerpen, en daarom is het niet zeker dat het bestand volledig overzetbaar is." +msgstr "Het GRAMPS XML bestand was de standaard voor de oudere versies van GRAMPS. Dit formaat is architectuur-onafhankelijk en kan door mensen gelezen worden, dit in tegenstelling tot het grdb-formaat. Het gegevensbestand kan ook verwijzingen bevatten naar niet-locale (externe) media voorwerpen, en daarom is het niet zeker dat het bestand volledig overzetbaar is." #: C/gramps.xml:1523(para) msgid "The GRAMPS package is a compressed archive containing the GRAMPS XML file and all media objects (images, sound files, etc.) to which the database refers. Because it contains all the media objects, this format is completely portable. The GRAMPS package is created by exporting ( FileExport... ) data in that format." @@ -1276,7 +1276,7 @@ msgstr "Gegevens exporteren" #: C/gramps.xml:1544(para) msgid "Exporting allows you to share any portion of your GRAMPS database with other researchers as well as to enable you to transfer your data to another computer. Currently, GRAMPS can export data to the following formats: GRAMPS database (grdb), GRAMPS XML, GEDCOM, GRAMPS package, Web Family Tree, and GeneWeb." -msgstr "Exporteren laat u toe om gelijk welk deel van uw GRAMPS-gegevensbestand te delen met andere onderzoekers of om uw gegevens beschikbaar te maken op een andere computer. Momenteel kunt u vanuit GRAMPS gegevens exporteren naar de volgende formaten: GRAMPS-gegevensbestand (grdb), GRAMPS XML, GEDCOM, GRAMPS pakkete, Web Family Tree (WFT) en GeneWeb." +msgstr "Exporteren laat u toe om gelijk welk deel van uw GRAMPS-gegevensbestand te delen met andere onderzoekers of om uw gegevens beschikbaar te maken op een andere computer. Momenteel kunt u vanuit GRAMPS gegevens exporteren naar de volgende formaten: GRAMPS-gegevensbestand (grdb), GRAMPS XML, GEDCOM, GRAMPS pakket, Web Family Tree (WFT) en GeneWeb." #: C/gramps.xml:1551(title) msgid "Export is saving a copy" @@ -1284,11 +1284,13 @@ msgstr "Exporteren betekent een kopie bewaren" #: C/gramps.xml:1553(para) msgid "When you export, you are saving a copy of the currently opened database. Exporting creates another file with a copy of your data. Note that the database that remains opened in your GRAMPS window is NOT the file saved by your export. Additional editing of the currently opened database will not alter the copy produced by the export." -msgstr "Wanneer u exporteert, slaat u een kopie op van het gegevensbestand dat momenteel geopend is. Exporteren maakt een ander bestand aan dat een kopie is van het andere bestand. Let op : het gevensbestand dat open blijft staan is NIET het geëxporteerde bestand. Bijkomende aanpassingen van het bestand dat geopend is zal de geëxporteerde kopie niet wijzigen." +msgstr "Wanneer u exporteert, slaat u een kopie op van het gegevensbestand dat momenteel geopend is. Exporteren maakt een ander bestand aan dat een kopie is van het andere bestand. Let op : het gegevensbestand dat open blijft staan is NIET het geëxporteerde bestand. Bijkomende aanpassingen van het bestand dat geopend is zal de geëxporteerde kopie niet wijzigen." #: C/gramps.xml:1560(para) msgid "To export data, choose FileExport. This will bring up the Export assistant. Its pages will guide you through the format selection (see ), file selection, and format specific export options (see ). After a final confirmation page, the export will be performed according to the choices you have made. At any time, you can click the Back and revise any selection, and then go forward to redo the export." -msgstr "Om gegevens te exporteren, kiest u BestandExporten. Dit zal de Exportassistant tonen. De volgende schermen zullen u door de formaatselectie (zie ), bestandsselectie en specifieke exportopties (zie ) loodsen." +msgstr "" +"Om gegevens te exporteren, kiest u BestandExporten. Dit zal de Exportassistent tonen." +"De volgende schermen zullen u door de formaatselectie (zie ), bestandsselectie en specifieke exportopties (zie ) loodsen. " #: C/gramps.xml:1574(title) msgid "Export assistant: format selection" @@ -1312,7 +1314,7 @@ msgstr "Coderen" #: C/gramps.xml:1603(para) msgid "Since different languages use different characters, it is important to tell a GEDCOM file what character set is used. The two formats traditionally accepted are ASCII and ANSEL. Since all ASCII characters are valid ANSEL characters, GRAMPS does not provide an option for ASCII." -msgstr "" +msgstr "Omdat verschillende talen verschillende karakters gebruiken, is het belangrijk om aan een GEDCOM-bestand mee te geven welke karakterset wordt gebruikt. De twee formaten die normaal geaccepteerd worden zijn ASCII en ANSEL. Omdat alle ASCII karakters geldige ANSEL karakters zijn, heeft GRAMPS geen optie voor het kiezen van ASCII." #: C/gramps.xml:1609(para) msgid "Because ANSEL is not commonly used, some genealogy programs will accept ANSI (more commonly know as ISO-8859-1) and Unicode character sets. Only select ANSI or Unicode if you know any program that attempts to read the GEDCOM file will understand these character sets." @@ -1432,7 +1434,7 @@ msgstr "Web Family Tree" #: C/gramps.xml:1786(para) msgid "Exporting to Web Family Tree will create a text file that can be used by the Web Family Tree program. Export options include filter selection and the ability to limit data on living people to that of their family ties." -msgstr "Exporteren naar WFT ( Web Family Tree ) zal een tekstbestand aanmaken dat kan gebruikt worden door het WFT programma. De exporteer opties bevatten filter selecties en de mogelijkheid om de hoeveelheid gegevens te beperken tot de familiebanden, voor nog-levende mensen." +msgstr "Exporteren naar WFT ( Web Family Tree ) zal een tekstbestand aanmaken dat kan gebruikt worden door het WFT programma. De exporteer opties bevatten filter selecties en de mogelijkheid om de hoeveelheid gegevens te beperken tot de familiebanden, voor nog levende mensen." #: C/gramps.xml:1797(para) msgid "Exporting to GeneWeb will save a copy of your data into a popular web genealogy format. To find out more about GeneWeb and its format, visit http://cristal.inria.fr/~ddr/GeneWeb/en/." @@ -1512,7 +1514,7 @@ msgstr "" #: C/gramps.xml:1892(title) msgid "To Specify a Relationship" -msgstr "Een relatie specifieren" +msgstr "Een relatie specificeren" #: C/gramps.xml:1894(para) msgid "There are two primary ways to specify relationships between people - using the Relationships View and using the Edit Family dialog from the Family List View. The Family List is usually used to build all the relationships within a single family at a time. The Relationships View is usually used to build multiple relationships to a single person." @@ -1560,7 +1562,7 @@ msgstr "" #: C/gramps.xml:1978(title) msgid "To Specify Parents" -msgstr "Ouders specifieren" +msgstr "Ouders specificeren" #: C/gramps.xml:1980(para) msgid "You can specify Active person's parents in the Relationship View(). A little care is required to prevent the creation of duplicate families. If you wish to add the active person to an already existing family, you should click the Select button. If the family including the parents does not already exist, you should click the Add button." @@ -1600,7 +1602,7 @@ msgstr "" #: C/gramps.xml:2050(title) msgid "To Specify Children" -msgstr "Kinderen specifieren" +msgstr "Kinderen specificeren" #: C/gramps.xml:2052(para) msgid "Adding children to a relationship is done through a similar proceedure. From the Relationships View or the Family List View, select the existing family or create a new family. Children can be added by selecting the Add button or Select button to the right of the child list." @@ -1688,7 +1690,7 @@ msgstr "Het vorige deel gaf u een snel overzicht van hoe gegevens in te voeren e #: C/gramps.xml:2176(para) msgid "As we have seen above, GRAMPS offers you a series of Views. Each of these Views gives you opportunities to enter and edit information. In fact, you can often get to the same information from different Views." -msgstr "Zoals we gezien hebben, heeft GRAMPS verschillende schermen. Elk van deze schermen geeft u mogelijkheden om gegevens in te voeren en aan te passen. Het is zelfs zo dat u dezlfde informatie kunt zien in verschillende schermen." +msgstr "Zoals we gezien hebben, heeft GRAMPS verschillende schermen. Elk van deze schermen geeft u mogelijkheden om gegevens in te voeren en aan te passen. Het is zelfs zo dat u dezelfde informatie kunt zien in verschillende schermen." #: C/gramps.xml:2181(para) msgid "In GRAMPS, information is entered and edited through what we call dialogs. Since we use that term frequently, we should define what we mean by it:" @@ -1832,7 +1834,7 @@ msgstr "De tabs geven de volgende persoonlijke informatiecategorieën weer:" #: C/gramps.xml:2388(para) msgid "The Events tab lets you view and edit any events relevant to the person. The bottom part of the window lists all such events stored in the database. The top part shows the details of the currently selected event in the list (if any). The buttons +, Edit, and - allow you to add, modify, and remove an event record from the database. Note that the Edit and - buttons become available only when an event is selected from the list." -msgstr "De tab Gebeurtenisqsen geeft u toe alle gebeurtenissen te zien die verbonden zijn met een persoon en die gebeurtenissen ook te veranderen. Het onderste deel laat alle gelijkaardige gebeurtenissen zien die opgeslagen zijn in het gegevensbestand. Het bovenste deel laat de details zien van het huidig geselecteerde gebeurtenis van de lijst ( indien aanweizg). De knoppen +, Bewerken, en - laten toe om een gebeurtenis toe te voegen, aan te passen of te verwijderen van het gegevensbestand. Deze knoppen +, Berwerken, en - zijn enkel beschikbaar indien een gebeurtenis daadwerkelijk wordt gekozen uit de lijst." +msgstr "De tab Gebeurtenissen geeft u toe alle gebeurtenissen te zien die verbonden zijn met een persoon en die gebeurtenissen ook te veranderen. Het onderste deel laat alle gelijkaardige gebeurtenissen zien die opgeslagen zijn in het gegevensbestand. Het bovenste deel laat de details zien van het huidig geselecteerde gebeurtenis van de lijst ( indien aanwezig). De knoppen +, Bewerken, en - laten toe om een gebeurtenis toe te voegen, aan te passen of te verwijderen van het gegevensbestand. Deze knoppen +, Bewerken, en - zijn enkel beschikbaar indien een gebeurtenis daadwerkelijk wordt gekozen uit de lijst." #: C/gramps.xml:2404(term) C/gramps.xml:3878(title) msgid "Names" @@ -1908,7 +1910,7 @@ msgstr "Dialoog aanpassen persoon - aantekeningen" #: C/gramps.xml:2557(phrase) msgid "Shows Notes Tab of Edit Person dialog." -msgstr "Toont de aantekeningentab vazn de dialoog aanpassen personen." +msgstr "Toont de aantekeningentab van de dialoog aanpassen personen." #: C/gramps.xml:2563(para) msgid "The Notes tab provides a place to record various items about the person that do not fit neatly into other categories. To add a note or modify existing notes simply edit the text in the text entry field." @@ -1980,7 +1982,7 @@ msgstr "Internet" #: C/gramps.xml:2695(para) msgid "The Internet tab displays Internet addresses relevant to the person. The bottom part lists all such Internet addresses and accompanying descriptions. The top part shows the details of the currently selected addresses in the list (if any). The buttons +, Edit, and - let you add, modify, and remove an Internet address. The \"Go\" button (represented by an icon having a green arrow and yellow circle) opens your web browser and takes you directly to the highlighted page. Note that the Edit, -, and Go buttons become available only when an address is selected from the list." -msgstr "De tab Internet, geeft de internet-adressen die relevant zijn voor de persoon. Het onderste deel geeft een lijst van alle internet-adressen en bijhorende beschrijvingen. Bovenste deel toont de details van het huidige geselcteerde adres uit de lijst(indien aanweig). De knoppen +, Bewerken, en - laten toe om een internet-adres toe te voegen, aan te passen of te verwijderen. " +msgstr "De tab Internet, geeft de internet-adressen die relevant zijn voor de persoon. Het onderste deel geeft een lijst van alle internet-adressen en bijhorende beschrijvingen. Bovenste deel toont de details van het huidige geselecteerde adres uit de lijst(indien aanwezig). De knoppen +, Bewerken, en - laten toe om een internet-adres toe te voegen, aan te passen of te verwijderen. " #: C/gramps.xml:2710(title) msgid "Edit Person dialog - Internet" @@ -2088,11 +2090,11 @@ msgstr "Datumformaten en vertaalregels" #: C/gramps.xml:2875(para) msgid "GRAMPS recognizes dates entered in a variety of formats. The default numeric format is that which is conventional for the environment is which GRAMPS is operating; that is, DD.MM.YYYY for most European countries, MM/DD/YYYY for the U.S., and so on." -msgstr "GRAMPS herkent ingevoerde datums in verscheidene formaten. Het standaard numeriek formaat wordt bepaald door de omgeving waarin GRAMPS draait. Dus DD.MM.YYYY voor de meeste Europese landen en MM/DD/YYYY vor de V.S. enz." +msgstr "GRAMPS herkent ingevoerde datums in verscheidene formaten. Het standaard numeriek formaat wordt bepaald door de omgeving waarin GRAMPS draait. Dus DD.MM.YYYY voor de meeste Europese landen en MM/DD/YYYY voor de V.S. enz." #: C/gramps.xml:2880(para) msgid "Besides exact dates, GRAMPS recognizes many dates that are not regular: before, after, about, ranges and spans. It also understands the quality: estimated or calculated. Finally, it supports partial dates and many alternative calendars. Below is the list of date entry rules to allow precise date parsing." -msgstr "Naast exacte datums kan GRAMPS ook verscheidene datums herkennen die niet regulier zijn: voor, na, rond, bereik en periode. Ook wordt de kwaliteit begrepen : berekend of geschat. Tenslotte worden gedeeldelijke datums en vele alternatieve kalenders ondersteund. Verderop vindt u een lijst van de ingaveregels om een juiste datumvertaling te verkrijgen. " +msgstr "Naast exacte datums kan GRAMPS ook verscheidene datums herkennen die niet regulier zijn: voor, na, rond, bereik en periode. Ook wordt de kwaliteit begrepen : berekend of geschat. Tenslotte worden gedeeltelijke datums en vele alternatieve kalenders ondersteund. Verderop vindt u een lijst van de ingaveregels om een juiste datumvertaling te verkrijgen. " #: C/gramps.xml:2887(title) msgid "Date parsing rules" @@ -2124,11 +2126,11 @@ msgstr "Voorbeelden: geschat van 2002 tot 2006, voor Juni 1975, geschat rond 200 #: C/gramps.xml:2930(para) msgid "Partial dates are entered simply by omitting unknown information. Examples: May 1961 and 2004." -msgstr "Gedeeldelijke datums kunnen ingevoerd worden door eenvoudig de ontbrekende informatie weg te laten. Voorbeelden: Mei 1699 en 2009." +msgstr "Gedeeltelijke datums kunnen ingevoerd worden door eenvoudig de ontbrekende informatie weg te laten. Voorbeelden: Mei 1699 en 2009." #: C/gramps.xml:2935(para) msgid "Alternate calendars are calendars other than the Gregorian calendar. Currently, GRAMPS supports Hebrew, French Republican, Julian, Islamic, and Persian alternate calendars. To specify the calendar other than the default Gregorian, append the name of the calendar to the date string, e.g. \"January 9, 1905 (julian)\"." -msgstr "Alternatieve kalenders zijn kalenders die afwijken van de Gregoriaanse. Momenteel ondersteunt GRMAPS volgende kalenders: Hebreeuwse, Franse Republiek, Juliaanse, Islamitische en Perzische kalenders. Om een kalender op te geven die afwijkt van de standaard Gregoraiaanse, voegt u de naamm van de kalender to aan de datumtekenreeks, v.b. \"9 Januari 1905 (juliaans)\"." +msgstr "Alternatieve kalenders zijn kalenders die afwijken van de Gregoriaanse. Momenteel ondersteunt GRAMPS volgende kalenders: Hebreeuwse, Franse Republiek, Juliaanse, Islamitische en Perzische kalenders. Om een kalender op te geven die afwijkt van de standaard Gregoriaanse, voegt u de naam van de kalender to aan de datumtekenreeks, v.b. \"9 Januari 1905 (Juliaans)\"." #: C/gramps.xml:2946(title) msgid "Date Validity Indicators" @@ -2152,7 +2154,7 @@ msgstr "Een groene cirkel betekent dat de datum volledig en geldig is (v.b. 24 M #: C/gramps.xml:2968(para) msgid "Yellow circle means that the date is valid but is not a regular date. This could be the date of a different type: a before date (before May 25, 1962), an after date (after May, 1960), an about date (about May 23, 1961), a range (between May 1, 1961 and May 31, 1961), or a span (from May 1, 1961 to May 31, 1961). It can also be a complete single date, but with quality of Estimated or Calculated. Finally, it could be a partial date, i.e. a regular quality single date missing some portion, e.g. May 1961 or 1961." -msgstr "Een gele cirkel geeft aan dat de datum geldig is, maar geen het geen reguliere datum is. Dit kan aangeven dat de datum van een ander type is: een voo.. datum( voor 1 Mei 1960) of een na... datum (na 1 Mei 1960) of rond ... datum (rond 23 Mei 2005), of een bereik (tussen 2 Mei 1963 en 3 Mei 1964) of een periode (van 2 Mei 1599 tot 3 Juni 1603). Het kan ook gaan over een complete datum, maar met de kwaliteit geschat of berekend. Tenslotte kan het gaan over een gedeeltelijke datum, dus een reguliere datum waarin een deel ontbreekt, v.b. Juni 2005." +msgstr "Een gele cirkel geeft aan dat de datum geldig is, maar geen het geen reguliere datum is. Dit kan aangeven dat de datum van een ander type is: een voor.. datum( voor 1 Mei 1960) of een na... datum (na 1 Mei 1960) of rond ... datum (rond 23 Mei 2005), of een bereik (tussen 2 Mei 1963 en 3 Mei 1964) of een periode (van 2 Mei 1599 tot 3 Juni 1603). Het kan ook gaan over een complete datum, maar met de kwaliteit geschat of berekend. Tenslotte kan het gaan over een gedeeltelijke datum, dus een reguliere datum waarin een deel ontbreekt, v.b. Juni 2005." #: C/gramps.xml:2978(para) msgid "While partial dates do not uniquely define the day, they allow at least for some type of comparisons between the dates." @@ -2168,7 +2170,7 @@ msgstr "Grafische gebruikers-interface om datums in te geven" #: C/gramps.xml:2998(para) msgid "While the above parsing rules provide a guide for you to type in most common dates, you can also use Date selection dialog. The dialog is particularly useful for building a complex date or for simply insuring that your information is entered in a way GRAMPS will understand. The Date selection dialog can be invoked by clicking the colored circle button next to the date entry field." -msgstr "Bovenstaande vertaalregels geven u een idee hoe u best de meeste datums invoert, maar u kunt ook gebruik maken van Datum selecteren dialoog. Deze dialoog is zeker handig indien u een comlexe datum wenst in te voeren of eenvoudigweg om te controleren of de ingevoerde informatie voor GRAMPS verstaanbaar is. De Datum selecterenb dialoog kann ook opgeroepen worden door op de gekleurde led-knop naast het datum ingaveveld te klikken." +msgstr "Bovenstaande vertaalregels geven u een idee hoe u best de meeste datums invoert, maar u kunt ook gebruik maken van Datum selecteren dialoog. Deze dialoog is zeker handig indien u een complexe datum wenst in te voeren of eenvoudigweg om te controleren of de ingevoerde informatie voor GRAMPS verstaanbaar is. De Datum selecteren dialoog kan ook opgeroepen worden door op de gekleurde led-knop naast het datum ingaveveld te klikken." #: C/gramps.xml:3007(title) msgid "Date selection dialog" @@ -2352,7 +2354,7 @@ msgstr "" #: C/gramps.xml:3456(para) msgid "Clicking OK will immediately save changes to the database). All changes are immediate." -msgstr "Klikken op de OK knop zal de wijzigingen aan het gegevensbestand direct opslaan. Alle aanpssingen gebeuren onmiddelijk." +msgstr "Klikken op de OK knop zal de wijzigingen aan het gegevensbestand direct opslaan. Alle aanpassingen gebeuren onmiddelijk." #: C/gramps.xml:3461(para) msgid "If a tab label is in boldface type and displays an icon, this means it contains data. If not, it has no data." @@ -2376,7 +2378,7 @@ msgstr "" #: C/gramps.xml:3508(para) msgid "The Note tab displays any comments or notes concerning the place. To add a note or modify existing notes simply edit the text in the text entry field." -msgstr "De tab guilabel>Opmerkingen geeft alle commentaren of opmerkingen ivm. de locatie. Om een opmerking toe te voegen of een bestaande aan te passen kunt u eenvoudig de tekst in het tekstingaveveld veranderen." +msgstr "De tab Opmerkingen geeft alle commentaren of opmerkingen ivm. de locatie. Om een opmerking toe te voegen of een bestaande aan te passen kunt u eenvoudig de tekst in het tekstingaveveld veranderen." #: C/gramps.xml:3520(para) msgid "The Sources tab lets you view and edit sources relevant to a place. The central part of the window lists all such source references stored in the database. The buttons +, Edit, and - let you add, modify, and remove a source reference associated with a place. Note that the Edit and - buttons become available only when a source reference is selected from the list." @@ -3311,7 +3313,7 @@ msgid "Genealogy records can generate a lot of files. Many web servers have a di msgstr "Genealogische gegevens kunnen een hele reeks bestanden aanmaken. Vele web-servers heebn problemen wanneer er zich vele bestanden in één map bevinden. De generator tracht daarom het aantal bestanden per map te beperken tot een beheersbaar nivo. Om dit mogelijk te maken wordt een hierarche van mappen aangemaakt. De aangemaakte bestandsnamen zijn niet intuitief, maar uniek per persoon. Wanneer de web-generator opnieuw wordt gelopen zullen identieke besanden worden aangemaakt. Dit maakt het eenvoudig om bepaalde bestanden te vervangen." #: C/gramps.xml:5295(para) -msgid "By default, the output files are written to the specified directory. Because of the number of files and directories that are created, it may be difficult to transfer the files to an external web host. To aid in this, you may directly create a gzip'd tar file to more easily upload the data. This is the format that should be used if you would like to take advantage of the free genealogy page hosting at the GRAMPS web hosting site." +msgid "By default, the output files are written to the specified directory. Because of the number of files and directories that are created, it may be difficult to transfer the files to an external web host. To aid in this, you may directly create a gezipt tar file to more easily upload the data. This is the format that should be used if you would like to take advantage of the free genealogy page hosting at the GRAMPS web hosting site." msgstr "Standaard worden de uitvoerbestanden naar een bepaalde map geschreven. Omdat er zo veel bestanden worden aangemaakt, is is vaak moeilijk om alle deze bestanden te verplaatsen naar een externe web-host. Als hulp, kunt u een gzip'd tar bestand aanmaken. Dit om de gegevens eenvoudiger te uploaden. Dit formaat moet u ook gebruiken indien u gebruik wilt maken van de gratische web-hosting op GRAMPS web hosting site." #: C/gramps.xml:5306(para) @@ -3700,7 +3702,7 @@ msgstr "De meeste instellingen in GRAMPS, worden vastgelegd met de Voo #: C/gramps.xml:5904(title) msgid "Preferences dialog" -msgstr "Dialoog voor voorkeuren" +msgstr "Voorkeurendialoog" #: C/gramps.xml:5913(phrase) msgid "Shows Preferences dialog." @@ -5096,7 +5098,7 @@ msgstr "" #: C/gramps.xml:7894(term) msgid "name=report_name" -msgstr "" +msgstr "naam=verslag_naam" #: C/gramps.xml:7897(para) msgid "This mandatory option determines which report will be generated. If the supplied report_name does not correspond to any available report, the error message will be printed followed by the list of available reports." @@ -5104,7 +5106,7 @@ msgstr "" #: C/gramps.xml:7906(term) msgid "show=all" -msgstr "" +msgstr "toon=alles" #: C/gramps.xml:7909(para) msgid "This will produce the list of names for all options available for a given report." @@ -5112,7 +5114,7 @@ msgstr "" #: C/gramps.xml:7915(term) msgid "show=option_name" -msgstr "" +msgstr "toon=optie_naam" #: C/gramps.xml:7918(para) msgid "This will print the description of the functionality supplied by the option_name, as well as what are the acceptable types and values for this option." @@ -5232,7 +5234,7 @@ msgstr "outfile" #: C/gramps.xml:8068(filename) msgid "errfile" -msgstr "" +msgstr "foutbestand" #: C/gramps.xml:8064(command) msgid "gramps -i -i -o -f > 2>" @@ -5252,7 +5254,7 @@ msgstr "Om een gegevensbestand te openen, en gebaseerd op deze gegevens een tijd #: C/gramps.xml:8090(filename) msgid "file.grdb" -msgstr "" +msgstr "bestand.grdb" #: C/gramps.xml:8092(replaceable) msgid "name=timeline,off=pdf,of=my_timeline.pdf" diff --git a/src/GrampsDbUtils/_GedcomLex.py b/src/GrampsDbUtils/_GedcomLex.py index bcee20d48..da588ef7d 100644 --- a/src/GrampsDbUtils/_GedcomLex.py +++ b/src/GrampsDbUtils/_GedcomLex.py @@ -335,8 +335,8 @@ def extract_date(text): #------------------------------------------------------------------------- class Reader: - def __init__(self,name): - self.f = open(name,'rU') + def __init__(self, f): + self.f = f self.current_list = [] self.eof = False self.cnv = None @@ -348,6 +348,7 @@ class Reader: } def set_charset_fn(self,cnv): + print "Character set changed", cnv self.cnv = cnv def set_broken_conc(self,broken): @@ -384,7 +385,6 @@ class Reader: line = self.f.readline() self.index += 1 if not line: - self.f.close() self.eof = True return diff --git a/src/GrampsDbUtils/_GedcomParse.py b/src/GrampsDbUtils/_GedcomParse.py index 79eeaffec..656374118 100644 --- a/src/GrampsDbUtils/_GedcomParse.py +++ b/src/GrampsDbUtils/_GedcomParse.py @@ -82,19 +82,20 @@ addr3_re = re.compile('(.+)([\n\r]+)(.+)\s*,(.+)') _place_field = [] _place_match = { - 'addr' : RelLib.Location.set_street, - 'subdivision' : RelLib.Location.set_street, - 'addr1' : RelLib.Location.set_street, - 'adr1' : RelLib.Location.set_street, - 'city' : RelLib.Location.set_city, - 'town' : RelLib.Location.set_city, - 'village' : RelLib.Location.set_city, - 'county' : RelLib.Location.set_county, - 'country' : RelLib.Location.set_country, - 'state' : RelLib.Location.set_state, - 'region' : RelLib.Location.set_state, - 'province' : RelLib.Location.set_state, - 'area code' : RelLib.Location.set_postal_code, + 'addr' : RelLib.Location.set_street, + 'subdivision' : RelLib.Location.set_street, + 'addr1' : RelLib.Location.set_street, + 'adr1' : RelLib.Location.set_street, + 'city' : RelLib.Location.set_city, + 'town' : RelLib.Location.set_city, + 'village' : RelLib.Location.set_city, + 'county' : RelLib.Location.set_county, + 'country' : RelLib.Location.set_country, + 'state' : RelLib.Location.set_state, + 'state/province': RelLib.Location.set_state, + 'region' : RelLib.Location.set_state, + 'province' : RelLib.Location.set_state, + 'area code' : RelLib.Location.set_postal_code, } #------------------------------------------------------------------------- @@ -238,8 +239,10 @@ def importData(database, filename, callback=None, use_trans=False): def import2(database, filename, callback, codeset, use_trans): # add some checking here try: - np = NoteParser(filename, False, codeset) - g = GedcomParser(database,filename, callback, codeset, np.get_map(), + f = open(filename,"rU") + np = NoteParser(f, False, codeset) + f.seek(0) + g = GedcomParser(database, f, filename, callback, codeset, np.get_map(), np.get_lines(),np.get_persons()) except IOError,msg: ErrorDialog(_("%s could not be opened\n") % filename,str(msg)) @@ -253,6 +256,46 @@ def import2(database, filename, callback, codeset, use_trans): database.readonly = False close = g.parse_gedcom_file(use_trans) database.readonly = ro + f.close() + except IOError,msg: + errmsg = _("%s could not be opened\n") % filename + ErrorDialog(errmsg,str(msg)) + return + except db.DBSecondaryBadError, msg: + WarningDialog(_('Database corruption detected'), + _('A problem was detected with the database. Please ' + 'run the Check and Repair Database tool to fix the ' + 'problem.')) + return + except Errors.GedcomError, msg: + ErrorDialog(_('Error reading GEDCOM file'), str(msg)) + return + +def import_from_string(database, text, callback, codeset, use_trans): + # add some checking here + + from cStringIO import StringIO + + f = StringIO(text) + + try: + np = NoteParser(f, False, codeset) + f.seek(0) + g = GedcomParser(database, f, "inline-string", callback, codeset, np.get_map(), + np.get_lines(),np.get_persons()) + except IOError,msg: + ErrorDialog(_("%s could not be opened\n") % filename,str(msg)) + return + + if database.get_number_of_people() == 0: + use_trans = False + + try: + ro = database.readonly + database.readonly = False + close = g.parse_gedcom_file(use_trans) + database.readonly = ro + f.close() except IOError,msg: errmsg = _("%s could not be opened\n") % filename ErrorDialog(errmsg,str(msg)) @@ -278,7 +321,6 @@ class DateStruct: self.time = "" class IdFinder: - def __init__(self,keys,prefix): self.ids = set(keys) self.index = 0 @@ -321,6 +363,7 @@ class CurrentState: self.level = level self.event = event self.event_ref = event_ref + self.source_ref = None def add_to_note(self,text): self.note += text @@ -334,7 +377,8 @@ class CurrentState: # #------------------------------------------------------------------------- class NoteParser: - def __init__(self, filename,broken,override): + + def __init__(self, ifile, broken, override): if override: if override == 1: self.cnv = ansel_to_utf8 @@ -343,9 +387,8 @@ class NoteParser: else: self.cnv = nocnv else: - f = open(filename,"rU") for index in range(50): - line = f.readline().split() + line = ifile.readline().split() if len(line) > 2 and line[1] == 'CHAR': if line[2] == "ANSEL": self.cnv = ansel_to_utf8 @@ -353,16 +396,16 @@ class NoteParser: self.cnv = nocnv else: self.cnv = latin_to_utf8 - f.close() self.name_map = {} self.count = 0 self.person_count = 0 - f = open(filename,"rU") + + ifile.seek(0) innote = False - for line in f: + for line in ifile: try: text = string.translate(line,_transtable,_delc) except: @@ -402,8 +445,6 @@ class NoteParser: elif personRE.match(line): self.person_count += 1 - f.close() - def get_map(self): return self.name_map @@ -423,7 +464,7 @@ class GedcomParser(UpdateCallback): SyntaxError = "Syntax Error" BadFile = "Not a GEDCOM file" - def __init__(self,dbase,filename,callback,codeset,note_map,lines,people): + def __init__(self, dbase, ifile, filename, callback, codeset, note_map, lines, people): UpdateCallback.__init__(self,callback) self.set_total(lines) @@ -432,7 +473,8 @@ class GedcomParser(UpdateCallback): self.db = dbase self.emapper = IdFinder(dbase.get_gramps_ids(EVENT_KEY), dbase.eprefix) - + + self.debug = False self.person = None self.inline_srcs = {} self.media_map = {} @@ -447,7 +489,7 @@ class GedcomParser(UpdateCallback): if self.use_def_src: self.def_src = RelLib.Source() fname = os.path.basename(filename).split('\\')[-1] - self.def_src.set_title(_("Import from %s") % unicode(fname)) + self.def_src.set_title(_("Import from GEDCOM") % unicode(fname)) self.dir_path = os.path.dirname(filename) self.localref = 0 self.placemap = {} @@ -461,7 +503,7 @@ class GedcomParser(UpdateCallback): self.fid2id = {} self.rid2id = {} - self.parse_indi_table = { + self.indi_parse_tbl = { # +1 RESN {0:1} TOKEN_RESN : self.func_person_resn, # +1 <> {0:M} @@ -522,7 +564,7 @@ class GedcomParser(UpdateCallback): TOKEN_TITL : self.func_person_titl, } - self.name_func = { + self.name_parse_tbl = { # +1 NPFX {0:1} TOKEN_NPFX : self.func_name_npfx, # +1 GIVN {0:1} @@ -545,13 +587,13 @@ class GedcomParser(UpdateCallback): TOKEN__AKA : self.func_name_aka, } - self.repo_func = { + self.repo_parse_tbl = { TOKEN_NAME : self.func_repo_name, TOKEN_ADDR : self.func_repo_addr, TOKEN_RIN : self.func_repo_ignore, } - self.generic_event_map = { + self.event_parse_tbl = { # n TYPE {0:1} TOKEN_TYPE : self.func_event_type, # n DATE {0:1} p.*/* @@ -590,7 +632,7 @@ class GedcomParser(UpdateCallback): TOKEN_FAMC : self.func_person_birth_famc, } - self.person_adopt_map = { + self.adopt_parse_tbl = { TOKEN_TYPE : self.func_event_type, TOKEN__PRIV : self.func_event_privacy, TOKEN_DATE : self.func_event_date, @@ -615,11 +657,18 @@ class GedcomParser(UpdateCallback): TOKEN_FAMC : self.func_person_adopt_famc, } - self.person_attr = { - TOKEN_PLAC : self.func_person_attr_plac, + self.famc_parse_tbl = { + # n FAMC @@ {1:1} + # +1 PEDI {0:M} p.* + TOKEN_PEDI : self.func_person_famc_pedi, + # +1 <> {0:M} p.* + TOKEN_NOTE : self.func_person_famc_note, + # Extras + TOKEN__PRIMARY: self.func_person_famc_primary, + TOKEN_SOUR : self.func_person_famc_sour, } - self.person_resi = { + self.resi_parse_tbl = { TOKEN_DATE : self.func_person_resi_date, TOKEN_ADDR : self.func_person_resi_addr, TOKEN_SOUR : self.func_person_resi_sour, @@ -634,7 +683,7 @@ class GedcomParser(UpdateCallback): TOKEN_TYPE : self.func_person_ignore, } - self.person_attr = { + self.person_attr_parse_tbl = { TOKEN_TYPE : self.func_person_attr_type, TOKEN_CAUS : self.func_person_attr_ignore, TOKEN_DATE : self.func_person_attr_ignore, @@ -649,7 +698,7 @@ class GedcomParser(UpdateCallback): TOKEN_NOTE : self.func_person_attr_note, } - self.lds_ord_func = { + self.lds_parse_tbl = { TOKEN_TEMP : self.func_lds_temple, TOKEN_DATE : self.func_lds_date, TOKEN_FAMC : self.func_lds_famc, @@ -660,6 +709,35 @@ class GedcomParser(UpdateCallback): TOKEN_STAT : self.func_lds_stat, } + self.asso_parse_tbl = { + TOKEN_TYPE : self.func_person_assoc_type, + TOKEN_RELA : self.func_person_assoc_rela, + TOKEN_SOUR : self.func_person_assoc_sour, + TOKEN_NOTE : self.func_person_assoc_note, + } + + self.srcref_parse_tbl = { + TOKEN_PAGE : self.func_srcref_page, + TOKEN_DATE : self.func_srcref_date, + TOKEN_DATA : self.func_srcref_data, + TOKEN_OBJE : self.func_srcref_obje, + TOKEN_REFN : self.func_srcref_refn, + TOKEN_EVEN : self.func_srcref_ignore, + TOKEN_IGNORE : self.func_srcref_ignore, + TOKEN__LKD : self.func_srcref_ignore, + TOKEN_QUAY : self.func_srcref_quay, + TOKEN_NOTE : self.func_srcref_note, + TOKEN_TEXT : self.func_srcref_text, + } + + self.object_parse_tbl = { + TOKEN_FORM : self.parse_obje_form, + TOKEN_TITL : self.parse_obje_titl, + TOKEN_FILE : self.parse_obje_file, + TOKEN_NOTE : self.parse_obje_note, + TOKEN_IGNORE : self.parse_obje_ignore, + } + self.family_func = { TOKEN_HUSB : self.func_family_husb, TOKEN_WIFE : self.func_family_wife, @@ -718,7 +796,7 @@ class GedcomParser(UpdateCallback): data = cursor.next() cursor.close() - self.lexer = Reader(filename) + self.lexer = Reader(ifile) self.filename = filename self.backoff = False self.override = codeset @@ -857,14 +935,11 @@ class GedcomParser(UpdateCallback): self.parse_record() self.parse_trailer() - for value in self.inline_srcs.keys(): - title,note = value - handle = self.inline_srcs[value] + for title in self.inline_srcs.keys(): + handle = self.inline_srcs[title] src = RelLib.Source() src.set_handle(handle) src.set_title(title) - if note: - src.set_note(note) self.db.add_source(src,self.trans) self.db.transaction_commit(self.trans,_("GEDCOM import")) @@ -902,133 +977,6 @@ class GedcomParser(UpdateCallback): elif line.token == TOKEN_ADDR: self.ignore_sub_junk(level+1) - def parse_source(self, name, level): - """ - n @@ SOUR {1:1} - +1 DATA {0:1} - +2 EVEN {0:M} - +3 DATE {0:1} - +3 PLAC {0:1} - +2 AGNC {0:1} - +2 <> {0:M} - +1 AUTH {0:1} - +1 TITL {0:1} - +1 ABBR {0:1} - +1 PUBL {0:1} - +1 TEXT {0:1} - +1 <> {0:1} - +1 <> {0:M} - +1 <> {0:M} - +1 REFN {0:M} - +2 TYPE {0:1} - +1 RIN {0:1} - +1 <> {0:1} - - """ - - self.source = self.find_or_create_source(name[1:-1]) - self.source.set_title("No title - ID %s" % self.source.get_gramps_id()) - - while True: - line =self.get_next() - if self.level_is_finished(line, level): - break - else: - func = self.source_func.get(line.token, self.func_source_undef) - func(line, self.source, level) - - self.db.commit_source(self.source, self.trans) - - def func_source_undef(self, line, source, level): - self.not_recognized(level+1) - - def func_source_ignore(self, line, source, level): - self.ignore_sub_junk(level+1) - - def func_source_repo(self, line, source, level): - if line.data and line.data[0] == '@': - gid = line.data.strip()[1:-1] - repo = self.find_or_create_repository(gid) - else: - gid = self.repo2id.get(line.data) - repo = self.find_or_create_repository(gid) - self.repo2id[line.data] = repo.get_gramps_id() - repo.set_name(line.data) - self.db.commit_repository(repo, self.trans) - repo_ref = RelLib.RepoRef() - repo_ref.set_reference_handle(repo.handle) - self.parse_repo_ref(line,repo_ref,level+1) - source.add_repo_reference(repo_ref) - - def func_source_abbr(self, line, source, level): - source.set_abbreviation(line.data) - - def func_source_agnc(self, line, source, level): - a = RelLib.Attribute() - a.set_type(RelLib.AttributeType.AGENCY) - a.set_value(line.data) - source.add_attribute(a) - - def func_source_text(self, line, source, level): - source.set_note(line.data) - - def func_source_note(self, line, source, level): - note = self.parse_note(line, source, level+1, '') - source.set_note(note) - - def func_source_auth(self, line, source, level): - source.set_author(line.data) - - def func_source_publ(self, line, source, level): - source.set_publication_info(line.data) - - def func_source_title(self, line, source, level): - title = line.data - title = title.replace('\n',' ') - source.set_title(title) - - def func_source_taxt_peri(self, line, source, level): - if source.get_title() == "": - source.set_title(line.data.replace('\n',' ')) - - def func_obje_form(self, line, media, level): - self.ignore_sub_junk(level+1) - - def func_obje_file(self, line, media, level): - (ok, filename) = self.find_file(line.data, self.dir_path) - if not ok: - self.warn(_("Could not import %s") % filename[0]) - path = filename[0].replace('\\',os.path.sep) - media.set_path(path) - media.set_mime_type(Mime.get_type(path)) - if not media.get_description(): - media.set_description(path) - - def func_obje_ignore(self, line, media, level): - self.ignore_sub_junk(level+1) - - def func_obje_title(self, line, media, level): - media.set_description(line.data) - - def func_obje_note(self, line, media, level): - note = self.parse_note(line, media, level+1, '') - media.set_note(note) - - def func_obje_blob(self, line, media, level): - self.ignore_sub_junk(level+1) - - def func_obje_refn(self, line, media, level): - self.ignore_sub_junk(level+1) - - def func_obje_type(self, line, media, level): - self.ignore_sub_junk(level+1) - - def func_obje_rin(self, line, media, level): - self.ignore_sub_junk(level+1) - - def func_obje_chan(self, line, media, level): - self.ignore_sub_junk(level+1) - def parse_record(self): while True: line = self.get_next() @@ -1076,7 +1024,8 @@ class GedcomParser(UpdateCallback): #---------------------------------------------------------------------- def parse_INDI(self, line): """ - Handling of the GEDCOM INDI tag. + Handling of the GEDCOM INDI tag and all lines subordinate to the current + line. n @XREF:INDI@ INDI {1:1} +1 RESN {0:1} @@ -1112,7 +1061,9 @@ class GedcomParser(UpdateCallback): state = CurrentState(person=self.person, level=1) # do the actual parsing - self.parse_person_level(state, self.parse_indi_table, self.func_person_event) + self.debug=True + self.parse_person_level(state, self.indi_parse_tbl, self.func_person_event) + self.debug=False # Add the default reference if no source has found if self.use_def_src and len(self.person.get_source_references()) == 0: @@ -1129,6 +1080,11 @@ class GedcomParser(UpdateCallback): del self.person def parse_person_level(self, state, func_map, default): + """ + Loops trough the current GEDCOM level level, calling the appropriate functions + associated with the TOKEN. If no matching function for the token is found, the + default function is called instead. + """ while True: line = self.get_next() if self.level_is_finished(line, state.level): @@ -1185,9 +1141,9 @@ class GedcomParser(UpdateCallback): sub_state = CurrentState() sub_state.person = state.person sub_state.name = name - sub_state.level = 2 + sub_state.level = state.level+1 - self.parse_person_level(sub_state, self.name_func, self.func_name_undefined) + self.parse_person_level(sub_state, self.name_parse_tbl, self.func_name_undefined) def func_person_sex(self,line,state): """ @@ -1201,7 +1157,7 @@ class GedcomParser(UpdateCallback): +1 <> {0:1} p.* """ event_ref = self._build_event_pair(self, RelLib.EventType.CUSTOM, - self.generic_event_map, line.data) + self.event_parse_tbl, line.data) state.person.add_event_ref(event_ref) def func_person_std_event(self, line, state): @@ -1209,7 +1165,7 @@ class GedcomParser(UpdateCallback): event_ref = RelLib.EventRef() event.set_gramps_id(self.emapper.find_next()) event.set_type(line.data) - self.parse_event_detail(event_ref, event, self.generic_event_map, 2) + self.parse_event_detail(event_ref, event, self.event_parse_tbl, 2) person_event_name(event,state.person) self.db.add_event(event, self.trans) @@ -1225,7 +1181,7 @@ class GedcomParser(UpdateCallback): is beyond me. """ event_ref = self._build_event_pair(state, RelLib.EventType.BIRTH, - self.generic_event_map, line.data) + self.event_parse_tbl, line.data) if state.person.get_birth_ref(): state.person.add_event_ref(event_ref) else: @@ -1241,7 +1197,7 @@ class GedcomParser(UpdateCallback): is beyond me. """ event_ref = self._build_event_pair(state, RelLib.EventType.RELIGION, - self.generic_event_map, line.data) + self.event_parse_tbl, line.data) state.person.add_event_ref(event_ref) def func_person_adop(self,line,state): @@ -1252,7 +1208,7 @@ class GedcomParser(UpdateCallback): +2 ADOP {0:1} """ event_ref = self._build_event_pair(self, RelLib.EventType.ADOPT, - self.person_adopt_map, line.data) + self.adopt_parse_tbl, line.data) state.person.add_event_ref(event_ref) def func_person_deat(self,line,state): @@ -1261,7 +1217,7 @@ class GedcomParser(UpdateCallback): +1 <> {0:1} p.* """ event_ref = self._build_event_pair(self, RelLib.EventType.DEATH, - self.generic_event_map, line.data) + self.event_parse_tbl, line.data) if state.person.get_death_ref(): state.person.add_event_ref(event_ref) else: @@ -1294,7 +1250,7 @@ class GedcomParser(UpdateCallback): sub_state.addr = addr sub_state.person.add_address(addr) - self.parse_person_level(sub_state, self.person_resi, self.func_person_resi_unknown) + self.parse_person_level(sub_state, self.resi_parse_tbl, self.func_person_resi_unknown) def func_person_resi_date(self, line, state): state.addr.set_date_object(line.data) @@ -1331,7 +1287,7 @@ class GedcomParser(UpdateCallback): sub_state.level = state.level+1 state.person.add_attribute(sub_state.attr) - self.parse_person_level(sub_state, self.person_attr, self.func_person_ignore) + self.parse_person_level(sub_state, self.person_attr_parse_tbl, self.func_person_ignore) def func_person_bapl(self, line, state): self.build_lds_ord(state, RelLib.LdsOrd.BAPTISM) @@ -1355,7 +1311,7 @@ class GedcomParser(UpdateCallback): sub_state.place_fields = _place_field state.person.lds_ord_list.append(sub_state.lds_ord) - self.parse_person_level(sub_state, self.lds_ord_func, self.func_person_ignore) + self.parse_person_level(sub_state, self.lds_parse_tbl, self.func_person_ignore) if sub_state.place: load_place_values(sub_state.place, sub_state.place.get_title(), @@ -1396,6 +1352,140 @@ class GedcomParser(UpdateCallback): state.lds_ord.set_status( lds_status.get(line.data,RelLib.LdsOrd.STATUS_NONE)) + def func_person_famc(self, line, state): + """ + n FAMC @@ {1:1} + +1 PEDI {0:M} p.* + +1 <> {0:M} p.* + + Handles the parsing of the FAMC line, which indicates which family the + person is a child of. + """ + + sub_state = CurrentState() + sub_state.person = state.person + sub_state.level = state.level + 1 + sub_state.ftype = _TYPE_BIRTH + sub_state.primary = False + + notelist = [] + gid = self.extract_gramps_id(line.data) + handle = self.find_family_handle(gid) + + self.parse_person_level(sub_state, self.famc_parse_tbl, + self.func_person_famc_unknown) + + # if the handle is not already in the person's parent family list, we + # need to add it to thie list. + + if not handle in [f[0] for f in self.person.get_parent_family_handle_list()]: + if int(sub_state.ftype) in rel_types: + state.person.add_parent_family_handle(handle) + else: + if state.person.get_main_parents_family_handle() == handle: + state.person.set_main_parent_family_handle(None) + state.person.add_parent_family_handle(handle) + + # search childrefs + family = self.db.find_family_from_handle(handle, self.trans) + family.set_gramps_id(gid) + + for ref in family.get_child_ref_list(): + if ref.ref == state.person.handle: + ref.set_mother_relation(sub_state.ftype) + ref.set_father_relation(sub_state.ftype) + break + else: + ref = RelLib.ChildRef() + ref.ref = state.person.handle + ref.set_mother_relation(sub_state.ftype) + ref.set_father_relation(sub_stateftype) + family.add_child_ref(ref) + self.db.commit_family(family, self.trans) + + def func_person_famc_pedi(self, line, state): + state.ftype = pedi_type.get(line.data.lower(),RelLib.ChildRefType.UNKNOWN) + + def func_person_famc_note(self, line, state): + if not line.data.strip() or line.data and line.data[0] != "@": + famc_note = line.data + self.parse_note_data(state.level+1) + else: + self.ignore_sub_junk(state.level+1) + + def func_person_famc_primary(self, line, state): + state.primary = True + + def func_person_famc_sour(self, line, state): + source_ref = self.handle_source(line, state.level) + state.person.add_source_reference(source_ref) + + def func_person_famc_unknown(self, line, state): + self.not_recognized(state.level) + + def func_person_fams(self,line,state): + """ + n FAMS @@ {1:1} p.* + +1 <> {0:M} p.* + """ + handle = self.find_family_handle(self.extract_gramps_id(line.data)) + state.person.add_family_handle(handle) + state.add_to_note(self.parse_optional_note(2)) + + def func_person_asso(self, line, state): + """ + Parse the ASSO tag, add the the referenced person to the person we + are currently parsing. The GEDCOM spec indicates that valid ASSOC tag + is: + + n ASSO @@ {0:M} + + And the the sub tags are: + + ASSOCIATION_STRUCTURE:= + +1 TYPE {1:1} + +1 RELA {1:1} + +1 <> {0:M} + +1 <> {0:M} + + GRAMPS only supports ASSO records to people, so if the TYPE is + something other than INDI, the record is ignored. + """ + + # find the id and person that we are referencing + gid = self.extract_gramps_id(line.data.strip()) + handle = self.find_person_handle(self.map_gid(gid)) + + # create a new PersonRef, and assign the handle, add the + # PersonRef to the active person + + sub_state = CurrentState() + sub_state.person = state.person + sub_state.level = state.level+1 + sub_state.ref = RelLib.PersonRef() + sub_state.ref.ref = handle + sub_state.ignore = False + + self.parse_person_level(sub_state, self.asso_parse_tbl, self.func_person_ignore) + if not sub_state.ignore: + state.person.add_person_ref(sub_state.ref) + + def func_person_assoc_type(self, line, state): + if line.data != "INDI": + state.ignore = True + + def func_person_assoc_rela(self, line, state): + state.ref.rel = line.data + + def func_person_assoc_sour(self, line, state): + state.ref.add_source_reference(self.handle_source(line, state.level)) + + def func_person_assoc_note(self, line, state): + note = self.parse_note(line, state.ref, state.level, "") + state.ref.set_note(note) + +######################################################################################## + def map_gid_empty(self,gid): return gid @@ -1763,28 +1853,31 @@ class GedcomParser(UpdateCallback): +1 FILE {1:1} +1 <> {0:M} """ - form = "" - filename = "" - title = "" - note = "" - while True: - line =self.get_next() - if self.level_is_finished(line, level): - break - elif line.token == TOKEN_FORM: - form = line.data - elif line.token == TOKEN_TITL: - title = line.data - elif line.token == TOKEN_FILE: - filename = line.data - elif line.token == TOKEN_NOTE: - note = line.data - elif line.token == TOKEN_IGNORE: - self.ignore_sub_junk(level+1) - else: - self.not_recognized(level+1) - - return (form, filename, title, note) + sub_state = CurrentState() + sub_state.form = "" + sub_state.filename = "" + sub_state.title = "" + sub_state.note = "" + sub_state.level = level + + self.parse_person_level(sub_state, self.object_parse_tbl, self.parse_obje_ignore) + return (sub_state.form, sub_state.filename, sub_state.title, sub_state.note) + + def parse_obje_form(self, line, state): + state.form = line.data + + def parse_obje_titl(self, line, state): + state.title = line.data + + def parse_obje_file(self, line, state): + state.filename = line.data + + def parse_obje_note(self, line, state): + state.note = line.data + + def parse_obje_ignore(self, line, state): + self.ignore_sub_junk(state.level+1) + def func_family_comm(self, family, line, level): note = line.data @@ -1800,7 +1893,7 @@ class GedcomParser(UpdateCallback): event.set_type(line.data) event_ref = RelLib.EventRef() - self.parse_event_detail(event_ref, event, self.generic_event_map, level) + self.parse_event_detail(event_ref, event, self.event_parse_tbl, level) self.db.add_event(event, self.trans) event_ref.set_reference_handle(event.handle) @@ -1817,7 +1910,7 @@ class GedcomParser(UpdateCallback): event_ref = RelLib.EventRef() - self.parse_event_detail(event_ref, event, self.generic_event_map, 2) + self.parse_event_detail(event_ref, event, self.event_parse_tbl, 2) if int(event.get_type()) == RelLib.EventType.MARRIAGE: @@ -1875,7 +1968,7 @@ class GedcomParser(UpdateCallback): return note def parse_note(self,line,obj,level,old_note): - return self.parse_note_base(line,obj,level,old_note,obj.set_note) + return self.parse_note_base(line, obj, level, old_note, obj.set_note) def parse_comment(self,line,obj,level,old_note): return self.parse_note_base(line,obj,level,old_note,obj.set_note) @@ -2337,7 +2430,7 @@ class GedcomParser(UpdateCallback): if self.level_is_finished(line,level): break else: - func = self.person_attr.get(line.token, + func = self.person_attr_parse_tbl.get(line.token, self.func_person_attr_undef) func(attr, line, level+1) @@ -2378,54 +2471,62 @@ class GedcomParser(UpdateCallback): info = self.parse_note(line, attr, level+1, '') attr.set_note(info) - def parse_source_reference(self, source, level, handle): + def parse_source_reference(self, src_ref, level, handle): """Reads the data associated with a SOUR reference""" - while True: - line =self.get_next() - if self.level_is_finished(line, level): - break - elif line.token == TOKEN_PAGE: - source.set_page(line.data) - elif line.token == TOKEN_DATE: - source.set_date_object(line.data) - elif line.token == TOKEN_DATA: - date,text = self.parse_source_data(level+1) - if date: - d = self.dp.parse(date) - source.set_date_object(d) - source.set_text(text) - elif line.token == TOKEN_OBJE: - if line.data and line.data[0] == '@': - self.not_recognized(level) - else: - src = self.db.get_source_from_handle(handle) - (form, filename, title, note) = self.parse_obje(level) - self.build_media_object(src, form, filename, - title, note) - self.db.commit_source(src, self.trans) - elif line.token in (TOKEN_REFN, TOKEN_EVEN, - TOKEN_IGNORE, TOKEN__LKD): - self.ignore_sub_junk(level+1) - elif line.token == TOKEN_QUAY: - try: - val = int(line.data) - except ValueError: - return - # If value is greater than 3, cap at 3 - val = min(val,3) - if val > 1: - source.set_confidence_level(val+1) - else: - source.set_confidence_level(val) - elif line.token == TOKEN_NOTE: - note = self.parse_comment(line,source,level+1,'') - source.set_note(note) - elif line.token == TOKEN_TEXT: - note = self.parse_comment(line,source,level+1,'') - source.set_text(note) - else: - self.not_recognized(level+1) - + state = CurrentState() + state.level = level + state.src_ref = src_ref + state.handle = handle + self.parse_person_level(state, self.srcref_parse_tbl, self.func_srcref_ignore) + + def func_srcref_page(self, line, state): + state.src_ref.set_page(line.data) + + def func_srcref_date(self, line, state): + state.src_ref.set_date_object(line.data) + + def func_srcref_data(self, line, state): + date,text = self.parse_source_data(state.level+1) + if date: + d = self.dp.parse(date) + state.src_ref.set_date_object(d) + state.src_ref.set_text(text) + + def func_srcref_obje(self, line, state): + if line.data and line.data[0] == '@': + self.not_recognized(state.level) + else: + src = self.db.get_source_from_handle(state.handle) + (form, filename, title, note) = self.parse_obje(state.level) + self.build_media_object(src, form, filename, title, note) + self.db.commit_source(src, self.trans) + + def func_srcref_refn(self, line, state): + self.ignore_sub_junk(state.level+1) + + def func_srcref_ignore(self, line, state): + self.ignore_sub_junk(state.level+1) + + def func_srcref_quay(self, line, state): + try: + val = int(line.data) + except ValueError: + return + # If value is greater than 3, cap at 3 + val = min(val,3) + if val > 1: + state.src_ref.set_confidence_level(val+1) + else: + state.src_ref.set_confidence_level(val) + + def func_srcref_note(self, line, state): + note = self.parse_comment(line, state.src_ref, state.level+1, '') + state.src_ref.set_note(note) + + def func_srcref_text(self, line, state): + note = self.parse_comment(line, state.src_ref, state.level+1, '') + state. src_ref.set_text(note) + def parse_source_data(self,level): """Parses the source data""" date = "" @@ -2442,20 +2543,6 @@ class GedcomParser(UpdateCallback): self.not_recognized(level+1) return (date,note) - def parse_marnm(self,person,text): - data = text.split() - if len(data) == 1: - name = RelLib.Name(person.primary_name) - name.set_surname(data[0].strip()) - name.set_type(RelLib.NameType.MARRIED) - person.add_alternate_name(name) - elif len(data) > 1: - name = RelLib.Name() - name.set_surname(data[-1].strip()) - name.set_first_name(' '.join(data[0:-1])) - name.set_type(RelLib.NameType.MARRIED) - person.add_alternate_name(name) - def parse_header_head(self): """validiates that this is a valid GEDCOM file""" line = self.lexer.readline() @@ -2625,17 +2712,16 @@ class GedcomParser(UpdateCallback): self.not_recognized(level+1) return date - def handle_source(self,line,level): + def handle_source(self, line, level): source_ref = RelLib.SourceRef() if line.data and line.data[0] != "@": title = line.data - note = '' - handle = self.inline_srcs.get((title,note),Utils.create_id()) - self.inline_srcs[(title,note)] = handle + handle = self.inline_srcs.get(title, Utils.create_id()) + self.inline_srcs[title] = handle self.parse_source_reference(source_ref, level, handle) else: - handle = self.find_or_create_source(line.data[1:-1]).handle - self.parse_source_reference(source_ref,level, handle) + handle = self.find_or_create_source(line.data.strip()[1:-1]).handle + self.parse_source_reference(source_ref, level, handle) source_ref.set_reference_handle(handle) return source_ref @@ -2739,55 +2825,6 @@ class GedcomParser(UpdateCallback): # parse of time structure failed, so ignore pass - def func_person_asso(self, line, state): - """ - Parse the ASSO tag, add the the referenced person to the person we - are currently parsing. The GEDCOM spec indicates that valid ASSOC tag - is: - - > n ASSO @@ {0:M} - - And the the sub tags are: - - > ASSOCIATION_STRUCTURE:= - > +1 TYPE {1:1} - > +1 RELA {1:1} - > +1 <> {0:M} - > +1 <> {0:M} - - GRAMPS only supports ASSO records to people, so if the TYPE is - something other than INDI, the record is ignored. - """ - - # find the id and person that we are referencing - gid = self.extract_gramps_id(line.data.strip()) - handle = self.find_person_handle(self.map_gid(gid)) - - # create a new PersonRef, and assign the handle, add the - # PersonRef to the active person - - ref = RelLib.PersonRef() - ref.ref = handle - ignore = False - while True: - line =self.get_next() - if self.level_is_finished(line,2): - if not ignore: - state.person.add_person_ref(ref) - break - elif line.token == TOKEN_TYPE: - if line.data != "INDI": - ignore = True - elif line.token == TOKEN_RELA: - ref.rel = line.data - elif line.token == TOKEN_SOUR: - ref.add_source_reference(self.handle_source(line,2)) - elif line.token == TOKEN_NOTE: - note = self.parse_note(line,ref,2,"") - ref.set_note(note) - else: - self.not_recognized(2) - def func_person_alt_name(self,line,state): """ Parse a altername name, usually indicated by a AKA or _AKA @@ -2800,21 +2837,13 @@ class GedcomParser(UpdateCallback): name.set_type(RelLib.NameType.AKA) state.person.add_alternate_name(name) - # # Create a new state, and parse the remainder of the NAME level sub_state = CurrentState() sub_state.person = state.person sub_state.name = name sub_state.level = 2 - while True: - line =self.get_next() - if self.level_is_finished(line,2): - name.set_note(sub_state.get_text()) - break - else: - func = self.name_func.get(line.token,self.func_name_undefined) - func(line,sub_state) + self.parse_person_level(sub_state, self.name_parse_tbl, self.func_name_undefined) def func_person_object(self, line, state): """ @@ -2848,7 +2877,7 @@ class GedcomParser(UpdateCallback): url.set_description(title) obj.add_url(url) else: - (ok,path) = self.find_file(filename,self.dir_path) + (ok,path) = self.find_file(filename, self.dir_path) if not ok: self.warn(_("Could not import %s") % filename) path = filename.replace('\\',os.path.sep) @@ -2877,78 +2906,6 @@ class GedcomParser(UpdateCallback): def func_person_rnote(self,line,state): self.note = self.parse_note(line,self.person,1,state.note) - def func_person_fams(self,line,state): - """ - n FAMS @@ {1:1} p.* - +1 <> {0:M} p.* - """ - handle = self.find_family_handle(self.extract_gramps_id(line.data)) - state.person.add_family_handle(handle) - state.add_to_note(self.parse_optional_note(2)) - - def func_person_famc(self, line, state): - """ - n FAMC @@ {1:1} - +1 PEDI {0:M} p.* - +1 <> {0:M} p.* - - Handles the parsing of the FAMC line, which indicates which family the - person is a child of. - """ - - ftype = _TYPE_BIRTH - notelist = [] - gid = self.extract_gramps_id(line.data) - handle = self.find_family_handle(gid) - - while True: - line = self.get_next() - if self.level_is_finished(line, state.level+1): - break - elif line.token == TOKEN_PEDI: - ftype = pedi_type.get(line.data.lower(),RelLib.ChildRefType.UNKNOWN) - elif line.token == TOKEN_SOUR: - source_ref = self.handle_source(line,state.level+1) - person.primary_name.add_source_reference(source_ref) - elif line.token == TOKEN__PRIMARY: - pass #type = line.token - elif line.token == TOKEN_NOTE: - if not line.data.strip() or line.data and line.data[0] != "@": - famc_note = line.data - self.parse_note_data(state.level+1) - else: - self.ignore_sub_junk(state.level+1) - else: - self.not_recognized(state.level+1) - - for f in self.person.get_parent_family_handle_list(): - if f[0] == handle: - break - else: - if int(ftype) in rel_types: - state.person.add_parent_family_handle(handle) - else: - if state.person.get_main_parents_family_handle() == handle: - state.person.set_main_parent_family_handle(None) - state.person.add_parent_family_handle(handle) - - # search childrefs - family = self.db.find_family_from_handle(handle, self.trans) - family.set_gramps_id(gid) - - for ref in family.get_child_ref_list(): - if ref.ref == state.person.handle: - ref.set_mother_relation(ftype) - ref.set_father_relation(ftype) - break - else: - ref = RelLib.ChildRef() - ref.ref = state.person.handle - ref.set_mother_relation(ftype) - ref.set_father_relation(ftype) - family.add_child_ref(ref) - self.db.commit_family(family, self.trans) - def func_person_addr(self,line,state): """ Parses the Address structure by calling parse_address. @@ -2969,7 +2926,7 @@ class GedcomParser(UpdateCallback): event_ref = RelLib.EventRef() event.set_gramps_id(self.emapper.find_next()) event.set_type(RelLib.EventType.NOB_TITLE) - self.parse_event_detail(event_ref, event, self.generic_event_map, 2) + self.parse_event_detail(event_ref, event, self.event_parse_tbl, 2) person_event_name(event,state.person) self.db.add_event(event, self.trans) @@ -2994,7 +2951,7 @@ class GedcomParser(UpdateCallback): return event_ref def func_person_sour(self,line,state): - source_ref = self.handle_source(line,2) + source_ref = self.handle_source(line, state.level+1) state.person.add_source_reference(source_ref) def func_person_refn(self,line,state): @@ -3012,7 +2969,7 @@ class GedcomParser(UpdateCallback): def func_person_event(self, line, state): event_ref = self._build_event_pair(state, RelLib.EventType.CUSTOM, - self.generic_event_map, line.data) + self.event_parse_tbl, line.data) state.person.add_event_ref(event_ref) #------------------------------------------------------------------------- @@ -3063,8 +3020,18 @@ class GedcomParser(UpdateCallback): def func_name_surn(self,line,state): state.name.set_surname(line.data.strip()) - def func_name_marnm(self,line,state): - self.parse_marnm(state.person,line.data.strip()) + def func_name_marnm(self, line, state): + text = line.data.strip() + data = text.split() + if len(data) == 1: + name = RelLib.Name(person.primary_name) + name.set_surname(data[0].strip()) + name.set_type(RelLib.NameType.MARRIED) + state.person.add_alternate_name(name) + elif len(data) > 1: + name = self.parse_name_personal(text) + name.set_type(RelLib.NameType.MARRIED) + state.person.add_alternate_name(name) def func_name_nsfx(self,line,state): if state.name.get_suffix() == "": @@ -3105,7 +3072,7 @@ class GedcomParser(UpdateCallback): if self.level_is_finished(line, 1): break else: - func = self.repo_func.get(line.token,self.func_repo_ignore) + func = self.repo_parse_tbl.get(line.token,self.func_repo_ignore) func(line, repo, 1) def func_repo_name(self, line, repo, level): @@ -3169,6 +3136,132 @@ class GedcomParser(UpdateCallback): repo.add_address(addr) + def parse_source(self, name, level): + """ + n @@ SOUR {1:1} + +1 DATA {0:1} + +2 EVEN {0:M} + +3 DATE {0:1} + +3 PLAC {0:1} + +2 AGNC {0:1} + +2 <> {0:M} + +1 AUTH {0:1} + +1 TITL {0:1} + +1 ABBR {0:1} + +1 PUBL {0:1} + +1 TEXT {0:1} + +1 <> {0:1} + +1 <> {0:M} + +1 <> {0:M} + +1 REFN {0:M} + +2 TYPE {0:1} + +1 RIN {0:1} + +1 <> {0:1} + """ + + self.source = self.find_or_create_source(name) + self.source.set_title("No title - ID %s" % self.source.get_gramps_id()) + + while True: + line =self.get_next() + if self.level_is_finished(line, level): + break + else: + func = self.source_func.get(line.token, self.func_source_undef) + func(line, self.source, level) + + self.db.commit_source(self.source, self.trans) + + def func_source_undef(self, line, source, level): + self.not_recognized(level+1) + + def func_source_ignore(self, line, source, level): + self.ignore_sub_junk(level+1) + + def func_source_repo(self, line, source, level): + if line.data and line.data[0] == '@': + gid = line.data.strip()[1:-1] + repo = self.find_or_create_repository(gid) + else: + gid = self.repo2id.get(line.data) + repo = self.find_or_create_repository(gid) + self.repo2id[line.data] = repo.get_gramps_id() + repo.set_name(line.data) + self.db.commit_repository(repo, self.trans) + repo_ref = RelLib.RepoRef() + repo_ref.set_reference_handle(repo.handle) + self.parse_repo_ref(line,repo_ref,level+1) + source.add_repo_reference(repo_ref) + + def func_source_abbr(self, line, source, level): + source.set_abbreviation(line.data) + + def func_source_agnc(self, line, source, level): + a = RelLib.Attribute() + a.set_type(RelLib.AttributeType.AGENCY) + a.set_value(line.data) + source.add_attribute(a) + + def func_source_text(self, line, source, level): + source.set_note(line.data) + + def func_source_note(self, line, source, level): + note = self.parse_note(line, source, level+1, '') + source.set_note(note) + + def func_source_auth(self, line, source, level): + source.set_author(line.data) + + def func_source_publ(self, line, source, level): + source.set_publication_info(line.data) + + def func_source_title(self, line, source, level): + title = line.data + title = title.replace('\n',' ') + source.set_title(title) + + def func_source_taxt_peri(self, line, source, level): + if source.get_title() == "": + source.set_title(line.data.replace('\n',' ')) + + def func_obje_form(self, line, media, level): + self.ignore_sub_junk(level+1) + + def func_obje_file(self, line, media, level): + (ok, filename) = self.find_file(line.data, self.dir_path) + if not ok: + self.warn(_("Could not import %s") % filename[0]) + path = filename[0].replace('\\',os.path.sep) + media.set_path(path) + media.set_mime_type(Mime.get_type(path)) + if not media.get_description(): + media.set_description(path) + + def func_obje_ignore(self, line, media, level): + self.ignore_sub_junk(level+1) + + def func_obje_title(self, line, media, level): + media.set_description(line.data) + + def func_obje_note(self, line, media, level): + note = self.parse_note(line, media, level+1, '') + media.set_note(note) + + def func_obje_blob(self, line, media, level): + self.ignore_sub_junk(level+1) + + def func_obje_refn(self, line, media, level): + self.ignore_sub_junk(level+1) + + def func_obje_type(self, line, media, level): + self.ignore_sub_junk(level+1) + + def func_obje_rin(self, line, media, level): + self.ignore_sub_junk(level+1) + + def func_obje_chan(self, line, media, level): + self.ignore_sub_junk(level+1) + def skip_record(self,line,state): self.ignore_sub_junk(2) diff --git a/src/Merge/_MergePlace.py b/src/Merge/_MergePlace.py index c5887836a..2b80a57e0 100644 --- a/src/Merge/_MergePlace.py +++ b/src/Merge/_MergePlace.py @@ -134,7 +134,7 @@ class MergePlaces(ManagedWindow.ManagedWindow): # Copy sources from P2 to P1 for source in self.p2.get_source_references(): - self.p1.add_source(source) + self.p1.add_source_reference(source) # Add notes from P2 to P1 if self.note_conflict: