| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | 
							- func isValid(code string) bool {
 
- 	st := make([]string, 0)
 
- 	for i := 0; i < len(code); i++ {
 
- 		if 0 < i && len(st) == 0 { // Unmatched content
 
- 			return false
 
- 		}
 
- 		if strings.HasPrefix(code[i:], "<![CDATA[") { // Parse cdata
 
- 			j := strings.Index(code[i+9:], "]]>")
 
- 			if j < 0 {
 
- 				return false
 
- 			}
 
- 			i += j + 11
 
- 		} else if strings.HasPrefix(code[i:], "</") { // Parse end
 
- 			i += 2
 
- 			j := strings.Index(code[i:], ">")
 
- 			if j < 0 {
 
- 				return false
 
- 			}
 
- 			name := code[i : i+j]
 
- 			if l := len(st); l == 0 || st[l-1] != name {
 
- 				return false
 
- 			} else {
 
- 				st = st[:l-1]
 
- 			}
 
- 			i += j
 
- 		} else if code[i] == '<' { // Parse begin
 
- 			i += 1
 
- 			j := strings.Index(code[i:], ">")
 
- 			if j < 1 || 9 < j {
 
- 				return false
 
- 			}
 
- 			name := code[i : i+j]
 
- 			for _, r := range name {
 
- 				if r < 'A' || 'Z' < r {
 
- 					return false
 
- 				}
 
- 			}
 
- 			st = append(st, name)
 
- 			i += j
 
- 		}
 
- 	}
 
- 	return len(st) == 0
 
- }
 
 
  |