embed.go

v0.1.0
Doc Versions Source
1
package main
2
3
import (
4
	"fmt"
5
	"io"
6
	"os"
7
8
	"github.com/spf13/cobra"
9
10
	"go.bigb.es/confluence-md-utilities/converter"
11
	"go.bigb.es/confluence-md-utilities/template"
12
)
13
14
var (
15
	embedTemplate    string
16
	embedOutput      string
17
	embedMarkerStart string
18
	embedMarkerEnd   string
19
)
20
21
var embedCmd = &cobra.Command{
22
	Use:   "embed [input.md]",
23
	Short: "Embed Markdown into a Confluence XML template",
24
	Long: `Convert Markdown to Confluence XML and embed it into a template document.
25
The template must contain marker comments to indicate where content should be inserted:
26
27
  <!-- MD_CONTENT_START -->
28
  <!-- MD_CONTENT_END -->
29
30
Reads Markdown from stdin if no file is specified.`,
31
	Args: cobra.MaximumNArgs(1),
32
	RunE: func(cmd *cobra.Command, args []string) error {
33
		if embedTemplate == "" {
34
			return fmt.Errorf("--template flag is required")
35
		}
36
37
		// Read markdown input
38
		var input []byte
39
		var err error
40
		if len(args) > 0 {
41
			input, err = os.ReadFile(args[0])
42
		} else {
43
			input, err = io.ReadAll(os.Stdin)
44
		}
45
		if err != nil {
46
			return fmt.Errorf("reading input: %w", err)
47
		}
48
49
		// Read template
50
		tmpl, err := os.ReadFile(embedTemplate)
51
		if err != nil {
52
			return fmt.Errorf("reading template: %w", err)
53
		}
54
55
		// Convert markdown to confluence XML
56
		xmlContent, err := converter.MarkdownToConfluence(input)
57
		if err != nil {
58
			return fmt.Errorf("converting markdown: %w", err)
59
		}
60
61
		// Embed into template
62
		result, err := template.Embed(string(tmpl), xmlContent, embedMarkerStart, embedMarkerEnd)
63
		if err != nil {
64
			return fmt.Errorf("embedding: %w", err)
65
		}
66
67
		if embedOutput != "" {
68
			return os.WriteFile(embedOutput, []byte(result), 0644)
69
		}
70
		fmt.Print(result)
71
		return nil
72
	},
73
}
74
75
func init() {
76
	embedCmd.Flags().StringVarP(&embedTemplate, "template", "t", "", "Template XML file (required)")
77
	embedCmd.Flags().StringVarP(&embedOutput, "output", "o", "", "Output file (default: stdout)")
78
	embedCmd.Flags().StringVar(&embedMarkerStart, "marker-start", template.DefaultMarkerStart, "Start marker comment")
79
	embedCmd.Flags().StringVar(&embedMarkerEnd, "marker-end", template.DefaultMarkerEnd, "End marker comment")
80
	rootCmd.AddCommand(embedCmd)
81
}
82

Source Files