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