gedcom 0.9.2 → 0.9.3

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.
@@ -0,0 +1,30 @@
1
+ require 'gedcom_base.rb'
2
+
3
+ #GEDCOM 5.5.1 Draft adds as subordinate to PLAC
4
+ #
5
+ # +1 FONE <PLACE_PHONETIC_VARIATION>
6
+ # +2 TYPE <PHONETIC_TYPE>
7
+ #
8
+ #==PLACE_PHONETIC_VARIATION:= {Size=1:120}
9
+ # PHONETIC_TYPE [<user defined> | hangul | kana] {Size=5:30}
10
+ #The phonetic variation of the place name is written in the same form as was the place name used in the superior
11
+ #<PLACE_NAME> primitive, but phonetically written using the method indicated by the subordinate <PHONETIC_TYPE> value,
12
+ #for example if hiragana was used to provide a reading of a a name written in kanji, then the <PHONETIC_TYPE> value
13
+ #would indicate kana.
14
+ #
15
+ #I allow a NOTE record too, to cope with user defined tags
16
+
17
+ class Placename_phonetic_record < GEDCOMBase
18
+ attr_accessor :phonetic_name, :phonetic_type
19
+ attr_accessor :note_citation_record
20
+ ClassTracker << :Placename_phonetic_record
21
+
22
+ def initialize(*a)
23
+ super(*a)
24
+ @this_level = [ [:print, "FONE", :phonetic_name] ]
25
+ @sub_level = [
26
+ [:print, "TYPE", :phonetic_type],
27
+ [:walk, nil, :note_citation_record],
28
+ ]
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ require 'gedcom_base.rb'
2
+
3
+ #GEDCOM 5.5.1 Draft adds as subordinate to PLAC
4
+ #
5
+ # +1 ROMN <PLACE_ROMANIZED_VARIATION>
6
+ # +2 TYPE <PHONETIC_TYPE>
7
+ #
8
+ #==PLACE_ROMANIZED_VARIATION:= {Size=1:120}
9
+ # ROMANIZED_TYPE [<user defined> | pinyin | romaji | wadegiles ] {Size=5:30}
10
+ #The romanized variation of the place name is written in the same form prescribed for the place name used
11
+ #in the superior <PLACE_NAME> context. The method used to romanize the name is indicated by the line_value of
12
+ #the subordinate <ROMANIZED_TYPE>, for example if romaji was used to provide a reading of a place name written
13
+ #in kanji, then the <ROMANIZED_TYPE> subordinate to the ROMN tag would indicate romaji.
14
+ #
15
+ #I allow a NOTE record too, to cope with user defined tags
16
+
17
+ class Placename_romanized_record < GEDCOMBase
18
+ attr_accessor :romanized_name, :romanized_type
19
+ attr_accessor :note_citation_record
20
+ ClassTracker << :Placename_romanized_record
21
+
22
+ def initialize(*a)
23
+ super(*a)
24
+ @this_level = [ [:print, "ROMN", :romanized_name] ]
25
+ @sub_level = [
26
+ [:print, "TYPE", :romanized_type],
27
+ [:walk, nil, :note_citation_record],
28
+ ]
29
+ end
30
+ end
@@ -17,9 +17,29 @@ require 'gedcom_base.rb'
17
17
  #* Those ending in _ref are GEDCOM XREF index keys
18
18
  #* Those ending in _record are array of classes of that type.
19
19
  #* The remainder are arrays of attributes that could be present in the REPO records.
20
+ #
21
+ # GEDCOM 5.5.1 Draft adds (at same level as ADDR)
22
+ # I have not included these in the Address_record, but include them in the parent
23
+ # records that include ADDRESS_STRUCTURE. This is functionally equivalent, as they are not
24
+ # sub-records of ADDR, but at the same level.
25
+ #
26
+ # n EMAIL <ADDRESS_EMAIL> {0:3}
27
+ # n FAX <ADDRESS_FAX> {0:3}
28
+ # n WWW <ADDRESS_WEB_PAGE> {0:3}
29
+ #
30
+ #==ADDRESS_EMAIL:= {SIZE=5:120}
31
+ # An electronic address that can be used for contact such as an email address.
32
+ #
33
+ #== ADDRESS_FAX:= {SIZE=5:60}
34
+ # A FAX telephone number appropriate for sending data facsimiles.
35
+ #
36
+ #==ADDRESS_WEB_PAGE:= {SIZE=5:120}
37
+ # The world wide web page address.
38
+ #
20
39
  class Repository_record < GEDCOMBase
21
40
  attr_accessor :repository_ref, :repository_name, :phonenumber, :address_record, :note_citation_record
