-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrender.go
89 lines (70 loc) · 1.41 KB
/
render.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package chuno
import (
"bytes"
"embed"
"fmt"
"io/ioutil"
"log"
"os"
"strings"
"text/template"
"github.com/yuin/goldmark"
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/renderer/html"
)
var md = goldmark.New(
goldmark.WithExtensions(extension.GFM),
goldmark.WithRendererOptions(
html.WithUnsafe(),
),
)
//go:embed js/prism.js
//go:embed css/prism.css
var assets embed.FS
//go:embed html/index.html
var baseHTML []byte
var style string
func load(path string) ([]byte, error) {
log.Println("load", path)
f, err := os.Open(path)
if err != nil {
log.Fatal("File Open Error\n", err)
return nil, err
}
defer f.Close()
b, err := ioutil.ReadAll(f)
if err != nil {
log.Fatal(err)
return nil, err
}
return b, nil
}
func buildSytle(css string) string {
return fmt.Sprintf("<style>%s</style>", css)
}
func render(mdtext []byte, isdark bool) ([]byte, error) {
var buf bytes.Buffer
css := buildSytle(cssLight)
if isdark {
css = buildSytle(cssDark)
style = `background: #0d1117;`
}
err := md.Convert(mdtext, &buf)
if err != nil {
log.Fatal(err)
return nil, err
}
tmpl, err := template.New("tmpl").Parse(string(baseHTML))
if err != nil {
log.Fatal(err)
return nil, err
}
writer := new(strings.Builder)
mp := map[string]interface{}{
"Content": buf.String(),
"Css": css,
"DarkStyle": style,
}
tmpl.Execute(writer, mp)
return []byte(writer.String()), nil
}