xref: /vim-8.2.3635/runtime/syntax/tt2.vim (revision 37c64c78)
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