gedcom 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+