-
Notifications
You must be signed in to change notification settings - Fork 20
/
individual_name.go
64 lines (51 loc) 路 1.42 KB
/
individual_name.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package html
import (
"github.com/elliotchance/gedcom"
"github.com/elliotchance/gedcom/html/core"
"io"
)
const UnknownEmphasis = "<em>Unknown</em>"
// IndividualName outputs the full name of the individual. This is a wrapper for
// the String function on the IndividualNode. If the individual does not have
// any names then "Unknown" will be used. It is safe to use nil for the
// individual.
type IndividualName struct {
individual *gedcom.IndividualNode
visibility LivingVisibility
unknownHTML string
}
func NewIndividualName(individual *gedcom.IndividualNode, visibility LivingVisibility, unknownHTML string) *IndividualName {
return &IndividualName{
individual: individual,
visibility: visibility,
unknownHTML: unknownHTML,
}
}
func (c *IndividualName) IsUnknown() bool {
if c.individual == nil {
return true
}
names := c.individual.Names()
return len(names) == 0
}
func (c *IndividualName) WriteHTMLTo(w io.Writer) (int64, error) {
if c.individual == nil {
return writeString(w, c.unknownHTML)
}
isLiving := c.individual.IsLiving()
if isLiving {
switch c.visibility {
case LivingVisibilityShow:
// Proceed.
case LivingVisibilityHide:
return writeNothing()
case LivingVisibilityPlaceholder:
return writeString(w, "<em>Hidden</em>")
}
}
names := c.individual.Names()
if len(names) == 0 {
return writeString(w, c.unknownHTML)
}
return core.NewText(names[0].String()).WriteHTMLTo(w)
}