progdoc/generator.go

79 lines
1.5 KiB
Go
Raw Permalink Normal View History

2026-02-01 04:00:26 +00:00
package progdoc
import (
2026-02-02 10:25:43 +00:00
"io"
"log"
2026-02-01 04:00:26 +00:00
"os"
"path/filepath"
)
type generator struct {
outDir string
}
2026-02-01 05:46:48 +00:00
type generation struct {
OutDir string
}
func (g generator) genSite(siteMap siteMap) (_ generation, err error) {
2026-02-01 04:00:26 +00:00
outDir := g.outDir
if outDir == "" {
outDir, err = os.MkdirTemp("", "")
if err != nil {
2026-02-01 05:46:48 +00:00
return generation{}, err
2026-02-01 04:00:26 +00:00
}
}
2026-02-02 10:25:43 +00:00
log.Printf("Output dir: %s", outDir)
2026-02-01 04:00:26 +00:00
for _, page := range siteMap.Pages {
srcCtx := SourceCtx{Meta: siteMap.Meta}
2026-02-01 06:04:15 +00:00
targetPathDir := filepath.Join(outDir, page.Path)
2026-02-01 04:00:26 +00:00
err := os.MkdirAll(targetPathDir, os.ModePerm)
if err != nil {
2026-02-01 05:46:48 +00:00
return generation{}, err
2026-02-01 04:00:26 +00:00
}
if err := (func(fileName string) error {
f, err := os.Create(fileName)
if err != nil {
return err
}
defer f.Close()
return page.Source.HTML(f, &srcCtx)
})(filepath.Join(targetPathDir, "index.html")); err != nil {
2026-02-01 05:46:48 +00:00
return generation{}, err
2026-02-01 04:00:26 +00:00
}
}
2026-02-02 10:25:43 +00:00
for _, static := range siteMap.Static {
targetFullPath := filepath.Join(outDir, static.Path)
targetFullDir := filepath.Dir(targetFullPath)
err := os.MkdirAll(targetFullDir, os.ModePerm)
if err != nil {
return generation{}, err
}
if err := (func(fileName string) error {
r, err := static.Source.Open()
if err != nil {
return err
}
defer r.Close()
f, err := os.Create(fileName)
if err != nil {
return err
}
defer f.Close()
_, err = io.Copy(f, r)
return err
})(targetFullPath); err != nil {
return generation{}, err
}
}
2026-02-01 05:46:48 +00:00
return generation{OutDir: outDir}, nil
2026-02-01 04:00:26 +00:00
}