From 098beac960737145d772faacabcbe6f22778a3de Mon Sep 17 00:00:00 2001 From: Hau Nguyen Date: Tue, 30 Nov 2021 22:17:09 +0700 Subject: [PATCH] init render with markdown --- .gitignore | 14 ++++++++++ custom/head.html | 18 +++++++++++++ go.mod | 5 ++++ go.sum | 2 ++ main.go | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 106 insertions(+) create mode 100644 .gitignore create mode 100644 custom/head.html create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bcd69cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +# macOS +.DS_Store + +# Window +*.exe + +# IntelliJ +.idea/ + +# VSCode +.vscode/ + +# HTML +generated/ diff --git a/custom/head.html b/custom/head.html new file mode 100644 index 0000000..959258a --- /dev/null +++ b/custom/head.html @@ -0,0 +1,18 @@ + + + + + diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..090056d --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module github.com/haunt98/posts-go + +go 1.17 + +require github.com/gomarkdown/markdown v0.0.0-20211128002848-ab7d7bf476b3 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..a8d8c40 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/gomarkdown/markdown v0.0.0-20211128002848-ab7d7bf476b3 h1:TyhCPRkxLfBBOuOy8oambova4pG4Iivc0lTdTrkhN98= +github.com/gomarkdown/markdown v0.0.0-20211128002848-ab7d7bf476b3/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= diff --git a/main.go b/main.go new file mode 100644 index 0000000..58ae3be --- /dev/null +++ b/main.go @@ -0,0 +1,67 @@ +package main + +import ( + "log" + "os" + "path/filepath" + "strings" + + "github.com/gomarkdown/markdown" + "github.com/gomarkdown/markdown/html" +) + +const ( + postsPath = "posts" + headHTMLPath = "custom/head.html" + generatedPath = "generated" + htmlExt = ".html" +) + +func main() { + 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) + } + + if err := os.RemoveAll(generatedPath); err != nil { + log.Fatalln("Failed to remove all", generatedPath, err) + } + + if err := os.MkdirAll(generatedPath, 0777); err != nil { + log.Fatalln("Failed to mkdir all", generatedPath) + } + + for _, file := range files { + if file.IsDir() { + continue + } + + filePath := filepath.Join(postsPath, file.Name()) + md, err := os.ReadFile(filePath) + if err != nil { + log.Fatalln("Failed to read file", filePath) + } + + htmlFlags := html.CommonFlags | html.CompletePage | html.TOC + 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) + + if err := os.WriteFile(generatedFilePath, generatedHTML, 0666); err != nil { + log.Fatalln("Failed to write file", generatedFilePath, err) + } + } +}