code / vim-tomo

Lines184 vim script176 Markdown8
(183 lines)
1 " Language: Tomo
2 " Maintainer: Bruce Hill <bruce@bruce-hill.com>
3 " License: WTFPL
5 " Bail if our syntax is already loaded.
6 if exists('b:current_syntax') && b:current_syntax == 'tomo'
7 finish
8 endif
10 syn match TomoErrorWord /\i*/ contained
11 hi def link TomoErrorWord Error
13 syn match TomoVar /[a-zA-Z_][a-zA-Z_0-9]*/
15 syn match TomoNumber /0x[0-9a-fA-F_]\+%\?\|[0-9][0-9_]*\(\.\([0-9][0-9_]*\|\.\@!\)\)\?\(e[0-9_]\+\)\?%\?\|\.\@<!\.[0-9][0-9_]*\(e[0-9_]\+\)\?%\?/
16 hi def link TomoNumber Number
18 syn match TomoChar /`./
19 hi def link TomoChar String
21 syn region TomoString start=/".\@=/ end=/"\|$/ contains=TomoStringInterp,TomoEscape
22 syn region TomoString start=/'.\@=/ end=/'\|$/ contains=TomoStringInterp,TomoEscape
23 syn region TomoString start=/`.\@=/ end=/`\|$/ contains=TomoStringInterpAt,TomoEscape
24 syn region TomoString start=/".\@!\%(^\z(\s*\).*\)\@<=/ end=/^\z1"\|^\%(\z1\s\)\@!\s*\S\@=/ contains=TomoStringInterp,TomoEscape
25 syn region TomoString start=/'.\@!\%(^\z(\s*\).*\)\@<=/hs=e+1 end=/^\z1'\|^\%(\z1\s\)\@!\s*\S\@=/he=s-1 contains=TomoStringInterp,TomoEscape
26 syn region TomoString start=/`.\@!\%(^\z(\s*\).*\)\@<=/hs=e+1 end=/^\z1`\|^\%(\z1\s\)\@!\s*\S\@=/he=s-1 contains=TomoStringInterpAt,TomoEscape
27 hi def link TomoString String
29 syn region TomoPath start=;(\(\~/\|\./\|\.\./\|/\); skip=/\\.\|([^)]*)/ end=;$\|); contains=TomoEscape
30 hi def link TomoPath String
32 "syn region TomoDSLString start=/\z(["'`|/;([{<]\).\@=/hs=e end=/\z1/ contains=TomoStringInterp,TomoEscape contained
33 "syn region TomoDSLString start=/\z(["'`|/;([{<]\).\@!\%(^\z(\s*\).*\)\@<=/hs=e end=/^\z2\z1/he=e contains=TomoStringInterp,TomoEscape contained
34 "syn region TomoDSLString start=/\[/hs=e+1 end=/]/he=s-1 contains=TomoStringInterp,TomoEscape contained
35 "syn region TomoDSLString start=/{/hs=e+1 end=/}/he=s-1 contains=TomoStringInterp,TomoEscape contained
36 "syn region TomoDSLString start=/</hs=e+1 end=/>/he=s-1 contains=TomoStringInterp,TomoEscape contained
37 "syn region TomoDSLString start=/(/hs=e+1 end=/)/he=s-1 contains=TomoStringInterp,TomoEscape contained
38 "hi def link TomoDSLString String
40 syn match TomoArray /\[/ nextgroup=TomoTypeAnnotation
41 syn match TomoTable /{/ nextgroup=TomoTypeAnnotation
43 syn match TomoDocTest /^\s*>>>/
44 syn region TomoDocTest start=/^\s*===/ end=/$/
45 hi TomoDocTest ctermfg=gray
47 syn match TomoDocError /!!!.*/
48 hi TomoDocError ctermfg=red cterm=italic
50 syn match TomoDSL /\$\d\@!\w*/ nextgroup=TomoString
51 hi def link TomoDSL String
52 hi TomoDSL ctermfg=white cterm=bold
54 "syn match TomoCustomStringInterp /[~!@#$%^&*+=\?]\?/ contained nextgroup=TomoDSLString
55 "hi TomoCustomStringInterp ctermfg=gray
57 syn match TomoStringDollar /\$/ contained
58 hi TomoStringDollar ctermfg=LightBlue
60 syn match TomoStringAt /@/ contained
61 hi TomoStringAt ctermfg=LightBlue
63 syn match TomoStringInterpWord /[a-zA-Z_][a-zA-Z_0-9]*/ contained
64 hi TomoStringInterpWord ctermfg=LightBlue
66 syn match TomoStringInterp /\$/ contained nextgroup=TomoStringDollar,TomoStringInterpWord,TomoParenGroup,@TomoAll
67 hi TomoStringInterp ctermfg=LightBlue
69 syn match TomoStringInterpAt /@/ contained nextgroup=TomoStringAt,TomoStringInterpWord,TomoParenGroup,@TomoAll
70 hi TomoStringInterpAt ctermfg=LightBlue
72 syn match TomoEscape /\\\([abenrtvN]\|x\x\x\|\d\{3}\|{[^}]*}\|\[[^]]*\]\)\|\\./
73 hi TomoEscape ctermfg=LightBlue
75 syn keyword TomoExtern extern
76 hi def link TomoExtern Statement
78 syn keyword TomoConditional if unless else when then defer holding
79 hi def link TomoConditional Conditional
81 syn keyword TomoLoop for while do until repeat
82 hi def link TomoLoop Repeat
84 syn keyword TomoFail fail
85 hi def link TomoFail Exception
87 syn keyword TomoStatement stop skip break continue fail pass return del struct lang extend assert
88 hi def link TomoStatement Statement
90 syn keyword TomoNone none
91 hi TomoNone ctermfg=red
93 syn keyword TomoSerializing deserialize
94 hi TomoSerializing ctermfg=blue cterm=bold
96 syn region TomoUse matchgroup=Keyword start=/\<use\>/ matchgroup=TomoDelim end=/$\|;/
97 hi def link TomoUse String
99 syn match TomoArgDefault /=/ nextgroup=@TomoAll skipwhite contained
100 hi def link TomoArgDefault Operator
101 syn match TomoReturnSignature /->/ nextgroup=TomoType skipwhite contained
102 hi def link TomoReturnSignature Operator
103 syn region TomoFnArgSignature start=/(/ end=/)/ contains=TomoVar,TomoDelim,TomoTypeAnnotation,TomoArgDefault,TomoComment nextgroup=TomoReturnSignature skipwhite contained
104 syn match TomoFnName /\<[a-zA-Z_][a-zA-Z_0-9]*\>/ nextgroup=TomoFnArgSignature skipwhite contained
105 hi def link TomoFnName Function
106 syn keyword TomoFuncDef func nextgroup=TomoFnName skipwhite
107 hi def link TomoFuncDef Keyword
108 syn keyword TomoConvertDef convert nextgroup=TomoFnArgSignature skipwhite
109 hi def link TomoConvertDef Keyword
111 syn match TomoTagEquals /=/ skipwhite nextgroup=TomoErrorWord,TomoNumber contained
112 hi def link TomoTagEquals Operator
113 syn match TomoTagType /(/ nextgroup=TomoType contained
114 syn match TomoTag /[a-zA-Z_]\i*/ nextgroup=TomoTagType contained
115 hi TomoTag cterm=bold
117 syn keyword TomoEnum enum skipwhite nextgroup=TomoTaggedUnion
118 hi def link TomoEnum Keyword
119 syn region TomoTaggedUnion start=/:=/ skip=/|/ end=/$/ contains=TomoTag,TomoTagEquals contained
121 " syn region TomoFnDecl start=/\<def\>/ end=/(\@=\|$/ contains=TomoFnName,TomoKeyword
123 syn keyword TomoBoolean yes no
124 hi def link TomoBoolean Boolean
126 syn match TomoStructName /\w\+\( *{\)\@=/
127 hi TomoStructName cterm=bold
129 syn keyword TomoOperator in and or xor is not mod mod1 _min_ _max_ _mix_ mutexed
130 syn match TomoOperator ;\([a-zA-Z0-9_)] *\)\@<=/;
131 syn match TomoOperator ;[+*^<>=-]=\?;
132 syn match TomoOperator /[:!]\?=/
133 syn match TomoOperator /[#?:]/
134 hi def link TomoOperator Operator
136 syn match TomoDelim /,/
137 hi def link TomoDelim Delimiter
139 syn match TomoTableValueType /:/ nextgroup=TomoType contained
140 hi def link TomoTableValueType Type
141 syn match TomoTypeDelim /,/ contained
142 hi def link TomoTypeDelim Type
143 syn match TomoAssoc /=/ contained
144 hi def link TomoAssoc Type
145 syn region TomoType start=/\[/ end=/\]\|\():\)\@=\|$/ contains=TomoType contained nextgroup=TomoTableValueType
146 syn region TomoType start=/{/ end=/}\|\():\)\@=\|$/ contains=TomoType,TomoAssoc contained nextgroup=TomoTableValueType
147 syn region TomoType start=/func(/ end=/) *\(->\)\?/ contains=TomoType,TomoTypeDelim nextgroup=TomoType contained
148 syn match TomoType /[a-zA-Z_]\i*/ contained nextgroup=TomoTableValueType
149 syn match TomoType /\$[a-zA-Z_0-9]\+/ contained nextgroup=TomoTableValueType
150 syn match TomoType /[@?&]\+/ contained nextgroup=TomoType
151 hi def link TomoType Type
153 syn match TomoTypeAnnotation /:=\@!/ nextgroup=TomoType contained
154 hi def link TomoTypeAnnotation Operator
156 syn region TomoComment start=;#; end=/$/
157 hi def link TomoComment Comment
159 syn region TomoSay start=;!!; end=/$/ contains=TomoEscape,TomoStringInterp
160 hi TomoSay ctermfg=white cterm=bold
162 syn region TomoInlineCParens start=/(/ end=/)/ contains=TomoInlineCParens contained
163 hi def link TomoInlineCParens String
165 syn region TomoInlineCBraces start=/{/ end=/}/ contains=TomoInlineCBraces contained
166 hi def link TomoInlineCBraces String
168 syn match TomoInlineC ;\<C_code\> *; nextgroup=TomoInlineCBraces,TomoInlineCParens
169 hi def link TomoInlineC Keyword
171 syn region TomoParenGroup start=/(/ end=/)/ contains=@TomoAll,TomoParenGroup contained
173 syn match TomoLinkerDirective ;^\s*!link.*$;
174 hi TomoLinkerDirective ctermbg=blue ctermfg=black
176 syn cluster TomoAll contains=TomoVar,TomoComment,TomoChar,TomoString,TomoDSL,TomoPath,TomoKeyword,TomoOperator,
177 \TomoConditional,TomoLoop,TomoFail,TomoNone,TomoSerializing,TomoStatement,TomoStructure,TomoTypedef,TomoEmptyTable,TomoUse,
178 \TomoNumber,TomoFnDecl,TomoBoolean,TomoDocTest,TomoDocError,TomoArray,TomoTable,
179 \TomoLinkerDirective,TomoInlineC
181 if !exists('b:current_syntax')
182 let b:current_syntax = 'tomo'
183 endif