mirror of
https://github.com/42wim/matterbridge
synced 2024-11-19 03:25:33 +00:00
98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
|
// +build ignore
|
||
|
|
||
|
// go run generate.go && go fmt
|
||
|
|
||
|
// The generate-charset-data command generates the Go source code
|
||
|
// for github.com/paulrosania/go-charset/data from the data files
|
||
|
// found in github.com/paulrosania/go-charset/datafiles.
|
||
|
// It should be run in the go-charset root directory.
|
||
|
// The resulting Go files will need gofmt'ing.
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"text/template"
|
||
|
)
|
||
|
|
||
|
type info struct {
|
||
|
Path string
|
||
|
}
|
||
|
|
||
|
var tfuncs = template.FuncMap{
|
||
|
"basename": func(s string) string {
|
||
|
return filepath.Base(s)
|
||
|
},
|
||
|
"read": func(path string) ([]byte, error) {
|
||
|
return ioutil.ReadFile(path)
|
||
|
},
|
||
|
}
|
||
|
|
||
|
var tmpl = template.Must(template.New("").Funcs(tfuncs).Parse(`
|
||
|
// This file is automatically generated by generate-charset-data.
|
||
|
// Do not hand-edit.
|
||
|
|
||
|
package data
|
||
|
import (
|
||
|
"github.com/paulrosania/go-charset/charset"
|
||
|
"io"
|
||
|
"io/ioutil"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
charset.RegisterDataFile({{basename .Path | printf "%q"}}, func() (io.ReadCloser, error) {
|
||
|
r := strings.NewReader({{read .Path | printf "%q"}})
|
||
|
return ioutil.NopCloser(r), nil
|
||
|
})
|
||
|
}
|
||
|
`))
|
||
|
|
||
|
var docTmpl = template.Must(template.New("").Funcs(tfuncs).Parse(`
|
||
|
// This file is automatically generated by generate-charset-data.
|
||
|
// Do not hand-edit.
|
||
|
|
||
|
// The {{basename .Package}} package embeds all the charset
|
||
|
// data files as Go data. It registers the data with the charset
|
||
|
// package as a side effect of its import. To use:
|
||
|
//
|
||
|
// import _ "github.com/paulrosania/go-charset"
|
||
|
package {{basename .Package}}
|
||
|
`))
|
||
|
|
||
|
func main() {
|
||
|
dataDir := filepath.Join("..", "datafiles")
|
||
|
d, err := os.Open(dataDir)
|
||
|
if err != nil {
|
||
|
fatalf("%v", err)
|
||
|
}
|
||
|
names, err := d.Readdirnames(0)
|
||
|
if err != nil {
|
||
|
fatalf("cannot read datafiles dir: %v", err)
|
||
|
}
|
||
|
for _, name := range names {
|
||
|
writeFile("data_"+name+".go", tmpl, info{
|
||
|
Path: filepath.Join(dataDir, name),
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func writeFile(name string, t *template.Template, data interface{}) {
|
||
|
w, err := os.Create(name)
|
||
|
if err != nil {
|
||
|
fatalf("cannot create output file: %v", err)
|
||
|
}
|
||
|
defer w.Close()
|
||
|
err = t.Execute(w, data)
|
||
|
if err != nil {
|
||
|
fatalf("template execute %q: %v", name, err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func fatalf(f string, a ...interface{}) {
|
||
|
fmt.Fprintf(os.Stderr, "%s\n", fmt.Sprintf(f, a...))
|
||
|
os.Exit(2)
|
||
|
}
|