123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- " Vim syntax file
- " Language: TT2 (Perl Template Toolkit)
- " Maintainer: vim-perl <vim-perl@googlegroups.com>
- " Author: Moriki, Atsushi <4woods+vim@gmail.com>
- " Homepage: https://github.com/vim-perl/vim-perl
- " Bugs/requests: https://github.com/vim-perl/vim-perl/issues
- " License: Vim License (see :help license)
- " Last Change: 2018 Mar 28
- "
- " Installation:
- " put tt2.vim and tt2html.vim in to your syntax directory.
- "
- " add below in your filetype.vim.
- " au BufNewFile,BufRead *.tt2 setf tt2
- " or
- " au BufNewFile,BufRead *.tt2
- " \ if ( getline(1) . getline(2) . getline(3) =~ '<\chtml' |
- " \ && getline(1) . getline(2) . getline(3) !~ '<[%?]' ) |
- " \ || getline(1) =~ '<!DOCTYPE HTML' |
- " \ setf tt2html |
- " \ else |
- " \ setf tt2 |
- " \ endif
- "
- " define START_TAG, END_TAG
- " "ASP"
- " :let b:tt2_syn_tags = '<% %>'
- " "PHP"
- " :let b:tt2_syn_tags = '<? ?>'
- " "TT2 and HTML"
- " :let b:tt2_syn_tags = '\[% %] <!-- -->'
- "
- " Changes:
- " 0.1.3
- " Changed fileformat from 'dos' to 'unix'
- " Deleted 'echo' that print obstructive message
- " 0.1.2
- " Added block comment syntax
- " e.g. [%# COMMENT
- " COMMENT TOO %]
- " [%# IT'S SAFE %] HERE IS OUTSIDE OF TT2 DIRECTIVE
- " [% # WRONG!! %] HERE STILL BE COMMENT
- " 0.1.1
- " Release
- " 0.1.0
- " Internal
- if !exists("b:tt2_syn_tags")
- let b:tt2_syn_tags = '\[% %]'
- "let b:tt2_syn_tags = '\[% %] \[\* \*]'
- endif
- if !exists("b:tt2_syn_inc_perl")
- let b:tt2_syn_inc_perl = 1
- endif
- if exists("b:current_syntax")
- finish
- endif
- let s:cpo_save = &cpo
- set cpo&vim
- syn case match
- syn cluster tt2_top_cluster contains=tt2_perlcode,tt2_tag_region
- " TT2 TAG Region
- if exists("b:tt2_syn_tags")
- let s:str = b:tt2_syn_tags . ' '
- let s:str = substitute(s:str,'^ \+','','g')
- let s:str = substitute(s:str,' \+',' ','g')
- while stridx(s:str,' ') > 0
- let s:st = strpart(s:str,0,stridx(s:str,' '))
- let s:str = substitute(s:str,'[^ ]* ','',"")
- let s:ed = strpart(s:str,0,stridx(s:str,' '))
- let s:str = substitute(s:str,'[^ ]* ','',"")
- exec 'syn region tt2_tag_region '.
- \ 'matchgroup=tt2_tag '.
- \ 'start=+\(' . s:st .'\)[-]\=+ '.
- \ 'end=+[-]\=\(' . s:ed . '\)+ '.
- \ 'contains=@tt2_statement_cluster keepend extend'
- exec 'syn region tt2_commentblock_region '.
- \ 'matchgroup=tt2_tag '.
- \ 'start=+\(' . s:st .'\)[-]\=\(#\)\@=+ '.
- \ 'end=+[-]\=\(' . s:ed . '\)+ '.
- \ 'keepend extend'
- "Include Perl syntax when 'PERL' 'RAWPERL' block
- if b:tt2_syn_inc_perl
- syn include @Perl syntax/perl.vim
- exec 'syn region tt2_perlcode '.
- \ 'start=+\(\(RAW\)\=PERL\s*[-]\=' . s:ed . '\(\n\)\=\)\@<=+ ' .
- \ 'end=+' . s:st . '[-]\=\s*END+me=s-1 contains=@Perl keepend'
- endif
- "echo 'TAGS ' . s:st . ' ' . s:ed
- unlet s:st
- unlet s:ed
- endwhile
- else
- syn region tt2_tag_region
- \ matchgroup=tt2_tag
- \ start=+\(\[%\)[-]\=+
- \ end=+[-]\=%\]+
- \ contains=@tt2_statement_cluster keepend extend
- syn region tt2_commentblock_region
- \ matchgroup=tt2_tag
- \ start=+\(\[%\)[-]\=#+
- \ end=+[-]\=%\]+
- \ keepend extend
- "Include Perl syntax when 'PERL' 'RAWPERL' block
- if b:tt2_syn_inc_perl
- syn include @Perl syntax/perl.vim
- syn region tt2_perlcode
- \ start=+\(\(RAW\)\=PERL\s*[-]\=%]\(\n\)\=\)\@<=+
- \ end=+\[%[-]\=\s*END+me=s-1
- \ contains=@Perl keepend
- endif
- endif
- " Directive
- syn keyword tt2_directive contained
- \ GET CALL SET DEFAULT DEBUG
- \ LAST NEXT BREAK STOP BLOCK
- \ IF IN UNLESS ELSIF FOR FOREACH WHILE SWITCH CASE
- \ USE PLUGIN MACRO META
- \ TRY FINAL RETURN LAST
- \ CLEAR TO STEP AND OR NOT MOD DIV
- \ ELSE PERL RAWPERL END
- syn match tt2_directive +|+ contained
- syn keyword tt2_directive contained nextgroup=tt2_string_q,tt2_string_qq,tt2_blockname skipwhite skipempty
- \ INSERT INCLUDE PROCESS WRAPPER FILTER
- \ THROW CATCH
- syn keyword tt2_directive contained nextgroup=tt2_def_tag skipwhite skipempty
- \ TAGS
- syn match tt2_def_tag "\S\+\s\+\S\+\|\<\w\+\>" contained
- syn match tt2_variable +\I\w*+ contained
- syn match tt2_operator "[+*/%:?-]" contained
- syn match tt2_operator "\<\(mod\|div\|or\|and\|not\)\>" contained
- syn match tt2_operator "[!=<>]=\=\|&&\|||" contained
- syn match tt2_operator "\(\s\)\@<=_\(\s\)\@=" contained
- syn match tt2_operator "=>\|," contained
- syn match tt2_deref "\([[:alnum:]_)\]}]\s*\)\@<=\." contained
- syn match tt2_comment +#.*$+ contained
- syn match tt2_func +\<\I\w*\(\s*(\)\@=+ contained nextgroup=tt2_bracket_r skipempty skipwhite
- "
- syn region tt2_bracket_r start=+(+ end=+)+ contained contains=@tt2_statement_cluster keepend extend
- syn region tt2_bracket_b start=+\[+ end=+]+ contained contains=@tt2_statement_cluster keepend extend
- syn region tt2_bracket_b start=+{+ end=+}+ contained contains=@tt2_statement_cluster keepend extend
- syn region tt2_string_qq start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable keepend extend
- syn region tt2_string_q start=+'+ end=+'+ skip=+\\'+ contained keepend extend
- syn match tt2_ivariable +\$\I\w*\>\(\.\I\w*\>\)*+ contained
- syn match tt2_ivariable +\${\I\w*\>\(\.\I\w*\>\)*}+ contained
- syn match tt2_number "\d\+" contained
- syn match tt2_number "\d\+\.\d\+" contained
- syn match tt2_number "0x\x\+" contained
- syn match tt2_number "0\o\+" contained
- syn match tt2_blockname "\f\+" contained nextgroup=tt2_blockname_joint skipwhite skipempty
- syn match tt2_blockname "$\w\+" contained contains=tt2_ivariable nextgroup=tt2_blockname_joint skipwhite skipempty
- syn region tt2_blockname start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable nextgroup=tt2_blockname_joint keepend skipwhite skipempty
- syn region tt2_blockname start=+'+ end=+'+ skip=+\\'+ contained nextgroup=tt2_blockname_joint keepend skipwhite skipempty
- syn match tt2_blockname_joint "+" contained nextgroup=tt2_blockname skipwhite skipempty
- syn cluster tt2_statement_cluster contains=tt2_directive,tt2_variable,tt2_operator,tt2_string_q,tt2_string_qq,tt2_deref,tt2_comment,tt2_func,tt2_bracket_b,tt2_bracket_r,tt2_number
- " Synchronizing
- syn sync minlines=50
- hi def link tt2_tag Type
- hi def link tt2_tag_region Type
- hi def link tt2_commentblock_region Comment
- hi def link tt2_directive Statement
- hi def link tt2_variable Identifier
- hi def link tt2_ivariable Identifier
- hi def link tt2_operator Statement
- hi def link tt2_string_qq String
- hi def link tt2_string_q String
- hi def link tt2_blockname String
- hi def link tt2_comment Comment
- hi def link tt2_func Function
- hi def link tt2_number Number
- if exists("b:tt2_syn_tags")
- unlet b:tt2_syn_tags
- endif
- let b:current_syntax = "tt2"
- let &cpo = s:cpo_save
- unlet s:cpo_save
- " vim:ts=4:sw=4
|