summaryrefslogtreecommitdiff
path: root/xgbgen/protocol.go
diff options
context:
space:
mode:
authorAndrew Gallant (Ocelot) <[email protected]>2012-05-06 02:21:31 -0400
committerAndrew Gallant (Ocelot) <[email protected]>2012-05-06 02:21:31 -0400
commit69ba151e407538b730dc31db3407cb61e7279160 (patch)
treee8a347d62aca985f21ace26ff0f7a143fae44a89 /xgbgen/protocol.go
parent65ab69dd1e32e52fb075072df7d520229d643e0b (diff)
added documentation and did some slight restructuring. it's party time.
Diffstat (limited to 'xgbgen/protocol.go')
-rw-r--r--xgbgen/protocol.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/xgbgen/protocol.go b/xgbgen/protocol.go
new file mode 100644
index 0000000..505b400
--- /dev/null
+++ b/xgbgen/protocol.go
@@ -0,0 +1,41 @@
+package main
+
+import (
+ "strings"
+)
+
+// Protocol is a type that encapsulates all information about one
+// particular XML file. It also contains links to other protocol types
+// if this protocol imports other other extensions. The import relationship
+// is recursive.
+type Protocol struct {
+ Name string
+ ExtXName string
+ ExtName string
+ MajorVersion string
+ MinorVersion string
+
+ Imports []*Protocol
+ Types []Type
+ Requests []*Request
+}
+
+// Initialize traverses all structures, looks for 'Translation' type,
+// and looks up the real type in the namespace. It also sets the source
+// name for all relevant fields/structures.
+// This is necessary because we don't traverse the XML in order initially.
+func (p *Protocol) Initialize() {
+ for _, typ := range p.Types {
+ typ.Initialize(p)
+ }
+ for _, req := range p.Requests {
+ req.Initialize(p)
+ }
+}
+
+// isExt returns true if this protocol is an extension.
+// i.e., it's name isn't "xproto".
+func (p *Protocol) isExt() bool {
+ return strings.ToLower(p.Name) == "xproto"
+}
+