2021-11-30 15:17:09 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/gomarkdown/markdown"
|
|
|
|
"github.com/gomarkdown/markdown/html"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
postsPath = "posts"
|
|
|
|
headHTMLPath = "custom/head.html"
|
2022-07-10 11:09:42 +00:00
|
|
|
generatedPath = "docs"
|
2021-11-30 15:17:09 +00:00
|
|
|
htmlExt = ".html"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
2022-07-10 11:32:01 +00:00
|
|
|
// Cleanup generated path
|
|
|
|
if err := os.RemoveAll(generatedPath); err != nil {
|
|
|
|
log.Fatalln("Failed to remove all", generatedPath, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := os.MkdirAll(generatedPath, 0o777); err != nil {
|
|
|
|
log.Fatalln("Failed to mkdir all", generatedPath)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read needed files
|
2021-11-30 15:17:09 +00:00
|
|
|
headHTML, err := os.ReadFile(headHTMLPath)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln("Failed to read file", headHTML)
|
|
|
|
}
|
|
|
|
|
|
|
|
files, err := os.ReadDir(postsPath)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln("Failed to read dir", postsPath)
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, file := range files {
|
|
|
|
if file.IsDir() {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
2022-07-10 11:32:01 +00:00
|
|
|
// Generate HTML
|
2021-11-30 15:17:09 +00:00
|
|
|
filePath := filepath.Join(postsPath, file.Name())
|
|
|
|
md, err := os.ReadFile(filePath)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln("Failed to read file", filePath)
|
|
|
|
}
|
|
|
|
|
2022-07-10 11:32:01 +00:00
|
|
|
htmlFlags := html.CommonFlags |
|
|
|
|
html.CompletePage |
|
|
|
|
html.TOC |
|
|
|
|
html.LazyLoadImages
|
2021-11-30 15:17:09 +00:00
|
|
|
htmlRendererOtps := html.RendererOptions{
|
|
|
|
Title: file.Name(),
|
|
|
|
Head: headHTML,
|
|
|
|
Flags: htmlFlags,
|
|
|
|
}
|
|
|
|
|
|
|
|
htmlRenderer := html.NewRenderer(htmlRendererOtps)
|
|
|
|
generatedHTML := markdown.ToHTML(md, nil, htmlRenderer)
|
|
|
|
|
|
|
|
generatedFileName := strings.TrimSuffix(file.Name(), filepath.Ext(file.Name())) + htmlExt
|
|
|
|
generatedFilePath := filepath.Join(generatedPath, generatedFileName)
|
|
|
|
|
2022-07-10 11:09:42 +00:00
|
|
|
if err := os.WriteFile(generatedFilePath, generatedHTML, 0o666); err != nil {
|
2021-11-30 15:17:09 +00:00
|
|
|
log.Fatalln("Failed to write file", generatedFilePath, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|