package progdoc import ( "io" "log" "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 } } log.Printf("Output dir: %s", outDir) for _, page := range siteMap.Pages { srcCtx := SourceCtx{Meta: siteMap.Meta} targetPathDir := filepath.Join(outDir, page.Path) 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 } } 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 } } return generation{OutDir: outDir}, nil }