From e4bbc269596f11e2c527dfd5ee7e270d0219b1d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20C=C3=A9sar=20Batista?= Date: Thu, 6 Apr 2023 11:01:44 -0300 Subject: [PATCH] minor fixes for MS PowerPoint --- d2cli/main.go | 5 +++-- lib/pptx/pptx.go | 40 +++++++++++++++++++++++++-------------- lib/pptx/presentation.go | 2 +- lib/pptx/template.pptx | Bin 28298 -> 26731 bytes lib/version/version.go | 10 ++++++++++ 5 files changed, 40 insertions(+), 17 deletions(-) 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 783c5dea0ab7157b440e4bd6d37c0c60893bf08e..f87fcd9e2e5c66f49ea051c9e21444cd77454715 100644 GIT binary patch literal 26731 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 literal 28298 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 KkPvh1um1xk71j~} 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) +}