summaryrefslogtreecommitdiffstats
path: root/syntax/carp.vim
blob: 13d96cd927ef414f3c6090ac50809e29c2d46dae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'carp') == -1
  
" Vim syntax file
" Language:     Carp
" Maintainer:   Veit Heller <veit@veitheller.de>
" 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=/\%(\\\)\@<!"/ skip=/\\[\\"]/ end=/"/

syn cluster carpNormal          add=carpError,carpStruc,carpString
syn cluster carpQuotedOrNormal  add=carpString

syn match carpNumber    "\<[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?[lf]\?\>" 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 <args>
  else
    command -nargs=+ HiLink hi def link <args>
  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