1 " viki.vim -- the viki syntax file
2 " @Author: Thomas Link (micathom AT gmail com?subject=vim)
3 " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
4 " @Created: 30-Dez-2003.
5 " @Last Change: 2008-04-17.
14 elseif exists("b:current_syntax")
18 " This command sets up buffer variables and adds some basic highlighting.
20 call viki#DispatchOnFamily('MinorMode', '', 2)
23 runtime syntax/texmath.vim
25 " On slow machine the extended syntax highlighting can cause some major
26 " slowdown (I'm not really sure what is causing this, but it can be
27 " avoided anyway by highlighting only the basic syntax)
28 " if g:vikiBasicSyntax
32 syn match vikiSemiParagraph /^\s\+$/
34 syn match vikiEscape /\\/ contained containedin=vikiEscapedChar
35 syn match vikiEscapedChar /\\\_./ contains=vikiEscape,vikiChar
37 " exe 'syn match vikiAnchor /^\('. escape(b:vikiCommentStart, '\/.*^$~[]') .'\)\?[[:blank:]]*#'. b:vikiAnchorNameRx .'/'
38 exe 'syn match vikiAnchor /^[[:blank:]]*%\?[[:blank:]]*#'. b:vikiAnchorNameRx .'.*/'
39 " syn match vikiMarkers /\(\([#?!+]\)\2\{2,2}\)/
40 syn match vikiMarkers /\V\(###\|???\|!!!\|+++\)/
41 " syn match vikiSymbols /\(--\|!=\|==\+\|\~\~\+\|<-\+>\|<=\+>\|<\~\+>\|<-\+\|-\+>\|<=\+\|=\+>\|<\~\+\|\~\+>\|\.\.\.\)/
42 syn match vikiSymbols /\V\(--\|!=\|==\+\|~~\+\|<-\+>\|<=\+>\|<~\+>\|<-\+\|-\+>\|<=\+\|=\+>\|<~\+\|~\+>\|...\|&\(#\d\+\|\w\+\);\)/
44 syn cluster vikiHyperLinks contains=vikiLink,vikiExtendedLink,vikiURL,vikiInexistentLink
46 if b:vikiTextstylesVer == 1
47 syn match vikiBold /\(^\|\W\zs\)\*\(\\\*\|\w\)\{-1,}\*/
48 syn region vikiContinousBold start=/\(^\|\W\zs\)\*\*[^ *]/ end=/\*\*\|\n\{2,}/ skip=/\\\n/
49 syn match vikiUnderline /\(^\|\W\zs\)_\(\\_\|[^_\s]\)\{-1,}_/
50 syn region vikiContinousUnderline start=/\(^\|\W\zs\)__[^ _]/ end=/__\|\n\{2,}/ skip=/\\\n/
51 syn match vikiTypewriter /\(^\|\W\zs\)=\(\\=\|\w\)\{-1,}=/
52 syn region vikiContinousTypewriter start=/\(^\|\W\zs\)==[^ =]/ end=/==\|\n\{2,}/ skip=/\\\n/
53 syn cluster vikiTextstyles contains=vikiBold,vikiContinousBold,vikiTypewriter,vikiContinousTypewriter,vikiUnderline,vikiContinousUnderline,vikiEscapedChar
55 syn region vikiBold start=/\(^\|\W\zs\)__[^ _]/ end=/__\|\n\{2,}/ skip=/\\_\|\\\n/ contains=vikiEscapedChar
56 syn region vikiTypewriter start=/\(^\|[^\w`]\zs\)''[^ ']/ end=/''\|\n\{2,}/ skip=/\\'\|\\\n/ contains=vikiEscapedChar
57 syn cluster vikiTextstyles contains=vikiBold,vikiTypewriter,vikiEscapedChar
60 syn cluster vikiText contains=@vikiTextstyles,@vikiHyperLinks,vikiMarkers
62 " exe 'syn match vikiComment /\V\^\[[:blank:]]\*'. escape(b:vikiCommentStart, '\/') .'\.\*/ contains=@vikiText'
63 " syn match vikiComment /^[[:blank:]]*%.*$/ contains=@vikiText
64 syn match vikiComment /^[[:blank:]]*%.*$/ contains=@vikiHyperLinks,vikiMarkers,vikiEscapedChar
66 " syn region vikiString start=+^[[:blank:]]\+"\|"+ end=+"[.?!]\?[[:blank:]]\+$\|"+ contains=@vikiText
67 " syn region vikiString start=+^"\|\s"\|[({\[]\zs"+ end=+"+ contains=@vikiText
68 syn region vikiString start=+^"\|\s"\|[({\[]\zs"\|[^[:alnum:]]\zs"\ze[[:alnum:]]+ end=+"+ contains=@vikiText
70 let b:vikiHeadingStart = '*'
71 if g:vikiFancyHeadings
72 let hd=escape(b:vikiHeadingStart, '\/')
73 exe 'syn region vikiHeading1 start=/\V\^'. hd .'\[[:blank:]]\+/ end=/\n/ contains=@vikiText'
74 exe 'syn region vikiHeading2 start=/\V\^'. hd.hd .'\[[:blank:]]\+/ end=/\n/ contains=@vikiText'
75 exe 'syn region vikiHeading3 start=/\V\^'. hd.hd.hd .'\[[:blank:]]\+/ end=/\n/ contains=@vikiText'
76 exe 'syn region vikiHeading4 start=/\V\^'. hd.hd.hd.hd .'\[[:blank:]]\+/ end=/\n/ contains=@vikiText'
77 exe 'syn region vikiHeading5 start=/\V\^'. hd.hd.hd.hd.hd .'\[[:blank:]]\+/ end=/\n/ contains=@vikiText'
78 exe 'syn region vikiHeading6 start=/\V\^'. hd.hd.hd.hd.hd.hd .'\[[:blank:]]\+/ end=/\n/ contains=@vikiText'
80 exe 'syn region vikiHeading start=/\V\^'. escape(b:vikiHeadingStart, '\/') .'\+\[[:blank:]]\+/ end=/\n/ contains=@vikiText'
83 syn match vikiList /^[[:blank:]]\+\([-+*#?@]\|[0-9#]\+\.\|[a-zA-Z?]\.\)\ze[[:blank:]]/
84 syn match vikiDescription /^[[:blank:]]\+\(\\\n\|.\)\{-1,}[[:blank:]]::\ze[[:blank:]]/ contains=@vikiHyperLinks,vikiEscapedChar,vikiComment
87 syn match vikiPriorityListTodoGen /^[[:blank:]]\+\zs#\(T: \+.\{-}\u.\{-}:\|\d*\u\d*\( \+\(_\|[0-9%-]\+\)\)\?\)\( \+\[[^[].\{-}\]\)\?\ze /
88 syn match vikiPriorityListTodoA /^[[:blank:]]\+\zs#\(T: \+.\{-}A.\{-}:\|\d*A\d*\( \+\(_\|[0-9%-]\+\)\)\?\)\( \+\[[^[].\{-}\]\)\?\ze /
89 syn match vikiPriorityListTodoB /^[[:blank:]]\+\zs#\(T: \+.\{-}B.\{-}:\|\d*B\d*\( \+\(_\|[0-9%-]\+\)\)\?\)\( \+\[[^[].\{-}\]\)\?\ze /
90 syn match vikiPriorityListTodoC /^[[:blank:]]\+\zs#\(T: \+.\{-}C.\{-}:\|\d*C\d*\( \+\(_\|[0-9%-]\+\)\)\?\)\( \+\[[^[].\{-}\]\)\?\ze /
91 syn match vikiPriorityListTodoD /^[[:blank:]]\+\zs#\(T: \+.\{-}D.\{-}:\|\d*D\d*\( \+\(_\|[0-9%-]\+\)\)\?\)\( \+\[[^[].\{-}\]\)\?\ze /
92 syn match vikiPriorityListTodoE /^[[:blank:]]\+\zs#\(T: \+.\{-}E.\{-}:\|\d*E\d*\( \+\(_\|[0-9%-]\+\)\)\?\)\( \+\[[^[].\{-}\]\)\?\ze /
93 syn match vikiPriorityListTodoF /^[[:blank:]]\+\zs#\(T: \+.\{-}F.\{-}:\|\d*F\d*\( \+\(_\|[0-9%-]\+\)\)\?\)\( \+\[[^[].\{-}\]\)\?\ze /
95 syn match vikiPriorityListDoneGen /^[[:blank:]]\+\zs#\(T: \+x\([0-9%-]\+\)\?.\{-}\u.\{-}:\|\(T: \+\)\?\d*\u\d* \+x[0-9%-]*\):\? .*/
96 syn match vikiPriorityListDoneA /^[[:blank:]]\+\zs#\(T: \+x\([0-9%-]\+\)\?.\{-}A.\{-}:\|\(T: \+\)\?\d*A\d* \+x[0-9%-]*\):\? .*/
97 syn match vikiPriorityListDoneB /^[[:blank:]]\+\zs#\(T: \+x\([0-9%-]\+\)\?.\{-}B.\{-}:\|\(T: \+\)\?\d*B\d* \+x[0-9%-]*\):\? .*/
98 syn match vikiPriorityListDoneC /^[[:blank:]]\+\zs#\(T: \+x\([0-9%-]\+\)\?.\{-}C.\{-}:\|\(T: \+\)\?\d*C\d* \+x[0-9%-]*\):\? .*/
99 syn match vikiPriorityListDoneD /^[[:blank:]]\+\zs#\(T: \+x\([0-9%-]\+\)\?.\{-}D.\{-}:\|\(T: \+\)\?\d*D\d* \+x[0-9%-]*\):\? .*/
100 syn match vikiPriorityListDoneE /^[[:blank:]]\+\zs#\(T: \+x\([0-9%-]\+\)\?.\{-}E.\{-}:\|\(T: \+\)\?\d*E\d* \+x[0-9%-]*\):\? .*/
101 syn match vikiPriorityListDoneF /^[[:blank:]]\+\zs#\(T: \+x\([0-9%-]\+\)\?.\{-}F.\{-}:\|\(T: \+\)\?\d*F\d* \+x[0-9%-]*\):\? .*/
103 syn match vikiTableRowSep /||\?/ contained containedin=vikiTableRow,vikiTableHead
104 syn region vikiTableHead start=/^[[:blank:]]*|| / skip=/\\\n/ end=/\(^\| \)||[[:blank:]]*$/
105 \ transparent keepend
106 " \ contains=ALLBUT,vikiTableRow,vikiTableHead
107 syn region vikiTableRow start=/^[[:blank:]]*| / skip=/\\\n/ end=/\(^\| \)|[[:blank:]]*$/
108 \ transparent keepend
109 " \ contains=ALLBUT,vikiTableRow,vikiTableHead
111 syn keyword vikiCommandNames
112 \ #CAP #CAPTION #LANG #LANGUAGE #INC #INCLUDE #DOC #VAR #KEYWORDS #OPT
113 \ #PUT #CLIP #SET #GET #XARG #XVAL #ARG #VAL #BIB #TITLE #TI #AUTHOR
114 \ #AU #AUTHORNOTE #AN #DATE #IMG #IMAGE #FIG #FIGURE #MAKETITLE
115 \ #MAKEBIB #LIST #DEFLIST #REGISTER #DEFCOUNTER #COUNTER #TABLE #IDX
116 \ #AUTOIDX #NOIDX #DONTIDX #WITH #ABBREV #MODULE #MOD #LTX #INLATEX
118 \ contained containedin=vikiCommand
120 syn keyword vikiRegionNames
121 \ #Doc #Var #Native #Ins #Write #Code #Inlatex #Ltx #Img #Image #Fig
122 \ #Figure #Footnote #Fn #Foreach #Table #Verbatim #Verb #Abstract
123 \ #Quote #Qu #R #Ruby #Clip #Put #Set #Header #Footer #Swallow #Skip
124 \ contained containedin=vikiMacroDelim,vikiRegion,vikiRegionWEnd,vikiRegionAlt
126 syn keyword vikiMacroNames
127 \ {fn {cite {attr {attrib {date {doc {var {arg {val {xarg {xval {opt
128 \ {msg {clip {get {ins {native {ruby {ref {anchor {label {lab {nl {ltx
129 \ {math {$ {list {item {term {, {sub {^ {sup {super {% {stacked {:
130 \ {text {plain {\\ {em {emph {_ {code {verb {img {cmt {pagenumber
131 \ {pagenum {idx {let {counter
132 \ contained containedin=vikiMacro,vikiMacroDelim
134 syn match vikiSkeleton /{{\_.\{-}[^\\]}}/
136 syn region vikiMacro matchgroup=vikiMacroDelim start=/{\W\?[^:{}]*:\?/ end=/}/
137 \ transparent contains=@vikiText,vikiMacroNames,vikiMacro
139 syn region vikiRegion matchgroup=vikiMacroDelim
140 \ start=/^[[:blank:]]*#\([A-Z]\([a-z][A-Za-z]*\)\?\>\|!!!\)\(\\\n\|.\)\{-}<<\z(.*\)$/
141 \ end=/^[[:blank:]]*\z1[[:blank:]]*$/
142 \ contains=@vikiText,vikiRegionNames
143 syn region vikiRegionWEnd matchgroup=vikiMacroDelim
144 \ start=/^[[:blank:]]*#\([A-Z]\([a-z][A-Za-z]*\)\?\>\|!!!\)\(\\\n\|.\)\{-}:[[:blank:]]*$/
145 \ end=/^[[:blank:]]*#End[[:blank:]]*$/
146 \ contains=@vikiText,vikiRegionNames
147 syn region vikiRegionAlt matchgroup=vikiMacroDelim
148 \ start=/^[[:blank:]]*\z(=\{4,}\)[[:blank:]]*\([A-Z][a-z]*\>\|!!!\)\(\\\n\|.\)\{-}$/
149 \ end=/^[[:blank:]]*\z1\([[:blank:]].*\)\?$/
150 \ contains=@vikiText,vikiRegionNames
152 syn match vikiCommand /^\C[[:blank:]]*#\([A-Z]\{2,}\)\>\(\\\n\|.\)*/
153 \ contains=vikiCommandNames
155 syn match vikiFilesMarkers /\[\[\([^\/]\+\/\)*\|\]!\]/ contained containedin=vikiFiles
156 syn match vikiFilesIndicators /{.\{-}}/ contained containedin=vikiFiles
157 syn match vikiFiles /^\s*\[\[.\{-}\]!\].*$/
158 \ contained containedin=vikiFilesRegion contains=vikiFilesMarkers,vikiFilesIndicators
159 syn region vikiFilesRegion matchgroup=vikiMacroDelim
160 \ start=/^[[:blank:]]*#Files\>\(\\\n\|.\)\{-}<<\z(.*\)$/
161 \ end=/^[[:blank:]]*\z1[[:blank:]]*$/
165 if g:vikiHighlightMath == 'latex'
166 syn region vikiTexFormula matchgroup=Comment
167 \ start=/\$/ end=/\$/
168 \ contains=@texmathMath
169 syn sync match vikiTexFormula grouphere NONE /^\s*$/
172 syn region vikiTexRegion matchgroup=vikiMacroDelim
173 \ start=/^[[:blank:]]*#Ltx\>\(\\\n\|.\)\{-}<<\z(.*\)$/
174 \ end=/^[[:blank:]]*\z1[[:blank:]]*$/
175 \ contains=@texmathMath
176 syn region vikiTexMacro matchgroup=vikiMacroDelim
177 \ start=/{\(ltx\)\([^:{}]*:\)\?/ end=/}/
178 \ transparent contains=vikiMacroNames,@texmath
179 syn region vikiTexMathMacro matchgroup=vikiMacroDelim
180 \ start=/{\(math\>\|\$\)\([^:{}]*:\)\?/ end=/}/
181 \ transparent contains=vikiMacroNames,@texmathMath
184 syntax sync minlines=2
185 " syntax sync maxlines=50
186 " syntax sync match vikiParaBreak /^\s*$/
187 " syntax sync linecont /\\$/
190 " Define the default highlighting.
191 " For version 5.7 and earlier: only when not done already
192 " For version 5.8 and later: only when an item doesn't have highlighting yet
193 if version >= 508 || !exists("did_viki_syntax_inits")
195 let did_viki_syntax_inits = 1
196 command! -nargs=+ HiLink hi link <args>
198 command! -nargs=+ HiLink hi def link <args>
201 if &background == "light"
209 if exists("g:vikiHeadingFont")
210 let s:hdfont = " font=". g:vikiHeadingFont
215 if exists("g:vikiTypewriterFont")
216 let s:twfont = " font=". g:vikiTypewriterFont
221 HiLink vikiSemiParagraph NonText
222 HiLink vikiEscapedChars Normal
223 exe "hi vikiEscape ctermfg=". s:cm2 ."grey guifg=". s:cm2 ."grey"
224 exe "hi vikiList term=bold cterm=bold gui=bold ctermfg=". s:cm1 ."Cyan guifg=". s:cm1 ."Cyan"
225 HiLink vikiDescription vikiList
226 if g:vikiFancyHeadings
227 if &background == "light"
228 let hdhl="term=bold,underline cterm=bold gui=bold ctermfg=". s:cm1 ."Magenta guifg=".s:cm1."Magenta". s:hdfont
229 exe "hi vikiHeading1 ". hdhl ." guibg=#ffff00"
230 exe "hi vikiHeading2 ". hdhl ." guibg=#ffff30"
231 exe "hi vikiHeading3 ". hdhl ." guibg=#ffff60"
232 exe "hi vikiHeading4 ". hdhl ." guibg=#ffff90"
233 exe "hi vikiHeading5 ". hdhl ." guibg=#ffffb0"
234 exe "hi vikiHeading6 ". hdhl ." guibg=#ffffe0"
236 let hdhl="term=bold,underline cterm=bold gui=bold ctermfg=DarkMagenta guifg=DarkMagenta". s:hdfont
237 exe "hi vikiHeading1 ". hdhl ." guibg=#ffff00"
238 exe "hi vikiHeading2 ". hdhl ." guibg=#aadd00"
239 exe "hi vikiHeading3 ". hdhl ." guibg=#88aa00"
240 exe "hi vikiHeading4 ". hdhl ." guibg=#558800"
241 exe "hi vikiHeading5 ". hdhl ." guibg=#225500"
242 exe "hi vikiHeading6 ". hdhl ." guibg=#002200"
245 exe "hi vikiHeading term=bold,underline cterm=bold gui=bold ctermfg=". s:cm1 ."Magenta guifg=".s:cm1."Magenta". s:hdfont
248 let vikiPriorityListTodo = ' term=bold,underline cterm=bold gui=bold guifg=Black ctermfg=Black '
249 exec 'hi vikiPriorityListTodoGen'. vikiPriorityListTodo .'ctermbg=LightRed guibg=LightRed'
250 exec 'hi vikiPriorityListTodoA'. vikiPriorityListTodo .'ctermbg=Red guibg=Red'
251 exec 'hi vikiPriorityListTodoB'. vikiPriorityListTodo .'ctermbg=Brown guibg=Orange'
252 exec 'hi vikiPriorityListTodoC'. vikiPriorityListTodo .'ctermbg=Yellow guibg=Yellow'
253 exec 'hi vikiPriorityListTodoD'. vikiPriorityListTodo .'ctermbg=LightMagenta guibg=LightMagenta'
254 exec 'hi vikiPriorityListTodoE'. vikiPriorityListTodo .'ctermbg=LightYellow guibg=LightYellow'
255 exec 'hi vikiPriorityListTodoF'. vikiPriorityListTodo .'ctermbg=LightGreen guibg=LightGreen'
257 " let vikiPriorityListDone = ' guifg='. s:cm1 .'Gray '
258 " exec 'hi vikiPriorityListDoneA'. vikiPriorityListDone
259 " exec 'hi vikiPriorityListDoneB'. vikiPriorityListDone
260 " exec 'hi vikiPriorityListDoneC'. vikiPriorityListDone
261 " exec 'hi vikiPriorityListDoneD'. vikiPriorityListDone
262 " exec 'hi vikiPriorityListDoneE'. vikiPriorityListDone
263 " exec 'hi vikiPriorityListDoneF'. vikiPriorityListDone
264 HiLink vikiPriorityListDoneA Comment
265 HiLink vikiPriorityListDoneB Comment
266 HiLink vikiPriorityListDoneC Comment
267 HiLink vikiPriorityListDoneD Comment
268 HiLink vikiPriorityListDoneE Comment
269 HiLink vikiPriorityListDoneF Comment
270 HiLink vikiPriorityListDoneGen Comment
272 exe "hi vikiTableRowSep term=bold cterm=bold gui=bold ctermbg=". s:cm2 ."Grey guibg=". s:cm2 ."Grey"
274 exe "hi vikiSymbols term=bold cterm=bold gui=bold ctermfg=". s:cm1 ."Red guifg=". s:cm1 ."Red"
275 hi vikiMarkers term=bold cterm=bold gui=bold ctermfg=DarkRed guifg=DarkRed ctermbg=yellow guibg=yellow
276 hi vikiAnchor term=italic cterm=italic gui=italic ctermfg=grey guifg=grey
277 HiLink vikiComment Comment
278 HiLink vikiString String
280 if b:vikiTextstylesVer == 1
281 hi vikiContinousBold term=bold cterm=bold gui=bold
282 hi vikiContinousUnderline term=underline cterm=underline gui=underline
283 exe "hi vikiContinousTypewriter term=underline ctermfg=". s:cm1 ."Grey guifg=". s:cm1 ."Grey". s:twfont
284 HiLink vikiBold vikiContinousBold
285 HiLink vikiUnderline vikiContinousUnderline
286 HiLink vikiTypewriter vikiContinousTypewriter
288 " hi vikiBold term=italic,bold cterm=italic,bold gui=italic,bold
289 hi vikiBold term=bold,underline cterm=bold,underline gui=bold
290 exe "hi vikiTypewriter term=underline ctermfg=". s:cm1 ."Grey guifg=". s:cm1 ."Grey". s:twfont
293 HiLink vikiMacroHead Statement
294 HiLink vikiMacroDelim Identifier
295 HiLink vikiSkeleton Special
296 HiLink vikiCommand Statement
297 HiLink vikiRegion Statement
298 HiLink vikiRegionWEnd vikiRegion
299 HiLink vikiRegionAlt vikiRegion
300 HiLink vikiFilesRegion Statement
301 HiLink vikiFiles Constant
302 HiLink vikiFilesMarkers Ignore
303 HiLink vikiFilesIndicators Special
304 " HiLink vikiCommandNames Constant
305 " HiLink vikiRegionNames Constant
306 " HiLink vikiMacroNames Constant
307 HiLink vikiCommandNames Identifier
308 HiLink vikiRegionNames Identifier
309 HiLink vikiMacroNames Identifier
312 HiLink vikiTexSup Type
313 HiLink vikiTexSub Type
314 " HiLink vikiTexArgDelimiters Comment
315 HiLink vikiTexCommand Statement
316 HiLink vikiTexText Normal
317 HiLink vikiTexMathFont Type
318 HiLink vikiTexMathWord Identifier
319 HiLink vikiTexUnword Constant
320 HiLink vikiTexPairs PreProc
325 " if g:vikiMarkInexistent && !exists("b:vikiCheckInexistent")
326 if g:vikiMarkInexistent
327 call viki#MarkInexistentInitial()
330 let b:current_syntax = 'viki'