From e39b9c15c2f7d8f3fc592c25f629107f53e68dc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20C=C3=A9sar=20Batista?= Date: Mon, 10 Apr 2023 13:49:30 -0300 Subject: [PATCH] move xml to templates --- lib/pptx/pptx.go | 134 +++++++---------------- lib/pptx/templates/app.xml | 51 +++++++++ lib/pptx/templates/content_types.xml | 66 +++++++++++ lib/pptx/templates/core.xml | 17 +++ lib/pptx/templates/presentation.xml | 132 ++++++++++++++++++++++ lib/pptx/templates/rels_presentation.xml | 19 ++++ lib/pptx/templates/slide.xml | 86 +++++++++++++++ lib/pptx/templates/slide.xml.rels | 9 ++ lib/pptx/validate.go | 2 +- 9 files changed, 423 insertions(+), 93 deletions(-) create mode 100644 lib/pptx/templates/app.xml create mode 100644 lib/pptx/templates/content_types.xml create mode 100644 lib/pptx/templates/core.xml create mode 100644 lib/pptx/templates/presentation.xml create mode 100644 lib/pptx/templates/rels_presentation.xml create mode 100644 lib/pptx/templates/slide.xml create mode 100644 lib/pptx/templates/slide.xml.rels diff --git a/lib/pptx/pptx.go b/lib/pptx/pptx.go index 08a23d188..349d09393 100644 --- a/lib/pptx/pptx.go +++ b/lib/pptx/pptx.go @@ -24,10 +24,10 @@ const IMAGE_WIDTH = 8_446_273 const IMAGE_ASPECT_RATIO = float64(IMAGE_WIDTH) / float64(IMAGE_HEIGHT) //go:embed template.pptx -var pptx_template []byte +var PPTX_TEMPLATE []byte func copyPptxTemplateTo(w *zip.Writer) error { - reader := bytes.NewReader(pptx_template) + reader := bytes.NewReader(PPTX_TEMPLATE) zipReader, err := zip.NewReader(reader, reader.Size()) if err != nil { fmt.Printf("error creating zip reader: %v", err) @@ -50,13 +50,15 @@ func addFile(zipFile *zip.Writer, filePath, content string) error { return nil } -const RELS_SLIDE_XML = `` +//go:embed templates/slide.xml.rels +var RELS_SLIDE_XML string func getRelsSlideXml(imageID string) string { return fmt.Sprintf(RELS_SLIDE_XML, imageID, imageID) } -const SLIDE_XML = `%s` +//go:embed templates/slide.xml +var SLIDE_XML string func getSlideXml(boardPath []string, imageID string, top, left, width, height int) string { var slideTitle string @@ -73,129 +75,77 @@ func getSlideXml(boardPath []string, imageID string, top, left, width, height in return fmt.Sprintf(SLIDE_XML, slideDescription, slideDescription, imageID, left, top, width, height, slideDescription, HEADER_HEIGHT, slideTitle) } +//go:embed templates/rels_presentation.xml +var RELS_PRESENTATION_XML string + func getPresentationXmlRels(slideFileNames []string) string { var builder strings.Builder - builder.WriteString(``) - for _, name := range slideFileNames { builder.WriteString(fmt.Sprintf( ``, name, name, )) } - builder.WriteString("") - - return builder.String() + return fmt.Sprintf(RELS_PRESENTATION_XML, builder.String()) } +//go:embed templates/content_types.xml +var CONTENT_TYPES_XML string + func getContentTypesXml(slideFileNames []string) string { var builder strings.Builder - builder.WriteString(``) - for _, name := range slideFileNames { builder.WriteString(fmt.Sprintf( ``, name, )) } - builder.WriteString(``) - return builder.String() + return fmt.Sprintf(CONTENT_TYPES_XML, builder.String()) } +//go:embed templates/presentation.xml +var PRESENTATION_XML string + func getPresentationXml(slideFileNames []string) string { var builder strings.Builder - builder.WriteString(``) - - builder.WriteString("") for i, name := range slideFileNames { // in the exported presentation, the first slide ID was 256, so keeping it here for compatibility builder.WriteString(fmt.Sprintf(``, 256+i, name)) } - builder.WriteString("") - - builder.WriteString(fmt.Sprintf( - ``, - SLIDE_WIDTH, - SLIDE_HEIGHT, - )) - return builder.String() + return fmt.Sprintf(PRESENTATION_XML, builder.String(), SLIDE_WIDTH, SLIDE_HEIGHT) } +//go:embed templates/core.xml +var CORE_XML string + func getCoreXml(title, subject, description, creator string) string { - var builder strings.Builder - - builder.WriteString(``) - builder.WriteString(``) - builder.WriteString(fmt.Sprintf(`%s`, title)) - builder.WriteString(fmt.Sprintf(`%s`, subject)) - builder.WriteString(fmt.Sprintf(`%s`, creator)) - builder.WriteString(``) - builder.WriteString(fmt.Sprintf(`%s`, description)) - builder.WriteString(fmt.Sprintf(`%s`, creator)) - builder.WriteString(`1`) dateTime := time.Now().Format(time.RFC3339) - builder.WriteString(fmt.Sprintf(`%s`, dateTime)) - builder.WriteString(fmt.Sprintf(`%s`, dateTime)) - builder.WriteString(``) - builder.WriteString(``) - - return builder.String() + return fmt.Sprintf( + CORE_XML, + title, + subject, + creator, + description, + creator, + dateTime, + dateTime, + ) } +//go:embed templates/app.xml +var APP_XML string + func getAppXml(slides []*Slide, d2version string) string { var builder strings.Builder - builder.WriteString(``) - builder.WriteString(``) - builder.WriteString(`1`) - builder.WriteString(`0`) - builder.WriteString(`D2`) - builder.WriteString(`On-screen Show (4:3)`) - builder.WriteString(`0`) - 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(`Fonts`) - builder.WriteString(``) - builder.WriteString(``) - builder.WriteString(`2`) - builder.WriteString(``) - builder.WriteString(``) - builder.WriteString(`Theme`) - builder.WriteString(``) - builder.WriteString(``) - builder.WriteString(`1`) - builder.WriteString(``) - builder.WriteString(``) - builder.WriteString(`Slide Titles`) - builder.WriteString(``) - builder.WriteString(``) - builder.WriteString(fmt.Sprintf(`%d`, len(slides))) - 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(``) - builder.WriteString(``) - builder.WriteString(`false`) - builder.WriteString(`false`) - builder.WriteString(``) - builder.WriteString(`false`) - builder.WriteString(fmt.Sprintf(`%s`, d2version)) - builder.WriteString(``) - return builder.String() + return fmt.Sprintf( + APP_XML, + len(slides), + len(slides), + len(slides)+3, // number of entries, len(slides) + Office Theme + 2 Fonts + builder.String(), + d2version, + ) } diff --git a/lib/pptx/templates/app.xml b/lib/pptx/templates/app.xml new file mode 100644 index 000000000..0400cf42f --- /dev/null +++ b/lib/pptx/templates/app.xml @@ -0,0 +1,51 @@ + + + 1 + 0 + D2 + On-screen Show (4:3) + 0 + %d + 0 + 0 + 0 + false + + + + Fonts + + + 2 + + + Theme + + + 1 + + + Slide Titles + + + %d + + + + + + Arial + Calibri + Office Theme + %s + + + + + false + false + + false + %s + \ No newline at end of file diff --git a/lib/pptx/templates/content_types.xml b/lib/pptx/templates/content_types.xml new file mode 100644 index 000000000..2a1b29ed7 --- /dev/null +++ b/lib/pptx/templates/content_types.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + %s + + + + \ No newline at end of file diff --git a/lib/pptx/templates/core.xml b/lib/pptx/templates/core.xml new file mode 100644 index 000000000..c61f6e489 --- /dev/null +++ b/lib/pptx/templates/core.xml @@ -0,0 +1,17 @@ + + + %s + %s + %s + + %s + %s + 1 + %s + %s + + \ No newline at end of file diff --git a/lib/pptx/templates/presentation.xml b/lib/pptx/templates/presentation.xml new file mode 100644 index 000000000..edd06d463 --- /dev/null +++ b/lib/pptx/templates/presentation.xml @@ -0,0 +1,132 @@ + + + + + + %s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/pptx/templates/rels_presentation.xml b/lib/pptx/templates/rels_presentation.xml new file mode 100644 index 000000000..6f85deb57 --- /dev/null +++ b/lib/pptx/templates/rels_presentation.xml @@ -0,0 +1,19 @@ + + + + + + + + %s + \ No newline at end of file diff --git a/lib/pptx/templates/slide.xml b/lib/pptx/templates/slide.xml new file mode 100644 index 000000000..6bdaa177c --- /dev/null +++ b/lib/pptx/templates/slide.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %s + + + + + + + + \ No newline at end of file diff --git a/lib/pptx/templates/slide.xml.rels b/lib/pptx/templates/slide.xml.rels new file mode 100644 index 000000000..f7ea83ea6 --- /dev/null +++ b/lib/pptx/templates/slide.xml.rels @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/lib/pptx/validate.go b/lib/pptx/validate.go index 72a84859a..2d1dcf272 100644 --- a/lib/pptx/validate.go +++ b/lib/pptx/validate.go @@ -70,7 +70,7 @@ func checkFile(reader *zip.Reader, fname string) error { } func getExpectedPptxFileCount(nSlides int) int { - reader := bytes.NewReader(pptx_template) + reader := bytes.NewReader(PPTX_TEMPLATE) zipReader, err := zip.NewReader(reader, reader.Size()) if err != nil { return -1