cutego/internal/binding/parser/variable.go

161 lines
4.1 KiB
Go
Raw Normal View History

package parser
import (
"fmt"
"strings"
)
type Variable struct {
2016-11-01 21:52:59 +03:00
Name string `xml:"name,attr"`
Fullname string `xml:"fullname,attr"`
Href string `xml:"href,attr"`
Status string `xml:"status,attr"`
Access string `xml:"access,attr"`
Filepath string `xml:"filepath,attr"`
Static bool `xml:"static,attr"`
Output string `xml:"type,attr"`
Brief string `xml:"brief,attr"`
Getter []*getter `xml:"getter"`
Setter []*setter `xml:"setter"`
}
2016-11-01 21:52:59 +03:00
type getter struct{}
type setter struct{}
func (v *Variable) Class() string { return strings.Split(v.Fullname, "::")[0] }
2016-11-01 21:52:59 +03:00
func (v *Variable) variableToFunction(meta string) *Function {
if meta == GETTER {
return &Function{
Name: v.Name,
Fullname: v.Fullname,
Href: v.Href,
Status: v.Status,
Access: v.Access,
Filepath: v.Filepath,
Static: v.Static,
Output: v.Output,
Meta: meta,
2016-11-01 21:52:59 +03:00
Brief: v.Brief,
}
}
return &Function{
Name: fmt.Sprintf("set%v", strings.Title(v.Name)),
Fullname: fmt.Sprintf("%v::set%v", v.Class(), strings.Title(v.Name)),
Href: v.Href,
Status: v.Status,
Access: v.Access,
Filepath: v.Filepath,
Static: v.Static,
Output: "void",
Meta: meta,
2016-10-22 01:50:26 +03:00
Parameters: []*Parameter{{Value: v.Output}},
TmpName: v.Name,
2016-11-01 21:52:59 +03:00
Brief: v.Brief,
}
}
2016-11-01 21:52:59 +03:00
func (v *Variable) propertyToFunctions(c *Class) []*Function {
var funcs []*Function
if v.Fullname == "QTextBrowser::modified" {
return funcs
}
if !(c.HasFunctionWithName(v.Name) || c.HasFunctionWithName(fmt.Sprintf("is%v", strings.Title(v.Name))) || c.HasFunctionWithName(fmt.Sprintf("has%v", strings.Title(v.Name)))) && len(v.Getter) == 0 {
2016-11-01 21:52:59 +03:00
var tmpV = *v
switch tmpV.Fullname {
case "QGraphicsObject::z":
{
tmpV.Name = "zValue"
tmpV.Fullname = fmt.Sprintf("%v::%v", tmpV.Class(), tmpV.Name)
}
case "QGraphicsObject::effect":
{
tmpV.Name = "graphicsEffect"
tmpV.Fullname = fmt.Sprintf("%v::%v", tmpV.Class(), tmpV.Name)
}
default:
{
if tmpV.Output == "bool" {
tmpV.Name = fmt.Sprintf("is%v", strings.Title(tmpV.Name))
tmpV.Fullname = fmt.Sprintf("%v::%v", tmpV.Class(), tmpV.Name)
}
}
}
funcs = append(funcs, &Function{
Name: tmpV.Name,
Fullname: tmpV.Fullname,
Href: tmpV.Href,
Status: tmpV.Status,
Access: tmpV.Access,
Filepath: tmpV.Filepath,
Static: tmpV.Static,
Output: tmpV.Output,
Meta: PLAIN,
Brief: tmpV.Brief,
})
}
if !c.HasFunctionWithName(fmt.Sprintf("set%v", strings.Title(v.Name))) && len(v.Getter) == 0 && len(v.Setter) == 0 {
2016-11-01 21:52:59 +03:00
switch v.Fullname {
case "QGraphicsObject::z":
{
v.Name = "zValue"
v.Fullname = fmt.Sprintf("%v::%v", v.Class(), v.Name)
}
case "QGraphicsObject::effect":
{
v.Name = "graphicsEffect"
v.Fullname = fmt.Sprintf("%v::%v", v.Class(), v.Name)
}
}
funcs = append(funcs,
&Function{
Name: fmt.Sprintf("set%v", strings.Title(v.Name)),
Fullname: fmt.Sprintf("%v::set%v", v.Class(), strings.Title(v.Name)),
Href: v.Href,
Status: v.Status,
Access: v.Access,
Filepath: v.Filepath,
Static: v.Static,
Output: "void",
Meta: PLAIN,
Parameters: []*Parameter{{Value: v.Output}},
Brief: v.Brief,
})
for _, bc := range c.GetAllBases() {
for _, bcf := range ClassMap[bc].Functions {
if bcf.Name == fmt.Sprintf("set%v", strings.Title(v.Name)) && bcf.Overload {
funcs = append(funcs,
&Function{
Name: fmt.Sprintf("set%v", strings.Title(v.Name)),
Fullname: fmt.Sprintf("%v::set%v", v.Class(), strings.Title(v.Name)),
Href: bcf.Href,
Status: bcf.Status,
Access: bcf.Access,
Filepath: bcf.Filepath,
Static: bcf.Static,
Output: "void",
Meta: PLAIN,
Parameters: bcf.Parameters,
Brief: bcf.Brief,
Overload: true,
OverloadNumber: bcf.OverloadNumber,
})
}
}
}
}
return funcs
}