package template import ( "git.wtrh.nl/patterns/gopatterns/pkg/dimensions" "git.wtrh.nl/patterns/gopatterns/pkg/path" "git.wtrh.nl/patterns/gopatterns/pkg/pattern/panel" "git.wtrh.nl/patterns/gopatterns/pkg/point" "git.wtrh.nl/patterns/gopatterns/pkg/util" "unicode" ) type Template struct { Name string `yaml:"name"` Points Points `yaml:"points"` Lines Lines `yaml:"lines"` Panels Panels `yaml:"panels"` Version string `yaml:"version"` } type Request struct { Owner string Dims dimensions.Dimensions Panel string } type request struct { dimensions dimensions.Dimensions panel string owner string lines map[util.ID]path.Path points map[util.ID]point.Point } func (t Template) GetPanel(req Request) (panel.Panel, error) { p, ok := t.Panels[req.Panel] if !ok { return panel.Panel{}, ErrPanelNotFound } r := request{ dimensions: req.Dims, panel: req.Panel, lines: make(map[util.ID]path.Path), points: make(map[util.ID]point.Point), owner: req.Owner, } result := panel.Panel{ Name: req.Panel, Lines: make(map[util.ID]path.Path), Points: make(map[util.ID]point.Point), Dimensions: req.Dims, } for id := range p.Lines { line, err := t.getOrCreateLine(id, r, 0) if err != nil { return panel.Panel{}, err } result.Lines[id] = line } for id := range p.Points { newPoint, err := t.getOrCreatePoint(id, r, 0) if err != nil { return panel.Panel{}, err } result.Points[id] = newPoint } for id := range t.Points { newPoint, err := t.getOrCreatePoint(id, r, 0) if err != nil { return panel.Panel{}, err } result.Points[id] = newPoint } text, err := t.createInformation(r) if err != nil { return panel.Panel{}, err } result.Texts = append(result.Texts, text) return result, nil } func startCase(text string) string { output := make([]rune, len(text)) for i, val := range text { switch { case i == 0: output[i] = unicode.ToUpper(val) case val == '_': output[i] = ' ' case output[i-1] == ' ': output[i] = unicode.ToUpper(val) default: output[i] = val } } return string(output) }