Compare commits
9 Commits
main
...
ohm-gramma
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bea927e9b6 | ||
|
|
fa3618f817 | ||
|
|
74a488e35e | ||
|
|
a7374b4dad | ||
|
|
86202c7d4a | ||
|
|
f634f20e11 | ||
|
|
e8fd8ee882 | ||
|
|
c8225418fa | ||
|
|
72ab9b5015 |
180
grammar/jinja.ohm
Normal file
180
grammar/jinja.ohm
Normal file
@ -0,0 +1,180 @@
|
||||
Jinja {
|
||||
Template
|
||||
= expressions
|
||||
|
||||
expressions
|
||||
= expression*
|
||||
|
||||
expression
|
||||
= content
|
||||
| inlineStatement
|
||||
| blockStatement
|
||||
|
||||
blockStatement
|
||||
= blockStatement_open expressions blockStatement_close
|
||||
|
||||
blockStatement_open
|
||||
= statementOpen sp? blockStatementOpenContent sp? statementClose
|
||||
|
||||
blockStatementOpenContent
|
||||
= statement_block
|
||||
| statement_filter
|
||||
| statement_setBlock
|
||||
|
||||
blockStatement_close
|
||||
= statementOpen sp? blockStatementCloseContent sp? statementClose
|
||||
|
||||
blockStatementCloseContent
|
||||
= statementEnd_block
|
||||
| blockStatementCloseContent_generic
|
||||
|
||||
blockStatementCloseContent_generic
|
||||
= blockStatementId_end blockStatementId_list
|
||||
|
||||
inlineStatement
|
||||
= statementOpen sp? inlineStatementContent sp? statementClose
|
||||
|
||||
inlineStatementContent
|
||||
= statement_extends
|
||||
| statement_from
|
||||
| statement_import
|
||||
| statement_include
|
||||
| statement_setInline
|
||||
|
||||
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
|
||||
|
||||
statementExtends_file
|
||||
= stringLiteral
|
||||
| variableName
|
||||
|
||||
statement_filter
|
||||
= statementId_filter sp filterExpression
|
||||
|
||||
statement_from
|
||||
= statementId_from sp statementImport_file sp statementId_import sp statementFrom_variables (sp importOptions_contextManagement)?
|
||||
|
||||
statementFrom_variables
|
||||
= (statementFrom_variable sp? comma sp?)* statementFrom_variable
|
||||
statementFrom_variable = variableName (sp statementModifier_as sp variableName)?
|
||||
|
||||
statement_import
|
||||
= statementId_import sp statementImport_file sp statementModifier_as sp variableName
|
||||
|
||||
statementImport_file
|
||||
= stringLiteral
|
||||
| variableName
|
||||
|
||||
statement_include
|
||||
= statementId_include sp statementInclude_file (sp importOptions_ignoreMissing)? (sp importOptions_contextManagement)?
|
||||
|
||||
statementInclude_file
|
||||
= stringLiteral
|
||||
| listLiteral
|
||||
| variableName
|
||||
|
||||
statement_setInline
|
||||
= statementId_set sp variableName sp? equals sp? statementSet_value
|
||||
|
||||
statementSet_value
|
||||
= stringLiteral
|
||||
| variableName
|
||||
| listLiteral
|
||||
| explicitTupleLiteral
|
||||
|
||||
statement_setBlock
|
||||
= statementId_set sp variableName (sp verticalBar sp filterExpression)*
|
||||
|
||||
content
|
||||
= (~statementOpen any)+
|
||||
|
||||
variableName = identifier
|
||||
|
||||
filterExpression
|
||||
= filter_center
|
||||
| filter_upper
|
||||
| filter_wordWrap
|
||||
|
||||
filter_center = filterId_center (parenthesis_left sp? filterCenter_parameters? sp? parenthesis_right)?
|
||||
|
||||
filterCenter_parameters = digit+
|
||||
|
||||
filter_upper = filterId_upper
|
||||
filter_wordWrap = filterId_wordWrap
|
||||
|
||||
filterId_center = "center"
|
||||
filterId_upper = "upper"
|
||||
filterId_wordWrap = "wordwrap"
|
||||
|
||||
statementOpen = "{%"
|
||||
statementClose = "%}"
|
||||
|
||||
statementId_block = "block"
|
||||
statementId_extends = "extends"
|
||||
statementId_filter = "filter"
|
||||
statementId_from = "from"
|
||||
statementId_import = "import"
|
||||
statementId_include = "include"
|
||||
statementId_set = "set"
|
||||
|
||||
blockStatementId_list
|
||||
= statementId_block
|
||||
| statementId_filter
|
||||
| statementId_set
|
||||
|
||||
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"
|
||||
importOptions_withoutContext = "without context"
|
||||
|
||||
listLiteral = bracket_left listLiteral_values? bracket_right
|
||||
listLiteral_values = sp? (listLiteral_value sp? comma sp?)* listLiteral_value sp?
|
||||
listLiteral_value
|
||||
= stringLiteral
|
||||
| explicitTupleLiteral
|
||||
| variableName
|
||||
|
||||
stringLiteral = stringLiteral_single | stringLiteral_double
|
||||
|
||||
stringLiteral_single = quote_single (~quote_single any)* quote_single
|
||||
stringLiteral_double = quote_double (~quote_double any)* quote_double
|
||||
|
||||
explicitTupleLiteral = parenthesis_left sp? tupleLiteral_values sp? parenthesis_right
|
||||
|
||||
tupleLiteral_values = (sp? tupleLiteral_value sp? comma sp?)* tupleLiteral_value
|
||||
tupleLiteral_value
|
||||
= stringLiteral
|
||||
|
||||
quote_single = "'"
|
||||
quote_double = "\""
|
||||
comma = ","
|
||||
equals = "="
|
||||
verticalBar = "|"
|
||||
|
||||
bracket_left = "["
|
||||
bracket_right = "]"
|
||||
brace_left = "{"
|
||||
brace_right = "}"
|
||||
parenthesis_left = "("
|
||||
parenthesis_right = ")"
|
||||
|
||||
identifier = identifierStart identifierContinue*
|
||||
|
||||
identifierStart = letter
|
||||
identifierContinue = letter | digit | "_"
|
||||
|
||||
sp = (" " | "\t")+
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user