37 lines
726 B
Go
37 lines
726 B
Go
package parse
|
|
|
|
type registry struct {
|
|
definitions map[string]definition
|
|
parsers map[string]parser
|
|
}
|
|
|
|
func newRegistry() *registry {
|
|
return ®istry{
|
|
definitions: make(map[string]definition),
|
|
parsers: make(map[string]parser),
|
|
}
|
|
}
|
|
|
|
func (r *registry) definition(name string) (definition, bool) {
|
|
d, ok := r.definitions[name]
|
|
return d, ok
|
|
}
|
|
|
|
func (r *registry) parser(name string) (parser, bool) {
|
|
p, ok := r.parsers[name]
|
|
return p, ok
|
|
}
|
|
|
|
func (r *registry) setDefinition(d definition) error {
|
|
if _, ok := r.definitions[d.nodeName()]; ok {
|
|
return duplicateDefinition(d.nodeName())
|
|
}
|
|
|
|
r.definitions[d.nodeName()] = d
|
|
return nil
|
|
}
|
|
|
|
func (r *registry) setParser(p parser) {
|
|
r.parsers[p.nodeName()] = p
|
|
}
|