// Package renderer provides Timeline rendering package renderer import ( "fmt" "strings" "mermaid-go/pkg/ast" ) // TimelineRenderer implements Timeline rendering type TimelineRenderer struct{} // NewTimelineRenderer creates a new Timeline renderer func NewTimelineRenderer() *TimelineRenderer { return &TimelineRenderer{} } // Render renders a Timeline to mermaid syntax func (r *TimelineRenderer) Render(diagram *ast.TimelineDiagram) (string, error) { var result strings.Builder // Start with timeline declaration result.WriteString("timeline\n") // Add title if present if diagram.Title != nil { result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title)) } // Render sections and events for _, section := range diagram.Sections { // Add section if it has a meaningful name if section.Name != "" && section.Name != "Timeline" { result.WriteString(fmt.Sprintf(" section %s\n", section.Name)) } // Render events for _, event := range section.Events { result.WriteString(fmt.Sprintf(" : %s\n", event.Name)) } } return result.String(), nil }