1" Language: TT2 (Perl Template Toolkit) 2" Maintainer: vim-perl <vim-perl@googlegroups.com> 3" Author: Moriki, Atsushi <4woods+vim@gmail.com> 4" Homepage: http://github.com/vim-perl/vim-perl 5" Bugs/requests: http://github.com/vim-perl/vim-perl/issues 6" Last Change: 2015-04-25 7" 8" Installation: 9" put tt2.vim and tt2html.vim in to your syntax directory. 10" 11" add below in your filetype.vim. 12" au BufNewFile,BufRead *.tt2 setf tt2 13" or 14" au BufNewFile,BufRead *.tt2 15" \ if ( getline(1) . getline(2) . getline(3) =~ '<\chtml' | 16" \ && getline(1) . getline(2) . getline(3) !~ '<[%?]' ) | 17" \ || getline(1) =~ '<!DOCTYPE HTML' | 18" \ setf tt2html | 19" \ else | 20" \ setf tt2 | 21" \ endif 22" 23" define START_TAG, END_TAG 24" "ASP" 25" :let b:tt2_syn_tags = '<% %>' 26" "PHP" 27" :let b:tt2_syn_tags = '<? ?>' 28" "TT2 and HTML" 29" :let b:tt2_syn_tags = '\[% %] <!-- -->' 30" 31" Changes: 32" 0.1.3 33" Changed fileformat from 'dos' to 'unix' 34" Deleted 'echo' that print obstructive message 35" 0.1.2 36" Added block comment syntax 37" e.g. [%# COMMENT 38" COMMENT TOO %] 39" [%# IT'S SAFE %] HERE IS OUTSIDE OF TT2 DIRECTIVE 40" [% # WRONG!! %] HERE STILL BE COMMENT 41" 0.1.1 42" Release 43" 0.1.0 44" Internal 45" 46" License: follow Vim :help uganda 47" 48 49if !exists("b:tt2_syn_tags") 50 let b:tt2_syn_tags = '\[% %]' 51 "let b:tt2_syn_tags = '\[% %] \[\* \*]' 52endif 53 54if !exists("b:tt2_syn_inc_perl") 55 let b:tt2_syn_inc_perl = 1 56endif 57 58if exists("b:current_syntax") 59 finish 60endif 61 62let s:cpo_save = &cpo 63set cpo&vim 64 65syn case match 66 67syn cluster tt2_top_cluster contains=tt2_perlcode,tt2_tag_region 68 69" TT2 TAG Region 70if exists("b:tt2_syn_tags") 71 72 let s:str = b:tt2_syn_tags . ' ' 73 let s:str = substitute(s:str,'^ \+','','g') 74 let s:str = substitute(s:str,' \+',' ','g') 75 76 while stridx(s:str,' ') > 0 77 78 let s:st = strpart(s:str,0,stridx(s:str,' ')) 79 let s:str = substitute(s:str,'[^ ]* ','',"") 80 81 let s:ed = strpart(s:str,0,stridx(s:str,' ')) 82 let s:str = substitute(s:str,'[^ ]* ','',"") 83 84 exec 'syn region tt2_tag_region '. 85 \ 'matchgroup=tt2_tag '. 86 \ 'start=+\(' . s:st .'\)[-]\=+ '. 87 \ 'end=+[-]\=\(' . s:ed . '\)+ '. 88 \ 'contains=@tt2_statement_cluster keepend extend' 89 90 exec 'syn region tt2_commentblock_region '. 91 \ 'matchgroup=tt2_tag '. 92 \ 'start=+\(' . s:st .'\)[-]\=\(#\)\@=+ '. 93 \ 'end=+[-]\=\(' . s:ed . '\)+ '. 94 \ 'keepend extend' 95 96 "Include Perl syntax when 'PERL' 'RAWPERL' block 97 if b:tt2_syn_inc_perl 98 syn include @Perl $VIMRUNTIME/syntax/perl.vim 99 exec 'syn region tt2_perlcode '. 100 \ 'start=+\(\(RAW\)\=PERL\s*[-]\=' . s:ed . '\(\n\)\=\)\@<=+ ' . 101 \ 'end=+' . s:st . '[-]\=\s*END+me=s-1 contains=@Perl keepend' 102 endif 103 104 "echo 'TAGS ' . s:st . ' ' . s:ed 105 unlet s:st 106 unlet s:ed 107 endwhile 108 109else 110 111 syn region tt2_tag_region 112 \ matchgroup=tt2_tag 113 \ start=+\(\[%\)[-]\=+ 114 \ end=+[-]\=%\]+ 115 \ contains=@tt2_statement_cluster keepend extend 116 117 syn region tt2_commentblock_region 118 \ matchgroup=tt2_tag 119 \ start=+\(\[%\)[-]\=#+ 120 \ end=+[-]\=%\]+ 121 \ keepend extend 122 123 "Include Perl syntax when 'PERL' 'RAWPERL' block 124 if b:tt2_syn_inc_perl 125 syn include @Perl $VIMRUNTIME/syntax/perl.vim 126 syn region tt2_perlcode 127 \ start=+\(\(RAW\)\=PERL\s*[-]\=%]\(\n\)\=\)\@<=+ 128 \ end=+\[%[-]\=\s*END+me=s-1 129 \ contains=@Perl keepend 130 endif 131endif 132 133" Directive 134syn keyword tt2_directive contained 135 \ GET CALL SET DEFAULT DEBUG 136 \ LAST NEXT BREAK STOP BLOCK 137 \ IF IN UNLESS ELSIF FOR FOREACH WHILE SWITCH CASE 138 \ USE PLUGIN MACRO META 139 \ TRY FINAL RETURN LAST 140 \ CLEAR TO STEP AND OR NOT MOD DIV 141 \ ELSE PERL RAWPERL END 142syn match tt2_directive +|+ contained 143syn keyword tt2_directive contained nextgroup=tt2_string_q,tt2_string_qq,tt2_blockname skipwhite skipempty 144 \ INSERT INCLUDE PROCESS WRAPPER FILTER 145 \ THROW CATCH 146syn keyword tt2_directive contained nextgroup=tt2_def_tag skipwhite skipempty 147 \ TAGS 148 149syn match tt2_def_tag "\S\+\s\+\S\+\|\<\w\+\>" contained 150 151syn match tt2_variable +\I\w*+ contained 152syn match tt2_operator "[+*/%:?-]" contained 153syn match tt2_operator "\<\(mod\|div\|or\|and\|not\)\>" contained 154syn match tt2_operator "[!=<>]=\=\|&&\|||" contained 155syn match tt2_operator "\(\s\)\@<=_\(\s\)\@=" contained 156syn match tt2_operator "=>\|," contained 157syn match tt2_deref "\([[:alnum:]_)\]}]\s*\)\@<=\." contained 158syn match tt2_comment +#.*$+ contained extend 159syn match tt2_func +\<\I\w*\(\s*(\)\@=+ contained nextgroup=tt2_bracket_r skipempty skipwhite 160" 161syn region tt2_bracket_r start=+(+ end=+)+ contained contains=@tt2_statement_cluster keepend extend 162syn region tt2_bracket_b start=+\[+ end=+]+ contained contains=@tt2_statement_cluster keepend extend 163syn region tt2_bracket_b start=+{+ end=+}+ contained contains=@tt2_statement_cluster keepend extend 164 165syn region tt2_string_qq start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable keepend extend 166syn region tt2_string_q start=+'+ end=+'+ skip=+\\'+ contained keepend extend 167 168syn match tt2_ivariable +\$\I\w*\>\(\.\I\w*\>\)*+ contained 169syn match tt2_ivariable +\${\I\w*\>\(\.\I\w*\>\)*}+ contained 170 171syn match tt2_number "\d\+" contained 172syn match tt2_number "\d\+\.\d\+" contained 173syn match tt2_number "0x\x\+" contained 174syn match tt2_number "0\o\+" contained 175 176syn match tt2_blockname "\f\+" contained nextgroup=tt2_blockname_joint skipwhite skipempty 177syn match tt2_blockname "$\w\+" contained contains=tt2_ivariable nextgroup=tt2_blockname_joint skipwhite skipempty 178syn region tt2_blockname start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable nextgroup=tt2_blockname_joint keepend skipwhite skipempty 179syn region tt2_blockname start=+'+ end=+'+ skip=+\\'+ contained nextgroup=tt2_blockname_joint keepend skipwhite skipempty 180syn match tt2_blockname_joint "+" contained nextgroup=tt2_blockname skipwhite skipempty 181 182syn 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 183 184" Synchronizing 185syn sync minlines=50 186 187hi def link tt2_tag Type 188hi def link tt2_tag_region Type 189hi def link tt2_commentblock_region Comment 190hi def link tt2_directive Statement 191hi def link tt2_variable Identifier 192hi def link tt2_ivariable Identifier 193hi def link tt2_operator Statement 194hi def link tt2_string_qq String 195hi def link tt2_string_q String 196hi def link tt2_blockname String 197hi def link tt2_comment Comment 198hi def link tt2_func Function 199hi def link tt2_number Number 200 201if exists("b:tt2_syn_tags") 202 unlet b:tt2_syn_tags 203endif 204 205let b:current_syntax = "tt2" 206 207let &cpo = s:cpo_save 208unlet s:cpo_save 209 210" vim:ts=4:sw=4 211