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,82 @@
1
+ require 'gedcom_base.rb'
2
+
3
+ #
4
+ #=GEDCOM 5.5.1
5
+ #=MULTIMEDIA_LINK:=
6
+ # n OBJE <XREF> {1:1} is a reference to level 0 multimedia record.
7
+ # |
8
+ # n OBJE {1:1} is inline reference to an external file, rather than multimedia record.
9
+ # +1 FILE <MULTIMEDIA_FILE_REFN> {1:M} Now 1:M in 5.5.1, was 1:1 in 5.5
10
+ # +2 FORM <MULTIMEDIA_FORMAT> {1:1} Was as level 1 in GEDCOM 5.5
11
+ # +3 MEDI <SOURCE_MEDIA_TYPE> {0:1} New in 5.5.1
12
+ # +1 TITL <DESCRIPTIVE_TITLE> {0:1}
13
+ #
14
+ # No blobs in 5.5.1
15
+ #
16
+ #
17
+ #The attributes are all arrays for the level +1 tags/records.
18
+ #* Those ending in _ref are GEDCOM XREF index keys
19
+ #* Those ending in _record are array of classes of that type.
20
+ #* The remainder are arrays of attributes that could be present in this record.
21
+
22
+ class Multimedia_format_record < GEDCOMBase
23
+ attr_accessor :media_type, :format
24
+ attr_accessor :note_citation_record #for user defined tags
25
+
26
+ ClassTracker << :Multimedia_format_record
27
+
28
+ def to_gedcom(level=0)
29
+
30
+ @this_level = [ [:print, "FORM", :format]]
31
+ @sub_level = [#level 1
32
+ [:print, "MEDI", :media_type ],
33
+ [:walk, nil, :note_citation_record ], #for user defined tags
34
+ ]
35
+
36
+ super(level)
37
+ end
38
+
39
+ def type
40
+ :media_type
41
+ end
42
+
43
+ end
44
+
45
+ #Almost the same structure inline in OBJE record.
46
+ # Note TITL subordinate to FILE, rather than at same level.
47
+ # TYPE used, where MEDI used in Link version.
48
+ #=MULTIMEDIA_RECORD:=
49
+ # 0 @XREF:OBJE@ OBJE {0:M}
50
+ # +1 FILE <MULTIMEDIA_FILE_REFN> {1:M} New in 5.5.1
51
+ # +2 FORM <MULTIMEDIA_FORMAT> {1:1} Was as level 1 in GEDCOM 5.5
52
+ # +3 TYPE <SOURCE_MEDIA_TYPE> {0:1} New in 5.5.1
53
+ # +2 TITL <DESCRIPTIVE_TITLE> {0:1} Was as level 1 in GEDCOM 5.5
54
+ # ....
55
+ #The attributes are all arrays for the level +1 tags/records.
56
+ #* Those ending in _ref are GEDCOM XREF index keys
57
+ #* Those ending in _record are array of classes of that type.
58
+ #* The remainder are arrays of attributes that could be present in this record.
59
+
60
+ class Multimedia_obje_format_record < GEDCOMBase
61
+ attr_accessor :media_type, :format
62
+ attr_accessor :note_citation_record #for user defined tags
63
+
64
+ ClassTracker << :Multimedia_obje_format_record
65
+
66
+ def to_gedcom(level=0)
67
+
68
+ @this_level = [ [:print, "FORM", :format]]
69
+ @sub_level = [#level 1
70
+ [:print, "TYPE", :media_type ],
71
+ [:walk, nil, :note_citation_record ], #for user defined tags
72
+ ]
73
+
74
+ super(level)
75
+ end
76
+
77
+ def type
78
+ :media_type
79
+ end
80
+
81
+ end
82
+
@@ -3,7 +3,7 @@ require 'gedcom_base.rb'
3
3
  #Internal representation of the GEDCOM OBJE record type
4
4
  #GEDCOM has both inline OBJE records and references to level 0 OBJE records.
5
5
  #both are stored here and referenced through a Multimedia_citation_record class.
6
- #
6
+ #=GEDCOM 5.5
7
7
  #=MULTIMEDIA_RECORD:=
8
8
  # 0 @XREF:OBJE@ OBJE {0:M}
9
9
  # +1 FORM <MULTIMEDIA_FORMAT> {1:1}
