(cur *ListNode)
| 146 | } |
| 147 | |
| 148 | func (p *Parser) parseInsideAction(cur *ListNode) error { |
| 149 | prefixMap := map[string]func(*ListNode) error{ |
| 150 | rightDelim: p.parseRightDelim, |
| 151 | "[?(": p.parseFilter, |
| 152 | "..": p.parseRecursive, |
| 153 | } |
| 154 | for prefix, parseFunc := range prefixMap { |
| 155 | if strings.HasPrefix(p.input[p.pos:], prefix) { |
| 156 | return parseFunc(cur) |
| 157 | } |
| 158 | } |
| 159 | |
| 160 | switch r := p.next(); { |
| 161 | case r == eof || isEndOfLine(r): |
| 162 | return fmt.Errorf("unclosed action") |
| 163 | case r == ' ': |
| 164 | p.consumeText() |
| 165 | case r == '@' || r == '$': //the current object, just pass it |
| 166 | p.consumeText() |
| 167 | case r == '[': |
| 168 | return p.parseArray(cur) |
| 169 | case r == '"' || r == '\'': |
| 170 | return p.parseQuote(cur, r) |
| 171 | case r == '.': |
| 172 | return p.parseField(cur) |
| 173 | case r == '+' || r == '-' || unicode.IsDigit(r): |
| 174 | p.backup() |
| 175 | return p.parseNumber(cur) |
| 176 | case isAlphaNumeric(r): |
| 177 | p.backup() |
| 178 | return p.parseIdentifier(cur) |
| 179 | default: |
| 180 | return fmt.Errorf("unrecognized character in action: %#U", r) |
| 181 | } |
| 182 | return p.parseInsideAction(cur) |
| 183 | } |
| 184 | |
| 185 | // parseRightDelim scans the right delimiter, which is known to be present. |
| 186 | func (p *Parser) parseRightDelim(cur *ListNode) error { |
no test coverage detected