mirror of
https://github.com/kennethreitz/context.git
synced 2026-06-05 23:00:17 +00:00
253 lines
7.3 KiB
Plaintext
253 lines
7.3 KiB
Plaintext
/*
|
|
* @progname sour.li
|
|
* @version 1995-09-08
|
|
* @author Paul B. McBride (pbm%cybvax0@uunet.uu.net)
|
|
* @category
|
|
* @output Text
|
|
* @description
|
|
|
|
functions for handling SOURces.
|
|
|
|
Requirements:
|
|
LifeLines 3.0.2 or later (I hope)
|
|
|
|
See Examples of using the library routines below.
|
|
|
|
Tags within SOUR definitions which are processed by sour_ref():
|
|
|
|
REFN see below
|
|
TITL title
|
|
AUTH author
|
|
DATE publication date
|
|
EDIT which edition, revision, etc
|
|
VOLU number of volumnes (e.g. 3 vols)
|
|
PAGE page numbers
|
|
PUBL publisher
|
|
PLAC place of publication
|
|
LOCA where did you saw this source
|
|
|
|
The following describes how I use the REFN tag. This is not particularly
|
|
relevant, but here goes.
|
|
|
|
There are some standard abbreviations that are often used:
|
|
MD Mayflower Descendant
|
|
NEHGR New England Historic Genealogical Society Register
|
|
TAG The Americant Genealogist
|
|
RFC Royalty for Commoners
|
|
AR7 Ancestral Roots... 7th edition
|
|
I use other REFN's which are a combination of the subject, or author
|
|
and a suffix:
|
|
WentworthG Wentworth Genealogy
|
|
HayesFH a Hayes family history
|
|
ScituateVR Scituate, MA Vital Records
|
|
HamptonTH Hampton, NH Town History
|
|
|
|
When I am entering a source field I would then enter it as:
|
|
|
|
2 SOUR <WentworthG>
|
|
|
|
and it will get converted to
|
|
|
|
2 @Sxxx@ SOUR
|
|
|
|
Examples:
|
|
|
|
1) Report references used in a set of individuals
|
|
|
|
include("sour.ll")
|
|
...
|
|
sour_init() / * initialize the current source list and table * /
|
|
... / * create a set of individuals * /
|
|
sour_addset(a_set) / * add all sources referenced by set * /
|
|
"References: "
|
|
sour_ref(13) / * output sources in GEDCOM format * /
|
|
|
|
2) List references for groups of individuals, and then a master
|
|
list of all sources referenced:
|
|
|
|
include("sour.ll")
|
|
...
|
|
table(my_table)
|
|
list(my_list)
|
|
...for each group of individuals
|
|
{ sour_init() / * initialize the current source list and table * /
|
|
...for each individual...
|
|
{ sour_addind(an_indi)
|
|
if(sour_exists()) {
|
|
"References: "
|
|
sour_see(",", 70, 10) / * report REFN of each source * /
|
|
sour_save(my_table, my_list) / * add to master list * /
|
|
}
|
|
}
|
|
}
|
|
sour_restore(my_table, my_list) / * make master list the current one * /
|
|
if(sour_exists()) {
|
|
"Key to References:" nl() nl()
|
|
sour_ref(10) / * report details for all sources * /
|
|
}
|
|
|
|
3) Output all sources for a set of individuals in GEDCOM format:
|
|
|
|
include("sour.ll")
|
|
...
|
|
sour_init() / * initialize the current source list and table * /
|
|
... / * create a set of individuals * /
|
|
sour_addset(a_set) / * add all sources referenced by set * /
|
|
sour_ged() / * output sources in GEDCOM format * /
|
|
|
|
08-sep-95 Paul B. McBride (pbm%cybvax0@uunet.uu.net)
|
|
*/
|
|
|
|
global(sour_list)
|
|
global(sour_table)
|
|
|
|
proc sour_init()
|
|
{
|
|
table(sour_table)
|
|
list(sour_list)
|
|
}
|
|
|
|
proc sour_save(t, l)
|
|
{
|
|
forlist(sour_list, v, n) {
|
|
if (eq(0, lookup(t, v))) {
|
|
insert(t, v, 1)
|
|
enqueue(l, v)
|
|
}
|
|
}
|
|
}
|
|
|
|
proc sour_restore(t, l)
|
|
{
|
|
set(sour_table, t)
|
|
set(sour_list, l)
|
|
}
|
|
|
|
/* sour_add() adds the sources referenced for this individual */
|
|
|
|
proc sour_addind(i)
|
|
{
|
|
traverse(root(i), m, l) {
|
|
if (nestr("SOUR", tag(m))) { continue() }
|
|
set(v, value(m))
|
|
if(reference(v)) {
|
|
if (ne(0, lookup(sour_table, v))) { continue() }
|
|
set(v, save(v))
|
|
insert(sour_table, v, 1)
|
|
enqueue(sour_list, v)
|
|
}
|
|
}
|
|
}
|
|
|
|
proc sour_addset(s)
|
|
{
|
|
forindiset (s, i, a, n) {
|
|
call sour_addind(i)
|
|
}
|
|
}
|
|
|
|
proc sour_see(sep, maxlen, indent)
|
|
{
|
|
set(first, 1)
|
|
set(curlen, indent)
|
|
set(seplen, strlen(sep))
|
|
forlist(sour_list, k, n) {
|
|
if(first) { set(first, 0) }
|
|
else {
|
|
sep
|
|
set(curlen, add(curlen, seplen))
|
|
}
|
|
set(myrefn, sour_getfield(dereference(k), "REFN"))
|
|
set(mylen, add(add(strlen(myrefn), seplen),2))
|
|
if(and(gt(maxlen, 0), gt(add(curlen, mylen), maxlen))) {
|
|
col(indent)
|
|
set(curlen, indent)
|
|
}
|
|
"<" myrefn ">"
|
|
set(curlen, add(curlen, mylen))
|
|
}
|
|
}
|
|
|
|
proc sour_ref(colnum)
|
|
{
|
|
forlist(sour_list, k, n) {
|
|
set(n, dereference(k))
|
|
"<" sour_getfield(n, "REFN") ">" col(colnum)
|
|
qt()
|
|
sour_repfield(n, "TITL", colnum)
|
|
qt()
|
|
if(sour_getfield(n, "AUTH")) {
|
|
"," nl()
|
|
col(colnum)
|
|
sour_repfield(n, "AUTH", colnum)
|
|
}
|
|
set(d, sour_getfield(n, "DATE"))
|
|
if(d) { ", " d }
|
|
set(d, sour_getfield(n, "EDIT"))
|
|
if(d) { ", " d }
|
|
set(d, sour_getfield(n, "VOLU"))
|
|
if(d) { ", " d }
|
|
set(d, sour_getfield(n, "PAGE"))
|
|
if(d) { ", " d }
|
|
set(d, sour_getfield(n, "PUBL"))
|
|
if(d) { ", " nl() d }
|
|
set(d, sour_getfield(n, "PLAC"))
|
|
if(d) { ", " d }
|
|
"." nl()
|
|
if(sour_getfield(n, "NOTE")) {
|
|
col(colnum)
|
|
sour_repfield(n, "NOTE", colnum)
|
|
nl()
|
|
}
|
|
}
|
|
}
|
|
|
|
func sour_exists()
|
|
{
|
|
return(ne(length(sour_list), 0))
|
|
}
|
|
|
|
func sour_getfield(r, t)
|
|
{
|
|
traverse(r, s, l) {
|
|
if (eq(0, strcmp(t, tag(s)))) { return(value(s)) }
|
|
}
|
|
return(0)
|
|
}
|
|
|
|
func sour_repfield(r, t, colnum)
|
|
{
|
|
set(found, 0)
|
|
fornodes(r, node) {
|
|
if (eq(0,strcmp(t, tag(node)))) {
|
|
set(found, 1)
|
|
value(node)
|
|
fornodes(node, subnode) {
|
|
if (eq(0,strcmp("CONT", tag(subnode)))) {
|
|
nl()
|
|
if(gt(colnum, 0)) { col(colnum) }
|
|
value(subnode)
|
|
}
|
|
}
|
|
break()
|
|
}
|
|
}
|
|
return(found)
|
|
}
|
|
|
|
/* sour_ged() outputs the current source list in GEDCOM format */
|
|
|
|
proc sour_ged()
|
|
{
|
|
forlist(sour_list, k, n) {
|
|
set(r, dereference(k))
|
|
traverse(r, s, l) {
|
|
d(l)
|
|
if (xref(s)) { " " xref(s) }
|
|
" " tag(s)
|
|
if (value(s)) { " " value(s) }
|
|
"\n"
|
|
}
|
|
}
|
|
}
|