@@ -22,7 +22,10 @@ require 'gedcom_base.rb'
22
22
  # subordinate OBJE tag to chain to the next <MULTIMEDIA_RECORD> fragment. This will allow
23
23
  # GEDCOM records to be maintained below the 32K limit for use in systems with limited resources.
24
24
  #
25
- # n OBJE {1:1} is a reference to an external file, rather than inline.
25
+ #=MULTIMEDIA_LINK:=
26
+ # n OBJE <XREF> {1:1} is a reference to level 0 multimedia record.
27
+ # |
28
+ # n OBJE {1:1} is a reference to an external file, rather than inline blob.
26
29
  # +1 FORM <MULTIMEDIA_FORMAT> {1:1}
27
30
  # +1 TITL <DESCRIPTIVE_TITLE> {0:1}
28
31
  # +1 FILE <MULTIMEDIA_FILE_REFERENCE> {1:1}
@@ -37,14 +40,40 @@ require 'gedcom_base.rb'
37
40
  # the GEDCOM file in context, but the maintenance and transfer of the multimedia files are external to
38
41
  # GEDCOM. The parser can just treat this as a comment and doesn't check for the file being present.
39
42
  #
43
+ #=GEDCOM 5.5.1
44
+ #=MULTIMEDIA_RECORD:=
45
+ # 0 @XREF:OBJE@ OBJE {0:M}
46
+ # +1 FILE <MULTIMEDIA_FILE_REFN> {1:M} New in 5.5.1
47
+ # +2 FORM <MULTIMEDIA_FORMAT> {1:1} Was as level 1 in GEDCOM 5.5
48
+ # +3 TYPE <SOURCE_MEDIA_TYPE> {0:1} New in 5.5.1
49
+ # +2 TITL <DESCRIPTIVE_TITLE> {0:1} Was as level 1 in GEDCOM 5.5
50
+ # +1 <<NOTE_STRUCTURE>> {0:M}
51
+ # +1 <<SOURCE_CITATION>> {0:M} New in 5.5.1
52
+ # +1 REFN <USER_REFERENCE_NUMBER> {0:M}
53
+ # +2 TYPE <USER_REFERENCE_TYPE> {0:1}
54
+ # +1 RIN <AUTOMATED_RECORD_ID> {0:1}
55
+ # +1 <<CHANGE_DATE>> {0:1}
56
+ #
57
+ #=MULTIMEDIA_LINK:=
58
+ # n OBJE <XREF> {1:1} is a reference to level 0 multimedia record.
59
+ # |
60
+ # n OBJE {1:1} is inline reference to an external file, rather than multimedia record.
61
+ # +1 FILE <MULTIMEDIA_FILE_REFN> {1:M} Now 1:M in 5.5.1, was 1:1 in 5.5
62
+ # +2 FORM <MULTIMEDIA_FORMAT> {1:1} Was as level 1 in GEDCOM 5.5
63
+ # +3 TYPE <SOURCE_MEDIA_TYPE> {0:1} New in 5.5.1
64
+ # +1 TITL <DESCRIPTIVE_TITLE> {0:1}
65
+ #
40
66
  #The attributes are all arrays for the level +1 tags/records.
41
67
  #* Those ending in _ref are GEDCOM XREF index keys
42
68
  #* Those ending in _record are array of classes of that type.
43
69
  #* The remainder are arrays of attributes that could be present in this record.
44
70
  class Multimedia_record < GEDCOMBase
45
- attr_accessor :multimedia_ref, :format, :title, :encoded_line_record, :next_multimedia_ref, :filename
71
+ attr_accessor :multimedia_ref, :title, :encoded_line_record, :next_multimedia_ref
46
72
  attr_accessor :refn_record, :automated_record_id, :note_citation_record, :change_date_record
47
-
73
+ attr_accessor :multimedia_obje_file_record #GEDCOM 5.5.1, though some 5.5 variants need this too.
74
+ attr_accessor :multimedia_file_record, :multimedia_format_record #GEDCOM 5.5.1, though some 5.5 variants need this too.
75
+ attr_accessor :source_citation_record #Gedcom 5.5.1
76
+
48
77
  ClassTracker << :Multimedia_record
49
78
 
50
79
  def to_gedcom(level=0)
@@ -56,17 +85,36 @@ class Multimedia_record < GEDCOMBase
56
85
  end
57
86
 