22
41
  attr_accessor :refn_record, :automated_record_id, :change_date_record
42
+ attr_accessor :address_email, :address_fax, :address_web_page #GEDCOM 5.5.1 Draft
23
43
 
24
44
  ClassTracker << :Repository_record
25
45
 
@@ -30,6 +50,9 @@ class Repository_record < GEDCOMBase
30
50
  @sub_level = [#level 1
31
51
  [:print, "NAME", :repository_name ],
32
52
  [:print, "PHON", :phonenumber ],
53
+ [:print, "EMAIL", :address_email],
54
+ [:print, "WWW", :address_web_page],
55
+ [:print, "FAX", :address_fax],
33
56
  [:walk, nil, :address_record ],
34
57
  [:walk, nil, :note_citation_record ],
35
58
  [:walk, nil, :refn_record ],
@@ -25,6 +25,7 @@ require 'gedcom_base.rb'
25
25
  #* Those ending in _ref are GEDCOM XREF index keys
26
26
  #* Those ending in _record are array of classes of that type.
27
27
  #* The remainder are arrays of attributes that could be present in the SUBN records.
28
+ #
28
29
 
29
30
 
30
31
  class Submission_record < GEDCOMBase
@@ -25,10 +25,30 @@ require 'gedcom_base.rb'
25
25
  #* Those ending in _ref are GEDCOM XREF index keys
26
26
  #* Those ending in _record are array of classes of that type.
27
27
  #* The remainder are arrays of attributes that could be present in the SUBM records.
28
+ #
29
+ # GEDCOM 5.5.1 Draft adds (at same level as ADDR)
30
+ # I have not included these in the Address_record, but include them in the parent
31
+ # records that include ADDRESS_STRUCTURE. This is functionally equivalent, as they are not
32
+ # sub-records of ADDR, but at the same level.
33
+ #
34
+ # n EMAIL <ADDRESS_EMAIL> {0:3}
35
+ # n FAX <ADDRESS_FAX> {0:3}
36
+ # n WWW <ADDRESS_WEB_PAGE> {0:3}
37
+ #
38
+ #==ADDRESS_EMAIL:= {SIZE=5:120}
39
+ # An electronic address that can be used for contact such as an email address.
40
+ #
41
+ #== ADDRESS_FAX:= {SIZE=5:60}
42
+ # A FAX telephone number appropriate for sending data facsimiles.
43
+ #
44
+ #==ADDRESS_WEB_PAGE:= {SIZE=5:120}
45
+ # The world wide web page address.
46
+ #
28
47
 
29
48
  class Submitter_record < GEDCOMBase
30
49
  attr_accessor :submitter_ref, :name_record, :address_record, :phone, :multimedia_citation_record
31
50
  attr_accessor :language_list, :lds_submitter_id, :automated_record_id, :change_date_record, :note_citation_record
51
+ attr_accessor :address_email, :address_fax, :address_web_page #GEDCOM 5.5.1 Draft
32
52
 
33
53
  ClassTracker << :Submitter_record
34
54
 
@@ -40,6 +60,9 @@ class Submitter_record < GEDCOMBase
40
60
  [:walk, nil, :name_record ],
41
61
  [:walk, nil, :address_record ],
42
62
  [:print, "PHON", :phone ],
63
+ [:print, "EMAIL", :address_email ],
64
+ [:print, "FAX", :address_fax ],
65
+ [:print, "WWW", :address_web_page ],
43
66
  [:print, "LANG", :language_list ],
44
67
  [:walk, nil, :multimedia_citation_record ],
45
68
  [:walk, nil, :note_citation_record ],
@@ -30,7 +30,7 @@ require 'transmission.rb'
30
30
  # 1. MIN_OCCURANCES What is the minimum number of times we should see this field. Usually 0 or 1
31
31
  # 2. MAX_OCCURANCES How many times can this tag appear at this level. Nil means any number of times
32
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
33
+ # 4. DATA_SIZE How big can this field be. I haven't recorded how small, assuming 1, but some records have higher minimum sizes
34
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
35
  # The Action tags are processed in order. A class tag changes the target class of field, key and xref tags.
36
36
  # - [:class, :class_name] inidicates this line, and any further data, will be stored in the class :class_name
@@ -80,7 +80,7 @@ class GedcomParser
80
80
  ["SUBM", :xref] => [nil, 1, 1, nil, 0, [ [:xref, [:submitter_ref, :submitter]] ], "Reference to a Submitter Record" ],
81
81
  ["SUBN", :xref] => [nil, 0, 1, nil, 0, [ [:xref, [:submission_ref, :submission]] ], "Reference to a Submission Record" ],
82
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" ],
83
+ ["COPR", nil] => [nil, 0, 1, :string, 90, [ [:field, :copyright] ], "Copyright Notice for this file" ],
84
84
  ["GEDC", nil] => [:header_gedc, 1, 1, nil, 0, [ [:class, :gedcom_record] ], "GEDCOM Info" ],
85
85
  ["CHAR", nil] => [:header_char, 1, 1, :char_set_id,8, [ [:class, :character_set_record], [:field, :char_set_id] ], "Character Set" ],
86
86
  ["LANG", nil] => [nil, 0, 1, :language_id,15, [ [:field, :language_id] ], "Language of Text" ],
@@ -101,12 +101,20 @@ class GedcomParser
101
101
  {
102
102
  ["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
103
103
  ["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
104
+ #Added EMAIL,FAX,WWW Gedcom 5.5.1
105
+ ["EMAIL", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_email] ], "email address" ],
106
+ ["FAX", nil] => [nil, 0, 3, :string, 60, [ [:field, :address_fax] ], "FAX :number" ],
107
+ ["WWW", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_web_page] ], "Web URL" ],
108
+ #
104
109
  ["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
110
  },
