tokenVocab=JinjaLexer;
}
+start : expressions;
+
expression
- : block_statement
- | inline_statement
+ : inline_statement
;
expressions : expression*;
+statement_include_template_list
+ : STRING_LITERAL
+ ;
+
+statement_include_context
+ : STATEMENT_INCLUDE_WITH_CONTEXT
+ | STATEMENT_INCLUDE_WITHOUT_CONTEXT
+ ;
+
+statement_include
+ : STATEMENT_ID_INCLUDE (SP statement_include_template_list)?
+ ;
+
block_statement_id
: STATEMENT_ID_BLOCK
| STATEMENT_ID_SET
| block_statement_with_parameters
;
-inline_statement_id
- : STATEMENT_ID_IMPORT
- | STATEMENT_ID_INCLUDE
- | STATEMENT_ID_SET
+inline_statement_content
+ : statement_include
;
-inline_statement : STATEMENT_OPEN inline_statement_id STATEMENT_CLOSE;
+inline_statement : STATEMENT_OPEN inline_statement_content STATEMENT_CLOSE;
-block_statement_start : STATEMENT_OPEN block_statement_id STATEMENT_CLOSE;
+block_statement_start : STATEMENT_OPEN block_statement_start_content STATEMENT_CLOSE;
block_statement_end : STATEMENT_OPEN END_STATEMENT_ID_PREFIX block_statement_id STATEMENT_CLOSE;
block_statement : block_statement_start expressions block_statement_end;
\ No newline at end of file
ELLIPSIS : '...';
EXCLAMATION : '!';
-STATEMENT_OPEN : '{%';
-STATEMENT_CLOSE : '%}';
+STATEMENT_OPEN : '{%' SP?;
+STATEMENT_CLOSE : SP? '%}';
EXPRESSION_OPEN : '{{';
EXPRESSION_CLOSE : '}}';
COMMENT_OPEN : '{#';
COMMENT_CLOSE : '#}';
-SP : [ \t\f]+;
+STRING_LITERAL : STRING_LITERAL_SINGLE_QUOTE | STRING_LITERAL_DOUBLE_QUOTE;
+fragment STRING_LITERAL_SINGLE_QUOTE : '\'' (~[\\\r\n"])* '\'';
+fragment STRING_LITERAL_DOUBLE_QUOTE : '"' (~[\\\r\n"])* '"';
-IDENTIFIER : [a-zA-Z_][a-zA-Z0-9_]*;
+SP : [ \t\f]+;
// Statement identifiers for built-in statements
STATEMENT_ID_RAW : 'raw';
STATEMENT_ID_SET : 'set';
+STATEMENT_INCLUDE_IGNORE_MISSING : 'ignore missing';
+STATEMENT_INCLUDE_WITH_CONTEXT : 'with context';
+STATEMENT_INCLUDE_WITHOUT_CONTEXT : 'without context';
+
END_STATEMENT_ID_PREFIX : 'end';
\ No newline at end of file