narrative

package
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 12, 2026 License: Unlicense Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	NarrativeSequenceIntro     = 0
	NarrativeSequenceEarlyLife = 1
	NarrativeSequenceLifeStory = 2
	NarrativeSequenceDeath     = 3
	NarrativeSequencePostDeath = 4
)

Variables

This section is empty.

Functions

func AgeQualifier

func AgeQualifier(age int) string

func Bio added in v0.0.5

func Bio(p *model.Person) string

Bio returns a plain-text short biography of p.

func ChildCardinal

func ChildCardinal(clist []*model.Person) string

func ChildList

func ChildList[T render.EncodedText](clist []*model.Person, enc render.ContentBuilder[T], nc NameChooser) []T

func ChooseFrom

func ChooseFrom(n int, alternatives ...string) string

func EncodePeopleListInline

func EncodePeopleListInline[T render.EncodedText](ps []*model.Person, formatter func(*model.Person) string, enc render.TextEncoder[T]) string

EncodePeopleListInline encodes a list of people as a comma separated list

func EncodeRawLink[T render.EncodedText](u string, enc render.TextEncoder[T]) string

func EncodeText

func EncodeText[T render.EncodedText](t model.Text, enc render.TextEncoder[T]) string

func EventNarrativeDetail

func EventNarrativeDetail[T render.EncodedText](ev model.TimelineEvent, enc render.ContentBuilder[T]) string

func EventWhatWhenWherePov

func EventWhatWhenWherePov[T render.EncodedText](ev model.TimelineEvent, enc render.TextEncoder[T], nc NameChooser, pov *model.POV) string

func EventWhatWherePov

func EventWhatWherePov[T render.EncodedText](ev model.TimelineEvent, enc render.TextEncoder[T], nc NameChooser, pov *model.POV) string

func EventWhenWherePov

func EventWhenWherePov[T render.EncodedText](ev model.TimelineEvent, enc render.TextEncoder[T], nc NameChooser, pov *model.POV) string

func FollowingWhatWhenWhere

func FollowingWhatWhenWhere[T render.EncodedText](what string, dt *model.Date, pl *model.Place, preceding model.TimelineEvent, enc render.TextEncoder[T], nc NameChooser) string

func GenerateOlb

func GenerateOlb(p *model.Person) string

func InferredWhat

func InferredWhat(w model.Whater, ev model.TimelineEvent) string

func MediaObjectsAsFigures

func MediaObjectsAsFigures[T render.EncodedText](mos []*model.CitedMediaObject, enc render.ContentBuilder[T], cropMediaHighlights bool) error

func NamedWhen

func NamedWhen(dt *model.Date) string

func PersonBirthSummary

func PersonBirthSummary[T render.EncodedText](p *model.Person, enc render.TextEncoder[T], nc NameChooser, name T, allowInferred bool, includeBirthDate bool, includeParentage bool, activeTense bool) T

func PersonDeathSummary

func PersonDeathSummary[T render.EncodedText](p *model.Person, enc render.TextEncoder[T], nc NameChooser, name T, allowInferred bool, activeTense bool, minimal bool, includeAge bool) T

func PersonMarriageSummary

func PersonMarriageSummary[T render.EncodedText](p *model.Person, enc render.TextEncoder[T], nc NameChooser, name T, allowInferred bool, activeTense bool) T

func PersonParentage

func PersonParentage[T render.EncodedText](p *model.Person, enc render.TextEncoder[T]) string

func PersonSummary

func PersonSummary[T render.EncodedText](p *model.Person, enc render.TextEncoder[T], nc NameChooser, name T, includeBirth bool, includeParentage bool, activeTense bool, linkname bool, minimal bool) T

func PositionInFamily

func PositionInFamily(p *model.Person) string

func RenderText

func RenderText[T render.EncodedText](t model.Text, enc render.ContentBuilder[T]) error

func WhatWhen

func WhatWhen[T render.EncodedText](what string, dt *model.Date, enc render.TextEncoder[T]) string

