You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.0 KiB

6 years ago
  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. blackfriday "gopkg.in/russross/blackfriday.v2"
  6. )
  7. const directory = "input"
  8. func main() {
  9. readConfig("input/config.json")
  10. fmt.Println(config)
  11. // generate index page
  12. indexTemplate := readFile(directory + "/" + config.IndexTemplate)
  13. indexPostTemplate := readFile(directory + "/" + config.IndexPostTemplate)
  14. var blogoIndex string
  15. blogoIndex = ""
  16. for _, post := range config.Posts {
  17. mdpostthumb := readFile(directory + "/" + post.Thumb)
  18. htmlpostthumb := string(blackfriday.Run([]byte(mdpostthumb)))
  19. //put the htmlpostthumb in the blogo-index-post-template
  20. m := make(map[string]string)
  21. m["blogo-index-post-template"] = htmlpostthumb
  22. r := putHTMLToTemplate(indexPostTemplate, m)
  23. blogoIndex = blogoIndex + r
  24. }
  25. //put the blogoIndex in the index.html
  26. m := make(map[string]string)
  27. m["blogo-title"] = config.Title
  28. m["blogo-index"] = blogoIndex
  29. r := putHTMLToTemplate(indexTemplate, m)
  30. writeFile("index.html", r)
  31. // generate posts pages
  32. postTemplate := readFile(directory + "/" + config.PostTemplate)
  33. for _, post := range config.Posts {
  34. mdcontent := readFile(directory + "/" + post.Md)
  35. htmlcontent := string(blackfriday.Run([]byte(mdcontent)))
  36. m := make(map[string]string)
  37. m["blogo-post-title"] = post.Title
  38. m["blogo-post-content"] = htmlcontent
  39. r := putHTMLToTemplate(postTemplate, m)
  40. //fmt.Println(r)
  41. filename := strings.Split(post.Md, ".")[0]
  42. writeFile(filename+".html", r)
  43. }
  44. //copy raw
  45. fmt.Println("copying raw:")
  46. for _, dir := range config.CopyRaw {
  47. copyRaw(directory+"/"+dir, dir)
  48. }
  49. }
  50. func putHTMLToTemplate(template string, m map[string]string) string {
  51. lines := getLines(template)
  52. var resultL []string
  53. for _, line := range lines {
  54. inserted := false
  55. for k, v := range m {
  56. if strings.Contains(line, k) {
  57. resultL = append(resultL, v)
  58. inserted = true
  59. }
  60. }
  61. if inserted == false {
  62. resultL = append(resultL, line)
  63. }
  64. }
  65. result := concatStringsWithJumps(resultL)
  66. return result
  67. }