" vim: ft=vim ts=2 sw=2 et " Language: Mercury " Maintainer: Sebastian Godelet " Extensions: *.m *.moo " Last Change: 2018-09-01 " for documentation, please use :help mercury-syntax if exists("b:current_syntax") finish endif let b:current_syntax = "mercury" " Mercury is case sensitive. syn case match set synmaxcol=250 if has("folding") && exists("mercury_folding") && mercury_folding " folding is only changed (if not forced) if the Vim default (manual) is active, " this avoids conflicts with existing user settings if (&fdm == "manual") || (exists("mercury_folding_force") && mercury_folding_force) set fdm=indent endif " the default foldminlines = 1 is not appropriate for Mercury, " so we set it higher if &foldminlines == 1 set foldminlines=10 endif endif syn match mercurySingleton "\v<_([A-Z][a-z_A-Z0-9]*)?>" syn keyword mercuryKeyword any_func syn keyword mercuryKeyword any_pred syn keyword mercuryLogical atomic syn keyword mercuryKeyword cc_multi syn keyword mercuryKeyword cc_nondet syn keyword mercuryKeyword det syn keyword mercuryKeyword end_module syn keyword mercuryKeyword erroneous syn keyword mercuryKeyword external external_pred external_func syn keyword mercuryKeyword failure syn keyword mercuryKeyword finalize finalise syn keyword mercuryKeyword func syn keyword mercuryKeyword implementation syn keyword mercuryKeyword import_module syn keyword mercuryKeyword include_module syn keyword mercuryKeyword initialise initialize syn keyword mercuryKeyword inst syn keyword mercuryKeyword instance syn keyword mercuryKeyword interface syn keyword mercuryKeyword is syn keyword mercuryKeyword mode syn keyword mercuryKeyword module syn keyword mercuryKeyword multi syn keyword mercuryKeyword mutable syn keyword mercuryKeyword nondet syn keyword mercuryLogical or_else syn keyword mercuryKeyword pragma syn keyword mercuryKeyword pred syn keyword mercuryKeyword promise syn keyword mercuryPragma require_cc_multi syn keyword mercuryPragma require_cc_nondet syn keyword mercuryPragma require_complete_switch syn keyword mercuryPragma require_det syn keyword mercuryPragma require_erroneous syn keyword mercuryPragma require_failure syn keyword mercuryPragma require_multi syn keyword mercuryPragma require_nondet syn keyword mercuryPragma require_semidet syn keyword mercuryPragma require_switch_arms_cc_multi syn keyword mercuryPragma require_switch_arms_cc_nondet syn keyword mercuryPragma require_switch_arms_det syn keyword mercuryPragma require_switch_arms_erroneous syn keyword mercuryPragma require_switch_arms_failure syn keyword mercuryPragma require_switch_arms_multi syn keyword mercuryPragma require_switch_arms_nondet syn keyword mercuryPragma require_switch_arms_semidet syn keyword mercuryKeyword semidet syn keyword mercuryKeyword solver syn keyword mercuryPurity trace syn keyword mercuryKeyword type syn keyword mercuryKeyword typeclass syn keyword mercuryKeyword use_module syn keyword mercuryKeyword where syn keyword mercuryPragma check_termination syn keyword mercuryPragma consider_used syn keyword mercuryPragma does_not_terminate syn keyword mercuryPragma fact_table syn keyword mercuryPragma inline syn keyword mercuryPragma loop_check syn keyword mercuryPragma memo syn keyword mercuryPragma minimal_model syn keyword mercuryPragma no_inline syn keyword mercuryPragma obsolete syn keyword mercuryPragma obsolete_proc syn keyword mercuryPragma promise_equivalent_clauses syn keyword mercuryPragma source_file syn keyword mercuryPragma terminates syn keyword mercuryPragma type_spec syn keyword mercuryCInterface foreign_code syn keyword mercuryCInterface foreign_decl syn keyword mercuryCInterface foreign_enum syn keyword mercuryCInterface foreign_export syn keyword mercuryCInterface foreign_export_enum syn keyword mercuryCInterface foreign_import_module syn keyword mercuryCInterface foreign_proc syn keyword mercuryCInterface foreign_type syn keyword mercuryForeignMod affects_liveness syn keyword mercuryForeignMod does_not_affect_liveness syn keyword mercuryForeignMod doesnt_affect_liveness syn keyword mercuryForeignMod attach_to_io_state syn keyword mercuryForeignMod can_pass_as_mercury_type word_aligned_pointer stable syn keyword mercuryForeignMod may_call_mercury will_not_call_mercury syn keyword mercuryForeignMod may_duplicate may_not_duplicate syn keyword mercuryForeignMod may_modify_trail will_not_modify_trail syn keyword mercuryForeignMod no_sharing unknown_sharing sharing syn keyword mercuryForeignMod promise_pure promise_semipure syn keyword mercuryForeignMod tabled_for_io local untrailed trailed syn keyword mercuryForeignMod thread_safe not_thread_safe maybe_thread_safe syn keyword mercuryForeignMod will_not_throw_exception syn keyword mercuryForeignMod terminates syn keyword mercuryPurity impure syn keyword mercuryPurity promise_impure syn keyword mercuryPurity promise_pure syn keyword mercuryPurity promise_semipure syn keyword mercuryPurity semipure syn keyword mercuryLogical fail false true syn keyword mercuryLogical if then else syn keyword mercuryLogical impure_true syn keyword mercuryLogical semidet_fail semidet_false syn keyword mercuryLogical semidet_succeed semidet_true syn keyword mercuryLogical some all not syn keyword mercuryLogical try catch catch_any syn keyword mercuryLogical promise_equivalent_solutions syn keyword mercuryLogical promise_equivalent_solution_sets arbitrary syn keyword mercuryBool yes no syn keyword mercuryOperator div rem mod syn match mercuryImplKeyword "\v\$(file|grade|pred|module|line|\d+)>" syn match mercuryOperator "/" " divide syn match mercuryOperator "//" " (integer) divide syn match mercuryDelimiter "," " list seperator or conjunction syn match mercuryOperator "-" " substraction operator or unary minus syn match mercuryOperator "=" " unification syn match mercuryDelimiter "|" " cons syn match mercuryImplication "->" " 'then' arrow syn match mercuryOperator "-->" " DCG clause syn match mercuryOperator "--->" " 'typedef' syn match mercuryOperator "/\\" " (binary) and syn match mercuryOperator "\\" " (bitwise) complement syn match mercuryOperator "\\/" " (binary) or syn match mercuryLogical "\\+" " logical not syn match mercuryOperator "=\.\." " Prolog univ syn match mercuryOperator "=<" " greater equal or contravariant syn match mercuryOperator "=\\=" " not structual equal (for Prolog) syn match mercuryOperator "@" syn match mercuryOperator "@<" syn match mercuryOperator "@=<" syn match mercuryOperator "@>" syn match mercuryOperator "@>=" syn match mercuryOperator ">=" " smaller equal or co-variant syn match mercuryOperator ">" " greater syn match mercuryOperator ">>" " right shift syn match mercuryOperator "<" " smaller syn match mercuryOperator "<<" " left shift syn match mercuryOperator "\\=" " not unify syn match mercuryOperator "\\==" " not unify (for Prolog) syn match mercuryOperator "\~" syn match mercuryOperator "\~=" syn match mercuryOperator ":=" " field update syn match mercuryOperator ":-" " reverse implication syn match mercuryOperator "=:=" " Structural equality (for Prolog) syn match mercuryPurity "![:.]\?" " State variable accessors syn match mercuryImplication ";" " Disjunction syn match mercuryOperator "+" " addition operator or unary plus syn match mercuryOperator "++" " concatenation syn match mercuryOperator ":" syn match mercuryDelimiter "::" " Type/Mode specifier syn match mercuryOperator "&" " Parallel conjuction syn match mercuryOperator "?-" " Prolog compatability syn match mercuryOperator "*" " multiply syn match mercuryDelimiter "\^" " field access syn match mercuryOperator /\v`[^`']+`/ " inlined operator syn match mercuryImplication "<=>\|<=\|=>" syn match mercuryNumCode /\v<0b[01_]*[01](_*[iu](8|16|32|64)?)?>/ syn match mercuryNumCode /\v<0o[0-7_]*[0-7](_*[iu](8|16|32|64)?)?>/ syn match mercuryNumCode /\v<0x[0-9A-Fa-f_]*\x(_*[iu](8|16|32|64)?)?>/ syn match mercuryNumCode /\v<0'.|<[0-9]([0-9_]*[0-9])?(_*[iu](8|16|32|64)?)?>/ syn match mercuryFloat /\v<[0-9]([0-9_]*[0-9])?\.[0-9]([0-9_]*[0-9])?([eE][-+]?[0-9]([0-9_]*[0-9])?)?>/ syn match mercuryFloat /\v<[0-9]([0-9_]*[0-9])?[eE][-+]?[0-9]([0-9_]*[0-9])?>/ syn region mercuryAtom start=+'+ skip=+\\'+ end=+'+ contains= \ mercuryStringEsc,@mercuryFormatting,mercuryEscErr,@Spell syn region mercuryString matchgroup=mercuryString \ start=+"+ skip=/\v(\\x?\x+|\\)@ syn match mercuryOperator ">=" conceal cchar=≥ syn match mercuryOperator "=<" conceal cchar=≤ syn match mercuryOperator "\\=[=]\@!" conceal cchar=≠ syn match mercuryOperator "`x`" conceal cchar=× syn match mercuryOperator "//" conceal cchar=÷ " unfortunately, Vim does not allow different conceal colours, " so these are not concealed by default if exists("mercury_conceal_logical") && mercury_conceal_logical syn match mercuryImplication "=>" conceal cchar=⇒ syn match mercuryImplication "<=" conceal cchar=⇐ syn match mercuryImplication "<=>" conceal cchar=⇔ syn keyword mercuryNumCode inf conceal cchar=∞ syn keyword mercuryLogical some conceal cchar=∃ syn keyword mercuryLogical all conceal cchar=∀ syn match mercuryLogical "\\+" conceal cchar=¬ endif endif endif " matching the `double star' after the multiplication operator syn match mercuryOperator "\v[*]{2}" " All valid Mercury comments syn cluster mercuryComments contains=mercuryComment,mercuryCComment " The clusters contain all valid Mercury code. The nesting is done to allow " for matching of parenthesis, DCG terms and lists syn cluster mercuryTerms contains=mercuryBlock,mercuryList,mercuryString, \ mercuryDelimiter,mercuryAtom,mercuryNumCode,mercuryFloat, \ @mercuryComments,mercuryKeyword,mercuryImplKeyword, \ @mercuryFormatting,mercuryErrInAny,mercuryBool,mercuryOperator, \ mercurySingleton,mercuryImplication,mercuryInlined,mercuryLogical, \ mercuryPurity,mercuryDCGOrTuple syn region mercuryList matchgroup=mercuryBracket start='\[' end=']' \ transparent fold contains=@mercuryTerms syn region mercuryBlock matchgroup=mercuryBracket start='(' end=')' \ transparent fold contains=@mercuryTerms syn region mercuryDCGOrTuple matchgroup=mercuryBracket start='{' end='}' \ transparent fold contains=@mercuryTerms syn region mercuryForeignModList matchgroup=mercuryBracket start='\[' end=']' \ transparent fold contained contains=mercuryForeignMod, \ mercuryDelimiter,@mercuryComments,@mercuryFormatting, \ mercuryString,mercuryOperator,mercuryBlock syn match mercuryClauseHead /\v^[a-z][a-zA-Z0-9_.]*[( =]@=/ if !exists("mercury_no_highlight_foreign") || !mercury_no_highlight_foreign " Basic syntax highlighting for foreign code syn cluster mercuryForeign contains=mercuryForeignModList,mercuryCInterface, \ mercuryKeyword,mercuryOperator, \ mercuryAtom,@mercuryComments,mercuryDelimiter,mercurySingleton, \ @mercuryFormatting,mercuryForeignId syn region mercuryForeignCBlock matchgroup=mercuryBracket start=/\v\(("C"|c)/rs=s+1 end=')' \ transparent fold contained contains=@mercuryForeign, \ mercuryCCode,mercuryBlock syn region mercuryForeignCSharpBlock matchgroup=mercuryBracket start=/\v\(("C#"|csharp)/rs=s+1 end=')' \ transparent fold contained contains=@mercuryForeign, \ mercuryCSharpCode,mercuryBlock syn region mercuryForeignJavaBlock matchgroup=mercuryBracket start=/\v\(("Java"|java)/rs=s+1 end=')' \ transparent fold contained contains=@mercuryForeign, \ mercuryJavaCode,mercuryBlock syn region mercuryForeignErlangBlock matchgroup=mercuryBracket start=/\v\(("Erlang"|erlang)/rs=s+1 end=')' \ transparent fold contained contains=@mercuryForeign, \ mercuryErlangCode,mercuryBlock syn cluster mercuryForeignBlock contains=mercuryForeignCBlock, \ mercuryForeignCSharpBlock,mercuryForeignJavaBlock, \ mercuryForeignErlangBlock syn match mercuryPragmaForeign /\v^\s*:-\s+pragma\s+foreign_(code|proc|decl|type|export(_enum)?|enum|import_module)/ \ transparent nextgroup=@mercuryForeignBlock " C-Style syntax as a basis for C, C# and Java syn keyword mercuryCLikeKeyword contained if else goto switch case for while syn keyword mercuryCLikeKeyword contained do break continue return syn keyword mercuryCLikeType contained const static volatile extern typedef inline syn keyword mercuryCLikeKeyword contained default syn keyword mercuryCLikeType contained void int char long short byte unsigned signed syn keyword mercuryCLikeType contained struct float double enum syn match mercuryCLikeDelimiter ";\|," contained syn match mercuryCLikeOperator "\v[-!+=*/><~?:%]" contained syn match mercuryCLikeOperator "[-!+=*/><]\?=" contained syn match mercuryCLikeOperator "--\|++" contained syn match mercuryCLikeOperator "|\{1,2}\|&\{1,2}" contained syn match mercuryCLikeBracket "\[\|]" contained syn match mercuryCLikeBracket "\v[{}()]" contained syn match mercuryCLikeCharEsc /\v\\\\([abfnrtv]|0[0-7]*|[xuU]\x+)?/ contained syn match mercuryCLikeCharEsc +\\\\""+ contained syn region mercuryCLikeChar start=+'+ end=+'+ contained contains=mercuryCLikeCharEsc syn match mercuryCLikeNumber /\v<([1-9][0-9]*|0[xX]\x+|0[0-7]*)/ contained syn match mercuryCLikeFloat /\v<([0-9]+\.[0-9]+([eE][-+]?[0-9]+)?)/ contained syn match mercuryCLikeFloat /\v<([0-9]+[eE][-+]?[0-9]+)/ contained syn cluster mercuryCLike contains=mercuryCLikeKeyword,mercuryCLikeType syn cluster mercuryCLike add=mercuryCLikeOperator,mercuryCComment,mercuryCppLikeComment,mercuryCLikeChar syn cluster mercuryCLike add=mercuryCLikeNumber,mercuryCLikeFloat,mercuryCLikeBracket syn cluster mercuryCLike add=mercuryCLikeDelimiter,mercuryForeignIface syn cluster mercuryCLike add=@mercuryFormatting " C-Language formatting with Mercury types MR_* syn keyword mercuryCType contained size_t pid_t offset_t union syn keyword mercuryCType contained MR_bool MR_Bool syn keyword mercuryCType contained MR_Word MR_Integer MR_Unsigned syn keyword mercuryCType contained MR_ArrayPtr MR_Float MR_file MercuryFile[Ptr] syn keyword mercuryCType contained MR_String MR_ConstString MR_Char syn match mercuryCType "\v" contained syn match mercuryCType "\v<(MR_)?[u]?int(_least|_fast)?(8|16|32|64)_t>" contained syn match mercuryForeignIface "\v<(MR_)?[U]?INT(_LEAST|_FAST)?(8|16|32|64)_(TYPE|LENGTH_MODIFIER)>" contained syn keyword mercuryCKeyword contained sizeof typeof offsetof syn keyword mercuryCConst contained NULL EOF syn keyword mercuryCConst contained CHAR_BIT CHAR_MAX CHAR_MIN syn keyword mercuryCConst contained SCHAR_BIT SCHAR_MAX SCHAR_MIN syn keyword mercuryCConst contained LONG_MAX ULONG_MAX LONG_MIN syn keyword mercuryCConst contained LLONG_MAX ULLONG_MAX LLONG_MIN syn keyword mercuryCConst contained INT_MAX UINT_MAX INT_MIN syn keyword mercuryCConst contained SHRT_MAX USHRT_MAX SHRT_MIN syn keyword mercuryCBool contained MR_TRUE MR_FALSE syn keyword mercuryCBool contained MR_YES MR_NO syn match mercuryForeignIface contained "\v" syn match mercuryForeignIface contained "\v" syn match mercuryCFunc "\v" contained syn match mercuryCPreProc "#\(if\(n\?def\)\?\|else\|elif\|endif\|define\|undef\|include\|error\|warning\|line\)" contained syn match mercuryCPreProc "\v(\\){1,2}$" contained syn match mercuryCStringFmt /%[I]\?[-+# *.0-9]*[dioxXucsfeEgGp]/ contained syn region mercuryCString start=+""+ end=+""+ contained contains=mercuryCStringFmt,mercuryCLikeCharEsc,@Spell syn region mercuryCString start=+\v\\"+ end=+\v\\"+ contained contains=mercuryCStringFmt,mercuryCLikeCharEsc,@Spell syn cluster mercuryC contains=@mercuryCLike,mercuryCType,mercuryCKeyword syn cluster mercuryC add=mercuryCPreProc,mercuryCString,mercuryCBool,mercuryCConst,mercuryCFunc " C++-Style for Java and C# (bool, // comments, exception handling etc) syn keyword mercuryCppLikeKeyword contained class new delete try catch finally \ instanceof abstract throw[s] extends this super base synchronize[d] \ override foreach in using import ref implements syn keyword mercuryCppLikeBool contained true false syn keyword mercuryCppLikeConst contained null[ptr] syn match mercuryCppLikeOperator "@" contained syn match mercuryCppLikeType "\v<((io|runtime)\.(\_\s+)?)?(MR_)[A-Za-z_0-9]+>" contained syn keyword mercuryCppLikeMod contained public private protected internal virtual syn keyword mercuryCppLikeMod contained final readonly volatile transient syn cluster mercuryCppLike contains=@mercuryCLike,mercuryCPreProc,mercuryCString,mercuryCppLikeComment,mercuryCppLikeKeyword syn cluster mercuryCppLike add=mercuryCppLikeBool,mercuryCppLikeMod,mercuryCppLikeConst,mercuryCppLikeType,mercuryCppLikeOperator " Declaration for ISO C syn region mercuryCCode matchgroup=mercuryString start=+"+ skip=+""+ end=+"+ transparent fold contained contains=@mercuryC " Declaration for C# syn match mercuryCSharpStringFmt "{[0-9]}" contained syn match mercuryCSharpStringFmtEsc "{{\|}}" contained syn keyword mercuryCSharpType contained object string decimal bool uint syn keyword mercuryCSharpType contained ulong sbyte ushort syn match mercuryCSharpType contained "\v\."he=e-1 nextgroup=mercuryCSharpBool syn match mercuryCSharpBool contained "\v<(YES|NO)>" syn match mercuryCSharpType "\v" syn region mercuryCSharpString start=+""+ end=+""+ contained contains=mercuryCLikeCharEsc, \ mercuryCSharpStringFmt,mercuryCSharpStringFmtEsc,@Spell syn region mercuryCSharpString start=+\v\\"+ end=+\v\\"+ contained contains=mercuryCLikeCharEsc, \ mercuryCSharpStringFmt,mercuryCSharpStringFmtEsc,@Spell syn cluster mercuryCSharp contains=@mercuryCppLike,mercuryCSharpString,mercuryCSharpType syn region mercuryCSharpCode matchgroup=mercuryString start=+"+ skip=+""+ end=+"+ transparent fold contained \ contains=@mercuryCSharp " Declaration for Java syn match mercuryJavaType "\v<([a-z_][A-Za-z0-9_]*\.(\_\s+)?)+[A-Z][A-Z_a-z0-9]+>" contained syn match mercuryJavaType "\v<(String(Builder)?|Override|Object|Integer|Byte)>" contained syn match mercuryJavaType "\v<(Short|Float|Double|Void|Boolean|Character|System|Runtime|boolean)>" contained syn match mercuryJavaType "\v\."he=e-1 contained nextgroup=mercuryJavaBool syn match mercuryJavaBool contained "\v<(YES|NO)>" syn region mercuryJavaCode matchgroup=mercuryString start=+"+ skip=+""+ end=+"+ \ transparent fold contained contains=@mercuryCppLike,mercuryCString,mercuryJavaType " Declaration for Erlang syn keyword mercuryErlangKeyword contained after and andalso band begin bnot bor bsl bsr bxor case \ catch cond end fun if let not of orelse query receive throw try when xor " syn keyword mercuryErlangBool true false syn match mercuryErlangExtNumLiteral "\v([2-9]|[12][0-9]|3[0-6])#[A-Za-z0-9]+" contained syn match mercuryErlangOperator "\v[?]" contained syn match mercuryErlangLogical "\v[,;.]" contained syn region mercuryErlangString start=+""+ end=+""+ contained contains=@Spell syn region mercuryErlangString start=+\v\\"+ end=+\v\\"+ contained contains=@Spell syn cluster mercuryErlangTerms contains=mercuryErlangBlock,mercuryErlangList, \ mercuryErlangString,mercuryCLikeChar,mercuryCLikeNumber, \ mercuryErlangExtNumLiteral,mercuryFloat,mercuryComment,mercuryKeyword, \ mercuryErlangKeyword, mercuryErlangOperator, mercuryCComment, \ mercuryErlangBool,mercuryOperator,mercurySingleton,mercuryImplication, \ mercuryErlangDCGAction,mercuryErlangLogical,@mercuryFormatting syn region mercuryErlangList contained matchgroup=mercuryBracket \ start='\[' end=']' transparent fold contains=@mercuryErlangTerms syn region mercuryErlangBlock contained matchgroup=mercuryBracket \ start='(' end=')' transparent fold contains=@mercuryErlangTerms syn region mercuryErlangDCGAction contained matchgroup=mercuryBracket \ start='{' end='}' transparent fold contains=@mercuryErlangTerms syn cluster mercuryErlang contains=@mercuryErlangTerms,mercuryErlangDCGAction, \ mercuryForeignIface syn region mercuryErlangCode matchgroup=mercuryString start=+"+ skip=+""+ end=+"+ \ transparent fold contained contains=@mercuryErlang " Matching the foreign language name identifiers, this comes after all the " code blocks, to match the identifiers in quotes syn match mercuryForeignId /\v<(c|csharp|java|il|erlang)>/ contained syn region mercuryForeignId contained matchgroup=mercuryString \ start=+\v["](C#|Java|C|I[Ll]|Erlang)["]{-}+rs=s+1 end=+"+ " Matching foreign interface builtins and success indicator syn keyword mercuryForeignIface contained SUCCESS_INDICATOR syn match mercuryForeignIface "\v" contained syn match mercuryForeignIface "\v" contained endif if !exists("mercury_no_highlight_trailing_whitespace") || !mercury_no_highlight_trailing_whitespace syn match mercuryWhitespace "\v[ ]+[\n]@=" syn cluster mercuryFormatting add=mercuryWhitespace endif if !exists("mercury_no_highlight_tabs") || !mercury_no_highlight_tabs syn match mercuryWhitespace "\t" syn cluster mercuryFormatting add=mercuryWhitespace endif if exists("mercury_highlight_comment_special") && mercury_highlight_comment_special syn keyword mercuryToDo contained XXX TODO NOTE[_TO_IMPLEMENTORS] MISSING HACK \ nextgroup=mercuryCommentOp syn keyword mercuryToDo contained HINT WARNING IMPORTANT \ nextgroup=mercuryCommentOp syn match mercuryCommentOp contained ": " syn cluster mercuryCommentDirectives contains=@Spell,mercuryToDo,mercuryCommentUri " Highlights the output of the Mercury error command (in extras) syn match mercuryCommentErr "\v(\* )@<=###[ ]@=" contained " Matches file names, email, file and http addresses (on a best effort basis). " This avoids spell checking on those, " and could also be used for plug-in development to open a browser, etc. syn match mercuryCommentUri contained "\v<[-0-9a-zA-Z.+_]+[@][-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,10}>" syn match mercuryCommentUri contained "\v<(http[s]?|file)://[^ ><]+>" syn match mercuryCommentUri contained "\v<([a-z][a-z0-9._]+[/])*[a-z][a-z0-9._]+[.]m>" syn match mercuryCommentSlash "/" contained nextgroup=mercuryCommentArity syn match mercuryCommentArity "\v\d+" contained syn match mercuryCommentSingleQuote /\v'[A-Za-z._0-9()]+'/ contained nextgroup=mercuryCommentSlash " Header means the line describing the Arguments of a predicate or function, " terminated with a colon. This also stops spell check on the argument names, " which Vim is not good at dealing with. syn region mercuryCommentHeader contained matchgroup=mercuryString \ start='\v[a-z][A-Za-z._0-9]*([(]([)]|[\[][a-z"])@!|\s*[=])@=' \ matchgroup=NONE keepend \ end="\v([.])|([:][-]@!)|(<[a-z]@=)|[)%][ \t]*[\n]@=" \ contains=mercuryOperator,mercuryCommentHeaderBlock, \ mercuryCommentHeaderList,mercuryCommentHeaderTuple, \ mercuryErrInAny,mercuryCommentHeaderCont,@mercuryFormatting syn match mercuryCommentHeaderCont contained "\v^[ \t]*[%]" syn region mercuryCommentHeaderList contained matchgroup=mercuryBracket \ start='\[' end=']' transparent fold \ contains=@mercuryTerms,mercuryCommentHeaderCont syn region mercuryCommentHeaderBlock contained matchgroup=mercuryBracket \ start='(' end=')' transparent fold \ contains=@mercuryTerms,mercuryCommentHeaderCont syn region mercuryCommentHeaderTuple contained matchgroup=mercuryBracket \ start='{' end='}' transparent fold \ contains=@mercuryTerms,mercuryCommentHeaderCont syn region mercuryCommentTexSingleQuote contained oneline \ start="\v`[^`]@=" end="\v'" nextgroup=mercuryCommentSlash syn region mercuryCommentTexDblQuote start="``" end="''" oneline contained \ contains=@Spell syn region mercuryCommentVimLine contained start="\vvim[:]" end="\v[\n]@=" syn cluster mercuryCommentDirectives add=mercuryCommentHeader syn cluster mercuryCommentDirectives add=mercuryCommentSingleQuote syn cluster mercuryCommentDirectives add=@mercuryCommentTex syn cluster mercuryCommentDirectives add=mercuryCommentVimLine syn cluster mercuryCommentTex contains=mercuryCommentTexDblQuote syn cluster mercuryCommentTex contains=mercuryCommentTexSingleQuote endif if exists("mercury_highlight_full_comment") && mercury_highlight_full_comment hi def link mercuryComment Comment hi def link mercuryCommentUri Underlined hi def link mercuryCComment Comment hi def link mercuryCppLikeComment Comment syn region mercuryComment start=/%/ end=/\v[\n]@=/ oneline contains= \ @mercuryCommentDirectives,@mercuryFormatting syn region mercuryCComment start="/\*" end="\*/" fold contains= \ @mercuryCommentDirectives,@mercuryFormatting,mercuryCommentErr syn region mercuryCppLikeComment start="//" end=/\v[\n]@=/ oneline contained contains= \ @mercuryCommentDirectives,@mercuryFormatting else " NOTE: the regions itself are not highlighted, just their start/end " tokens, this is needed in order to fake "transparent", which could be used " instead but does not support @Spell as a side-effect hi def link mercuryComment Normal hi def link mercuryCComment Normal hi def mercuryCommentUri term=underline cterm=underline gui=underline hi def link mercuryCppLikeComment Normal hi def link mercuryLeadTrailStar Comment syn match mercuryLeadTrailStar contained "^\v[ \t]*[*]+|[*]+$" syn region mercuryComment matchgroup=mercuryCommentToken start=/%[-=%*_]*/ end=/\v[\n]@=/ oneline \ contains=@mercuryCommentDirectives,@mercuryFormatting syn region mercuryCComment matchgroup=mercuryCommentToken start="\v/\*" end="\v[*]+/" keepend fold \ contains=@mercuryCommentDirectives,mercuryLeadTrailStar,@mercuryFormatting, \ mercuryCommentErr syn region mercuryCppLikeComment matchgroup=mercuryCommentToken start="//" end=/\v[\n]@=/ oneline \ contained contains=@mercuryCommentDirectives,@mercuryFormatting endif " Matching the Unix shebang syn region mercuryShebang matchgroup=mercuryCommentToken start="^\%1l#!/" end=/\v.+$/ \ oneline " Matching over-long lines if !exists("mercury_no_highlight_overlong") || !mercury_no_highlight_overlong syn match mercuryTooLong /\%80v[^")}\]%]*/ syn cluster mercuryFormatting add=mercuryTooLong endif " Clear all syntax (this is maybe not needed for newer versions of Vim syn sync clear " sync on a comment start, this assumes that no line comment is within a " C-style comment syn sync match mercurySync grouphere NONE "\v^[%]------" hi def link mercuryAccess Identifier hi def link mercuryAtom Constant hi def link mercuryBracket Delimiter hi def link mercuryClauseHead Statement hi def link mercuryCommentErr ErrorMsg hi def link mercuryCommentToken Comment hi def link mercuryCommentInfo Identifier if exists("mercury_highlight_comment_special") && mercury_highlight_comment_special hi def link mercuryCommentSlash Operator hi def link mercuryCommentArity Number hi def link mercuryCommentHeaderCont Comment hi def link mercuryCommentSingleQuote String hi def link mercuryCommentTexDblQuote String hi def link mercuryCommentTexSingleQuote String hi def link mercuryCommentVimLine mercuryComment endif hi def link mercuryCommentOp Operator hi def link mercuryCInterface mercuryPragma if !exists("mercury_no_highlight_foreign") || !mercury_no_highlight_foreign hi def link mercuryForeignId Identifier hi def link mercuryCLikeBracket mercuryBracket hi def link mercuryCLikeOperator mercuryOperator hi def link mercuryCLikeChar mercuryAtom hi def link mercuryCLikeCharEsc mercuryStringEsc hi def link mercuryCLikeDelimiter mercuryDelimiter hi def link mercuryCLikeKeyword Keyword hi def link mercuryCLikeString String hi def link mercuryCLikeNumber Number hi def link mercuryCLikeFloat Float hi def link mercuryCppLikeType Type hi def link mercuryCLikeType Type hi def link mercuryCBool mercuryBool hi def link mercuryCConst Constant hi def link mercuryCFunc Identifier hi def link mercuryCKeyword Keyword hi def link mercuryCStringFmt mercuryStringFmt hi def link mercuryCType mercuryForeignType hi def link mercuryCPreProc mercuryPragma hi def link mercuryCppLikeBool mercuryBool hi def link mercuryCppLikeConst Constant hi def link mercuryCppLikeKeyword Keyword hi def link mercuryCppLikeMod mercuryAccess hi def link mercuryCppLikeOperator mercuryOperator hi def link mercuryCString String hi def link mercuryCSharpBool mercuryBool hi def link mercuryCSharpString String hi def link mercuryCSharpStringFmt mercuryStringFmt hi def link mercuryCSharpStringFmtEsc mercuryStringEsc hi def link mercuryCSharpType mercuryForeignType hi def link mercuryJavaBool mercuryBool hi def link mercuryJavaType mercuryForeignType hi def link mercuryErlangKeyword Keyword hi def link mercuryErlangOperator Operator hi def link mercuryErlangBool mercuryBool hi def link mercuryErlangExtNumLiteral Number hi def link mercuryErlangString String hi def link mercuryErlangLogical mercuryLogical if exists("mercury_highlight_extra") && mercury_highlight_extra hi def link mercuryForeignType Type else hi def link mercuryForeignType Normal endif endif hi def link mercuryDelimiter Delimiter hi def link mercuryPurity Special hi def link mercuryImplKeyword Identifier hi def link mercuryKeyword Keyword hi def link mercuryNumCode Number hi def link mercuryFloat Float hi def link mercuryPragma PreProc hi def link mercuryForeignMod mercuryForeignIface hi def link mercuryForeignOperator Operator hi def link mercuryForeignIface PreProc hi def link mercuryImplication Special hi def link mercuryLogical Special hi def link mercuryEscErr ErrorMsg hi def link mercuryErrInAny ErrorMsg hi def link mercuryInlined Operator hi def link mercuryString String hi def link mercuryStringEsc Identifier hi def link mercuryStringFmt Special hi def link mercuryToDo Todo hi def link mercuryTooLong ErrorMsg hi def link mercuryWhitespace mercuryTodo hi def link mercuryTerminator Delimiter hi def link mercuryType Type if exists("mercury_highlight_extra") && mercury_highlight_extra hi def link mercuryOperator Operator else hi def link mercuryOperator Normal endif