()
| 86 | } |
| 87 | |
| 88 | func (t *Tree) parseFunc() (Node, error) { |
| 89 | switch t.scanner.peek() { |
| 90 | case '#': |
| 91 | return t.parseLenFunc() |
| 92 | } |
| 93 | |
| 94 | var name string |
| 95 | t.scanner.accept = acceptIdent |
| 96 | t.scanner.mode = scanIdent |
| 97 | |
| 98 | switch t.scanner.scan() { |
| 99 | case tokenIdent: |
| 100 | name = t.scanner.string() |
| 101 | default: |
| 102 | return nil, ErrParseVariableName |
| 103 | } |
| 104 | |
| 105 | switch t.scanner.peek() { |
| 106 | case ':': |
| 107 | return t.parseDefaultOrSubstr(name) |
| 108 | case '=': |
| 109 | return t.parseDefaultFunc(name) |
| 110 | case ',', '^': |
| 111 | return t.parseCasingFunc(name) |
| 112 | case '/': |
| 113 | return t.parseReplaceFunc(name) |
| 114 | case '#': |
| 115 | return t.parseRemoveFunc(name, acceptHashFunc) |
| 116 | case '%': |
| 117 | return t.parseRemoveFunc(name, acceptPercentFunc) |
| 118 | } |
| 119 | |
| 120 | t.scanner.accept = acceptIdent |
| 121 | t.scanner.mode = scanRbrack |
| 122 | switch t.scanner.scan() { |
| 123 | case tokenRbrack: |
| 124 | return newFuncNode(name), nil |
| 125 | default: |
| 126 | return nil, ErrMissingClosingBrace |
| 127 | } |
| 128 | } |
| 129 | |
| 130 | // parse a substitution function parameter. |
| 131 | func (t *Tree) parseParam(accept acceptFunc, mode byte) (Node, error) { |
no test coverage detected