diff options
Diffstat (limited to 'runtime/syntax/mma.vim')
-rw-r--r-- | runtime/syntax/mma.vim | 276 |
1 files changed, 240 insertions, 36 deletions
diff --git a/runtime/syntax/mma.vim b/runtime/syntax/mma.vim index 6eb8d66a9..e948b0a47 100644 --- a/runtime/syntax/mma.vim +++ b/runtime/syntax/mma.vim @@ -1,41 +1,229 @@ " Vim syntax file " Language: Mathematica -" Maintainer: Wolfgang Waltenberger <wwalten@ben.tuwien.ac.at> -" Last Change: Thu 26 Apr 2001 13:20:03 CEST +" Maintainer: steve layland <layland@wolfram.com> +" Last Change: Tue May 10 18:31:00 CDT 2005 +" Source: http://vim.sourceforge.net/scripts/script.php?script_id=1273 +" http://members.wri.com/layland/vim/syntax/mma.vim +" +" NOTE: +" Empty .m files will automatically be presumed as Matlab files +" unless you have the following in your .vimrc: +" +" let filetype_m="mma" +" +" I also recommend setting the default 'Comment' hilighting to something +" other than the color used for 'Function', since both are plentiful in +" most mathematica files, and they are often the same color (when using +" background=dark). I use +" +" hi Comment ctermfg=darkcyan +" +" darkgreen also looks good on my terminal. +" +" Credits: +" o Original Mathematica syntax version written by +" Wolfgang Waltenberger <wwalten@ben.tuwien.ac.at> +" o Some ideas like the CommentStar,CommentTitle were adapted +" from the Java vim syntax file by Claudio Fleiner. Thanks! +" o Everything else written by steve <layland@wolfram.com> +" +" TODO: +" folding +" fix nesting +" finish populating popular symbols if version < 600 syntax clear elseif exists("b:current_syntax") - finish + finish endif -syn match mmaError "\*)" -syn match mmaFixme "FIXME" -syn region mmaComment start=+(\*+ end=+\*)+ skipempty contains=mmaFixme -syn match mmaMessage "\a*::\a*" -syn region mmaString start=+'+ end=+'+ -syn region mmaString start=+"+ end=+"+ -syn region mmaString start=+\\\"+ end=+\"+ -syn region mmaString start=+\"+ end=+\"+ +" Group Definitions: +syntax cluster mmaNotes contains=mmaTodo,mmaFixme +syntax cluster mmaComments contains=mmaComment,mmaFunctionComment,mmaItem,mmaFunctionTitle,mmaCommentStar +syntax cluster mmaCommentStrings contains=mmaLooseQuote,mmaCommentString,mmaUnicode +syntax cluster mmaStrings contains=@mmaCommentStrings,mmaString +syntax cluster mmaTop contains=mmaOperator,mmaGenericFunction,mmaPureFunction,mmaVariable -syn match mmaVariable "$\a*" +" Variables: +" Dollar sign variables +syntax match mmaVariable "$\a\+\d*" +" Preceding contexts +syntax match mmaVariable "`\=\a\+\d*`" -syn match mmaPattern "[A-Za-z01-9`]*_\{1,3}" -syn match mmaPattern "[A-Za-z01-9`]*_\{1,3}\(Integer\|Real\|Pattern\|Symbol\)" -syn match mmaPattern "[A-Za-z01-9`]*_\{1,3}\(Rational\|Complex\|Head\)" -syn match mmaPattern "[A-Za-z01-9`]*_\{1,3}?[A-Za-z01-9`]*" +" Numbers: +syntax match mmaNumber "\<\%(\d\+\.\=\d*\|\d*\.\=\d\+\)\>" +syntax match mmaNumber "`\d\+\>" -" prefix/infix/postfix notations -syn match mmaGenericFunction "[A-Za-z01-9`]*\s*\(\[\|@\)"he=e-1 -syn match mmaGenericFunction "[A-Za-z01-9`]*\s*\(/@\|@@\)"he=e-2 -syn match mmaGenericFunction "\~\s*[A-Za-z01-9`]*\s*\~"hs=s+1,he=e-1 -syn match mmaGenericFunction "//\s*[A-Za-z01-9`]*"hs=s+2 -syn match mmaOperator "/;" +" Predefined Constants: +" to list all predefined Symbols would be too insane... +" it's probably smarter to define a select few, and get the rest from +" context if absolutely necessary. +" TODO - populate this with other often used Symbols -syn match mmaPureFunction "#\d*" -syn match mmaPureFunction "&" +" standard fixed symbols: +syntax keyword mmaVariable True False None Automatic All Null C General -syn match mmaUnicode "\\\[[a-zA-Z01-9]*\]" +" mathematical constants: +syntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher + +" stream data / atomic heads: +syntax keyword mmaVariable Byte Character Expression Number Real String Word EndOfFile Integer Symbol + +" sets: +syntax keyword mmaVariable Integers Complexes Reals Booleans Rationals + +" character classes: +syntax keyword mmaPattern DigitCharacter LetterCharacter WhitespaceCharacter WordCharacter EndOfString StartOfString EndOfLine StartOfLine WordBoundary + +" SelectionMove directions/units: +syntax keyword mmaVariable Next Previous After Before Character Word Expression TextLine CellContents Cell CellGroup EvaluationCell ButtonCell GeneratedCell Notebook +syntax keyword mmaVariable CellTags CellStyle CellLabel + +" TableForm positions: +syntax keyword mmaVariable Above Below Left Right + +" colors: +syntax keyword mmaVariable Black Blue Brown Cyan Gray Green Magenta Orange Pink Purple Red White Yellow + +" function attributes +syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub + +" Strings: +" "string" +" 'string' is not accepted (until literal strings are supported!) +syntax region mmaString start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+ +syntax region mmaCommentString oneline start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+ contained + +" Function Usage Messages: +" "SymbolName::item" +syntax match mmaMessage "$\=\a\+\d*::\a\+\d*" + +" Pure Functions: +syntax match mmaPureFunction "#\%(#\|\d\+\)\=" +syntax match mmaPureFunction "&" + +" Named Functions: +" Since everything is pretty much a function, get this straight +" from context +syntax match mmaGenericFunction "[A-Za-z0-9`]\+\s*\%([@[]\|/:\|/\=/@\)\@=" contains=mmaOperator +syntax match mmaGenericFunction "\~\s*[^~]\+\s*\~"hs=s+1,he=e-1 contains=mmaOperator,mmaBoring +syntax match mmaGenericFunction "//\s*[A-Za-z0-9`]\+"hs=s+2 contains=mmaOperator + +" Comment Keywords: +syntax keyword mmaTodo TODO NOTE HEY contained +syntax match mmaTodo "X\{3,}" contained +syntax keyword mmaFixme FIX[ME] FIXTHIS BROKEN contained +" yay pirates... +syntax match mmaFixme "\%(Y\=A\+R\+G\+\|GRR\+\|CR\+A\+P\+\)\%(!\+\)\=" contained +syntax match mmaemPHAsis "\(_\+\)[ a-zA-Z0-9]\+\1" contained + +" Comment Sections: +" this: +" :that: +syntax match mmaItem "\%(^[( |*\t]*\)\@<=\%(:\+\|\a\)[a-zA-Z0-9 ]\+:" contained contains=@mmaNotes + +" Actual Mathematica Comments: +" (* *) +" allow nesting (* (* *) *) even though the frontend +" won't always like it. +syntax region mmaComment start=+(\*+ end=+\*)+ skipempty contains=@mmaNotes,mmaItem,@mmaCommentStrings,mmaemPHAsis,mmaComment + +" Function Comments: +" just like a normal comment except the first sentance is Special ala Java +" (** *) +" TODO - fix this for nesting, or not... +syntax region mmaFunctionComment start="(\*\*\+" end="\*\+)" contains=@mmaNotes,mmaItem,mmaFunctionTitle,@mmaCommentStrings,mmaemPHAsis,mmaComment +syntax region mmaFunctionTitle contained matchgroup=mmaFunctionComment start="\%((\*\*[ *]*\)" matchgroup=mmaFunctionTitle keepend end=".[.!-]\=\s*$" end="[.!-][ \t\r<&]"me=e-1 end="\%(\*\+)\)\@=" contained contains=@mmaNotes,mmaItem,mmaCommentStar + +" catch remaining (**********)'s +syntax match mmaComment "(\*\*\+)" +" catch preceding * +syntax match mmaCommentStar "^\s*\*\+" contained + +" Patterns: +" Each pattern marker below can be Blank[] (_), BlankSequence[] (__) +" or BlankNullSequence[] (___). Most examples below can also be +" combined, for example Pattern tests with Default values. +" +" _Head Anonymous patterns +" name_Head +" name:(_Head|_Head2) Named patterns +" +" _Head : val +" name:_Head:val Default values +" +" _Head?testQ, +" _Head?(test[#]&) Pattern tests +" +" name_Head/;test[name] Conditionals +" +" _Head:. Predefined Default +" +" .. ... Pattern Repeat + +syntax match mmaPatternError "\%(_\{4,}\|)\s*&\s*)\@!\)" contained + +"pattern name: +syntax match mmaPattern "[A-Za-z0-9`]\+\s*:\+[=>]\@!" contains=mmaOperator +"pattern default: +syntax match mmaPattern ": *[^ ,]\+[\], ]\@=" contains=@mmaCommentStrings,@mmaTop,mmaOperator +"pattern head/test: +syntax match mmaPattern "[A-Za-z0-9`]*_\+\%(\a\+\)\=\%(?([^)]\+)\|?[^\]},]\+\)\=" contains=@mmaTop,@mmaCommentStrings,mmaPatternError + +" Operators: +" /: ^= ^:= UpValue +" /; Conditional +" := = DownValue +" == === || +" != =!= && Logic +" >= <= < > +" += -= *= +" /= ++ -- Math +" ^* +" -> :> Rules +" @@ @@@ Apply +" /@ //@ Map +" /. //. Replace +" // @ Function application +" <> ~~ String/Pattern join +" ~ infix operator +" . : Pattern operators +syntax match mmaOperator "\%(@\{1,3}\|//[.@]\=\)" +syntax match mmaOperator "\%(/[;:@.]\=\|\^\=:\==\)" +syntax match mmaOperator "\%([-:=]\=>\|<=\=\)" +"syntax match mmaOperator "\%(++\=\|--\=\|[/+-*]=\|[^*]\)" +syntax match mmaOperator "[*+=^.:?-]" +syntax match mmaOperator "\%(\~\~\=\)" +syntax match mmaOperator "\%(=\{2,3}\|=\=!=\|||\=\|&&\|!\)" contains=ALLBUT,mmaPureFunction + + +" Special Characters: +" \[Name] named character +" \ooo octal +" \.xx 2 digit hex +" \:xxxx 4 digit hex (multibyte unicode) +syntax match mmaUnicode "\\\[\w\+\d*\]" +syntax match mmaUnicode "\\\%(\x\{3}\|\.\x\{2}\|:\x\{4}\)" + +" Syntax Errors: +syntax match mmaError "\*)" containedin=ALLBUT,@mmaComments,@mmaStrings +syntax match mmaError "\%([&:|+*/?~-]\{3,}\|[.=]\{4,}\|_\@<=\.\{2,}\|`\{2,}\)" containedin=ALLBUT,@mmaComments,@mmaStrings + +" Punctuation: +" things that shouldn't really be highlighted, or highlighted +" in they're own group if you _really_ want. :) +" ( ) { } +" TODO - use Delimiter group? +syntax match mmaBoring "[(){}]" contained + +" Function Arguments: +" anything between brackets [] +" TODO - make good folds for this. +"syntax region mmaArgument start="\[" end="]" containedin=ALLBUT,@mmaComments,@mmaCommentStrings transparent fold +"syntax sync fromstart +"set foldmethod=syntax +"set foldminlines=10 if version >= 508 || !exists("did_mma_syn_inits") if version < 508 @@ -45,17 +233,33 @@ if version >= 508 || !exists("did_mma_syn_inits") command -nargs=+ HiLink hi def link <args> endif - HiLink mmaOperator Operator - HiLink mmaVariable Identifier - HiLink mmaString String - HiLink mmaUnicode String - HiLink mmaMessage Identifier - HiLink mmaPattern Identifier - HiLink mmaGenericFunction Function - HiLink mmaError Error - HiLink mmaFixme Error - HiLink mmaComment Comment - HiLink mmaPureFunction Operator + " NOTE - the following links are not guaranteed to + " look good under all colorschemes. You might need to + " :so $VIMRUNTIME/syntax/hitest.vim and tweak these to + " look good in yours + + HiLink mmaComment Comment + HiLink mmaCommentStar Comment + HiLink mmaFunctionComment Comment + HiLink mmaLooseQuote Comment + HiLink mmaGenericFunction Function + HiLink mmaOperator Operator + HiLink mmaPatternOp Operator + HiLink mmaPureFunction Operator + HiLink mmaVariable Identifier + HiLink mmaString String + HiLink mmaCommentString String + HiLink mmaUnicode String + HiLink mmaMessage Type + HiLink mmaNumber Type + HiLink mmaPattern Type + HiLink mmaError Error + HiLink mmaFixme Error + HiLink mmaPatternError Error + HiLink mmaTodo Todo + HiLink mmaemPHAsis Special + HiLink mmaFunctionTitle Special + HiLink mmaItem Preproc delcommand HiLink endif |