MCPcopy Index your code
hub / github.com/bigskysoftware/_hyperscript / parse

Method parse

tools/common/_hyperscript.iife.js:9680–9735  ·  view source on GitHub ↗
(parser)

Source from the content-addressed store, hash-verified

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;

Callers

nothing calls this directly

Calls 6

currentTokenMethod · 0.45
consumeTokenMethod · 0.45
tokenizeMethod · 0.45
createChildParserMethod · 0.45
matchTokenMethod · 0.45
requireElementMethod · 0.45

Tested by

no test coverage detected