2012-05-06 08:21:31 +02:00
|
|
|
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 {
|
2012-05-06 23:48:40 +02:00
|
|
|
return strings.ToLower(p.Name) != "xproto"
|
2012-05-06 08:21:31 +02:00
|
|
|
}
|