47 lines
889 B
Go
47 lines
889 B
Go
package progdoc
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type generator struct {
|
|
outDir string
|
|
}
|
|
|
|
type generation struct {
|
|
OutDir string
|
|
}
|
|
|
|
func (g generator) genSite(siteMap siteMap) (_ generation, err error) {
|
|
outDir := g.outDir
|
|
if outDir == "" {
|
|
outDir, err = os.MkdirTemp("", "")
|
|
if err != nil {
|
|
return generation{}, err
|
|
}
|
|
}
|
|
|
|
for _, page := range siteMap.Pages {
|
|
srcCtx := SourceCtx{Meta: siteMap.Meta}
|
|
|
|
targetPathDir := filepath.Join(g.outDir, page.Target)
|
|
err := os.MkdirAll(targetPathDir, os.ModePerm)
|
|
if err != nil {
|
|
return generation{}, err
|
|
}
|
|
|
|
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 {
|
|
return generation{}, err
|
|
}
|
|
}
|
|
return generation{OutDir: outDir}, nil
|
|
}
|