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

Method parse

www/js/_hyperscript-max.js:7935–8028  ·  view source on GitHub ↗
(parser)

Source from the content-addressed store, hash-verified

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

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