gedcom 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -0
- data/Manifest.txt +74 -0
- data/README.txt +129 -0
- data/Rakefile +13 -0
- data/lib/gedcom.rb +105 -0
- data/lib/gedcom/address_record.rb +77 -0
- data/lib/gedcom/adoption_record.rb +57 -0
- data/lib/gedcom/association_record.rb +79 -0
- data/lib/gedcom/cause_record.rb +45 -0
- data/lib/gedcom/change_date_record.rb +39 -0
- data/lib/gedcom/character_set_record.rb +41 -0
- data/lib/gedcom/citation_data_record.rb +49 -0
- data/lib/gedcom/citation_event_type_record.rb +42 -0
- data/lib/gedcom/corporate_record.rb +36 -0
- data/lib/gedcom/date_record.rb +206 -0
- data/lib/gedcom/encoded_line_record.rb +34 -0
- data/lib/gedcom/event_age_record.rb +36 -0
- data/lib/gedcom/event_record.rb +258 -0
- data/lib/gedcom/events_list_record.rb +61 -0
- data/lib/gedcom/families_individuals.rb +79 -0
- data/lib/gedcom/family_record.rb +89 -0
- data/lib/gedcom/gedcom_all.rb +41 -0
- data/lib/gedcom/gedcom_base.rb +337 -0
- data/lib/gedcom/gedcom_record.rb +44 -0
- data/lib/gedcom/header_data_record.rb +49 -0
- data/lib/gedcom/header_record.rb +75 -0
- data/lib/gedcom/header_source_record.rb +42 -0
- data/lib/gedcom/individual_attribute_record.rb +86 -0
- data/lib/gedcom/individual_record.rb +128 -0
- data/lib/gedcom/multimedia_citation_record.rb +55 -0
- data/lib/gedcom/multimedia_record.rb +72 -0
- data/lib/gedcom/name_record.rb +58 -0
- data/lib/gedcom/note_citation_record.rb +37 -0
- data/lib/gedcom/note_record.rb +61 -0
- data/lib/gedcom/place_record.rb +46 -0
- data/lib/gedcom/refn_record.rb +32 -0
- data/lib/gedcom/repository_caln.rb +33 -0
- data/lib/gedcom/repository_citation_record.rb +43 -0
- data/lib/gedcom/repository_record.rb +41 -0
- data/lib/gedcom/source_citation_record.rb +74 -0
- data/lib/gedcom/source_record.rb +84 -0
- data/lib/gedcom/source_scope_record.rb +35 -0
- data/lib/gedcom/submission_record.rb +53 -0
- data/lib/gedcom/submitter_record.rb +53 -0
- data/lib/gedcom/text_record.rb +31 -0
- data/lib/gedcom/trailer_record.rb +22 -0
- data/lib/gedcom/transmission.rb +103 -0
- data/lib/gedcom/transmission_base.rb +267 -0
- data/lib/parser/class_tracker.rb +33 -0
- data/lib/parser/ged_line.rb +99 -0
- data/lib/parser/gedcom_parser.rb +798 -0
- data/lib/parser/instruction.rb +14 -0
- data/lib/parser/parse_state.rb +49 -0
- data/test/test_gedcom.rb +7 -0
- data/test_data/Document.RTF +1 -0
- data/test_data/Document.tex +1 -0
- data/test_data/ImgFile.BMP +0 -0
- data/test_data/ImgFile.GIF +0 -0
- data/test_data/ImgFile.JPG +0 -0
- data/test_data/ImgFile.MAC +0 -0
- data/test_data/ImgFile.PCX +0 -0
- data/test_data/ImgFile.PIC +0 -0
- data/test_data/ImgFile.PNG +0 -0
- data/test_data/ImgFile.PSD +0 -0
- data/test_data/ImgFile.TGA +0 -0
- data/test_data/ImgFile.TIF +0 -0
- data/test_data/README.txt +1 -16
- data/test_data/TGC551.ged +1 -0
- data/test_data/TGC551LF.ged +2162 -0
- data/test_data/TGC55C.ged +1 -0
- data/test_data/TGC55CLF.ged +2202 -0
- data/test_data/force.wav +0 -0
- data/test_data/suntun.mov +0 -0
- data/test_data/top.mpg +0 -0
- metadata +140 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#An inline Multimedia_record uses BLOB records to hold the data.
|
4
|
+
#This is unusual in practice, as it bloats the GEDCOM file.
|
5
|
+
#Normal practice is to reference a file or URL.
|
6
|
+
#
|
7
|
+
#=BLOB {BINARY_OBJECT}:=
|
8
|
+
# A grouping of data used as input to a multimedia system that processes binary data to represent
|
9
|
+
# images, sound, and video.
|
10
|
+
#
|
11
|
+
#=MULTIMEDIA_RECORD:=
|
12
|
+
# 0 @XREF:OBJE@ OBJE {0:M}
|
13
|
+
# ...
|
14
|
+
# n BLOB {1:1}
|
15
|
+
# +1 CONT <ENCODED_MULTIMEDIA_LINE> {1:M}
|
16
|
+
# ...
|
17
|
+
#
|
18
|
+
#The attributes are all arrays for the level +1 tags/records.
|
19
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
20
|
+
#* Those ending in _record are array of classes of that type.
|
21
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
22
|
+
class Encoded_line_record < GEDCOMBase
|
23
|
+
attr_accessor :encoded_line
|
24
|
+
|
25
|
+
ClassTracker << :Encoded_line_record
|
26
|
+
|
27
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
28
|
+
def initialize(*a)
|
29
|
+
super(*a)
|
30
|
+
@this_level = [ [:nodata, "BLOB", nil ] ]
|
31
|
+
@sub_level = [ [:blob, "CONT", :encoded_line ] ]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#HUSB and WIFE tags can have an AGE record associated with them.
|
4
|
+
#
|
5
|
+
#=FAM_RECORD:=
|
6
|
+
# 0 @<XREF:FAM>@ FAM {0:M}
|
7
|
+
# 1 <<FAMILY_EVENT_STRUCTURE>> {0:M}
|
8
|
+
# n HUSB {0:1}
|
9
|
+
# +1 AGE <AGE_AT_EVENT> {1:1} ****
|
10
|
+
# n WIFE {0:1}
|
11
|
+
# +1 AGE <AGE_AT_EVENT> {1:1} ****
|
12
|
+
# ...
|
13
|
+
#
|
14
|
+
# I also recognise notes in this record, so I can handle user tags as notes.
|
15
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
16
|
+
#
|
17
|
+
#The attributes are all arrays for the level +1 tags/records.
|
18
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
19
|
+
#* Those ending in _record are array of classes of that type.
|
20
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
21
|
+
class Event_age_record < GEDCOMBase
|
22
|
+
attr_accessor :relation, :age
|
23
|
+
attr_accessor :note_citation_record
|
24
|
+
|
25
|
+
ClassTracker << :Event_age_record
|
26
|
+
|
27
|
+
def to_gedcom(level=0)
|
28
|
+
@this_level = [ [:nodata, @relation[0], nil] ] #dynamic, so need to define after initialize method.
|
29
|
+
@sub_level = [ #level + 1
|
30
|
+
[:print, "AGE", :age],
|
31
|
+
[:walk, nil, :note_citation_record]
|
32
|
+
]
|
33
|
+
super(level)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
@@ -0,0 +1,258 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Event_record holds multiple GEDCOM event record types. The type being held in @event_type.
|
4
|
+
#
|
5
|
+
#The following are all events and are stored in an Event_record object with their Tag as the @event_type:
|
6
|
+
#
|
7
|
+
#=FAMILY_EVENT_STRUCTURE:= {0:M}
|
8
|
+
# n [ ANUL | CENS | DIV | DIVF ] [Y|<NULL>] {1:1}
|
9
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
10
|
+
# n [ ENGA | MARR | MARB | MARC ] [Y|<NULL>] {1:1}
|
11
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
12
|
+
# n [ MARL | MARS ] [Y|<NULL>] {1:1}
|
13
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
14
|
+
# n EVEN {1:1}
|
15
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
16
|
+
#
|
17
|
+
#=INDIVIDUAL_EVENT_STRUCTURE:=
|
18
|
+
# n [ BIRT | CHR ] [Y|<NULL>] {1:1}
|
19
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
20
|
+
# +1 FAMC @<XREF:FAM>@ {0:1}
|
21
|
+
# n [ DEAT | BURI | CREM ] [Y|<NULL>] {1:1}
|
22
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
23
|
+
# n ADOP [Y|<NULL>] {1:1}
|
24
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
25
|
+
# +1 FAMC @<XREF:FAM>@ {0:1}
|
26
|
+
# +2 ADOP <ADOPTED_BY_WHICH_PARENT> {0:1}
|
27
|
+
# n [ BAPM | BARM | BASM | BLES ] [Y|<NULL>] {1:1}
|
28
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
29
|
+
# n [ CHRA | CONF | FCOM | ORDN ] [Y|<NULL>] {1:1}
|
30
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
31
|
+
# n [ NATU | EMIG | IMMI ] [Y|<NULL>] {1:1}
|
32
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
33
|
+
# n [ CENS | PROB | WILL] [Y|<NULL>] {1:1}
|
34
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
35
|
+
# n [ GRAD | RETI ] [Y|<NULL>] {1:1}
|
36
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
37
|
+
# n EVEN {1:1}
|
38
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
39
|
+
#
|
40
|
+
#=LDS_INDIVIDUAL_ORDINANCE:= {0:M}
|
41
|
+
# n [ BAPL | CONL ] {1:1}
|
42
|
+
# +1 STAT <LDS_BAPTISM_DATE_STATUS> {0:1}
|
43
|
+
# +1 DATE <DATE_LDS_ORD> {0:1}
|
44
|
+
# +1 TEMP <TEMPLE_CODE> {0:1}
|
45
|
+
# +1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}
|
46
|
+
# +1 <<SOURCE_CITATION>> {0:M}
|
47
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
48
|
+
# n ENDL {1:1}
|
49
|
+
# +1 STAT <LDS_ENDOWMENT_DATE_STATUS> {0:1}
|
50
|
+
# +1 DATE <DATE_LDS_ORD> {0:1}
|
51
|
+
# +1 TEMP <TEMPLE_CODE> {0:1}
|
52
|
+
# +1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}
|
53
|
+
# +1 <<SOURCE_CITATION>> {0:M}
|
54
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
55
|
+
# n SLGC {1:1}
|
56
|
+
# +1 STAT <LDS_CHILD_SEALING_DATE_STATUS> {0:1}
|
57
|
+
# +1 DATE <DATE_LDS_ORD> {0:1}
|
58
|
+
# +1 TEMP <TEMPLE_CODE> {0:1}
|
59
|
+
# +1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}
|
60
|
+
# +1 FAMC @<XREF:FAM>@ {1:1}
|
61
|
+
# +1 <<SOURCE_CITATION>> {0:M}
|
62
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
63
|
+
#
|
64
|
+
#=LDS_SPOUSE_SEALING:=
|
65
|
+
# n SLGS {1:1}
|
66
|
+
# +1 STAT <LDS_SPOUSE_SEALING_DATE_STATUS> {0:1}
|
67
|
+
# +1 DATE <DATE_LDS_ORD> {0:1}
|
68
|
+
# +1 TEMP <TEMPLE_CODE> {0:1}
|
69
|
+
# +1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}
|
70
|
+
# +1 <<SOURCE_CITATION>> {0:M}
|
71
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
72
|
+
#
|
73
|
+
# The EVEN tag in this structure is for recording general events or attributes that are not shown in the
|
74
|
+
# above <<INDIVIDUAL_EVENT_STRUCTURE>>. The general event or attribute type is declared
|
75
|
+
# by using a subordinate TYPE tag to show what event or attribute is recorded. For example, a
|
76
|
+
# candidate for state senate in the 1952 election could be recorded:
|
77
|
+
# 1 EVEN
|
78
|
+
# 2 TYPE Election
|
79
|
+
# 2 DATE 07 NOV 1952
|
80
|
+
# 2 NOTE Candidate for State Senate.
|
81
|
+
#
|
82
|
+
# The TYPE tag is also optionally used to modify the basic understanding of its superior event and is
|
83
|
+
# usually provided by the user. For example:
|
84
|
+
# 1 ORDN
|
85
|
+
# 2 TYPE Deacon
|
86
|
+
#
|
87
|
+
# The presence of a DATE tag and/or PLACe tag makes the assertion of when and/or where the event
|
88
|
+
# took place, and therefore that the event did happen. The absence of both of these tags require a
|
89
|
+
# Y(es) value on the parent TAG line to assert that the event happened. Using this convention protects
|
90
|
+
# GEDCOM processors which may remove (prune) lines that have no value and no subordinate lines.
|
91
|
+
# It also allows a note or source to be attached to the event context without implying that the event
|
92
|
+
# occurred.
|
93
|
+
#
|
94
|
+
# It is not proper to use a N(o) value with an event tag to infer that it did not happen. Inferring that an
|
95
|
+
# event did not occur would require a different tag. A symbol such as using an exclamation mark (!)
|
96
|
+
# preceding an event tag to indicate an event is known not to have happened may be defined in the future.
|
97
|
+
#
|
98
|
+
#=EVENT_DETAIL:= (These all get included in the Event_record as attributes)
|
99
|
+
# n TYPE <EVENT_DESCRIPTOR> {0:1}
|
100
|
+
# n DATE <DATE_VALUE> {0:1}
|
101
|
+
# n <<PLACE_STRUCTURE>> {0:1}
|
102
|
+
# n <<ADDRESS_STRUCTURE>> {0:1}
|
103
|
+
# n AGE <AGE_AT_EVENT> {0:1}
|
104
|
+
# n AGNC <RESPONSIBLE_AGENCY> {0:1}
|
105
|
+
# n CAUS <CAUSE_OF_EVENT> {0:1}
|
106
|
+
# n <<SOURCE_CITATION>> {0:M}
|
107
|
+
# n <<MULTIMEDIA_LINK>> {0:M}
|
108
|
+
# n <<NOTE_STRUCTURE>> {0:M}
|
109
|
+
#
|
110
|
+
#==AGE_AT_EVENT:= {Size=1:12}
|
111
|
+
# [ < | > | <NULL>] YYy MMm DDDd | YYy | MMm | DDDd | YYy MMm | YYy DDDd | MMm DDDd | CHILD | INFANT | STILLBORN
|
112
|
+
#
|
113
|
+
# Where:
|
114
|
+
# >:: greater than indicated age
|
115
|
+
# <:: less than indicated age
|
116
|
+
# y:: a label indicating years
|
117
|
+
# m:: a label indicating months
|
118
|
+
# d:: a label indicating days
|
119
|
+
# YY:: number of full years
|
120
|
+
# MM:: number of months
|
121
|
+
# DDD:: number of days
|
122
|
+
# CHILD:: age < 8 years
|
123
|
+
# INFANT:: age < 1 year
|
124
|
+
# STILLBORN:: died just prior, at, or near birth, 0 years
|
125
|
+
#
|
126
|
+
# A number that indicates the age in years, months, and days that the principal was at the time of the
|
127
|
+
# associated event. Any labels must come after their corresponding number, for example; 4y 8m 10d.
|
128
|
+
#
|
129
|
+
#==EVENT_DESCRIPTOR:= {Size=1:90}
|
130
|
+
# A descriptor that should be used whenever the EVEN tag is used to define the event being cited. For
|
131
|
+
# example, if the event was a purchase of a residence, the EVEN tag would be followed by a
|
132
|
+
# subordinate TYPE tag with the value "Purchased Residence." Using this descriptor with any of the
|
133
|
+
# other defined event tags basically classifies the basic definition of the associated tag but does not
|
134
|
+
# change its basic process. The form of using the TYPE tag with defined event tags has not been used
|
135
|
+
# by very many products. The MARR tag could be subordinated with a TYPE tag and
|
136
|
+
# EVENT_DESCRIPTOR value of Common Law. Other possible descriptor values might include
|
137
|
+
# "Childbirth—unmarried," "Common Law," or "Tribal Custom," for example. The event descriptor
|
138
|
+
# should use the same word or phrase and in the same language, when possible, as was used by the
|
139
|
+
# recorder of the event. Systems that display data from the GEDCOM form should be able to display the
|
140
|
+
# descriptor value in their screen or printed output.
|
141
|
+
#
|
142
|
+
#==RESPONSIBLE_AGENCY:= {Size=1:120}
|
143
|
+
# The organization, institution, corporation, person, or other entity that has authority or control
|
144
|
+
# interests in the associated context. For example, an employer of a person of an associated occupation,
|
145
|
+
# or a church that administered rites or events, or an organization responsible for creating and/or
|
146
|
+
# archiving records.
|
147
|
+
#
|
148
|
+
#==CAUSE_OF_EVENT:= {Size=1:90}
|
149
|
+
# Used in special cases to record the reasons which precipitated an event. Normally this will be used
|
150
|
+
# subordinate to a death event to show cause of death, such as might be listed on a death certificate.
|
151
|
+
#
|
152
|
+
#The attributes are all arrays for the level +1 tags/records.
|
153
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
154
|
+
#* Those ending in _record are array of classes of that type.
|
155
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
156
|
+
class Event_record < GEDCOMBase
|
157
|
+
attr_accessor :restriction #not standard at the event level, but we might want this in DB.
|
158
|
+
attr_accessor :event_type, :event_descriptor
|
159
|
+
attr_accessor :event_status, :date_record, :phonenumber, :place_record, :address_record, :age
|
160
|
+
attr_accessor :agency, :cause_record, :source_citation_record, :submitter_ref
|
161
|
+
attr_accessor :multimedia_citation_record, :note_citation_record, :event_age_record, :adoption_record
|
162
|
+
attr_accessor :lds_temp_code, :lds_date_status, :lds_slgc_family_ref
|
163
|
+
|
164
|
+
ClassTracker << :Event_record
|
165
|
+
|
166
|
+
def initialize(*a)
|
167
|
+
super(*a)
|
168
|
+
@sub_level = [ #level + 1
|
169
|
+
[:print, "RESN", :restriction],
|
170
|
+
[:print, "TYPE", :event_descriptor],
|
171
|
+
[:print, "STAT", :lds_date_status],
|
172
|
+
[:walk, nil, :cause_record],
|
173
|
+
[:walk, nil, :date_record],
|
174
|
+
[:print, "TEMP", :lds_temp_code],
|
175
|
+
[:walk, nil, :place_record],
|
176
|
+
[:walk, nil, :address_record],
|
177
|
+
[:print, "PHON", :phonenumber],
|
178
|
+
[:print, "AGE", :age],
|
179
|
+
[:walk, nil, :event_age_record],
|
180
|
+
[:print, "AGNC", :agency],
|
181
|
+
[:walk, nil, :multimedia_citation_record],
|
182
|
+
[:walk, nil, :source_citation_record],
|
183
|
+
[:walk, nil, :note_citation_record],
|
184
|
+
[:xref, "SUBM", :submitter_ref],
|
185
|
+
[:walk, nil, :adoption_record],
|
186
|
+
[:xref, "FAMC", :lds_slgc_family_ref],
|
187
|
+
]
|
188
|
+
end
|
189
|
+
|
190
|
+
def to_gedcom(level=0)
|
191
|
+
tag = event_tag(@event_type[0].to_s)
|
192
|
+
|
193
|
+
# print "'#{@event_type}' '#{@event_descriptor}' => #{tag}\n"
|
194
|
+
if @event_status != nil && @event_status[0] != nil && @event_status[0][0] != nil
|
195
|
+
@this_level = [ [:print, tag, :event_status] ]
|
196
|
+
else
|
197
|
+
@this_level = [ [:nodata, tag, nil] ]
|
198
|
+
end
|
199
|
+
super(level)
|
200
|
+
end
|
201
|
+
|
202
|
+
def event_tag(tag)
|
203
|
+
case tag
|
204
|
+
when "ANUL" then tag
|
205
|
+
when "CENS" then tag
|
206
|
+
when "DIV" then tag
|
207
|
+
when "DIVF" then tag
|
208
|
+
when "ENGA" then tag
|
209
|
+
when "MARR" then tag
|
210
|
+
when "MARB" then tag
|
211
|
+
when "MARC" then tag
|
212
|
+
when "MARL" then tag
|
213
|
+
when "MARS" then tag
|
214
|
+
when "EVEN" then tag
|
215
|
+
when "RESI" then tag
|
216
|
+
when "SLGS" then tag
|
217
|
+
when "BIRT" then tag
|
218
|
+
when "CHR" then tag
|
219
|
+
when "ADOP" then tag
|
220
|
+
when "DEAT" then tag
|
221
|
+
when "BURI" then tag
|
222
|
+
when "CREM" then tag
|
223
|
+
when "BAPM" then tag
|
224
|
+
when "BARM" then tag
|
225
|
+
when "BASM" then tag
|
226
|
+
when "BLES" then tag
|
227
|
+
when "CHRA" then tag
|
228
|
+
when "CONF" then tag
|
229
|
+
when "FCOM" then tag
|
230
|
+
when "ORDN" then tag
|
231
|
+
when "NATU" then tag
|
232
|
+
when "EMIG" then tag
|
233
|
+
when "IMMI" then tag
|
234
|
+
when "CENS" then tag
|
235
|
+
when "PROB" then tag
|
236
|
+
when "WILL" then tag
|
237
|
+
when "GRAD" then tag
|
238
|
+
when "RETI" then tag
|
239
|
+
when "BAPL" then tag
|
240
|
+
when "CONL" then tag
|
241
|
+
when "ENDL" then tag
|
242
|
+
when "SLGC" then tag
|
243
|
+
else "EVEN"
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def is_event(tag)
|
248
|
+
@event_type.to_s == tag
|
249
|
+
end
|
250
|
+
|
251
|
+
def date
|
252
|
+
if @date_record != nil
|
253
|
+
@date_record[0].date
|
254
|
+
else
|
255
|
+
nil
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#The SOURCE_RECORD's DATA tag has an EVEN record, which differs from the
|
4
|
+
#family or individual EVEN record type. It is a list of events that this
|
5
|
+
#source has data on, not the record of actual events.
|
6
|
+
#
|
7
|
+
#=SOURCE_RECORD:=
|
8
|
+
# 0 @<XREF:SOUR>@ SOUR {0:M}
|
9
|
+
# +1 DATA {0:1}
|
10
|
+
# +2 EVEN <EVENTS_RECORDED> {0:M} **This one**
|
11
|
+
# +3 DATE <DATE_PERIOD> {0:1}
|
12
|
+
# +3 PLAC <SOURCE_JURISDICTION_PLACE> {0:1}
|
13
|
+
# ...
|
14
|
+
# I also recognise notes in this record, so I can handle user tags as notes.
|
15
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
16
|
+
#
|
17
|
+
#==EVENTS_RECORDED:= {Size=1:90}
|
18
|
+
# [<EVENT_ATTRIBUTE_TYPE> |
|
19
|
+
# <EVENTS_RECORDED>, <EVENT_ATTRIBUTE_TYPE>]
|
20
|
+
# An enumeration of the different kinds of events that were recorded in a particular source. Each
|
21
|
+
# enumeration is separated by a comma. Such as a parish register of births, deaths, and marriages would
|
22
|
+
# be BIRT, DEAT, MARR.
|
23
|
+
#
|
24
|
+
#==SOURCE_JURISDICTION_PLACE:= {Size=1:120}
|
25
|
+
# <PLACE_VALUE>
|
26
|
+
# The name of the lowest jurisdiction that encompasses all lower-level places named in this source. For
|
27
|
+
# example, "Oneida, Idaho" would be used as a source jurisdiction place for events occurring in the
|
28
|
+
# various towns within Oneida County. "Idaho" would be the source jurisdiction place if the events
|
29
|
+
# recorded took place in other counties as well as Oneida County.
|
30
|
+
#
|
31
|
+
#==DATE_PERIOD:= {Size=7:35}
|
32
|
+
# FROM <DATE> |
|
33
|
+
# TO <DATE> |
|
34
|
+
# FROM <DATE> TO <DATE>
|
35
|
+
#
|
36
|
+
# Where:
|
37
|
+
# FROM = Indicates the beginning of a happening or state.
|
38
|
+
# TO = Indicates the ending of a happening or state.
|
39
|
+
#
|
40
|
+
#The attributes are all arrays for the level +1 tags/records.
|
41
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
42
|
+
#* Those ending in _record are array of classes of that type.
|
43
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
44
|
+
class Events_list_record < GEDCOMBase
|
45
|
+
attr_accessor :recorded_events, :date_period, :place_record
|
46
|
+
attr_accessor :note_citation_record
|
47
|
+
|
48
|
+
ClassTracker << :Events_list_record
|
49
|
+
|
50
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
51
|
+
def initialize(*a)
|
52
|
+
super(*a)
|
53
|
+
@this_level = [ [:print, "EVEN", :recorded_events] ]
|
54
|
+
@sub_level = [ #level + 1
|
55
|
+
[:print, "DATE", :date_period],
|
56
|
+
[:walk, nil, :place_record],
|
57
|
+
[:walk, nil, :note_citation_record],
|
58
|
+
]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Family_individuals hold the FAMC and FAMS relationship between Individual_record and Family_record.
|
4
|
+
#
|
5
|
+
#=CHILD_TO_FAMILY_LINK:= (Identifies the family in which an individual appears as a child.)
|
6
|
+
# n FAMC @<XREF:FAM>@ {0:1}
|
7
|
+
# +1 PEDI <PEDIGREE_LINKAGE_TYPE> {0:M}
|
8
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
9
|
+
#
|
10
|
+
#=SPOUSE_TO_FAMILY_LINK:= (Identifies the family in which an individual appears as a spouse.)
|
11
|
+
# n FAMS @<XREF:FAM>@ {0:1}
|
12
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
13
|
+
#
|
14
|
+
#==PEDIGREE_LINKAGE_TYPE:= {Size=5:7}
|
15
|
+
# adopted | birth | foster | sealing
|
16
|
+
#
|
17
|
+
# A code used to indicate the child to family relationship for pedigree navigation purposes.
|
18
|
+
# Where:
|
19
|
+
# adopted:: indicates adoptive parents.
|
20
|
+
# birth:: indicates birth parents.
|
21
|
+
# foster:: indicates child was included in a foster or guardian family.
|
22
|
+
# sealing:: indicates child was sealed to parents other than birth parents.
|
23
|
+
#
|
24
|
+
# The normal lineage links are shown through the use of pointers from the individual to a family
|
25
|
+
# through either the FAMC tag or the FAMS tag. The FAMC tag provides a pointer to a family where
|
26
|
+
# this person is a child. The FAMS tag provides a pointer to a family where this person is a spouse or
|
27
|
+
# parent. The <<CHILD_TO_FAMILY_LINK>> (see page 27) structure contains a FAMC pointer
|
28
|
+
# which is required to show any child to parent linkage for pedigree navigation. The
|
29
|
+
# <<CHILD_TO_FAMILY_LINK>> structure also indicates whether the pedigree link represents a
|
30
|
+
# birth lineage, an adoption lineage, or a sealing lineage.
|
31
|
+
#
|
32
|
+
# Linkage between a child and the family they belonged to at the time of an event can also optionally
|
33
|
+
# be shown by a FAMC pointer subordinate to the appropriate event. For example, a FAMC pointer
|
34
|
+
# subordinate to an adoption event would show which family adopted this individual. Biological parent
|
35
|
+
# or parents can be indicated by a FAMC pointer subordinate to the birth event. The FAMC tag can
|
36
|
+
# also optionally be used subordinate to an ADOPtion, or BIRTh event to differentiate which set of
|
37
|
+
# parents were related by adoption, sealing, or birth.
|
38
|
+
#
|
39
|
+
#The attributes are all arrays for the level +1 tags/records.
|
40
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
41
|
+
#* Those ending in _record are array of classes of that type.
|
42
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
43
|
+
class Families_individuals < GEDCOMBase
|
44
|
+
attr_accessor :relationship_type, :parents_family_ref, :family_ref, :pedigree
|
45
|
+
attr_accessor :note_citation_record
|
46
|
+
attr_accessor :source_citation_record #Only for FAMS (where did I get this idea from ?)
|
47
|
+
|
48
|
+
ClassTracker << :Families_individuals
|
49
|
+
|
50
|
+
def to_gedcom(level=0)
|
51
|
+
@this_level = [ [:xref, @relationship_type[0], :family_ref],
|
52
|
+
[:xref, @relationship_type[0], :parents_family_ref]
|
53
|
+
]
|
54
|
+
@sub_level = [ #level 1
|
55
|
+
[:print, "PEDI", :pedigree ], #Only for FAMC
|
56
|
+
[:walk, nil, :source_citation_record ], #Only for FAMS (where did I get this idea from ?)
|
57
|
+
[:walk, nil, :note_citation_record ]
|
58
|
+
]
|
59
|
+
super(level)
|
60
|
+
end
|
61
|
+
|
62
|
+
def parents_family
|
63
|
+
if @parents_family_ref != nil
|
64
|
+
find(:family, @parents_family_ref[0])
|
65
|
+
else
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def own_family
|
71
|
+
if @family_ref != nil
|
72
|
+
find(:family, @family_ref[0])
|
73
|
+
else
|
74
|
+
nil
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|