diff --git a/d2cli/main.go b/d2cli/main.go
index dc9f0e229..015645578 100644
--- a/d2cli/main.go
+++ b/d2cli/main.go
@@ -365,10 +365,11 @@ func compile(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, rende
splitPath := strings.Split(trimmedPath, "/")
rootName := splitPath[len(splitPath)-1]
var username string
- if user, err := user.Current(); err != nil {
+ if user, err := user.Current(); err == nil {
username = user.Username
}
- p := pptx.NewPresentation(rootName, rootName, rootName, username, version.Version)
+ description := "Presentation auto-generated by D2 - https://d2lang.com/"
+ p := pptx.NewPresentation(rootName, description, rootName, username, version.OnlyNumbers())
err := renderPPTX(ctx, ms, p, plugin, renderOpts, outputPath, page, diagram, nil)
if err != nil {
return nil, false, err
diff --git a/lib/pptx/pptx.go b/lib/pptx/pptx.go
index c23493631..b37503113 100644
--- a/lib/pptx/pptx.go
+++ b/lib/pptx/pptx.go
@@ -58,13 +58,13 @@ const IMAGE_HEIGHT = SLIDE_HEIGHT - HEADER_HEIGHT
// keep the right aspect ratio: SLIDE_WIDTH / SLIDE_HEIGHT = IMAGE_WIDTH / IMAGE_HEIGHT
const IMAGE_WIDTH = IMAGE_HEIGHT * (SLIDE_WIDTH / SLIDE_HEIGHT)
-const RELS_SLIDE_XML = ``
+const RELS_SLIDE_XML = ``
func getRelsSlideXml(imageId string) string {
return fmt.Sprintf(RELS_SLIDE_XML, imageId, imageId)
}
-const SLIDE_XML = `%s`
+const SLIDE_XML = `%s`
func getSlideXml(boardPath []string, imageId string, top, left, width, height int) string {
var slideTitle string
@@ -83,7 +83,7 @@ func getSlideXml(boardPath []string, imageId string, top, left, width, height in
func getPresentationXmlRels(slideFileNames []string) string {
var builder strings.Builder
- builder.WriteString(``)
+ builder.WriteString(``)
for _, name := range slideFileNames {
builder.WriteString(fmt.Sprintf(
@@ -98,7 +98,7 @@ func getPresentationXmlRels(slideFileNames []string) string {
func getContentTypesXml(slideFileNames []string) string {
var builder strings.Builder
- builder.WriteString(``)
+ builder.WriteString(``)
for _, name := range slideFileNames {
builder.WriteString(fmt.Sprintf(
@@ -112,16 +112,16 @@ func getContentTypesXml(slideFileNames []string) string {
func getPresentationXml(slideFileNames []string) string {
var builder strings.Builder
- builder.WriteString(``)
+ builder.WriteString(``)
builder.WriteString("")
for i, name := range slideFileNames {
- builder.WriteString(fmt.Sprintf(``, i, name))
+ builder.WriteString(fmt.Sprintf(``, 256+i, name))
}
builder.WriteString("")
builder.WriteString(fmt.Sprintf(
- ``,
+ ``,
SLIDE_WIDTH,
SLIDE_HEIGHT,
))
@@ -131,7 +131,7 @@ func getPresentationXml(slideFileNames []string) string {
func getCoreXml(title, subject, description, creator string) string {
var builder strings.Builder
- builder.WriteString(``)
+ builder.WriteString(``)
builder.WriteString(``)
builder.WriteString(fmt.Sprintf(`%s`, title))
builder.WriteString(fmt.Sprintf(`%s`, subject))
@@ -140,7 +140,7 @@ func getCoreXml(title, subject, description, creator string) string {
builder.WriteString(fmt.Sprintf(`%s`, description))
builder.WriteString(fmt.Sprintf(`%s`, creator))
builder.WriteString(`1`)
- dateTime := time.Now().Format("RFC3339")
+ dateTime := time.Now().Format(time.RFC3339)
builder.WriteString(fmt.Sprintf(`%s`, dateTime))
builder.WriteString(fmt.Sprintf(`%s`, dateTime))
builder.WriteString(``)
@@ -149,7 +149,7 @@ func getCoreXml(title, subject, description, creator string) string {
return builder.String()
}
-func getAppXml(nSlides int, d2version string) string {
+func getAppXml(slides []*Slide, d2version string) string {
var builder strings.Builder
builder.WriteString(``)
builder.WriteString(``)
@@ -158,13 +158,19 @@ func getAppXml(nSlides int, d2version string) string {
builder.WriteString(`D2`)
builder.WriteString(`On-screen Show (4:3)`)
builder.WriteString(`0`)
- builder.WriteString(fmt.Sprintf(`%d`, nSlides))
+ builder.WriteString(fmt.Sprintf(`%d`, len(slides)))
builder.WriteString(`0`)
builder.WriteString(`0`)
builder.WriteString(`0`)
builder.WriteString(`false`)
builder.WriteString(``)
- builder.WriteString(``)
+ builder.WriteString(``)
+ builder.WriteString(``)
+ builder.WriteString(`Fonts`)
+ builder.WriteString(``)
+ builder.WriteString(``)
+ builder.WriteString(`2`)
+ builder.WriteString(``)
builder.WriteString(``)
builder.WriteString(`Theme`)
builder.WriteString(``)
@@ -175,13 +181,19 @@ func getAppXml(nSlides int, d2version string) string {
builder.WriteString(`Slide Titles`)
builder.WriteString(``)
builder.WriteString(``)
- builder.WriteString(`0`)
+ builder.WriteString(fmt.Sprintf(`%d`, len(slides)))
builder.WriteString(``)
builder.WriteString(``)
builder.WriteString(``)
builder.WriteString(``)
- builder.WriteString(``)
+ // number of entries, len(slides) + Office Theme + 2 Fonts
+ builder.WriteString(fmt.Sprintf(``, len(slides)+3))
+ builder.WriteString(`Arial`)
+ builder.WriteString(`Calibri`)
builder.WriteString(`Office Theme`)
+ for _, slide := range slides {
+ builder.WriteString(fmt.Sprintf(`%s`, strings.Join(slide.BoardPath, "/")))
+ }
builder.WriteString(``)
builder.WriteString(``)
builder.WriteString(``)
diff --git a/lib/pptx/presentation.go b/lib/pptx/presentation.go
index 0f4943b3c..1ec4286ab 100644
--- a/lib/pptx/presentation.go
+++ b/lib/pptx/presentation.go
@@ -143,7 +143,7 @@ func (p *Presentation) SaveTo(filePath string) error {
return err
}
- err = addFile(zipFile, "docProps/app.xml", getAppXml(len(p.Slides), p.D2Version))
+ err = addFile(zipFile, "docProps/app.xml", getAppXml(p.Slides, p.D2Version))
if err != nil {
return err
}
diff --git a/lib/pptx/template.pptx b/lib/pptx/template.pptx
index 783c5dea0..f87fcd9e2 100644
Binary files a/lib/pptx/template.pptx and b/lib/pptx/template.pptx differ
diff --git a/lib/version/version.go b/lib/version/version.go
index c11435e09..996d93823 100644
--- a/lib/version/version.go
+++ b/lib/version/version.go
@@ -1,4 +1,14 @@
package version
+import "regexp"
+
// Pre-built binaries will have version set correctly during build time.
var Version = "v0.3.0-HEAD"
+
+func OnlyNumbers() string {
+ re, err := regexp.Compile("[0-9]+.[0-9]+.[0-9]+")
+ if err != nil {
+ return ""
+ }
+ return re.FindString(Version)
+}