neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

jinja.vim (4582B)


      1 " Vim syntax file
      2 " Language: Jinja
      3 " Maintainer: Gregory Anders
      4 " Upstream: https://gitlab.com/HiPhish/jinja.vim
      5 " Last Change: 2024 Oct 16
      6 
      7 if exists('b:current_syntax') && b:current_syntax =~? 'jinja'
      8    finish
      9 endif
     10 
     11 syntax case match
     12 syntax sync fromstart
     13 
     14 " Jinja template built-in tags and parameters (without filter, macro, is and raw, they
     15 " have special threatment)
     16 syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained and if else in not or recursive as import
     17 
     18 syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained is filter skipwhite nextgroup=jinjaFilter
     19 syn keyword jinjaStatement containedin=jinjaTagBlock contained macro skipwhite nextgroup=jinjaFunction
     20 syn keyword jinjaStatement containedin=jinjaTagBlock contained block skipwhite nextgroup=jinjaBlockName
     21 
     22 " Variable Names
     23 syn match jinjaVariable containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[a-zA-Z_][a-zA-Z0-9_]*/
     24 syn keyword jinjaSpecial containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained false true none False True None loop super caller varargs kwargs
     25 
     26 " Filters
     27 syn match jinjaOperator "|" containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained skipwhite nextgroup=jinjaFilter
     28 syn match jinjaFilter contained /[a-zA-Z_][a-zA-Z0-9_]*/
     29 syn match jinjaFunction contained /[a-zA-Z_][a-zA-Z0-9_]*/
     30 syn match jinjaBlockName contained /[a-zA-Z_][a-zA-Z0-9_]*/
     31 
     32 " Jinja template constants
     33 syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/"/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\"/ end=/"/
     34 syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/'/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\'/ end=/'/
     35 syn match jinjaNumber containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[0-9]\+\(\.[0-9]\+\)\?/
     36 
     37 " Operators
     38 syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[+\-*\/<>=!,:]/
     39 syn match jinjaPunctuation containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[()\[\]]/
     40 syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /\./ nextgroup=jinjaAttribute
     41 syn match jinjaAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/
     42 
     43 " Jinja template tag and variable blocks
     44 syn region jinjaNested matchgroup=jinjaOperator start="(" end=")" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
     45 syn region jinjaNested matchgroup=jinjaOperator start="\[" end="\]" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
     46 syn region jinjaNested matchgroup=jinjaOperator start="{" end="}" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
     47 syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment
     48 
     49 syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment
     50 
     51 " Jinja template 'raw' tag
     52 syn region jinjaRaw matchgroup=jinjaRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,jinjaComment
     53 
     54 " Jinja comments
     55 syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString
     56 
     57 " Block start keywords.  A bit tricker.  We only highlight at the start of a
     58 " tag block and only if the name is not followed by a comma or equals sign
     59 " which usually means that we have to deal with an assignment.
     60 syn match jinjaStatement containedin=jinjaTagBlock contained /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/
     61 
     62 " and context modifiers
     63 syn match jinjaStatement containedin=jinjaTagBlock contained /\<with\(out\)\?\s\+context\>/
     64 
     65 hi def link jinjaPunctuation jinjaOperator
     66 hi def link jinjaAttribute jinjaVariable
     67 hi def link jinjaFunction jinjaFilter
     68 
     69 hi def link jinjaTagDelim jinjaTagBlock
     70 hi def link jinjaVarDelim jinjaVarBlock
     71 hi def link jinjaCommentDelim jinjaComment
     72 hi def link jinjaRawDelim jinja
     73 
     74 hi def link jinjaSpecial Special
     75 hi def link jinjaOperator Normal
     76 hi def link jinjaRaw Normal
     77 hi def link jinjaTagBlock PreProc
     78 hi def link jinjaVarBlock PreProc
     79 hi def link jinjaStatement Statement
     80 hi def link jinjaFilter Function
     81 hi def link jinjaBlockName Function
     82 hi def link jinjaVariable Identifier
     83 hi def link jinjaString Constant
     84 hi def link jinjaNumber Constant
     85 hi def link jinjaComment Comment
     86 
     87 let b:current_syntax = 'jinja'