1543b7ef7SBram Moolenaar" Language: TT2 (Perl Template Toolkit) 2543b7ef7SBram Moolenaar" Maintainer: vim-perl <[email protected]> 3543b7ef7SBram Moolenaar" Author: Moriki, Atsushi <[email protected]> 4543b7ef7SBram Moolenaar" Homepage: http://github.com/vim-perl/vim-perl 5543b7ef7SBram Moolenaar" Bugs/requests: http://github.com/vim-perl/vim-perl/issues 6*37c64c78SBram Moolenaar" Last Change: 2015-04-25 7543b7ef7SBram Moolenaar" 8*37c64c78SBram Moolenaar" Installation: 9*37c64c78SBram Moolenaar" put tt2.vim and tt2html.vim in to your syntax directory. 10543b7ef7SBram Moolenaar" 11543b7ef7SBram Moolenaar" add below in your filetype.vim. 12543b7ef7SBram Moolenaar" au BufNewFile,BufRead *.tt2 setf tt2 13543b7ef7SBram Moolenaar" or 14543b7ef7SBram Moolenaar" au BufNewFile,BufRead *.tt2 15543b7ef7SBram Moolenaar" \ if ( getline(1) . getline(2) . getline(3) =~ '<\chtml' | 16543b7ef7SBram Moolenaar" \ && getline(1) . getline(2) . getline(3) !~ '<[%?]' ) | 17543b7ef7SBram Moolenaar" \ || getline(1) =~ '<!DOCTYPE HTML' | 18543b7ef7SBram Moolenaar" \ setf tt2html | 19543b7ef7SBram Moolenaar" \ else | 20543b7ef7SBram Moolenaar" \ setf tt2 | 21543b7ef7SBram Moolenaar" \ endif 22543b7ef7SBram Moolenaar" 23543b7ef7SBram Moolenaar" define START_TAG, END_TAG 24543b7ef7SBram Moolenaar" "ASP" 25543b7ef7SBram Moolenaar" :let b:tt2_syn_tags = '<% %>' 26543b7ef7SBram Moolenaar" "PHP" 27543b7ef7SBram Moolenaar" :let b:tt2_syn_tags = '<? ?>' 28543b7ef7SBram Moolenaar" "TT2 and HTML" 29543b7ef7SBram Moolenaar" :let b:tt2_syn_tags = '\[% %] <!-- -->' 30543b7ef7SBram Moolenaar" 31543b7ef7SBram Moolenaar" Changes: 32543b7ef7SBram Moolenaar" 0.1.3 33543b7ef7SBram Moolenaar" Changed fileformat from 'dos' to 'unix' 34543b7ef7SBram Moolenaar" Deleted 'echo' that print obstructive message 35543b7ef7SBram Moolenaar" 0.1.2 36543b7ef7SBram Moolenaar" Added block comment syntax 37543b7ef7SBram Moolenaar" e.g. [%# COMMENT 38543b7ef7SBram Moolenaar" COMMENT TOO %] 39543b7ef7SBram Moolenaar" [%# IT'S SAFE %] HERE IS OUTSIDE OF TT2 DIRECTIVE 40543b7ef7SBram Moolenaar" [% # WRONG!! %] HERE STILL BE COMMENT 41543b7ef7SBram Moolenaar" 0.1.1 42543b7ef7SBram Moolenaar" Release 43543b7ef7SBram Moolenaar" 0.1.0 44543b7ef7SBram Moolenaar" Internal 45543b7ef7SBram Moolenaar" 46543b7ef7SBram Moolenaar" License: follow Vim :help uganda 47543b7ef7SBram Moolenaar" 48543b7ef7SBram Moolenaar 49543b7ef7SBram Moolenaarif !exists("b:tt2_syn_tags") 50543b7ef7SBram Moolenaar let b:tt2_syn_tags = '\[% %]' 51543b7ef7SBram Moolenaar "let b:tt2_syn_tags = '\[% %] \[\* \*]' 52543b7ef7SBram Moolenaarendif 53543b7ef7SBram Moolenaar 54543b7ef7SBram Moolenaarif !exists("b:tt2_syn_inc_perl") 55543b7ef7SBram Moolenaar let b:tt2_syn_inc_perl = 1 56543b7ef7SBram Moolenaarendif 57543b7ef7SBram Moolenaar 58543b7ef7SBram Moolenaarif exists("b:current_syntax") 59543b7ef7SBram Moolenaar finish 60543b7ef7SBram Moolenaarendif 61543b7ef7SBram Moolenaar 62543b7ef7SBram Moolenaarlet s:cpo_save = &cpo 63543b7ef7SBram Moolenaarset cpo&vim 64543b7ef7SBram Moolenaar 65543b7ef7SBram Moolenaarsyn case match 66543b7ef7SBram Moolenaar 67543b7ef7SBram Moolenaarsyn cluster tt2_top_cluster contains=tt2_perlcode,tt2_tag_region 68543b7ef7SBram Moolenaar 69543b7ef7SBram Moolenaar" TT2 TAG Region 70543b7ef7SBram Moolenaarif exists("b:tt2_syn_tags") 71543b7ef7SBram Moolenaar 72543b7ef7SBram Moolenaar let s:str = b:tt2_syn_tags . ' ' 73543b7ef7SBram Moolenaar let s:str = substitute(s:str,'^ \+','','g') 74543b7ef7SBram Moolenaar let s:str = substitute(s:str,' \+',' ','g') 75543b7ef7SBram Moolenaar 76543b7ef7SBram Moolenaar while stridx(s:str,' ') > 0 77543b7ef7SBram Moolenaar 78543b7ef7SBram Moolenaar let s:st = strpart(s:str,0,stridx(s:str,' ')) 79543b7ef7SBram Moolenaar let s:str = substitute(s:str,'[^ ]* ','',"") 80543b7ef7SBram Moolenaar 81543b7ef7SBram Moolenaar let s:ed = strpart(s:str,0,stridx(s:str,' ')) 82543b7ef7SBram Moolenaar let s:str = substitute(s:str,'[^ ]* ','',"") 83543b7ef7SBram Moolenaar 84543b7ef7SBram Moolenaar exec 'syn region tt2_tag_region '. 85543b7ef7SBram Moolenaar \ 'matchgroup=tt2_tag '. 86543b7ef7SBram Moolenaar \ 'start=+\(' . s:st .'\)[-]\=+ '. 87543b7ef7SBram Moolenaar \ 'end=+[-]\=\(' . s:ed . '\)+ '. 88543b7ef7SBram Moolenaar \ 'contains=@tt2_statement_cluster keepend extend' 89543b7ef7SBram Moolenaar 90543b7ef7SBram Moolenaar exec 'syn region tt2_commentblock_region '. 91543b7ef7SBram Moolenaar \ 'matchgroup=tt2_tag '. 92543b7ef7SBram Moolenaar \ 'start=+\(' . s:st .'\)[-]\=\(#\)\@=+ '. 93543b7ef7SBram Moolenaar \ 'end=+[-]\=\(' . s:ed . '\)+ '. 94543b7ef7SBram Moolenaar \ 'keepend extend' 95543b7ef7SBram Moolenaar 96543b7ef7SBram Moolenaar "Include Perl syntax when 'PERL' 'RAWPERL' block 97543b7ef7SBram Moolenaar if b:tt2_syn_inc_perl 98543b7ef7SBram Moolenaar syn include @Perl $VIMRUNTIME/syntax/perl.vim 99543b7ef7SBram Moolenaar exec 'syn region tt2_perlcode '. 100543b7ef7SBram Moolenaar \ 'start=+\(\(RAW\)\=PERL\s*[-]\=' . s:ed . '\(\n\)\=\)\@<=+ ' . 101543b7ef7SBram Moolenaar \ 'end=+' . s:st . '[-]\=\s*END+me=s-1 contains=@Perl keepend' 102543b7ef7SBram Moolenaar endif 103543b7ef7SBram Moolenaar 104543b7ef7SBram Moolenaar "echo 'TAGS ' . s:st . ' ' . s:ed 105543b7ef7SBram Moolenaar unlet s:st 106543b7ef7SBram Moolenaar unlet s:ed 107543b7ef7SBram Moolenaar endwhile 108543b7ef7SBram Moolenaar 109543b7ef7SBram Moolenaarelse 110543b7ef7SBram Moolenaar 111543b7ef7SBram Moolenaar syn region tt2_tag_region 112543b7ef7SBram Moolenaar \ matchgroup=tt2_tag 113543b7ef7SBram Moolenaar \ start=+\(\[%\)[-]\=+ 114543b7ef7SBram Moolenaar \ end=+[-]\=%\]+ 115543b7ef7SBram Moolenaar \ contains=@tt2_statement_cluster keepend extend 116543b7ef7SBram Moolenaar 117543b7ef7SBram Moolenaar syn region tt2_commentblock_region 118543b7ef7SBram Moolenaar \ matchgroup=tt2_tag 119543b7ef7SBram Moolenaar \ start=+\(\[%\)[-]\=#+ 120543b7ef7SBram Moolenaar \ end=+[-]\=%\]+ 121543b7ef7SBram Moolenaar \ keepend extend 122543b7ef7SBram Moolenaar 123543b7ef7SBram Moolenaar "Include Perl syntax when 'PERL' 'RAWPERL' block 124543b7ef7SBram Moolenaar if b:tt2_syn_inc_perl 125543b7ef7SBram Moolenaar syn include @Perl $VIMRUNTIME/syntax/perl.vim 126543b7ef7SBram Moolenaar syn region tt2_perlcode 127543b7ef7SBram Moolenaar \ start=+\(\(RAW\)\=PERL\s*[-]\=%]\(\n\)\=\)\@<=+ 128543b7ef7SBram Moolenaar \ end=+\[%[-]\=\s*END+me=s-1 129543b7ef7SBram Moolenaar \ contains=@Perl keepend 130543b7ef7SBram Moolenaar endif 131543b7ef7SBram Moolenaarendif 132543b7ef7SBram Moolenaar 133543b7ef7SBram Moolenaar" Directive 134543b7ef7SBram Moolenaarsyn keyword tt2_directive contained 135543b7ef7SBram Moolenaar \ GET CALL SET DEFAULT DEBUG 136543b7ef7SBram Moolenaar \ LAST NEXT BREAK STOP BLOCK 137543b7ef7SBram Moolenaar \ IF IN UNLESS ELSIF FOR FOREACH WHILE SWITCH CASE 138543b7ef7SBram Moolenaar \ USE PLUGIN MACRO META 139543b7ef7SBram Moolenaar \ TRY FINAL RETURN LAST 140543b7ef7SBram Moolenaar \ CLEAR TO STEP AND OR NOT MOD DIV 141543b7ef7SBram Moolenaar \ ELSE PERL RAWPERL END 142543b7ef7SBram Moolenaarsyn match tt2_directive +|+ contained 143543b7ef7SBram Moolenaarsyn keyword tt2_directive contained nextgroup=tt2_string_q,tt2_string_qq,tt2_blockname skipwhite skipempty 144543b7ef7SBram Moolenaar \ INSERT INCLUDE PROCESS WRAPPER FILTER 145543b7ef7SBram Moolenaar \ THROW CATCH 146543b7ef7SBram Moolenaarsyn keyword tt2_directive contained nextgroup=tt2_def_tag skipwhite skipempty 147543b7ef7SBram Moolenaar \ TAGS 148543b7ef7SBram Moolenaar 149543b7ef7SBram Moolenaarsyn match tt2_def_tag "\S\+\s\+\S\+\|\<\w\+\>" contained 150543b7ef7SBram Moolenaar 151543b7ef7SBram Moolenaarsyn match tt2_variable +\I\w*+ contained 152543b7ef7SBram Moolenaarsyn match tt2_operator "[+*/%:?-]" contained 153543b7ef7SBram Moolenaarsyn match tt2_operator "\<\(mod\|div\|or\|and\|not\)\>" contained 154543b7ef7SBram Moolenaarsyn match tt2_operator "[!=<>]=\=\|&&\|||" contained 155543b7ef7SBram Moolenaarsyn match tt2_operator "\(\s\)\@<=_\(\s\)\@=" contained 156543b7ef7SBram Moolenaarsyn match tt2_operator "=>\|," contained 157543b7ef7SBram Moolenaarsyn match tt2_deref "\([[:alnum:]_)\]}]\s*\)\@<=\." contained 158543b7ef7SBram Moolenaarsyn match tt2_comment +#.*$+ contained extend 159543b7ef7SBram Moolenaarsyn match tt2_func +\<\I\w*\(\s*(\)\@=+ contained nextgroup=tt2_bracket_r skipempty skipwhite 160543b7ef7SBram Moolenaar" 161543b7ef7SBram Moolenaarsyn region tt2_bracket_r start=+(+ end=+)+ contained contains=@tt2_statement_cluster keepend extend 162543b7ef7SBram Moolenaarsyn region tt2_bracket_b start=+\[+ end=+]+ contained contains=@tt2_statement_cluster keepend extend 163543b7ef7SBram Moolenaarsyn region tt2_bracket_b start=+{+ end=+}+ contained contains=@tt2_statement_cluster keepend extend 164543b7ef7SBram Moolenaar 165543b7ef7SBram Moolenaarsyn region tt2_string_qq start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable keepend extend 166543b7ef7SBram Moolenaarsyn region tt2_string_q start=+'+ end=+'+ skip=+\\'+ contained keepend extend 167543b7ef7SBram Moolenaar 168543b7ef7SBram Moolenaarsyn match tt2_ivariable +\$\I\w*\>\(\.\I\w*\>\)*+ contained 169543b7ef7SBram Moolenaarsyn match tt2_ivariable +\${\I\w*\>\(\.\I\w*\>\)*}+ contained 170543b7ef7SBram Moolenaar 171543b7ef7SBram Moolenaarsyn match tt2_number "\d\+" contained 172543b7ef7SBram Moolenaarsyn match tt2_number "\d\+\.\d\+" contained 173543b7ef7SBram Moolenaarsyn match tt2_number "0x\x\+" contained 174543b7ef7SBram Moolenaarsyn match tt2_number "0\o\+" contained 175543b7ef7SBram Moolenaar 176543b7ef7SBram Moolenaarsyn match tt2_blockname "\f\+" contained nextgroup=tt2_blockname_joint skipwhite skipempty 177543b7ef7SBram Moolenaarsyn match tt2_blockname "$\w\+" contained contains=tt2_ivariable nextgroup=tt2_blockname_joint skipwhite skipempty 178543b7ef7SBram Moolenaarsyn region tt2_blockname start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable nextgroup=tt2_blockname_joint keepend skipwhite skipempty 179543b7ef7SBram Moolenaarsyn region tt2_blockname start=+'+ end=+'+ skip=+\\'+ contained nextgroup=tt2_blockname_joint keepend skipwhite skipempty 180543b7ef7SBram Moolenaarsyn match tt2_blockname_joint "+" contained nextgroup=tt2_blockname skipwhite skipempty 181543b7ef7SBram Moolenaar 182543b7ef7SBram Moolenaarsyn 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 183543b7ef7SBram Moolenaar 184543b7ef7SBram Moolenaar" Synchronizing 185543b7ef7SBram Moolenaarsyn sync minlines=50 186543b7ef7SBram Moolenaar 187543b7ef7SBram Moolenaarhi def link tt2_tag Type 188543b7ef7SBram Moolenaarhi def link tt2_tag_region Type 189543b7ef7SBram Moolenaarhi def link tt2_commentblock_region Comment 190543b7ef7SBram Moolenaarhi def link tt2_directive Statement 191543b7ef7SBram Moolenaarhi def link tt2_variable Identifier 192543b7ef7SBram Moolenaarhi def link tt2_ivariable Identifier 193543b7ef7SBram Moolenaarhi def link tt2_operator Statement 194543b7ef7SBram Moolenaarhi def link tt2_string_qq String 195543b7ef7SBram Moolenaarhi def link tt2_string_q String 196543b7ef7SBram Moolenaarhi def link tt2_blockname String 197543b7ef7SBram Moolenaarhi def link tt2_comment Comment 198543b7ef7SBram Moolenaarhi def link tt2_func Function 199543b7ef7SBram Moolenaarhi def link tt2_number Number 200543b7ef7SBram Moolenaar 201543b7ef7SBram Moolenaarif exists("b:tt2_syn_tags") 202543b7ef7SBram Moolenaar unlet b:tt2_syn_tags 203543b7ef7SBram Moolenaarendif 204543b7ef7SBram Moolenaar 205543b7ef7SBram Moolenaarlet b:current_syntax = "tt2" 206543b7ef7SBram Moolenaar 207543b7ef7SBram Moolenaarlet &cpo = s:cpo_save 208543b7ef7SBram Moolenaarunlet s:cpo_save 209543b7ef7SBram Moolenaar 210543b7ef7SBram Moolenaar" vim:ts=4:sw=4 211