TemplateStruct.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package service
  2. import (
  3. "fmt"
  4. "regexp"
  5. )
  6. func init() {
  7. var err error
  8. AllTagReg, err = regexp.Compile("^{{2} *((for|FOR) *\\w+ +(in|IN) +(\\.\\w+)+})|((if|IF) +(\\.\\w+)+)|(else)|(ELSE)|((elseif)|(ELSEIF) +(\\.\\w+)+)|(end)|(END)|((\\.\\w+)+) *}{2}$")
  9. if err != nil {
  10. panic(err)
  11. }
  12. ForReg, err = regexp.Compile("^{{2} *(for|FOR) *\\w+ +(in|IN) +(\\.\\w+)+ *}{2}$")
  13. if err != nil {
  14. panic(err)
  15. }
  16. IfReg, err = regexp.Compile("^{{2} *(if|IF) +(\\.\\w+)+ *}{2}$")
  17. if err != nil {
  18. panic(err)
  19. }
  20. IfElseReg, err = regexp.Compile("^{{2} *(elseif)|(ELSEIF) +(\\.\\w+)+ *}{2}$")
  21. if err != nil {
  22. panic(err)
  23. }
  24. ElseReg, err = regexp.Compile("^{{2} *(else|ELSE) *}{2}$")
  25. if err != nil {
  26. panic(err)
  27. }
  28. EndReg, err = regexp.Compile("^{{2} *(end|END) *}{2}$")
  29. if err != nil {
  30. panic(err)
  31. }
  32. ItemReg, err = regexp.Compile("^{{2} *(\\.\\w+)+ *}{2}$")
  33. if err != nil {
  34. panic(err)
  35. }
  36. }
  37. var AllTagReg *regexp.Regexp
  38. var ForReg *regexp.Regexp
  39. var IfReg *regexp.Regexp
  40. var IfElseReg *regexp.Regexp
  41. var ElseReg *regexp.Regexp
  42. var EndReg *regexp.Regexp
  43. var ItemReg *regexp.Regexp
  44. // CheckTag 校验字符串是否符合标签
  45. func CheckTag(str, tag string) bool {
  46. var res = false
  47. switch tag {
  48. case "FOR":
  49. res = ForReg.MatchString(str)
  50. break
  51. case "IF":
  52. res = IfReg.MatchString(str)
  53. break
  54. case "IFELSE":
  55. res = IfElseReg.MatchString(str)
  56. break
  57. case "ELSE":
  58. res = ElseReg.MatchString(str)
  59. break
  60. case "END":
  61. res = EndReg.MatchString(str)
  62. break
  63. case "ITEM":
  64. res = ItemReg.MatchString(str)
  65. break
  66. }
  67. return res
  68. }
  69. type Template struct {
  70. Tag []Tag //标签
  71. TagType string //标签类型 for if
  72. Content string //模板内容
  73. SubTemplate []Template //模板
  74. }
  75. func (t Template) String() string {
  76. return fmt.Sprintf("Tag:%s,TagType:%s,Content:%s,SubTemplate:%s", t.Tag, t.TagType, t.Content, t.SubTemplate)
  77. }
  78. type Tag struct {
  79. Template *Template
  80. Tag string
  81. StartIndex int
  82. EndIndex int
  83. TagType string
  84. }
  85. func (t Tag) String() string {
  86. return fmt.Sprintf("Tag:%s,StartIndex:%d,EndIndex:%d,TagType:%s\n", t.Tag, t.StartIndex, t.EndIndex, t.TagType)
  87. }