Go Site Generator
Here is the site generator I wrote in Go:
package main
import (
"fmt"
"io/ioutil"
"os/exec"
"os"
)
var template_master = `
<html>
<head>
<title>Actually</title>
<style>
hr { border: 1px dashed #efefef; }
</style>
</head>
<body bgcolor= "#efefef">
<center><h1>Actually</h1></center>
<center><h3><i>It's Randolph Connor Berry</i></h3></center>
<center>
<i>~~~ A journal of daily thoughts, hopes, and explorations ~~~</i>
</center>
<center>
<a href="toc.html"><i>Archives</i></a>
</center>
%s
</body>
</html>
`
var template_post = `
<div style="background-color:white;
border:1px dashed;
padding-left: 1%;
padding-right: 1%;
margin-left:auto;
margin-right:auto;
margin-bottom:10px;
width:40%;">
<h2><a id="%s">%s</a></h2>
%s
</div>
`
func main() {
os.Chdir("entries")
entries, _ := ioutil.ReadDir(".")
// reverse entries
for i, j := 0, len(entries)-1; i < j; i, j = i+1, j-1 {
entries[i], entries[j] = entries[j], entries[i]
}
posts := ""
for _, e := range entries {
date := e.Name()
cmd := exec.Command("markdown", date)
post, _ := cmd.Output()
post_html := fmt.Sprintf(template_post, date, date, post)
posts += string(post_html)
}
main_page := fmt.Sprintf(template_master, posts)
fmt.Print(main_page)
}
Table Of Contents In Go
Here is the code that generates the table of contents / archive listing:
package main
import (
"fmt"
"os"
"io/ioutil"
"strings"
"regexp"
)
func main() {
output := make([]string, 1)
for _, arg := range os.Args[1:] {
content, _ := ioutil.ReadFile(arg)
data := string(content)
lines := strings.Split(data, "\n")
for _, line := range lines {
found, _ := regexp.MatchString("^###", line)
if found {
date := arg
line = strings.Replace(line, "### ", "", -1)
line = strings.Replace(line, "\n", "", -1)
output_line := fmt.Sprintf("<a href=\"index.html#%s\">%s</a><br>", date, line)
output = append(output, output_line)
}
}
}
// reverse output lines
for i, j := 0, len(output)-1; i < j; i, j = i+1, j-1 {
output[i], output[j] = output[j], output[i]
}
for _, line := range output {
fmt.Println(line)
}
}