|
| 1 | +" Language: MLScript |
| 2 | + |
| 3 | +if exists("b:current_syntax") |
| 4 | + finish |
| 5 | +endif |
| 6 | + |
| 7 | +" keywords and constants |
| 8 | +syn keyword mlsKeyword let set fun val rec mut declare |
| 9 | +syn keyword mlsKeyword override super new of forall exists |
| 10 | +syn keyword mlsKeyword class object module pattern trait mixin |
| 11 | +syn keyword mlsKeyword interface extends namespace type where with |
| 12 | +syn keyword mlsKeyword break return continue as in out |
| 13 | +syn keyword mlsKeyword constructor abstract virtual throw |
| 14 | +syn keyword mlsKeyword case and or enum data |
| 15 | +syn keyword mlsConditional if then else |
| 16 | +syn keyword mlsRepeat while for do |
| 17 | +syn keyword mlsExternal import |
| 18 | +syn keyword mlsExternal open |
| 19 | +syn keyword mlsConstant null true false undefined |
| 20 | + |
| 21 | +" number constants |
| 22 | +syn match mlsNumbers display transparent "\<\d\|\.\d" contains=mlsNumber,mlsNumberError |
| 23 | +syn match mlsNumber display contained "\(\d\|_\)*\.\=\d*\(e[-+]\=\d\+\)\=" |
| 24 | + |
| 25 | +" compiler flags |
| 26 | +syn match mlsFlag "^:\w\+" |
| 27 | + |
| 28 | +" function names |
| 29 | +syn match mlsCustomFunc "\w\+\s*(\@=" |
| 30 | +syn match mlsCustomFunc "\w\+\s*\(of\)\@=" |
| 31 | +syn match mlsCustomFunc "\(\.\.\)\@<!\.\@<=\w\+" |
| 32 | + |
| 33 | +" module names |
| 34 | +syn match mlsModuleName display "\<[A-Z]\+\w*\>" |
| 35 | + |
| 36 | +" operators |
| 37 | +syn match mlsOperator "+" |
| 38 | +syn match mlsOperator "*" |
| 39 | +syn match mlsOperator "/" |
| 40 | +syn match mlsOperator "|>" |
| 41 | +syn match mlsOperator "<|" |
| 42 | +syn match mlsOperator "\.>" |
| 43 | +syn match mlsOperator "<\." |
| 44 | +syn match mlsOperator "!>" |
| 45 | +syn match mlsOperator "<!" |
| 46 | +syn match mlsOperator "|!" |
| 47 | +syn match mlsOperator ">>" |
| 48 | +syn match mlsOperator "<<" |
| 49 | +syn match mlsOperator "\\" |
| 50 | +syn match mlsOperator "|\." |
| 51 | +syn match mlsOperator "|>\." |
| 52 | +syn match mlsOperator "@" |
| 53 | +syn match mlsOperator "::" |
| 54 | +syn match mlsOperator ":::" |
| 55 | +syn match mlsOperator "++" |
| 56 | +syn match mlsOperator "\*\*" |
| 57 | + |
| 58 | +" strings |
| 59 | +syn region mlsString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=mlsSpecial |
| 60 | +syn match mlsSpecial display contained +\(\\\)\@1<!\(\\\\\)*\zs\\"+ |
| 61 | + |
| 62 | +" multiline strings |
| 63 | +syn region mlsLongString start=+"""+ end=+"""+ " contains=@Spell |
| 64 | + |
| 65 | +" comments and comment strings |
| 66 | +syn keyword mlsTodo contained TODO FIXME XXX NOTE |
| 67 | +syn region mlsCommentL start="//" skip="\\$" end="$" keepend contains=mlsTodo |
| 68 | +syn region mlsComment matchgroup=mlsComment start="/\*" end="\*/" contains=mlsTodo |
| 69 | + |
| 70 | +" linking highlight colors |
| 71 | +hi link mlsCommentL Comment |
| 72 | +hi link mlsComment Comment |
| 73 | +hi link mlsConditional Conditional |
| 74 | +hi link mlsKeyword Keyword |
| 75 | +hi link mlsRepeat Repeat |
| 76 | +hi link mlsNumber Number |
| 77 | +hi link mlsOperator Operator |
| 78 | +hi link mlsExternal Include |
| 79 | +hi link mlsType Type |
| 80 | +hi link mlsModuleName Type |
| 81 | +hi link mlsConstant Constant |
| 82 | +hi link mlsString String |
| 83 | +hi link mlsLongString String |
| 84 | +hi link mlsSpecial SpecialChar |
| 85 | +hi link mlsTodo Todo |
| 86 | +hi link mlsFlag Debug |
| 87 | +hi link mlsOperator Operator |
| 88 | +hi link mlsCustomFunc Function |
| 89 | +hi link mlsConst Constant |
| 90 | + |
| 91 | +let b:current_syntax = "mlscript" |
0 commit comments