gedcom 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,33 @@
|
|
1
|
+
#ClassTracker keeps track of the existence of our gedcom classes.
|
2
|
+
#If they don't exist yet, the parser will need to dynamically create them.
|
3
|
+
#
|
4
|
+
#This started as an experiment to automate the generation of the Gedcom classes, but they now all exist
|
5
|
+
#and none should ever end up being created dynamically. I need to deprecate this class at some point.
|
6
|
+
|
7
|
+
|
8
|
+
class ClassTracker
|
9
|
+
#Create a hash of known class definitions, we would not have to do this when I figure out how to tell if a class definition exists.
|
10
|
+
@@classes = { }
|
11
|
+
|
12
|
+
#Returns true if the named class is in @@classes.
|
13
|
+
def self.exists?(class_name)
|
14
|
+
@@classes[class_name.to_sym] == true
|
15
|
+
end
|
16
|
+
|
17
|
+
#Adds a class to the @@classes hash using the << operator.
|
18
|
+
def self.<<(class_name)
|
19
|
+
@@classes[class_name.to_sym] = true
|
20
|
+
end
|
21
|
+
|
22
|
+
#return the state of each of the classes recorded in the @@classes hash, as a string.
|
23
|
+
def self.to_s
|
24
|
+
s = '{'
|
25
|
+
@@classes.each { |k,v| s += "\n\t#{k.to_s}=>#{v.to_s},"}
|
26
|
+
s[-1] = '' if s[-1,1] == ','[0,1]
|
27
|
+
s << "\n}"
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
#ClassTracker << :kkk
|
33
|
+
#print ClassTracker
|
@@ -0,0 +1,99 @@
|
|
1
|
+
#GedLine takes a GEDCOM line tokenised into a word array returning an object
|
2
|
+
#with the:
|
3
|
+
# * level number in @level
|
4
|
+
# * the GEDCOM tag in @tag
|
5
|
+
# * the data portion in @data
|
6
|
+
# * the XREF value, if this line has one, in @XREF
|
7
|
+
# * the @user set to true if this is a user defined TAG (e.g. starts with '_')
|
8
|
+
|
9
|
+
class GedLine
|
10
|
+
attr_accessor :xref, :tag, :data, :level, :user
|
11
|
+
|
12
|
+
#GedLine.new(*data) takes a GEDCOM line as word array and does all the work to categorize the tokens.
|
13
|
+
def initialize(*data)
|
14
|
+
case
|
15
|
+
when data.length < 2
|
16
|
+
raise "line too short (#{data.length})"
|
17
|
+
when data[0] == nil
|
18
|
+
raise "level is nil"
|
19
|
+
when data[1] == nil
|
20
|
+
raise "No Tag or Xref after the level"
|
21
|
+
#need to add a test to ensure level is a number!
|
22
|
+
end
|
23
|
+
|
24
|
+
@level = data[0].to_i
|
25
|
+
|
26
|
+
if @level == 0 #At the top level, where the xrefs and tags are reversed.
|
27
|
+
if data[1][0..0] == '@' #Then we have an xref line
|
28
|
+
@xref = data[1].gsub(/\A@|@\Z/, '')
|
29
|
+
@tag = data[2]
|
30
|
+
@data = data.length == 3 ? nil : data[3..-1] #note lines can have data here. Others will not.
|
31
|
+
if @xref.length > 22
|
32
|
+
raise "Xref too long (Max = 22, length = #{@xref.length}) "
|
33
|
+
end
|
34
|
+
elsif data.length != 2 #This is a Head or Trailer line, so should be two tokens long.
|
35
|
+
raise "Level 0 line has too many tokens"
|
36
|
+
else
|
37
|
+
@xref = nil
|
38
|
+
@data = nil
|
39
|
+
@tag = data[1]
|
40
|
+
end
|
41
|
+
else
|
42
|
+
@tag = data[1]
|
43
|
+
if data.length == 2
|
44
|
+
@xref = nil
|
45
|
+
@data = nil
|
46
|
+
elsif data[2][0..0] == '@' #Then we have an xref line
|
47
|
+
if data.length != 3 #These will always have 3 tokens.
|
48
|
+
raise "Level #{@level} #{@tag} Xref Line has too many tokens"
|
49
|
+
end
|
50
|
+
@xref = data[2].gsub(/\A@|@\Z/, '')
|
51
|
+
@data = nil
|
52
|
+
if @xref.length > 22
|
53
|
+
raise "Xref too long (Max = 22, length = #{@xref.length}) "
|
54
|
+
end
|
55
|
+
else
|
56
|
+
@xref = nil
|
57
|
+
@data = data[2..-1]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
@user = nil
|
61
|
+
end
|
62
|
+
|
63
|
+
#Test for this being a user Tag.
|
64
|
+
def user_tag?
|
65
|
+
@user == true
|
66
|
+
end
|
67
|
+
|
68
|
+
#Returns the hash key for this GEDCOM LINE to lookup the action in the GedcomParser::TAG has.
|
69
|
+
def index
|
70
|
+
user_tag? ? [ "NOTE", :user ] : ( @xref ? [@tag, :xref] : [@tag, nil] )
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
#creates as NOTE from a user defined tag.
|
75
|
+
#sets the @user field to true.
|
76
|
+
def user_tag
|
77
|
+
if @xref != nil
|
78
|
+
if @data == nil
|
79
|
+
@data = [ '@' + @xref + '@' ]
|
80
|
+
else
|
81
|
+
@data[0,0] = '@' + @xref + '@'
|
82
|
+
end
|
83
|
+
@xref = nil if @level != 0 #Retain for the NOTES xref if this is a level 0 user tag.
|
84
|
+
end
|
85
|
+
if @data == nil
|
86
|
+
@data = [ @tag ]
|
87
|
+
else
|
88
|
+
@data[0,0] = @tag
|
89
|
+
end
|
90
|
+
@data[0,0] = @level.to_s
|
91
|
+
@user = true
|
92
|
+
@tag = "NOTE"
|
93
|
+
end
|
94
|
+
|
95
|
+
#Returns a String with the @level, @xref, @tag and @data values.
|
96
|
+
def to_s
|
97
|
+
"Level #{@level}, Xref = @#{@xref}@, Tag = #{@tag}, Data = '#{@data ? @data.inject('') do |x,y| x + ' ' + y end : nil}'"
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,798 @@
|
|
1
|
+
require 'parse_state.rb'
|
2
|
+
require 'ged_line.rb'
|
3
|
+
require 'transmission.rb'
|
4
|
+
|
5
|
+
#Class GedcomParser is a GEDCOM 5.5 Parser
|
6
|
+
#
|
7
|
+
#The GEDCOM 5.5 grammer is defined in the TAGS hash.
|
8
|
+
# * Each TAGS hash members key represents a name of a GEDCOM record definition in the standard.
|
9
|
+
# The standard doesn't name all sub-levels of a record, but for our definitions we have had to.
|
10
|
+
# e.g. In the standard:
|
11
|
+
# HEADER:=
|
12
|
+
# n HEAD {1:1}
|
13
|
+
# +1 SOUR <APPROVED_SYSTEM_ID> {1:1}
|
14
|
+
# ...
|
15
|
+
# becomes a :header key and a :header_source key in the TAGS hash.
|
16
|
+
#
|
17
|
+
# * Each value is another hash, whose key is a two member array: [<GEDCOM_TAG>, <context>]
|
18
|
+
# Valid Contexts:
|
19
|
+
# [:xref] indicates that the GEDCOM TAG with a reference value, so should have an @XREF@ value following it
|
20
|
+
# Nb. With level 0 GEDCOM records, the @XREF@ will proceed the GEDCOM TAG.
|
21
|
+
# [nil] indicates this is a standard GEDCOM tag, possibly with a data value following it.
|
22
|
+
# [:user] indicates that this is a user defined tag, not one from the standard.
|
23
|
+
# e.g.
|
24
|
+
# ["NOTE", :xref] is a NOTE tag with a reference to a note, or at Level 0 the :xref is the key for other records to refer to.
|
25
|
+
# ["NOTE", nil] is an inline NOTE, with the note being the value on the GEDCOM line
|
26
|
+
# ["NOTE", :user] is a NOTE record where the standard didn't allow for one (i.e. user defined)
|
27
|
+
# Each value of this hash being an array telling the parse what it must do when it meets the GEDCOM_TAG in the context.
|
28
|
+
# This array array has the following fields
|
29
|
+
# 0. CHILD_RECORD This is the key to the child level tag description lines.
|
30
|
+
# 1. MIN_OCCURANCES What is the minimum number of times we should see this field. Usually 0 or 1
|
31
|
+
# 2. MAX_OCCURANCES How many times can this tag appear at this level. Nil means any number of times
|
32
|
+
# 3. DATA_TYPE What is the type of the data in the data field. Nil means we expect no data.
|
33
|
+
# 4. DATA_SIZE How big can this field be
|
34
|
+
# 5. ACTION The action(s) the parser should take to instatiate a class and/or store the value portion of the GEDCOM line.
|
35
|
+
# The Action tags are processed in order. A class tag changes the target class of field, key and xref tags.
|
36
|
+
# - [:class, :class_name] inidicates this line, and any further data, will be stored in the class :class_name
|
37
|
+
# - [:pop] indicates that data will now be stored in the previous class.
|
38
|
+
# - [:field, :fieldname] indicates that the data part of the line will be stored in the field :field_name
|
39
|
+
# - [:field, [:fieldname, value]] fieldname stores the given value.
|
40
|
+
# - [:append, :fieldname] indicates that the data part of the line will be appended to this field
|
41
|
+
# - [:append_nl, :fieldname] indicates that the data part of the line will be appended to this field, after first appending a nl
|
42
|
+
# - [:xref, [:field, :record_type]] indicates that the xref value of the line will get stored in the named field and points to the record_type.
|
43
|
+
# - [:key, :index_name] means we need to create an index entry, in the index index_name, for this items xref value.
|
44
|
+
# - nil in this field indicates that we should ignore this TAG and its children.
|
45
|
+
# 6. DATA_DESCRIPTION Comment to indicate purpose of the gedcom TAG at this level.
|
46
|
+
|
47
|
+
class GedcomParser
|
48
|
+
|
49
|
+
attr_reader :transmission
|
50
|
+
|
51
|
+
CHILD_RECORD = 0 #This is the key to the child level tag description lines.
|
52
|
+
MIN_OCCURANCES = 1 #What is the minimum number of times we should see this field. Usually 0 or 1
|
53
|
+
MAX_OCCURANCES = 2 #How many times can this tag appear at this level. Nil means any number of times
|
54
|
+
DATA_TYPE = 3 #What is the type of the data in the data field. Nil means we expect no data.
|
55
|
+
DATA_SIZE = 4 #How big can this field be
|
56
|
+
ACTION = 5 #The action(s) the parser should take to instatiate a class and/or store the value portion of the GEDCOM line.
|
57
|
+
DATA_DESCRIPTION = 6 #Comment to indicate purpose of the gedcom TAG at this level.
|
58
|
+
|
59
|
+
TAGS = {
|
60
|
+
:transmission =>
|
61
|
+
{
|
62
|
+
["HEAD", nil] => [:header, 1, 1, nil, 0, [ [:class, :header_record] ], "File Header"],
|
63
|
+
["SUBM", :xref] => [:submitter_record, 0, 1, nil, 0, [ [:class, :submitter_record], [:xref, [:submitter_ref, :submitter]], [:key, :submitter] ], "File's Submitter Record"],
|
64
|
+
["FAM", :xref] => [:family_record, 0, nil, nil, 0, [ [:class, :family_record], [:xref, [:family_ref, :family]], [:key, :family] ], "Family Record" ],
|
65
|
+
["INDI", :xref] => [:individual_record, 0, nil, nil, 0, [ [:class, :individual_record], [:xref, [:individual_ref, :individual]], [:key, :individual] ], "Individual Record" ],
|
66
|
+
["SOUR", :xref] => [:source_record, 0, nil, nil, 0, [ [:class, :source_record], [:xref, [:source_ref, :source]], [:key, :source] ], "Source Record" ],
|
67
|
+
["OBJE", :xref] => [:multimedia_record, 0, nil, nil, 0, [ [:class, :multimedia_record], [:xref, [:multimedia_ref, :multimedia]], [:key, :multimedia] ], "Multimedia Object" ],
|
68
|
+
["NOTE", :xref] => [:note_record, 0, nil, :string, 248, [ [:class, :note_record], [:xref, [:note_ref, :note]], [:key, :note], [:field, :note] ], "Note Record" ],
|
69
|
+
["REPO", :xref] => [:repository_record, 0, nil, nil, 0, [ [:class, :repository_record], [:xref, [:repository_ref, :repository]], [:key, :repository] ], "Repository Record" ],
|
70
|
+
["SUBN", :xref] => [:submission_record, 0, nil, nil, 0, [ [:class, :submission_record], [:xref, [:submission_ref, :submission]], [:key, :submission] ], "Submission Record" ],
|
71
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_record], [:xref, [:note_ref, :note]], [:key, :note], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
72
|
+
["TRLR", nil] => [nil, 1, 1, nil, 0, [ [:class, :trailer_record], [:pop] ], "End of Data Line" ],
|
73
|
+
},
|
74
|
+
|
75
|
+
:header =>
|
76
|
+
{
|
77
|
+
["SOUR", nil] => [:header_source, 1, 1, :identifier, 20, [ [:class, :header_source_record], [:field, :approved_system_id] ], "Source System's Registered Name" ],
|
78
|
+
["DEST", nil] => [nil, 0, 1, :identifier, 20, [ [:field, :destination] ], "Destination System's Registered Name" ],
|
79
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_exact, 11, [ [:class, :date_record], [:field, :date_value] ], "Transmission Date" ],
|
80
|
+
["SUBM", :xref] => [nil, 1, 1, nil, 0, [ [:xref, [:submitter_ref, :submitter]] ], "Reference to a Submitter Record" ],
|
81
|
+
["SUBN", :xref] => [nil, 0, 1, nil, 0, [ [:xref, [:submission_ref, :submission]] ], "Reference to a Submission Record" ],
|
82
|
+
["FILE", nil] => [nil, 0, 1, :string, 90, [ [:field, :file_name] ], "This files name" ],
|
83
|
+
["COPR", nil] => [nil, 0, 1, :string, 90, [ [:field, :copyright] ], "Copyright Notice for this file" ],
|
84
|
+
["GEDC", nil] => [:header_gedc, 1, 1, nil, 0, [ [:class, :gedcom_record] ], "GEDCOM Info" ],
|
85
|
+
["CHAR", nil] => [:header_char, 1, 1, :char_set_id,8, [ [:class, :character_set_record], [:field, :char_set_id] ], "Character Set" ],
|
86
|
+
["LANG", nil] => [nil, 0, 1, :language_id,15, [ [:field, :language_id] ], "Language of Text" ],
|
87
|
+
["PLAC", nil] => [:header_plac, 0, 1, nil, 0, [ [:class, :place_record] ], "Default's for Places" ],
|
88
|
+
["NOTE", nil] => [:note_cont_conc, 0, 1, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "File Content Description" ],
|
89
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
90
|
+
},
|
91
|
+
|
92
|
+
:header_source =>
|
93
|
+
{
|
94
|
+
["VERS", nil] => [nil, 0, 1, :string, 15, [ [:field, :version] ], "Program's Version :number"],
|
95
|
+
["NAME", nil] => [nil, 0, 1, :string, 90, [ [:field, :name] ], "Program's Name" ],
|
96
|
+
["CORP", nil] => [:header_source_corp, 0, 1, :string, 90, [ [:class, :corporate_record], [:field, :company_name] ], "Company name the produced the Pragram" ],
|
97
|
+
["DATA", nil] => [:header_source_data, 0, 1, :string, 90, [ [:class, :header_data_record], [:field, :data_source] ], "Identifies Data Source Record"],
|
98
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
99
|
+
},
|
100
|
+
:header_source_corp =>
|
101
|
+
{
|
102
|
+
["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
|
103
|
+
["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
|
104
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
105
|
+
},
|
106
|
+
:header_source_data =>
|
107
|
+
{
|
108
|
+
["DATE", nil] => [nil, 0, 1, :date_value, 11, [ [:field, :date] ], "Publication Date" ],
|
109
|
+
["COPR", nil] => [nil, 0, 1, :string, 90, [ [:field, :copyright] ], "Copyright Statement from Data Source" ],
|
110
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
111
|
+
},
|
112
|
+
:date_structure =>
|
113
|
+
{
|
114
|
+
["TIME", nil] => [nil, 0, 1, :time_val, 12, [ [:field, :time_value] ], "Time of event" ],
|
115
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
116
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
117
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ], #Not legal gedcom 5.5
|
118
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ], #Not legal gedcom 5.5
|
119
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
120
|
+
},
|
121
|
+
:header_gedc =>
|
122
|
+
{
|
123
|
+
["VERS", nil] => [nil, 1, 1, :string, 15, [ [:field, :version] ], "Version of GEDCOM" ],
|
124
|
+
["FORM", nil] => [nil, 1, 1, :string, 20, [ [:field, :encoding_format] ], "GEDCOM Encoding Format" ],
|
125
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
126
|
+
},
|
127
|
+
:header_char =>
|
128
|
+
{
|
129
|
+
["VERS", nil] => [nil, 0, 1, :string, 15, [ [:field, :version] ], "Character Set Version" ],
|
130
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
131
|
+
},
|
132
|
+
:header_plac =>
|
133
|
+
{
|
134
|
+
["FORM", nil] => [nil, 1, 1, :placehierachy, 120, [ [:field, :place_hierachy] ], "Default Place Hierachy (comma separarted jurisdictions)"],
|
135
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
136
|
+
},
|
137
|
+
:note_cont_conc =>
|
138
|
+
{
|
139
|
+
["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :note] ], "Continuation on New Line"],
|
140
|
+
["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :note] ], "Continuation on Same Line" ],
|
141
|
+
},
|
142
|
+
:family_record =>
|
143
|
+
{
|
144
|
+
#RESN is not standard gedcom.
|
145
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
146
|
+
|
147
|
+
["ANUL", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "ANUL"]] ], "Annulment" ],
|
148
|
+
["CENS", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "CENS"]] ], "Census" ],
|
149
|
+
["DIV", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "DIV"]] ], "Divorce" ],
|
150
|
+
["DIVF", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "DIVF"]] ], "Divorce Filed" ],
|
151
|
+
["ENGA", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "ENGA"]] ], "Engagement" ],
|
152
|
+
["MARR", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "MARR"]] ], "Marriage" ],
|
153
|
+
["MARB", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "MARB"]] ], "Marriage Bann" ],
|
154
|
+
["MARC", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "MARC"]] ], "Marriage Contract" ],
|
155
|
+
["MARL", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "MARL"]] ], "Marriage License" ],
|
156
|
+
["MARS", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "MARS"]] ], "Marriage Settlement Agreement" ],
|
157
|
+
["EVEN", nil] => [:family_event_detail, 0, nil, nil, 0, [ [:class, :event_record], [:field, [:event_type, "EVEN"]] ], "Any Other Event" ],
|
158
|
+
["RESI", nil] => [:event_detail, 0, nil, :y_or_null, 0, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "RESI"]] ], "Residence" ], #NOT Standard gedcom 5.5
|
159
|
+
|
160
|
+
["HUSB", :xref] => [:attached_note, 0, 1, nil, 0, [ [:xref, [:husband_ref, :individual]], [:push] ], "Husband and/or Biological Father of the Children" ],
|
161
|
+
["WIFE", :xref] => [:attached_note, 0, 1, nil, 0, [ [:xref, [:wife_ref, :individual]], [:push] ], "Wife and/or Biological Mother of the Children" ],
|
162
|
+
["CHIL", :xref] => [:attached_note, 0, nil, nil, 0, [ [:xref, [:child_ref, :individual]], [:push] ], "Child" ],
|
163
|
+
["NCHI", nil] => [nil, 0, 1, :number, 3, [ [:field, :number_children] ], "Total :number of Children" ],
|
164
|
+
["SUBM", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:submitter_ref, :submitter]] ],"Submitter of Record's Information" ],
|
165
|
+
|
166
|
+
["SLGS", nil] => [:lds_individual_ordinance_slgs, 0, nil, :y_or_null,0, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "SLGS"]]], "LDS Spouse Sealing Record" ],
|
167
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
168
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
169
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
|
170
|
+
["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
|
171
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
172
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248,[ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
173
|
+
["REFN", nil] => [:family_record_refn, 0, nil, :string, 20, [ [:class, :refn_record], [:field, :user_reference_number] ], "User Defined Reference :number" ],
|
174
|
+
["RIN", nil] => [nil, 0, 1, :number, 12, [ [:field, :automated_record_id] ], "System Generated Record ID" ],
|
175
|
+
["CHAN", nil] => [:change_date, 0, 1, nil, 0, [ [:class, :change_date_record] ], "Date this Record was Last Modified" ],
|
176
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
177
|
+
},
|
178
|
+
:family_event_detail =>
|
179
|
+
{
|
180
|
+
#RESN is not standard gedcom.
|
181
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
182
|
+
|
183
|
+
["TYPE", nil] => [nil, 0, 1, :string, 90, [ [:field, :event_descriptor] ], "Event Description" ],
|
184
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_value, 35, [ [:class, :date_record], [:field, :date_value] ], "Events Date(s)" ],
|
185
|
+
["PLAC", nil] => [:place_structure, 0, 1, :placehierachy,120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierachy where the Event Occurred" ],
|
186
|
+
["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
|
187
|
+
["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
|
188
|
+
["AGE", nil] => [nil, 0, 1, :age, 12, [ [:field, :age] ], "Age at the time of the Event" ],
|
189
|
+
["AGNC", nil] => [nil, 0, 1, :string, 120, [ [:field, :agency] ], "Controlling/Resonsible Entity/Authority" ],
|
190
|
+
["CAUS", nil] => [:cause_note_structure_inline,0, 1, :string, 90, [ [:class, :cause_record], [:field, :cause] ], "Cause of the Event" ],
|
191
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
192
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
193
|
+
#Subm records in events is not standard gedcom 5.5
|
194
|
+
["SUBM", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:submitter_ref, :submitter]] ],"Submitter of Record's Information" ],
|
195
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
|
196
|
+
["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
|
197
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
198
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
199
|
+
["HUSB", nil] => [:family_event_detail_age,0, 1, nil, 0, [ [:class, :event_age_record], [:field, [:relation, "HUSB"]] ], "Husband's Age Record" ],
|
200
|
+
["WIFE", nil] => [:family_event_detail_age,0, 1, nil, 0, [ [:class, :event_age_record], [:field, [:relation, "WIFE"]] ], "Wife's Age Record" ],
|
201
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
202
|
+
},
|
203
|
+
:family_event_detail_age =>
|
204
|
+
{
|
205
|
+
["AGE", nil] => [nil, 1, 1, :age, 12, [ [:field, :age] ], "Age at the time of the Event"],
|
206
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
207
|
+
},
|
208
|
+
:family_record_refn =>
|
209
|
+
{
|
210
|
+
["TYPE", nil] => [nil, 0, 1, :string, 40, [ [:field, :ref_type] ], "User Defined Reference Type"],
|
211
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
212
|
+
},
|
213
|
+
:individual_record =>
|
214
|
+
{
|
215
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ],
|
216
|
+
|
217
|
+
|
218
|
+
#Internally, we ignore the y_or_null, as both indicate we have to build a record, but we don't need to record, in it, that we did it.
|
219
|
+
["BIRT", nil] => [:individual_event_structure_birt, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "BIRT"]] ], "Birth" ],
|
220
|
+
["CHR", nil] => [:individual_event_structure_birt, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "CHR"]] ], "Christening" ],
|
221
|
+
["ADOP", nil] => [:individual_event_structure_adop, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "ADOP"]] ], "Adoption" ],
|
222
|
+
["DEAT", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "DEAT"]] ], "Death" ],
|
223
|
+
["BURI", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "BURI"]] ], "Burial" ],
|
224
|
+
["CREM", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "CREM"]] ], "Cremation" ],
|
225
|
+
["BAPM", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "BAPM"]] ], "Baptism" ],
|
226
|
+
["BARM", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "BARM"]] ], "Bar Mitzvah (13y old Jewish Boys cermonial event)" ],
|
227
|
+
["BASM", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "BASM"]] ], "Bas Mitzvah (13y old Jewish Girls cermonial event)" ],
|
228
|
+
["BLES", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "BLES"]] ], "Blessing" ],
|
229
|
+
["CHRA", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "CHRA"]] ], "Adult Christening" ],
|
230
|
+
["CONF", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "CONF"]] ], "Confirmation" ],
|
231
|
+
["FCOM", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "FCOM"]] ], "First Communion" ],
|
232
|
+
["ORDN", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "ORDN"]] ], "Ordination" ],
|
233
|
+
["NATU", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "NATU"]] ], "Naturalization" ],
|
234
|
+
["EMIG", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "EMIG"]] ], "Emigration" ],
|
235
|
+
["IMMI", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "IMMI"]] ], "Immigration" ],
|
236
|
+
["CENS", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "CENS"]] ], "Census" ],
|
237
|
+
["PROB", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "PROB"]] ], "Probate" ],
|
238
|
+
["WILL", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "WILL"]] ], "Will (Event is date of signing)" ],
|
239
|
+
["GRAD", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "GRAD"]] ], "Graduation" ],
|
240
|
+
["RETI", nil] => [:event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "RETI"]] ], "Retirement" ],
|
241
|
+
["BAPL", nil] => [:lds_individual_ordinance_bapl, 0, nil, :y_or_null, 0, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "BAPL"]] ], "LDS Baptisim" ],
|
242
|
+
["CONL", nil] => [:lds_individual_ordinance_bapl, 0, nil, :y_or_null, 0, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "CONL"]] ], "LDS Confirmation" ],
|
243
|
+
["ENDL", nil] => [:lds_individual_ordinance_endl, 0, nil, :y_or_null, 0, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "ENDL"]] ], "LDS Endowment" ],
|
244
|
+
["SLGC", nil] => [:lds_individual_ordinance_slgc, 0, nil, :y_or_null, 0, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "SLGC"]] ], "LDS Childs Sealing" ],
|
245
|
+
["EVEN", nil] => [:event_detail, 0, nil, nil, 0, [ [:class, :event_record], [:field, [:event_type, "EVEN"]] ], "Misc Event" ],
|
246
|
+
|
247
|
+
["NAME", nil] => [:personal_name_structure, 0, nil, :name_string, 120, [ [:class, :name_record], [:field, :value], [:field, [:attr_type,"NAME"]] ], "A Name of the Individual" ],
|
248
|
+
["SEX", nil] => [:event_detail, 0, nil, :sex_value, 1, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type,"SEX"]] ], "M or F" ],
|
249
|
+
#gedcom 5.5 actually only allows 1 sex record, with no event. The real world says otherwise.
|
250
|
+
#It is also possible to have Intersexuals.
|
251
|
+
#There is a spectrum of Male to Female, through varying causes
|
252
|
+
#These are the known genetic combinations XX, XY, XXY, XXXY and X only
|
253
|
+
#There are also XY people, who appear female or sexless at birth (androgen insensitivity syndrome, or in english, the hormone receptors don't work).
|
254
|
+
#There are XX people, who may appear sexless and/or missing some or all of their reproductive organs.
|
255
|
+
#Some of these intersexuals can reproduce as males, females, or rarely, both, most not at all.
|
256
|
+
#There is also the modern possibility of gender reassignment, which would require an event record, attached to a second sex record.
|
257
|
+
["TITL", nil] => [:event_detail, 0, nil, :string, 120, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "TITL"]] ], "Title" ],
|
258
|
+
["CAST", nil] => [:event_detail, 0, nil, :string, 90, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type,"CAST"]] ], "Caste Name" ],
|
259
|
+
["DSCR", nil] => [:event_detail, 0, nil, :string, 248, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type,"DSCR"]] ], "Physical Description" ],
|
260
|
+
["EDUC", nil] => [:event_detail, 0, nil, :string, 248, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type,"EDUC"]] ], "Scholastic Achievment" ],
|
261
|
+
["IDNO", nil] => [:event_detail, 0, nil, :string, 30, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "IDNO"]] ], "National ID :number" ],
|
262
|
+
["NATI", nil] => [:event_detail, 0, nil, :string, 120, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "NATI"]] ], "National or Tribal Origin" ],
|
263
|
+
["NCHI", nil] => [:event_detail, 0, nil, :number, 3, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "NCHI"]] ], ":number of Children" ],
|
264
|
+
["NMR", nil] => [:event_detail, 0, nil, :number, 3, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "NMR"]] ], ":number of Marriages" ],
|
265
|
+
["OCCU", nil] => [:event_detail, 0, nil, :string, 90, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "OCCU"]] ], "Occupation" ],
|
266
|
+
["PROP", nil] => [:event_detail, 0, nil, :string, 248, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "PROP"]] ], "Real Estate or other Property" ],
|
267
|
+
["RELI", nil] => [:event_detail, 0, nil, :string, 90, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "RELI"]] ], "Religious Affliliation" ],
|
268
|
+
["RESI", nil] => [:event_detail, 0, nil, nil, 0, [ [:class, :individual_attribute_record], [:field, [:value,""]], [:field, [:attr_type, "RESI"]] ], "Residence" ],
|
269
|
+
["SSN", nil] => [:event_detail, 0, nil, :string, 11, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "SSN"]] ], "USA Social Security :number" ],
|
270
|
+
#ATTR is not standard gedcom 5.5, which has no misc attribute tag.
|
271
|
+
#["_ATTR", nil] => [:attribute_detail, 0, nil, :string, 90, [ [:class, :individual_attribute_record], [:field, :attr_type] ], "Misc Attribute" ],
|
272
|
+
|
273
|
+
["ALIA", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:alias_ref, :individual]] ], "Reference to possible duplicate Individual Record" ],
|
274
|
+
["FAMC", :xref] => [:child_to_family_link, 0, nil, nil, 0, [ [:class, :families_individuals], [:field, [:relationship_type, "FAMC"]], [:xref, [:parents_family_ref, :family]] ], "Reference to Parent's Family Record" ],
|
275
|
+
["FAMS", :xref] => [:attached_note, 0, nil, nil, 0, [ [:class, :families_individuals], [:field, [:relationship_type, "FAMS"]], [:xref, [:family_ref, :family]] ], "Reference to Own marriage's Family Record" ],
|
276
|
+
["ASSO", :xref] => [:association_structure, 0, nil, nil, 0, [ [:class, :association_record], [:xref, [:association_ref, :individual]] ], "Reference to An Associated Individual's Record" ],
|
277
|
+
|
278
|
+
["SUBM", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:submitter_ref, :submitter]] ], "Reference to Submitter Record" ],
|
279
|
+
["ANCI", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:ancestor_interest_ref, :submitter]] ], "Reference to Submitter's Record Interested in persons Ancestors" ],
|
280
|
+
["DESI", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:descendant_interest_ref, :submitter]] ], "Reference to Submitter's Record Interested in persons Decendants" ],
|
281
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
282
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
283
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
|
284
|
+
["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
|
285
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
286
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248,[ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
287
|
+
["RFN", nil] => [nil, 0, 1, :registered_ref,90, [ [:field, :registered_ref_id] ], "Registered Resource File and Record ID" ],
|
288
|
+
["AFN", nil] => [nil, 0, 1, :string, 12, [ [:field, :lds_ancestral_file_no] ], "LDS Ancestral File :number" ],
|
289
|
+
["REFN", nil] => [:family_record_refn, 0, nil, :string, 20, [ [:class, :refn_record], [:field, :user_reference_number] ], "User Defined Reference :number" ],
|
290
|
+
["RIN", nil] => [nil, 0, 1, :number, 12, [ [:field, :automated_record_id] ], "System Generated Record ID" ],
|
291
|
+
["CHAN", nil] => [:change_date, 0, 1, nil, 0, [ [:class, :change_date_record] ], "Date this Record was Last Modified" ],
|
292
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
293
|
+
},
|
294
|
+
|
295
|
+
#These Notes, and Source attachments are non-standard GEDCOM 5.5
|
296
|
+
:attached_note =>
|
297
|
+
{
|
298
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
299
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
300
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
301
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
302
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
303
|
+
},
|
304
|
+
|
305
|
+
#:attribute_detail is Non-Standard gedcom 5.5, which has no such structure, nor is there an ATTR parent tag
|
306
|
+
:attribute_detail =>
|
307
|
+
{
|
308
|
+
["_VALU", nil] => [:nil, 0, 1, :string, 90, [ [:field, :value] ], "Attribute Description" ],
|
309
|
+
["EVEN", nil] => [:event_detail, 0, nil, nil, 0, [ [:class, :event_record] ], "Event associated with this attribute" ],
|
310
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
311
|
+
},
|
312
|
+
:individual_event_structure_birt =>
|
313
|
+
{
|
314
|
+
#RESN is not standard gedcom.
|
315
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
316
|
+
|
317
|
+
["TYPE", nil] => [nil, 0, 1, :string, 90, [ [:field, :event_descriptor] ], "Event Description" ],
|
318
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_value, 35, [ [:class, :date_record], [:field, :date_value] ], "Events Date(s)" ], #illegal note attachment, Note gedcom 5.5 compliant.
|
319
|
+
["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierarchy where the Event Occurred" ],
|
320
|
+
["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
|
321
|
+
["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
|
322
|
+
["AGE", nil] => [nil, 0, 1, :age, 12, [ [:field, :age] ], "Age at the time of the Event" ],
|
323
|
+
["AGNC", nil] => [nil, 0, 1, :string, 120, [ [:field, :agency] ], "Controlling/Resonsible Entity/Authority" ],
|
324
|
+
["CAUS", nil] => [:cause_note_structure_inline,0, 1, :string, 90, [ [:class, :cause_record], [:field, :cause] ], "Cause of the Event" ],
|
325
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
326
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
327
|
+
#Subm records in events is not standard gedcom 5.5
|
328
|
+
["SUBM", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:submitter_ref, :submitter]] ],"Submitter of Record's Information" ],
|
329
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
|
330
|
+
["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
|
331
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
332
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
333
|
+
["FAMC", :xref] => [:individual_event_structure_adop_famc, 0, 1, nil, 0, [ [:class, :adoption_record], [:xref, [:birth_family_ref, :family]] ], "Reference to Birth Parent's Family Record" ],
|
334
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
335
|
+
},
|
336
|
+
:individual_event_structure_adop =>
|
337
|
+
{
|
338
|
+
#RESN is not standard gedcom.
|
339
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
340
|
+
|
341
|
+
["TYPE", nil] => [nil, 0, 1, :string, 90, [ [:field, :event_descriptor] ], "Event Description" ],
|
342
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_value, 35, [ [:class, :date_record], [:field, :date_value] ], "Events Date(s)" ], #illegal note attachment, Note gedcom 5.5 compliant.
|
343
|
+
["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierarchy where the Event Occurred" ],
|
344
|
+
["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
|
345
|
+
["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
|
346
|
+
["AGE", nil] => [nil, 0, 1, :age, 12, [ [:field, :age] ], "Age at the time of the Event" ],
|
347
|
+
["AGNC", nil] => [nil, 0, 1, :string, 120, [ [:field, :agency] ], "Controlling/Resonsible Entity/Authority" ],
|
348
|
+
["CAUS", nil] => [:cause_note_structure_inline,0, 1, :string, 90, [ [:class, :cause_record], [:field, :cause] ], "Cause of the Event" ],
|
349
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
350
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
351
|
+
#Subm records in events is not standard gedcom 5.5
|
352
|
+
["SUBM", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:submitter_ref, :submitter]] ],"Submitter of Record's Information" ],
|
353
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
|
354
|
+
["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
|
355
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
356
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
357
|
+
["FAMC", :xref] => [:individual_event_structure_adop_famc, 0, 1, nil, 0, [ [:class, :adoption_record], [:xref, [:adopt_family_ref, :family]] ], "Reference to Adopt Parent's Family Record" ],
|
358
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
359
|
+
},
|
360
|
+
:individual_event_structure_adop_famc => # /*note reuse of ADOP!!*/
|
361
|
+
{
|
362
|
+
["ADOP", nil] => [nil, 0, 1, :whichparent, 4, [ [:field, :adopted_by] ], "Adopted by HUSB | WIFE | BOTH" ],
|
363
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
364
|
+
},
|
365
|
+
:multimedia_record =>
|
366
|
+
{ #Record form
|
367
|
+
["FORM", nil] => [nil, 1, 1, :string, 4, [ [:field, :format] ], "bmp | gif | jpeg | ole | pcx | tiff | wav |..." ],
|
368
|
+
["TITL", nil] => [nil, 0, 1, :string, 248, [ [:field, :title] ], "Title of the work" ],
|
369
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
370
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
371
|
+
["BLOB", nil] => [:encoded_multimedia_line, 1, 1, nil, 0, [ [:class, :encoded_line_record] ], "Binary Object" ],
|
372
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:next_multimedia_ref, :multimedia]] ], "Link to a continued Multimedia Record" ],
|
373
|
+
["REFN", nil] => [:family_record_refn, 0, nil, :string, 20, [ [:class, :refn_record], [:field, :user_reference_number] ], "User Defined Reference :number" ],
|
374
|
+
["RIN", nil] => [nil, 0, 1, :number, 12, [ [:field, :automated_record_id] ], "System Generated Record ID" ],
|
375
|
+
["CHAN", nil] => [:change_date, 0, 1, nil, 0, [ [:class, :change_date_record] ], "Date this Record was Last Modified" ],
|
376
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
377
|
+
},
|
378
|
+
:multimedia_link =>
|
379
|
+
{ #/* in line link form*/
|
380
|
+
["FORM", nil] => [nil, 1, 1, :string, 4, [ [:field, :format] ], "bmp | gif | jpeg | ole | pcx | tiff | wav |..." ],
|
381
|
+
["TITL", nil] => [nil, 0, 1, :string, 248, [ [:field, :title] ], "Title of the work" ],
|
382
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
383
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
384
|
+
#Filename max length is a touch on the short side, so have altered it to 248 (was 30)
|
385
|
+
["FILE", nil] => [nil, 1, 1, :string, 248, [ [:field, :filename] ], "Multimedia Data's Filename" ],
|
386
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
387
|
+
},
|
388
|
+
:encoded_multimedia_line =>
|
389
|
+
{
|
390
|
+
["CONT", nil] => [nil, 1, nil, :string, 87, [ [:append_nl, :encoded_line] ], "ASCII Encoded Multimedia Line" ],
|
391
|
+
},
|
392
|
+
:note_record =>
|
393
|
+
{
|
394
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
395
|
+
["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :note] ], "Continuation on New Line"],
|
396
|
+
["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :note] ], "Continuation on Same Line" ],
|
397
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
398
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
399
|
+
["REFN", nil] => [:family_record_refn, 0, nil, :string, 20, [ [:class, :refn_record], [:field, :user_reference_number] ], "User Defined Reference :number" ],
|
400
|
+
["RIN", nil] => [nil, 0, 1, :number, 12, [ [:field, :automated_record_id] ], "System Generated Record ID" ],
|
401
|
+
["CHAN", nil] => [:change_date, 0, 1, nil, 0, [ [:class, :change_date_record] ], "Date this Record was Last Modified" ],
|
402
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
403
|
+
},
|
404
|
+
:note_structure =>
|
405
|
+
{
|
406
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
407
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
408
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
409
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
410
|
+
},
|
411
|
+
:note_structure_inline =>
|
412
|
+
{
|
413
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
414
|
+
["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :note] ], "Continuation on New Line"],
|
415
|
+
["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :note] ], "Continuation on Same Line" ],
|
416
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
417
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
418
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
419
|
+
},
|
420
|
+
:repository_record =>
|
421
|
+
{
|
422
|
+
["NAME", nil] => [nil, 0, 1, :string, 90, [ [:field, :repository_name] ], "Official Name of the Archive" ],
|
423
|
+
["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
|
424
|
+
["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
|
425
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
426
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
427
|
+
["REFN", nil] => [:family_record_refn, 0, nil, :string, 20, [ [:class, :refn_record], [:field, :user_reference_number] ], "User Defined Reference :number" ],
|
428
|
+
["RIN", nil] => [nil, 0, 1, :number, 12, [ [:field, :automated_record_id] ], "System Generated Record ID" ],
|
429
|
+
["CHAN", nil] => [:change_date, 0, 1, nil, 0, [ [:class, :change_date_record] ], "Date this Record was Last Modified" ],
|
430
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
431
|
+
},
|
432
|
+
:source_record =>
|
433
|
+
{
|
434
|
+
["DATA", nil] => [:source_record_data, 0, 1, nil, 0, [ [:class, :source_scope_record] ], "Data Description" ],
|
435
|
+
["AUTH", nil] => [:auth_cont_conc, 0, 1, :string, 248, [ [:field, :author], [:push]], "Person or Entity who created the record" ],
|
436
|
+
["TITL", nil] => [:titl_cont_conc, 0, 1, :string, 248, [ [:field, :title], [:push] ], "Title of the Work" ],
|
437
|
+
["ABBR", nil] => [nil, 0, 1, :string, 60, [ [:field, :short_title] ], "Short Title for Filing" ],
|
438
|
+
["PUBL", nil] => [:publ_cont_conc, 0, 1, :string, 248, [ [:field, :publication_details], [:push]], "Publication Details" ],
|
439
|
+
["TEXT", nil] => [:text_cont_conc, 0, 1, :string, 248, [ [:class, :text_record], [:field, :text] ], "Verbatim Copy of the Source Tect" ],
|
440
|
+
["REPO", :xref] => [:source_repository_citation, 0, 1, nil, 0, [ [:class, :repository_citation_record], [:xref, [:repository_ref, :repository]] ], "Repository Record" ],
|
441
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
|
442
|
+
["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
|
443
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
444
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
445
|
+
["REFN", nil] => [:family_record_refn, 0, nil, :string, 20, [ [:class, :refn_record], [:field, :user_reference_number] ], "User Defined Reference :number" ],
|
446
|
+
["RIN", nil] => [nil, 0, 1, :number, 12, [ [:field, :automated_record_id] ], "System Generated Record ID" ],
|
447
|
+
["CHAN", nil] => [:change_date, 0, 1, nil, 0, [ [:class, :change_date_record] ], "Date this Record was Last Modified" ],
|
448
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
449
|
+
},
|
450
|
+
:source_record_data =>
|
451
|
+
{
|
452
|
+
["EVEN", nil] => [:source_record_data_even, 0, nil, :eventlist, 90, [ [:class, :events_list_record], [:field, :recorded_events] ], "List of Events Recorded" ],
|
453
|
+
["AGNC", nil] => [nil, 0, 1, :string, 120, [ [:field, :agency] ], "Controlling/Resonsible Entity/Authority" ],
|
454
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
455
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
456
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
457
|
+
},
|
458
|
+
:titl_cont_conc =>
|
459
|
+
{
|
460
|
+
["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :title] ], "Continuation on New Line"],
|
461
|
+
["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :title] ], "Continuation on Same Line" ],
|
462
|
+
},
|
463
|
+
:auth_cont_conc =>
|
464
|
+
{
|
465
|
+
["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :author] ], "Continuation on New Line"],
|
466
|
+
["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :author] ], "Continuation on Same Line" ],
|
467
|
+
},
|
468
|
+
:text_cont_conc =>
|
469
|
+
{
|
470
|
+
["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :text] ], "Continuation on New Line"],
|
471
|
+
["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :text] ], "Continuation on Same Line" ],
|
472
|
+
},
|
473
|
+
:publ_cont_conc =>
|
474
|
+
{
|
475
|
+
["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :publication_details] ], "Continuation on New Line"],
|
476
|
+
["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :publication_details] ], "Continuation on Same Line" ],
|
477
|
+
},
|
478
|
+
:source_record_data_even =>
|
479
|
+
{
|
480
|
+
["DATE", nil] => [nil, 0, 1, :date_period, 35, [ [:field, :date_period] ], "Period Covered by Source" ],
|
481
|
+
["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierarchy where the Event Occurred" ],
|
482
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
483
|
+
},
|
484
|
+
:submission_record =>
|
485
|
+
{
|
486
|
+
["SUBM", :xref] => [nil, 0, 1, nil, 0, [ [:xref, [:submitter_ref, :submitter]] ], "Reference to Submitter Record" ],
|
487
|
+
["FAMF", nil] => [nil, 0, 1, :string, 120, [ [:field, :lds_family_file] ], "LDS Family Name for Temple Family File" ],
|
488
|
+
["TEMP", nil] => [nil, 0, 1, :string, 5, [ [:field, :lds_temple_code] ], "Abbreviated LDS Temple Code" ],
|
489
|
+
["ANCE", nil] => [nil, 0, 1, :number, 4, [ [:field, :generations_of_ancestor] ], ":number of generations of Ancestors in this FIle" ],
|
490
|
+
["DESC", nil] => [nil, 0, 1, :number, 4, [ [:field, :generations_of_descendant] ], ":number of generations of Descendants in the File" ],
|
491
|
+
["ORDI", nil] => [nil, 0, 1, :yesno, 3, [ [:field, :process_ordinates] ], "Yes/No (LDS: process for clearing temple ordinances" ],
|
492
|
+
["RIN", nil] => [nil, 0, 1, :number, 12, [ [:field, :automated_record_id] ], "System Generated Record ID" ],
|
493
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
494
|
+
},
|
495
|
+
:submitter_record =>
|
496
|
+
{
|
497
|
+
["NAME", nil] => [nil, 1, 1, :string, 60, [ [:class, :name_record], [:field, :value], [:field, [:attr_type,"NAME"]] , [:pop] ], "Name of the Submitter" ],
|
498
|
+
["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
|
499
|
+
["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phone] ], "Phone :number" ],
|
500
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
|
501
|
+
["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
|
502
|
+
["LANG", nil] => [nil, 0, 3, :languagepreference, 90, [ [:field, :language_list] ], "Ordered List of Prefered Language IDs" ],
|
503
|
+
["RFN", nil] => [nil, 0, 1, :string, 30, [ [:field, :lds_submitter_id] ], "LDS Submitters registration :number" ],
|
504
|
+
["RIN", nil] => [nil, 0, 1, :number, 12, [ [:field, :automated_record_id] ], "System Generated Record ID" ],
|
505
|
+
["CHAN", nil] => [:change_date, 0, 1, nil, 0, [ [:class, :change_date_record] ], "Date this Record was Last Modified" ],
|
506
|
+
#Notes in SUBM records are not part of the gedcom 5.5 standard
|
507
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
508
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
509
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
510
|
+
},
|
511
|
+
:address_structure =>
|
512
|
+
{
|
513
|
+
#RESN is not standard gedcom.
|
514
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
515
|
+
|
516
|
+
["CONT", nil] => [nil, 0, nil, :string, 60, [ [:append_nl, :address] ], "Address Continuation on New Line"],
|
517
|
+
["ADR1", nil] => [nil, 0, 1, :string, 60, [ [:field, :address_line1] ], "Formated Address Line 1" ],
|
518
|
+
["ADR2", nil] => [nil, 0, 1, :string, 60, [ [:field, :address_line2] ], "Formated Address Line 2" ],
|
519
|
+
["CITY", nil] => [nil, 0, 1, :string, 60, [ [:field, :city] ], "City"],
|
520
|
+
["STAE", nil] => [nil, 0, 1, :string, 60, [ [:field, :state] ], "State"],
|
521
|
+
["POST", nil] => [nil, 0, 1, :string, 10, [ [:field, :post_code] ], "Postal Code"],
|
522
|
+
["CTRY", nil] => [nil, 0, 1, :string, 60, [ [:field, :country] ], "Country"],
|
523
|
+
["TYPE", nil] => [nil, 0, 1, :string, 16, [ [:field, :address_type] ], "Home, Country, ..."], #Non Standard Gedcom 5.5
|
524
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
525
|
+
},
|
526
|
+
:association_structure =>
|
527
|
+
{
|
528
|
+
["TYPE", nil] => [nil, 1, 1, :recordtype, 4, [ [:field, :associated_record_tag] ], "Associated with FAM,INDI,NOTE,OBJE,REPO,SOUR,SUBM or SUBN" ],
|
529
|
+
["RELA", nil] => [nil, 1, 1, :string, 25, [ [:field, :relationship_description] ], "Relationship"],
|
530
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
531
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
532
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
533
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
534
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
535
|
+
},
|
536
|
+
:change_date =>
|
537
|
+
{
|
538
|
+
["DATE", nil] => [:date_structure, 1, 1, :date_exact, 11, [ [:class, :date_record], [:field, :date_value] ], "Date Record Last Changed" ],
|
539
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
540
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
541
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
542
|
+
},
|
543
|
+
:child_to_family_link =>
|
544
|
+
{
|
545
|
+
["PEDI", nil] => [nil, 0, nil, :pedigree, 7, [ [:field, :pedigree] ], "Pedigree adopted,birth,foster or sealing" ],
|
546
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
547
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
548
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
549
|
+
},
|
550
|
+
:event_detail =>
|
551
|
+
{
|
552
|
+
#RESN is not standard gedcom.
|
553
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
554
|
+
|
555
|
+
["TYPE", nil] => [nil, 0, 1, :string, 90, [ [:field, :event_descriptor] ], "Event Description" ],
|
556
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_value, 35, [ [:class, :date_record], [:field, :date_value] ], "Events Date(s)" ], #illegal note attachment, Note gedcom 5.5 compliant.
|
557
|
+
["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value ]], "Jurisdictional Place Hierarchy where the Event Occurred" ],
|
558
|
+
["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
|
559
|
+
["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
|
560
|
+
["AGE", nil] => [nil, 0, 1, :age, 12, [ [:field, :age] ], "Age at the time of the Event" ],
|
561
|
+
["AGNC", nil] => [nil, 0, 1, :string, 120, [ [:field, :agency] ], "Controlling/Resonsible Entity/Authority" ],
|
562
|
+
["CAUS", nil] => [:cause_note_structure_inline,0, 1, :string, 90, [ [:class, :cause_record], [:field, :cause] ], "Cause of the Event" ],
|
563
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
564
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
565
|
+
#Subm records in events is not standard gedcom 5.5
|
566
|
+
["SUBM", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:submitter_ref, :submitter]] ],"Submitter of Record's Information" ],
|
567
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
|
568
|
+
["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
|
569
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
570
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
571
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
572
|
+
},
|
573
|
+
:lds_individual_ordinance_bapl => # /*and CONL*/
|
574
|
+
{
|
575
|
+
["STAT", nil] => [nil, 0, 1, :lds_bapt_enum, 10, [ [:field, :lds_date_status] ], "LDS Baptism Date Status" ],
|
576
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_value, 35, [ [:class, :date_record], [:field, :date_value] ], "Events Date(s)" ],
|
577
|
+
["TEMP", nil] => [nil, 0, 1, :string, 5, [ [:field, :lds_temp_code] ], "Abbreviated LDS Temple Code" ],
|
578
|
+
["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierarchy where the Event Occurred" ],
|
579
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
580
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
581
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
582
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
583
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
584
|
+
},
|
585
|
+
:lds_individual_ordinance_endl =>
|
586
|
+
{
|
587
|
+
["STAT", nil] => [nil, 0, 1, :lds_endl_enum, 10, [ [:field, :lds_date_status] ], "LDS Baptism Date Status" ],
|
588
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_value, 35, [ [:class, :date_record], [:field, :date_value] ], "Events Date(s)" ],
|
589
|
+
["TEMP", nil] => [nil, 0, 1, :string, 5, [ [:field, :lds_temp_code] ], "Abbreviated LDS Temple Code" ],
|
590
|
+
["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierarchy where the Event Occurred" ],
|
591
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
592
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
593
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
594
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
595
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
596
|
+
},
|
597
|
+
:lds_individual_ordinance_slgc =>
|
598
|
+
{
|
599
|
+
["STAT", nil] => [nil, 0, 1, :lds_child_seal_enum, 10, [ [:field, :lds_date_status] ], "LDS Baptism Date Status" ],
|
600
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_value, 35, [ [:class, :date_record], [:field, :date_value] ], "Events Date(s)" ],
|
601
|
+
["TEMP", nil] => [nil, 0, 1, :string, 5, [ [:field, :lds_temp_code] ], "Abbreviated LDS Temple Code" ],
|
602
|
+
["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierarchy where the Event Occurred" ],
|
603
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
604
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
605
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
606
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
607
|
+
["FAMC", :xref] => [nil, 1, 1, nil, 0, [ [:xref, [:lds_slgc_family_ref, :family]] ], "Link to Parents Family Record" ],
|
608
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
609
|
+
},
|
610
|
+
:lds_individual_ordinance_slgs =>
|
611
|
+
{
|
612
|
+
["STAT", nil] => [nil, 0, 1, :lds_spouse_seal_enum, 10, [ [:field, :lds_date_status] ], "LDS Baptism Date Status" ],
|
613
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_value, 35, [ [:class, :date_record], [:field, :date_value] ], "Events Date(s)" ],
|
614
|
+
["TEMP", nil] => [nil, 0, 1, :string, 5, [ [:field, :lds_temp_code] ], "Abbreviated LDS Temple Code" ],
|
615
|
+
["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierarchy where the Event Occurred" ],
|
616
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
617
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
618
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
619
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
620
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
621
|
+
},
|
622
|
+
:cause_note_structure_inline =>
|
623
|
+
{
|
624
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
625
|
+
["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :cause] ], "Continuation on New Line"],
|
626
|
+
["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :cause] ], "Continuation on Same Line" ],
|
627
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
628
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
629
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
630
|
+
},
|
631
|
+
:personal_name_structure =>
|
632
|
+
{
|
633
|
+
["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5
|
634
|
+
["NPFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :prefix] ], "Non-indexed Name Prefix (comma separarted)" ],
|
635
|
+
["GIVN", nil] => [nil, 0, 1, :name_piece_list, 120, [ [:field, :given] ], "Given Names (comma separarted)" ],
|
636
|
+
["NICK", nil] => [nil, 0, 1, :name_piece_list, 120, [ [:field, :nickname] ], "Nickname(s) (comma separarted)" ],
|
637
|
+
["SPFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :surname_prefix] ], "Surname Prefix (comma separarted)" ],
|
638
|
+
["SURN", nil] => [nil, 0, 1, :name_piece_list, 120, [ [:field, :surname] ], "Surname(s) (comma separarted)" ],
|
639
|
+
["NSFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :suffix] ], "Non-indexed Name Suffix (comma separarted)" ],
|
640
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
641
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
642
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
643
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
644
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
645
|
+
|
646
|
+
#Non-Standard Gedcom to have an event details in a personal_name_structure. We have added these, as changing one's name requires event details
|
647
|
+
["TYPE", nil] => [nil, 0, 1, :string, 90, [ [:field, :event_descriptor] ], "Event Description" ],
|
648
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_value, 35, [ [:class, :date_record], [:field, :date_value] ], "Events Date(s)" ], #illegal note attachment, Note gedcom 5.5 compliant.
|
649
|
+
["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value ]], "Jurisdictional Place Hierarchy where the Event Occurred" ],
|
650
|
+
["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
|
651
|
+
["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
|
652
|
+
["AGE", nil] => [nil, 0, 1, :age, 12, [ [:field, :age] ], "Age at the time of the Event" ],
|
653
|
+
["AGNC", nil] => [nil, 0, 1, :string, 120, [ [:field, :agency] ], "Controlling/Resonsible Entity/Authority" ],
|
654
|
+
["CAUS", nil] => [:cause_note_structure_inline,0, 1, :string, 90, [ [:class, :cause_record], [:field, :cause] ], "Cause of the Event" ],
|
655
|
+
#Subm records in events is not standard gedcom 5.5
|
656
|
+
["SUBM", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:submitter_ref, :submitter]] ],"Submitter of Record's Information" ],
|
657
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
|
658
|
+
["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
|
659
|
+
},
|
660
|
+
:place_structure =>
|
661
|
+
{
|
662
|
+
["FORM", nil] => [nil, 0, 1, :placehierachy, 30, [ [:field, :place_hierachy] ], "Place Hierachy (comma separarted jurisdictions)" ],
|
663
|
+
["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
|
664
|
+
["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
|
665
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
666
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
667
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
668
|
+
},
|
669
|
+
:source_citation =>
|
670
|
+
{
|
671
|
+
["PAGE", nil] => [nil, 0, 1, :string, 248, [ [:field, :page] ], "Location within the Source" ],
|
672
|
+
["EVEN", nil] => [:source_citation_even, 0, 1, :event_attribute_enum, 15, [ [:class, :citation_event_type_record],[:field, :event_type] ], "Event Code the source record was made for" ],
|
673
|
+
["DATA", nil] => [:source_citation_data, 0, 1, nil, 0, [ [:class, :citation_data_record] ], "Data Record" ],
|
674
|
+
["QUAY", nil] => [nil, 0, 1, :quality_enum, 1, [ [:field, :quality] ], "Unreliable (0), Questional (1), Secondary (2), Primary (1)" ],
|
675
|
+
["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
|
676
|
+
["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
|
677
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
678
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
679
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
680
|
+
},
|
681
|
+
:source_citation_even =>
|
682
|
+
{
|
683
|
+
["ROLE", nil] => [nil, 0, 1, :role, 15, [ [:field, :role] ], "Role in Event (i.e. CHIL, HUSB, WIFE, MOTH ..." ],
|
684
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
685
|
+
},
|
686
|
+
:source_citation_data =>
|
687
|
+
{
|
688
|
+
["DATE", nil] => [:date_structure, 0, 1, :date_value, 90, [ [:class, :date_record], [:field, :date_value] ], "Date event was entered into original source"],
|
689
|
+
["TEXT", nil] => [:text_cont_conc, 0, nil, :string, 248, [ [:class, :text_record], [:field, :text]], "Verbatim Copy of the Source Tect"],
|
690
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
691
|
+
},
|
692
|
+
:source_citation_inline =>
|
693
|
+
{ #A source record, less lots of the possible variables
|
694
|
+
["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :title] ], "Continuation on New Line"],
|
695
|
+
["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :title] ], "Continuation on Same Line" ],
|
696
|
+
["TEXT", nil] => [:text_cont_conc, 0, nil, :string, 248, [ [:class, :text_record], [:field, :text] ], "Verbatim Copy of the Source Tect" ],
|
697
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
698
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
699
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
700
|
+
},
|
701
|
+
:source_repository_citation =>
|
702
|
+
{
|
703
|
+
["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
|
704
|
+
["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
|
705
|
+
["CALN", nil] => [:source_repository_citation_caln, 0, nil, :string, 120, [ [:class, :repository_caln], [:field, :call_number] ], "Repository Source Call :number" ],
|
706
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
707
|
+
},
|
708
|
+
:source_repository_citation_caln =>
|
709
|
+
{
|
710
|
+
["MEDI", nil] => [nil, 0, 1, :mediatype_enum, 15, [ [:field, :media_type] ], "Code for Source Media Type" ],
|
711
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
|
712
|
+
},
|
713
|
+
|
714
|
+
#Catchall for unknown, or user defined tags.
|
715
|
+
:user_subtag =>
|
716
|
+
{
|
717
|
+
["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:append_nl, :note], [:push] ], "Treat Unknown Tags as Single line notes" ],
|
718
|
+
}
|
719
|
+
}
|
720
|
+
|
721
|
+
#Create a new GedcomParser instance
|
722
|
+
#Optional transmission argument provides an external Transmission object to hold the parsed file.
|
723
|
+
def initialize(transmission = Transmission.new)
|
724
|
+
@transmission = transmission #We store the loaded records in here.
|
725
|
+
@parse_state = ParseState.new :transmission , @transmission #We are starting in a parse state of :transmission on the stack.
|
726
|
+
end
|
727
|
+
|
728
|
+
#Parse a GEDCOM line, adding it to the Transmission class hierarchy.
|
729
|
+
#Takes a lineno for reporting errors
|
730
|
+
#and the line (as a String) to be tokenised and parsed.
|
731
|
+
def parse(lineno, line)
|
732
|
+
tokens = GedLine.new *line.chomp.strip.split(/\s/)
|
733
|
+
parse_line(lineno, tokens)
|
734
|
+
end
|
735
|
+
|
736
|
+
#Dump the statistics of what we have parsed and stored in the Transission object.
|
737
|
+
def summary
|
738
|
+
@transmission.summary
|
739
|
+
end
|
740
|
+
|
741
|
+
private
|
742
|
+
|
743
|
+
#Uses the TAGS hash to determine how to process the line.
|
744
|
+
#Take a a line number for error reporting
|
745
|
+
#and the tokenised GEDCOM line.
|
746
|
+
def process_line(lineno, tokens)
|
747
|
+
if (tag_line = TAGS[@parse_state.state]) == nil
|
748
|
+
raise "In unknown state (#{@parse_state.state})"
|
749
|
+
elsif (tag_spec = tag_line[ tokens.index ]) == nil
|
750
|
+
if tokens.tag[0,1] == "_" || @parse_state.state == :user_subtag
|
751
|
+
print "Unknown tag #{tokens}. "
|
752
|
+
tokens.user_tag
|
753
|
+
pp "Converted to #{tokens}"
|
754
|
+
process_line(lineno, tokens)
|
755
|
+
else
|
756
|
+
raise "Tag ([#{tokens.tag},#{tokens.xref}]) not valid in this state (#{@parse_state.state})"
|
757
|
+
end
|
758
|
+
elsif tag_spec[CHILD_RECORD] != nil #don't push nil states, as these represent terminals
|
759
|
+
#Run the handler for this line.
|
760
|
+
@transmission.action_handler lineno, tokens, *tag_spec
|
761
|
+
#switch to new state
|
762
|
+
@parse_state << tag_spec[CHILD_RECORD]
|
763
|
+
else
|
764
|
+
#Run the handler for this line.
|
765
|
+
@transmission.action_handler lineno, tokens, *tag_spec
|
766
|
+
end
|
767
|
+
|
768
|
+
end
|
769
|
+
|
770
|
+
#Manages the parsing state stack and calling process_line() to create objects to hold the data.
|
771
|
+
#Takes a lineno for error reporting
|
772
|
+
# and a tokenised GEDCOM line (including tokenizing the data value as a word array).
|
773
|
+
def parse_line(lineno, tokens)
|
774
|
+
#need to look in the ::TAGS hash for tags that match the level this line is on.
|
775
|
+
#Annoyingly, Level 0 has the data and the TAG, reversed for xrefs.
|
776
|
+
current_level = @parse_state.level
|
777
|
+
new_level = tokens.level
|
778
|
+
|
779
|
+
if current_level > new_level
|
780
|
+
#Reduce the parse state stack until we are at the new level
|
781
|
+
while current_level > new_level
|
782
|
+
current_level -= 1
|
783
|
+
@parse_state.pop
|
784
|
+
end
|
785
|
+
process_line(lineno, tokens) #We are now at the same level, so we process the line
|
786
|
+
elsif current_level == new_level
|
787
|
+
process_line(lineno, tokens) #We are already at the same level, so we just process the line
|
788
|
+
elsif current_level < new_level
|
789
|
+
raise "Level increased by more than 1 (current_level = #{current_level}, new_level = #{new_level})"
|
790
|
+
end
|
791
|
+
end
|
792
|
+
|
793
|
+
|
794
|
+
end
|
795
|
+
|
796
|
+
|
797
|
+
|
798
|
+
|