" Vim syntax file " Language: Why3 " Filenames: *.why *.mlw " " Adapted from syntax file for Ocaml " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded if version < 600 syntax clear elseif exists("b:current_syntax") && b:current_syntax == "why3" finish endif " Why3 is case sensitive. syn case match " " Script headers highlighted like comments " syn match whyComment "^#!.*" " lowercase identifier - the standard way to match syn match whyLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/ syn match whyKeyChar "|" " Errors syn match whyBraceErr "}" syn match whyBrackErr "\]" syn match whyParenErr ")" syn match whyCommentErr "\*)" syn match whyCountErr "\" syn match whyCountErr "\" syn match whyDoErr "\" syn match whyDoneErr "\" syn match whyThenErr "\" syn match whyTheoryErr "\" syn match whyModuleErr "\" syn match whyEndErr "\" " Some convenient clusters syn cluster whyAllErrs contains=whyBraceErr,whyBrackErr,whyParenErr,whyCommentErr,whyCountErr,whyDoErr,whyDoneErr,whyEndErr,whyThenErr,whyTheoryErr,whyModuleErr syn cluster whyContained contains=whyTodo,whyImport,whyExport,whyTheoryContents,whyModuleContents,whyScopeContents,whyModuleKeyword " ,whyPreDef,whyModParam,whyModParam1,whyPreMPRestr,whyMPRestr,whyMPRestr1,whyMPRestr2,whyMPRestr3,whyModRHS,whyFuncWith,whyFuncStruct,whyModTypeRestr,whyModTRWith,whyWith,whyWithRest,whyModType,whyFullMod,whyVal " Enclosing delimiters syn region whyEncl transparent matchgroup=whyKeyChar start="(" matchgroup=whyKeyChar end=")" contains=ALLBUT,@whyContained,whyParenErr syn region whyEncl transparent matchgroup=whyKeyChar start="{" matchgroup=whyKeyChar end="}" contains=ALLBUT,@whyContained,whyBraceErr syn region whyEncl transparent start="\[" end="\]" contains=ALLBUT,@whyContained,whyBrackErr " Comments syn region whyComment start="(\*" end="\*)" contains=whyComment,whyTodo syn match whyOperator "(\*)" syn keyword whyTodo contained TODO FIXME XXX NOTE " Blocks " FIXME? match and try should detect the absence of "with" ? syn region whyEnd matchgroup=whyKeyword start="\" matchgroup=whyKeyword end="\" contains=ALLBUT,@whyContained,whyEndErr syn region whyEnd matchgroup=whyKeyword start="\" matchgroup=whyKeyword end="\" contains=ALLBUT,@whyContained,whyEndErr syn region whyEnd matchgroup=whyKeyword start="\" matchgroup=whyKeyword end="\" contains=ALLBUT,@whyContained,whyEndErr syn region whyNone matchgroup=whyKeyword start="\" matchgroup=whyKeyword end="\<\(to\|downto\)\>" contains=ALLBUT,@whyContained,whyCountErr syn region whyDo matchgroup=whyKeyword start="\" matchgroup=whyKeyword end="\" contains=ALLBUT,@whyContained,whyDoneErr syn region whyNone matchgroup=whyKeyword start="\" matchgroup=whyKeyword end="\" contains=ALLBUT,@whyContained,whyThenErr " Theories and modules syn region whyTheory matchgroup=whyKeyword start="\" matchgroup=whyModSpec end="\<\u\(\w\|'\)*\>" contains=@whyAllErrs,whyComment skipwhite skipempty nextgroup=whyModuleContents syn region whyModule matchgroup=whyKeyword start="\" matchgroup=whyModSpec end="\<\u\(\w\|'\)*\>" contains=@whyAllErrs,whyComment skipwhite skipempty nextgroup=whyModuleContents syn region whyScope matchgroup=whyKeyword start="\" matchgroup=whyModSpec end="\<\u\(\w\|'\)*\>" contains=@whyAllErrs,whyComment,whyImport skipwhite skipempty nextgroup=whyModuleContents syn region whyModuleContents start="" matchgroup=whyModSpec end="\" contained contains=ALLBUT,@whyContained,whyEndErr,whyTheory,whyModule syn region whyNone matchgroup=whyKeyword start="\<\(use\|clone\)\>" matchgroup=whyModSpec end="\<\(\w\+\.\)*\u\(\w\|'\)*\>" contains=@whyAllErrs,whyComment,whyString,whyImport,whyExport syn keyword whyExport contained export syn keyword whyImport contained import syn region whyNone matchgroup=whyKeyword start="\" matchgroup=whyModSpec end="\<\(\u\(\w\|'\)*\.\)*\u\(\w\|'\)*\>" contains=@whyAllErrs,whyComment syn region whyNone matchgroup=whyKeyword start="\<\(axiom\|lemma\|goal\)\>" matchgroup=whyNone end="\<\w\(\w\|'\)\>\|" contains=@whyAllErrs,whyComment syn keyword whyKeyword abstract any as break by syn keyword whyKeyword coinductive constant continue syn keyword whyKeyword else epsilon exists exception syn keyword whyKeyword forall fun function ghost syn keyword whyKeyword if in inductive syn keyword whyKeyword label let syn keyword whyKeyword meta model mutable not syn keyword whyKeyword partial predicate private syn keyword whyKeyword raise rec return so then type syn keyword whyKeyword val while with syn keyword whyBoolean true false syn keyword whyType bool float int list map option real range syn keyword whyType array ref unit syn keyword whySpec absurd alias assert assume check diverges ensures invariant syn keyword whySpec pure raises reads requires returns variant writes at old syn match whyConstructor "(\s*)" syn match whyConstructor "\u\(\w\|'\)*\>" syn match whyModPath "\u\(\w\|'\)*\."he=e-1 syn region whyString start=+"+ skip=+\\\\\|\\"+ end=+"+ syn match whyOperator "->" syn match whyOperator "<->\?" syn match whyOperator "/\\" syn match whyOperator "\\/" syn match whyOperator "&&" syn match whyOperator "<>" syn match whyKeyChar "|" syn match whyKeyChar ";" " FIXME? is this too inefficient? syn match whyOperator "[^<>~=:+*/%$&@^.|#!?]=[^<>~=:+*/%$&@^.|#!?]"ms=s+1,me=e-1 syn match whyOperator "^=[^<>~=:+*/%$&@^.|#!?]"me=e-1 syn match whyOperator "[^<>~=:+*/%$&@^.|#!?]=$"ms=s+1 syn match whyAnyVar "\<_\>" syn match whyNumber "\<-\=\d\(_\|\d\)*\>" syn match whyNumber "\<-\=0[x|X]\(\x\|_\)\+\>" syn match whyNumber "\<-\=0[o|O]\(\o\|_\)\+\>" syn match whyNumber "\<-\=0[b|B]\([01]\|_\)\+\>" syn match whyFloat "\<-\=\d\+[eE][-+]\=\d\+\>" syn match whyFloat "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=\>" syn match whyFloat "\<-\=0[x|X]\x\+\.\?\x*[pP][-+]\=\d\+\>" " Synchronization syn sync minlines=50 syn sync maxlines=500 syn sync match whyDoSync grouphere whyDo "\" syn sync match whyDoSync groupthere whyDo "\" syn sync match whyEndSync grouphere whyEnd "\<\(begin\|match\|try\)\>" syn sync match whyEndSync groupthere whyEnd "\" syn sync match whyTheorySync grouphere whyTheory "\" syn sync match whyTheorySync groupthere whyTheory "\" syn sync match whyModuleSync grouphere whyModule "\" syn sync match whyModuleSync groupthere whyModule "\" syn sync match whyScopeSync grouphere whyScope "\" syn sync match whyScopeSync groupthere whyScope "\" " Define the default highlighting. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet if version >= 508 || !exists("did_why_syntax_inits") if version < 508 let did_why_syntax_inits = 1 command -nargs=+ HiLink hi link else command -nargs=+ HiLink hi def link endif HiLink whyBraceErr Error HiLink whyBrackErr Error HiLink whyParenErr Error HiLink whyCommentErr Error HiLink whyCountErr Error HiLink whyDoErr Error HiLink whyDoneErr Error HiLink whyEndErr Error HiLink whyThenErr Error HiLink whyTheoryErr Error HiLink whyModuleErr Error HiLink whyComment Comment HiLink whyModPath Include HiLink whyModSpec Include HiLink whyImport Keyword HiLink whyExport Keyword HiLink whyModuleKeyword Keyword HiLink whyConstructor Constant HiLink whyKeyword Keyword HiLink whyKeyChar Operator HiLink whyAnyVar Operator HiLink whyOperator Operator HiLink whySpec Identifier HiLink whyNumber Number HiLink whyFloat Float HiLink whyString String HiLink whyBoolean Boolean HiLink whyType Type HiLink whyTodo Todo HiLink whyEncl Keyword delcommand HiLink endif let b:current_syntax = "why3" " vim: ts=8