106
111
  :header_source_data =>
107
112
  {
108
113
  ["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" ],
114
+ #copyright has no CONT/CONC option in Gedcom 5.5
115
+ #["COPR", nil] => [nil, 0, 1, :string, 90, [ [:field, :copyright] ], "Copyright Notice for this file" ],
116
+ #copyright has CONT/CONC option in Gedcom 5.5.1
117
+ ["COPR", nil] => [:copyright_cont_conc, 0, 1, :string, 90, [ [:class, :copyright_record], [:field, :copyright] ], "Copyright Statement from Data Source" ],
110
118
  ["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
119
  },
112
120
  :date_structure =>
@@ -138,11 +146,17 @@ class GedcomParser
138
146
  {
139
147
  ["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :note] ], "Continuation on New Line"],
140
148
  ["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :note] ], "Continuation on Same Line" ],
149
+ },
150
+ #copyright has CONT/CONC option in Gedcom 5.5.1
151
+ :copyright_cont_conc =>
152
+ {
153
+ ["CONT", nil] => [nil, 0, nil, :string, 248, [ [:append_nl, :copyright] ], "Continuation on New Line"],
154
+ ["CONC", nil] => [nil, 0, nil, :string, 248, [ [:append, :copyright] ], "Continuation on Same Line" ],
141
155
  },
142
156
  :family_record =>
143
157
  {
144
158
  #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
159
+ ["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5, but in 5.5.1
146
160
 
147
161
  ["ANUL", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "ANUL"]] ], "Annulment" ],
148
162
  ["CENS", nil] => [:family_event_detail, 0, nil, :y_or_null, 1, [ [:class, :event_record], [:field, :event_status], [:field, [:event_type, "CENS"]] ], "Census" ],
@@ -178,14 +192,21 @@ class GedcomParser
178
192
  :family_event_detail =>
179
193
  {
180
194
  #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
195
+ ["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5, but in 5.5.1
182
196
 
183
197
  ["TYPE", nil] => [nil, 0, 1, :string, 90, [ [:field, :event_descriptor] ], "Event Description" ],
184
198
  ["DATE", nil] => [:date_structure, 0, 1, :date_value, 35, [ [:class, :date_record], [:field, :date_value] ], "Events Date(s)" ],
185
199
  ["PLAC", nil] => [:place_structure, 0, 1, :placehierachy,120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierachy where the Event Occurred" ],
186
200
  ["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
187
201
  ["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
202
+ #Added EMAIL,FAX,WWW Gedcom 5.5.1
203
+ ["EMAIL", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_email] ], "email address" ],
204
+ ["FAX", nil] => [nil, 0, 3, :string, 60, [ [:field, :address_fax] ], "FAX :number" ],
205
+ ["WWW", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_web_page] ], "Web URL" ],
206
+ #
188
207
  ["AGE", nil] => [nil, 0, 1, :age, 12, [ [:field, :age] ], "Age at the time of the Event" ],
208
+ #GEDCOM 5.5.1
209
+ ["RELI", nil] => [nil, 0, 1, :string, 90, [ [:field, :religion] ], "A name of the religion with which this event was affiliated" ],
189
210
  ["AGNC", nil] => [nil, 0, 1, :string, 120, [ [:field, :agency] ], "Controlling/Resonsible Entity/Authority" ],
190
211
  ["CAUS", nil] => [:cause_note_structure_inline,0, 1, :string, 90, [ [:class, :cause_record], [:field, :cause] ], "Cause of the Event" ],
191
212
  ["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
@@ -267,6 +288,7 @@ class GedcomParser
267
288
  ["RELI", nil] => [:event_detail, 0, nil, :string, 90, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "RELI"]] ], "Religious Affliliation" ],
268
289
  ["RESI", nil] => [:event_detail, 0, nil, nil, 0, [ [:class, :individual_attribute_record], [:field, [:value,""]], [:field, [:attr_type, "RESI"]] ], "Residence" ],
269
290
  ["SSN", nil] => [:event_detail, 0, nil, :string, 11, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "SSN"]] ], "USA Social Security :number" ],
