neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

julia.vim (38191B)


      1 " Vim syntax file
      2 " Language:	julia
      3 " Maintainer:	Carlo Baldassi <carlobaldassi@gmail.com>
      4 " Homepage:	https://github.com/JuliaEditorSupport/julia-vim
      5 " Last Change:	2021 Aug 04
      6 "		2025 Dec 08 by Vim Project (update syntax script from upstream #18894)
      7 
      8 if version < 600
      9  syntax clear
     10 elseif exists("b:current_syntax")
     11  finish
     12 endif
     13 
     14 let s:cpo_save = &cpo
     15 set cpo&vim
     16 
     17 if version < 704
     18  " this is used to disable regex syntax like `\@3<='
     19  " on older vim versions
     20  function! s:d(x)
     21    return ''
     22  endfunction
     23 else
     24  function! s:d(x)
     25    return string(a:x)
     26  endfunction
     27 endif
     28 
     29 scriptencoding utf-8
     30 
     31 let s:julia_spellcheck_strings = get(g:, "julia_spellcheck_strings", 0)
     32 let s:julia_spellcheck_docstrings = get(g:, "julia_spellcheck_docstrings", 1)
     33 let s:julia_spellcheck_comments = get(g:, "julia_spellcheck_comments", 1)
     34 
     35 let s:julia_highlight_operators = get(g:, "julia_highlight_operators", 1)
     36 
     37 " List of characters, up to \UFF, which cannot be used in identifiers.
     38 " (It includes operator characters; we don't consider them identifiers.)
     39 " This is used mostly in lookbehinds with `\@<=`, e.g. when we need to check
     40 " that that we're not in the middle of an identifier.
     41 " It doesn't include a few characters (spaces and all closing parentheses)
     42 " because those may or may not be valid in the lookbehind on a case-by-case
     43 " basis.
     44 let s:nonid_chars = '\U00-\U08' . '\U0A-\U1F'
     45      \           . '\U21-\U28' . '\U2A-\U2F' . '\U3A-\U40' . '\U5B\U5C\U5E' . '\U60' . '\U7B\U7C'
     46      \           . '\U7E-\UA1' . '\UA7\UA8' . '\UAB-\UAD' . '\UAF\UB1\UB4' . '\UB6-\UB8' . '\UBB\UBF' . '\UD7\UF7'
     47 
     48 " The complete list
     49 let s:nonidS_chars = '[:space:])\U5D}' . s:nonid_chars
     50 
     51 
     52 " List of all valid operator chars up to \UFF (NOTE: they must all be included
     53 " in s:nonidS_chars, so that if we include that, then this is redundant)
     54 " It does not include '!' since it can be used in an identifier.
     55 " The list contains the following characters: '%&*+-/<=>\\^|~¬±×÷'
     56 let s:op_chars = '\U25\U26\U2A\U2B\U2D\U2F\U3C-\U3E\U5C\U5E\U7C\U7E\UAC\UB1\UD7\UF7'
     57 
     58 " List of all valid operator chars above \UFF
     59 " Written with ranges for performance reasons
     60 " The list contains the following characters: '…⁝⅋←↑→↓↔↚↛↜↝↞↠↢↣↤↦↩↪↫↬↮↶↷↺↻↼↽⇀⇁⇄⇆⇇⇉⇋⇌⇍⇎⇏⇐⇒⇔⇚⇛⇜⇝⇠⇢⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿∈∉∊∋∌∍∓∔∗∘∙√∛∜∝∤∥∦∧∨∩∪∷∸∺∻∽∾≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊞⊟⊠⊡⊢⊣⊩⊬⊮⊰⊱⊲⊳⊴⊵⊶⊷⊻⊼⊽⋄⋅⋆⋇⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌿▷⟂⟈⟉⟑⟒⟕⟖⟗⟰⟱⟵⟶⟷⟹⟺⟻⟼⟽⟾⟿⤀⤁⤂⤃⤄⤅⤆⤇⤈⤉⤊⤋⤌⤍⤎⤏⤐⤑⤒⤓⤔⤕⤖⤗⤘⤝⤞⤟⤠⥄⥅⥆⥇⥈⥉⥊⥋⥌⥍⥎⥏⥐⥑⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝⥞⥟⥠⥡⥢⥣⥤⥥⥦⥧⥨⥩⥪⥫⥬⥭⥮⥯⥰⦷⦸⦼⦾⦿⧀⧁⧡⧣⧤⧥⧴⧶⧷⧺⧻⨇⨈⨝⨟⨢⨣⨤⨥⨦⨧⨨⨩⨪⨫⨬⨭⨮⨰⨱⨲⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼⨽⩀⩁⩂⩃⩄⩅⩊⩋⩌⩍⩎⩏⩐⩑⩒⩓⩔⩕⩖⩗⩘⩚⩛⩜⩝⩞⩟⩠⩡⩢⩣⩦⩧⩪⩫⩬⩭⩮⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺⩻⩼⩽⩾⩿⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞⪟⪠⪡⪢⪣⪤⪥⪦⪧⪨⪩⪪⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫛⫷⫸⫹⫺⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿⭀⭁⭂⭃⭄⭇⭈⭉⭊⭋⭌←↑→↓'
     61 let s:op_chars_wc = '\U2026\U205D\U214B\U2190-\U2194\U219A-\U219E\U21A0\U21A2-\U21A4\U21A6\U21A9-\U21AC\U21AE\U21B6\U21B7\U21BA-\U21BD\U21C0\U21C1\U21C4\U21C6\U21C7\U21C9\U21CB-\U21D0\U21D2\U21D4\U21DA-\U21DD\U21E0\U21E2\U21F4-\U21FF\U2208-\U220D\U2213\U2214\U2217-\U221D\U2224-\U222A\U2237\U2238\U223A\U223B\U223D\U223E\U2240-\U228B\U228D-\U229C\U229E-\U22A3\U22A9\U22AC\U22AE\U22B0-\U22B7\U22BB-\U22BD\U22C4-\U22C7\U22C9-\U22D3\U22D5-\U22FF\U233F\U25B7\U27C2\U27C8\U27C9\U27D1\U27D2\U27D5-\U27D7\U27F0\U27F1\U27F5-\U27F7\U27F9-\U27FF\U2900-\U2918\U291D-\U2920\U2944-\U2970\U29B7\U29B8\U29BC\U29BE-\U29C1\U29E1\U29E3-\U29E5\U29F4\U29F6\U29F7\U29FA\U29FB\U2A07\U2A08\U2A1D\U2A1F\U2A22-\U2A2E\U2A30-\U2A3D\U2A40-\U2A45\U2A4A-\U2A58\U2A5A-\U2A63\U2A66\U2A67\U2A6A-\U2AD9\U2ADB\U2AF7-\U2AFA\U2B30-\U2B44\U2B47-\U2B4C\UFFE9-\UFFEC'
     62 
     63 
     64 " Characters that can be used to start an identifier. Above \UBF we don't
     65 " bother checking. (If a UTF8 operator is used, it will take precedence anyway.)
     66 let s:id_charsH = '\%([A-Za-z_\UA2-\UA6\UA9\UAA\UAE\UB0\UB5\UBA]\|[^\U00-\UBF]\)'
     67 " Characters that can appear in an identifier, starting in 2nd position. Above
     68 " \UBF we check for operators since we need to stop the identifier if one
     69 " appears. We don't check for invalid characters though.
     70 let s:id_charsW = '\%([0-9A-Za-z_!\UA2-\UA6\UA9\UAA\UAE-\UB0\UB2-\UB5\UB8-\UBA\UBC-\UBE]\|[^\U00-\UBF]\@=[^' . s:op_chars_wc . ']\)'
     71 
     72 " A valid julia identifier, more or less
     73 let s:idregex = '\%(' . s:id_charsH . s:id_charsW . '*\)'
     74 
     75 " Full operators regex
     76 let s:operators = '\%(' . '\.\%([-+*/^÷%|&⊻]\|//\|\\\|>>\|>>>\?\)\?='
     77      \         . '\|'  . '[!:<>]=\|||\|&&\||>\|<|\|[<>:]:\|<<\|>>>\?\|//\|[-=]>\|\.\.\.\?'
     78      \         . '\|'  . '\.!' . '\|'.s:id_charsW.'\@'.s:d(1).'<!!'
     79      \         . '\|'  . '\.\?[' . s:op_chars . s:op_chars_wc . ']'
     80      \         . '\)'
     81 
     82 
     83 syn case match
     84 
     85 syntax cluster juliaExpressions		contains=@juliaParItems,@juliaStringItems,@juliaKeywordItems,@juliaBlocksItems,@juliaTypesItems,@juliaConstItems,@juliaMacroItems,@juliaSymbolItems,@juliaOperatorItems,@juliaNumberItems,@juliaCommentItems,@juliaErrorItems,@juliaSyntaxRegions
     86 syntax cluster juliaExprsPrintf		contains=@juliaExpressions,@juliaPrintfItems
     87 syntax cluster juliaExprsNodot		contains=@juliaParItems,@juliaStringItems,@juliaMacroItems,@juliaSymbolItems,@juliaOperatorItems,@juliaCommentItems,juliaIdSymbol
     88 
     89 syntax cluster juliaParItems		contains=juliaParBlock,juliaSqBraIdxBlock,juliaSqBraBlock,juliaCurBraBlock,juliaQuotedParBlock,juliaQuotedQMarkPar
     90 syntax cluster juliaKeywordItems	contains=juliaKeyword,juliaWhereKeyword,juliaImportLine,juliaInfixKeyword,juliaRepKeyword
     91 syntax cluster juliaBlocksItems		contains=juliaConditionalBlock,juliaWhileBlock,juliaForBlock,juliaBeginBlock,juliaFunctionBlock,juliaMacroBlock,juliaQuoteBlock,juliaExceptionBlock,juliaLetBlock,juliaDoBlock,juliaModuleBlock,juliaStructBlock,juliaMutableStructBlock,juliaAbstractBlock,juliaPrimitiveBlock
     92 syntax cluster juliaTypesItems		contains=juliaBaseTypeBasic,juliaBaseTypeNum,juliaBaseTypeC,juliaBaseTypeError,juliaBaseTypeIter,juliaBaseTypeString,juliaBaseTypeArray,juliaBaseTypeDict,juliaBaseTypeSet,juliaBaseTypeIO,juliaBaseTypeProcess,juliaBaseTypeRange,juliaBaseTypeRegex,juliaBaseTypeFact,juliaBaseTypeSort,juliaBaseTypeRound,juliaBaseTypeSpecial,juliaBaseTypeRandom,juliaBaseTypeDisplay,juliaBaseTypeTime,juliaBaseTypeOther
     93 
     94 syntax cluster juliaConstItems  	contains=juliaConstNum,juliaConstBool,juliaConstEnv,juliaConstC,juliaConstGeneric,juliaConstIO,juliaPossibleEuler
     95 
     96 syntax cluster juliaMacroItems		contains=juliaPossibleMacro,juliaDollarVar,juliaDollarPar,juliaDollarSqBra
     97 syntax cluster juliaSymbolItems		contains=juliaPossibleSymbol
     98 syntax cluster juliaNumberItems		contains=juliaNumbers
     99 syntax cluster juliaStringItems		contains=juliaChar,juliaString,juliabString,juliasString,juliaShellString,juliaDocString,juliaRegEx
    100 syntax cluster juliaPrintfItems		contains=juliaPrintfParBlock,juliaPrintfString
    101 syntax cluster juliaOperatorItems	contains=juliaOperator,juliaRangeOperator,juliaCTransOperator,juliaTernaryRegion,juliaColon,juliaSemicolon,juliaComma
    102 syntax cluster juliaCommentItems	contains=juliaCommentL,juliaCommentM
    103 syntax cluster juliaErrorItems		contains=juliaErrorPar,juliaErrorEnd,juliaErrorElse,juliaErrorCatch,juliaErrorFinally
    104 
    105 syntax cluster juliaSyntaxRegions	contains=juliaIdSymbol,juliaTypeOperatorR2,juliaTypeOperatorR3,juliaWhereR,juliaDotted
    106 
    107 syntax cluster juliaSpellcheckStrings		contains=@spell
    108 syntax cluster juliaSpellcheckDocStrings	contains=@spell
    109 syntax cluster juliaSpellcheckComments		contains=@spell
    110 
    111 if !s:julia_spellcheck_docstrings
    112  syntax cluster juliaSpellcheckDocStrings	remove=@spell
    113 endif
    114 if !s:julia_spellcheck_strings
    115  syntax cluster juliaSpellcheckStrings		remove=@spell
    116 endif
    117 if !s:julia_spellcheck_comments
    118  syntax cluster juliaSpellcheckComments	remove=@spell
    119 endif
    120 
    121 syntax match   juliaSemicolon		display ";"
    122 syntax match   juliaComma		display ","
    123 syntax match   juliaColon		display ":"
    124 
    125 " A dot can introduce a sort of 'environment' such that words after it are not
    126 " recognized as keywords. This has low precedence so that it can be overridden
    127 " by operators
    128 syntax match   juliaDotted		transparent "\.\s*[^])}.]" contains=@juliaExprsNodot
    129 syntax match   juliaDottedT		contained transparent "\.\s*[^])}.]" contains=@juliaExprsNodot,juliaType
    130 
    131 syntax match   juliaErrorPar		display "[])}]"
    132 syntax match   juliaErrorEnd		display "\<end\>"
    133 syntax match   juliaErrorElse		display "\<\%(else\|elseif\)\>"
    134 syntax match   juliaErrorCatch		display "\<catch\>"
    135 syntax match   juliaErrorFinally	display "\<finally\>"
    136 syntax match   juliaErrorSemicol	display contained ";"
    137 
    138 syntax region  juliaParBlock		matchgroup=juliaParDelim start="(" end=")" contains=@juliaExpressions,juliaComprehensionFor
    139 syntax region  juliaParBlockInRange	matchgroup=juliaParDelim contained start="(" end=")" contains=@juliaExpressions,juliaParBlockInRange,juliaRangeKeyword,juliaComprehensionFor
    140 syntax region  juliaSqBraIdxBlock	matchgroup=juliaParDelim start="\[" end="\]" contains=@juliaExpressions,juliaParBlockInRange,juliaRangeKeyword,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS
    141 exec 'syntax region  juliaSqBraBlock	matchgroup=juliaParDelim start="\%(^\|\s\|' . s:operators . '\)\@'.s:d(3).'<=\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS'
    142 syntax region  juliaCurBraBlock		matchgroup=juliaParDelim start="{" end="}" contains=juliaType,juliaDottedT,@juliaExpressions
    143 
    144 exec 'syntax match   juliaType		contained "\%(' . s:idregex . '\.\)*\zs' . s:idregex . '"'
    145 
    146 " This is a generic identifier followed by some symbol, either a type
    147 " operator (<: or >:), or an open parenthesis, or an open curly bracket.
    148 " It's used to recognize one of the contained regions looking for identifiers
    149 " only once. Once recognized, those regions no longer need to use the
    150 " expensive s:idregex.
    151 exec 'syntax match   juliaIdSymbol	transparent "' . s:idregex . '\%(\s*[<>]:\|\.\?(\|{\|\"\)\@=" contains=juliaFunctionCall,juliaParamType,juliaStringPrefixed,juliaTypeOperatorR1'
    152 
    153 syntax match  juliaFunctionCall		contained "[^{([:space:]<>\"]\+(\@=" nextgroup=juliaParBlock
    154 
    155 exec 'syntax match   juliaFunctionDef	contained transparent "\%(\<\%(function\|macro\)\)\@'.s:d(8).'<=\s\+\zs' . s:idregex . '\%(\.' . s:idregex . '\)*\ze\s*\%((\|\send\>\|$\)" contains=juliaFunctionName'
    156 exec 'syntax match   juliaFunctionName	contained "\%(\<\%(function\|macro\)\s\+\)\@'.s:d(20).'<=\%(' . s:idregex . '\.\)*\zs' . s:idregex . '"'
    157 
    158 exec 'syntax match   juliaStructR	contained transparent "\%(\<\%(\%(mutable\s\+\)\?struct\|\%(abstract\|primitive\)\s\+type\)\s\+\)\@'.s:d(20).'<=\%(' . s:idregex . '\.\)*' . s:idregex . '\>\(\s*(\)\@!" contains=juliaType'
    159 
    160 syntax match   juliaKeyword		display "\<\%(return\|local\|global\|const\)\>"
    161 syntax match   juliaInfixKeyword	display "\%(=\s*\)\@<!\<\%(in\|isa\)\>\S\@!\%(\s*=\)\@!"
    162 
    163 " The import/export/using/public keywords introduce a sort of special parsing
    164 " environment with its own rules
    165 exec 'syntax region  juliaImportLine		matchgroup=juliaKeyword excludenl start="\<\%(import\|using\|export\|public\)\>" skip="\%(\%(\<\%(import\|using\|export\|public\)\>\)\|^\)\@'.s:d(6).'<=$" end="$" end="\%([])}]\)\@=" contains=@juliaExpressions,juliaAsKeyword,@juliaContinuationItems,juliaMacroName'
    166 syntax match   juliaAsKeyword		display contained "\<as\>"
    167 
    168 syntax match   juliaRepKeyword		display "\<\%(break\|continue\)\>"
    169 syntax region  juliaConditionalBlock	matchgroup=juliaConditional start="\<if\>" end="\<end\>" contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock fold
    170 syntax region  juliaConditionalEIBlock	matchgroup=juliaConditional transparent contained start="\<elseif\>" end="\<\%(end\|else\|elseif\)\>"me=s-1 contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock
    171 syntax region  juliaConditionalEBlock	matchgroup=juliaConditional transparent contained start="\<else\>" end="\<end\>"me=s-1 contains=@juliaExpressions
    172 syntax region  juliaWhileBlock		matchgroup=juliaRepeat start="\<while\>" end="\<end\>" contains=@juliaExpressions fold
    173 syntax region  juliaForBlock		matchgroup=juliaRepeat start="\<for\>" end="\<end\>" contains=@juliaExpressions,juliaOuter fold
    174 syntax region  juliaBeginBlock		matchgroup=juliaBlKeyword start="\<begin\>" end="\<end\>" contains=@juliaExpressions fold
    175 syntax region  juliaFunctionBlock	matchgroup=juliaBlKeyword start="\<function\>" end="\<end\>" contains=@juliaExpressions,juliaFunctionDef fold
    176 syntax region  juliaMacroBlock		matchgroup=juliaBlKeyword start="\<macro\>" end="\<end\>" contains=@juliaExpressions,juliaFunctionDef fold
    177 syntax region  juliaQuoteBlock		matchgroup=juliaBlKeyword start="\<quote\>" end="\<end\>" contains=@juliaExpressions fold
    178 syntax region  juliaStructBlock		matchgroup=juliaBlKeyword start="\<struct\>" end="\<end\>" contains=@juliaExpressions,juliaStructR fold
    179 syntax region  juliaMutableStructBlock	matchgroup=juliaBlKeyword start="\<mutable\s\+struct\>" end="\<end\>" contains=@juliaExpressions,juliaStructR fold
    180 syntax region  juliaLetBlock		matchgroup=juliaBlKeyword start="\<let\>" end="\<end\>" contains=@juliaExpressions fold
    181 syntax region  juliaDoBlock		matchgroup=juliaBlKeyword start="\<do\>" end="\<end\>" contains=@juliaExpressions fold
    182 syntax region  juliaModuleBlock		matchgroup=juliaBlKeyword start="\<\%(bare\)\?module\>" end="\<end\>" contains=@juliaExpressions fold
    183 syntax region  juliaExceptionBlock	matchgroup=juliaException start="\<try\>" end="\<end\>" contains=@juliaExpressions,juliaCatchBlock,juliaFinallyBlock fold
    184 syntax region  juliaCatchBlock		matchgroup=juliaException transparent contained start="\<catch\>" end="\<end\>"me=s-1 contains=@juliaExpressions,juliaTryElseBlock,juliaFinallyBlock
    185 syntax region  juliaTryElseBlock	matchgroup=juliaException transparent contained start="\<else\>" end="\<end\>"me=s-1 contains=@juliaExpressions,juliaFinallyBlock
    186 syntax region  juliaFinallyBlock	matchgroup=juliaException transparent contained start="\<finally\>" end="\<end\>"me=s-1 contains=@juliaExpressions,juliaCatchBlock
    187 syntax region  juliaAbstractBlock	matchgroup=juliaBlKeyword start="\<abstract\s\+type\>" end="\<end\>" fold contains=@juliaExpressions,juliaStructR
    188 syntax region  juliaPrimitiveBlock	matchgroup=juliaBlKeyword start="\<primitive\s\+type\>" end="\<end\>" fold contains=@juliaExpressions,juliaStructR
    189 
    190 exec 'syntax region  juliaComprehensionFor	matchgroup=juliaComprehensionFor transparent contained start="\%([^[:space:],;:({[]\_s*\)\@'.s:d(80).'<=\<for\>" end="\ze[]);]" contains=@juliaExpressions,juliaComprehensionIf,juliaComprehensionFor'
    191 syntax match   juliaComprehensionIf	contained "\<if\>"
    192 
    193 exec 'syntax match   juliaOuter		contained "\<outer\ze\s\+' . s:idregex . '\>"'
    194 
    195 syntax match   juliaRangeKeyword	contained "\<\%(begin\|end\)\>"
    196 
    197 syntax match   juliaBaseTypeBasic	display "\<\%(\%(N\|Named\)\?Tuple\|Symbol\|Function\|Union\%(All\)\?\|Type\%(Name\|Var\)\?\|Any\|ANY\|Vararg\|Ptr\|Exception\|Module\|Expr\|DataType\|\%(LineNumber\|Quote\)Node\|\%(Weak\|Global\)\?Ref\|Method\|Pair\|Val\|Nothing\|Some\|Missing\)\>"
    198 syntax match   juliaBaseTypeNum		display "\<\%(U\?Int\%(8\|16\|32\|64\|128\)\?\|Float\%(16\|32\|64\)\|Complex\|Bool\|Char\|Number\|Signed\|Unsigned\|Integer\|AbstractFloat\|Real\|Rational\|\%(Abstract\)\?Irrational\|Enum\|BigInt\|BigFloat\|MathConst\|ComplexF\%(16\|32\|64\)\)\>"
    199 syntax match   juliaBaseTypeC		display "\<\%(FileOffset\|C\%(u\?\%(char\|short\|int\|long\(long\)\?\|w\?string\)\|float\|double\|\%(ptrdiff\|s\?size\|wchar\|off\|u\?intmax\)_t\|void\)\)\>"
    200 syntax match   juliaBaseTypeError	display "\<\%(\%(Bounds\|Divide\|Domain\|\%(Stack\)\?Overflow\|EOF\|Undef\%(Ref\|Var\)\|System\|Type\|Parse\|Argument\|Key\|Load\|Method\|Inexact\|OutOfMemory\|Init\|Assertion\|ReadOnlyMemory\|StringIndex\)Error\|\%(Interrupt\|Error\|ProcessExited\|Captured\|Composite\|InvalidState\|Missing\|\%(Process\|Task\)Failed\)Exception\|DimensionMismatch\|SegmentationFault\)\>"
    201 syntax match   juliaBaseTypeIter	display "\<\%(EachLine\|Enumerate\|Cartesian\%(Index\|Range\)\|LinSpace\|CartesianIndices\)\>"
    202 syntax match   juliaBaseTypeString	display "\<\%(DirectIndex\|Sub\|Rep\|Rev\|Abstract\|Substitution\)\?String\>"
    203 syntax match   juliaBaseTypeArray	display "\<\%(\%(Sub\)\?Array\|\%(Abstract\|Dense\|Strided\)\?\%(Array\|Matrix\|Vec\%(tor\|OrMat\)\)\|SparseMatrixCSC\|\%(AbstractSparse\|Bit\|Shared\)\%(Array\|Vector\|Matrix\)\|\%\(D\|Bid\|\%(Sym\)\?Trid\)iagonal\|Hermitian\|Symmetric\|UniformScaling\|\%(Lower\|Upper\)Triangular\|\%(Sparse\|Row\)Vector\|VecElement\|Conj\%(Array\|Matrix\|Vector\)\|Index\%(Cartesian\|Linear\|Style\)\|PermutedDimsArray\|Broadcasted\|Adjoint\|Transpose\|LinearIndices\)\>"
    204 syntax match   juliaBaseTypeDict	display "\<\%(WeakKey\|Id\|Abstract\)\?Dict\>"
    205 syntax match   juliaBaseTypeSet		display "\<\%(\%(Abstract\|Bit\)\?Set\)\>"
    206 syntax match   juliaBaseTypeIO		display "\<\%(IO\%(Stream\|Buffer\|Context\)\?\|RawFD\|StatStruct\|FileMonitor\|PollingFileWatcher\|Timer\|Base64\%(Decode\|Encode\)Pipe\|\%(UDP\|TCP\)Socket\|\%(Abstract\)\?Channel\|BufferStream\|ReentrantLock\|GenericIOBuffer\)\>"
    207 syntax match   juliaBaseTypeProcess	display "\<\%(Pipe\|Cmd\|PipeBuffer\)\>"
    208 syntax match   juliaBaseTypeRange	display "\<\%(Dims\|RangeIndex\|\%(Abstract\|Lin\|Ordinal\|Step\|\%(Abstract\)\?Unit\)Range\|Colon\|ExponentialBackOff\|StepRangeLen\)\>"
    209 syntax match   juliaBaseTypeRegex	display "\<Regex\%(Match\)\?\>"
    210 syntax match   juliaBaseTypeFact	display "\<\%(Factorization\|BunchKaufman\|\%(Cholesky\|QR\)\%(Pivoted\)\?\|\%(Generalized\)\?\%(Eigen\|SVD\|Schur\)\|Hessenberg\|LDLt\|LQ\|LU\)\>"
    211 syntax match   juliaBaseTypeSort	display "\<\%(Insertion\|\(Partial\)\?Quick\|Merge\)Sort\>"
    212 syntax match   juliaBaseTypeRound	display "\<Round\%(ingMode\|FromZero\|Down\|Nearest\%(Ties\%(Away\|Up\)\)\?\|ToZero\|Up\)\>"
    213 syntax match   juliaBaseTypeSpecial	display "\<\%(LocalProcess\|ClusterManager\)\>"
    214 syntax match   juliaBaseTypeRandom	display "\<\%(AbstractRNG\|MersenneTwister\|RandomDevice\)\>"
    215 syntax match   juliaBaseTypeDisplay	display "\<\%(Text\(Display\)\?\|\%(Abstract\)\?Display\|MIME\|HTML\)\>"
    216 syntax match   juliaBaseTypeTime	display "\<\%(Date\%(Time\)\?\|DateFormat\)\>"
    217 syntax match   juliaBaseTypeOther	display "\<\%(RemoteRef\|Task\|Condition\|VersionNumber\|IPv[46]\|SerializationState\|WorkerConfig\|Future\|RemoteChannel\|IPAddr\|Stack\%(Trace\|Frame\)\|\(Caching\|Worker\)Pool\|AbstractSerializer\)\>"
    218 
    219 syntax match   juliaConstNum		display "\%(\<\%(\%(NaN\|Inf\)\%(16\|32\|64\)\?\|pi\|π\)\>\)"
    220 " Note: recognition of ℯ, which Vim does not consider a valid identifier, is
    221 " complicated. We detect possible uses by just looking for the character (for
    222 " performance) and then check that it's actually used by its own.
    223 " (This also tries to detect preceding number constants; it does so in a crude
    224 " way.)
    225 syntax match   juliaPossibleEuler	"ℯ" contains=juliaEuler
    226 exec 'syntax match   juliaEuler		contained "\%(\%(^\|[' . s:nonidS_chars . s:op_chars_wc . ']\)\%(.\?[0-9][.0-9eEf_]*\d\)\?\)\@'.s:d(80).'<=ℯ\ze[' . s:nonidS_chars . s:op_chars_wc . ']"'
    227 syntax match   juliaConstBool		display "\<\%(true\|false\)\>"
    228 syntax match   juliaConstEnv		display "\<\%(ARGS\|ENV\|ENDIAN_BOM\|LOAD_PATH\|VERSION\|PROGRAM_FILE\|DEPOT_PATH\)\>"
    229 syntax match   juliaConstIO		display "\<\%(std\%(out\|in\|err\)\|devnull\)\>"
    230 syntax match   juliaConstC		display "\<\%(C_NULL\)\>"
    231 syntax match   juliaConstGeneric	display "\<\%(nothing\|Main\|undef\|missing\)\>"
    232 
    233 syntax match   juliaParamType		contained "[^{([:space:]<>\"]\+\ze{" nextgroup=juliaCurBraBlock
    234 
    235 syntax match   juliaPossibleMacro	transparent "@" contains=juliaMacroCall,juliaMacroCallP,juliaPrintfMacro,juliaDocMacro,juliaDocMacroPre
    236 
    237 exec 'syntax match   juliaMacro		contained "@' . s:idregex . '\%(\.' . s:idregex . '\)*"'
    238 syntax match   juliaMacro		contained "@[!.~$%^*/\\|<>+-]\ze[^0-9]"
    239 exec 'syntax region  juliaMacroCall	contained transparent start="\(@' . s:idregex . '\%(\.' . s:idregex . '\)*\)\@=\1\%([^(]\|$\)" end="\ze\%([])};#]\|$\|\<for\>\|\<end\>\)" contains=@juliaExpressions,juliaMacro,juliaSymbolS,juliaQuotedParBlockS'
    240 exec 'syntax region  juliaMacroCall	contained transparent start="\(@.\)\@=\1\%([^(]\|$\)" end="\ze\%([])};#]\|$\|\<for\>\|\<end\>\)" contains=@juliaExpressions,juliaMacro,juliaSymbolS,juliaQuotedParBlockS'
    241 exec 'syntax region  juliaMacroCallP	contained transparent start="@' . s:idregex . '\%(\.' . s:idregex . '\)*(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaParBlock'
    242 exec 'syntax region  juliaMacroCallP	contained transparent start="@.(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaParBlock'
    243 
    244 exec 'syntax match   juliaNumbers	transparent "\%(^\|[' . s:nonidS_chars . s:op_chars_wc . ']\)\@'.s:d(1).'<=\d\|\.\d\|im\>" contains=juliaNumber,juliaFloat,juliaComplexUnit'
    245 
    246 "integer regexes
    247 let s:dec_regex = '\d\%(_\?\d\)*\%(\>\|im\>\|\ze\D\)'
    248 let s:hex_regex = '0x\x\%(_\?\x\)*\%(\>\|im\>\|\ze\X\)'
    249 let s:bin_regex = '0b[01]\%(_\?[01]\)*\%(\>\|im\>\|\ze[^01]\)'
    250 let s:oct_regex = '0o\o\%(_\?\o\)*\%(\>\|im\>\|\ze\O\)'
    251 
    252 let s:int_regex = '\%(' . s:hex_regex
    253      \         . '\|'  . s:bin_regex
    254      \         . '\|'  . s:oct_regex
    255      \         . '\|'  . s:dec_regex
    256      \         . '\)'
    257 
    258 "floating point regexes
    259 "  starting with a dot, optional exponent
    260 let s:float_regex1 = '\.\d\%(_\?\d\)*\%([eEf][-+]\?\d\+\)\?\%(\>\|im\>\|\ze\D\)'
    261 "  with dot, optional exponent
    262 let s:float_regex2 = '\d\%(_\?\d\)*\.\%(\d\%(_\?\d\)*\)\?\%([eEf][-+]\?\d\+\)\?\%(\>\|im\>\|\ze\D\)'
    263 "  without dot, with exponent
    264 let s:float_regex3 = '\d\%(_\?\d\)*[eEf][-+]\?\d\+\%(\>\|im\>\|\ze\D\)'
    265 
    266 "hex floating point numbers
    267 "  starting with a dot
    268 let s:hexfloat_regex1 = '0x\.\%\(\x\%(_\?\x\)*\)\?[pP][-+]\?\d\+\%(\>\|im\>\|\ze\X\)'
    269 "  starting with a digit
    270 let s:hexfloat_regex2 = '0x\x\%(_\?\x\)*\%\(\.\%\(\x\%(_\?\x\)*\)\?\)\?[pP][-+]\?\d\+\%(\>\|im\>\|\ze\X\)'
    271 
    272 let s:float_regex = '\%(' . s:float_regex3
    273      \           . '\|'  . s:float_regex2
    274      \           . '\|'  . s:float_regex1
    275      \           . '\|'  . s:hexfloat_regex2
    276      \           . '\|'  . s:hexfloat_regex1
    277      \           . '\)'
    278 
    279 exec 'syntax match   juliaNumber	contained "' . s:int_regex . '" contains=juliaComplexUnit'
    280 exec 'syntax match   juliaFloat		contained "' . s:float_regex . '" contains=juliaComplexUnit'
    281 syntax match   juliaComplexUnit		display	contained "\<im\>"
    282 
    283 syntax match   juliaRangeOperator	display ":"
    284 exec 'syntax match   juliaOperator	"' . s:operators . '"'
    285 
    286 exec 'syntax region  juliaTernaryRegion	matchgroup=juliaTernaryOperator start="\s\zs?\ze\s" skip="\%(:\(:\|[^:[:space:]'."'".'"({[]\+\s*\ze:\)\|\%(?\s*\)\@'.s:d(6).'<=:(\)" end=":" contains=@juliaExpressions,juliaErrorSemicol'
    287 
    288 let s:interp_dollar = '\([' . s:nonidS_chars . s:op_chars_wc . '!]\|^\)\@'.s:d(1).'<=\$'
    289 
    290 exec 'syntax match   juliaDollarVar	display contained "' . s:interp_dollar . s:idregex . '"'
    291 exec 'syntax region  juliaDollarPar	matchgroup=juliaDollarVar contained start="' .s:interp_dollar . '(" end=")" contains=@juliaExpressions'
    292 exec 'syntax region  juliaDollarSqBra	matchgroup=juliaDollarVar contained start="' .s:interp_dollar . '\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS'
    293 
    294 syntax match   juliaChar		"'\\\?.'" contains=juliaSpecialChar
    295 syntax match   juliaChar		display "'\\\o\{3\}'" contains=juliaOctalEscapeChar
    296 syntax match   juliaChar		display "'\\x\x\{2\}'" contains=juliaHexEscapeChar
    297 syntax match   juliaChar		display "'\\u\x\{1,4\}'" contains=juliaUniCharSmall
    298 syntax match   juliaChar		display "'\\U\x\{1,8\}'" contains=juliaUniCharLarge
    299 
    300 exec 'syntax match   juliaCTransOperator	"[[:space:]}' . s:nonid_chars . s:op_chars_wc . '!]\@'.s:d(1).'<!\.\?' . "'" . 'ᵀ\?"'
    301 
    302 " TODO: some of these might be specialized; the rest could be just left to the
    303 "       generic juliaStringPrefixed fallback
    304 syntax region  juliaString		matchgroup=juliaStringDelim start=+\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckStrings
    305 syntax region  juliaStringPrefixed	contained matchgroup=juliaStringDelim start=+[^{([:space:]<>"]\+\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw
    306 syntax region  juliabString		matchgroup=juliaStringDelim start=+\<b\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars
    307 syntax region  juliasString		matchgroup=juliaStringDelim start=+\<s\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars
    308 
    309 syntax region  juliaDocString		matchgroup=juliaDocStringDelim fold start=+^"""+ skip=+\%(\\\\\)*\\"+ end=+"""+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckDocStrings
    310 
    311 exec 'syntax region  juliaPrintfMacro		contained transparent start="@s\?printf(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaPrintfParBlock'
    312 syntax region  juliaPrintfMacro		contained transparent start="@s\?printf\s\+" end="\ze\%([])};#]\|$\|\<for\>\)" contains=@juliaExprsPrintf,juliaMacro,juliaSymbolS,juliaQuotedParBlockS
    313 syntax region  juliaPrintfParBlock	contained matchgroup=juliaParDelim start="(" end=")" contains=@juliaExprsPrintf
    314 syntax region  juliaPrintfString	contained matchgroup=juliaStringDelim start=+"+ skip=+\%(\\\\\)*\\"+ end=+"+ contains=@juliaSpecialChars,@juliaPrintfChars
    315 
    316 exec 'syntax region  juliaDocMacroPre	contained transparent start=+@doc\s\+\%(' . s:idregex . '\%(\.' . s:idregex . '\)*\)\z("\%(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\(\z1\)\@'.s:d(3).'<=+ contains=juliaMacro,juliaDocStringMRaw'
    317 exec 'syntax region  juliaDocMacro	contained transparent start=+@doc\s\+\z("\%(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\(\z1\)\@'.s:d(3).'<=+ contains=juliaMacro,juliaDocStringM'
    318 syntax region  juliaDocStringMRaw	contained fold matchgroup=juliaDocStringDelim fold start=+\z\("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpellcheckDocStrings
    319 syntax region  juliaDocStringM		contained fold matchgroup=juliaDocStringDelim fold start=+\z\("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckDocStrings
    320 
    321 syntax region  juliaShellString		matchgroup=juliaStringDelim start=+`+ skip=+\%(\\\\\)*\\`+ end=+`+ contains=@juliaStringVars,juliaSpecialChar
    322 
    323 syntax cluster juliaStringVars		contains=juliaStringVarsPar,juliaStringVarsSqBra,juliaStringVarsCurBra,juliaStringVarsPla
    324 syntax region  juliaStringVarsPar	contained matchgroup=juliaStringVarDelim start="$(" end=")" contains=@juliaExpressions
    325 syntax region  juliaStringVarsSqBra	contained matchgroup=juliaStringVarDelim start="$\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS
    326 syntax region  juliaStringVarsCurBra	contained matchgroup=juliaStringVarDelim start="${" end="}" contains=@juliaExpressions
    327 exec 'syntax match   juliaStringVarsPla	contained "\$' . s:idregex . '"'
    328 
    329 " TODO improve RegEx
    330 syntax region  juliaRegEx		matchgroup=juliaStringDelim start=+\<r\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1[imsx]*+
    331 
    332 syntax cluster juliaSpecialChars	contains=juliaSpecialChar,juliaDoubleBackslash,juliaEscapedQuote,juliaOctalEscapeChar,juliaHexEscapeChar,juliaUniCharSmall,juliaUniCharLarge
    333 syntax match   juliaSpecialChar		display contained "\\."
    334 syntax match   juliaOctalEscapeChar	display contained "\\\o\{3\}"
    335 syntax match   juliaHexEscapeChar	display contained "\\x\x\{2\}"
    336 syntax match   juliaUniCharSmall	display contained "\\u\x\{1,4\}"
    337 syntax match   juliaUniCharLarge	display contained "\\U\x\{1,8\}"
    338 syntax cluster juliaSpecialCharsRaw	contains=juliaDoubleBackslash,juliaEscapedQuote
    339 syntax match   juliaDoubleBackslash	contained "\\\\"
    340 syntax match   juliaEscapedQuote	contained "\\\""
    341 
    342 syntax cluster juliaPrintfChars		contains=juliaErrorPrintfFmt,juliaPrintfFmt
    343 syntax match   juliaErrorPrintfFmt	display contained "\\\?%."
    344 syntax match   juliaPrintfFmt		display contained "%\%(\d\+\$\)\=[-+' #0]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlLjqzt]\|ll\|hh\)\=[aAbdiuoxXDOUfFeEgGcCsSpn]"
    345 syntax match   juliaPrintfFmt		display contained "%%"
    346 syntax match   juliaPrintfFmt		display contained "\\%\%(\d\+\$\)\=[-+' #0]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlLjqzt]\|ll\|hh\)\=[aAbdiuoxXDOUfFeEgGcCsSpn]"hs=s+1
    347 syntax match   juliaPrintfFmt		display contained "\\%%"hs=s+1
    348 
    349 " this is used to restrict the search for Symbols to when colons appear at all
    350 " (for performance reasons)
    351 syntax match   juliaPossibleSymbol	transparent ":\ze[^:]" contains=juliaSymbol,juliaQuotedParBlock,juliaQuotedQMarkPar,juliaColon
    352 
    353 let s:quotable = '\%(' . s:idregex . '\|' . s:operators . '\|[?.]\|' . s:float_regex . '\|' . s:int_regex . '\)'
    354 let s:quoting_colon = '\%(\%(^\s*\|\s\{6,\}\|[' . s:nonid_chars . s:op_chars_wc . ']\s*\)\@'.s:d(6).'<=\|\%(\<\%(return\|if\|else\%(if\)\?\|while\|try\|begin\)\s\+\)\@'.s:d(9).'<=\)\zs:'
    355 let s:quoting_colonS = '\s\@'.s:d(1).'<=:'
    356 
    357 " note: juliaSymbolS only works within whitespace-sensitive contexts,
    358 " such as in macro calls without parentheses, or within square brackets.
    359 " It is used to override the recognition of expressions like `a :b` as
    360 " ranges rather than symbols in those contexts.
    361 " (Note that such `a :b` expressions only allows at most 5 spaces between
    362 " the identifier and the colon anyway.)
    363 
    364 exec 'syntax match   juliaSymbol	contained "' . s:quoting_colon . s:quotable . '"'
    365 exec 'syntax match   juliaSymbolS	contained "' . s:quoting_colonS . s:quotable . '"'
    366 
    367 " same as above for quoted expressions such as :(expr)
    368 exec 'syntax region   juliaQuotedParBlock	matchgroup=juliaQParDelim start="' . s:quoting_colon . '(" end=")" contains=@juliaExpressions'
    369 exec 'syntax match    juliaQuotedQMarkPar	"' . s:quoting_colon . '(\s*?\s*)" contains=juliaQuotedQMark'
    370 exec 'syntax region   juliaQuotedParBlockS	matchgroup=juliaQParDelim contained start="' . s:quoting_colonS . '(" end=")" contains=@juliaExpressions'
    371 
    372 
    373 syntax match   juliaTypeOperatorR1	contained "[^{([:space:]<>\"]\+\%(\s*[<>]:\)\@="
    374 
    375 " force precedence over Symbols
    376 syntax match   juliaTypeOperator	contained "[<>:]:"
    377 exec 'syntax match   juliaTypeOperatorR2	transparent "[<>:]:\s*\%(' . s:idregex . '\.\)*' . s:idregex . '" contains=juliaTypeOperator,juliaType,juliaDottedT,@juliaExpressions nextgroup=juliaTypeOperator'
    378 syntax match   juliaIsaKeyword		contained "\<isa\>"
    379 exec 'syntax match   juliaTypeOperatorR3	transparent "\<isa\s\+\%(' . s:idregex . '\.\)*' . s:idregex . '" contains=juliaIsaKeyword,juliaType,juliaDottedT,@juliaExpressions nextgroup=juliaIsaKeyword'
    380 
    381 syntax match   juliaWhereKeyword       	"\<where\>"
    382 exec 'syntax match   juliaWhereR	transparent "\<where\s\+' . s:idregex . '" contains=juliaWhereKeyword,juliaType,juliaDottedT,juliaIdSymbol'
    383 
    384 syntax region  juliaCommentL		matchgroup=juliaCommentDelim excludenl start="#\ze\%([^=]\|$\)" end="$" contains=juliaTodo,@juliaSpellcheckComments
    385 syntax region  juliaCommentM		matchgroup=juliaCommentDelim fold start="#=\ze\%([^#]\|$\)" end="=#" contains=juliaTodo,juliaCommentM,@juliaSpellcheckComments
    386 syntax keyword juliaTodo		contained TODO FIXME XXX
    387 
    388 " detect an end-of-line with only whitespace or comments before it
    389 let s:eol = '\s*\%(\%(\%(#=\%(=#\@!\|[^=]\|\n\)\{-}=#\)\s*\)\+\)\?\%(#=\@!.*\)\?\n'
    390 
    391 " a trailing comma, or colon, or an empty line in an import/using/export/public
    392 " multi-line command. Used to recognize the as keyword, and for indentation
    393 " (this needs to take precedence over normal commas and colons, and comments)
    394 syntax cluster juliaContinuationItems	contains=juliaContinuationComma,juliaContinuationColon,juliaContinuationNone
    395 exec 'syntax region  juliaContinuationComma	matchgroup=juliaComma contained start=",\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems'
    396 exec 'syntax region  juliaContinuationColon	matchgroup=juliaColon contained start=":\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems'
    397 exec 'syntax region  juliaContinuationNone	matchgroup=NONE contained start="\%(\<\%(import\|using\|export\|public\)\>\|^\)\@'.s:d(6).'<=\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems,juliaAsKeyword'
    398 exec 'syntax match   juliaMacroName		contained "@' . s:idregex . '\%(\.' . s:idregex . '\)*"'
    399 
    400 " the following are disabled by default, but
    401 " can be enabled by entering e.g.
    402 "   :hi link juliaParDelim Delimiter
    403 hi def link juliaParDelim		juliaNone
    404 hi def link juliaSemicolon		juliaNone
    405 hi def link juliaComma			juliaNone
    406 hi def link juliaFunctionCall		juliaNone
    407 
    408 hi def link juliaColon			juliaOperator
    409 
    410 hi def link juliaFunctionName		juliaFunction
    411 hi def link juliaFunctionName1		juliaFunction
    412 hi def link juliaMacroName		juliaMacro
    413 
    414 
    415 hi def link juliaKeyword		Keyword
    416 hi def link juliaWhereKeyword		Keyword
    417 hi def link juliaInfixKeyword		Keyword
    418 hi def link juliaIsaKeyword		Keyword
    419 hi def link juliaAsKeyword		Keyword
    420 hi def link juliaRepKeyword		Keyword
    421 hi def link juliaBlKeyword		Keyword
    422 hi def link juliaConditional		Conditional
    423 hi def link juliaRepeat			Repeat
    424 hi def link juliaException		Exception
    425 hi def link juliaOuter			Keyword
    426 hi def link juliaBaseTypeBasic		Type
    427 hi def link juliaBaseTypeNum		Type
    428 hi def link juliaBaseTypeC		Type
    429 hi def link juliaBaseTypeError		Type
    430 hi def link juliaBaseTypeIter		Type
    431 hi def link juliaBaseTypeString		Type
    432 hi def link juliaBaseTypeArray		Type
    433 hi def link juliaBaseTypeDict		Type
    434 hi def link juliaBaseTypeSet		Type
    435 hi def link juliaBaseTypeIO		Type
    436 hi def link juliaBaseTypeProcess	Type
    437 hi def link juliaBaseTypeRange		Type
    438 hi def link juliaBaseTypeRegex		Type
    439 hi def link juliaBaseTypeFact		Type
    440 hi def link juliaBaseTypeSort		Type
    441 hi def link juliaBaseTypeRound		Type
    442 hi def link juliaBaseTypeSpecial	Type
    443 hi def link juliaBaseTypeRandom		Type
    444 hi def link juliaBaseTypeDisplay	Type
    445 hi def link juliaBaseTypeTime		Type
    446 hi def link juliaBaseTypeOther		Type
    447 
    448 hi def link juliaType			Type
    449 hi def link juliaParamType		Type
    450 hi def link juliaTypeOperatorR1		Type
    451 
    452 " NOTE: deprecated constants are not highlighted as such. For once,
    453 " one can still legitimately use them by importing Base.MathConstants.
    454 " Plus, one-letter variables like `e` and `γ` can be used with other
    455 " meanings.
    456 hi def link juliaConstNum		Constant
    457 hi def link juliaEuler			Constant
    458 
    459 hi def link juliaConstEnv		Constant
    460 hi def link juliaConstC			Constant
    461 hi def link juliaConstLimits		Constant
    462 hi def link juliaConstGeneric		Constant
    463 hi def link juliaRangeKeyword		Constant
    464 hi def link juliaConstBool		Boolean
    465 hi def link juliaConstIO		Boolean
    466 
    467 hi def link juliaComprehensionFor	Keyword
    468 hi def link juliaComprehensionIf	Keyword
    469 
    470 hi def link juliaDollarVar		Identifier
    471 
    472 hi def link juliaFunction		Function
    473 hi def link juliaMacro			Macro
    474 hi def link juliaSymbol			Identifier
    475 hi def link juliaSymbolS		Identifier
    476 hi def link juliaQParDelim		Identifier
    477 hi def link juliaQuotedQMarkPar		Identifier
    478 hi def link juliaQuotedQMark		juliaOperatorHL
    479 
    480 hi def link juliaNumber			Number
    481 hi def link juliaFloat			Float
    482 hi def link juliaComplexUnit		Constant
    483 
    484 hi def link juliaChar			Character
    485 
    486 hi def link juliaString			String
    487 hi def link juliaStringPrefixed		juliaString
    488 hi def link juliabString		juliaString
    489 hi def link juliasString		juliaString
    490 hi def link juliavString		juliaString
    491 hi def link juliarString		juliaString
    492 hi def link juliaipString		juliaString
    493 hi def link juliabigString		juliaString
    494 hi def link juliaMIMEString		juliaString
    495 hi def link juliarawString		juliaString
    496 hi def link juliatestString		juliaString
    497 hi def link juliahtmlString		juliaString
    498 hi def link juliaint128String		juliaString
    499 hi def link juliaPrintfString		juliaString
    500 hi def link juliaShellString		juliaString
    501 hi def link juliaDocString		juliaString
    502 hi def link juliaDocStringM		juliaDocString
    503 hi def link juliaDocStringMRaw		juliaDocString
    504 hi def link juliaStringDelim		juliaString
    505 hi def link juliaDocStringDelim		juliaDocString
    506 hi def link juliaStringVarsPla		Identifier
    507 hi def link juliaStringVarDelim		Identifier
    508 
    509 hi def link juliaRegEx			String
    510 
    511 hi def link juliaSpecialChar		SpecialChar
    512 hi def link juliaOctalEscapeChar	SpecialChar
    513 hi def link juliaHexEscapeChar		SpecialChar
    514 hi def link juliaUniCharSmall		SpecialChar
    515 hi def link juliaUniCharLarge		SpecialChar
    516 hi def link juliaDoubleBackslash	SpecialChar
    517 hi def link juliaEscapedQuote		SpecialChar
    518 
    519 hi def link juliaPrintfFmt		SpecialChar
    520 
    521 if s:julia_highlight_operators
    522  hi! def link juliaOperatorHL		Operator
    523 else
    524  hi! def link juliaOperatorHL		juliaNone
    525 endif
    526 hi def link juliaOperator		juliaOperatorHL
    527 hi def link juliaRangeOperator		juliaOperatorHL
    528 hi def link juliaCTransOperator		juliaOperatorHL
    529 hi def link juliaTernaryOperator	juliaOperatorHL
    530 hi def link juliaTypeOperator		juliaOperatorHL
    531 
    532 hi def link juliaCommentL		Comment
    533 hi def link juliaCommentM		Comment
    534 hi def link juliaCommentDelim		Comment
    535 hi def link juliaTodo			Todo
    536 
    537 hi def link juliaErrorPar		juliaError
    538 hi def link juliaErrorEnd		juliaError
    539 hi def link juliaErrorElse		juliaError
    540 hi def link juliaErrorCatch		juliaError
    541 hi def link juliaErrorFinally		juliaError
    542 hi def link juliaErrorSemicol		juliaError
    543 hi def link juliaErrorPrintfFmt		juliaError
    544 
    545 hi def link juliaError			Error
    546 
    547 syntax sync fromstart
    548 
    549 let b:current_syntax = "julia"
    550 
    551 let &cpo = s:cpo_save
    552 unlet s:cpo_save