d2/d2cli/export.go

63 lines
1.5 KiB
Go
Raw Normal View History

2023-04-13 13:54:26 +00:00
package d2cli
2023-04-13 21:50:39 +00:00
import (
"fmt"
2023-04-13 21:50:39 +00:00
"path/filepath"
"strings"
2023-04-13 21:50:39 +00:00
)
2023-04-13 13:54:26 +00:00
type exportExtension string
2023-04-14 22:44:01 +00:00
const GIF exportExtension = ".gif"
const PNG exportExtension = ".png"
const PPTX exportExtension = ".pptx"
const PDF exportExtension = ".pdf"
const SVG exportExtension = ".svg"
2023-04-13 21:50:39 +00:00
2023-04-17 17:02:45 +00:00
var SUPPORTED_EXTENSIONS = []exportExtension{SVG, PNG, PDF, PPTX, GIF}
2023-04-13 13:54:26 +00:00
var STDOUT_FORMAT_MAP = map[string]exportExtension{
"png": PNG,
"svg": SVG,
}
var SUPPORTED_STDOUT_FORMATS = []string{"png", "svg"}
func getOutputFormat(stdoutFormatFlag *string, outputPath string) (exportExtension, error) {
2025-02-02 21:22:43 +00:00
if stdoutFormatFlag != nil && *stdoutFormatFlag != "" {
format := strings.ToLower(*stdoutFormatFlag)
if ext, ok := STDOUT_FORMAT_MAP[format]; ok {
return ext, nil
}
return "", fmt.Errorf("%s is not a supported format. Supported formats are: %s", *stdoutFormatFlag, SUPPORTED_STDOUT_FORMATS)
}
return getExportExtension(outputPath), nil
}
2023-04-17 13:15:52 +00:00
func getExportExtension(outputPath string) exportExtension {
2023-04-13 13:54:26 +00:00
ext := filepath.Ext(outputPath)
2023-04-14 22:44:01 +00:00
for _, kext := range SUPPORTED_EXTENSIONS {
if kext == exportExtension(ext) {
2023-04-17 13:15:52 +00:00
return exportExtension(ext)
2023-04-13 13:54:26 +00:00
}
}
// default is svg
2023-04-17 13:15:52 +00:00
return exportExtension(SVG)
2023-04-13 13:54:26 +00:00
}
func (ex exportExtension) supportsAnimation() bool {
2023-04-13 21:50:39 +00:00
return ex == SVG || ex == GIF
2023-04-13 13:54:26 +00:00
}
2023-04-14 22:44:01 +00:00
func (ex exportExtension) requiresAnimationInterval() bool {
return ex == GIF
}
2023-04-13 21:50:39 +00:00
func (ex exportExtension) requiresPNGRenderer() bool {
return ex == PNG || ex == PDF || ex == PPTX || ex == GIF
2023-04-13 13:54:26 +00:00
}
func (ex exportExtension) supportsDarkTheme() bool {
2023-04-13 21:50:39 +00:00
return ex == SVG
2023-04-13 13:54:26 +00:00
}