Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

110 строки
2.1KB

  1. package template
  2. import (
  3. "git.wtrh.nl/patterns/gopatterns/pkg/dimensions"
  4. "git.wtrh.nl/patterns/gopatterns/pkg/path"
  5. "git.wtrh.nl/patterns/gopatterns/pkg/pattern/panel"
  6. "git.wtrh.nl/patterns/gopatterns/pkg/point"
  7. "git.wtrh.nl/patterns/gopatterns/pkg/util"
  8. "unicode"
  9. )
  10. type Template struct {
  11. Name string `yaml:"name"`
  12. Points Points `yaml:"points"`
  13. Lines Lines `yaml:"lines"`
  14. Panels Panels `yaml:"panels"`
  15. Version string `yaml:"version"`
  16. }
  17. type Request struct {
  18. Owner string
  19. Dims dimensions.Dimensions
  20. Panel string
  21. }
  22. type request struct {
  23. dimensions dimensions.Dimensions
  24. panel string
  25. owner string
  26. lines map[util.ID]path.Path
  27. points map[util.ID]point.Point
  28. }
  29. func (t Template) GetPanel(req Request) (panel.Panel, error) {
  30. p, ok := t.Panels[req.Panel]
  31. if !ok {
  32. return panel.Panel{}, ErrPanelNotFound
  33. }
  34. r := request{
  35. dimensions: req.Dims,
  36. panel: req.Panel,
  37. lines: make(map[util.ID]path.Path),
  38. points: make(map[util.ID]point.Point),
  39. owner: req.Owner,
  40. }
  41. result := panel.Panel{
  42. Name: req.Panel,
  43. Lines: make(map[util.ID]path.Path),
  44. Points: make(map[util.ID]point.Point),
  45. Dimensions: req.Dims,
  46. }
  47. for id := range p.Lines {
  48. line, err := t.getOrCreateLine(id, r, 0)
  49. if err != nil {
  50. return panel.Panel{}, err
  51. }
  52. result.Lines[id] = line
  53. }
  54. for id := range p.Points {
  55. newPoint, err := t.getOrCreatePoint(id, r, 0)
  56. if err != nil {
  57. return panel.Panel{}, err
  58. }
  59. result.Points[id] = newPoint
  60. }
  61. for id := range t.Points {
  62. newPoint, err := t.getOrCreatePoint(id, r, 0)
  63. if err != nil {
  64. return panel.Panel{}, err
  65. }
  66. result.Points[id] = newPoint
  67. }
  68. text, err := t.createInformation(r)
  69. if err != nil {
  70. return panel.Panel{}, err
  71. }
  72. result.Texts = append(result.Texts, text)
  73. return result, nil
  74. }
  75. func startCase(text string) string {
  76. output := make([]rune, len(text))
  77. for i, val := range text {
  78. switch {
  79. case i == 0:
  80. output[i] = unicode.ToUpper(val)
  81. case val == '_':
  82. output[i] = ' '
  83. case output[i-1] == ' ':
  84. output[i] = unicode.ToUpper(val)
  85. default:
  86. output[i] = val
  87. }
  88. }
  89. return string(output)
  90. }