291
+ ["FACT", nil] => [:event_detail, 0, nil, :string, 90, [ [:class, :individual_attribute_record], [:field, :value], [:field, [:attr_type, "FACT"]] ], "a noteworthy attribute or fact concerning an individual, a group, or an organization" ],
270
292
  #ATTR is not standard gedcom 5.5, which has no misc attribute tag.
271
293
  #["_ATTR", nil] => [:attribute_detail, 0, nil, :string, 90, [ [:class, :individual_attribute_record], [:field, :attr_type] ], "Misc Attribute" ],
272
294
 
@@ -319,7 +341,14 @@ class GedcomParser
319
341
  ["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierarchy where the Event Occurred" ],
320
342
  ["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
321
343
  ["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
344
+ #Added EMAIL,FAX,WWW Gedcom 5.5.1
345
+ ["EMAIL", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_email] ], "email address" ],
346
+ ["FAX", nil] => [nil, 0, 3, :string, 60, [ [:field, :address_fax] ], "FAX :number" ],
347
+ ["WWW", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_web_page] ], "Web URL" ],
348
+ #
322
349
  ["AGE", nil] => [nil, 0, 1, :age, 12, [ [:field, :age] ], "Age at the time of the Event" ],
350
+ #GEDCOM 5.5.1
351
+ ["RELI", nil] => [nil, 0, 1, :string, 90, [ [:field, :religion] ], "A name of the religion with which this event was affiliated" ],
323
352
  ["AGNC", nil] => [nil, 0, 1, :string, 120, [ [:field, :agency] ], "Controlling/Resonsible Entity/Authority" ],
324
353
  ["CAUS", nil] => [:cause_note_structure_inline,0, 1, :string, 90, [ [:class, :cause_record], [:field, :cause] ], "Cause of the Event" ],
325
354
  ["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
@@ -343,7 +372,14 @@ class GedcomParser
343
372
  ["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value] ], "Jurisdictional Place Hierarchy where the Event Occurred" ],
344
373
  ["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
345
374
  ["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
375
+ #Added EMAIL,FAX,WWW Gedcom 5.5.1
376
+ ["EMAIL", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_email] ], "email address" ],
377
+ ["FAX", nil] => [nil, 0, 3, :string, 60, [ [:field, :address_fax] ], "FAX :number" ],
378
+ ["WWW", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_web_page] ], "Web URL" ],
379
+ #
346
380
  ["AGE", nil] => [nil, 0, 1, :age, 12, [ [:field, :age] ], "Age at the time of the Event" ],
381
+ #GEDCOM 5.5.1
382
+ ["RELI", nil] => [nil, 0, 1, :string, 90, [ [:field, :religion] ], "A name of the religion with which this event was affiliated" ],
347
383
  ["AGNC", nil] => [nil, 0, 1, :string, 120, [ [:field, :agency] ], "Controlling/Resonsible Entity/Authority" ],
348
384
  ["CAUS", nil] => [:cause_note_structure_inline,0, 1, :string, 90, [ [:class, :cause_record], [:field, :cause] ], "Cause of the Event" ],
349
385
  ["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
@@ -364,25 +400,81 @@ class GedcomParser
364
400
  },
365
401
  :multimedia_record =>
