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) +}