(parser)
| 9678 | this.errors = errors; |
| 9679 | } |
| 9680 | static parse(parser) { |
| 9681 | var tok = parser.currentToken(); |
| 9682 | if (tok.type !== "TEMPLATE_LINE") return; |
| 9683 | parser.consumeToken(); |
| 9684 | var parts = []; |
| 9685 | var errors = []; |
| 9686 | var raw = tok.content; |
| 9687 | var i = 0; |
| 9688 | while (i < raw.length) { |
| 9689 | var nextDollar = raw.indexOf("${", i); |
| 9690 | if (nextDollar === -1) { |
| 9691 | if (i < raw.length) parts.push({ type: "literal", value: raw.slice(i) }); |
| 9692 | break; |
| 9693 | } |
| 9694 | if (nextDollar > i) { |
| 9695 | parts.push({ type: "literal", value: raw.slice(i, nextDollar) }); |
| 9696 | } |
| 9697 | var depth = 1; |
| 9698 | var j = nextDollar + 2; |
| 9699 | while (j < raw.length && depth > 0) { |
| 9700 | if (raw[j] === "{") depth++; |
| 9701 | else if (raw[j] === "}") depth--; |
| 9702 | j++; |
| 9703 | } |
| 9704 | if (depth > 0) { |
| 9705 | errors.push({ line: tok.line, message: "Unterminated ${} expression", expr: raw.slice(nextDollar) }); |
| 9706 | parts.push({ type: "literal", value: "" }); |
| 9707 | break; |
| 9708 | } |
| 9709 | var exprStr = raw.slice(nextDollar + 2, j - 1); |
| 9710 | var escape = true; |
| 9711 | try { |
| 9712 | var exprTokens = new Tokenizer().tokenize(exprStr); |
| 9713 | var exprParser = parser.createChildParser(exprTokens); |
| 9714 | if (exprParser.matchToken("unescaped")) escape = false; |
| 9715 | var valueNode = exprParser.requireElement("expression"); |
| 9716 | if (exprParser.matchToken("if")) { |
| 9717 | var conditionNode = exprParser.requireElement("expression"); |
| 9718 | var elseNode = exprParser.matchToken("else") ? exprParser.requireElement("expression") : null; |
| 9719 | parts.push({ type: "conditional", valueNode, conditionNode, elseNode, escape }); |
| 9720 | } else { |
| 9721 | parts.push({ type: "expr", node: valueNode, escape }); |
| 9722 | } |
| 9723 | } catch (e) { |
| 9724 | errors.push({ |
| 9725 | line: tok.line, |
| 9726 | column: tok.column + nextDollar, |
| 9727 | message: e.message || String(e), |
| 9728 | expr: exprStr |
| 9729 | }); |
| 9730 | parts.push({ type: "literal", value: "" }); |
| 9731 | } |
| 9732 | i = j; |
| 9733 | } |
| 9734 | return new _TemplateTextCommand(parts, errors); |
| 9735 | } |
| 9736 | resolve(ctx) { |
| 9737 | var parts = this.parts; |
nothing calls this directly
no test coverage detected