366
402
  { #Record form
367
- ["FORM", nil] => [nil, 1, 1, :string, 4, [ [:field, :format] ], "bmp | gif | jpeg | ole | pcx | tiff | wav |..." ],
403
+ #GEDCOM 5.5.1 form has FILE and SOUR records
404
+ ["FILE", nil] => [:multimedia_obje_file_record, 0, nil, :string, 120, [ [:class, :multimedia_obje_file_record], [:field, :filename] ], " local or remote file reference to the auxiliary data" ],
405
+ ["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
406
+ ["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
407
+ #GEDCOM 5.5 Only, some non-standard variants have a +1 MEDI tag after the FORM tag
408
+ ["FORM", nil] => [:multimedia_format_record, 1, 1, :string, 4, [ [:class, :multimedia_format_record], [:field, :format] ], "bmp | gif | jpeg | ole | pcx | tiff | wav |..." ],
368
409
  ["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
410
  ["BLOB", nil] => [:encoded_multimedia_line, 1, 1, nil, 0, [ [:class, :encoded_line_record] ], "Binary Object" ],
372
411
  ["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:xref, [:next_multimedia_ref, :multimedia]] ], "Link to a continued Multimedia Record" ],
412
+ #Common to 5.5 and 5.5.1
413
+ ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
414
+ ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
415
+ #Blob's go away in 5.5.1
373
416
  ["REFN", nil] => [:family_record_refn, 0, nil, :string, 20, [ [:class, :refn_record], [:field, :user_reference_number] ], "User Defined Reference :number" ],
374
417
  ["RIN", nil] => [nil, 0, 1, :number, 12, [ [:field, :automated_record_id] ], "System Generated Record ID" ],
375
418
  ["CHAN", nil] => [:change_date, 0, 1, nil, 0, [ [:class, :change_date_record] ], "Date this Record was Last Modified" ],
376
419
  ["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
420
+ },
421
+ :multimedia_obje_file_record =>
422
+ { #GEDCOM 5.5.1 multimedia file references, rather than inline blobs.
423
+ #TITL is at the previous level in the link form.
424
+ ["TITL", nil] => [nil, 0, 1, :string, 248, [ [:field, :title] ], "Title of the work" ],
425
+ ["FORM", nil] => [:multimedia_obje_format_record, 0, 1, :string, 4, [ [:class, :multimedia_obje_format_record], [:field, :format] ], "bmp | gif | jpeg | ole | pcx | tiff | ..." ],
426
+ #Non-standard note field to allow for user defined tags.
427
+ ["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
428
+ ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
429
+ ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
430
+ },
431
+ :multimedia_file_record =>
432
+ { #GEDCOM 5.5.1 multimedia file references, rather than inline blobs.
433
+ #TITL is at the previous level in the link form.
434
+ #["TITL", nil] => [nil, 0, 1, :string, 248, [ [:field, :title] ], "Title of the work" ],
435
+ ["FORM", nil] => [:multimedia_format_record, 0, 1, :string, 4, [ [:class, :multimedia_format_record], [:field, :format] ], "bmp | gif | jpeg | ole | pcx | tiff | ..." ],
436
+ #Non-standard note field to allow for user defined tags.
437
+ ["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
438
+ ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
439
+ ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
440
+ },
441
+ :multimedia_obje_format_record =>
442
+ { #GEDCOM 5.5.1 multimedia file references, rather than inline blobs.
443
+ #multimedia records use TYPE, where multimedia references use MEDI (Why?)
444
+ ["TYPE", nil] => [nil, 0, 1, :string, 15, [ [:field, :media_type] ], " audio | book | card | electronic | fiche | film | magazine | manuscript | map | newspaper | photo | tombstone | video" ],
445
+ #Not standard, but I've seen this form and we might as well recognise it.
446
+ ["MEDI", nil] => [nil, 0, 1, :string, 15, [ [:field, :media_type] ], " audio | book | card | electronic | fiche | film | magazine | manuscript | map | newspaper | photo | tombstone | video" ],
447
+ #Non-standard note field to allow for user defined tags.
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
+ ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
450
+ ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
451
+ },
452
+ :multimedia_format_record =>
453
+ { #GEDCOM 5.5.1 multimedia file references, rather than inline blobs.
454
+ #multimedia records use TYPE, where multimedia references use MEDI (Why?)
455
+ ["MEDI", nil] => [nil, 0, 1, :string, 15, [ [:field, :media_type] ], " audio | book | card | electronic | fiche | film | magazine | manuscript | map | newspaper | photo | tombstone | video" ],
456
+ #Unlikely to see as TYPE tag, but to be consistent with multimedia_obje_format_record, I've included it.
457
+ ["TYPE", nil] => [nil, 0, 1, :string, 15, [ [:field, :media_type] ], " audio | book | card | electronic | fiche | film | magazine | manuscript | map | newspaper | photo | tombstone | video" ],
458
+ #Non-standard note field to allow for user defined tags.
459
+ ["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
460
+ ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
461
+ ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
377
462
  },
378
463
  :multimedia_link =>
379
464
  { #/* in line link form*/
380
- ["FORM", nil] => [nil, 1, 1, :string, 4, [ [:field, :format] ], "bmp | gif | jpeg | ole | pcx | tiff | wav |..." ],
465
+ #GEDCOM 5.5.1
466
+ #Reploces 5.5 FILE's filename with GEDCOM 5.5.1 class, but has a method in this class to return the first FILE filename, hence give the 5.5 behaviour
467
+ #I have reused the Multimedia record's multimedia_file_record, which treats TYPE an MEDI as equivalent, but outputs only MEDI.
468
+ #It also has TITL as a subordinate tag of FILE, which makes more sense if there are multiple FILE tags allowed, though not if the
469
+ #purpose of multiple FILE tags is to collect parts of one object, rather than a collection of related objects.
470
+ ["FILE", nil] => [:multimedia_file_record, 0, nil, :string, 120, [ [:class, :multimedia_file_record], [:field, :filename] ], " local or remote file reference to the auxiliary data" ],
471
+ ["FORM", nil] => [:multimedia_format_record, 1, 1, :string, 4, [ [:class, :multimedia_format_record], [:field, :format] ], "bmp | gif | jpeg | ole | pcx | tiff | wav |..." ],
472
+ #GEDCOM 5.5
381
473
  ["TITL", nil] => [nil, 0, 1, :string, 248, [ [:field, :title] ], "Title of the work" ],
382
474
  ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
383
475
  ["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" ],
476
+ #Filename max length is a touch on the short side, so have altered it to 248 (was 30) to avoid lots of annoying warning messages
477
+ #GEDCOM 5.5 ["FILE", nil] => [nil, 1, 1, :string, 248, [ [:field, :filename] ], "Multimedia Data's Filename" ],
386
478
  ["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
479
  },
388
480
  :encoded_multimedia_line =>
@@ -422,6 +514,11 @@ class GedcomParser
422
514
  ["NAME", nil] => [nil, 0, 1, :string, 90, [ [:field, :repository_name] ], "Official Name of the Archive" ],
423
515
  ["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
424
516
  ["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
517
+ #Added EMAIL,FAX,WWW Gedcom 5.5.1
518
+ ["EMAIL", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_email] ], "email address" ],
519
+ ["FAX", nil] => [nil, 0, 3, :string, 60, [ [:field, :address_fax] ], "FAX :number" ],
520
+ ["WWW", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_web_page] ], "Web URL" ],
521
+ #
425
522
  ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
426
523
  ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
427
524
  ["REFN", nil] => [:family_record_refn, 0, nil, :string, 20, [ [:class, :refn_record], [:field, :user_reference_number] ], "User Defined Reference :number" ],
@@ -497,6 +594,11 @@ class GedcomParser
497
594
  ["NAME", nil] => [nil, 1, 1, :string, 60, [ [:class, :name_record], [:field, :value], [:field, [:attr_type,"NAME"]] , [:pop] ], "Name of the Submitter" ],
498
595
  ["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
499
596
  ["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phone] ], "Phone :number" ],
597
+ #Added EMAIL,FAX,WWW Gedcom 5.5.1
598
+ ["EMAIL", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_email] ], "email address" ],
599
+ ["FAX", nil] => [nil, 0, 3, :string, 60, [ [:field, :address_fax] ], "FAX :number" ],
600
+ ["WWW", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_web_page] ], "Web URL" ],
601
+ #
500
602
  ["OBJE", :xref] => [nil, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:xref, [:multimedia_ref, :multimedia]], [:pop] ], "Link to a Multimedia Record" ],
501
603
  ["OBJE", nil] => [:multimedia_link, 0, nil, nil, 0, [ [:class, :multimedia_citation_record], [:class, :multimedia_record] ], "Inline Multimedia Record" ],
502
604
  ["LANG", nil] => [nil, 0, 3, :languagepreference, 90, [ [:field, :language_list] ], "Ordered List of Prefered Language IDs" ],
@@ -542,7 +644,9 @@ class GedcomParser
542
644
  },
543
645
  :child_to_family_link =>
544
646
  {
545
- ["PEDI", nil] => [nil, 0, nil, :pedigree, 7, [ [:field, :pedigree] ], "Pedigree adopted,birth,foster or sealing" ],
647
+ ["PEDI", nil] => [nil, 0, nil, :pedigree, 7, [ [:field, :pedigree] ], "Pedigree adopted,birth,foster or sealing" ],
648
+ #Added STAT Gedcom version 5.5.1
649
+ ["STAT", nil] => [nil, 0, nil, :child_linkage_status, 15, [ [:field, :child_linkage_status] ], "Opinion challenged,disproven,proven" ],
546
650
  ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
547
651
  ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
548
652
  ["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
@@ -550,14 +654,21 @@ class GedcomParser
550
654
  :event_detail =>
551
655
  {
552
656
  #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
657
+ ["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5, but in 5.5.1
554
658
 
555
659
  ["TYPE", nil] => [nil, 0, 1, :string, 90, [ [:field, :event_descriptor] ], "Event Description" ],
556
660
  ["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
661
  ["PLAC", nil] => [:place_structure, 0, 1, :placehierachy, 120, [ [:class, :place_record], [:field, :place_value ]], "Jurisdictional Place Hierarchy where the Event Occurred" ],
558
662
  ["ADDR", nil] => [:address_structure, 0, 1, :string, 60, [ [:class, :address_record], [:field, :address] ], "Address" ],
559
663
  ["PHON", nil] => [nil, 0, 3, :string, 25, [ [:field, :phonenumber] ], "Phone :number" ],
664
+ #Added EMAIL,FAX,WWW Gedcom 5.5.1
665
+ ["EMAIL", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_email] ], "email address" ],
666
+ ["FAX", nil] => [nil, 0, 3, :string, 60, [ [:field, :address_fax] ], "FAX :number" ],
667
+ ["WWW", nil] => [nil, 0, 3, :string, 120, [ [:field, :address_web_page] ], "Web URL" ],
668
+ #
560
669
  ["AGE", nil] => [nil, 0, 1, :age, 12, [ [:field, :age] ], "Age at the time of the Event" ],
670
+ #GEDCOM 5.5.1
671
+ ["RELI", nil] => [nil, 0, 1, :string, 90, [ [:field, :religion] ], "A name of the religion with which this event was affiliated" ],
561
672
  ["AGNC", nil] => [nil, 0, 1, :string, 120, [ [:field, :agency] ], "Controlling/Resonsible Entity/Authority" ],
562
673
  ["CAUS", nil] => [:cause_note_structure_inline,0, 1, :string, 90, [ [:class, :cause_record], [:field, :cause] ], "Cause of the Event" ],
563
674
  ["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
@@ -637,34 +748,94 @@ class GedcomParser
637
748
  ["SPFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :surname_prefix] ], "Surname Prefix (comma separarted)" ],
638
749
  ["SURN", nil] => [nil, 0, 1, :name_piece_list, 120, [ [:field, :surname] ], "Surname(s) (comma separarted)" ],
639
750
  ["NSFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :suffix] ], "Non-indexed Name Suffix (comma separarted)" ],
751
+ #GEDCOM 5.5.1 has TYPE, FONE, ROMN tags subordinate to the NAME Tag.
752
+ ["TYPE", nil] => [nil, 0, 1, :name_event_type, 30, [ [:field, :name_type] ], "aka (i.e. alias)| birth | immigrant | maiden | married | <user defined>" ],
753
+ ["FONE", nil] => [:name_phonetic_variation, 0, 1, :name_string, 120, [ [:class, :name_phonetic_record], [:field, :phonetic_name] ], " phonetically written using the method indicated by the subordinate PHONETIC_TYPE" ],
754
+ ["ROMN", nil] => [:name_romanized_variation, 0, 1, :name_string, 120, [ [:class, :name_romanized_record], [:field, :romanized_name] ], " Romanized written using the method indicated by the subordinate ROMANIZED_TYPE" ],
755
+ #
640
756
  ["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
641
757
  ["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
642
758
  ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
643
759
  ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
644
760
  ["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" ],
761
+ },
762
+ #GEDCOM 5.5.1
763
+ :name_phonetic_variation =>
764
+ {
765
+ ["TYPE", nil] => [nil, 0, 1, :phonetic_type, 30, [ [:field, :phonetic_type] ], "<user defined> | hangul | kana" ],
766
+ #Personal name structure tags
767
+ ["NPFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :prefix] ], "Non-indexed Name Prefix (comma separarted)" ],
768
+ ["GIVN", nil] => [nil, 0, 1, :name_piece_list, 120, [ [:field, :given] ], "Given Names (comma separarted)" ],
769
+ ["NICK", nil] => [nil, 0, 1, :name_piece_list, 120, [ [:field, :nickname] ], "Nickname(s) (comma separarted)" ],
770
+ ["SPFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :surname_prefix] ], "Surname Prefix (comma separarted)" ],
771
+ ["SURN", nil] => [nil, 0, 1, :name_piece_list, 120, [ [:field, :surname] ], "Surname(s) (comma separarted)" ],
772
+ ["NSFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :suffix] ], "Non-indexed Name Suffix (comma separarted)" ],
773
+ #source
774
+ ["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
775
+ ["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
776
+ #Notes
777
+ ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
778
+ ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
779
+ ["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
780
+ ["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5.
781
+ },
782
+ :name_romanized_variation =>
783
+ {
784
+ ["TYPE", nil] => [nil, 0, 1, :romanized_type, 30, [ [:field, :romanized_type] ], "<user defined> | pinyin | romaji | wadegiles" ],
785
+ #Personal name structure tags
786
+ ["NPFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :prefix] ], "Non-indexed Name Prefix (comma separarted)" ],
787
+ ["GIVN", nil] => [nil, 0, 1, :name_piece_list, 120, [ [:field, :given] ], "Given Names (comma separarted)" ],
788
+ ["NICK", nil] => [nil, 0, 1, :name_piece_list, 120, [ [:field, :nickname] ], "Nickname(s) (comma separarted)" ],
789
+ ["SPFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :surname_prefix] ], "Surname Prefix (comma separarted)" ],
790
+ ["SURN", nil] => [nil, 0, 1, :name_piece_list, 120, [ [:field, :surname] ], "Surname(s) (comma separarted)" ],
791
+ ["NSFX", nil] => [nil, 0, 1, :name_piece_list, 30, [ [:field, :suffix] ], "Non-indexed Name Suffix (comma separarted)" ],
792
+ #source
793
+ ["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
794
+ ["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
795
+ #Notes
796
+ ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
797
+ ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
798
+ ["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
799
+ ["RESN", nil] => [nil, 0, 1, :restriction_value, 7, [ [:field, :restriction] ], "Record Locked or Parts removed for Privacy" ], #NOT GEDCOM 5.5.
659
800
  },
660
801
  :place_structure =>
661
802
  {
662
- ["FORM", nil] => [nil, 0, 1, :placehierachy, 30, [ [:field, :place_hierachy] ], "Place Hierachy (comma separarted jurisdictions)" ],
803
+ ["FORM", nil] => [nil, 0, 1, :placehierachy, 120, [ [:field, :place_hierachy] ], "Place Hierachy (comma separarted jurisdictions)" ],
804
+ #GEDCOM 5.5.1 adds FONE, ROMN, MAP
805
+ ["FONE", nil] => [:placename_phonetic_variation, 0, 1, :placehierachy, 120, [ [:class, :placename_phonetic_record], [:field, :phonetic_name] ], " phonetically written using the method indicated by the subordinate PHONETIC_TYPE" ],
806
+ ["ROMN", nil] => [:placename_romanized_variation, 0, 1, :placehierachy, 120, [ [:class, :placename_romanized_record], [:field, :romanized_name] ], " Romanized written using the method indicated by the subordinate ROMANIZED_TYPE" ],
807
+ ["MAP", nil] => [:placename_map_structure, 0, 1, nil, 0, [ [:class, :placename_map_record] ], "Latitude and Longitude" ],
663
808
  ["SOUR", :xref] => [:source_citation, 0, nil, nil, 0, [ [:class, :source_citation_record], [:xref, [:source_ref, :source]] ], "Reference to Source Record" ],
664
809
  ["SOUR", nil] => [:source_citation_inline, 0, nil, :string, 248, [ [:class, :source_citation_record], [:class, :source_record], [:field, :title] ], "Inline note describing source" ],
665
810
  ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
666
811
  ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
667
812
  ["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
813
+ },
814
+ #GEDCOM 5.5.1
815
+ :placename_map_structure =>
816
+ {
817
+ ["LATI", nil] => [nil, 0, 1, :latitude, 8, [ [:field, :latitude] ], "Decimal format e.g. N18.150944" ],
818
+ ["LONG", nil] => [nil, 0, 1, :longitude, 8, [ [:field, :longitude] ], "Decimal format e.g. E168.150944" ],
819
+ #Notes
820
+ ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
821
+ ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
822
+ ["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
823
+ },
824
+ :placename_phonetic_variation =>
825
+ {
826
+ ["TYPE", nil] => [nil, 0, 1, :phonetic_type, 30, [ [:field, :phonetic_type] ], "<user defined> | hangul | kana" ],
827
+ #Notes
828
+ ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
829
+ ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
830
+ ["NOTE", :user] => [:user_subtag, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Treat Unknown Tags as Single line notes" ],
831
+ },
832
+ :placename_romanized_variation =>
833
+ {
834
+ ["TYPE", nil] => [nil, 0, 1, :romanized_type, 30, [ [:field, :romanized_type] ], "<user defined> | pinyin | romaji | wadegiles" ],
835
+ #Notes
836
+ ["NOTE", :xref] => [:note_structure, 0, nil, nil, 0, [ [:class, :note_citation_record], [:xref, [:note_ref, :note]] ], "Link to a Note Record" ],
837
+ ["NOTE", nil] => [:note_structure_inline, 0, nil, :string, 248, [ [:class, :note_citation_record], [:class, :note_record], [:field, :note] ], "Inline Note Record" ],
838
+ ["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
839
  },
669
840
  :source_citation =>
670
841
  {