blob: 37988ed078d58272724fa22cb764258a69bbb1c2 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Mathematica
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +00003" Maintainer: steve layland <layland@wolfram.com>
4" Last Change: Tue May 10 18:31:00 CDT 2005
5" Source: http://vim.sourceforge.net/scripts/script.php?script_id=1273
6" http://members.wri.com/layland/vim/syntax/mma.vim
7"
8" NOTE:
9" Empty .m files will automatically be presumed as Matlab files
10" unless you have the following in your .vimrc:
11"
12" let filetype_m="mma"
13"
14" I also recommend setting the default 'Comment' hilighting to something
15" other than the color used for 'Function', since both are plentiful in
16" most mathematica files, and they are often the same color (when using
Bram Moolenaar555b2802005-05-19 21:08:39 +000017" background=dark).
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000018"
19" Credits:
20" o Original Mathematica syntax version written by
21" Wolfgang Waltenberger <wwalten@ben.tuwien.ac.at>
22" o Some ideas like the CommentStar,CommentTitle were adapted
23" from the Java vim syntax file by Claudio Fleiner. Thanks!
24" o Everything else written by steve <layland@wolfram.com>
25"
26" TODO:
27" folding
28" fix nesting
29" finish populating popular symbols
Bram Moolenaar071d4272004-06-13 20:20:40 +000030
31if version < 600
32 syntax clear
33elseif exists("b:current_syntax")
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000034 finish
Bram Moolenaar071d4272004-06-13 20:20:40 +000035endif
36
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000037" Group Definitions:
38syntax cluster mmaNotes contains=mmaTodo,mmaFixme
39syntax cluster mmaComments contains=mmaComment,mmaFunctionComment,mmaItem,mmaFunctionTitle,mmaCommentStar
40syntax cluster mmaCommentStrings contains=mmaLooseQuote,mmaCommentString,mmaUnicode
41syntax cluster mmaStrings contains=@mmaCommentStrings,mmaString
42syntax cluster mmaTop contains=mmaOperator,mmaGenericFunction,mmaPureFunction,mmaVariable
Bram Moolenaar071d4272004-06-13 20:20:40 +000043
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000044" Predefined Constants:
45" to list all predefined Symbols would be too insane...
46" it's probably smarter to define a select few, and get the rest from
47" context if absolutely necessary.
48" TODO - populate this with other often used Symbols
Bram Moolenaar071d4272004-06-13 20:20:40 +000049
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000050" standard fixed symbols:
51syntax keyword mmaVariable True False None Automatic All Null C General
Bram Moolenaar071d4272004-06-13 20:20:40 +000052
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000053" mathematical constants:
54syntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher
55
56" stream data / atomic heads:
57syntax keyword mmaVariable Byte Character Expression Number Real String Word EndOfFile Integer Symbol
58
59" sets:
60syntax keyword mmaVariable Integers Complexes Reals Booleans Rationals
61
62" character classes:
63syntax keyword mmaPattern DigitCharacter LetterCharacter WhitespaceCharacter WordCharacter EndOfString StartOfString EndOfLine StartOfLine WordBoundary
64
65" SelectionMove directions/units:
66syntax keyword mmaVariable Next Previous After Before Character Word Expression TextLine CellContents Cell CellGroup EvaluationCell ButtonCell GeneratedCell Notebook
67syntax keyword mmaVariable CellTags CellStyle CellLabel
68
69" TableForm positions:
70syntax keyword mmaVariable Above Below Left Right
71
72" colors:
73syntax keyword mmaVariable Black Blue Brown Cyan Gray Green Magenta Orange Pink Purple Red White Yellow
74
75" function attributes
76syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub
77
Bram Moolenaar555b2802005-05-19 21:08:39 +000078" Comment Sections:
79" this:
80" :that:
81syntax match mmaItem "\%(^[( |*\t]*\)\@<=\%(:\+\|\a\)[a-zA-Z0-9 ]\+:" contained contains=@mmaNotes
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000082
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000083" Comment Keywords:
84syntax keyword mmaTodo TODO NOTE HEY contained
85syntax match mmaTodo "X\{3,}" contained
86syntax keyword mmaFixme FIX[ME] FIXTHIS BROKEN contained
87" yay pirates...
88syntax match mmaFixme "\%(Y\=A\+R\+G\+\|GRR\+\|CR\+A\+P\+\)\%(!\+\)\=" contained
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000089
Bram Moolenaar555b2802005-05-19 21:08:39 +000090" EmPHAsis:
91" this unnecessary, but whatever :)
92syntax match mmaemPHAsis "\%(^\|\s\)\([_/]\)[a-zA-Z0-9]\+\%(\s\+[a-zA-Z0-9]\+\)*\1\%(\s\|$\)" contained contains=mmaemPHAsis
93syntax match mmaemPHAsis "\%(^\|\s\)(\@<!\*[a-zA-Z0-9]\+\%(\s\+[a-zA-Z0-9]\+\)*)\@!\*\%(\s\|$\)" contained contains=mmaemPHAsis
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000094
Bram Moolenaar555b2802005-05-19 21:08:39 +000095" Regular Comments:
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +000096" (* *)
97" allow nesting (* (* *) *) even though the frontend
98" won't always like it.
99syntax region mmaComment start=+(\*+ end=+\*)+ skipempty contains=@mmaNotes,mmaItem,@mmaCommentStrings,mmaemPHAsis,mmaComment
100
101" Function Comments:
102" just like a normal comment except the first sentance is Special ala Java
103" (** *)
104" TODO - fix this for nesting, or not...
105syntax region mmaFunctionComment start="(\*\*\+" end="\*\+)" contains=@mmaNotes,mmaItem,mmaFunctionTitle,@mmaCommentStrings,mmaemPHAsis,mmaComment
106syntax region mmaFunctionTitle contained matchgroup=mmaFunctionComment start="\%((\*\*[ *]*\)" matchgroup=mmaFunctionTitle keepend end=".[.!-]\=\s*$" end="[.!-][ \t\r<&]"me=e-1 end="\%(\*\+)\)\@=" contained contains=@mmaNotes,mmaItem,mmaCommentStar
107
108" catch remaining (**********)'s
109syntax match mmaComment "(\*\*\+)"
110" catch preceding *
111syntax match mmaCommentStar "^\s*\*\+" contained
112
Bram Moolenaar555b2802005-05-19 21:08:39 +0000113" Variables:
114" Dollar sign variables
115syntax match mmaVariable "$\a\+\d*"
116" Preceding contexts
117syntax match mmaVariable "`\=\a\+\d*`"
118
119" Strings:
120" "string"
121" 'string' is not accepted (until literal strings are supported!)
122syntax region mmaString start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+
123syntax region mmaCommentString oneline start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+ contained
124
125
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +0000126" Patterns:
127" Each pattern marker below can be Blank[] (_), BlankSequence[] (__)
128" or BlankNullSequence[] (___). Most examples below can also be
129" combined, for example Pattern tests with Default values.
130"
131" _Head Anonymous patterns
132" name_Head
133" name:(_Head|_Head2) Named patterns
134"
135" _Head : val
136" name:_Head:val Default values
137"
138" _Head?testQ,
139" _Head?(test[#]&) Pattern tests
140"
141" name_Head/;test[name] Conditionals
142"
143" _Head:. Predefined Default
144"
145" .. ... Pattern Repeat
146
147syntax match mmaPatternError "\%(_\{4,}\|)\s*&\s*)\@!\)" contained
148
149"pattern name:
150syntax match mmaPattern "[A-Za-z0-9`]\+\s*:\+[=>]\@!" contains=mmaOperator
151"pattern default:
152syntax match mmaPattern ": *[^ ,]\+[\], ]\@=" contains=@mmaCommentStrings,@mmaTop,mmaOperator
153"pattern head/test:
154syntax match mmaPattern "[A-Za-z0-9`]*_\+\%(\a\+\)\=\%(?([^)]\+)\|?[^\]},]\+\)\=" contains=@mmaTop,@mmaCommentStrings,mmaPatternError
155
156" Operators:
157" /: ^= ^:= UpValue
158" /; Conditional
159" := = DownValue
160" == === ||
161" != =!= && Logic
162" >= <= < >
163" += -= *=
164" /= ++ -- Math
165" ^*
166" -> :> Rules
167" @@ @@@ Apply
168" /@ //@ Map
169" /. //. Replace
170" // @ Function application
171" <> ~~ String/Pattern join
172" ~ infix operator
173" . : Pattern operators
174syntax match mmaOperator "\%(@\{1,3}\|//[.@]\=\)"
175syntax match mmaOperator "\%(/[;:@.]\=\|\^\=:\==\)"
176syntax match mmaOperator "\%([-:=]\=>\|<=\=\)"
177"syntax match mmaOperator "\%(++\=\|--\=\|[/+-*]=\|[^*]\)"
178syntax match mmaOperator "[*+=^.:?-]"
179syntax match mmaOperator "\%(\~\~\=\)"
180syntax match mmaOperator "\%(=\{2,3}\|=\=!=\|||\=\|&&\|!\)" contains=ALLBUT,mmaPureFunction
181
Bram Moolenaar555b2802005-05-19 21:08:39 +0000182" Function Usage Messages:
183" "SymbolName::item"
184syntax match mmaMessage "$\=\a\+\d*::\a\+\d*"
185
186" Pure Functions:
187syntax match mmaPureFunction "#\%(#\|\d\+\)\="
188syntax match mmaPureFunction "&"
189
190" Named Functions:
191" Since everything is pretty much a function, get this straight
192" from context
193syntax match mmaGenericFunction "[A-Za-z0-9`]\+\s*\%([@[]\|/:\|/\=/@\)\@=" contains=mmaOperator
194syntax match mmaGenericFunction "\~\s*[^~]\+\s*\~"hs=s+1,he=e-1 contains=mmaOperator,mmaBoring
195syntax match mmaGenericFunction "//\s*[A-Za-z0-9`]\+"hs=s+2 contains=mmaOperator
196
197" Numbers:
198syntax match mmaNumber "\<\%(\d\+\.\=\d*\|\d*\.\=\d\+\)\>"
199syntax match mmaNumber "`\d\+\%(\d\@!\.\|\>\)"
200
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +0000201" Special Characters:
202" \[Name] named character
203" \ooo octal
204" \.xx 2 digit hex
205" \:xxxx 4 digit hex (multibyte unicode)
206syntax match mmaUnicode "\\\[\w\+\d*\]"
207syntax match mmaUnicode "\\\%(\x\{3}\|\.\x\{2}\|:\x\{4}\)"
208
209" Syntax Errors:
210syntax match mmaError "\*)" containedin=ALLBUT,@mmaComments,@mmaStrings
211syntax match mmaError "\%([&:|+*/?~-]\{3,}\|[.=]\{4,}\|_\@<=\.\{2,}\|`\{2,}\)" containedin=ALLBUT,@mmaComments,@mmaStrings
212
213" Punctuation:
214" things that shouldn't really be highlighted, or highlighted
215" in they're own group if you _really_ want. :)
216" ( ) { }
217" TODO - use Delimiter group?
218syntax match mmaBoring "[(){}]" contained
219
220" Function Arguments:
221" anything between brackets []
222" TODO - make good folds for this.
223"syntax region mmaArgument start="\[" end="]" containedin=ALLBUT,@mmaComments,@mmaCommentStrings transparent fold
224"syntax sync fromstart
225"set foldmethod=syntax
226"set foldminlines=10
Bram Moolenaar071d4272004-06-13 20:20:40 +0000227
228if version >= 508 || !exists("did_mma_syn_inits")
229 if version < 508
230 let did_mma_syn_inits = 1
231 command -nargs=+ HiLink hi link <args>
232 else
233 command -nargs=+ HiLink hi def link <args>
234 endif
235
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +0000236 " NOTE - the following links are not guaranteed to
237 " look good under all colorschemes. You might need to
238 " :so $VIMRUNTIME/syntax/hitest.vim and tweak these to
239 " look good in yours
240
241 HiLink mmaComment Comment
242 HiLink mmaCommentStar Comment
243 HiLink mmaFunctionComment Comment
244 HiLink mmaLooseQuote Comment
245 HiLink mmaGenericFunction Function
Bram Moolenaar555b2802005-05-19 21:08:39 +0000246 HiLink mmaVariable Identifier
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +0000247 HiLink mmaOperator Operator
248 HiLink mmaPatternOp Operator
249 HiLink mmaPureFunction Operator
Bram Moolenaar34cdc3e2005-05-18 22:24:46 +0000250 HiLink mmaString String
251 HiLink mmaCommentString String
252 HiLink mmaUnicode String
253 HiLink mmaMessage Type
254 HiLink mmaNumber Type
255 HiLink mmaPattern Type
256 HiLink mmaError Error
257 HiLink mmaFixme Error
258 HiLink mmaPatternError Error
259 HiLink mmaTodo Todo
260 HiLink mmaemPHAsis Special
261 HiLink mmaFunctionTitle Special
262 HiLink mmaItem Preproc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263
264 delcommand HiLink
265endif
266
267let b:current_syntax = "mma"