58
87
  @sub_level = [#level 1
59
- [:print, "TITL", :title ],
60
- [:print, "FORM", :format ],
61
- [:walk, nil, :encoded_line_record ],
62
- [:xref, nil, :next_multimedia_ref ],
63
- [:print, "FILE", :filename ],
64
- [:walk, nil, :note_citation_record ],
65
- [:walk, nil, :refn_record ],
66
- [:print, "RIN", :automated_record_id ],
88
+ [:walk, nil, :multimedia_obje_file_record ], #"FILE", GEDCOM 5.5.1, FILE reference, rather than blobs.
89
+ [:walk, nil, :multimedia_file_record ], #"FILE", GEDCOM 5.5.1, FILE reference, rather than blobs.
90
+ [:print, "TITL",:title ], #GEDCOM 5.5, Subordinate to FILE in 5.5.1
91
+ [:walk, nil, :multimedia_format_record ], # "FORM", GEDCOM 5.5, Subordinate to FILE in 5.5.1
92
+ [:walk, nil, :encoded_line_record ], #GEDCOM 5.5 BLOB
93
+ [:xref, nil, :next_multimedia_ref ], #GEDCOM 5.5 OBJE, Next BLOB reference.
94
+ [:walk, nil, :source_citation_record], #GEDCOM 5.5.1
95
+ [:walk, nil, :note_citation_record ],
96
+ [:walk, nil, :refn_record ],
97
+ [:print, "RIN", :automated_record_id ],
67
98
  [:walk, nil, :change_date_record ],
68
99
  ]
69
-
100
+
70
101
  super(level)
71
102
  end
103
+
104
+ #Replacing :filename with multimedia_file_record could break some code,
105
+ #so def filename returns the filename in the first multimedia_file_record's filename field.
106
+ def filename
107
+ #ALL Tag values get stored in arrays, as there could be more than one instance of a Tag
108
+ #Hence the 'first' is added.
109
+ multimedia_obj_file_record != nil ? multimedia_obj_file_record.first.filename : nil
110
+ end
111
+
112
+ #Replacing :format with multimedia_format_record could break some code,
113
+ #so def format returns the format in the first multimedia_format_record's format field.
114
+ def format
115
+ #ALL Tag values get stored in arrays, as there could be more than one instance of a Tag
116
+ #Hence the 'first' is added.
117
+ multimedia_obj_format_record != nil ? multimedia_obj_format_record.first.format : nil
118
+ end
119
+
72
120
  end
@@ -0,0 +1,70 @@
1
+ require 'gedcom_base.rb'
2
+
3
+ #GEDCOM 5.5.1 Draft adds as subordinate to NAME
4
+ #
5
+ # +1 FONE <NAME_PHONETIC_VARIATION>
6
+ # +2 TYPE <PHONETIC_TYPE>
7
+ # +2 <<PERSONAL_NAME_PIECES>>
8
+ #
9
+ #==NAME_PHONETIC_VARIATION:= {Size=1:120}
10
+ # PHONETIC_TYPE [<user defined> | hangul | kana] {Size=5:30}
11
+ #The phonetic variation of the name is written in the same form as the was the name used in the superior <NAME_PERSONAL> primitive,
12
+ # but phonetically written using the method indicated by the subordinate <PHONETIC_TYPE> value, for example if hiragana was used
13
+ #to provide a reading of a name written in kanji, then the <PHONETIC_TYPE> value would indicate 'kana'.
14
+ #
15
+
16
+ class Name_phonetic_record < GEDCOMBase
17
+ #Phonetic Name is stored in phonetic_name and recovered via def name, or the alias phonetic_name
18
+ attr_writer :phonetic_name
19
+ attr_accessor :prefix, :given, :nickname, :surname_prefix, :surname, :suffix
20
+ attr_accessor :restriction, :source_citation_record, :note_citation_record
21
+ ClassTracker << :Name_phonetic_record
22
+
23
+ def initialize(*a)
24
+ super(*a)
25
+ @this_level = [ [:print, "FONE", :phonetic_name] ]
26
+ @sub_level = [
27
+ [:print, "NPFX", :prefix ],
28
+ [:print, "GIVN", :given ],
29
+ [:print, "NICK", :nickname ],
30
+ [:print, "SPFX", :surname_prefix ],
31
+ [:print, "SURN", :surname ],
32
+ [:print, "NSFX", :suffix ],
33
+ [:walk, nil, :source_citation_record],
34
+ [:walk, nil, :note_citation_record],
35
+ [:print, "RESN", :restriction],
36
+ ]
37
+ end
38
+
39
+ #return the name as a string. It might be returned be the #phonetic_name method.
40
+ # or it might need to be contructed from the Name_phonetic_record personal name pieces attributes.
41
+ def name
42
+ if (name = phonetic_name) == nil
43
+ name = "" #could be what we return if none of the Name_record attributes are set
44
+ if @prefix
45
+ name += @prefix.first
46
+ name += ' ' if @given || @nickname || @surname_prefix || @surname || @suffix
47
+ end
48
+ if @given
49
+ name += @given.first
50
+ name += ' ' if @nickname || @surname_prefix || @surname || @suffix
51
+ end
52
+ if @nickname
53
+ name += '(' + @nickname.first + ')'
54
+ name += ' ' if @surname_prefix || @surname || @suffix
55
+ end
56
+ if @surname_prefix
57
+ name += @surname_prefix.first
58
+ name += ' ' if @surname || @suffix
59
+ end
60
+ if @surname
61
+ name += ( '/' + @surname.first + '/' )
62
+ name += ' ' if @suffix
63
+ end
64
+ name += @suffix.first if @suffix
65
+ end
66
+ return name.first
67
+ end
68
+
69
+ alias :phonetic_name :name
70
+ end
@@ -32,10 +32,10 @@ require 'individual_attribute_record.rb'
32
32
  #
