aboutsummaryrefslogtreecommitdiff
path: root/nexgb/xgbgen/protocol.go
diff options
context:
space:
mode:
Diffstat (limited to 'nexgb/xgbgen/protocol.go')
-rw-r--r--nexgb/xgbgen/protocol.go24
1 files changed, 24 insertions, 0 deletions
diff --git a/nexgb/xgbgen/protocol.go b/nexgb/xgbgen/protocol.go
index 83dde14..d56663d 100644
--- a/nexgb/xgbgen/protocol.go
+++ b/nexgb/xgbgen/protocol.go
@@ -1,6 +1,7 @@
package main
import (
+ "log"
"strings"
)
@@ -9,6 +10,7 @@ import (
// if this protocol imports other other extensions. The import relationship
// is recursive.
type Protocol struct {
+ Parent *Protocol
Name string
ExtXName string
ExtName string
@@ -33,6 +35,28 @@ func (p *Protocol) Initialize() {
}
}
+// PkgName returns the name of this package.
+// i.e., 'xproto' for the core X protocol, 'randr' for the RandR extension, etc.
+func (p *Protocol) PkgName() string {
+ return strings.Replace(p.Name, "_", "", -1)
+}
+
+// ProtocolGet searches the current context for the protocol with the given
+// name. (i.e., the current protocol and its imports.)
+// It is an error if one is not found.
+func (p *Protocol) ProtocolFind(name string) *Protocol {
+ if p.Name == name {
+ return p // that was easy
+ }
+ for _, imp := range p.Imports {
+ if imp.Name == name {
+ return imp
+ }
+ }
+ log.Panicf("Could not find protocol with name '%s'.", name)
+ panic("unreachable")
+}
+
// isExt returns true if this protocol is an extension.
// i.e., it's name isn't "xproto".
func (p *Protocol) isExt() bool {