| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- // Package renderer provides Info diagram rendering
- package renderer
- import (
- "fmt"
- "strings"
- "mermaid-go/pkg/ast"
- )
- // InfoRenderer implements Info diagram rendering
- type InfoRenderer struct{}
- // NewInfoRenderer creates a new Info renderer
- func NewInfoRenderer() *InfoRenderer {
- return &InfoRenderer{}
- }
- // Render renders an Info diagram to mermaid syntax
- func (r *InfoRenderer) Render(diagram *ast.InfoDiagram) (string, error) {
- var result strings.Builder
- // Start with info keyword
- result.WriteString("info\n")
- // Add title if present
- if diagram.Title != nil {
- result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title))
- }
- // Render groups first
- for _, group := range diagram.Groups {
- result.WriteString(fmt.Sprintf(" group %s\n", group.Label))
- for _, item := range group.Items {
- result.WriteString(fmt.Sprintf(" %s", item.Label))
- if item.Type != "" {
- result.WriteString(fmt.Sprintf(" %s", item.Type))
- }
- if item.Value != nil {
- result.WriteString(fmt.Sprintf(" : %s", *item.Value))
- }
- result.WriteString("\n")
- }
- }
- // Render standalone items
- for _, item := range diagram.Items {
- result.WriteString(fmt.Sprintf(" %s", item.Label))
- if item.Type != "" {
- result.WriteString(fmt.Sprintf(" %s", item.Type))
- }
- if item.Value != nil {
- result.WriteString(fmt.Sprintf(" : %s", *item.Value))
- }
- result.WriteString("\n")
- }
- return result.String(), nil
- }
|