// ©AngelaMos | 2026
// main.go
package main
import (
"archive/zip"
"flag"
"fmt"
"log"
"os"
"path/filepath"
)
const (
contentTypesXML = `
`
packageRelsXML = `
`
documentXML = `
Internal document - confidential. Do not redistribute.
`
documentRelsXML = `
`
footer2XML = `
INCLUDEPICTURE "HONEY_TRACK_URL" \d \* MERGEFORMAT
`
pathContentTypes = "[Content_Types].xml"
pathPackageRels = "_rels/.rels"
pathDocument = "word/document.xml"
pathDocumentRels = "word/_rels/document.xml.rels"
pathFooter2 = "word/footer2.xml"
dirPerm os.FileMode = 0o755
filePerm os.FileMode = 0o644
)
type entry struct {
name string
body string
method uint16
}
func entries() []entry {
return []entry{
{name: pathContentTypes, body: contentTypesXML, method: zip.Store},
{name: pathPackageRels, body: packageRelsXML, method: zip.Deflate},
{name: pathDocument, body: documentXML, method: zip.Deflate},
{name: pathDocumentRels, body: documentRelsXML, method: zip.Store},
{name: pathFooter2, body: footer2XML, method: zip.Deflate},
}
}
func main() {
out := flag.String("out", "", "output path for template.docx")
flag.Parse()
if *out == "" {
log.Fatal("usage: builddocxtemplate -out ")
}
if err := buildTemplate(*out); err != nil {
log.Fatalf("build docx template: %v", err)
}
fmt.Printf("wrote %s\n", *out)
}
func buildTemplate(out string) (err error) {
cleaned := filepath.Clean(out)
if mkErr := os.MkdirAll(filepath.Dir(cleaned), dirPerm); mkErr != nil {
return fmt.Errorf("mkdir parent: %w", mkErr)
}
f, oErr := os.OpenFile(
cleaned,
os.O_CREATE|os.O_TRUNC|os.O_WRONLY,
filePerm,
)
if oErr != nil {
return fmt.Errorf("open output: %w", oErr)
}
defer func() {
if cerr := f.Close(); cerr != nil && err == nil {
err = fmt.Errorf("close output: %w", cerr)
}
}()
w := zip.NewWriter(f)
for _, e := range entries() {
hdr := &zip.FileHeader{Name: e.name, Method: e.method}
fw, cErr := w.CreateHeader(hdr)
if cErr != nil {
return fmt.Errorf("create %s: %w", e.name, cErr)
}
if _, wErr := fw.Write([]byte(e.body)); wErr != nil {
return fmt.Errorf("write %s: %w", e.name, wErr)
}
}
if zErr := w.Close(); zErr != nil {
return fmt.Errorf("close zip writer: %w", zErr)
}
return nil
}