arnaucube
arnaucube/blogoPublic Self-hosted repository
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_20210717"
 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}