2015-10-24 18:18:24 +03:00
|
|
|
package parser
|
|
|
|
|
2017-01-27 22:22:58 +03:00
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/therecipe/qt/internal/utils"
|
|
|
|
)
|
|
|
|
|
2015-10-24 18:18:24 +03:00
|
|
|
type Module struct {
|
|
|
|
Namespace *Namespace `xml:"namespace"`
|
|
|
|
Project string `xml:"project,attr"`
|
2017-03-23 02:45:45 +03:00
|
|
|
Pkg string
|
2015-10-24 18:18:24 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
type Namespace struct {
|
|
|
|
Classes []*Class `xml:"class"`
|
2017-02-17 20:55:39 +03:00
|
|
|
//Functions []*Function `xml:"function"` //TODO: uncomment
|
|
|
|
//Enums []*Enum `xml:"enum"` //TODO: uncomment
|
|
|
|
SubNamespaces []*SubNamespace `xml:"namespace"`
|
2015-10-24 18:18:24 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
type SubNamespace struct {
|
2016-12-11 23:03:06 +03:00
|
|
|
//Classes []*Class `xml:"class"` //TODO: uncomment
|
2017-02-17 20:55:39 +03:00
|
|
|
Functions []*Function `xml:"function"`
|
|
|
|
Enums []*Enum `xml:"enum"`
|
|
|
|
Status string `xml:"status,attr"`
|
|
|
|
Access string `xml:"access,attr"`
|
2015-10-24 18:18:24 +03:00
|
|
|
}
|
|
|
|
|
2016-12-11 23:03:06 +03:00
|
|
|
func (m *Module) Prepare() error {
|
2017-01-27 22:22:58 +03:00
|
|
|
utils.Log.WithField("0_module", strings.TrimPrefix(m.Project, "Qt")).Debug("prepare")
|
2015-10-24 18:18:24 +03:00
|
|
|
|
2016-12-11 23:03:06 +03:00
|
|
|
//register classes from namespace
|
|
|
|
for _, c := range m.Namespace.Classes {
|
2017-03-23 02:45:45 +03:00
|
|
|
c.register(m)
|
2015-10-24 18:18:24 +03:00
|
|
|
}
|
|
|
|
|
2017-02-17 20:55:39 +03:00
|
|
|
//register enums and functions from subnamespaces
|
|
|
|
for _, sns := range m.Namespace.SubNamespaces {
|
|
|
|
for _, e := range sns.Enums {
|
|
|
|
if !(e.Status == "active") || !(e.Access == "public" || e.Access == "protected") ||
|
|
|
|
strings.Contains(e.Fullname, "Private") || strings.Contains(e.Fullname, "Util") ||
|
|
|
|
strings.Contains(e.Fullname, "nternal") || strings.ToLower(e.Name) == e.Name {
|
|
|
|
continue
|
|
|
|
}
|
2016-12-11 23:03:06 +03:00
|
|
|
e.register(m.Project)
|
2015-10-24 18:18:24 +03:00
|
|
|
}
|
2017-02-17 20:55:39 +03:00
|
|
|
if m.Project != "QtSensors" && m.Project != "QtXmlPatterns" &&
|
|
|
|
m.Project != "QtQml" && m.Project != "QtWidgets" && m.Project != "QtMacExtras" &&
|
2017-02-19 23:11:49 +03:00
|
|
|
m.Project != "QtTestLib" && m.Project != "QtScript" && m.Project != "QtQuick" {
|
2017-02-17 20:55:39 +03:00
|
|
|
for _, f := range sns.Functions {
|
|
|
|
|
|
|
|
if !(f.Status == "active") || !(f.Access == "public" || f.Access == "protected") ||
|
|
|
|
strings.Contains(f.Fullname, "Private") || strings.Contains(f.Fullname, "Util") ||
|
|
|
|
strings.Contains(f.Fullname, "nternal") || f.Name == "qDefaultSurfaceFormat" ||
|
|
|
|
f.ClassName() == "QUnicodeTables" ||
|
|
|
|
f.ClassName() == "QUtf8Functions" ||
|
|
|
|
f.ClassName() == "QUnicodeTools" ||
|
|
|
|
f.ClassName() == "HPack" ||
|
|
|
|
f.ClassName() == "QHighDpi" ||
|
|
|
|
f.ClassName() == "QPdf" ||
|
|
|
|
f.ClassName() == "QPlatformGraphicsBufferHelper" ||
|
|
|
|
strings.ToLower(f.ClassName()) == f.ClassName() {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
2017-02-19 23:11:49 +03:00
|
|
|
if m.Project == "QtWebEngine" && f.Name != "initialize" {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
2017-02-17 20:55:39 +03:00
|
|
|
f.Static = true
|
|
|
|
f.register(m.Project)
|
|
|
|
}
|
|
|
|
}
|
2015-10-24 18:18:24 +03:00
|
|
|
}
|
|
|
|
|
2016-12-11 23:03:06 +03:00
|
|
|
//mutate classmap
|
|
|
|
m.remove()
|
2016-04-16 19:48:26 +03:00
|
|
|
|
2016-12-11 23:03:06 +03:00
|
|
|
//mutate classes
|
2017-01-07 02:55:15 +03:00
|
|
|
for _, c := range SortedClassesForModule(m.Project, false) {
|
2016-12-11 23:03:06 +03:00
|
|
|
c.add()
|
|
|
|
c.fix()
|
|
|
|
c.remove()
|
2015-10-24 18:18:24 +03:00
|
|
|
}
|
2016-06-19 05:24:38 +03:00
|
|
|
|
2017-02-15 19:48:35 +03:00
|
|
|
//register derivations
|
|
|
|
for _, c := range m.Namespace.Classes {
|
|
|
|
c.derivation()
|
|
|
|
}
|
|
|
|
|
2016-12-11 23:03:06 +03:00
|
|
|
return nil
|
2016-06-19 05:24:38 +03:00
|
|
|
}
|