go-org-orgwiki/main.go
Niklas Fasching 9826aa2143 Add make target to automatically regenerate html fixtures
After changing something the fixtures need to be updated to reflect the new
output. This just moves those steps from my bash history to make.
2018-12-11 15:42:41 +01:00

54 lines
1.3 KiB
Go

package main
import (
"bytes"
"io/ioutil"
"log"
"os"
"strings"
"github.com/alecthomas/chroma"
"github.com/alecthomas/chroma/formatters/html"
"github.com/alecthomas/chroma/lexers"
"github.com/alecthomas/chroma/styles"
"github.com/niklasfasching/go-org/org"
)
func main() {
log.SetFlags(0)
log.SetOutput(os.Stdout)
if len(os.Args) < 3 {
log.Println("USAGE: org FILE OUTPUT_FORMAT")
log.Fatal("supported output formats: org, html, html-chroma")
}
bs, err := ioutil.ReadFile(os.Args[1])
if err != nil {
log.Fatal(err)
}
r, out := bytes.NewReader(bs), ""
switch strings.ToLower(os.Args[2]) {
case "org":
out = org.NewDocument().Parse(r).Write(org.NewOrgWriter()).String()
case "html":
out = org.NewDocument().Parse(r).Write(org.NewHTMLWriter()).String()
case "html-chroma":
writer := org.NewHTMLWriter()
writer.HighlightCodeBlock = highlightCodeBlock
out = org.NewDocument().Parse(r).Write(writer).String()
default:
log.Fatal("Unsupported output format")
}
log.Print(out)
}
func highlightCodeBlock(source, lang string) string {
var w strings.Builder
l := lexers.Get(lang)
if l == nil {
l = lexers.Fallback
}
l = chroma.Coalesce(l)
it, _ := l.Tokenise(nil, source)
_ = html.New().Format(&w, styles.Get("friendly"), it)
return `<div class="highlight">` + w.String() + `</div>`
}