func WhatWhenWhere

func WhatWhenWhere[T render.EncodedText](what string, dt *model.Date, pl *model.Place, enc render.TextEncoder[T], nc NameChooser) string

func WhatWhenWherePov

func WhatWhenWherePov[T render.EncodedText](what string, dt *model.Date, pl *model.Place, enc render.TextEncoder[T], nc NameChooser, pov *model.POV) string

func WhatWhere

func WhatWhere[T render.EncodedText](what string, pl *model.Place, enc render.TextEncoder[T], nc NameChooser) string

func WhatWherePov

func WhatWherePov[T render.EncodedText](what string, pl *model.Place, enc render.TextEncoder[T], nc NameChooser, pov *model.POV) string

func WhenWhere

func WhenWhere[T render.EncodedText](dt *model.Date, pl *model.Place, enc render.TextEncoder[T], nc NameChooser) string

func WhenWherePov

func WhenWherePov[T render.EncodedText](dt *model.Date, pl *model.Place, enc render.TextEncoder[T], nc NameChooser, pov *model.POV) string

func WhoDoing

func WhoDoing[T render.EncodedText](p *model.Person, dt *model.Date, enc render.TextEncoder[T], nc NameChooser) string

WhoDoing returns a persons full or familiar name with their occupation as an aside if known.

func WhoWhatWhenWherePov

func WhoWhatWhenWherePov[T render.EncodedText](ev model.TimelineEvent, enc render.TextEncoder[T], nc NameChooser, pov *model.POV) string

func YoungPersonOnePlaceSummary

func YoungPersonOnePlaceSummary[T render.EncodedText](p *model.Person, enc render.TextEncoder[T], nc NameChooser, name T, includeBirth bool, includeParentage bool, activeTense bool, linkname bool, minimal bool) T

Types

type CensusStatement

type CensusStatement[T render.EncodedText] struct {
	Principal           *model.Person
	Event               *model.CensusEvent
	IncludeMedia        bool
	CropMediaHighlights bool
}

func (*CensusStatement[T]) End

func (s *CensusStatement[T]) End() *model.Date

func (*CensusStatement[T]) NarrativeSequence

func (s *CensusStatement[T]) NarrativeSequence() int

func (*CensusStatement[T]) Priority

func (s *CensusStatement[T]) Priority() int

func (*CensusStatement[T]) RenderDetail

func (s *CensusStatement[T]) RenderDetail(seq int, intro *IntroGenerator[T], enc render.ContentBuilder[T], nc NameChooser)

func (*CensusStatement[T]) Start

func (s *CensusStatement[T]) Start() *model.Date

type ChildrenStatement

type ChildrenStatement[T render.EncodedText] struct {
	Family *model.Family
}

func (*ChildrenStatement[T]) End

func (s *ChildrenStatement[T]) End() *model.Date

func (*ChildrenStatement[T]) NarrativeSequence

func (s *ChildrenStatement[T]) NarrativeSequence() int

func (*ChildrenStatement[T]) Priority

func (s *ChildrenStatement[T]) Priority() int

func (*ChildrenStatement[T]) RenderDetail

func (s *ChildrenStatement[T]) RenderDetail(seq int, intro *IntroGenerator[T], enc render.ContentBuilder[T], nc NameChooser)

func (*ChildrenStatement[T]) Start

func (s *ChildrenStatement[T]) Start() *model.Date

type CitationSkippingEncoder

type CitationSkippingEncoder[T render.EncodedText] struct {
	render.ContentBuilder[T]
}

func (*CitationSkippingEncoder[T]) EncodeModelLinkDedupe

func (e *CitationSkippingEncoder[T]) EncodeModelLinkDedupe(firstText T, subsequentText T, m any) T

func (*CitationSkippingEncoder[T]) EncodeWithCitations

func (e *CitationSkippingEncoder[T]) EncodeWithCitations(s T, citations []*model.GeneralCitation) T

type DeathStatement

