home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / runtime / dos / syntax / mma.vim < prev    next >
Encoding:
Text File  |  2012-05-31  |  12.0 KB  |  332 lines

  1. " Vim syntax file
  2. " Language:     Mathematica
  3. " Maintainer:   steve layland <layland@wolfram.com>
  4. " Last Change:  2012 Feb 03 by Thilo Six
  5. " Source:       http://members.wri.com/layland/vim/syntax/mma.vim
  6. "               http://vim.sourceforge.net/scripts/script.php?script_id=1273
  7. " Id:           $Id: mma.vim,v 1.4 2006/04/14 20:40:38 vimboss Exp $
  8. " NOTE:
  9. "
  10. " Empty .m files will automatically be presumed as Matlab files
  11. " unless you have the following in your .vimrc:
  12. "
  13. "       let filetype_m="mma"
  14. "
  15. " I also recommend setting the default 'Comment' hilighting to something
  16. " other than the color used for 'Function', since both are plentiful in
  17. " most mathematica files, and they are often the same color (when using
  18. " background=dark).
  19. "
  20. " Credits:
  21. " o  Original Mathematica syntax version written by
  22. "    Wolfgang Waltenberger <wwalten@ben.tuwien.ac.at>
  23. " o  Some ideas like the CommentStar,CommentTitle were adapted
  24. "    from the Java vim syntax file by Claudio Fleiner.  Thanks!
  25. " o  Everything else written by steve <layland@wolfram.com>
  26. "
  27. " Bugs:
  28. " o  Vim 6.1 didn't really have support for character classes
  29. "    of other named character classes.  For example, [\a\d]
  30. "    didn't work.  Therefore, a lot of this code uses explicit
  31. "    character classes instead: [0-9a-zA-Z]
  32. "
  33. " TODO:
  34. "   folding
  35. "   fix nesting
  36. "   finish populating popular symbols
  37.  
  38. if version < 600
  39.     syntax clear
  40. elseif exists("b:current_syntax")
  41.     finish
  42. endif
  43.  
  44. let s:cpo_save = &cpo
  45. set cpo&vim
  46.  
  47. " Group Definitions:
  48. syntax cluster mmaNotes contains=mmaTodo,mmaFixme
  49. syntax cluster mmaComments contains=mmaComment,mmaFunctionComment,mmaItem,mmaFunctionTitle,mmaCommentStar
  50. syntax cluster mmaCommentStrings contains=mmaLooseQuote,mmaCommentString,mmaUnicode
  51. syntax cluster mmaStrings contains=@mmaCommentStrings,mmaString
  52. syntax cluster mmaTop contains=mmaOperator,mmaGenericFunction,mmaPureFunction,mmaVariable
  53.  
  54. " Predefined Constants:
  55. "   to list all predefined Symbols would be too insane...
  56. "   it's probably smarter to define a select few, and get the rest from
  57. "   context if absolutely necessary.
  58. "   TODO - populate this with other often used Symbols
  59.  
  60. " standard fixed symbols:
  61. syntax keyword mmaVariable True False None Automatic All Null C General
  62.  
  63. " mathematical constants:
  64. syntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher
  65.  
  66. " stream data / atomic heads:
  67. syntax keyword mmaVariable Byte Character Expression Number Real String Word EndOfFile Integer Symbol
  68.  
  69. " sets:
  70. syntax keyword mmaVariable Integers Complexes Reals Booleans Rationals
  71.  
  72. " character classes:
  73. syntax keyword mmaPattern DigitCharacter LetterCharacter WhitespaceCharacter WordCharacter EndOfString StartOfString EndOfLine StartOfLine WordBoundary
  74.  
  75. " SelectionMove directions/units:
  76. syntax keyword mmaVariable Next Previous After Before Character Word Expression TextLine CellContents Cell CellGroup EvaluationCell ButtonCell GeneratedCell Notebook
  77. syntax keyword mmaVariable CellTags CellStyle CellLabel
  78.  
  79. " TableForm positions:
  80. syntax keyword mmaVariable Above Below Left Right
  81.  
  82. " colors:
  83. syntax keyword mmaVariable Black Blue Brown Cyan Gray Green Magenta Orange Pink Purple Red White Yellow
  84.  
  85. " function attributes
  86. syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub
  87.  
  88. " Comment Sections:
  89. "   this:
  90. "   :that:
  91. syntax match mmaItem "\%(^[( |*\t]*\)\@<=\%(:\+\|\w\)\w\+\%( \w\+\)\{0,3}:" contained contains=@mmaNotes
  92.  
  93. " Comment Keywords:
  94. syntax keyword mmaTodo TODO NOTE HEY contained
  95. syntax match mmaTodo "X\{3,}" contained
  96. syntax keyword mmaFixme FIX[ME] FIXTHIS BROKEN contained
  97. syntax match mmaFixme "BUG\%( *\#\=[0-9]\+\)\=" contained
  98. " yay pirates...
  99. syntax match mmaFixme "\%(Y\=A\+R\+G\+\|GRR\+\|CR\+A\+P\+\)\%(!\+\)\=" contained
  100.  
  101. " EmPHAsis:
  102. " this unnecessary, but whatever :)
  103. syntax match mmaemPHAsis "\%(^\|\s\)\([_/]\)[a-zA-Z0-9]\+\%([- \t':]\+[a-zA-Z0-9]\+\)*\1\%(\s\|$\)" contained contains=mmaemPHAsis
  104. syntax match mmaemPHAsis "\%(^\|\s\)(\@<!\*[a-zA-Z0-9]\+\%([- \t':]\+[a-zA-Z0-9]\+\)*)\@!\*\%(\s\|$\)" contained contains=mmaemPHAsis
  105.  
  106. " Regular Comments:
  107. "   (* *)
  108. "   allow nesting (* (* *) *) even though the frontend
  109. "   won't always like it.
  110. syntax region mmaComment start=+(\*+ end=+\*)+ skipempty contains=@mmaNotes,mmaItem,@mmaCommentStrings,mmaemPHAsis,mmaComment
  111.  
  112. " Function Comments:
  113. "   just like a normal comment except the first sentance is Special ala Java
  114. "   (** *)
  115. "   TODO - fix this for nesting, or not...
  116. syntax region mmaFunctionComment start="(\*\*\+" end="\*\+)" contains=@mmaNotes,mmaItem,mmaFunctionTitle,@mmaCommentStrings,mmaemPHAsis,mmaComment
  117. syntax region mmaFunctionTitle contained matchgroup=mmaFunctionComment start="\%((\*\*[ *]*\)" matchgroup=mmaFunctionTitle keepend end=".[.!-]\=\s*$" end="[.!-][ \t\r<&]"me=e-1 end="\%(\*\+)\)\@=" contained contains=@mmaNotes,mmaItem,mmaCommentStar
  118.  
  119. " catch remaining (**********)'s
  120. syntax match mmaComment "(\*\*\+)"
  121. " catch preceding *
  122. syntax match mmaCommentStar "^\s*\*\+" contained
  123.  
  124. " Variables:
  125. "   Dollar sign variables
  126. syntax match mmaVariable "\$\a\+[0-9a-zA-Z$]*"
  127.  
  128. "   Preceding and Following Contexts
  129. syntax match mmaVariable "`[a-zA-Z$]\+[0-9a-zA-Z$]*" contains=mmaVariable
  130. syntax match mmaVariable "[a-zA-Z$]\+[0-9a-zA-Z$]*`" contains=mmaVariable
  131.  
  132. " Strings:
  133. "   "string"
  134. "   'string' is not accepted (until literal strings are supported!)
  135. syntax region mmaString start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+
  136. syntax region mmaCommentString oneline start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"+ end=+"+ contained
  137.  
  138.  
  139. " Patterns:
  140. "   Each pattern marker below can be Blank[] (_), BlankSequence[] (__)
  141. "   or BlankNullSequence[] (___).  Most examples below can also be
  142. "   combined, for example Pattern tests with Default values.
  143. "
  144. "   _Head                   Anonymous patterns
  145. "   name_Head
  146. "   name:(_Head|_Head2)     Named patterns
  147. "
  148. "   _Head : val
  149. "   name:_Head:val          Default values
  150. "
  151. "   _Head?testQ,
  152. "   _Head?(test[#]&)        Pattern tests
  153. "
  154. "   name_Head/;test[name]   Conditionals
  155. "
  156. "   _Head:.                 Predefined Default
  157. "
  158. "   .. ...                  Pattern Repeat
  159.  
  160. syntax match mmaPatternError "\%(_\{4,}\|)\s*&\s*)\@!\)" contained
  161.  
  162. "pattern name:
  163. syntax match mmaPattern "[A-Za-z0-9`]\+\s*:\+[=>]\@!" contains=mmaOperator
  164. "pattern default:
  165. syntax match mmaPattern ": *[^ ,]\+[\], ]\@=" contains=@mmaCommentStrings,@mmaTop,mmaOperator
  166. "pattern head/test:
  167. syntax match mmaPattern "[A-Za-z0-9`]*_\+\%(\a\+\)\=\%(?([^)]\+)\|?[^\]},]\+\)\=" contains=@mmaTop,@mmaCommentStrings,mmaPatternError
  168.  
  169. " Operators:
  170. "   /: ^= ^:=   UpValue
  171. "   /;          Conditional
  172. "   := =        DownValue
  173. "   == === ||
  174. "   != =!= &&   Logic
  175. "   >= <= < >
  176. "   += -= *=
  177. "   /= ++ --    Math
  178. "   ^*
  179. "   -> :>       Rules
  180. "   @@ @@@      Apply
  181. "   /@ //@      Map
  182. "   /. //.      Replace
  183. "   // @        Function application
  184. "   <> ~~       String/Pattern join
  185. "   ~           infix operator
  186. "   . :         Pattern operators
  187. syntax match mmaOperator "\%(@\{1,3}\|//[.@]\=\)"
  188. syntax match mmaOperator "\%(/[;:@.]\=\|\^\=:\==\)"
  189. syntax match mmaOperator "\%([-:=]\=>\|<=\=\)"
  190. "syntax match mmaOperator "\%(++\=\|--\=\|[/+-*]=\|[^*]\)"
  191. syntax match mmaOperator "[*+=^.:?-]"
  192. syntax match mmaOperator "\%(\~\~\=\)"
  193. syntax match mmaOperator "\%(=\{2,3}\|=\=!=\|||\=\|&&\|!\)" contains=ALLBUT,mmaPureFunction
  194.  
  195. " Symbol Tags:
  196. "   "SymbolName::item"
  197. "syntax match mmaSymbol "`\=[a-zA-Z$]\+[0-9a-zA-Z$]*\%(`\%([a-zA-Z$]\+[0-9a-zA-Z$]*\)\=\)*" contained
  198. syntax match mmaMessage "`\=\([a-zA-Z$]\+[0-9a-zA-Z$]*\)\%(`\%([a-zA-Z$]\+[0-9a-zA-Z$]*\)\=\)*::\a\+" contains=mmaMessageType
  199. syntax match mmaMessageType "::\a\+"hs=s+2 contained
  200.  
  201. " Pure Functions:
  202. syntax match mmaPureFunction "#\%(#\|\d\+\)\="
  203. syntax match mmaPureFunction "&"
  204.  
  205. " Named Functions:
  206. " Since everything is pretty much a function, get this straight
  207. " from context
  208. syntax match mmaGenericFunction "[A-Za-z0-9`]\+\s*\%([@[]\|/:\|/\=/@\)\@=" contains=mmaOperator
  209. syntax match mmaGenericFunction "\~\s*[^~]\+\s*\~"hs=s+1,he=e-1 contains=mmaOperator,mmaBoring
  210. syntax match mmaGenericFunction "//\s*[A-Za-z0-9`]\+"hs=s+2 contains=mmaOperator
  211.  
  212. " Numbers:
  213. syntax match mmaNumber "\<\%(\d\+\.\=\d*\|\d*\.\=\d\+\)\>"
  214. syntax match mmaNumber "`\d\+\%(\d\@!\.\|\>\)"
  215.  
  216. " Special Characters:
  217. "   \[Name]     named character
  218. "   \ooo        octal
  219. "   \.xx        2 digit hex
  220. "   \:xxxx      4 digit hex (multibyte unicode)
  221. syntax match mmaUnicode "\\\[\w\+\d*\]"
  222. syntax match mmaUnicode "\\\%(\x\{3}\|\.\x\{2}\|:\x\{4}\)"
  223.  
  224. " Syntax Errors:
  225. syntax match mmaError "\*)" containedin=ALLBUT,@mmaComments,@mmaStrings
  226. syntax match mmaError "\%([/]{3,}\|[&:|+*?~-]\{3,}\|[.=]\{4,}\|_\@<=\.\{2,}\|`\{2,}\)" containedin=ALLBUT,@mmaComments,@mmaStrings
  227.  
  228. " Punctuation:
  229. " things that shouldn't really be highlighted, or highlighted
  230. " in they're own group if you _really_ want. :)
  231. "  ( ) { }
  232. " TODO - use Delimiter group?
  233. syntax match mmaBoring "[(){}]" contained
  234.  
  235. " ------------------------------------
  236. "    future explorations...
  237. " ------------------------------------
  238. " Function Arguments:
  239. "   anything between brackets []
  240. "   (fold)
  241. "syntax region mmaArgument start="\[" end="\]" containedin=ALLBUT,@mmaComments,@mmaStrings transparent fold
  242.  
  243. " Lists:
  244. "   (fold)
  245. "syntax region mmaLists start="{" end="}" containedin=ALLBUT,@mmaComments,@mmaStrings transparent fold
  246.  
  247. " Regions:
  248. "   (fold)
  249. "syntax region mmaRegion start="(\*\+[^<]*<!--[^>]*\*\+)" end="--> \*)" containedin=ALLBUT,@mmaStrings transparent fold keepend
  250.  
  251. " show fold text
  252. set commentstring='(*%s*)'
  253. "set foldtext=MmaFoldText()
  254.  
  255. "function MmaFoldText()
  256. "    let line = getline(v:foldstart)
  257. "
  258. "    let lines = v:foldend-v:foldstart+1
  259. "
  260. "    let sub = substitute(line, '(\*\+|\*\+)|[-*_]\+', '', 'g')
  261. "
  262. "    if match(line, '(\*') != -1
  263. "        let lines = lines.' line comment'
  264. "    else
  265. "        let lines = lines.' lines'
  266. "    endif
  267. "
  268. "    return v:folddashes.' '.lines.' '.sub
  269. "endf
  270.  
  271. "this is slow for computing folds, but it does so accurately
  272. syntax sync fromstart
  273.  
  274. " but this seems to do alright for non fold syntax coloring.
  275. " for folding, however, it doesn't get the nesting right.
  276. " TODO - find sync group for multiline modules? ick...
  277.  
  278. " sync multi line comments
  279. "syntax sync match syncComments groupthere NONE "\*)"
  280. "syntax sync match syncComments groupthere mmaComment "(\*"
  281.  
  282. "set foldmethod=syntax
  283. "set foldnestmax=1
  284. "set foldminlines=15
  285.  
  286. if version >= 508 || !exists("did_mma_syn_inits")
  287.     if version < 508
  288.         let did_mma_syn_inits = 1
  289.         command -nargs=+ HiLink hi link <args>
  290.     else
  291.         command -nargs=+ HiLink hi def link <args>
  292.     endif
  293.  
  294.     " NOTE - the following links are not guaranteed to
  295.     " look good under all colorschemes.  You might need to
  296.     " :so $VIMRUNTIME/syntax/hitest.vim and tweak these to
  297.     " look good in yours
  298.  
  299.  
  300.     HiLink mmaComment           Comment
  301.     HiLink mmaCommentStar       Comment
  302.     HiLink mmaFunctionComment   Comment
  303.     HiLink mmaLooseQuote        Comment
  304.     HiLink mmaGenericFunction   Function
  305.     HiLink mmaVariable          Identifier
  306. "    HiLink mmaSymbol            Identifier
  307.     HiLink mmaOperator          Operator
  308.     HiLink mmaPatternOp         Operator
  309.     HiLink mmaPureFunction      Operator
  310.     HiLink mmaString            String
  311.     HiLink mmaCommentString     String
  312.     HiLink mmaUnicode           String
  313.     HiLink mmaMessage           Type
  314.     HiLink mmaNumber            Type
  315.     HiLink mmaPattern           Type
  316.     HiLink mmaError             Error
  317.     HiLink mmaFixme             Error
  318.     HiLink mmaPatternError      Error
  319.     HiLink mmaTodo              Todo
  320.     HiLink mmaemPHAsis          Special
  321.     HiLink mmaFunctionTitle     Special
  322.     HiLink mmaMessageType       Special
  323.     HiLink mmaItem              Preproc
  324.  
  325.     delcommand HiLink
  326. endif
  327.  
  328. let b:current_syntax = "mma"
  329.  
  330. let &cpo = s:cpo_save
  331. unlet s:cpo_save
  332.