summaryrefslogtreecommitdiff
path: root/runtime/syntax/mma.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/mma.vim')
-rw-r--r--runtime/syntax/mma.vim276
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