type DeathStatement[T render.EncodedText] struct {
	Principal               *model.Person
	PossibleDeaths          []*model.PossibleDeathEvent
	ExcludeSurvivingPartner bool
	IncludeMedia            bool
	CropMediaHighlights     bool
}

func (*DeathStatement[T]) End

func (s *DeathStatement[T]) End() *model.Date

func (*DeathStatement[T]) NarrativeSequence

func (s *DeathStatement[T]) NarrativeSequence() int

func (*DeathStatement[T]) Priority

func (s *DeathStatement[T]) Priority() int

func (*DeathStatement[T]) RenderDetail

func (s *DeathStatement[T]) RenderDetail(seq int, intro *IntroGenerator[T], enc render.ContentBuilder[T], nc NameChooser)

func (*DeathStatement[T]) RenderDetailUnknown

func (s *DeathStatement[T]) RenderDetailUnknown(seq int, intro *IntroGenerator[T], enc render.ContentBuilder[T], nc NameChooser) error

func (*DeathStatement[T]) Start

func (s *DeathStatement[T]) Start() *model.Date

type DeathSummarizer

type DeathSummarizer struct {
	DeathEvent        *model.DeathEvent
	BurialEvent       *model.BurialEvent
	CremationEvent    *model.CremationEvent
	ModeOfDeath       model.ModeOfDeath
	CauseOfDeath      *model.Fact
	AgeInYearsAtDeath int
}

type DefaultNameChooser

type DefaultNameChooser struct {
	POV *model.POV
}

func (DefaultNameChooser) FirstUse

func (c DefaultNameChooser) FirstUse(v any) string

func (DefaultNameChooser) FirstUseSplit

func (c DefaultNameChooser) FirstUseSplit(v any, pov *model.POV) (string, string, string)

func (DefaultNameChooser) Subsequent

func (c DefaultNameChooser) Subsequent(v any) string

func (DefaultNameChooser) SubsequentSplit

func (c DefaultNameChooser) SubsequentSplit(v any, pov *model.POV) (string, string, string)

type FamilyEndStatement

type FamilyEndStatement[T render.EncodedText] struct {
	Principal *model.Person
	Family    *model.Family
}

func (*FamilyEndStatement[T]) End

func (s *FamilyEndStatement[T]) End() *model.Date

func (*FamilyEndStatement[T]) NarrativeSequence

func (s *FamilyEndStatement[T]) NarrativeSequence() int

func (*FamilyEndStatement[T]) Priority

func (s *FamilyEndStatement[T]) Priority() int

func (*FamilyEndStatement[T]) RenderDetail

func (s *FamilyEndStatement[T]) RenderDetail(seq int, intro *IntroGenerator[T], enc render.ContentBuilder[T], nc NameChooser)

func (*FamilyEndStatement[T]) Start

func (s *FamilyEndStatement[T]) Start() *model.Date

type FamilyNarrative

type FamilyNarrative[T render.EncodedText] struct {
	Family           *model.Family
	FatherStatements []Statement[T]
	MotherStatements []Statement[T]
	FamilyStatements []Statement[T]
}

func (*FamilyNarrative[T]) Render

func (n *FamilyNarrative[T]) Render(b render.ContentBuilder[T], nc NameChooser)

type FamilyStatement

type FamilyStatement[T render.EncodedText] struct {
	Principal *model.Person
	Family    *model.Family
}

func (*FamilyStatement[T]) End

func (s *FamilyStatement[T]) End() *model.Date

func (*FamilyStatement[T]) NarrativeSequence

func (s *FamilyStatement[T]) NarrativeSequence() int

func (*FamilyStatement[T]) Priority

func (s *FamilyStatement[T]) Priority() int

func (*FamilyStatement[T]) RenderDetail

func (s *FamilyStatement[T]) RenderDetail(seq int, intro *IntroGenerator[T], enc render.ContentBuilder[T], nc NameChooser)

func (*FamilyStatement[T]) Start

func (s *FamilyStatement[T]) Start() *model.Date

type FullNameChooser

