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,44 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Internal representation of the GEDCOM GEDC record type in a HEAD record.
|
4
|
+
#
|
5
|
+
#=HEADER:=
|
6
|
+
# n HEAD {1:1}
|
7
|
+
# ...
|
8
|
+
# +1 GEDC {1:1}
|
9
|
+
# +2 VERS <VERSION_NUMBER> {1:1}
|
10
|
+
# +2 FORM <GEDCOM_FORM> {1:1}
|
11
|
+
# ...
|
12
|
+
#
|
13
|
+
#==VERSION_NUMBER:=
|
14
|
+
# An identifier that represents the version level
|
15
|
+
# changed by the creators of the product.
|
16
|
+
#
|
17
|
+
#==GEDCOM_FORM:= {Size=14:20}
|
18
|
+
# [ LINEAGE-LINKED ]
|
19
|
+
# The GEDCOM form used to construct this transmission. There maybe other forms used such as
|
20
|
+
# CommSoft's "EVENT_LINEAGE_LINKED" but these specifications define only the LINEAGELINKED
|
21
|
+
# Form. Systems will use this value to specify GEDCOM compatible with these
|
22
|
+
# specifications.
|
23
|
+
#
|
24
|
+
#The attributes are all arrays for the level +1 tags/records.
|
25
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
26
|
+
#* Those ending in _record are array of classes of that type.
|
27
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
28
|
+
class Gedcom_record < GEDCOMBase
|
29
|
+
attr_accessor :version, :encoding_format
|
30
|
+
attr_accessor :note_citation_record
|
31
|
+
|
32
|
+
ClassTracker << :Gedcom_record
|
33
|
+
|
34
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
35
|
+
def initialize(*a)
|
36
|
+
super(*a)
|
37
|
+
@this_level = [ [:nodata, "GEDC", nil] ]
|
38
|
+
@sub_level = [ #level + 1
|
39
|
+
[ :print, "VERS", :version],
|
40
|
+
[ :print, "FORM", :encoding_format],
|
41
|
+
[ :walk, nil, :note_citation_record],
|
42
|
+
]
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Internal representation of the GEDCOM DATA in a SOUR record in a level 0 HEAD record type
|
4
|
+
#This is not the same record type as DATA tags in level 0 SOUR record.
|
5
|
+
#
|
6
|
+
#=HEADER:=
|
7
|
+
# n HEAD {1:1}
|
8
|
+
# +1 SOUR <APPROVED_SYSTEM_ID> {1:1}
|
9
|
+
# ...
|
10
|
+
# +2 DATA <NAME_OF_SOURCE_DATA> {0:1}
|
11
|
+
# +3 DATE <PUBLICATION_DATE> {0:1}
|
12
|
+
# +3 COPR <COPYRIGHT_SOURCE_DATA> {0:1}
|
13
|
+
# ...
|
14
|
+
# ...
|
15
|
+
#==NAME_OF_SOURCE_DATA:= {Size=1:90}
|
16
|
+
# The name of the electronic data source that was used to obtain the data in this transmission. For
|
17
|
+
# example, the data may have been obtained from a CD-ROM disc that was named "U.S. 1880
|
18
|
+
# CENSUS CD-ROM vol. 13."
|
19
|
+
#
|
20
|
+
#==PUBLICATION_DATE:= {Size=10:11}
|
21
|
+
# <DATE_EXACT>:= <DAY> <MONTH> <YEAR_GREG> {Size=10:11}
|
22
|
+
# The date this source was published or created.
|
23
|
+
#
|
24
|
+
#==COPYRIGHT_SOURCE_DATA:= {Size=1:90}
|
25
|
+
# A copyright statement required by the owner of data from which this information was down- loaded.
|
26
|
+
# For example, when a GEDCOM down-load is requested from the Ancestral File, this would be the
|
27
|
+
# copyright statement to indicate that the data came from a copyrighted source.
|
28
|
+
#
|
29
|
+
#The attributes are all arrays for the level +1 tags/records.
|
30
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
31
|
+
#* Those ending in _record are array of classes of that type.
|
32
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
33
|
+
class Header_data_record < GEDCOMBase
|
34
|
+
attr_accessor :data_source, :date, :copyright
|
35
|
+
attr_accessor :note_citation_record
|
36
|
+
|
37
|
+
ClassTracker << :Header_data_record
|
38
|
+
|
39
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
40
|
+
def initialize(*a)
|
41
|
+
super(*a)
|
42
|
+
@this_level = [ [:print, "DATA", :data_source] ]
|
43
|
+
@sub_level = [ #level + 1
|
44
|
+
[:print, "DATE", :date],
|
45
|
+
[:print, "COPR", :copyright],
|
46
|
+
[:walk, nil, :note_citation_record],
|
47
|
+
]
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Internal representation of the GEDCOM level 0 HEAD record type
|
4
|
+
#
|
5
|
+
#=HEADER:=
|
6
|
+
# n HEAD {1:1}
|
7
|
+
# +1 SOUR <APPROVED_SYSTEM_ID> {1:1}
|
8
|
+
# +2 VERS <VERSION_NUMBER> {0:1}
|
9
|
+
# +2 NAME <NAME_OF_PRODUCT> {0:1}
|
10
|
+
# +2 CORP <NAME_OF_BUSINESS> {0:1}
|
11
|
+
# +3 <<ADDRESS_STRUCTURE>> {0:1}
|
12
|
+
# +2 DATA <NAME_OF_SOURCE_DATA> {0:1}
|
13
|
+
# +3 DATE <PUBLICATION_DATE> {0:1}
|
14
|
+
# +3 COPR <COPYRIGHT_SOURCE_DATA> {0:1}
|
15
|
+
# +1 DEST <RECEIVING_SYSTEM_NAME> {0:1} (See NOTE below)
|
16
|
+
# +1 DATE <TRANSMISSION_DATE> {0:1}
|
17
|
+
# +2 TIME <TIME_VALUE> {0:1}
|
18
|
+
# +1 SUBM @XREF:SUBM@ {1:1}
|
19
|
+
# +1 SUBN @XREF:SUBN@ {0:1}
|
20
|
+
# +1 FILE <FILE_NAME> {0:1}
|
21
|
+
# +1 COPR <COPYRIGHT_GEDCOM_FILE> {0:1}
|
22
|
+
# +1 GEDC {1:1}
|
23
|
+
# +2 VERS <VERSION_NUMBER> {1:1}
|
24
|
+
# +2 FORM <GEDCOM_FORM> {1:1}
|
25
|
+
# +1 CHAR <CHARACTER_SET> {1:1}
|
26
|
+
# +2 VERS <VERSION_NUMBER> {0:1}
|
27
|
+
# +1 LANG <LANGUAGE_OF_TEXT> {0:1}
|
28
|
+
# +1 PLAC {0:1}
|
29
|
+
# +2 FORM <PLACE_HIERARCHY> {1:1}
|
30
|
+
# +1 NOTE <GEDCOM_CONTENT_DESCRIPTION> {0:1}
|
31
|
+
# +2 [CONT|CONC] <GEDCOM_CONTENT_DESCRIPTION> {0:M}
|
32
|
+
# NOTE::
|
33
|
+
# Submissions to the Family History Department for Ancestral File submission or for clearing temple ordinances must use a
|
34
|
+
# DESTination of ANSTFILE or TempleReady.
|
35
|
+
#
|
36
|
+
# The header structure provides information about the entire transmission. The SOURce system name
|
37
|
+
# identifies which system sent the data. The DESTination system name identifies the intended receiving
|
38
|
+
# system.
|
39
|
+
#
|
40
|
+
# Additional GEDCOM standards will be produced in the future to reflect GEDCOM expansion and
|
41
|
+
# maturity. This requires the reading program to make sure it can read the GEDC.VERS and the
|
42
|
+
# GEDC.FORM values to insure proper readability. The CHAR tag is required. All character codes
|
43
|
+
# greater than 0x7F must be converted to ANSEL.
|
44
|
+
#
|
45
|
+
#The attributes are all arrays for the level +1 tags/records.
|
46
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
47
|
+
#* Those ending in _record are array of classes of that type.
|
48
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
49
|
+
class Header_record < GEDCOMBase
|
50
|
+
attr_accessor :header_source_record, :destination, :date_record, :submitter_ref, :submission_ref
|
51
|
+
attr_accessor :file_name, :copyright, :gedcom_record, :character_set_record, :language_id
|
52
|
+
attr_accessor :place_record, :note_citation_record
|
53
|
+
|
54
|
+
ClassTracker << :Header_record
|
55
|
+
|
56
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
57
|
+
def initialize(*a)
|
58
|
+
super(*a)
|
59
|
+
@this_level = [ [:nodata, "HEAD", nil] ]
|
60
|
+
@sub_level = [ #level + 1
|
61
|
+
[:walk, nil,:header_source_record],
|
62
|
+
[:print, "DEST", :destination],
|
63
|
+
[:walk, nil, :date_record],
|
64
|
+
[:xref, "SUBM", :submitter_ref],
|
65
|
+
[:xref, "SUBN", :submission_ref],
|
66
|
+
[:print, "FILE", :file_name],
|
67
|
+
[:print, "COPR", :copyright],
|
68
|
+
[:walk, nil, :gedcom_record],
|
69
|
+
[:walk, nil, :character_set_record],
|
70
|
+
[:print, "LANG", :language_id],
|
71
|
+
[:walk, nil, :place_record],
|
72
|
+
[:walk, nil, :note_citation_record],
|
73
|
+
]
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Internal representation of the GEDCOM SOUR record in a level 0 HEAD record.
|
4
|
+
#These SOUR records are not the same as level 0 SOUR records.
|
5
|
+
#
|
6
|
+
#=HEADER:=
|
7
|
+
# 0 HEAD {1:1}
|
8
|
+
# 1 SOUR <APPROVED_SYSTEM_ID> {1:1}
|
9
|
+
# +1 VERS <VERSION_NUMBER> {0:1}
|
10
|
+
# +1 NAME <NAME_OF_PRODUCT> {0:1}
|
11
|
+
# +1 CORP <NAME_OF_BUSINESS> {0:1}
|
12
|
+
# +2 <<ADDRESS_STRUCTURE>> {0:1}
|
13
|
+
# +1 DATA <NAME_OF_SOURCE_DATA> {0:1}
|
14
|
+
# +2 DATE <PUBLICATION_DATE> {0:1}
|
15
|
+
# +2 COPR <COPYRIGHT_SOURCE_DATA> {0:1}
|
16
|
+
# ...
|
17
|
+
#
|
18
|
+
# The SOURce system name identifies which system sent the data.
|
19
|
+
#
|
20
|
+
#The attributes are all arrays for the level +1 tags/records.
|
21
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
22
|
+
#* Those ending in _record are array of classes of that type.
|
23
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
24
|
+
class Header_source_record < GEDCOMBase
|
25
|
+
attr_accessor :approved_system_id, :version, :name, :corporate_record, :header_data_record
|
26
|
+
attr_accessor :note_citation_record
|
27
|
+
|
28
|
+
ClassTracker << :Header_source_record
|
29
|
+
|
30
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
31
|
+
def initialize(*a)
|
32
|
+
super(*a)
|
33
|
+
@this_level = [ [:print, "SOUR", :approved_system_id] ]
|
34
|
+
@sub_level = [ #level + 1
|
35
|
+
[:print, "VERS", :version],
|
36
|
+
[:print, "NAME", :name],
|
37
|
+
[:walk, nil, :corporate_record],
|
38
|
+
[:walk, nil, :header_data_record],
|
39
|
+
[:walk, nil, :note_citation_record],
|
40
|
+
]
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
require 'event_record.rb'
|
3
|
+
|
4
|
+
#Internal representation of the GEDCOM Individual_Attribute_Structure.
|
5
|
+
#Individual_attribute_record subclasses Event_record, as they share the same class attributes as events.
|
6
|
+
#
|
7
|
+
#=INDIVIDUAL_ATTRIBUTE_STRUCTURE:= {0:M} Note that this structure can occur many times an Individual_record.
|
8
|
+
# n SEX <SEX_VALUE> {0:1}
|
9
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
10
|
+
# n CAST <CASTE_NAME> {1:1}
|
11
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
12
|
+
# n DSCR <PHYSICAL_DESCRIPTION> {1:1}
|
13
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
14
|
+
# n EDUC <SCHOLASTIC_ACHIEVEMENT> {1:1}
|
15
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
16
|
+
# n IDNO <NATIONAL_ID_NUMBER> {1:1}
|
17
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
18
|
+
# n NATI <NATIONAL_OR_TRIBAL_ORIGIN> {1:1}
|
19
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
20
|
+
# n NCHI <COUNT_OF_CHILDREN> {1:1}
|
21
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
22
|
+
# n NMR <COUNT_OF_MARRIAGES> {1:1}
|
23
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
24
|
+
# n OCCU <OCCUPATION> {1:1}
|
25
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
26
|
+
# n PROP <POSSESSIONS> {1:1}
|
27
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
28
|
+
# n RELI <RELIGIOUS_AFFILIATION> {1:1}
|
29
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
30
|
+
# n RESI {1:1}
|
31
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
32
|
+
# n SSN <SOCIAL_SECURITY_NUMBER> {0:1}
|
33
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
34
|
+
# n TITL <NOBILITY_TYPE_TITLE> {1:1}
|
35
|
+
# +1 <<EVENT_DETAIL>> {0:1}
|
36
|
+
#
|
37
|
+
# Note:: The usage of IDNO requires that the subordinate TYPE tag be used to define what kind of
|
38
|
+
# number is assigned to IDNO.
|
39
|
+
#
|
40
|
+
# Also Note that SEX has been added here, and removed from the Individual_record. This allows SEX
|
41
|
+
# To be included multiple times, and have associated events (e.g. a sex change). I also do not check
|
42
|
+
# That the SEX_VALUE is M,F or U. to allow for the XXY, XXXY and X and other genetic anomolies
|
43
|
+
# associated with gender that might need to be recorded. None of this affects reading GEDCOM files,
|
44
|
+
# and will not affect the writing of them if you don't add an event, or use non-standard SEX_VALUEs.
|
45
|
+
#
|
46
|
+
#The attributes are all arrays for the level +1 tags/records.
|
47
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
48
|
+
#* Those ending in _record are array of classes of that type.
|
49
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
50
|
+
class Individual_attribute_record < Event_record
|
51
|
+
|
52
|
+
ClassTracker << :Individual_attribute_record
|
53
|
+
|
54
|
+
def attr_type=(value)
|
55
|
+
@event_type = value
|
56
|
+
end
|
57
|
+
def attr_type
|
58
|
+
@event_type
|
59
|
+
end
|
60
|
+
def value=(value)
|
61
|
+
@event_status = value
|
62
|
+
end
|
63
|
+
def value
|
64
|
+
@event_status
|
65
|
+
end
|
66
|
+
|
67
|
+
def event_tag(tag)
|
68
|
+
case tag
|
69
|
+
when "SEX" then tag
|
70
|
+
when "CAST" then tag
|
71
|
+
when "DSCR" then tag
|
72
|
+
when "EDUC" then tag
|
73
|
+
when "IDNO" then tag
|
74
|
+
when "NATI" then tag
|
75
|
+
when "NCHI" then tag
|
76
|
+
when "NMR" then tag
|
77
|
+
when "OCCU" then tag
|
78
|
+
when "PROP" then tag
|
79
|
+
when "RELI" then tag
|
80
|
+
when "RESI" then tag
|
81
|
+
when "SSN" then tag
|
82
|
+
when "TITL" then tag
|
83
|
+
else super(tag)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Internal representation of the GEDCOM level 0 INDI record type
|
4
|
+
#
|
5
|
+
#=INDIVIDUAL_RECORD:=
|
6
|
+
# n @XREF:INDI@ INDI {1:1}
|
7
|
+
# +1 RESN <RESTRICTION_NOTICE> {0:1}
|
8
|
+
# +1 <<PERSONAL_NAME_STRUCTURE>> {0:M}
|
9
|
+
# +1 <<INDIVIDUAL_EVENT_STRUCTURE>> {0:M}
|
10
|
+
# +1 <<INDIVIDUAL_ATTRIBUTE_STRUCTURE>> {0:M}
|
11
|
+
# +1 <<LDS_INDIVIDUAL_ORDINANCE>> {0:M}
|
12
|
+
# +1 <<CHILD_TO_FAMILY_LINK>> {0:M}
|
13
|
+
# +1 <<SPOUSE_TO_FAMILY_LINK>> {0:M}
|
14
|
+
# +1 SUBM @<XREF:SUBM>@ {0:M}
|
15
|
+
# +1 <<ASSOCIATION_STRUCTURE>> {0:M}
|
16
|
+
# +1 ALIA @<XREF:INDI>@ {0:M}
|
17
|
+
# +1 ANCI @<XREF:SUBM>@ {0:M}
|
18
|
+
# +1 DESI @<XREF:SUBM>@ {0:M}
|
19
|
+
# +1 <<SOURCE_CITATION>> {0:M}
|
20
|
+
# +1 <<MULTIMEDIA_LINK>> {0:M}
|
21
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
22
|
+
# +1 RFN <PERMANENT_RECORD_FILE_NUMBER> {0:1}
|
23
|
+
# +1 AFN <ANCESTRAL_FILE_NUMBER> {0:1}
|
24
|
+
# +1 REFN <USER_REFERENCE_NUMBER> {0:M}
|
25
|
+
# +2 TYPE <USER_REFERENCE_TYPE> {0:1}
|
26
|
+
# +1 RIN <AUTOMATED_RECORD_ID> {0:1}
|
27
|
+
# +1 <<CHANGE_DATE>> {0:1}
|
28
|
+
#
|
29
|
+
# The individual record is a compilation of facts, known or discovered, about an individual. Sometimes
|
30
|
+
# these facts are from different sources. This form allows documentation of the source where each of
|
31
|
+
# the facts were discovered.
|
32
|
+
#
|
33
|
+
# The normal lineage links are shown through the use of pointers from the individual to a family
|
34
|
+
# through either the FAMC tag or the FAMS tag. The FAMC tag provides a pointer to a family where
|
35
|
+
# this person is a child. The FAMS tag provides a pointer to a family where this person is a spouse or
|
36
|
+
# parent. The <<CHILD_TO_FAMILY_LINK>> (see page 27) structure contains a FAMC pointer
|
37
|
+
# which is required to show any child to parent linkage for pedigree navigation. The
|
38
|
+
# <<CHILD_TO_FAMILY_LINK>> structure also indicates whether the pedigree link represents a
|
39
|
+
# birth lineage, an adoption lineage, or a sealing lineage.
|
40
|
+
#
|
41
|
+
# Linkage between a child and the family they belonged to at the time of an event can also optionally
|
42
|
+
# be shown by a FAMC pointer subordinate to the appropriate event. For example, a FAMC pointer
|
43
|
+
# subordinate to an adoption event would show which family adopted this individual. Biological parent
|
44
|
+
# or parents can be indicated by a FAMC pointer subordinate to the birth event. The FAMC tag can
|
45
|
+
# also optionally be used subordinate to an ADOPtion, or BIRTh event to differentiate which set of
|
46
|
+
# parents were related by adoption, sealing, or birth.
|
47
|
+
#
|
48
|
+
# I removed SEX from INDI and added it to the Individual_attribute_record class.
|
49
|
+
#
|
50
|
+
# Other associations or relationships are represented by the ASSOciation tag. The person's relation
|
51
|
+
# or association is the person being pointed to. The association or relationship is stated by the value
|
52
|
+
# on the subordinate RELA line. For example:
|
53
|
+
# 0 @I1@ INDI
|
54
|
+
# 1 NAME Fred/Jones/
|
55
|
+
# 1 ASSO @I2@
|
56
|
+
# 2 RELA Godfather
|
57
|
+
#
|
58
|
+
#The attributes are all arrays for the level +1 tags/records.
|
59
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
60
|
+
#* Those ending in _record are array of classes of that type.
|
61
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
62
|
+
class Individual_record < GEDCOMBase
|
63
|
+
attr_accessor :individual_ref, :restriction, :name_record, :event_record, :individual_attribute_record, :alias_ref
|
64
|
+
attr_accessor :families_individuals, :association_record, :submitter_ref, :ancestor_interest_ref, :descendant_interest_ref
|
65
|
+
attr_accessor :source_citation_record, :multimedia_citation_record, :note_citation_record
|
66
|
+
attr_accessor :registered_ref_id, :lds_ancestral_file_no, :refn_record, :automated_record_id, :change_date_record
|
67
|
+
|
68
|
+
ClassTracker << :Individual_record
|
69
|
+
|
70
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
71
|
+
def initialize(*a)
|
72
|
+
super(*a)
|
73
|
+
@this_level = [ [:xref, "INDI", :individual_ref] ]
|
74
|
+
@sub_level = [ #level 1
|
75
|
+
[:print, "RESN", :restriction],
|
76
|
+
[:walk, nil, :name_record],
|
77
|
+
[:walk, nil, :individual_attribute_record],
|
78
|
+
[:walk, nil, :event_record],
|
79
|
+
[:walk, nil, :families_individuals],
|
80
|
+
[:walk, nil, :association_record],
|
81
|
+
[:xref, "ALIA", :alias_ref],
|
82
|
+
[:xref, "ANCI", :ancestor_interest_ref],
|
83
|
+
[:xref, "DESI", :descendant_interest_ref],
|
84
|
+
[:xref, "SUBM", :submitter_ref],
|
85
|
+
[:walk, nil, :multimedia_citation_record ],
|
86
|
+
[:walk, nil, :source_citation_record ],
|
87
|
+
[:walk, nil, :note_citation_record ],
|
88
|
+
[:print, "RFN", :registered_ref_id],
|
89
|
+
[:print, "AFN", :lds_ancestral_file_no],
|
90
|
+
[:walk, nil, :refn_record ],
|
91
|
+
[:walk, nil, :change_date_record],
|
92
|
+
[:print, "RIN", :automated_record_id ],
|
93
|
+
]
|
94
|
+
end
|
95
|
+
|
96
|
+
def id
|
97
|
+
#temporary
|
98
|
+
@individual_ref
|
99
|
+
end
|
100
|
+
|
101
|
+
def parents_family
|
102
|
+
parents_family = []
|
103
|
+
@families_individuals.each { |m| parents_family << m.parents_family_ref if m.relationship_type == "FAMC"}
|
104
|
+
parent_family
|
105
|
+
end
|
106
|
+
|
107
|
+
def spouses
|
108
|
+
spouses = []
|
109
|
+
@families_individuals.each { |m| spouses << m.own_family if m.relationship_type == "FAMS"}
|
110
|
+
spouses
|
111
|
+
end
|
112
|
+
|
113
|
+
def birth
|
114
|
+
if @event_record != nil
|
115
|
+
@event_record.each { |e| if e.is_event('BIRT') then return e end }
|
116
|
+
else
|
117
|
+
nil
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def death
|
122
|
+
if @event_record != nil
|
123
|
+
@event_record.each { |e| if e.is_event('DEAT') then return e end }
|
124
|
+
else
|
125
|
+
nil
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Internal representation of a reference to the GEDCOM level 0 OBJE record type
|
4
|
+
#GEDCOM has both inline OBJE records and references to level 0 OBJE records.
|
5
|
+
#both are stored stored in a Multimedia_record class and both get referenced through this class.
|
6
|
+
#
|
7
|
+
#=MULTIMEDIA_LINK:=
|
8
|
+
# n OBJE @<XREF:OBJE>@ {1:1}
|
9
|
+
#
|
10
|
+
# This structure provides two options in handling the GEDCOM multimedia interface. The first
|
11
|
+
# alternative (embedded) includes all of the data, including the multimedia object, within the
|
12
|
+
# transmission file. The embedded method includes pointers to GEDCOM records that contain
|
13
|
+
# encoded image or sound objects. Each record represents a multimedia object or object fragment. An
|
14
|
+
# object fragment is created by breaking the multimedia files into several multimedia object records of
|
15
|
+
# 32K or less. These fragments are tied together by chaining from one multimedia object fragment to
|
16
|
+
# the next in sequence. This procedure will help manage the size of a multimedia GEDCOM record so
|
17
|
+
# that existing systems which are not expecting large multimedia records may discard the records
|
18
|
+
# without crashing due to the size of the record. Systems which handle embedded multimedia can
|
19
|
+
# reconstitute the multimedia fragments by decoding the object fragments and concatenating them to
|
20
|
+
# the assigned multimedia file.
|
21
|
+
#
|
22
|
+
# This second method allows the GEDCOM context to be connected to an external multimedia file.
|
23
|
+
# GEDCOM defines this in the MULTIMEDIA_LINK definition, but I have put it into the Multimedia_record.
|
24
|
+
# as the attributes are the same, except BLOB becomes FILE. A Multimedia_citation_record is also created
|
25
|
+
# to make all references to Multimedia records consistent.
|
26
|
+
#
|
27
|
+
# This process is only managed by GEDCOM in the sense that the appropriate file name is included in
|
28
|
+
# the GEDCOM file in context, but the maintenance and transfer of the multimedia files are external to
|
29
|
+
# GEDCOM. The parser can just treat this as a comment and doesn't check for the file being present.
|
30
|
+
#
|
31
|
+
#The attributes are all arrays for the level +1 tags/records.
|
32
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
33
|
+
#* Those ending in _record are array of classes of that type.
|
34
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
35
|
+
class Multimedia_citation_record < GEDCOMBase
|
36
|
+
attr_accessor :multimedia_ref, :multimedia_record
|
37
|
+
attr_accessor :note_citation_record
|
38
|
+
|
39
|
+
ClassTracker << :Multimedia_citation_record
|
40
|
+
|
41
|
+
def to_gedcom(level=0)
|
42
|
+
if @multimedia_ref != nil
|
43
|
+
@this_level = [ [:xref, "OBJE", :multimedia_ref] ]
|
44
|
+
@sub_level = [#level 1
|
45
|
+
[:walk, nil, :note_citation_record ],
|
46
|
+
]
|
47
|
+
else
|
48
|
+
@this_level = [ [:walk, nil, :multimedia_record] ]
|
49
|
+
@sub_level = [#level 1
|
50
|
+
]
|
51
|
+
end
|
52
|
+
super(level)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|