gedcom - reader_test.go
1 package gedcom_test
2
3 import (
4 "fmt"
5 "io"
6 "strings"
7
8 "vimagination.zapto.org/gedcom"
9 )
10
11 func ExampleNewReader() {
12 const gedcomFile = `0 HEAD
13 1 SOUR Text
14 2 VERS 1.0
15 1 FILE TestFile
16 1 SUBM Unknown
17 1 GEDC
18 2 VERS 5.5
19 2 FORM LINEAGE-LINKED
20 1 CHAR UNICODE
21 0 @SUBM@ SUBM
22 0 @I1@ INDI
23 1 SEX F
24 1 NAME Jo /Wilby/
25 1 FAMS @F1@
26 0 @I2@ INDI
27 1 SEX M
28 1 NAME Fred /Bloggs/
29 1 FAMS @F1@
30 0 @I3@ INDI
31 1 SEX M
32 1 NAME Jack /Bloggs/
33 1 FAMC @F1@
34 1 FAMS @F2@
35 0 @I4@ INDI
36 1 SEX F
37 1 NAME Linda /Burrows/
38 1 FAMS @F2@
39 0 @I5@ INDI
40 1 SEX F
41 1 NAME Katie /Bloggs/
42 1 FAMC @F3@
43 0 @F1@ FAM
44 1 HUSB @I2@
45 1 WIFE @I1@
46 1 CHIL @I3@
47 0 @F2@ FAM
48 1 HUSB @I3@
49 1 WIFE @I4@
50 1 CHIL @I5@
51 0 TRLR
52 `
53 g := gedcom.NewReader(strings.NewReader(gedcomFile))
54 for {
55 r, err := g.Record()
56 if err != nil {
57 if err != io.EOF {
58 fmt.Println("Error:", err)
59 }
60 break
61 }
62 switch r := r.(type) {
63 case *gedcom.Header:
64 fmt.Println("Filename:", r.FileName)
65 case *gedcom.Individual:
66 fmt.Printf("Person (%s):\n", r.ID)
67 for i, name := range r.PersonalNameStructure {
68 fmt.Printf(" Name %d: %s\n", i+1, name.NamePersonal)
69 }
70 case *gedcom.Family:
71 fmt.Printf("Family (%s):\n", r.ID)
72 fmt.Println(" Father/Husband:", r.Husband)
73 fmt.Println(" Mother/Wife:", r.Wife)
74 for i, child := range r.Children {
75 fmt.Printf(" Child %d: %s\n", i+1, child)
76 }
77 }
78 }
79 // Output:
80 // Filename: TestFile
81 // Person (I1):
82 // Name 1: Jo /Wilby/
83 // Person (I2):
84 // Name 1: Fred /Bloggs/
85 // Person (I3):
86 // Name 1: Jack /Bloggs/
87 // Person (I4):
88 // Name 1: Linda /Burrows/
89 // Person (I5):
90 // Name 1: Katie /Bloggs/
91 // Family (F1):
92 // Father/Husband: I2
93 // Mother/Wife: I1
94 // Child 1: I3
95 // Family (F2):
96 // Father/Husband: I3
97 // Mother/Wife: I4
98 // Child 1: I5
99 }
100