elaborated syntax highlighting for typoscript

This commit is contained in:
Elmar Hinz 2014-09-24 20:44:41 +02:00
parent 546acdea36
commit 5f2bdc2bf7
4 changed files with 65 additions and 0 deletions

0
LICENSE Normal file
View file

0
README Normal file
View file

1
ftdetect/typoscript.vim Normal file
View file

@ -0,0 +1 @@
autocmd BufNewFile,BufRead *.ts setlocal filetype=typoscript

64
syntax/typoscript.vim Normal file
View file

@ -0,0 +1,64 @@
if exists("b:current_syntax")
finish
endif
" Setup
setlocal isident=@,48-57,-,.,_,192-255
" Top level elements
syntax region tsComment keepend start="\/\*" end="\*\/"
syntax region tsComment keepend start="^\s*#" end="$"
syntax region tsComment keepend start="\v^\s*\/\/" end="$"
syntax region tsInclude keepend start="\v^\s*\<" end="\v\>\s*$"
syntax region tsCondition keepend start="\v^\s*\[" end="\]\s*$"
syntax match tsSingleline "\v^\s*\i+\s*[=<>{].*$"
syntax region tsMultiline keepend start="\v^\s*\i+\s*\(\s*$" end="\v^\s*\)\s*$"
syntax match tsDelimiter "\v^\s*\}\s*$"
" Resolving tsSingleline and Multiline
syntax region tsValue keepend matchgroup=tsLineOperator start="\v\=" end="\v$" contained containedin=tsSingleline
syntax region tsValue keepend matchgroup=tsDelimiter start="\v\(" end="\v^\s*\)\s*$" contained containedin=tsMultiline
syntax match tsIdentifier "\v^\s*\i+" contained containedin=tsSingleline,tsMultiline
syntax match tsLineOperator "\v[=<]" contained containedin=tsSymlink
syntax match tsSymlink "\v(\<|\=\s*\<)\s*\i+\s*$" contained containedin=tsSingleline
syntax match tsDelimiter "\v\{\s*$" contained containedin=tsSingleline
syntax match tsLineOperator "\v\>\s*$" contained containedin=tsSingleline
syntax match tsIdentifier "\v\i+\s*$" contained containedin=tsSymlink
" Sub level elements
syntax match tsDelimiter "\v[\[\]]" contained containedin=tsCondition
" This is one sign each hit, to give it a minimum priority.
syntax match tsValueString "\v\S" contained containedin=tsValue
syntax match tsValuePipe "\v\|" contained containedin=tsValue
" Detect numbers, but not those that are part of words.
syntax match tsNumber "\v(\a\d*)@<!\d(\d*\a)@!" contained containedin=tsValue
syntax region tsEval oneline keepend matchgroup=tsDelimiter start="\v\{" end="\v\}" contained containedin=tsValue,tsCondition,tsTagAttrValue
syntax match tsIdentifier "\v\$\i+" contained containedin=tsEval
syntax match tsTagMatch "\v\<\/?\a+[^>]+\/?\>" contained containedin=tsValue
syntax region tsTag keepend matchgroup=tsDelimiter start="\v\<\/?" end="\v\/?\>" contained containedin=tsTagMatch
syntax match tsTagOperator "\v\=" contained containedin=tsTag
syntax region tsTagAttrValue matchgroup=tsDelimiter start="\v\"" end="\v\"" contained containedin=tsTag
" Keywords
syntax case ignore | syntax keyword tsTodo contained containedin=tsComment todo xxx
syntax case match | syntax keyword tsObjectType PAGE CONTENT COA COA_INT HTML TEXT USER USER_INT LOAD_REGISTER RESTORE_REGISTER IMAGE CASE contained containedin=tsValue
" Link groups
highlight link tsComment Comment
highlight link tsCondition Conditional
highlight link tsDelimiter Delimiter
highlight link tsIdentifier Identifier
highlight link tsInclude Include
highlight link tsNumber NONE
highlight link tsLineOperator Operator
highlight link tsTodo Todo
highlight link tsValuePipe Delimiter
highlight link tsValueString String
highlight link tsTag Identifier
highlight link tsTagOperator Operator
highlight link tsTagAttrValue String
highlight link tsObjectType Type
let b:current_syntax = "typoscript"