(parser)
| 10208 | this.errors = errors; |
| 10209 | } |
| 10210 | static parse(parser) { |
| 10211 | var tok = parser.currentToken(); |
| 10212 | if (tok.type !== "TEMPLATE_LINE") return; |
| 10213 | parser.consumeToken(); |
| 10214 | var parts = []; |
| 10215 | var errors = []; |
| 10216 | var raw = tok.content; |
| 10217 | var i = 0; |
| 10218 | while (i < raw.length) { |
| 10219 | var nextDollar = raw.indexOf("${", i); |
| 10220 | if (nextDollar === -1) { |
| 10221 | if (i < raw.length) parts.push({ type: "literal", value: raw.slice(i) }); |
| 10222 | break; |
| 10223 | } |
| 10224 | if (nextDollar > i) { |
| 10225 | parts.push({ type: "literal", value: raw.slice(i, nextDollar) }); |
| 10226 | } |
| 10227 | var depth = 1; |
| 10228 | var j = nextDollar + 2; |
| 10229 | while (j < raw.length && depth > 0) { |
| 10230 | if (raw[j] === "{") depth++; |
| 10231 | else if (raw[j] === "}") depth--; |
| 10232 | j++; |
| 10233 | } |
| 10234 | if (depth > 0) { |
| 10235 | errors.push({ line: tok.line, message: "Unterminated ${} expression", expr: raw.slice(nextDollar) }); |
| 10236 | parts.push({ type: "literal", value: "" }); |
| 10237 | break; |
| 10238 | } |
| 10239 | var exprStr = raw.slice(nextDollar + 2, j - 1); |
| 10240 | var escape = true; |
| 10241 | try { |
| 10242 | var exprTokens = new Tokenizer().tokenize(exprStr); |
| 10243 | var exprParser = parser.createChildParser(exprTokens); |
| 10244 | if (exprParser.matchToken("unescaped")) escape = false; |
| 10245 | var valueNode = exprParser.requireElement("expression"); |
| 10246 | if (exprParser.matchToken("if")) { |
| 10247 | var conditionNode = exprParser.requireElement("expression"); |
| 10248 | var elseNode = exprParser.matchToken("else") ? exprParser.requireElement("expression") : null; |
| 10249 | parts.push({ type: "conditional", valueNode, conditionNode, elseNode, escape }); |
| 10250 | } else { |
| 10251 | parts.push({ type: "expr", node: valueNode, escape }); |
| 10252 | } |
| 10253 | } catch (e) { |
| 10254 | errors.push({ |
| 10255 | line: tok.line, |
| 10256 | column: tok.column + nextDollar, |
| 10257 | message: e.message || String(e), |
| 10258 | expr: exprStr |
| 10259 | }); |
| 10260 | parts.push({ type: "literal", value: "" }); |
| 10261 | } |
| 10262 | i = j; |
| 10263 | } |
| 10264 | return new _TemplateTextCommand(parts, errors); |
| 10265 | } |
| 10266 | resolve(ctx) { |
| 10267 | var parts = this.parts; |
nothing calls this directly
no test coverage detected