-
Notifications
You must be signed in to change notification settings - Fork 25
/
register.go
37 lines (32 loc) · 959 Bytes
/
register.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package renderer
import (
"github.com/driusan/de/demodel"
)
// maps don't range in any particular order, so we store the renderers
// in an array and just range through them checking the name. That way,
// we can either get them in order of registration or by name and don't
// need to maintain two structures.
type namedRenderer struct {
name string
renderer demodel.Renderer
}
var renderers []namedRenderer
func RegisterRenderer(name string, r demodel.Renderer) {
renderers = append(renderers, namedRenderer{name, r})
}
func GetRenderer(buff *demodel.CharBuffer) demodel.Renderer {
for i := len(renderers) - 1; i >= 0; i-- {
if renderers[i].renderer.CanRender(buff) {
return renderers[i].renderer
}
}
return renderers[0].renderer
}
func GetNamedRenderer(name string) demodel.Renderer {
for i := len(renderers) - 1; i >= 0; i-- {
if renderers[i].name == name {
return renderers[i].renderer
}
}
return renderers[0].renderer
}