package main import ( "bytes" pathpkg "path" "strings" ) // Format represents an output format. type Format interface { Format(*Page, *Config) (path string, content []byte) } type FormatFunc func(*Page, *Config) (string, []byte) func (f FormatFunc) Format(p *Page, cfg *Config) (string, []byte) { return f(p, cfg) } // FormatGemini formats the page as Gemini text. func FormatGemini(p *Page, cfg *Config) (path string, content []byte) { path = pathpkg.Join(path, "index.gmi") content = []byte(p.Content) return } // FormatHTML formats the page as HTML. func FormatHTML(p *Page, cfg *Config) (path string, content []byte) { path = pathpkg.Join(p.Path, "index.html") r := strings.NewReader(p.Content) content = textToHTML(r) // html template context type htmlCtx struct { Title string // page title Content string // page HTML contents } var b bytes.Buffer // clean path to remove trailing slash dir := pathpkg.Dir(pathpkg.Clean(p.Path)) tmpl := cfg.Templates.FindTemplate(dir, "output.html") tmpl.Execute(&b, &htmlCtx{ Title: p.Title, Content: string(content), }) content = b.Bytes() return }