MCPcopy Create free account
hub / github.com/bigskysoftware/_hyperscript / parse

Method parse

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

Source from the content-addressed store, hash-verified

7932 this.args = { on: onExpr, time, evt, from, classRef, classRef2, classRefs, betweenValues };
7933 }
7934 static parse(parser) {
7935 if (!parser.matchToken("toggle")) return;
7936 parser.matchAnyToken("the", "my");
7937 var visibility = false;
7938 var hideShowStrategy = null;
7939 var onExpr = null;
7940 var classRef = null;
7941 var classRef2 = null;
7942 var classRefs = null;
7943 var attributeRef = null;
7944 var attributeRef2 = null;
7945 var betweenClass = false;
7946 var betweenAttr = false;
7947 var toggleExpr = null;
7948 var styleProp = null;
7949 if (parser.currentToken().type === "STYLE_REF") {
7950 let styleRef = parser.consumeToken();
7951 styleProp = styleRef.value.slice(1);
7952 visibility = true;
7953 hideShowStrategy = VisibilityCommand.resolveHideShowStrategy(parser, styleProp);
7954 if (parser.matchToken("of")) {
7955 var follows = parser.pushFollows("with", "between");
7956 try {
7957 onExpr = parser.requireElement("expression");
7958 } finally {
7959 parser.popFollows(follows);
7960 }
7961 } else {
7962 onExpr = parser.requireElement("implicitMeTarget");
7963 }
7964 } else if (parser.matchToken("between")) {
7965 classRef = parser.parseElement("classRef");
7966 if (classRef != null) {
7967 betweenClass = true;
7968 parser.requireToken("and");
7969 classRef2 = parser.requireElement("classRef");
7970 } else {
7971 betweenAttr = true;
7972 attributeRef = parser.parseElement("attributeRef");
7973 if (attributeRef == null) {
7974 parser.raiseError("Expected either a class reference or attribute expression");
7975 }
7976 parser.requireToken("and");
7977 attributeRef2 = parser.requireElement("attributeRef");
7978 }
7979 } else if (classRef = parser.parseElement("classRef")) {
7980 classRefs = [classRef];
7981 while (classRef = parser.parseElement("classRef")) {
7982 classRefs.push(classRef);
7983 }
7984 } else if (attributeRef = parser.parseElement("attributeRef")) {
7985 } else {
7986 parser.pushFollow("between");
7987 toggleExpr = parser.parseElement("assignableExpression");
7988 parser.popFollow();
7989 if (toggleExpr == null) {
7990 parser.raiseError("Expected a class reference, attribute, style property, or settable expression");
7991 }

Callers

nothing calls this directly

Calls 15

matchTokenMethod · 0.45
matchAnyTokenMethod · 0.45
currentTokenMethod · 0.45
consumeTokenMethod · 0.45
pushFollowsMethod · 0.45
requireElementMethod · 0.45
popFollowsMethod · 0.45
parseElementMethod · 0.45
requireTokenMethod · 0.45
raiseErrorMethod · 0.45
pushFollowMethod · 0.45

Tested by

no test coverage detected