1*acc22406SBram Moolenaar" Vim syntax file 2*acc22406SBram Moolenaar" Language: Elm 3*acc22406SBram Moolenaar" Maintainer: Andreas Scharf <[email protected]> 4*acc22406SBram Moolenaar" Original Author: Joseph Hager <[email protected]> 5*acc22406SBram Moolenaar" Copyright: Joseph Hager <[email protected]> 6*acc22406SBram Moolenaar" License: BSD3 7*acc22406SBram Moolenaar" Latest Revision: 2020-05-29 8*acc22406SBram Moolenaar 9*acc22406SBram Moolenaarif exists('b:current_syntax') 10*acc22406SBram Moolenaar finish 11*acc22406SBram Moolenaarendif 12*acc22406SBram Moolenaar 13*acc22406SBram Moolenaar" Keywords 14*acc22406SBram Moolenaarsyn keyword elmConditional else if of then case 15*acc22406SBram Moolenaarsyn keyword elmAlias alias 16*acc22406SBram Moolenaarsyn keyword elmTypedef contained type port 17*acc22406SBram Moolenaarsyn keyword elmImport exposing as import module where 18*acc22406SBram Moolenaar 19*acc22406SBram Moolenaar" Operators 20*acc22406SBram Moolenaar" elm/core 21*acc22406SBram Moolenaarsyn match elmOperator contained "\(<|\||>\|||\|&&\|==\|/=\|<=\|>=\|++\|::\|+\|-\|*\|/\|//\|^\|<>\|>>\|<<\|<\|>\|%\)" 22*acc22406SBram Moolenaar" elm/parser 23*acc22406SBram Moolenaarsyn match elmOperator contained "\(|.\||=\)" 24*acc22406SBram Moolenaar" elm/url 25*acc22406SBram Moolenaarsyn match elmOperator contained "\(</>\|<?>\)" 26*acc22406SBram Moolenaar 27*acc22406SBram Moolenaar" Types 28*acc22406SBram Moolenaarsyn match elmType "\<[A-Z][0-9A-Za-z_-]*" 29*acc22406SBram Moolenaarsyn keyword elmNumberType number 30*acc22406SBram Moolenaar 31*acc22406SBram Moolenaar" Modules 32*acc22406SBram Moolenaarsyn match elmModule "\<\([A-Z][0-9A-Za-z_'-\.]*\)\+\.[A-Za-z]"me=e-2 33*acc22406SBram Moolenaarsyn match elmModule "^\(module\|import\)\s\+[A-Z][0-9A-Za-z_'-\.]*\(\s\+as\s\+[A-Z][0-9A-Za-z_'-\.]*\)\?\(\s\+exposing\)\?" contains=elmImport 34*acc22406SBram Moolenaar 35*acc22406SBram Moolenaar" Delimiters 36*acc22406SBram Moolenaarsyn match elmDelimiter "[,;]" 37*acc22406SBram Moolenaarsyn match elmBraces "[()[\]{}]" 38*acc22406SBram Moolenaar 39*acc22406SBram Moolenaar" Functions 40*acc22406SBram Moolenaarsyn match elmTupleFunction "\((,\+)\)" 41*acc22406SBram Moolenaar 42*acc22406SBram Moolenaar" Comments 43*acc22406SBram Moolenaarsyn keyword elmTodo TODO FIXME XXX contained 44*acc22406SBram Moolenaarsyn match elmLineComment "--.*" contains=elmTodo,@spell 45*acc22406SBram Moolenaarsyn region elmComment matchgroup=elmComment start="{-|\=" end="-}" contains=elmTodo,elmComment,@spell fold 46*acc22406SBram Moolenaar 47*acc22406SBram Moolenaar" Strings 48*acc22406SBram Moolenaarsyn match elmStringEscape "\\u[0-9a-fA-F]\{4}" contained 49*acc22406SBram Moolenaarsyn match elmStringEscape "\\[nrfvbt\\\"]" contained 50*acc22406SBram Moolenaarsyn region elmString start="\"" skip="\\\"" end="\"" contains=elmStringEscape,@spell 51*acc22406SBram Moolenaarsyn region elmTripleString start="\"\"\"" skip="\\\"" end="\"\"\"" contains=elmStringEscape,@spell 52*acc22406SBram Moolenaarsyn match elmChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'" 53*acc22406SBram Moolenaar 54*acc22406SBram Moolenaar" Lambda 55*acc22406SBram Moolenaarsyn region elmLambdaFunc start="\\"hs=s+1 end="->"he=e-2 56*acc22406SBram Moolenaar 57*acc22406SBram Moolenaar" Debug 58*acc22406SBram Moolenaarsyn match elmDebug "Debug.\(log\|todo\|toString\)" 59*acc22406SBram Moolenaar 60*acc22406SBram Moolenaar" Numbers 61*acc22406SBram Moolenaarsyn match elmInt "-\?\<\d\+\>" 62*acc22406SBram Moolenaarsyn match elmFloat "-\?\(\<\d\+\.\d\+\>\)" 63*acc22406SBram Moolenaar 64*acc22406SBram Moolenaar" Identifiers 65*acc22406SBram Moolenaarsyn match elmTopLevelDecl "^\s*[a-zA-Z][a-zA-z0-9_]*\('\)*\s\+:\(\r\n\|\r\|\n\|\s\)\+" contains=elmOperator 66*acc22406SBram Moolenaarsyn match elmFuncName /^\l\w*/ 67*acc22406SBram Moolenaar 68*acc22406SBram Moolenaar" Folding 69*acc22406SBram Moolenaarsyn region elmTopLevelTypedef start="type" end="\n\(\n\n\)\@=" contains=ALL fold 70*acc22406SBram Moolenaarsyn region elmTopLevelFunction start="^[a-zA-Z].\+\n[a-zA-Z].\+=" end="^\(\n\+\)\@=" contains=ALL fold 71*acc22406SBram Moolenaarsyn region elmCaseBlock matchgroup=elmCaseBlockDefinition start="^\z\(\s\+\)\<case\>" end="^\z1\@!\W\@=" end="\(\n\n\z1\@!\)\@=" end="\n\z1\@!\(\n\n\)\@=" contains=ALL fold 72*acc22406SBram Moolenaarsyn region elmCaseItemBlock start="^\z\(\s\+\).\+->$" end="^\z1\@!\W\@=" end="\(\n\n\z1\@!\)\@=" end="\(\n\z1\S\)\@=" contains=ALL fold 73*acc22406SBram Moolenaarsyn region elmLetBlock matchgroup=elmLetBlockDefinition start="\<let\>" end="\<in\>" contains=ALL fold 74*acc22406SBram Moolenaar 75*acc22406SBram Moolenaarhi def link elmFuncName Function 76*acc22406SBram Moolenaarhi def link elmCaseBlockDefinition Conditional 77*acc22406SBram Moolenaarhi def link elmCaseBlockItemDefinition Conditional 78*acc22406SBram Moolenaarhi def link elmLetBlockDefinition TypeDef 79*acc22406SBram Moolenaarhi def link elmTopLevelDecl Function 80*acc22406SBram Moolenaarhi def link elmTupleFunction Normal 81*acc22406SBram Moolenaarhi def link elmTodo Todo 82*acc22406SBram Moolenaarhi def link elmComment Comment 83*acc22406SBram Moolenaarhi def link elmLineComment Comment 84*acc22406SBram Moolenaarhi def link elmString String 85*acc22406SBram Moolenaarhi def link elmTripleString String 86*acc22406SBram Moolenaarhi def link elmChar String 87*acc22406SBram Moolenaarhi def link elmStringEscape Special 88*acc22406SBram Moolenaarhi def link elmInt Number 89*acc22406SBram Moolenaarhi def link elmFloat Float 90*acc22406SBram Moolenaarhi def link elmDelimiter Delimiter 91*acc22406SBram Moolenaarhi def link elmBraces Delimiter 92*acc22406SBram Moolenaarhi def link elmTypedef TypeDef 93*acc22406SBram Moolenaarhi def link elmImport Include 94*acc22406SBram Moolenaarhi def link elmConditional Conditional 95*acc22406SBram Moolenaarhi def link elmAlias Delimiter 96*acc22406SBram Moolenaarhi def link elmOperator Operator 97*acc22406SBram Moolenaarhi def link elmType Type 98*acc22406SBram Moolenaarhi def link elmNumberType Identifier 99*acc22406SBram Moolenaarhi def link elmLambdaFunc Function 100*acc22406SBram Moolenaarhi def link elmDebug Debug 101*acc22406SBram Moolenaarhi def link elmModule Type 102*acc22406SBram Moolenaar 103*acc22406SBram Moolenaarsyn sync minlines=500 104*acc22406SBram Moolenaar 105*acc22406SBram Moolenaarlet b:current_syntax = 'elm' 106