csb-index.go
Raw
package main
import (
"fmt"
"html/template"
"io/ioutil"
"os"
"path/filepath"
"github.com/docopt/docopt-go"
"github.com/russross/blackfriday"
)
type context struct {
Name string
Content template.HTML
}
func buildFrontMatter(infile string, outfile string, templatefile string, name string, additionaldirs []string) error {
f, err := os.Open(infile)
if err != nil {
return err
}
defer f.Close()
data, err := ioutil.ReadAll(f)
if err != nil {
return err
}
rendered := blackfriday.MarkdownCommon(data)
templatename := filepath.Base(templatefile)
t, err := template.ParseFiles(templatefile)
if err != nil {
return err
}
for _, d := range additionaldirs {
_, err = t.ParseGlob(d + "/*")
if err != nil {
return err
}
}
if name == "" {
filename := filepath.Base(infile)
extension := filepath.Ext(filename)
name = filename[0 : len(filename)-len(extension)]
}
c := context{
Name: name,
Content: template.HTML(string(rendered)),
}
outFile, err := os.Create(outfile)
if err != nil {
return err
}
defer outFile.Close()
return t.ExecuteTemplate(outFile, templatename, c)
}
func main() {
usage := fmt.Sprintf(`Builds static frontmatter for code repositories
Usage:
%[1]s <infile> <outfile> <template> [--name=<name>] [--include=<dir>]...
`, filepath.Base(os.Args[0]))
arguments, err := docopt.Parse(usage, nil, true, "0.1.0", false)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
if arguments["--name"] == nil {
arguments["--name"] = ""
}
err = buildFrontMatter(arguments["<infile>"].(string),
arguments["<outfile>"].(string),
arguments["<template>"].(string),
arguments["--name"].(string),
arguments["--include"].([]string))
if err != nil {
fmt.Println(err)
os.Exit(1)
}
os.Exit(0)
}