diff --git a/syntax/julia.vim b/syntax/julia.vim index d1b2c5e..edd038d 100644 --- a/syntax/julia.vim +++ b/syntax/julia.vim @@ -154,37 +154,41 @@ syntax region juliaParBlockInRange matchgroup=juliaParDelim contained start="(" syntax region juliaSqBraBlock matchgroup=juliaParDelim start="\[" end="\]" contains=@juliaExpressions,juliaParBlockInRange,juliaRangeEnd,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS syntax region juliaCurBraBlock matchgroup=juliaParDelim start="{" end="}" contains=@juliaExpressions -syntax match juliaKeyword display "\<\%(return\|local\|global\|import\%(all\)\?\|export\|using\|const\|where\)\>" +" This is really ugly. It would be better to mask most keywords when a dot is +" found, introducing some kind of dot-environment +let s:nodot = '\%(\.\)\@1"' syntax match juliaInfixKeyword display "\%(=\s*\)\@\S\@!\%(\s*=\)\@!" -syntax match juliaRepKeyword display "\<\%(break\|continue\)\>" -syntax region juliaConditionalBlock matchgroup=juliaConditional start="\" end="\" contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock fold -syntax region juliaConditionalEIBlock matchgroup=juliaConditional transparent contained start="\" end="\<\%(end\|else\|elseif\)\>"me=s-1 contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock -syntax region juliaConditionalEBlock matchgroup=juliaConditional transparent contained start="\" end="\"me=s-1 contains=@juliaExpressions -syntax region juliaWhileBlock matchgroup=juliaRepeat start="\" end="\" contains=@juliaExpressions fold -syntax region juliaForBlock matchgroup=juliaRepeat start="\" end="\" contains=@juliaExpressions,juliaOuter fold -syntax region juliaBeginBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold -syntax region juliaFunctionBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold -syntax region juliaMacroBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold -syntax region juliaQuoteBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +exec 'syntax match juliaRepKeyword display "'.s:nodot.'\<\%(break\|continue\)\>"' +exec 'syntax region juliaConditionalBlock matchgroup=juliaConditional start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock fold' +exec 'syntax region juliaConditionalEIBlock matchgroup=juliaConditional transparent contained start="'.s:nodot.'\" end="'.s:nodot.'\<\%(end\|else\|elseif\)\>"me=s-1 contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock' +exec 'syntax region juliaConditionalEBlock matchgroup=juliaConditional transparent contained start="'.s:nodot.'\" end="'.s:nodot.'\"me=s-1 contains=@juliaExpressions' +exec 'syntax region juliaWhileBlock matchgroup=juliaRepeat start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' +exec 'syntax region juliaForBlock matchgroup=juliaRepeat start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions,juliaOuter fold' +exec 'syntax region juliaBeginBlock matchgroup=juliaBlKeyword start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' +exec 'syntax region juliaFunctionBlock matchgroup=juliaBlKeyword start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' +exec 'syntax region juliaMacroBlock matchgroup=juliaBlKeyword start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' +exec 'syntax region juliaQuoteBlock matchgroup=juliaBlKeyword start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' if b:julia_syntax_version <= 10 - syntax region juliaTypeBlock matchgroup=juliaBlKeyword06 start="\" end="\" contains=@juliaExpressions fold - syntax region juliaImmutableBlock matchgroup=juliaBlKeyword06 start="\" end="\" contains=@juliaExpressions fold + exec 'syntax region juliaTypeBlock matchgroup=juliaBlKeyword06 start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' + exec 'syntax region juliaImmutableBlock matchgroup=juliaBlKeyword06 start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' endif -syntax region juliaStructBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold -syntax region juliaMutableStructBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold -syntax region juliaLetBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold -syntax region juliaDoBlock matchgroup=juliaBlKeyword start="\" end="\" contains=@juliaExpressions fold +exec 'syntax region juliaStructBlock matchgroup=juliaBlKeyword start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' +exec 'syntax region juliaMutableStructBlock matchgroup=juliaBlKeyword start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' +exec 'syntax region juliaLetBlock matchgroup=juliaBlKeyword start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' +exec 'syntax region juliaDoBlock matchgroup=juliaBlKeyword start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions fold' exec 'syntax region juliaModuleBlock matchgroup=juliaBlKeyword start="\%(\%(\.\s*\)\@'.s:d(6).'" end="\" contains=@juliaExpressions fold' -syntax region juliaExceptionBlock matchgroup=juliaException start="\" end="\" contains=@juliaExpressions,juliaCatchBlock,juliaFinallyBlock fold -syntax region juliaCatchBlock matchgroup=juliaException transparent contained start="\" end="\"me=s-1 contains=@juliaExpressions,juliaFinallyBlock -syntax region juliaFinallyBlock matchgroup=juliaException transparent contained start="\" end="\"me=s-1 contains=@juliaExpressions -syntax match juliaTypedef "\<\%(abstract\|typealias\|bitstype\)\>" +exec 'syntax region juliaExceptionBlock matchgroup=juliaException start="'.s:nodot.'\" end="'.s:nodot.'\" contains=@juliaExpressions,juliaCatchBlock,juliaFinallyBlock fold' +exec 'syntax region juliaCatchBlock matchgroup=juliaException transparent contained start="'.s:nodot.'\" end="'.s:nodot.'\"me=s-1 contains=@juliaExpressions,juliaFinallyBlock' +exec 'syntax region juliaFinallyBlock matchgroup=juliaException transparent contained start="'.s:nodot.'\" end="'.s:nodot.'\"me=s-1 contains=@juliaExpressions' +exec 'syntax match juliaTypedef "'.s:nodot.'\<\%(abstract\|typealias\|bitstype\)\>"' " AbstractBlock needs to come after to take precedence -syntax region juliaAbstractBlock matchgroup=juliaBlKeyword start="\" end="\" fold contains=@juliaExpressions -syntax region juliaPrimitiveBlock matchgroup=juliaBlKeyword start="\" end="\" fold contains=@juliaExpressions +exec 'syntax region juliaAbstractBlock matchgroup=juliaBlKeyword start="'.s:nodot.'\" end="'.s:nodot.'\" fold contains=@juliaExpressions' +exec 'syntax region juliaPrimitiveBlock matchgroup=juliaBlKeyword start="'.s:nodot.'\" end="'.s:nodot.'\" fold contains=@juliaExpressions' exec 'syntax region juliaComprehensionFor matchgroup=juliaComprehensionFor transparent contained start="\%([^[:space:],;:({[]\_s*\)\@'.s:d(80).'<=\" end="\ze[]);]" contains=@juliaExpressions,juliaComprehensionIf,juliaComprehensionFor' -syntax match juliaComprehensionIf contained "\" +exec 'syntax match juliaComprehensionIf contained "'.s:nodot.'\"' exec 'syntax match juliaOuter contained "\"'