| 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 | ) |
| 12 | |
| 13 | var convertOutput string |
| 14 | |
| 15 | var convertCmd = &cobra.Command{ |
| 16 | Use: "convert [input.md]", |
| 17 | Short: "Convert Markdown to Confluence XML", |
| 18 | Long: "Convert a Markdown file to Confluence storage format XML. Reads from stdin if no file is specified.", |
| 19 | Args: cobra.MaximumNArgs(1), |
| 20 | RunE: func(cmd *cobra.Command, args []string) error { |
| 21 | var input []byte |
| 22 | var err error |
| 23 | |
| 24 | if len(args) > 0 { |
| 25 | input, err = os.ReadFile(args[0]) |
| 26 | } else { |
| 27 | input, err = io.ReadAll(os.Stdin) |
| 28 | } |
| 29 | if err != nil { |
| 30 | return fmt.Errorf("reading input: %w", err) |
| 31 | } |
| 32 | |
| 33 | result, err := converter.MarkdownToConfluence(input) |
| 34 | if err != nil { |
| 35 | return fmt.Errorf("converting: %w", err) |
| 36 | } |
| 37 | |
| 38 | if convertOutput != "" { |
| 39 | return os.WriteFile(convertOutput, []byte(result), 0644) |
| 40 | } |
| 41 | fmt.Print(result) |
| 42 | return nil |
| 43 | }, |
| 44 | } |
| 45 | |
| 46 | func init() { |
| 47 | convertCmd.Flags().StringVarP(&convertOutput, "output", "o", "", "Output file (default: stdout)") |
| 48 | rootCmd.AddCommand(convertCmd) |
| 49 | } |
| 50 | |