package main import ( "fmt" "io" "os" "github.com/spf13/cobra" "go.bigb.es/confluence-md-utilities/converter" "go.bigb.es/confluence-md-utilities/template" ) var ( embedTemplate string embedOutput string embedMarkerStart string embedMarkerEnd string ) var embedCmd = &cobra.Command{ Use: "embed [input.md]", Short: "Embed Markdown into a Confluence XML template", Long: `Convert Markdown to Confluence XML and embed it into a template document. The template must contain marker comments to indicate where content should be inserted: Reads Markdown from stdin if no file is specified.`, Args: cobra.MaximumNArgs(1), RunE: func(cmd *cobra.Command, args []string) error { if embedTemplate == "" { return fmt.Errorf("--template flag is required") } // Read markdown input var input []byte var err error if len(args) > 0 { input, err = os.ReadFile(args[0]) } else { input, err = io.ReadAll(os.Stdin) } if err != nil { return fmt.Errorf("reading input: %w", err) } // Read template tmpl, err := os.ReadFile(embedTemplate) if err != nil { return fmt.Errorf("reading template: %w", err) } // Convert markdown to confluence XML xmlContent, err := converter.MarkdownToConfluence(input) if err != nil { return fmt.Errorf("converting markdown: %w", err) } // Embed into template result, err := template.Embed(string(tmpl), xmlContent, embedMarkerStart, embedMarkerEnd) if err != nil { return fmt.Errorf("embedding: %w", err) } if embedOutput != "" { return os.WriteFile(embedOutput, []byte(result), 0644) } fmt.Print(result) return nil }, } func init() { embedCmd.Flags().StringVarP(&embedTemplate, "template", "t", "", "Template XML file (required)") embedCmd.Flags().StringVarP(&embedOutput, "output", "o", "", "Output file (default: stdout)") embedCmd.Flags().StringVar(&embedMarkerStart, "marker-start", template.DefaultMarkerStart, "Start marker comment") embedCmd.Flags().StringVar(&embedMarkerEnd, "marker-end", template.DefaultMarkerEnd, "End marker comment") rootCmd.AddCommand(embedCmd) }