Skip to content

Commit 9ec11be

Browse files
author
Matthias Rabe
committed
handle new OBJE and SOUR structures
Signed-off-by: Matthias Rabe <[email protected]>
1 parent 5a7726e commit 9ec11be

File tree

2 files changed

+57
-13
lines changed

2 files changed

+57
-13
lines changed

lib/ged_parse.inc.rb

+33-5
Original file line numberDiff line numberDiff line change
@@ -145,14 +145,25 @@ def add_detail(level, tag, val)
145145
super
146146
end
147147

148+
def get_sources(ged, tag)
149+
sources= []
150+
get_details(tag).each {|src_id|
151+
sources << ged.find_by_source_gid(src_id[:value])
152+
}
153+
return sources
154+
end
155+
148156
def idno; return get_cached_detail(:idno, "IDNO"); end
149157
def sex; return get_cached_detail(:sex, "SEX"); end
150158
def birth; return get_cached_detail(:birth, "BIRT_DATE"); end
151159
def birth_place; return get_cached_detail(:birth_place, "BIRT_PLAC"); end
160+
def birth_sources(ged); return get_sources(ged, "BIRT_SOUR"); end
152161
def leaf; return get_cached_detail(:leaf, "CHR_DATE"); end
153162
def leaf_place; return get_cached_detail(:leaf_place, "CHR_PLAC"); end
163+
def leaf_sources(ged); return get_sources(ged, "CHR_SOUR"); end
154164
def died; return get_cached_detail(:died, "DEAT_DATE"); end
155165
def died_place; return get_cached_detail(:died_place, "DEAT_PLAC"); end
166+
def died_sources(ged); return get_sources(ged, "DEAT_SOUR"); end
156167
def objs; return get_details("OBJE"); end
157168

158169
def male?; return sex == "M"; end
@@ -220,7 +231,7 @@ def initialize(gid)
220231

221232
def fname; return get_cached_detail(:file, "FILE"); end
222233
def type; return get_cached_detail(:type, "FILE_FORM"); end
223-
def note; return get_cached_detail(:title, "FILE_TITL"); end
234+
def note; return get_cached_detail(:title, "FILE_TITL"); end
224235
end
225236

226237
class Place < GedSection
@@ -243,6 +254,16 @@ def initialize(gid)
243254
@name= gid
244255
@type= :source
245256
end
257+
258+
def title; return get_cached_detail(:title, "TITL"); end
259+
def author; return get_cached_detail(:author, "AUTH"); end
260+
261+
def footnote
262+
details = []
263+
details << title if title.to_s != ""
264+
details << author if author.to_s != ""
265+
return details.join("; ")
266+
end
246267
end
247268

248269
class Gedcom
@@ -345,7 +366,7 @@ def refresh
345366
level.to_i-object_level.to_i+1,
346367
tag, rest)
347368
end
348-
next if not object_level.nil?
369+
next if not object_section.nil?
349370
end
350371

351372
if tag == "PLAC" and find_by_place(rest).nil?
@@ -369,7 +390,7 @@ def refresh
369390
level.to_i-place_level.to_i+1,
370391
tag, rest)
371392
end
372-
next if not place_level.nil?
393+
next if not place_section.nil?
373394
end
374395

375396
#add a detail to the section
@@ -428,8 +449,8 @@ def find_by_node_gid(gid)
428449
end
429450

430451
def find_by_object_gid(gid)
431-
@objects.each do |n|
432-
return n if n.gid == gid
452+
@objects.each do |o|
453+
return o if o.gid == gid
433454
end
434455
return nil
435456
end
@@ -441,6 +462,13 @@ def find_by_place(name)
441462
return nil
442463
end
443464

465+
def find_by_source_gid(gid)
466+
@sources.each do |s|
467+
return s if s.gid == gid
468+
end
469+
return nil
470+
end
471+
444472
def getFamilyWithChild(indi)
445473
@families.each {|f|
446474
f.children.each {|fc|

reports/book.inc.rb

+24-8
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ def report_person_print_notes(ged, indi)
318318
text= note.text
319319
text= text.gsub("**********", "********** ") # hack to avaid LaTeX warning
320320
end
321+
321322
items << "\\item[#{key}] #{replace_newline(h(text))}"
322323
}
323324
}
@@ -338,15 +339,30 @@ def report_print_galerie(ged, section)
338339
items= {};
339340
section.objs.each {|o|
340341
img= nil; titl= nil; note= nil; ok= false
341-
o[:children].each {|oc|
342-
case oc[:field]
343-
when "OBJE_FORM" then ok= IMG_FMTS.include? oc[:value].downcase
344-
when "OBJE_FILE" then img= oc[:value]
345-
when "OBJE_TITL" then titl= oc[:value]
346-
when "OBJE_NOTE" then note= oc[:value]
342+
343+
obj = ged.find_by_object_gid(o[:value])
344+
if not obj.nil?
345+
ok = IMG_FMTS.include? obj.type.downcase
346+
img = obj.fname
347+
note = obj.note
348+
else # fallback for older gedcoms
349+
o[:children].each {|oc|
350+
case oc[:field]
351+
when "OBJE_FORM" then ok= IMG_FMTS.include? oc[:value].downcase
352+
when "OBJE_FILE" then img= oc[:value]
353+
when "OBJE_TITL" then titl= oc[:value]
354+
when "OBJE_NOTE" then note= oc[:value]
355+
end
356+
}
357+
end
358+
359+
if ok
360+
if File.exist?img
361+
items[img]= nvl(note, titl)
362+
else
363+
$stderr.puts "'#{img}' not found - skipped"
347364
end
348-
}
349-
items[img]= nvl(note, titl) if ok
365+
end
350366
}
351367
items= items.to_a
352368

0 commit comments

Comments
 (0)