()
| 211 | } |
| 212 | |
| 213 | func (p *parser) parseFor() error { |
| 214 | s := p.s |
| 215 | t, err := expectTagContents(s) |
| 216 | if err != nil { |
| 217 | return err |
| 218 | } |
| 219 | forStr := "for " + string(t.Value) |
| 220 | if err = validateForStmt(t.Value); err != nil { |
| 221 | return fmt.Errorf("invalid statement %q at %s: %s", forStr, s.Context(), err) |
| 222 | } |
| 223 | p.Printf("for %s {", t.Value) |
| 224 | p.prefix += "\t" |
| 225 | p.forDepth++ |
| 226 | for s.Next() { |
| 227 | t := s.Token() |
| 228 | switch t.ID { |
| 229 | case text: |
| 230 | p.emitText(t.Value) |
| 231 | case tagName: |
| 232 | ok, err := p.tryParseCommonTags(t.Value) |
| 233 | if err != nil { |
| 234 | return fmt.Errorf("error in %q: %s", forStr, err) |
| 235 | } |
| 236 | if ok { |
| 237 | continue |
| 238 | } |
| 239 | switch string(t.Value) { |
| 240 | case "endfor": |
| 241 | if err = skipTagContents(s); err != nil { |
| 242 | return err |
| 243 | } |
| 244 | p.forDepth-- |
| 245 | p.prefix = p.prefix[1:] |
| 246 | p.Printf("}") |
| 247 | return nil |
| 248 | default: |
| 249 | return fmt.Errorf("unexpected tag found in %q: %q at %s", forStr, t.Value, s.Context()) |
| 250 | } |
| 251 | default: |
| 252 | return fmt.Errorf("unexpected token found when parsing %q: %s at %s", forStr, t, s.Context()) |
| 253 | } |
| 254 | } |
| 255 | if err := s.LastError(); err != nil { |
| 256 | return fmt.Errorf("cannot parse %q: %s", forStr, err) |
| 257 | } |
| 258 | return fmt.Errorf("cannot find endfor tag for %q at %s", forStr, s.Context()) |
| 259 | } |
| 260 | |
| 261 | func (p *parser) parseDefault() error { |
| 262 | s := p.s |
no test coverage detected