xref: /vim-8.2.3635/runtime/syntax/mma.vim (revision 6c391a74)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:     Mathematica
334cdc3e3SBram Moolenaar" Maintainer:   steve layland <[email protected]>
4b8ff1fb5SBram Moolenaar" Last Change:  2012 Feb 03 by Thilo Six
59e54a0e7SBram Moolenaar" Source:       http://members.wri.com/layland/vim/syntax/mma.vim
69e54a0e7SBram Moolenaar"               http://vim.sourceforge.net/scripts/script.php?script_id=1273
75c73622aSBram Moolenaar" Id:           $Id: mma.vim,v 1.4 2006/04/14 20:40:38 vimboss Exp $
834cdc3e3SBram Moolenaar" NOTE:
99e54a0e7SBram Moolenaar"
1034cdc3e3SBram Moolenaar" Empty .m files will automatically be presumed as Matlab files
1134cdc3e3SBram Moolenaar" unless you have the following in your .vimrc:
1234cdc3e3SBram Moolenaar"
1334cdc3e3SBram Moolenaar"       let filetype_m="mma"
1434cdc3e3SBram Moolenaar"
15*6c391a74SBram Moolenaar" I also recommend setting the default 'Comment' highlighting to something
1634cdc3e3SBram Moolenaar" other than the color used for 'Function', since both are plentiful in
1734cdc3e3SBram Moolenaar" most mathematica files, and they are often the same color (when using
18555b280fSBram Moolenaar" background=dark).
1934cdc3e3SBram Moolenaar"
2034cdc3e3SBram Moolenaar" Credits:
2134cdc3e3SBram Moolenaar" o  Original Mathematica syntax version written by
2234cdc3e3SBram Moolenaar"    Wolfgang Waltenberger <[email protected]>
2334cdc3e3SBram Moolenaar" o  Some ideas like the CommentStar,CommentTitle were adapted
2434cdc3e3SBram Moolenaar"    from the Java vim syntax file by Claudio Fleiner.  Thanks!
2534cdc3e3SBram Moolenaar" o  Everything else written by steve <[email protected]>
2634cdc3e3SBram Moolenaar"
279e54a0e7SBram Moolenaar" Bugs:
289e54a0e7SBram Moolenaar" o  Vim 6.1 didn't really have support for character classes
299e54a0e7SBram Moolenaar"    of other named character classes.  For example, [\a\d]
309e54a0e7SBram Moolenaar"    didn't work.  Therefore, a lot of this code uses explicit
319e54a0e7SBram Moolenaar"    character classes instead: [0-9a-zA-Z]
329e54a0e7SBram Moolenaar"
3334cdc3e3SBram Moolenaar" TODO:
3434cdc3e3SBram Moolenaar"   folding
3534cdc3e3SBram Moolenaar"   fix nesting
3634cdc3e3SBram Moolenaar"   finish populating popular symbols
37071d4279SBram Moolenaar
3889bcfda6SBram Moolenaar" quit when a syntax file was already loaded
3989bcfda6SBram Moolenaarif exists("b:current_syntax")
40071d4279SBram Moolenaar    finish
41071d4279SBram Moolenaarendif
42071d4279SBram Moolenaar
43b8ff1fb5SBram Moolenaarlet s:cpo_save = &cpo
44b8ff1fb5SBram Moolenaarset cpo&vim
45b8ff1fb5SBram Moolenaar
4634cdc3e3SBram Moolenaar" Group Definitions:
4734cdc3e3SBram Moolenaarsyntax cluster mmaNotes contains=mmaTodo,mmaFixme
4834cdc3e3SBram Moolenaarsyntax cluster mmaComments contains=mmaComment,mmaFunctionComment,mmaItem,mmaFunctionTitle,mmaCommentStar
4934cdc3e3SBram Moolenaarsyntax cluster mmaCommentStrings contains=mmaLooseQuote,mmaCommentString,mmaUnicode
5034cdc3e3SBram Moolenaarsyntax cluster mmaStrings contains=@mmaCommentStrings,mmaString
5134cdc3e3SBram Moolenaarsyntax cluster mmaTop contains=mmaOperator,mmaGenericFunction,mmaPureFunction,mmaVariable
52071d4279SBram Moolenaar
5334cdc3e3SBram Moolenaar" Predefined Constants:
5434cdc3e3SBram Moolenaar"   to list all predefined Symbols would be too insane...
5534cdc3e3SBram Moolenaar"   it's probably smarter to define a select few, and get the rest from
5634cdc3e3SBram Moolenaar"   context if absolutely necessary.
5734cdc3e3SBram Moolenaar"   TODO - populate this with other often used Symbols
58071d4279SBram Moolenaar
5934cdc3e3SBram Moolenaar" standard fixed symbols:
6034cdc3e3SBram Moolenaarsyntax keyword mmaVariable True False None Automatic All Null C General
61071d4279SBram Moolenaar
6234cdc3e3SBram Moolenaar" mathematical constants:
6334cdc3e3SBram Moolenaarsyntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher
6434cdc3e3SBram Moolenaar
6534cdc3e3SBram Moolenaar" stream data / atomic heads:
6634cdc3e3SBram Moolenaarsyntax keyword mmaVariable Byte Character Expression Number Real String Word EndOfFile Integer Symbol
6734cdc3e3SBram Moolenaar
6834cdc3e3SBram Moolenaar" sets:
6934cdc3e3SBram Moolenaarsyntax keyword mmaVariable Integers Complexes Reals Booleans Rationals
7034cdc3e3SBram Moolenaar
7134cdc3e3SBram Moolenaar" character classes:
7234cdc3e3SBram Moolenaarsyntax keyword mmaPattern DigitCharacter LetterCharacter WhitespaceCharacter WordCharacter EndOfString StartOfString EndOfLine StartOfLine WordBoundary
7334cdc3e3SBram Moolenaar
7434cdc3e3SBram Moolenaar" SelectionMove directions/units:
7534cdc3e3SBram Moolenaarsyntax keyword mmaVariable Next Previous After Before Character Word Expression TextLine CellContents Cell CellGroup EvaluationCell ButtonCell GeneratedCell Notebook
7634cdc3e3SBram Moolenaarsyntax keyword mmaVariable CellTags CellStyle CellLabel
7734cdc3e3SBram Moolenaar
7834cdc3e3SBram Moolenaar" TableForm positions:
7934cdc3e3SBram Moolenaarsyntax keyword mmaVariable Above Below Left Right
8034cdc3e3SBram Moolenaar
8134cdc3e3SBram Moolenaar" colors:
8234cdc3e3SBram Moolenaarsyntax keyword mmaVariable Black Blue Brown Cyan Gray Green Magenta Orange Pink Purple Red White Yellow
8334cdc3e3SBram Moolenaar
8434cdc3e3SBram Moolenaar" function attributes
8534cdc3e3SBram Moolenaarsyntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub
8634cdc3e3SBram Moolenaar
87555b280fSBram Moolenaar" Comment Sections:
88555b280fSBram Moolenaar"   this:
89555b280fSBram Moolenaar"   :that:
909e54a0e7SBram Moolenaarsyntax match mmaItem "\%(^[( |*\t]*\)\@<=\%(:\+\|\w\)\w\+\%( \w\+\)\{0,3}:" contained contains=@mmaNotes
9134cdc3e3SBram Moolenaar
9234cdc3e3SBram Moolenaar" Comment Keywords:
9334cdc3e3SBram Moolenaarsyntax keyword mmaTodo TODO NOTE HEY contained
9434cdc3e3SBram Moolenaarsyntax match mmaTodo "X\{3,}" contained
9534cdc3e3SBram Moolenaarsyntax keyword mmaFixme FIX[ME] FIXTHIS BROKEN contained
969e54a0e7SBram Moolenaarsyntax match mmaFixme "BUG\%( *\#\=[0-9]\+\)\=" contained
9734cdc3e3SBram Moolenaar" yay pirates...
9834cdc3e3SBram Moolenaarsyntax match mmaFixme "\%(Y\=A\+R\+G\+\|GRR\+\|CR\+A\+P\+\)\%(!\+\)\=" contained
9934cdc3e3SBram Moolenaar
100555b280fSBram Moolenaar" EmPHAsis:
101555b280fSBram Moolenaar" this unnecessary, but whatever :)
1029e54a0e7SBram Moolenaarsyntax match mmaemPHAsis "\%(^\|\s\)\([_/]\)[a-zA-Z0-9]\+\%([- \t':]\+[a-zA-Z0-9]\+\)*\1\%(\s\|$\)" contained contains=mmaemPHAsis
1039e54a0e7SBram Moolenaarsyntax match mmaemPHAsis "\%(^\|\s\)(\@<!\*[a-zA-Z0-9]\+\%([- \t':]\+[a-zA-Z0-9]\+\)*)\@!\*\%(\s\|$\)" contained contains=mmaemPHAsis
10434cdc3e3SBram Moolenaar
105555b280fSBram Moolenaar" Regular Comments:
10634cdc3e3SBram Moolenaar"   (* *)
10734cdc3e3SBram Moolenaar"   allow nesting (* (* *) *) even though the frontend
10834cdc3e3SBram Moolenaar"   won't always like it.
10934cdc3e3SBram Moolenaarsyntax region mmaComment start=+(\*+ end=+\*)+ skipempty contains=@mmaNotes,mmaItem,@mmaCommentStrings,mmaemPHAsis,mmaComment
11034cdc3e3SBram Moolenaar
11134cdc3e3SBram Moolenaar" Function Comments:
112*6c391a74SBram Moolenaar"   just like a normal comment except the first sentence is Special ala Java
11334cdc3e3SBram Moolenaar"   (** *)
11434cdc3e3SBram Moolenaar"   TODO - fix this for nesting, or not...
11534cdc3e3SBram Moolenaarsyntax region mmaFunctionComment start="(\*\*\+" end="\*\+)" contains=@mmaNotes,mmaItem,mmaFunctionTitle,@mmaCommentStrings,mmaemPHAsis,mmaComment
11634cdc3e3SBram Moolenaarsyntax region mmaFunctionTitle contained matchgroup=mmaFunctionComment start="\%((\*\*[ *]*\)" matchgroup=mmaFunctionTitle keepend end=".[.!-]\=\s*$" end="[.!-][ \t\r<&]"me=e-1 end="\%(\*\+)\)\@=" contained contains=@mmaNotes,mmaItem,mmaCommentStar
11734cdc3e3SBram Moolenaar
11834cdc3e3SBram Moolenaar" catch remaining (**********)'s
11934cdc3e3SBram Moolenaarsyntax match mmaComment "(\*\*\+)"
12034cdc3e3SBram Moolenaar" catch preceding *
12134cdc3e3SBram Moolenaarsyntax match mmaCommentStar "^\s*\*\+" contained
12234cdc3e3SBram Moolenaar
123555b280fSBram Moolenaar" Variables:
124555b280fSBram Moolenaar"   Dollar sign variables
1259e54a0e7SBram Moolenaarsyntax match mmaVariable "\$\a\+[0-9a-zA-Z$]*"
1269e54a0e7SBram Moolenaar
1279e54a0e7SBram Moolenaar"   Preceding and Following Contexts
1289e54a0e7SBram Moolenaarsyntax match mmaVariable "`[a-zA-Z$]\+[0-9a-zA-Z$]*" contains=mmaVariable
1299e54a0e7SBram Moolenaarsyntax match mmaVariable "[a-zA-Z$]\+[0-9a-zA-Z$]*`" contains=mmaVariable
130555b280fSBram Moolenaar
131555b280fSBram Moolenaar" Strings:
132555b280fSBram Moolenaar"   "string"
133555b280fSBram Moolenaar"   'string' is not accepted (until literal strings are supported!)
134555b280fSBram Moolenaarsyntax region mmaString start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+
135555b280fSBram Moolenaarsyntax region mmaCommentString oneline start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+ contained
136555b280fSBram Moolenaar
137555b280fSBram Moolenaar
13834cdc3e3SBram Moolenaar" Patterns:
13934cdc3e3SBram Moolenaar"   Each pattern marker below can be Blank[] (_), BlankSequence[] (__)
14034cdc3e3SBram Moolenaar"   or BlankNullSequence[] (___).  Most examples below can also be
14134cdc3e3SBram Moolenaar"   combined, for example Pattern tests with Default values.
14234cdc3e3SBram Moolenaar"
14334cdc3e3SBram Moolenaar"   _Head                   Anonymous patterns
14434cdc3e3SBram Moolenaar"   name_Head
14534cdc3e3SBram Moolenaar"   name:(_Head|_Head2)     Named patterns
14634cdc3e3SBram Moolenaar"
14734cdc3e3SBram Moolenaar"   _Head : val
14834cdc3e3SBram Moolenaar"   name:_Head:val          Default values
14934cdc3e3SBram Moolenaar"
15034cdc3e3SBram Moolenaar"   _Head?testQ,
15134cdc3e3SBram Moolenaar"   _Head?(test[#]&)        Pattern tests
15234cdc3e3SBram Moolenaar"
15334cdc3e3SBram Moolenaar"   name_Head/;test[name]   Conditionals
15434cdc3e3SBram Moolenaar"
15534cdc3e3SBram Moolenaar"   _Head:.                 Predefined Default
15634cdc3e3SBram Moolenaar"
15734cdc3e3SBram Moolenaar"   .. ...                  Pattern Repeat
15834cdc3e3SBram Moolenaar
15934cdc3e3SBram Moolenaarsyntax match mmaPatternError "\%(_\{4,}\|)\s*&\s*)\@!\)" contained
16034cdc3e3SBram Moolenaar
16134cdc3e3SBram Moolenaar"pattern name:
16234cdc3e3SBram Moolenaarsyntax match mmaPattern "[A-Za-z0-9`]\+\s*:\+[=>]\@!" contains=mmaOperator
16334cdc3e3SBram Moolenaar"pattern default:
16434cdc3e3SBram Moolenaarsyntax match mmaPattern ": *[^ ,]\+[\], ]\@=" contains=@mmaCommentStrings,@mmaTop,mmaOperator
16534cdc3e3SBram Moolenaar"pattern head/test:
16634cdc3e3SBram Moolenaarsyntax match mmaPattern "[A-Za-z0-9`]*_\+\%(\a\+\)\=\%(?([^)]\+)\|?[^\]},]\+\)\=" contains=@mmaTop,@mmaCommentStrings,mmaPatternError
16734cdc3e3SBram Moolenaar
16834cdc3e3SBram Moolenaar" Operators:
16934cdc3e3SBram Moolenaar"   /: ^= ^:=   UpValue
17034cdc3e3SBram Moolenaar"   /;          Conditional
17134cdc3e3SBram Moolenaar"   := =        DownValue
17234cdc3e3SBram Moolenaar"   == === ||
17334cdc3e3SBram Moolenaar"   != =!= &&   Logic
17434cdc3e3SBram Moolenaar"   >= <= < >
17534cdc3e3SBram Moolenaar"   += -= *=
17634cdc3e3SBram Moolenaar"   /= ++ --    Math
17734cdc3e3SBram Moolenaar"   ^*
17834cdc3e3SBram Moolenaar"   -> :>       Rules
17934cdc3e3SBram Moolenaar"   @@ @@@      Apply
18034cdc3e3SBram Moolenaar"   /@ //@      Map
18134cdc3e3SBram Moolenaar"   /. //.      Replace
18234cdc3e3SBram Moolenaar"   // @        Function application
18334cdc3e3SBram Moolenaar"   <> ~~       String/Pattern join
18434cdc3e3SBram Moolenaar"   ~           infix operator
18534cdc3e3SBram Moolenaar"   . :         Pattern operators
18634cdc3e3SBram Moolenaarsyntax match mmaOperator "\%(@\{1,3}\|//[.@]\=\)"
18734cdc3e3SBram Moolenaarsyntax match mmaOperator "\%(/[;:@.]\=\|\^\=:\==\)"
18834cdc3e3SBram Moolenaarsyntax match mmaOperator "\%([-:=]\=>\|<=\=\)"
18934cdc3e3SBram Moolenaar"syntax match mmaOperator "\%(++\=\|--\=\|[/+-*]=\|[^*]\)"
19034cdc3e3SBram Moolenaarsyntax match mmaOperator "[*+=^.:?-]"
19134cdc3e3SBram Moolenaarsyntax match mmaOperator "\%(\~\~\=\)"
19234cdc3e3SBram Moolenaarsyntax match mmaOperator "\%(=\{2,3}\|=\=!=\|||\=\|&&\|!\)" contains=ALLBUT,mmaPureFunction
19334cdc3e3SBram Moolenaar
1949e54a0e7SBram Moolenaar" Symbol Tags:
195555b280fSBram Moolenaar"   "SymbolName::item"
1969e54a0e7SBram Moolenaar"syntax match mmaSymbol "`\=[a-zA-Z$]\+[0-9a-zA-Z$]*\%(`\%([a-zA-Z$]\+[0-9a-zA-Z$]*\)\=\)*" contained
1979e54a0e7SBram Moolenaarsyntax match mmaMessage "`\=\([a-zA-Z$]\+[0-9a-zA-Z$]*\)\%(`\%([a-zA-Z$]\+[0-9a-zA-Z$]*\)\=\)*::\a\+" contains=mmaMessageType
1989e54a0e7SBram Moolenaarsyntax match mmaMessageType "::\a\+"hs=s+2 contained
199555b280fSBram Moolenaar
200555b280fSBram Moolenaar" Pure Functions:
201555b280fSBram Moolenaarsyntax match mmaPureFunction "#\%(#\|\d\+\)\="
202555b280fSBram Moolenaarsyntax match mmaPureFunction "&"
203555b280fSBram Moolenaar
204555b280fSBram Moolenaar" Named Functions:
205555b280fSBram Moolenaar" Since everything is pretty much a function, get this straight
206555b280fSBram Moolenaar" from context
207555b280fSBram Moolenaarsyntax match mmaGenericFunction "[A-Za-z0-9`]\+\s*\%([@[]\|/:\|/\=/@\)\@=" contains=mmaOperator
208555b280fSBram Moolenaarsyntax match mmaGenericFunction "\~\s*[^~]\+\s*\~"hs=s+1,he=e-1 contains=mmaOperator,mmaBoring
209555b280fSBram Moolenaarsyntax match mmaGenericFunction "//\s*[A-Za-z0-9`]\+"hs=s+2 contains=mmaOperator
210555b280fSBram Moolenaar
211555b280fSBram Moolenaar" Numbers:
212555b280fSBram Moolenaarsyntax match mmaNumber "\<\%(\d\+\.\=\d*\|\d*\.\=\d\+\)\>"
213555b280fSBram Moolenaarsyntax match mmaNumber "`\d\+\%(\d\@!\.\|\>\)"
21434cdc3e3SBram Moolenaar
21534cdc3e3SBram Moolenaar" Special Characters:
21634cdc3e3SBram Moolenaar"   \[Name]     named character
21734cdc3e3SBram Moolenaar"   \ooo        octal
21834cdc3e3SBram Moolenaar"   \.xx        2 digit hex
21934cdc3e3SBram Moolenaar"   \:xxxx      4 digit hex (multibyte unicode)
22034cdc3e3SBram Moolenaarsyntax match mmaUnicode "\\\[\w\+\d*\]"
22134cdc3e3SBram Moolenaarsyntax match mmaUnicode "\\\%(\x\{3}\|\.\x\{2}\|:\x\{4}\)"
22234cdc3e3SBram Moolenaar
22334cdc3e3SBram Moolenaar" Syntax Errors:
22434cdc3e3SBram Moolenaarsyntax match mmaError "\*)" containedin=ALLBUT,@mmaComments,@mmaStrings
2259e54a0e7SBram Moolenaarsyntax match mmaError "\%([/]{3,}\|[&:|+*?~-]\{3,}\|[.=]\{4,}\|_\@<=\.\{2,}\|`\{2,}\)" containedin=ALLBUT,@mmaComments,@mmaStrings
22634cdc3e3SBram Moolenaar
22734cdc3e3SBram Moolenaar" Punctuation:
22834cdc3e3SBram Moolenaar" things that shouldn't really be highlighted, or highlighted
22934cdc3e3SBram Moolenaar" in they're own group if you _really_ want. :)
23034cdc3e3SBram Moolenaar"  ( ) { }
23134cdc3e3SBram Moolenaar" TODO - use Delimiter group?
23234cdc3e3SBram Moolenaarsyntax match mmaBoring "[(){}]" contained
23334cdc3e3SBram Moolenaar
2349e54a0e7SBram Moolenaar" ------------------------------------
2359e54a0e7SBram Moolenaar"    future explorations...
2369e54a0e7SBram Moolenaar" ------------------------------------
23734cdc3e3SBram Moolenaar" Function Arguments:
23834cdc3e3SBram Moolenaar"   anything between brackets []
2399e54a0e7SBram Moolenaar"   (fold)
2409e54a0e7SBram Moolenaar"syntax region mmaArgument start="\[" end="\]" containedin=ALLBUT,@mmaComments,@mmaStrings transparent fold
2419e54a0e7SBram Moolenaar
2429e54a0e7SBram Moolenaar" Lists:
2439e54a0e7SBram Moolenaar"   (fold)
2449e54a0e7SBram Moolenaar"syntax region mmaLists start="{" end="}" containedin=ALLBUT,@mmaComments,@mmaStrings transparent fold
2459e54a0e7SBram Moolenaar
2469e54a0e7SBram Moolenaar" Regions:
2479e54a0e7SBram Moolenaar"   (fold)
2489e54a0e7SBram Moolenaar"syntax region mmaRegion start="(\*\+[^<]*<!--[^>]*\*\+)" end="--> \*)" containedin=ALLBUT,@mmaStrings transparent fold keepend
2499e54a0e7SBram Moolenaar
2509e54a0e7SBram Moolenaar" show fold text
2519e54a0e7SBram Moolenaarset commentstring='(*%s*)'
2529e54a0e7SBram Moolenaar"set foldtext=MmaFoldText()
2539e54a0e7SBram Moolenaar
2549e54a0e7SBram Moolenaar"function MmaFoldText()
2559e54a0e7SBram Moolenaar"    let line = getline(v:foldstart)
2569e54a0e7SBram Moolenaar"
2579e54a0e7SBram Moolenaar"    let lines = v:foldend-v:foldstart+1
2589e54a0e7SBram Moolenaar"
2599e54a0e7SBram Moolenaar"    let sub = substitute(line, '(\*\+|\*\+)|[-*_]\+', '', 'g')
2609e54a0e7SBram Moolenaar"
2619e54a0e7SBram Moolenaar"    if match(line, '(\*') != -1
2629e54a0e7SBram Moolenaar"        let lines = lines.' line comment'
2639e54a0e7SBram Moolenaar"    else
2649e54a0e7SBram Moolenaar"        let lines = lines.' lines'
2659e54a0e7SBram Moolenaar"    endif
2669e54a0e7SBram Moolenaar"
2679e54a0e7SBram Moolenaar"    return v:folddashes.' '.lines.' '.sub
2689e54a0e7SBram Moolenaar"endf
2699e54a0e7SBram Moolenaar
2709e54a0e7SBram Moolenaar"this is slow for computing folds, but it does so accurately
2719e54a0e7SBram Moolenaarsyntax sync fromstart
2729e54a0e7SBram Moolenaar
2739e54a0e7SBram Moolenaar" but this seems to do alright for non fold syntax coloring.
2749e54a0e7SBram Moolenaar" for folding, however, it doesn't get the nesting right.
2759e54a0e7SBram Moolenaar" TODO - find sync group for multiline modules? ick...
2769e54a0e7SBram Moolenaar
2779e54a0e7SBram Moolenaar" sync multi line comments
2789e54a0e7SBram Moolenaar"syntax sync match syncComments groupthere NONE "\*)"
2799e54a0e7SBram Moolenaar"syntax sync match syncComments groupthere mmaComment "(\*"
2809e54a0e7SBram Moolenaar
28134cdc3e3SBram Moolenaar"set foldmethod=syntax
2829e54a0e7SBram Moolenaar"set foldnestmax=1
2839e54a0e7SBram Moolenaar"set foldminlines=15
284071d4279SBram Moolenaar
285071d4279SBram Moolenaar
28634cdc3e3SBram Moolenaar" NOTE - the following links are not guaranteed to
28734cdc3e3SBram Moolenaar" look good under all colorschemes.  You might need to
28834cdc3e3SBram Moolenaar" :so $VIMRUNTIME/syntax/hitest.vim and tweak these to
28934cdc3e3SBram Moolenaar" look good in yours
29034cdc3e3SBram Moolenaar
2919e54a0e7SBram Moolenaar
292f37506f6SBram Moolenaarhi def link mmaComment           Comment
293f37506f6SBram Moolenaarhi def link mmaCommentStar       Comment
294f37506f6SBram Moolenaarhi def link mmaFunctionComment   Comment
295f37506f6SBram Moolenaarhi def link mmaLooseQuote        Comment
296f37506f6SBram Moolenaarhi def link mmaGenericFunction   Function
297f37506f6SBram Moolenaarhi def link mmaVariable          Identifier
298f37506f6SBram Moolenaar"    hi def link mmaSymbol            Identifier
299f37506f6SBram Moolenaarhi def link mmaOperator          Operator
300f37506f6SBram Moolenaarhi def link mmaPatternOp         Operator
301f37506f6SBram Moolenaarhi def link mmaPureFunction      Operator
302f37506f6SBram Moolenaarhi def link mmaString            String
303f37506f6SBram Moolenaarhi def link mmaCommentString     String
304f37506f6SBram Moolenaarhi def link mmaUnicode           String
305f37506f6SBram Moolenaarhi def link mmaMessage           Type
306f37506f6SBram Moolenaarhi def link mmaNumber            Type
307f37506f6SBram Moolenaarhi def link mmaPattern           Type
308f37506f6SBram Moolenaarhi def link mmaError             Error
309f37506f6SBram Moolenaarhi def link mmaFixme             Error
310f37506f6SBram Moolenaarhi def link mmaPatternError      Error
311f37506f6SBram Moolenaarhi def link mmaTodo              Todo
312f37506f6SBram Moolenaarhi def link mmaemPHAsis          Special
313f37506f6SBram Moolenaarhi def link mmaFunctionTitle     Special
314f37506f6SBram Moolenaarhi def link mmaMessageType       Special
315f37506f6SBram Moolenaarhi def link mmaItem              Preproc
316071d4279SBram Moolenaar
317071d4279SBram Moolenaar
318071d4279SBram Moolenaarlet b:current_syntax = "mma"
319b8ff1fb5SBram Moolenaar
320b8ff1fb5SBram Moolenaarlet &cpo = s:cpo_save
321b8ff1fb5SBram Moolenaarunlet s:cpo_save
322