From f3556c1eca72d5816bee766fad7de55e012629ab Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Sat, 30 Dec 2017 11:29:09 +0100 Subject: [PATCH] Add carp language support, closes #258 --- README.md | 1 + build | 1 + ftdetect/polyglot.vim | 5 ++ syntax/carp.vim | 127 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 134 insertions(+) create mode 100644 syntax/carp.vim diff --git a/README.md b/README.md index 847ff42..be6ce2b 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ If you need full functionality of any plugin, please use it directly with your p - [c++11](https://github.com/octol/vim-cpp-enhanced-highlight) (syntax) - [c/c++](https://github.com/vim-jp/vim-cpp) (syntax) - [caddyfile](https://github.com/isobit/vim-caddyfile) (syntax, indent, ftplugin) +- [carp](https://github.com/hellerve/carp-vim) (syntax) - [cjsx](https://github.com/mtscout6/vim-cjsx) (syntax, ftplugin) - [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin) - [cmake](https://github.com/pboettch/vim-cmake-syntax) (syntax, indent) diff --git a/build b/build index d991a88..b7c449c 100755 --- a/build +++ b/build @@ -118,6 +118,7 @@ PACKS=" c++11:octol/vim-cpp-enhanced-highlight c/c++:vim-jp/vim-cpp caddyfile:isobit/vim-caddyfile + carp:hellerve/carp-vim cjsx:mtscout6/vim-cjsx clojure:guns/vim-clojure-static cmake:pboettch/vim-cmake-syntax diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index d1a5f64..ed5f39c 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -82,6 +82,11 @@ augroup filetypedetect au BufNewFile,BufRead Caddyfile set ft=caddyfile augroup END +augroup filetypedetect +" carp:hellerve/carp-vim +au BufRead,BufNewFile *.carp set filetype=carp +augroup END + augroup filetypedetect " cjsx:mtscout6/vim-cjsx augroup CJSX diff --git a/syntax/carp.vim b/syntax/carp.vim new file mode 100644 index 0000000..13d96cd --- /dev/null +++ b/syntax/carp.vim @@ -0,0 +1,127 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'carp') == -1 + +" Vim syntax file +" Language: Carp +" Maintainer: Veit Heller +" URL: http://github.com/hellerve/carp-vim.git +" Description: Contains all of the keywords in #lang carp + +if exists("b:current_syntax") + finish +endif + +syn match carpError ,[]})], + +if version < 600 + set iskeyword=33,35-39,42-43,45-58,60-63,65-90,94,95,97-122,124,126,_ +else + setlocal iskeyword=33,35-39,42-43,45-58,60-63,65-90,94,95,97-122,124,126,_ +endif + +syn keyword carpSyntax def defn let do if while ref address set! the +syn keyword carpSyntax defmacro defdynamic quote car cdr cons list array +syn keyword carpSyntax expand deftype register system-include register-type +syn keyword carpSyntax defmodule copy use module defalias definterface eval +syn keyword carpSyntax expand instantiate type info help quit env build run +syn keyword carpSyntax cat use project-set! local-include system-include +syn keyword carpSyntax add-cflag add-lib project load reload + +syn keyword carpFunc Int Float Double Bool String Char Array Fn Ref Long +syn keyword carpFunc not or and + - * / = /= >= <= > < inc dec +syn keyword carpFunc println print get-line from-string mod seed random +syn keyword carpFunc random-between str mask delete append count duplicate +syn keyword carpFunc cstr chars from-chars to-int from-int sin cos sqrt acos +syn keyword carpFunc atan2 exit time srand for cond floor abs neg to-float +syn keyword carpFunc from-float tan asin atan cosh sinh tanh exp frexp ldexp +syn keyword carpFunc log log10 modf pow ceil clamp approx refstr foreach +syn keyword carpFunc => ==> repeat nth replicate range raw aset aset! count +syn keyword carpFunc push-back pop-back sort index-of element-count + + +syn match carpSymbol ,\k+, contained +syn match carpTodo /\v<(FIXME|NOTE|TODO|OPTIMIZE)/ containedin=carpComment,carpString + +syn cluster carpNormal contains=carpSyntax,carpFunc,carpDelimiter +syn cluster carpQuotedStuff contains=carpSymbol +syn cluster carpQuotedOrNormal contains=carpDelimiter + +syn region carpQuotedStruc start="@("rs=s+2 end=")"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained +syn region carpQuotedStruc start="&("rs=s+2 end=")"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained +syn region carpQuotedStruc start="("rs=s+1 end=")"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained +syn region carpQuotedStruc start="\["rs=s+1 end="\]"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal contained + +syn cluster carpQuotedStuff add=carpQuotedStruc + +syn region carpStruc matchgroup=Delimiter start="@("rs=s+2 matchgroup=Delimiter end=")"re=e-1 contains=@carpNormal +syn region carpStruc matchgroup=Delimiter start="&("rs=s+2 matchgroup=Delimiter end=")"re=e-1 contains=@carpNormal +syn region carpStruc matchgroup=Delimiter start="&"rs=s+1 end=![ \t()\[\]";]!me=e-1 contains=@carpNormal +syn region carpStruc matchgroup=Delimiter start="@"rs=s+1 end=![ \t()\[\]";]!me=e-1 contains=@carpNormal +syn region carpStruc matchgroup=Delimiter start="("rs=s+1 matchgroup=Delimiter end=")"re=e-1 contains=@carpNormal +syn region carpStruc matchgroup=Delimiter start="\["rs=s+1 matchgroup=Delimiter end="\]"re=e-1 contains=@carpNormal + +syn region carpString start=/\%(\\\)\@" contains=carpContainedNumberError +syn match carpNumber "\<[-+]\?\d\+/\d\+[lf]\?\>" contains=carpContainedNumberError + + +syn keyword carpBoolean true false + +syn match carpChar "\<\\.\w\@!" + +syn region carpQuoted matchgroup=Delimiter start="['`]" end=![ \t()\[\]";]!me=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal +syn region carpQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=@carpQuotedStuff,@carpQuotedOrNormal + +syn cluster carpNormal add=carpNumber,carpBoolean,carpChar +syn cluster carpQuotedOrNormal add=carpNumber,carpBoolean + +syn match carpComment /;.*$/ contains=@Spell + +syn region carpQuoted matchgroup=Delimiter start="#['`]"rs=s+2 end=![ \t()\[\]";]!re=e-1,me=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal +syn region carpQuoted matchgroup=Delimiter start="#['`]("rs=s+3 matchgroup=Delimiter end=")"re=e-1 contains=@carpQuotedStuff,@carpQuotedOrNormal + +syn cluster carpNormal add=carpQuoted,carpComment +syn cluster carpQuotedOrNormal add=carpComment + +syn sync match matchPlace grouphere NONE "^[^ \t]" + +if version >= 508 || !exists("carp_syntax_init") + if version < 508 + let carp_syntax_init = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink carpSyntax Statement + HiLink carpFunc Function + HiLink carpCopy Function + + HiLink carpString String + HiLink carpChar Character + HiLink carpBoolean Boolean + + HiLink carpNumber Number + HiLink carpNumberError Error + HiLink carpContainedNumberError Error + + HiLink carpQuoted Structure + HiLink carpQuotedStruc Structure + HiLink carpSymbol Structure + HiLink carpAtom Structure + + HiLink carpDelimiter Delimiter + HiLink carpConstant Constant + + HiLink carpTodo Todo + HiLink carpComment Comment + HiLink carpError Error + delcommand HiLink +endif + +let b:current_syntax = "carp" + +endif