gedcom 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -0
- data/Manifest.txt +74 -0
- data/README.txt +129 -0
- data/Rakefile +13 -0
- data/lib/gedcom.rb +105 -0
- data/lib/gedcom/address_record.rb +77 -0
- data/lib/gedcom/adoption_record.rb +57 -0
- data/lib/gedcom/association_record.rb +79 -0
- data/lib/gedcom/cause_record.rb +45 -0
- data/lib/gedcom/change_date_record.rb +39 -0
- data/lib/gedcom/character_set_record.rb +41 -0
- data/lib/gedcom/citation_data_record.rb +49 -0
- data/lib/gedcom/citation_event_type_record.rb +42 -0
- data/lib/gedcom/corporate_record.rb +36 -0
- data/lib/gedcom/date_record.rb +206 -0
- data/lib/gedcom/encoded_line_record.rb +34 -0
- data/lib/gedcom/event_age_record.rb +36 -0
- data/lib/gedcom/event_record.rb +258 -0
- data/lib/gedcom/events_list_record.rb +61 -0
- data/lib/gedcom/families_individuals.rb +79 -0
- data/lib/gedcom/family_record.rb +89 -0
- data/lib/gedcom/gedcom_all.rb +41 -0
- data/lib/gedcom/gedcom_base.rb +337 -0
- data/lib/gedcom/gedcom_record.rb +44 -0
- data/lib/gedcom/header_data_record.rb +49 -0
- data/lib/gedcom/header_record.rb +75 -0
- data/lib/gedcom/header_source_record.rb +42 -0
- data/lib/gedcom/individual_attribute_record.rb +86 -0
- data/lib/gedcom/individual_record.rb +128 -0
- data/lib/gedcom/multimedia_citation_record.rb +55 -0
- data/lib/gedcom/multimedia_record.rb +72 -0
- data/lib/gedcom/name_record.rb +58 -0
- data/lib/gedcom/note_citation_record.rb +37 -0
- data/lib/gedcom/note_record.rb +61 -0
- data/lib/gedcom/place_record.rb +46 -0
- data/lib/gedcom/refn_record.rb +32 -0
- data/lib/gedcom/repository_caln.rb +33 -0
- data/lib/gedcom/repository_citation_record.rb +43 -0
- data/lib/gedcom/repository_record.rb +41 -0
- data/lib/gedcom/source_citation_record.rb +74 -0
- data/lib/gedcom/source_record.rb +84 -0
- data/lib/gedcom/source_scope_record.rb +35 -0
- data/lib/gedcom/submission_record.rb +53 -0
- data/lib/gedcom/submitter_record.rb +53 -0
- data/lib/gedcom/text_record.rb +31 -0
- data/lib/gedcom/trailer_record.rb +22 -0
- data/lib/gedcom/transmission.rb +103 -0
- data/lib/gedcom/transmission_base.rb +267 -0
- data/lib/parser/class_tracker.rb +33 -0
- data/lib/parser/ged_line.rb +99 -0
- data/lib/parser/gedcom_parser.rb +798 -0
- data/lib/parser/instruction.rb +14 -0
- data/lib/parser/parse_state.rb +49 -0
- data/test/test_gedcom.rb +7 -0
- data/test_data/Document.RTF +1 -0
- data/test_data/Document.tex +1 -0
- data/test_data/ImgFile.BMP +0 -0
- data/test_data/ImgFile.GIF +0 -0
- data/test_data/ImgFile.JPG +0 -0
- data/test_data/ImgFile.MAC +0 -0
- data/test_data/ImgFile.PCX +0 -0
- data/test_data/ImgFile.PIC +0 -0
- data/test_data/ImgFile.PNG +0 -0
- data/test_data/ImgFile.PSD +0 -0
- data/test_data/ImgFile.TGA +0 -0
- data/test_data/ImgFile.TIF +0 -0
- data/test_data/README.txt +1 -16
- data/test_data/TGC551.ged +1 -0
- data/test_data/TGC551LF.ged +2162 -0
- data/test_data/TGC55C.ged +1 -0
- data/test_data/TGC55CLF.ged +2202 -0
- data/test_data/force.wav +0 -0
- data/test_data/suntun.mov +0 -0
- data/test_data/top.mpg +0 -0
- metadata +140 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Internal representation of the GEDCOM ASSO record types.
|
4
|
+
#
|
5
|
+
#A relationship between an Individual_record and one of the other level 0
|
6
|
+
#record types, as defined by the TYPE tag. The default being another
|
7
|
+
#a relationship with another Individual_record.
|
8
|
+
#
|
9
|
+
#=ASSOCIATION_STRUCTURE:=
|
10
|
+
# n ASSO @<XREF:TYPE>@ {0:M}
|
11
|
+
# +1 TYPE <RECORD_TYPE> {1:1}
|
12
|
+
# +1 RELA <RELATION_IS_DESCRIPTOR> {1:1}
|
13
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
14
|
+
# +1 <<SOURCE_CITATION>> {0:M}
|
15
|
+
#
|
16
|
+
#==RECORD_TYPE:= {Size=3:4}
|
17
|
+
# FAM | INDI | NOTE | OBJE | REPO | SOUR | SUBM | SUBN
|
18
|
+
#
|
19
|
+
# An indicator of the record type being pointed to or used. For example if in an ASSOciation, an
|
20
|
+
# INDIvidual record were to be ASSOciated with a FAM record then:
|
21
|
+
# 0 INDI
|
22
|
+
# 1 ASSO @F1@
|
23
|
+
# 2 TYPE FAM /* ASSOCIATION is with a FAM record.
|
24
|
+
# 2 RELA Witness at marriage
|
25
|
+
#
|
26
|
+
#==RELATION_IS_DESCRIPTOR:= {Size=1:25}
|
27
|
+
# A word or phrase that states object 1's relation is object 2. For example you would read the following
|
28
|
+
# as "Joe Jacob's great grandson is the submitter pointed to by the @XREF:SUBM@":
|
29
|
+
# 0 INDI
|
30
|
+
# 1 NAME Joe /Jacob/
|
31
|
+
# 1 ASSO @<XREF:SUBM>@
|
32
|
+
# 2 TYPE SUBM
|
33
|
+
# 2 RELA great grandson
|
34
|
+
#
|
35
|
+
#The attributes are all arrays for the level +1 tags/records.
|
36
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
37
|
+
#* Those ending in _record are array of classes of that type.
|
38
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
39
|
+
class Association_record < GEDCOMBase
|
40
|
+
attr_accessor :association_ref, :associated_record_tag, :relationship_description
|
41
|
+
attr_accessor :source_citation_record, :note_citation_record
|
42
|
+
|
43
|
+
ClassTracker << :Association_record
|
44
|
+
|
45
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
46
|
+
def initialize(*a)
|
47
|
+
super(*a)
|
48
|
+
@this_level = [ [:xref, "ASSO", :association_ref ] ]
|
49
|
+
@sub_level = [ #level 1
|
50
|
+
[:print, "TYPE", :associated_record_tag ],
|
51
|
+
[:print, "RELA", :relationship_description ],
|
52
|
+
[:walk, nil, :source_citation_record ],
|
53
|
+
[:walk, nil, :note_citation_record ],
|
54
|
+
]
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
#validate that the record referenced by the XREF actually exists in this transmission.
|
60
|
+
#Genearte a warning if it does not. It does not stop the processing of this line.
|
61
|
+
#Association_records default to :individual, but the TYPE field can override this.
|
62
|
+
def xref_check(level, tag, index, xref)
|
63
|
+
asso_index = case @associated_record_tag
|
64
|
+
when nil then index
|
65
|
+
when 'FAM' then :family
|
66
|
+
when 'INDI' then :individual
|
67
|
+
when 'NOTE' then :note
|
68
|
+
when 'OBJE' then :multimedia
|
69
|
+
when 'REPO' then :repository
|
70
|
+
when 'SOUR' then :source
|
71
|
+
when 'SUBM' then :submitter
|
72
|
+
when 'SUBM' then :submission
|
73
|
+
else :individual #which will be the default individual index.
|
74
|
+
end
|
75
|
+
|
76
|
+
super(level, tag, asso_index, xref)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Cause_record is part of Event_record, recording the cause of the event. They aren't
|
4
|
+
#often seen in GEDCOM files.
|
5
|
+
#
|
6
|
+
#=EVENT_DETAIL:=
|
7
|
+
# ...
|
8
|
+
# n CAUS <CAUSE_OF_EVENT> {0:1}
|
9
|
+
# ...
|
10
|
+
#
|
11
|
+
# I have added a Restriction notice, a Source_citation_record, and a NOTE. As long as
|
12
|
+
# you don't use these fields, the GEDCOM output will be standard. Restriction notice
|
13
|
+
# tags, like NOTE and SOUR tags, should be part of every record type, but they aren't.
|
14
|
+
#
|
15
|
+
# +1 RESN <RESTRICTION_NOTICE> {0:1}
|
16
|
+
# +1 <<SOURCE_CITATION>> {0:M}
|
17
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
18
|
+
#
|
19
|
+
#==CAUSE_OF_EVENT:= {Size=1:90}
|
20
|
+
# Used in special cases to record the reasons which precipitated an event. Normally this will be used
|
21
|
+
# subordinate to a death event to show cause of death, such as might be listed on a death certificate.
|
22
|
+
#
|
23
|
+
#
|
24
|
+
#The attributes are all arrays for the level +1 tags/records.
|
25
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
26
|
+
#* Those ending in _record are array of classes of that type.
|
27
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
28
|
+
class Cause_record < GEDCOMBase
|
29
|
+
attr_accessor :cause, :restriction, :source_citation_record
|
30
|
+
attr_accessor :note_citation_record
|
31
|
+
|
32
|
+
ClassTracker << :Cause_record
|
33
|
+
|
34
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
35
|
+
def initialize(*a)
|
36
|
+
super(*a)
|
37
|
+
@this_level = [ [:print, "CAUS", :cause] ]
|
38
|
+
@sub_level = [ #level + 1
|
39
|
+
[:print, "RESN", :restriction],
|
40
|
+
[:walk, nil, :source_citation_record],
|
41
|
+
[:walk, nil, :note_citation_record],
|
42
|
+
]
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
|
4
|
+
#Change_date_record is part of many other records, recording the
|
5
|
+
#date and time that the parent record was last altered. It also
|
6
|
+
#allows for a comment to be added. Probably not that useful, as
|
7
|
+
#the standard only allows for one of these in a parent record. It
|
8
|
+
#would be more useful to have a history of changes using multiple
|
9
|
+
#Change_records. It would also help to have them in more records.
|
10
|
+
#
|
11
|
+
#=CHANGE_DATE:=
|
12
|
+
# n CHAN {1:1}
|
13
|
+
# +1 DATE <CHANGE_DATE> {1:1}
|
14
|
+
# +2 TIME <TIME_VALUE> {0:1}
|
15
|
+
# +1 <<NOTE_STRUCTURE>> {0:M}
|
16
|
+
#
|
17
|
+
# The change date is intended to only record the last change to a record. Some systems may want to
|
18
|
+
# manage the change process with more detail, but it is sufficient for GEDCOM purposes to indicate
|
19
|
+
# the last time that a record was modified.
|
20
|
+
#
|
21
|
+
#The attributes are all arrays for the level +1 tags/records.
|
22
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
23
|
+
#* Those ending in _record are array of classes of that type.
|
24
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
25
|
+
class Change_date_record < GEDCOMBase
|
26
|
+
attr_accessor :date_record, :note_citation_record
|
27
|
+
|
28
|
+
ClassTracker << :Change_date_record
|
29
|
+
|
30
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
31
|
+
def initialize(*a)
|
32
|
+
super(*a)
|
33
|
+
@this_level = [ [ :nodata, "CHAN", nil] ]
|
34
|
+
@sub_level = [ #level + 1
|
35
|
+
[:walk, nil, :date_record],
|
36
|
+
[:walk, nil, :note_citation_record]
|
37
|
+
]
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Character_set_record is part of the HEAD record, and names the
|
4
|
+
#the character set used in this transmission.
|
5
|
+
#
|
6
|
+
#=HEADER:=
|
7
|
+
# 0 HEAD {1:1}
|
8
|
+
# ...
|
9
|
+
# 1 CHAR <CHARACTER_SET> {1:1}
|
10
|
+
# +1 VERS <VERSION_NUMBER> {0:1}
|
11
|
+
# ...
|
12
|
+
#
|
13
|
+
#==CHARACTER_SET:= {Size=1:8}
|
14
|
+
# ANSEL | UNICODE | ASCII
|
15
|
+
#
|
16
|
+
# A code value that represents the character set to be used to interpret this data. The default character
|
17
|
+
# set is ANSEL, which includes ASCII as a subset.
|
18
|
+
#
|
19
|
+
# Note:: The IBMPC character set is not allowed. This character set cannot be interpreted properly
|
20
|
+
# without knowing which code page the sender was using.
|
21
|
+
#
|
22
|
+
#The attributes are all arrays for the level +1 tags/records.
|
23
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
24
|
+
#* Those ending in _record are array of classes of that type.
|
25
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
26
|
+
class Character_set_record < GEDCOMBase
|
27
|
+
attr_accessor :char_set_id, :version
|
28
|
+
attr_accessor :note_citation_record
|
29
|
+
|
30
|
+
ClassTracker << :Character_set_record
|
31
|
+
|
32
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
33
|
+
def initialize(*a)
|
34
|
+
super(*a)
|
35
|
+
@this_level = [ [:print, "CHAR", :char_set_id] ]
|
36
|
+
@sub_level = [ #level + 1
|
37
|
+
[:print, "VERS", :version],
|
38
|
+
[:walk, nil, :note_citation_record]
|
39
|
+
]
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Citation_data_record is DATA record in a Source_citation_record.
|
4
|
+
#
|
5
|
+
#=SOURCE_CITATION:= (within another record, referencing a SOURCE_RECORD)
|
6
|
+
# -1 SOUR @<XREF:SOUR>@ {1:1} (pointer to source record)
|
7
|
+
# ...
|
8
|
+
# n DATA {0:1}
|
9
|
+
# +1 DATE <ENTRY_RECORDING_DATE> {0:1}
|
10
|
+
# +1 TEXT <TEXT_FROM_SOURCE> {0:M}
|
11
|
+
# +2 [ CONC | CONT ] <TEXT_FROM_SOURCE> {0:M}
|
12
|
+
# ...
|
13
|
+
#
|
14
|
+
#==ENTRY_RECORDING_DATE:=
|
15
|
+
# <DATE_VALUE>
|
16
|
+
#
|
17
|
+
# The date that this event data was entered into the original source document.
|
18
|
+
#
|
19
|
+
#==TEXT_FROM_SOURCE:= {Size=1:248}
|
20
|
+
# <TEXT>
|
21
|
+
#
|
22
|
+
# A verbatim copy of any description contained within the source. This indicates notes or text that are
|
23
|
+
# actually contained in the source document, not the submitter's opinion about the source. This should
|
24
|
+
# be, from the evidence point of view, "what the original record keeper said" as opposed to the
|
25
|
+
# researcher's interpretation. The word TEXT, in this case, means from the text which appeared in the
|
26
|
+
# source record including labels.
|
27
|
+
#
|
28
|
+
#The attributes are all arrays for the level +1 tags/records.
|
29
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
30
|
+
#* Those ending in _record are array of classes of that type.
|
31
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
32
|
+
class Citation_data_record < GEDCOMBase
|
33
|
+
attr_accessor :date_record, :text_record
|
34
|
+
attr_accessor :note_citation_record
|
35
|
+
|
36
|
+
ClassTracker << :Citation_data_record
|
37
|
+
|
38
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
39
|
+
def initialize(*a)
|
40
|
+
super(*a)
|
41
|
+
@this_level = [ [:print, "DATA", nil ] ]
|
42
|
+
@sub_level = [ #level 1
|
43
|
+
[:walk, nil, :date_record],
|
44
|
+
[:walk, nil, :text_record ],
|
45
|
+
[:walk, nil, :note_citation_record ],
|
46
|
+
]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Source_citation_record has an EVEN tag. This is not an Event_record, but the event
|
4
|
+
#type that the source record records.
|
5
|
+
#
|
6
|
+
#=SOURCE_CITATION:= (within another record, referencing a SOURCE_RECORD)
|
7
|
+
# -1 SOUR @<XREF:SOUR>@ {1:1} (pointer to source record)
|
8
|
+
# ...
|
9
|
+
# n EVEN <EVENT_TYPE_CITED_FROM> {0:1}
|
10
|
+
# +1 ROLE <ROLE_IN_EVENT> {0:1}
|
11
|
+
# ...
|
12
|
+
#
|
13
|
+
#==EVENT_TYPE_CITED_FROM:= {SIZE=1:15}
|
14
|
+
# <EVENT_ATTRIBUTE_TYPE>
|
15
|
+
#
|
16
|
+
# A code that indicates the type of event which was responsible for the source entry being recorded. For
|
17
|
+
# example, if the entry was created to record a birth of a child, then the type would be BIRT regardless
|
18
|
+
# of the assertions made from that record, such as the mother's name or mother's birth date. This will
|
19
|
+
# allow a prioritized best view choice and a determination of the certainty associated with the source
|
20
|
+
# used in asserting the cited fact.
|
21
|
+
#
|
22
|
+
#The attributes are all arrays for the level +1 tags/records.
|
23
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
24
|
+
#* Those ending in _record are array of classes of that type.
|
25
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
26
|
+
class Citation_event_type_record < GEDCOMBase
|
27
|
+
attr_accessor :event_type, :role
|
28
|
+
attr_accessor :note_citation_record
|
29
|
+
|
30
|
+
ClassTracker << :Citation_event_type_record
|
31
|
+
|
32
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
33
|
+
def initialize(*a)
|
34
|
+
super(*a)
|
35
|
+
@this_level = [ [:print, "EVEN", :event_type ] ]
|
36
|
+
@sub_level = [ #level 1
|
37
|
+
[:print, "ROLE", :role],
|
38
|
+
[:walk, nil, :note_citation_record ],
|
39
|
+
]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#The Corparte_record is part of the HEAD records SOUR record.
|
4
|
+
#
|
5
|
+
#=HEADER:=
|
6
|
+
# 0 HEAD {1:1}
|
7
|
+
# 1 SOUR <APPROVED_SYSTEM_ID> {1:1}
|
8
|
+
# ...
|
9
|
+
# n CORP <NAME_OF_BUSINESS> {0:1}
|
10
|
+
# +1 <<ADDRESS_STRUCTURE>> {0:1}
|
11
|
+
# +1 PHON <PHONE_NUMBER> {0:3} (defined in the Address structure)
|
12
|
+
#
|
13
|
+
#==NAME_OF_BUSINESS:= {Size=1:90}
|
14
|
+
# Name of the business, corporation, or person that produced or commissioned the product.
|
15
|
+
#
|
16
|
+
#The attributes are all arrays for the level +1 tags/records.
|
17
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
18
|
+
#* Those ending in _record are array of classes of that type.
|
19
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
20
|
+
class Corporate_record < GEDCOMBase
|
21
|
+
attr_accessor :company_name, :phonenumber, :address_record
|
22
|
+
attr_accessor :note_citation_record
|
23
|
+
|
24
|
+
ClassTracker << :Corporate_record
|
25
|
+
|
26
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
27
|
+
def initialize(*a)
|
28
|
+
super(*a)
|
29
|
+
@this_level = [ [:print, "CORP", :company_name] ]
|
30
|
+
@sub_level = [ #level + 1
|
31
|
+
[:print, "PHON", :phonenumber],
|
32
|
+
[:walk, nil, :address_record],
|
33
|
+
[:walk, nil, :note_citation_record],
|
34
|
+
]
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,206 @@
|
|
1
|
+
require 'gedcom_base.rb'
|
2
|
+
|
3
|
+
#Dates are stored here. In GEDCOM, they have to have the flexibility to hold
|
4
|
+
#multiple data formats, both current and historical. Dates can be strings or
|
5
|
+
#can have structure. At the moment, this class just stores them as strings,
|
6
|
+
#with an optional TIME information.
|
7
|
+
#
|
8
|
+
#=DATE:= {Size=4:35}
|
9
|
+
# [<DATE_CALENDAR_ESCAPE> | <NULL>] <DATE_CALENDAR>
|
10
|
+
#
|
11
|
+
#==DATE_CALENDAR_ESCAPE:= {Size=4:15}
|
12
|
+
# @#DHEBREW@ | @#DROMAN@ | @#DFRENCH R@ | @#DGREGORIAN@ | @#DJULIAN@ | @#DUNKNOWN@
|
13
|
+
#
|
14
|
+
# The date escape determines the date interpretation by signifying which <DATE_CALENDAR> to use.
|
15
|
+
# The default calendar is the Gregorian calendar.
|
16
|
+
#
|
17
|
+
#==DATE_CALENDAR:= {Size=4:35}
|
18
|
+
# <DATE_GREG> | <DATE_JULN> | <DATE_HEBR> | <DATE_FREN> | <DATE_FUTURE>
|
19
|
+
#
|
20
|
+
# The selection is based on the <DATE_CALENDAR_ESCAPE> that precedes the
|
21
|
+
# <DATE_CALENDAR> value immediately to the left. If <DATE_CALENDAR_ESCAPE> doesn't
|
22
|
+
# appear at this point, then @#DGREGORIAN@ is assumed. No future calendar types will use words
|
23
|
+
# (e.g., month names) from this list: FROM, TO, BEF, AFT, BET, AND, ABT, EST, CAL, or INT.
|
24
|
+
# When only a day and month appears as a DATE value it is considered a date phrase and not a valid
|
25
|
+
# date form.
|
26
|
+
#
|
27
|
+
# Date Escape Syntax Selected
|
28
|
+
# ----------- -------------
|
29
|
+
# @#DGREGORIAN@ <DATE_GREG>
|
30
|
+
# @#DJULIAN@ <DATE_JULN>
|
31
|
+
# @#DHEBREW@ <DATE_HEBR>
|
32
|
+
# @#DFRENCH R@ <DATE_FREN>
|
33
|
+
# @#DROMAN@ for future definition
|
34
|
+
# @#DUNKNOWN@ calendar not known
|
35
|
+
#
|
36
|
+
#==DATE_APPROXIMATED:= {Size=4:35}
|
37
|
+
# ABT <DATE> | CAL <DATE> | EST <DATE>
|
38
|
+
#
|
39
|
+
# Where:
|
40
|
+
# ABT:: About, meaning the date is not exact.
|
41
|
+
# CAL:: Calculated mathematically, for example, from an event date and age.
|
42
|
+
# EST:: Estimated based on an algorithm using some other event date.
|
43
|
+
#
|
44
|
+
#==DATE_EXACT:= {Size=10:11}
|
45
|
+
# <DAY> <MONTH> <YEAR_GREG>
|
46
|
+
#
|
47
|
+
#==DATE_FREN:= {Size=4:35}
|
48
|
+
# <YEAR> | <MONTH_FREN> <YEAR> | <DAY> <MONTH_FREN> <YEAR>
|
49
|
+
#===MONTH_FREN:= {Size=4}
|
50
|
+
# VEND | BRUM | FRIM | NIVO | PLUV | VENT | GERM | FLOR | PRAI | MESS | THER | FRUC | COMP
|
51
|
+
# Where:
|
52
|
+
# VEND:: VENDEMIAIRE
|
53
|
+
# BRUM:: BRUMAIRE
|
54
|
+
# FRIM:: FRIMAIRE
|
55
|
+
# NIVO:: NIVOSE
|
56
|
+
# PLUV:: PLUVIOSE
|
57
|
+
# VENT:: VENTOSE
|
58
|
+
# GERM:: GERMINAL
|
59
|
+
# FLOR:: FLOREAL
|
60
|
+
# PRAI:: PRAIRIAL
|
61
|
+
# MESS:: MESSIDOR
|
62
|
+
# THER:; THERMIDOR
|
63
|
+
# FRUC:: FRUCTIDOR
|
64
|
+
# COMP:: JOUR_COMPLEMENTAIRS
|
65
|
+
#
|
66
|
+
#==DATE_GREG:= {Size=4:35}
|
67
|
+
# <YEAR_GREG> | <MONTH> <YEAR_GREG> | <DAY> <MONTH> <YEAR_GREG>
|
68
|
+
#===YEAR_GREG:= {Size=3:7}
|
69
|
+
# [ <NUMBER> | <NUMBER>/<DIGIT><DIGIT> ]
|
70
|
+
#
|
71
|
+
# The slash "/" <DIGIT><DIGIT> a year modifier which shows the possible date alternatives for pre-
|
72
|
+
# 1752 date brought about by a changing the beginning of the year from MAR to JAN in the English
|
73
|
+
# calendar change of 1752, for example, 15 APR 1699/00. A (B.C.) appended to the <YEAR> indicates
|
74
|
+
# a date before the birth of Christ.
|
75
|
+
#
|
76
|
+
#
|
77
|
+
#==DATE_HEBR:= {Size=4:35}
|
78
|
+
# <YEAR> | <MONTH_HEBR> <YEAR> | <DAY> <MONTH_HEBR> <YEAR>
|
79
|
+
#===MONTH_HEBR:= {Size=3}
|
80
|
+
# TSH | CSH | KSL | TVT | SHV | ADR | ADS | NSN | IYR | SVN | TMZ | AAV | ELL
|
81
|
+
# Where:
|
82
|
+
# TSH:: Tishri
|
83
|
+
# CSH:: Cheshvan
|
84
|
+
# KSL:: Kislev
|
85
|
+
# TVT:: Tevet
|
86
|
+
# SHV:: Shevat
|
87
|
+
# ADR:: Adar
|
88
|
+
# ADS:: Adar Sheni
|
89
|
+
# NSN:: Nisan
|
90
|
+
# IYR:: Iyar
|
91
|
+
# SVN:: Sivan
|
92
|
+
# TMZ:: Tammuz
|
93
|
+
# AAV:: Av
|
94
|
+
# ELL:: Elul
|
95
|
+
#
|
96
|
+
#==DATE_JULN:= {Size=4:35}
|
97
|
+
# <YEAR> | <MONTH> <YEAR> | <DAY> <MONTH> <YEAR>
|
98
|
+
#===MONTH:= {Size=3}
|
99
|
+
# JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | SEP | OCT | NOV | DEC
|
100
|
+
# Where:
|
101
|
+
# JAN:: January
|
102
|
+
# FEB:: February
|
103
|
+
# MAR:: March
|
104
|
+
# APR:: April
|
105
|
+
# MAY:: May
|
106
|
+
# JUN:: June
|
107
|
+
# JUL:: July
|
108
|
+
# AUG:: August
|
109
|
+
# SEP:: September
|
110
|
+
# OCT:: October
|
111
|
+
# NOV:: November
|
112
|
+
# DEC:: December
|
113
|
+
#
|
114
|
+
#==DATE_PERIOD:= {Size=7:35}
|
115
|
+
# FROM <DATE> | TO <DATE> | FROM <DATE> TO <DATE>
|
116
|
+
#
|
117
|
+
# Where:
|
118
|
+
# FROM:: Indicates the beginning of a happening or state.
|
119
|
+
# TO:: Indicates the ending of a happening or state.
|
120
|
+
#
|
121
|
+
# Examples:
|
122
|
+
# FROM 1904 to 1915
|
123
|
+
# The state of some attribute existed from 1904 to 1915 inclusive.
|
124
|
+
# FROM 1904
|
125
|
+
# The state of the attribute began in 1904 but the end date is unknown.
|
126
|
+
# TO 1915
|
127
|
+
# The state ended in 1915 but the begin date is unknown.
|
128
|
+
#
|
129
|
+
#==DATE_PHRASE:= {Size=1:35}
|
130
|
+
# (<TEXT>)
|
131
|
+
#
|
132
|
+
# Any statement offered as a date when the year is not recognizable to a date parser, but which gives
|
133
|
+
# information about when an event occurred. The date phrase is enclosed in matching parentheses.
|
134
|
+
#
|
135
|
+
#==DATE_RANGE:= {Size=8:35}
|
136
|
+
# BEF <DATE> | AFT <DATE> | BET <DATE> AND <DATE>
|
137
|
+
#
|
138
|
+
# Where:
|
139
|
+
# AFT:: Event happened after the given date.
|
140
|
+
# BEF:: Event happened before the given date.
|
141
|
+
# BET:: Event happened some time between date 1 AND date 2. For example, bet 1904 and 1915
|
142
|
+
# indicates that the event state (perhaps a single day) existed somewhere between 1904 and
|
143
|
+
# 1915 inclusive.
|
144
|
+
#
|
145
|
+
# The date range differs from the date period in that the date range is an estimate that an event happened
|
146
|
+
# on a single date somewhere in the date range specified.
|
147
|
+
#
|
148
|
+
# The following are equivalent and interchangeable:
|
149
|
+
# Short form Long Form
|
150
|
+
# ---------— ---------—-
|
151
|
+
# 1852 BET 1 JAN 1852 AND 31 DEC 1852
|
152
|
+
# 1852 BET 1 JAN 1852 AND DEC 1852
|
153
|
+
# 1852 BET JAN 1852 AND 31 DEC 1852
|
154
|
+
# 1852 BET JAN 1852 AND DEC 1852
|
155
|
+
# JAN 1920 BET 1 JAN 1920 AND 31 JAN 1920
|
156
|
+
#
|
157
|
+
#==DATE_VALUE:= {Size=1:35}
|
158
|
+
# <DATE> | <DATE_PERIOD> | <DATE_RANGE> | <DATE_APPROXIMATED> | INT <DATE> (<DATE_PHRASE>) | (<DATE_PHRASE>)
|
159
|
+
#
|
160
|
+
# The DATE_VALUE represents the date of an activity, attribute, or event where:
|
161
|
+
# INT:: Interpreted from knowledge about the associated date phrase included in parentheses.
|
162
|
+
#
|
163
|
+
# An acceptable alternative to the date phrase choice is to use one of the other choices such as
|
164
|
+
# <DATE_APPROXIMATED> choice as the DATE line value and then include the
|
165
|
+
# <DATE_PHRASE> as a NOTE value subordinate to the DATE line.
|
166
|
+
#
|
167
|
+
# The date value can take on the date form of just a date, an approximated date, between a date and
|
168
|
+
# another date, and from one date to another date. The preferred form of showing date imprecision, is
|
169
|
+
# to show, for example, MAY 1890 rather than ABT 12 MAY 1890. This is because limits have not
|
170
|
+
# been assigned to the precision of the prefixes such as ABT or EST.
|
171
|
+
#
|
172
|
+
#==DAY:= {Size=1:2}
|
173
|
+
# dd
|
174
|
+
#
|
175
|
+
# Day of the month, where dd is a numeric digit whose value is within the valid range of the days for the
|
176
|
+
# associated calendar month.
|
177
|
+
#
|
178
|
+
#=TIME_VALUE:= {Size=1:12}
|
179
|
+
# [ hh:mm:ss.fs ]
|
180
|
+
#
|
181
|
+
# The time of a specific event, usually a computer-timed event, where:
|
182
|
+
# hh:: hours on a 24-hour clock
|
183
|
+
# mm:: minutes
|
184
|
+
# ss:: seconds (optional)
|
185
|
+
# fs:: decimal fraction of a second (optional)
|
186
|
+
#
|
187
|
+
#The attributes are all arrays for the level +1 tags/records.
|
188
|
+
#* Those ending in _ref are GEDCOM XREF index keys
|
189
|
+
#* Those ending in _record are array of classes of that type.
|
190
|
+
#* The remainder are arrays of attributes that could be present in this record.
|
191
|
+
class Date_record < GEDCOMBase
|
192
|
+
attr_accessor :date_value, :time_value, :source_citation_record, :note_citation_record
|
193
|
+
|
194
|
+
ClassTracker << :Date_record
|
195
|
+
|
196
|
+
#new sets up the state engine arrays @this_level and @sub_level, which drive the to_gedcom method generating GEDCOM output.
|
197
|
+
def initialize(*a)
|
198
|
+
super(*a)
|
199
|
+
@this_level = [ [ :date, "DATE", :date_value ] ]
|
200
|
+
@sub_level = [ #level + 1
|
201
|
+
[ :time, "TIME", :time_value],
|
202
|
+
[ :walk, nil, :source_citation_record],
|
203
|
+
[ :walk, nil, :note_citation_record]
|
204
|
+
]
|
205
|
+
end
|
206
|
+
end
|