+var (
+ //go:embed asciicast.tmpl
+ ASCIICastHTMLTmplRaw string
+ ASCIICastHTMLTmpl = template.Must(template.New("asciicast").Parse(
+ ASCIICastHTMLTmplRaw,
+ ))
+)
+
+func fatal(s string) {
+ fmt.Println(s)
+ os.Exit(1)
+}
+
+func asciicastHTML(playerPath, cast string) error {
+ var buf bytes.Buffer
+ err := ASCIICastHTMLTmpl.Execute(&buf, struct {
+ PlayerPath string
+ Cast string
+ }{
+ PlayerPath: playerPath,
+ Cast: cast,
+ })
+ if err != nil {
+ return err
+ }
+ fn := cast + ".html"
+ fd, err := os.OpenFile(fn, os.O_WRONLY|os.O_CREATE|os.O_EXCL, os.FileMode(0666))
+ if err != nil {
+ return err
+ }
+ if _, err = fd.Write(buf.Bytes()); err != nil {
+ os.Remove(fn)
+ return err
+ }
+ return fd.Close()
+}
+