funcmap.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package funcmap
  2. import (
  3. "fmt"
  4. "strings"
  5. "text/template"
  6. "github.com/gobwas/glob"
  7. "gogs.carducci-dante.gov.it/karmen/core/orm"
  8. )
  9. var FuncMap template.FuncMap = template.FuncMap{
  10. "comma": comma,
  11. "groupClasses": groupClasses,
  12. "abbrev": abbrev,
  13. "nbsp": nbsp,
  14. "globFilter": globFilter,
  15. "toUpper": toUpper,
  16. }
  17. func toUpper(content string) string {
  18. return strings.ToUpper(content)
  19. }
  20. func globFilter(pattern, content string) bool {
  21. g := glob.MustCompile(pattern)
  22. return g.Match(content)
  23. }
  24. func comma(classes []*orm.Class) string {
  25. var names []string
  26. for _, c := range classes {
  27. names = append(names, c.Name)
  28. }
  29. return strings.Join(names, ",")
  30. }
  31. func abbrev(name string) string {
  32. var result string
  33. splits := strings.Split(name, " ")
  34. if len(splits) > 1 {
  35. for i := len(splits) - 1; i >= 0; i-- {
  36. if i == len(splits)-1 {
  37. result += splits[i] + " "
  38. continue
  39. }
  40. result += strings.ToUpper(string(splits[i][0]) + ".")
  41. }
  42. } else {
  43. result += strings.ToUpper(string(name[0]) + ".")
  44. }
  45. return result
  46. }
  47. func nbsp(num int, text string) string {
  48. return text + strings.Repeat(" ", num)
  49. }
  50. func groupClasses(classes []*orm.Class) string {
  51. var groups []string
  52. groupByAddresses := make(map[string][]string)
  53. addressesAbbrev := map[string]string{
  54. "Linguistico": "LIN",
  55. "Classico": "CLA",
  56. "Musicale": "M",
  57. "Economico sociale": "ES",
  58. "Scienze umane": "SU",
  59. }
  60. for _, c := range classes {
  61. groupByAddresses[c.Field] = append(groupByAddresses[c.Field], fmt.Sprintf("%d%s", c.Year, c.Section))
  62. }
  63. for address, classes := range groupByAddresses {
  64. var group string
  65. if len(classes) > 1 {
  66. group = fmt.Sprintf("[%s]%s", strings.Join(classes, ","), addressesAbbrev[address])
  67. } else {
  68. group = fmt.Sprintf("%s %s", strings.Join(classes, ","), addressesAbbrev[address])
  69. }
  70. groups = append(groups, group)
  71. }
  72. return strings.Join(groups, ",")
  73. }