mirror of
https://github.com/bluszcz/cutego.git
synced 2024-09-29 05:35:16 +03:00
173 lines
3.4 KiB
Go
Executable file
173 lines
3.4 KiB
Go
Executable file
package converter
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/therecipe/qt/internal/binding/parser"
|
|
)
|
|
|
|
func GoHeaderName(f *parser.Function) (o string) {
|
|
|
|
if f.SignalMode == "callback" {
|
|
var tmp = fmt.Sprintf("callback%v%v", f.Class(), strings.Replace(strings.Title(f.Name), "~", "Destroy", -1))
|
|
if f.Overload {
|
|
tmp += f.OverloadNumber
|
|
}
|
|
return tmp
|
|
}
|
|
|
|
if f.Static {
|
|
o += fmt.Sprintf("%v_", strings.Split(f.Fullname, "::")[0])
|
|
}
|
|
|
|
switch f.Meta {
|
|
case "constructor":
|
|
o += "New"
|
|
|
|
case "destructor":
|
|
o += "Destroy"
|
|
}
|
|
|
|
o += f.SignalMode
|
|
|
|
o += strings.Title(f.Name)
|
|
|
|
o += f.TemplateMode
|
|
|
|
if f.Overload {
|
|
o += f.OverloadNumber
|
|
}
|
|
|
|
if strings.ContainsAny(o, "&<>=/!()[]{}-^|*+-") || strings.Contains(o, "Operator") {
|
|
f.Access = "unsupported_GoHeaderName"
|
|
return f.Access
|
|
}
|
|
|
|
return strings.Replace(o, "~", "", -1)
|
|
}
|
|
|
|
func CppHeaderName(f *parser.Function) string {
|
|
return fmt.Sprintf("%v_%v", strings.Split(f.Fullname, "::")[0], GoHeaderName(f))
|
|
}
|
|
|
|
func GoHeaderOutput(f *parser.Function) string {
|
|
|
|
var value = f.Output
|
|
|
|
if f.Meta == "constructor" && f.Output == "" {
|
|
value = f.Name
|
|
}
|
|
|
|
var o = goType(f, value)
|
|
if isClass(o) {
|
|
return fmt.Sprintf("*%v", o)
|
|
}
|
|
return o
|
|
}
|
|
|
|
func CppHeaderOutput(f *parser.Function) string {
|
|
|
|
var value = f.Output
|
|
|
|
if f.Meta == "constructor" && f.Output == "" {
|
|
value = f.Name
|
|
}
|
|
|
|
return cppType(f, value)
|
|
}
|
|
|
|
func GoHeaderInput(f *parser.Function) (o string) {
|
|
|
|
if f.SignalMode == "callback" {
|
|
o += "ptr unsafe.Pointer, ptrName *C.char"
|
|
for _, p := range f.Parameters {
|
|
if v := cgoType(f, p.Value); v != "" {
|
|
o += fmt.Sprintf(", %v %v", cleanName(p.Name), v)
|
|
}
|
|
}
|
|
return strings.TrimSuffix(o, ", ")
|
|
}
|
|
|
|
if (f.Meta == "signal" || strings.Contains(f.Virtual, "impure")) && f.SignalMode == "Connect" {
|
|
o += "f func ("
|
|
}
|
|
|
|
if (f.Meta == "signal" || strings.Contains(f.Virtual, "impure")) && f.SignalMode != "Connect" {
|
|
if strings.Contains(f.Virtual, "impure") && f.SignalMode == "" {
|
|
} else {
|
|
return
|
|
}
|
|
}
|
|
|
|
for _, p := range f.Parameters {
|
|
if v := goType(f, p.Value); v != "" {
|
|
if isClass(v) {
|
|
if (f.Meta == "signal" || strings.Contains(f.Virtual, "impure")) && f.SignalMode == "Connect" {
|
|
o += fmt.Sprintf("%v *%v, ", cleanName(p.Name), v)
|
|
} else {
|
|
o += fmt.Sprintf("%v %v_ITF, ", cleanName(p.Name), v)
|
|
}
|
|
} else {
|
|
o += fmt.Sprintf("%v %v, ", cleanName(p.Name), v)
|
|
}
|
|
} else {
|
|
f.Access = "unsupported_GoHeaderInput"
|
|
return f.Access
|
|
}
|
|
}
|
|
|
|
o = strings.TrimSuffix(o, ", ")
|
|
|
|
if (f.Meta == "signal" || strings.Contains(f.Virtual, "impure")) && f.SignalMode == "Connect" {
|
|
o += ")"
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func GoHeaderInputSignalFunction(f *parser.Function) (o string) {
|
|
|
|
o += "func ("
|
|
|
|
for _, p := range f.Parameters {
|
|
if v := goType(f, p.Value); v != "" {
|
|
if isClass(v) {
|
|
o += fmt.Sprintf("*%v, ", v)
|
|
} else {
|
|
o += fmt.Sprintf("%v, ", v)
|
|
}
|
|
} else {
|
|
f.Access = "unsupported_GoHeaderInputSignalFunction"
|
|
return f.Access
|
|
}
|
|
}
|
|
|
|
o = strings.TrimSuffix(o, ", ")
|
|
|
|
o += ")"
|
|
|
|
return
|
|
}
|
|
|
|
func CppHeaderInput(f *parser.Function) (o string) {
|
|
if !(f.Static || f.Meta == "constructor") {
|
|
o += "void* ptr, "
|
|
}
|
|
|
|
if f.Meta == "signal" {
|
|
return strings.TrimSuffix(o, ", ")
|
|
}
|
|
|
|
for _, p := range f.Parameters {
|
|
if v := cppType(f, p.Value); !(v == "") {
|
|
o += fmt.Sprintf("%v %v, ", v, cleanName(p.Name))
|
|
} else {
|
|
f.Access = "unsupported_CppHeaderInput"
|
|
return f.Access
|
|
}
|
|
}
|
|
|
|
return strings.TrimSuffix(o, ", ")
|
|
}
|