| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package service
- import (
- "fmt"
- "regexp"
- )
- func init() {
- var err error
- AllTagReg, err = regexp.Compile("^{{2} *((for|FOR) *\\w+ +(in|IN) +(\\.\\w+)+})|((if|IF) +(\\.\\w+)+)|(else)|(ELSE)|((elseif)|(ELSEIF) +(\\.\\w+)+)|(end)|(END)|((\\.\\w+)+) *}{2}$")
- if err != nil {
- panic(err)
- }
- ForReg, err = regexp.Compile("^{{2} *(for|FOR) *\\w+ +(in|IN) +(\\.\\w+)+ *}{2}$")
- if err != nil {
- panic(err)
- }
- IfReg, err = regexp.Compile("^{{2} *(if|IF) +(\\.\\w+)+ *}{2}$")
- if err != nil {
- panic(err)
- }
- IfElseReg, err = regexp.Compile("^{{2} *(elseif)|(ELSEIF) +(\\.\\w+)+ *}{2}$")
- if err != nil {
- panic(err)
- }
- ElseReg, err = regexp.Compile("^{{2} *(else|ELSE) *}{2}$")
- if err != nil {
- panic(err)
- }
- EndReg, err = regexp.Compile("^{{2} *(end|END) *}{2}$")
- if err != nil {
- panic(err)
- }
- ItemReg, err = regexp.Compile("^{{2} *(\\.\\w+)+ *}{2}$")
- if err != nil {
- panic(err)
- }
- }
- var AllTagReg *regexp.Regexp
- var ForReg *regexp.Regexp
- var IfReg *regexp.Regexp
- var IfElseReg *regexp.Regexp
- var ElseReg *regexp.Regexp
- var EndReg *regexp.Regexp
- var ItemReg *regexp.Regexp
- // CheckTag 校验字符串是否符合标签
- func CheckTag(str, tag string) bool {
- var res = false
- switch tag {
- case "FOR":
- res = ForReg.MatchString(str)
- break
- case "IF":
- res = IfReg.MatchString(str)
- break
- case "IFELSE":
- res = IfElseReg.MatchString(str)
- break
- case "ELSE":
- res = ElseReg.MatchString(str)
- break
- case "END":
- res = EndReg.MatchString(str)
- break
- case "ITEM":
- res = ItemReg.MatchString(str)
- break
- }
- return res
- }
- type Template struct {
- Tag []Tag //标签
- TagType string //标签类型 for if
- Content string //模板内容
- SubTemplate []Template //模板
- }
- func (t Template) String() string {
- return fmt.Sprintf("Tag:%s,TagType:%s,Content:%s,SubTemplate:%s", t.Tag, t.TagType, t.Content, t.SubTemplate)
- }
- type Tag struct {
- Template *Template
- Tag string
- StartIndex int
- EndIndex int
- TagType string
- }
- func (t Tag) String() string {
- return fmt.Sprintf("Tag:%s,StartIndex:%d,EndIndex:%d,TagType:%s\n", t.Tag, t.StartIndex, t.EndIndex, t.TagType)
- }
|