type FullNameChooser struct{}

FullNameChooser always returns the full name

func (FullNameChooser) FirstUse

func (c FullNameChooser) FirstUse(v any) string

func (FullNameChooser) FirstUseSplit

func (c FullNameChooser) FirstUseSplit(v any, pov *model.POV) (string, string, string)

func (FullNameChooser) Subsequent

func (c FullNameChooser) Subsequent(v any) string

func (FullNameChooser) SubsequentSplit

func (c FullNameChooser) SubsequentSplit(v any, pov *model.POV) (string, string, string)

type GeneralEventStatement

type GeneralEventStatement[T render.EncodedText] struct {
	Principal *model.Person
	Event     model.TimelineEvent
}

A GeneralEventStatement is used for any general event that may include a narrative. If the Event is an IndividualNarrativeEvent then the narrative field is used in place of any generated text. Otherwise an introductory sentence is prepended followed by the event detail. Any additional narrative text is appended as a new sentence.

func (*GeneralEventStatement[T]) End

func (s *GeneralEventStatement[T]) End() *model.Date

func (*GeneralEventStatement[T]) NarrativeSequence

func (s *GeneralEventStatement[T]) NarrativeSequence() int

func (*GeneralEventStatement[T]) Priority

func (s *GeneralEventStatement[T]) Priority() int

func (*GeneralEventStatement[T]) RenderDetail

func (s *GeneralEventStatement[T]) RenderDetail(seq int, intro *IntroGenerator[T], enc render.ContentBuilder[T], nc NameChooser)

func (*GeneralEventStatement[T]) Start

func (s *GeneralEventStatement[T]) Start() *model.Date

type IntroGenerator

type IntroGenerator[T render.EncodedText] struct {
	POV              *model.POV
	NameMinSeq       int                 // the minimum sequence that the person's name may be used in an intro
	AgeMinSeq        int                 // the minimum sequence that the person's age may be used in an intro
	LastIntroDate    *model.Date         //  the date that the last intro was requested
	PeopleIntroduced map[string][]string // a lookup of occupations for people who have been introduced
}

func (*IntroGenerator[T]) Default

func (n *IntroGenerator[T]) Default(seq int, dt *model.Date) string

func (*IntroGenerator[T]) IntroducePerson

func (n *IntroGenerator[T]) IntroducePerson(seq int, p *model.Person, dt *model.Date, suppressSameSurname bool, enc render.TextEncoder[T], nc NameChooser) string

func (*IntroGenerator[T]) Pronoun

func (n *IntroGenerator[T]) Pronoun(seq int, dt *model.Date, principal *model.Person) string

func (*IntroGenerator[T]) RelativeTime

func (n *IntroGenerator[T]) RelativeTime(seq int, dt *model.Date, includeFullDate bool) string

func (*IntroGenerator[T]) WasWere

func (n *IntroGenerator[T]) WasWere(principal *model.Person) string

type IntroStatement

type IntroStatement[T render.EncodedText] struct {
	Principal           *model.Person
	Baptisms            []*model.BaptismEvent
	PossibleBirths      []*model.PossibleBirthEvent
	SuppressRelation    bool
	NameChooser         NameChooser
	IncludeMedia        bool
	CropMediaHighlights bool
}

func (*IntroStatement[T]) End

func (s *IntroStatement[T]) End() *model.Date

func (*IntroStatement[T]) NarrativeSequence

func (s *IntroStatement[T]) NarrativeSequence() int

func (*IntroStatement[T]) Priority

func (s *IntroStatement[T]) Priority() int

func (*IntroStatement[T]) RenderDetail

func (s *IntroStatement[T]) RenderDetail(seq int, intro *IntroGenerator[T], enc render.ContentBuilder[T], nc NameChooser)

func (*IntroStatement[T]) Start

func (s *IntroStatement[T]) Start() *model.Date

type MediaStatement

type MediaStatement[T render.EncodedText] struct {
	Date         *model.Date
	Sequence     int
	MediaObjects []*model.CitedMediaObject
}

