blogo/main.go
main.goRaw
1package main
2
3import (
4 "fmt"
5 "os"
6 "strings"
7
8 "github.com/gomarkdown/markdown"
9 "github.com/gomarkdown/markdown/parser"
10)
11
12const version = "v0_20210810"
13const directory = "blogo-input"
14const outputDir = "public"
15
16func main() {
17 fmt.Println("Blogo version:", version)
18 readConfig(directory + "/blogo.json")
19 fmt.Println(config)
20
21 _ = os.Mkdir(outputDir, os.ModePerm)
22
23 mdExtensions := parser.NoIntraEmphasis | parser.Tables | parser.FencedCode |
24 parser.Autolink | parser.Strikethrough | parser.SpaceHeadings | parser.HeadingIDs |
25 parser.BackslashLineBreak | parser.DefinitionLists
26
27 // generate index page
28 indexTemplate := readFile(directory + "/" + config.IndexTemplate)
29 indexPostTemplate := readFile(directory + "/" + config.PostThumbTemplate)
30 var blogoIndex string
31 blogoIndex = ""
32 for _, post := range config.Posts {
33 mdpostthumb := readFile(directory + "/" + config.PostsDir + post.Thumb)
34 mdParser := parser.NewWithExtensions(mdExtensions)
35 htmlpostthumb := markdown.ToHTML([]byte(mdpostthumb), mdParser, nil)
36
37 //put the htmlpostthumb in the blogo-index-post-template
38 m := make(map[string]string)
39 m["[blogo-index-post-template]"] = string(htmlpostthumb)
40 r := putHTMLToTemplate(indexPostTemplate, m)
41 filename := strings.Split(post.Md, ".")[0]
42 r = "<a href='" + config.RelativePath + "/" + filename + ".html'>" + r + "</a>"
43 blogoIndex = blogoIndex + r
44 }
45 //put the blogoIndex in the index.html
46 m := make(map[string]string)
47 m["[blogo-title]"] = config.Title
48 m["[blogo-content]"] = blogoIndex
49 m["[blogo-summary]"] = config.MetaDescr
50 m["[blogo-img]"] = config.AbsoluteUrl + "/" + config.MetaImg
51 m["[blogo-link]"] = config.AbsoluteUrl
52 r := putHTMLToTemplate(indexTemplate, m)
53 writeFile(outputDir+"/"+"index.html", r)
54
55 // generate posts pages
56
57 for _, post := range config.Posts {
58 mdcontent := readFile(directory + "/" + config.PostsDir + post.Md)
59 mdParser := parser.NewWithExtensions(mdExtensions)
60 htmlcontent := markdown.ToHTML([]byte(mdcontent), mdParser, nil)
61
62 firstline := strings.Split(mdcontent, "\n")[0]
63 title := strings.Replace(firstline, "#", "", -1)
64
65 filename := strings.Split(post.Md, ".")[0]
66
67 m := make(map[string]string)
68 m["[blogo-title]"] = title + " - " + config.Title
69 m["[blogo-content]"] = string(htmlcontent)
70 m["[blogo-summary]"] = post.MetaDescr
71 m["[blogo-link]"] = config.AbsoluteUrl + "/" + filename + ".html"
72 m["[blogo-img]"] = config.AbsoluteUrl + "/" + post.MetaImg
73
74 r := putHTMLToTemplate(indexTemplate, m)
75 writeFile(outputDir+"/"+filename+".html", r)
76 }
77
78 //copy raw
79 fmt.Println("copying raw:")
80 for _, dir := range config.CopyRaw {
81 copyRaw(directory+"/"+dir, outputDir+"/")
82 }
83}
84
85func putHTMLToTemplate(template string, m map[string]string) string {
86 lines := getLines(template)
87 var resultL []string
88 for _, line := range lines {
89 inserted := false
90 for k, v := range m {
91 if strings.Contains(line, k) {
92 //in the line, change [tag] with the content
93 lineReplaced := strings.Replace(line, k, v, -1)
94 resultL = append(resultL, lineReplaced)
95 inserted = true
96 }
97 }
98 if inserted == false {
99 resultL = append(resultL, line)
100 }
101 }
102 result := concatStringsWithJumps(resultL)
103 return result
104}