33
33
  # The surname of an individual, if known, is enclosed between two slash (/) characters. The order of the
34
34
  # name parts should be the order that the person would, by custom of their culture, have used when
35
- # giving it to a recorder. Early versions of Personal Ancestral File and other products did not use the ®
35
+ # giving it to a recorder. Early versions of Personal Ancestral File and other products did not use the (R)
36
36
  # trailing slash when the surname was the last element of the name. If part of name is illegible, that part
37
37
  # is indicated by an ellipsis (...). Capitalize the name of a person or place in the conventional
38
- # mannercapitalize the first letter of each part and lowercase the other letters, unless conventional
38
+ # manner-capitalize the first letter of each part and lowercase the other letters, unless conventional
39
39
  # usage is otherwise. For example: McMurray.
40
40
  # Examples:
41
41
  # 1 NAME William Lee (given name only or surname not known)
@@ -69,8 +69,40 @@ require 'individual_attribute_record.rb'
69
69
  #* Those ending in _ref are GEDCOM XREF index keys
70
70
  #* Those ending in _record are array of classes of that type.
71
71
  #* The remainder are arrays of attributes that could be present in this record.
72
+ #
73
+ #GEDCOM 5.5.1 Draft adds
74
+ #
75
+ # +1 TYPE <NAME_TYPE>
76
+ # +1 FONE <NAME_PHONETIC_VARIATION>
77
+ # +2 TYPE <PHONETIC_TYPE>
78
+ # +2 <<PERSONAL_NAME_PIECES>>
79
+ # +1 ROMN <NAME_ROMANIZED_VARIATION>
80
+ # +2 TYPE <ROMANIZED_TYPE>
81
+ # +2 <<PERSONAL_NAME_PIECES>>
82
+ #
83
+ #==NAME_TYPE:= {Size=5:30}
84
+ # [ aka | birth | immigrant | maiden | married | <user defined> ]
85
+ #Indicates the name type, for example the name issued or assumed as an immigrant.
86
+ #e.g. birth indicates name given on birth certificate.
87
+ #
88
+ #==NAME_PHONETIC_VARIATION:= {Size=1:120}
89
+ # PHONETIC_TYPE [<user defined> | hangul | kana] {Size=5:30}
90
+ #The phonetic variation of the name is written in the same form as the was the name used in the superior <NAME_PERSONAL> primitive,
91
+ # but phonetically written using the method indicated by the subordinate <PHONETIC_TYPE> value, for example if hiragana was used
92
+ #to provide a reading of a name written in kanji, then the <PHONETIC_TYPE> value would indicate 'kana'.
93
+ #
94
+ #==NAME_ROMANIZED_VARIATION:= {Size=1:120}
95
+ # ROMANIZED_TYPE [<user defined> | pinyin | romaji | wadegiles] {Size=5:30}
96
+ #The romanized variation of the name is written in the same form prescribed for the name used in the superior <NAME_PERSONAL> context.
97
+ #The method used to romanize the name is indicated by the line_value of the subordinate <ROMANIZED_TYPE>, for example
98
+ #if romaji was used to provide a reading of a name written in kanji, then the ROMANIZED_TYPE subordinate to the ROMN tag
99
+ #would indicate romaji.
100
+ #==TYPE:=
72
101
  class Name_record < Individual_attribute_record
