Add julia and ragel syntax
This commit is contained in:
parent
7ffa793f19
commit
d1e95cbc98
10
README.md
10
README.md
@ -26,10 +26,9 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
|
|||||||
## Language packs
|
## Language packs
|
||||||
|
|
||||||
- [arduino](https://github.com/sudar/vim-arduino-syntax) (syntax, indent, ftdetect)
|
- [arduino](https://github.com/sudar/vim-arduino-syntax) (syntax, indent, ftdetect)
|
||||||
- [blade](https://github.com/xsbeats/vim-blade) (syntax, ftdetect)
|
- [blade](https://github.com/xsbeats/vim-blade) (syntax, indent, ftdetect)
|
||||||
- [c++11](https://github.com/octol/vim-cpp-enhanced-highlight) (syntax)
|
- [c++11](https://github.com/octol/vim-cpp-enhanced-highlight) (syntax)
|
||||||
- [c/c++](https://github.com/vim-jp/cpp-vim) (syntax)
|
- [c/c++](https://github.com/vim-jp/cpp-vim) (syntax)
|
||||||
- [c-extensions](https://github.com/kergoth/aftersyntaxc.vim) (syntax)
|
|
||||||
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin, ftdetect)
|
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin, ftdetect)
|
||||||
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
|
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
|
||||||
- [css](https://github.com/JulesWang/css.vim) (syntax)
|
- [css](https://github.com/JulesWang/css.vim) (syntax)
|
||||||
@ -49,7 +48,8 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
|
|||||||
- [jade](https://github.com/digitaltoad/vim-jade) (syntax, indent, ftplugin, ftdetect)
|
- [jade](https://github.com/digitaltoad/vim-jade) (syntax, indent, ftplugin, ftdetect)
|
||||||
- [jasmine](https://github.com/glanotte/vim-jasmine) (syntax, ftdetect)
|
- [jasmine](https://github.com/glanotte/vim-jasmine) (syntax, ftdetect)
|
||||||
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, ftdetect)
|
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, ftdetect)
|
||||||
- [json](https://github.com/leshill/vim-json) (syntax, ftdetect)
|
- [julia](https://github.com/dcjones/julia-minimalist-vim) (syntax, indent, ftdetect)
|
||||||
|
- [json](https://github.com/sheerun/vim-json) (syntax, indent, ftdetect)
|
||||||
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent, ftdetect)
|
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent, ftdetect)
|
||||||
- [latex](https://github.com/LaTeX-Box-Team/LaTeX-Box) (syntax, indent, ftplugin)
|
- [latex](https://github.com/LaTeX-Box-Team/LaTeX-Box) (syntax, indent, ftplugin)
|
||||||
- [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin, ftdetect)
|
- [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin, ftdetect)
|
||||||
@ -70,7 +70,7 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
|
|||||||
- [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
|
- [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
|
||||||
- [rust](https://github.com/wting/rust.vim) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
|
- [rust](https://github.com/wting/rust.vim) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
|
||||||
- [sbt](https://github.com/derekwyatt/vim-sbt) (syntax, ftdetect)
|
- [sbt](https://github.com/derekwyatt/vim-sbt) (syntax, ftdetect)
|
||||||
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, ftplugin, ftdetect)
|
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, compiler, ftplugin, ftdetect)
|
||||||
- [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftdetect)
|
- [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftdetect)
|
||||||
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin, ftdetect)
|
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin, ftdetect)
|
||||||
- [systemd](https://github.com/kurayama/systemd-vim-syntax) (syntax, ftdetect)
|
- [systemd](https://github.com/kurayama/systemd-vim-syntax) (syntax, ftdetect)
|
||||||
@ -78,7 +78,7 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
|
|||||||
- [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin, ftdetect)
|
- [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin, ftdetect)
|
||||||
- [tmux](https://github.com/tejr/vim-tmux) (syntax, ftdetect)
|
- [tmux](https://github.com/tejr/vim-tmux) (syntax, ftdetect)
|
||||||
- [tomdoc](https://github.com/duwanis/tomdoc.vim) (syntax)
|
- [tomdoc](https://github.com/duwanis/tomdoc.vim) (syntax)
|
||||||
- [typescript](https://github.com/leafgarland/typescript-vim) (syntax, compiler, ftplugin, ftdetect)
|
- [typescript](https://github.com/leafgarland/typescript-vim) (syntax, indent, compiler, ftplugin, ftdetect)
|
||||||
- [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax)
|
- [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax)
|
||||||
- [thrift](https://github.com/solarnz/thrift.vim) (syntax, ftdetect)
|
- [thrift](https://github.com/solarnz/thrift.vim) (syntax, ftdetect)
|
||||||
- [toml](https://github.com/cespare/vim-toml) (syntax, ftplugin, ftdetect)
|
- [toml](https://github.com/cespare/vim-toml) (syntax, ftplugin, ftdetect)
|
||||||
|
2
build
2
build
@ -93,6 +93,7 @@ PACKS="
|
|||||||
jade:digitaltoad/vim-jade
|
jade:digitaltoad/vim-jade
|
||||||
jasmine:glanotte/vim-jasmine
|
jasmine:glanotte/vim-jasmine
|
||||||
javascript:pangloss/vim-javascript
|
javascript:pangloss/vim-javascript
|
||||||
|
julia:dcjones/julia-minimalist-vim
|
||||||
json:sheerun/vim-json
|
json:sheerun/vim-json
|
||||||
jst:briancollins/vim-jst
|
jst:briancollins/vim-jst
|
||||||
latex:LaTeX-Box-Team/LaTeX-Box
|
latex:LaTeX-Box-Team/LaTeX-Box
|
||||||
@ -110,6 +111,7 @@ PACKS="
|
|||||||
protobuf:uarun/vim-protobuf
|
protobuf:uarun/vim-protobuf
|
||||||
python:mitsuhiko/vim-python-combined
|
python:mitsuhiko/vim-python-combined
|
||||||
r-lang:vim-scripts/R.vim
|
r-lang:vim-scripts/R.vim
|
||||||
|
ragel:jneen/ragel.vim
|
||||||
rspec:sheerun/rspec.vim
|
rspec:sheerun/rspec.vim
|
||||||
ruby:vim-ruby/vim-ruby
|
ruby:vim-ruby/vim-ruby
|
||||||
rust:wting/rust.vim
|
rust:wting/rust.vim
|
||||||
|
@ -83,6 +83,8 @@ au BufNewFile,BufRead *.jst set filetype=jst
|
|||||||
au BufNewFile,BufRead *.djs set filetype=jst
|
au BufNewFile,BufRead *.djs set filetype=jst
|
||||||
au BufNewFile,BufRead *.hamljs set filetype=jst
|
au BufNewFile,BufRead *.hamljs set filetype=jst
|
||||||
au BufNewFile,BufRead *.ect set filetype=jst
|
au BufNewFile,BufRead *.ect set filetype=jst
|
||||||
|
au BufRead,BufNewFile *.jl let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp<"
|
||||||
|
au BufRead,BufNewFile *.jl set filetype=julia
|
||||||
autocmd BufNewFile,BufRead *.less setf less
|
autocmd BufNewFile,BufRead *.less setf less
|
||||||
au BufNewFile,BufRead *.liquid set ft=liquid
|
au BufNewFile,BufRead *.liquid set ft=liquid
|
||||||
au BufNewFile,BufRead */_layouts/*.html,*/_includes/*.html set ft=liquid
|
au BufNewFile,BufRead */_layouts/*.html,*/_includes/*.html set ft=liquid
|
||||||
|
198
indent/julia.vim
Normal file
198
indent/julia.vim
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
" Vim indent file
|
||||||
|
" Language: Julia
|
||||||
|
" Maintainer: Carlo Baldassi <carlobaldassi@gmail.com>
|
||||||
|
" Last Change: 2011 dec 11
|
||||||
|
" Notes: based on Bram Moneaar's indent file for vim
|
||||||
|
|
||||||
|
setlocal autoindent
|
||||||
|
|
||||||
|
setlocal indentexpr=GetJuliaIndent()
|
||||||
|
setlocal indentkeys+==end,=else,=catch,=finally
|
||||||
|
setlocal indentkeys-=0#
|
||||||
|
setlocal indentkeys-=:
|
||||||
|
setlocal indentkeys-=0{
|
||||||
|
setlocal indentkeys-=0}
|
||||||
|
setlocal nosmartindent
|
||||||
|
|
||||||
|
" Only define the function once.
|
||||||
|
if exists("*GetJuliaIndent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:skipPatterns = '\<julia\%(Comment\)\>'
|
||||||
|
|
||||||
|
function JuliaMatch(lnum, str, regex, st)
|
||||||
|
let s = a:st
|
||||||
|
while 1
|
||||||
|
let f = match(a:str, a:regex, s)
|
||||||
|
if f >= 0
|
||||||
|
let attr = synIDattr(synID(a:lnum,f+1,1),"name")
|
||||||
|
if attr =~ s:skipPatterns
|
||||||
|
let s = f+1
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
break
|
||||||
|
endwhile
|
||||||
|
return f
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function GetJuliaNestingStruct(lnum)
|
||||||
|
" Auxiliary function to inspect the block structure of a line
|
||||||
|
let line = getline(a:lnum)
|
||||||
|
let s = 0
|
||||||
|
let blocks_stack = []
|
||||||
|
let num_closed_blocks = 0
|
||||||
|
while 1
|
||||||
|
let fb = JuliaMatch(a:lnum, line, '@\@<!\<\%(if\|else\%(if\)\=\|while\|for\|try\|catch\|finally\|function\|macro\|begin\|type\|immutable\|let\|\%(bare\)\?module\|quote\|do\)\>', s)
|
||||||
|
let fe = JuliaMatch(a:lnum, line, '@\@<!\<end\>', s)
|
||||||
|
|
||||||
|
if fb < 0 && fe < 0
|
||||||
|
" No blocks found
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
if fb >= 0 && (fb < fe || fe < 0)
|
||||||
|
" The first occurrence is an opening block keyword
|
||||||
|
" Note: some keywords (elseif,else,catch,finally) are both
|
||||||
|
" closing blocks and opening new ones
|
||||||
|
|
||||||
|
let i = JuliaMatch(a:lnum, line, '@\@<!\<if\>', s)
|
||||||
|
if i >= 0 && i == fb
|
||||||
|
let s = i+1
|
||||||
|
call add(blocks_stack, 'if')
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let i = JuliaMatch(a:lnum, line, '@\@<!\<elseif\>', s)
|
||||||
|
if i >= 0 && i == fb
|
||||||
|
let s = i+1
|
||||||
|
if len(blocks_stack) > 0 && blocks_stack[-1] == 'if'
|
||||||
|
let blocks_stack[-1] = 'elseif'
|
||||||
|
elseif (len(blocks_stack) > 0 && blocks_stack[-1] != 'elseif') || len(blocks_stack) == 0
|
||||||
|
call add(blocks_stack, 'elseif')
|
||||||
|
let num_closed_blocks += 1
|
||||||
|
endif
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let i = JuliaMatch(a:lnum, line, '@\@<!\<else\>', s)
|
||||||
|
if i >= 0 && i == fb
|
||||||
|
let s = i+1
|
||||||
|
if len(blocks_stack) > 0 && blocks_stack[-1] =~ '\<\%(else\)\=if\>'
|
||||||
|
let blocks_stack[-1] = 'else'
|
||||||
|
else
|
||||||
|
call add(blocks_stack, 'else')
|
||||||
|
let num_closed_blocks += 1
|
||||||
|
endif
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
let i = JuliaMatch(a:lnum, line, '@\@<!\<try\>', s)
|
||||||
|
if i >= 0 && i == fb
|
||||||
|
let s = i+1
|
||||||
|
call add(blocks_stack, 'try')
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let i = JuliaMatch(a:lnum, line, '@\@<!\<catch\>', s)
|
||||||
|
if i >= 0 && i == fb
|
||||||
|
let s = i+1
|
||||||
|
if len(blocks_stack) > 0 && blocks_stack[-1] == 'try'
|
||||||
|
let blocks_stack[-1] = 'catch'
|
||||||
|
else
|
||||||
|
call add(blocks_stack, 'catch')
|
||||||
|
let num_closed_blocks += 1
|
||||||
|
endif
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let i = JuliaMatch(a:lnum, line, '@\@<!\<finally\>', s)
|
||||||
|
if i >= 0 && i == fb
|
||||||
|
let s = i+1
|
||||||
|
if len(blocks_stack) > 0 && (blocks_stack[-1] == 'try' || blocks_stack[-1] == 'catch')
|
||||||
|
let blocks_stack[-1] = 'finally'
|
||||||
|
else
|
||||||
|
call add(blocks_stack, 'finally')
|
||||||
|
let num_closed_blocks += 1
|
||||||
|
endif
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
let i = JuliaMatch(a:lnum, line, '@\@<!\<\%(bare\)\?module\>', s)
|
||||||
|
if i >= 0 && i == fb
|
||||||
|
let s = i+1
|
||||||
|
if i == 0
|
||||||
|
call add(blocks_stack, 'col1module')
|
||||||
|
else
|
||||||
|
call add(blocks_stack, 'other')
|
||||||
|
endif
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
let i = JuliaMatch(a:lnum, line, '@\@<!\<\%(while\|for\|function\|macro\|begin\|type\|immutable\|let\|quote\|do\)\>', s)
|
||||||
|
if i >= 0 && i == fb
|
||||||
|
let s = i+1
|
||||||
|
call add(blocks_stack, 'other')
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Note: it should be impossible to get here
|
||||||
|
break
|
||||||
|
|
||||||
|
else
|
||||||
|
" The first occurrence is an 'end'
|
||||||
|
|
||||||
|
let s = fe+1
|
||||||
|
if len(blocks_stack) == 0
|
||||||
|
let num_closed_blocks += 1
|
||||||
|
else
|
||||||
|
call remove(blocks_stack, -1)
|
||||||
|
endif
|
||||||
|
continue
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Note: it should be impossible to get here
|
||||||
|
break
|
||||||
|
endwhile
|
||||||
|
let num_open_blocks = len(blocks_stack) - count(blocks_stack, 'col1module')
|
||||||
|
return [num_open_blocks, num_closed_blocks]
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function GetJuliaIndent()
|
||||||
|
let s:save_ignorecase = &ignorecase
|
||||||
|
set noignorecase
|
||||||
|
|
||||||
|
" Find a non-blank line above the current line.
|
||||||
|
let lnum = prevnonblank(v:lnum - 1)
|
||||||
|
|
||||||
|
" At the start of the file use zero indent.
|
||||||
|
if lnum == 0
|
||||||
|
let &ignorecase = s:save_ignorecase
|
||||||
|
unlet s:save_ignorecase
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let ind = indent(lnum)
|
||||||
|
|
||||||
|
" Analyse previous line
|
||||||
|
let [num_open_blocks, num_closed_blocks] = GetJuliaNestingStruct(lnum)
|
||||||
|
|
||||||
|
" Increase indentation for each newly opened block
|
||||||
|
" in the previous line
|
||||||
|
while num_open_blocks > 0
|
||||||
|
let ind += &sw
|
||||||
|
let num_open_blocks -= 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
" Analyse current line
|
||||||
|
let [num_open_blocks, num_closed_blocks] = GetJuliaNestingStruct(v:lnum)
|
||||||
|
|
||||||
|
" Decrease indentation for each closed block
|
||||||
|
" in the current line
|
||||||
|
while num_closed_blocks > 0
|
||||||
|
let ind -= &sw
|
||||||
|
let num_closed_blocks -= 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
let &ignorecase = s:save_ignorecase
|
||||||
|
unlet s:save_ignorecase
|
||||||
|
return ind
|
||||||
|
endfunction
|
149
syntax/julia.vim
Normal file
149
syntax/julia.vim
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn case match
|
||||||
|
|
||||||
|
|
||||||
|
syn keyword juliaDirective import importall export using require include
|
||||||
|
|
||||||
|
hi def link juliaDirective Include
|
||||||
|
|
||||||
|
syn region juliaDeclTypeBlock transparent matchgroup=juliaDeclType start="\<\%(type\|immutable\)\>" end="\<end\>" contains=ALL
|
||||||
|
syn keyword juliaTypeAlias typealias
|
||||||
|
syn keyword juliaDeclAbstract abstract
|
||||||
|
|
||||||
|
hi def link juliaDeclType Structure
|
||||||
|
hi def link juliaTypeAlias Typedef
|
||||||
|
hi def link juliaDeclAbstract Structure
|
||||||
|
|
||||||
|
" Module
|
||||||
|
syn region juliaModuleBlock transparent matchgroup=juliaModule start="\<module\>" end="\<end\>" contains=ALL
|
||||||
|
|
||||||
|
hi def link juliaModule Structure
|
||||||
|
|
||||||
|
|
||||||
|
" Misc. blocks
|
||||||
|
syn region juliaMiscBlockBlock transparent matchgroup=juliaMiscBlock start="\<\%(quote\|do\|begin\|let\)\>" end="\<end\>" contains=ALL
|
||||||
|
|
||||||
|
hi def link juliaMiscBlock Repeat
|
||||||
|
|
||||||
|
" Braces and Brackets
|
||||||
|
syn region juliaBracketsBlock matchgroup=juliaBrackets start='\[' end='\]' contains=ALLBUT,juliaRepeatBlock contained
|
||||||
|
syn region juliaBracesBlock matchgroup=juliaBraces start='{' end='}' contains=ALLBUT,juliaRepeatBlock contained
|
||||||
|
|
||||||
|
" Repeat
|
||||||
|
syn region juliaRepeatBlock transparent matchgroup=juliaRepeat start="\<\%(while\|for\)\>" end="\<end\>" contains=@juliaTop
|
||||||
|
|
||||||
|
hi def link juliaRepeat Repeat
|
||||||
|
|
||||||
|
" Conditional
|
||||||
|
syn keyword juliaElse else elseif
|
||||||
|
syn region juliaIfBlock transparent matchgroup=juliaIf start="\<if\>" end="\<end\>" contains=@juliaTop
|
||||||
|
|
||||||
|
hi def link juliaElse Conditional
|
||||||
|
hi def link juliaIf Conditional
|
||||||
|
|
||||||
|
|
||||||
|
" try catch end
|
||||||
|
syn keyword juliaCatch catch contained
|
||||||
|
syn region juliaTryBlock transparent matchgroup=juliaTry start="\<try\>" end="\<end\>" contains=@juliaTop
|
||||||
|
|
||||||
|
hi def link juliaTry Exception
|
||||||
|
hi def link juliaCatch Exception
|
||||||
|
|
||||||
|
|
||||||
|
" one word statements
|
||||||
|
syn keyword juliaStatement return continue break
|
||||||
|
|
||||||
|
hi def link juliaStatement Statement
|
||||||
|
|
||||||
|
" misc
|
||||||
|
syn keyword juliaDeclaration const global local
|
||||||
|
syn keyword juliaComprehensionFor for
|
||||||
|
|
||||||
|
hi def link juliaDeclaration Keyword
|
||||||
|
hi def link juliaComprehensionFor Keyword
|
||||||
|
|
||||||
|
" Built in types
|
||||||
|
syn keyword juliaType Uint Uint8 Uint16 Uint32 Uint64 Uint128
|
||||||
|
syn keyword juliaType Int Int8 Int16 Int32 Int64 Int128
|
||||||
|
syn keyword juliaType Float Float16 Float32 Float64
|
||||||
|
syn keyword juliaType AbstractArray AbstractMatrix AbstractVector Array Vector Matrix
|
||||||
|
syn keyword juliaType String ByteString UTF8String SubString
|
||||||
|
syn keyword juliaType Bool Nothing Union Type
|
||||||
|
|
||||||
|
|
||||||
|
hi def link juliaType Type
|
||||||
|
|
||||||
|
|
||||||
|
" Comments
|
||||||
|
syn keyword juliaTodo contained TODO FIXME XXX
|
||||||
|
syn cluster juliaCommentGroup contains=juliaTodo
|
||||||
|
syn region juliaComment start="#" end="$" contains=@juliaCommentGroup,@Spell
|
||||||
|
|
||||||
|
hi def link juliaComment Comment
|
||||||
|
hi def link juliaTodo Todo
|
||||||
|
|
||||||
|
|
||||||
|
" Strings
|
||||||
|
syn region juliaString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@juliaStringGroup,@Spell
|
||||||
|
syn region juliaTripleString start=+"""+ end=+"""+
|
||||||
|
syn region juliaCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@juliaCharacterGroup
|
||||||
|
|
||||||
|
hi def link juliaString String
|
||||||
|
hi def link juliaTripleString String
|
||||||
|
hi def link juliaCharacter Character
|
||||||
|
|
||||||
|
|
||||||
|
" Functions
|
||||||
|
syn region juliaFunctionBlock transparent matchgroup=juliaFunction start="\<\%\(function\|macro\)\>" end="\<end\>" contains=@juliaTop
|
||||||
|
hi def link juliaFunction Function
|
||||||
|
|
||||||
|
|
||||||
|
" Numbers
|
||||||
|
syn match juliaNumber "\<\d\+\([Ee]\d\+\)\?\>"
|
||||||
|
syn match juliaNumber "\<0x\x\+\>"
|
||||||
|
syn match juliaNumber "\<0\o\+\>"
|
||||||
|
|
||||||
|
syn match juliaFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>"
|
||||||
|
syn match juliaFloat "\<\.\d\+\([Ee][-+]\d\+\)\?\>"
|
||||||
|
syn match juliaFloat "\<\d\+[Ee][-+]\d\+\>"
|
||||||
|
syn keyword juliaFloatSpecial NaN Inf
|
||||||
|
|
||||||
|
hi def link juliaNumber Number
|
||||||
|
hi def link juliaFloat Float
|
||||||
|
hi def link juliaFloatSpecial Float
|
||||||
|
|
||||||
|
|
||||||
|
" Operators
|
||||||
|
syn keyword juliaIn in
|
||||||
|
hi def link juliaIn Operator
|
||||||
|
|
||||||
|
|
||||||
|
" Constants
|
||||||
|
syn keyword juliaBool true false nothing
|
||||||
|
hi def link juliaBool Boolean
|
||||||
|
|
||||||
|
syn keyword juliaIdentifierSpecial STDOUT, STDIN, STDERR
|
||||||
|
|
||||||
|
hi def link juliaIdentifierSpecial Identifier
|
||||||
|
|
||||||
|
|
||||||
|
" Macros
|
||||||
|
syn match juliaMacro display "@[_[:alpha:]][_[:alnum:]!]*\%(\.[_[:alpha:]][_[:alnum:]!]*\)*"
|
||||||
|
|
||||||
|
hi def link juliaMacro Macro
|
||||||
|
|
||||||
|
|
||||||
|
syn cluster juliaTop contains=ALLBUT,juliaComprehensionFor
|
||||||
|
|
||||||
|
" Ragel
|
||||||
|
syn include @ragel syntax/ragel.vim
|
||||||
|
syn region ragelLine start="%%" end="$" contains=@ragel
|
||||||
|
|
||||||
|
|
||||||
|
let b:current_syntax = "julia"
|
||||||
|
|
||||||
|
|
164
syntax/ragel.vim
Normal file
164
syntax/ragel.vim
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
" Vim syntax file
|
||||||
|
"
|
||||||
|
" Language: Ragel
|
||||||
|
" Author: Adrian Thurston
|
||||||
|
|
||||||
|
syntax clear
|
||||||
|
|
||||||
|
if !exists("g:ragel_default_subtype")
|
||||||
|
let g:ragel_default_subtype = 'c'
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! <SID>Split(path) abort " {{{1
|
||||||
|
if type(a:path) == type([]) | return a:path | endif
|
||||||
|
let split = split(a:path,'\\\@<!\%(\\\\\)*\zs,')
|
||||||
|
return map(split,'substitute(v:val,''\\\([\\,]\)'',''\1'',"g")')
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
fun! <SID>ReadOnPath(script)
|
||||||
|
for dir in <SID>Split(&rtp)
|
||||||
|
let filepath = dir.'/'.a:script
|
||||||
|
if filereadable(filepath)
|
||||||
|
return join(readfile(filepath), " | ")
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Try to detect the subtype. stolen from eruby.vim
|
||||||
|
if !exists("b:ragel_subtype") || b:ragel_subtype == ''
|
||||||
|
" first check for an annotation in the first 5 lines or on the last line
|
||||||
|
let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
|
||||||
|
let b:ragel_subtype = matchstr(s:lines, 'ragel_subtype=\zs\w\+')
|
||||||
|
|
||||||
|
" failing that, check the filename for .*.rl
|
||||||
|
if b:ragel_subtype == ''
|
||||||
|
let b:ragel_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.rl\|\.ragel\)\+$','',''),'\.\zs\w\+$')
|
||||||
|
|
||||||
|
" ...and do a couple of transformations if necessary
|
||||||
|
|
||||||
|
" .rb -> ruby
|
||||||
|
if b:ragel_subtype == 'rb'
|
||||||
|
let b:ragel_subtype = 'ruby'
|
||||||
|
|
||||||
|
" .m -> objc
|
||||||
|
elseif b:ragel_subtype == 'm'
|
||||||
|
let b:ragel_subtype = 'objc'
|
||||||
|
|
||||||
|
" .cxx -> cpp
|
||||||
|
elseif b:ragel_subtype == 'cxx'
|
||||||
|
let b:ragel_subtype = 'cpp'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" default to g:ragel_default_subtype
|
||||||
|
if b:ragel_subtype == ''
|
||||||
|
let b:ragel_subtype = g:ragel_default_subtype
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if exists('b:ragel_subtype') && b:ragel_subtype != ''
|
||||||
|
exec 'runtime! syntax/'.b:ragel_subtype.'.vim'
|
||||||
|
" source s:subtype_file
|
||||||
|
unlet! b:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Identifiers
|
||||||
|
syntax match anyId "[a-zA-Z_][a-zA-Z_0-9]*" contained
|
||||||
|
|
||||||
|
" Inline code only
|
||||||
|
syntax keyword fsmType fpc fc fcurs fbuf fblen ftargs fstack contained
|
||||||
|
syntax keyword fsmKeyword fhold fgoto fcall fret fentry fnext fexec fbreak contained
|
||||||
|
|
||||||
|
syntax cluster rlItems contains=rlComment,rlLiteral,rlAugmentOps,rlOtherOps,rlKeywords,rlWrite,rlCodeCurly,rlCodeSemi,rlNumber,anyId,rlLabelColon,rlExprKeywords
|
||||||
|
|
||||||
|
syntax region machineSpec1 matchgroup=beginRL start="%%{" end="}%%" contains=@rlItems
|
||||||
|
syntax region machineSpec2 matchgroup=beginRL start="%%[^{]"rs=e-1 end="$" keepend contains=@rlItems
|
||||||
|
syntax region machineSpec2 matchgroup=beginRL start="%%$" end="$" keepend contains=@rlItems
|
||||||
|
|
||||||
|
" Comments
|
||||||
|
syntax match rlComment "#.*$" contained
|
||||||
|
|
||||||
|
" Literals
|
||||||
|
" single quoted strings '...'
|
||||||
|
syntax match rlLiteral "'\(\\.\|[^'\\]\)*'[i]*" contained
|
||||||
|
" double quoted strings "..."
|
||||||
|
syntax match rlLiteral "\"\(\\.\|[^\"\\]\)*\"[i]*" contained
|
||||||
|
" simple regexes /.../
|
||||||
|
syntax match rlLiteral /\/\(\\.\|[^\/\\]\)*\/[i]*/ contained
|
||||||
|
" char unions [...]
|
||||||
|
syntax match rlLiteral "\[\(\\.\|[^\]\\]\)*\]" contained
|
||||||
|
|
||||||
|
" Numbers
|
||||||
|
syntax match rlNumber "[0-9][0-9]*" contained
|
||||||
|
syntax match rlNumber "0x[0-9a-fA-F][0-9a-fA-F]*" contained
|
||||||
|
|
||||||
|
" Operators
|
||||||
|
syntax match rlAugmentOps "[>$%@]" contained
|
||||||
|
syntax match rlAugmentOps "<>\|<" contained
|
||||||
|
syntax match rlAugmentOps "[>\<$%@][!\^/*~]" contained
|
||||||
|
syntax match rlAugmentOps "[>$%]?" contained
|
||||||
|
syntax match rlAugmentOps "<>[!\^/*~]" contained
|
||||||
|
syntax match rlAugmentOps "=>" contained
|
||||||
|
syntax match rlOtherOps "->" contained
|
||||||
|
|
||||||
|
syntax match rlOtherOps ":>" contained
|
||||||
|
syntax match rlOtherOps ":>>" contained
|
||||||
|
syntax match rlOtherOps "<:" contained
|
||||||
|
|
||||||
|
" Keywords
|
||||||
|
" FIXME: Enable the range keyword post 5.17.
|
||||||
|
" syntax keyword rlKeywords machine action context include range contained
|
||||||
|
syntax keyword rlKeywords machine action context include import export prepush postpop contained
|
||||||
|
syntax keyword rlExprKeywords when inwhen outwhen err lerr eof from to contained
|
||||||
|
|
||||||
|
" Case Labels
|
||||||
|
syntax keyword caseLabelKeyword case contained
|
||||||
|
syntax cluster caseLabelItems contains=caseLabelKeyword,anyId,fsmType,fsmKeyword
|
||||||
|
syntax match caseLabelColon "case" contains=@caseLabelItems contained
|
||||||
|
syntax match caseLabelColon "case[\t ]\+.*:$" contains=@caseLabelItems contained
|
||||||
|
syntax match caseLabelColon "case[\t ]\+.*:[^=:]"me=e-1 contains=@caseLabelItems contained
|
||||||
|
|
||||||
|
syntax match rlLabelColon "[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:$" contained contains=anyLabel
|
||||||
|
syntax match rlLabelColon "[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:[^=:>]"me=e-1 contained contains=anyLabel
|
||||||
|
syntax match anyLabel "[a-zA-Z_][a-zA-Z_0-9]*" contained
|
||||||
|
|
||||||
|
" All items that can go in a code block.
|
||||||
|
|
||||||
|
syntax cluster inlineItems contains=TOP add=anyId,fsmType,fsmKeyword,caseLabelColon
|
||||||
|
|
||||||
|
" Blocks of code. rlCodeCurly is recursive.
|
||||||
|
syntax region rlCodeCurly matchgroup=NONE start="{" end="}" keepend contained contains=TOP
|
||||||
|
syntax region rlCodeSemi matchgroup=Type start="\<alphtype\>" start="\<getkey\>" start="\<access\>" start="\<variable\>" matchgroup=NONE end=";" contained contains=@inlineItems
|
||||||
|
|
||||||
|
syntax region rlWrite matchgroup=Type start="\<write\>" matchgroup=NONE end="[;)]" contained contains=rlWriteKeywords,rlWriteOptions
|
||||||
|
|
||||||
|
syntax keyword rlWriteKeywords init data exec exports start error first_final contained
|
||||||
|
syntax keyword rlWriteOptions noerror nofinal noprefix noend nocs contained
|
||||||
|
|
||||||
|
"
|
||||||
|
" Sync at the start of machine specs.
|
||||||
|
"
|
||||||
|
" Match The ragel delimiters only if there quotes no ahead on the same line.
|
||||||
|
" On the open marker, use & to consume the leader.
|
||||||
|
syntax sync match ragelSyncPat grouphere NONE "^[^\'\"%]*%%{&^[^\'\"%]*"
|
||||||
|
syntax sync match ragelSyncPat grouphere NONE "^[^\'\"%]*%%[^{]&^[^\'\"%]*"
|
||||||
|
syntax sync match ragelSyncPat grouphere NONE "^[^\'\"]*}%%"
|
||||||
|
|
||||||
|
"
|
||||||
|
" Specifying Groups
|
||||||
|
"
|
||||||
|
hi link rlComment Comment
|
||||||
|
hi link rlNumber Number
|
||||||
|
hi link rlLiteral String
|
||||||
|
hi link rlAugmentOps Keyword
|
||||||
|
hi link rlExprKeywords Keyword
|
||||||
|
hi link rlWriteKeywords Keyword
|
||||||
|
hi link rlWriteOptions Keyword
|
||||||
|
hi link rlKeywords Type
|
||||||
|
hi link fsmType Type
|
||||||
|
hi link fsmKeyword Keyword
|
||||||
|
hi link anyLabel Label
|
||||||
|
hi link caseLabelKeyword Keyword
|
||||||
|
hi link beginRL Type
|
||||||
|
|
||||||
|
let b:current_syntax = "ragel"
|
Loading…
x
Reference in New Issue
Block a user