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