102
+ #Name stored in field "value", as this is an individual_attribute_record subtype.
103
+ #Value of attribute "type" is set to NAME
73
104
  attr_accessor :prefix, :given, :nickname, :surname_prefix, :surname, :suffix
105
+ attr_accessor :name_type, :name_phonetic_record, :name_romanized_record #GEDCOM 5.5.1
74
106
  ClassTracker << :Name_record
75
107
 
76
108
  def initialize(*a)
@@ -82,9 +114,13 @@ class Name_record < Individual_attribute_record
82
114
  [:print, "SPFX", :surname_prefix ],
83
115
  [:print, "SURN", :surname ],
84
116
  [:print, "NSFX", :suffix ],
117
+ [:print, "TYPE", :name_type ], #5.5.1
118
+ [:walk, "FONE", :name_phonetic_record],
119
+ [:walk, "ROMN", :name_romanized_record],
85
120
  ] + @sub_level
86
121
  end
87
122
 
123
+ #Attributes and Events have a common class, as they are essentially identical.
88
124
  def event_tag(tag)
89
125
  case tag
90
126
  when "NAME" then tag
@@ -0,0 +1,72 @@
1
+ require 'gedcom_base.rb'
2
+
3
+ #GEDCOM 5.5.1 Draft adds as subordinate to NAME
4
+ #
5
+ # +1 ROMN <NAME_ROMANIZED_VARIATION>
6
+ # +2 TYPE <ROMANIZED_TYPE>
7
+ # +2 <<PERSONAL_NAME_PIECES>>
8
+ #
9
+ #
10
+ #
11
+ #==NAME_ROMANIZED_VARIATION:= {Size=1:120}
12
+ # ROMANIZED_TYPE [<user defined> | pinyin | romaji | wadegiles] {Size=5:30}
13
+ #The romanized variation of the name is written in the same form prescribed for the name used in the superior <NAME_PERSONAL> context.
14
+ #The method used to romanize the name is indicated by the line_value of the subordinate <ROMANIZED_TYPE>, for example
15
+ #if romaji was used to provide a reading of a name written in kanji, then the ROMANIZED_TYPE subordinate to the ROMN tag
16
+ #would indicate romaji.
17
+
18
+ class Name_romanized_record < GEDCOMBase
19
+ #romanized Name is stored in romanized_name and recovered via def name, or the alias romanized_name
20
+ attr_writer :romanized_name
21
+ attr_accessor :prefix, :given, :nickname, :surname_prefix, :surname, :suffix
22
+ attr_accessor :restriction, :source_citation_record, :note_citation_record
23
+ ClassTracker << :Name_romanized_record
24
+
25
+ def initialize(*a)
26
+ super(*a)
27
+ @this_level = [ [:print, "ROMN", :romanized_name] ]
28
+ @sub_level = [
29
+ [:print, "NPFX", :prefix ],
30
+ [:print, "GIVN", :given ],
31
+ [:print, "NICK", :nickname ],
32
+ [:print, "SPFX", :surname_prefix ],
33
+ [:print, "SURN", :surname ],
34
+ [:print, "NSFX", :suffix ],
35
+ [:walk, nil, :source_citation_record],
36
+ [:walk, nil, :note_citation_record],
37
+ [:print, "RESN", :restriction],
38
+ ]
39
+ end
40
+
41
+ #return the name as a string. It might be returned be the romanized_name method.
42
+ # or it might need to be contructed from the Name_romanized_record personal name pieces attributes.
43
+ def name
44
+ if (name = romanized_name) == nil
45
+ name = "" #could be what we return if none of the Name_record attributes are set
46
+ if @prefix
47
+ name += @prefix.first
48
+ name += ' ' if @given || @nickname || @surname_prefix || @surname || @suffix
49
+ end
50
+ if @given
51
+ name += @given.first
52
+ name += ' ' if @nickname || @surname_prefix || @surname || @suffix
53
+ end
54
+ if @nickname
55
+ name += '(' + @nickname.first + ')'
56
+ name += ' ' if @surname_prefix || @surname || @suffix
57
+ end
58
+ if @surname_prefix
59
+ name += @surname_prefix.first
60
+ name += ' ' if @surname || @suffix
61
+ end
62
+ if @surname
63
+ name += ( '/' + @surname.first + '/' )
64
+ name += ' ' if @suffix
65
+ end
66
+ name += @suffix.first if @suffix
67
+ end
68
+ return name.first
69
+ end
70
+
71
+ alias :romanized_name :name
72
+ end
@@ -21,7 +21,9 @@ require 'gedcom_base.rb'
21
21
  #* Those ending in _record are array of classes of that type.
