71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
// 8 august 2018
|
|
// usage: hresultwrap funclist template out
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"io/ioutil"
|
|
"text/template"
|
|
"strings"
|
|
|
|
"github.com/golang/protobuf/proto"
|
|
)
|
|
|
|
func argname(arg string) string {
|
|
fields := strings.Fields(arg)
|
|
last := fields[len(fields) - 1]
|
|
start := strings.LastIndexFunc(last, func(r rune) bool {
|
|
return !(r >= 'A' && r <= 'Z') &&
|
|
!(r >= 'a' && r <= 'z') &&
|
|
!(r >= '0' && r <= '9') &&
|
|
r != '_'
|
|
})
|
|
if start == -1 {
|
|
return last
|
|
}
|
|
// TODO replace + 1 with + len of that last rune
|
|
return last[start + 1:]
|
|
}
|
|
|
|
func argcomma(n, len int) string {
|
|
if n == len - 1 {
|
|
return ""
|
|
}
|
|
return ", "
|
|
}
|
|
|
|
var templateFuncs = template.FuncMap{
|
|
"argname": argname,
|
|
"argcomma": argcomma,
|
|
}
|
|
|
|
func main() {
|
|
if len(os.Args) != 3 {
|
|
fmt.Fprintf(os.Stderr, "usage: %s funclist template\n", os.Args[0])
|
|
os.Exit(1)
|
|
}
|
|
b, err := ioutil.ReadFile(os.Args[1])
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error reading %s: %v\n", os.Args[1], err)
|
|
os.Exit(1)
|
|
}
|
|
var f File
|
|
err = proto.UnmarshalText(string(b), &f)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error parsing %s: %v\n", os.Args[1], err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
tmpl, err := template.New(os.Args[2]).Funcs(templateFuncs).ParseFiles(os.Args[2])
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error parsing %s: %v\n", os.Args[2], err)
|
|
os.Exit(1)
|
|
}
|
|
err = tmpl.Execute(os.Stdout, f.Func)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error executing template: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|