func (*MediaStatement[T]) End

func (s *MediaStatement[T]) End() *model.Date

func (*MediaStatement[T]) NarrativeSequence

func (s *MediaStatement[T]) NarrativeSequence() int

func (*MediaStatement[T]) Priority

func (s *MediaStatement[T]) Priority() int

func (*MediaStatement[T]) RenderDetail

func (s *MediaStatement[T]) RenderDetail(seq int, intro *IntroGenerator[T], enc render.ContentBuilder[T], nc NameChooser)

func (*MediaStatement[T]) Start

func (s *MediaStatement[T]) Start() *model.Date

type NameChooser

type NameChooser interface {
	FirstUse(any) string                                            // name to use for first occurrence
	Subsequent(any) string                                          // name to use for subsequent occurrences
	FirstUseSplit(m any, pov *model.POV) (string, string, string)   // prefix, name and suffix to use for first occurrence
	SubsequentSplit(m any, pov *model.POV) (string, string, string) // prefix, name and suffix to use for subsequent occurrences
}

type NarrativeTimelineEntryFormatter

type NarrativeTimelineEntryFormatter[T render.EncodedText] struct {
	// contains filtered or unexported fields
}

func NewNarrativeTimelineEntryFormatter

func NewNarrativeTimelineEntryFormatter[T render.EncodedText](pov *model.POV, enc render.TextEncoder[T], logger *logging.Logger, nc NameChooser, omitDate bool) *NarrativeTimelineEntryFormatter[T]

func (*NarrativeTimelineEntryFormatter[T]) Detail

func (*NarrativeTimelineEntryFormatter[T]) Title

type PersonLinkingTextEncoder

type PersonLinkingTextEncoder[T render.EncodedText] struct {
	render.TextEncoder[T]
}

A PersonLinkingTextEncoder is a [TextEncoder] that only generates links for people.

func (e *PersonLinkingTextEncoder[T]) EncodeModelLink(text T, m any) T

func (*PersonLinkingTextEncoder[T]) EncodeModelLinkDedupe

func (e *PersonLinkingTextEncoder[T]) EncodeModelLinkDedupe(firstText T, subsequentText T, m any) T

type PersonNarrative

type PersonNarrative[T render.EncodedText] struct {
	Statements []Statement[T]
}

func (*PersonNarrative[T]) Render

func (n *PersonNarrative[T]) Render(pov *model.POV, b render.ContentBuilder[T])

type Statement

type Statement[T render.EncodedText] interface {
	RenderDetail(int, *IntroGenerator[T], render.ContentBuilder[T], NameChooser)
	Start() *model.Date
	End() *model.Date
	NarrativeSequence() int
	Priority() int // priority within a narrative against another statement with same date, higher will be rendered first
}

type TimelineNameChooser

type TimelineNameChooser struct{}

func (TimelineNameChooser) FirstUse

func (c TimelineNameChooser) FirstUse(v any) string

func (TimelineNameChooser) FirstUseSplit

func (c TimelineNameChooser) FirstUseSplit(v any, pov *model.POV) (string, string, string)

func (TimelineNameChooser) Subsequent

func (c TimelineNameChooser) Subsequent(v any) string

func (TimelineNameChooser) SubsequentSplit

func (c TimelineNameChooser) SubsequentSplit(v any, pov *model.POV) (string, string, string)

type UniqueNameChooser

type UniqueNameChooser struct{}

UniqueNameChooser always returns the unique name

func (UniqueNameChooser) FirstUse

func (c UniqueNameChooser) FirstUse(v any) string

func (UniqueNameChooser) FirstUseSplit

func (c UniqueNameChooser) FirstUseSplit(v any, pov *model.POV) (string, string, string)

func (UniqueNameChooser) Subsequent

func (c UniqueNameChooser) Subsequent(v any) string

func (UniqueNameChooser) SubsequentSplit

func (c UniqueNameChooser) SubsequentSplit(v any, pov *model.POV) (string, string, string)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL