-
Notifications
You must be signed in to change notification settings - Fork 203
/
template_lexicon.go
61 lines (55 loc) · 1.35 KB
/
template_lexicon.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
package main
import (
"encoding/json"
htmltemplate "html/template"
"io/ioutil"
"os"
"strings"
"text/template"
)
type rules struct {
Functions map[string]rule `json:"functions"`
}
// Named returns the rule with given name.
func (r *rules) Named(name string) rule {
rule, present := r.Functions[name]
if !present {
panic("unknown function " + name)
}
rule.Name = name // Not actually stored in the JSON, but useful in the template.
return rule
}
type rule struct {
Args []struct {
Comment string `json:"comment"`
Deprecated bool `json:"deprecated"`
Name string `json:"name"`
Required bool `json:"required"`
Types []string `json:"types"`
} `json:"args"`
Aliases []string `json:"aliases"`
Docstring string `json:"docstring"`
Comment string `json:"comment"`
Language string `json:"language"`
Name string
}
func must(err error) {
if err != nil {
panic(err)
}
}
func main() {
tmpl, err := template.New("lexicon.html").Funcs(template.FuncMap{
"join": strings.Join,
"newlines": func(s string) string {
return strings.Replace(htmltemplate.HTMLEscapeString(s), "\n", "<br/>", -1)
},
}).ParseFiles(
"docs/lexicon.html", "docs/lexicon_entry.html")
must(err)
b, err := ioutil.ReadFile("docs/rules.json")
must(err)
r := &rules{}
must(json.Unmarshal(b, r))
must(tmpl.Execute(os.Stdout, r))
}