()
| 156 | } |
| 157 | |
| 158 | func (p *parser) parse() (err error) { |
| 159 | defer p.recover(&err) |
| 160 | p.lex = lex(p.name, p.text) |
| 161 | p.config = &Config{} |
| 162 | for { |
| 163 | for { |
| 164 | var k, v string |
| 165 | k, v, err = p.parseVariable() |
| 166 | if err != nil { |
| 167 | p.errorf("%s", err) |
| 168 | } |
| 169 | if k == "" && v == "" { |
| 170 | break |
| 171 | } |
| 172 | err = p.config.addVariable(k, v) |
| 173 | if err != nil { |
| 174 | p.errorf("%s", err) |
| 175 | } |
| 176 | } |
| 177 | if p.peek().typ == itemEOF { |
| 178 | break |
| 179 | } |
| 180 | p.config.addBlock(*p.parseBlock()) |
| 181 | } |
| 182 | return err |
| 183 | } |
| 184 | |
| 185 | func (p *parser) parseVariable() (string, string, error) { |
| 186 | if p.peek().typ != itemVarName { |
no test coverage detected