// Very crude grammar for a subset of Twig templating syntax @top Template { (directive | Text)* } directive { Insert | Conditional { ConditionalOpen (directive | Text)* ConditionalClose } } @skip {space} { Insert { "{{" DirectiveContent "}}" } ConditionalOpen { "{%" kw<"if"> DirectiveContent "%}" } ConditionalClose { "{%" kw<"endif"> "%}" } } kw { @specialize[@name={word}] } @tokens { Identifier { @asciiLetter+ } Text { ![{] Text? | "{" (@eof | ![%{] Text?) } space { @whitespace+ } DirectiveContent { ![%}] DirectiveContent? | $[%}] (@eof | ![}] DirectiveContent?) } @precedence { space DirectiveContent } "{{" "}}" "{%" "%}" } @external propSource twigHighlight from "./twig-highlight.js"