22
22
  #* The remainder are arrays of attributes that could be present in the PLAC records.
23
23
  class Place_record < GEDCOMBase
24
- attr_accessor :place_value, :place_hierachy, :source_citation_record, :note_citation_record
24
+ attr_accessor :place_value, :place_hierachy
25
+ attr_accessor :source_citation_record, :note_citation_record
26
+ attr_accessor :placename_phonetic_record, :placename_romanized_record, :placename_map_record
25
27
 
26
28
  ClassTracker << :Place_record
27
29
 
@@ -30,6 +32,9 @@ class Place_record < GEDCOMBase
30
32
  @this_level = [ [:print, "PLAC", :place_value] ]
31
33
  @sub_level = [ #level + 1
32
34
  [:print, "FORM", :place_hierachy],
35
+ [:print, "FONE", :placename_phonetic_record],
36
+ [:print, "ROMN", :placename_romanized_record],
37
+ [:print, "MAP", :placename_map_record],
33
38
  [:walk, nil, :source_citation_record],
34
39
  [:walk, nil, :note_citation_record],
35
40
  ]
@@ -37,6 +42,9 @@ class Place_record < GEDCOMBase
37
42
  @this_level = [ [:nodata, "PLAC", nil] ]
38
43
  @sub_level = [ #level + 1
39
44
  [:print, "FORM", :place_hierachy],
45
+ [:print, "FONE", :placename_phonetic_record],
46
+ [:print, "ROMN", :placename_romanized_record],
47
+ [:print, "MAP", :placename_map_record],
40
48
  [:walk, nil, :source_citation_record],
41
49
  [:walk, nil, :note_citation_record],
42
50
  ]
@@ -0,0 +1,39 @@
1
+ require 'gedcom_base.rb'
2
+
3
+ #=Placename_map_record
4
+ #GEDCOM 5.5.1 Draft adds as subordinate to PLAC
5
+ #
6
+ # +1 MAP
7
+ # +2 LATI <PLACE_LATITUDE>
8
+ # +2 LONG <PLACE_LONGITUDE>
9
+ #
10
+ #==PLACE_LATITUDE:= {Size=5:8}
11
+ # The value specifying the latitudinal coordinate of the place name. The latitude coordinate is
12
+ #the direction North or South from the equator in degrees and fraction of degrees carried out to give
13
+ #the desired accuracy. For example: 18 degrees, 9 minutes, and 3.4 seconds North would be formatted
14
+ #as N18.150944. Minutes and seconds are converted by dividing the minutes value by 60 and the seconds
15
+ #value by 3600 and adding the results together. This sum becomes the fractional part of the degree's value.
16
+ #
17
+ #==PLACE_LONGITUDE:= {Size=5:8}
18
+ #The value specifying the longitudinal coordinate of the place name. The longitude coordinate is Degrees
19
+ #and fraction of degrees east or west of the zero or base meridian coordinate. For example: 168 degrees,
20
+ #9 minutes, and 3.4 seconds East would be formatted as E168.150944.
21
+ #
22
+ #I allow a NOTE record too, to cope with user defined tags
23
+
24
+ class Placename_map_record < GEDCOMBase
25
+ attr_accessor :latitude, :longitude
26
+ attr_accessor :note_citation_record
27
+ ClassTracker << :Placename_map_record
28
+
29
+ def initialize(*a)
30
+ super(*a)
31
+ @this_level = [ [:print, "MAP", nil] ]
32
+ @sub_level = [
33
+ [:print, "LATI", :latitude],
34
+ [:print, "LONG", :longitude], #Not standard
35
+ [:walk, nil, :note_citation_record],
36
+ ]
37
+ end
38
+ end
39
+