// FarmControl EJS outer grammar for fcTemplateLang. // Regenerate the parser with: // pnpm exec lezer-generator src/codemirror/fcTemplateLang/ejs.grammar --output src/codemirror/fcTemplateLang/ejs.parser.js // // Outer language = EJS scriptlets; Text regions are overlaid with XML and // JavascriptExpression nodes are mounted with the JS parser (parseMixed). @top Template { content* } content { Scriptlet | Output | Comment | Text } Scriptlet { OpeningTag JavascriptExpression ClosingTag } Output { OutputTag JavascriptExpression ClosingTag } @skip {} { Comment { CommentTag (CommentContent | commentNewLine)* commentEnd } } @local tokens { commentEnd { ClosingTag } commentNewLine { "\n" } @else CommentContent } @tokens { // Prefer longer tags via @precedence below OpeningTag[closedBy=ClosingTag] { "<%" } OutputTag[closedBy=ClosingTag] { "<%=" | "<%-" | "<%_" } CommentTag[closedBy=ClosingTag] { "<%#" } ClosingTag[openedBy="OpeningTag OutputTag CommentTag"] { ("-" | "_")? "%>" } @precedence { OutputTag, CommentTag, OpeningTag } } @external tokens javascriptExpressionOrText from "./tokens.js" { JavascriptExpression, Text } @detectDelim