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

Method parse

www/js/_hyperscript.esm.js:10210–10265  ·  view source on GitHub ↗
(parser)

Source from the content-addressed store, hash-verified

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;

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