]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Baisc support for blocks
authorKevin <github@kevin-brown.com>
Wed, 22 May 2024 16:27:59 +0000 (12:27 -0400)
committerKevin <github@kevin-brown.com>
Wed, 22 May 2024 16:27:59 +0000 (12:27 -0400)
grammar/jinja.ohm

index c5f49ffbc2dfce8dff20234be3a23271016cf854..0f4f10d97e504fbad7fcd6c4083ce290dd652462 100644 (file)
@@ -7,7 +7,27 @@ Jinja {
     
     expression
     = inlineStatement
+    | blockStatement
+
+       blockStatement
+    = blockStatement_open expressions blockStatement_close
+    
+    blockStatement_open
+    = statementOpen sp? blockStatementOpenContent sp? statementClose
+    
+    blockStatementOpenContent
+    = statement_block
     
+    blockStatement_close
+    = statementOpen sp? blockStatementCloseContent sp? statementClose
+
+       blockStatementCloseContent
+    = statementEnd_block
+    | blockStatementCloseContent_generic
+
+       blockStatementCloseContent_generic
+    = blockStatementId_end blockStatementId_list
+
     inlineStatement
     = statementOpen sp? inlineStatementContent sp? statementClose
     
@@ -17,6 +37,12 @@ Jinja {
     | statement_import
     | statement_include
     
+    statement_block
+    = statementId_block sp identifier (sp contextModifier_scoped)? (sp contextModifier_required)?
+    
+    statementEnd_block
+    = blockStatementId_end statementId_block (sp identifier)?
+    
     statement_extends
     = statementId_extends sp statementExtends_file
     
@@ -51,13 +77,22 @@ Jinja {
     statementOpen = "{%"
     statementClose = "%}"
     
-    statementId_extends = "extends"
+       statementId_block = "block"
+       statementId_extends = "extends"
     statementId_from = "from"
     statementId_import = "import"
     statementId_include = "include"
     
+    blockStatementId_list
+    = statementId_block
+    
+    blockStatementId_end = "end"
+    
     statementModifier_as = "as"
     
+    contextModifier_scoped = "scoped"
+    contextModifier_required = "required"
+    
     importOptions_ignoreMissing = "ignore missing"
     importOptions_contextManagement = importOptions_withContext | importOptions_withoutContext
     importOptions_withContext = "with context"