libui/windows/tools/hresultwrap.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)
}
}