|
1 | | -" Language: Caddyfile |
2 | | -" Author: Josh Glendenning <josh@isobit.io> |
| 1 | +" Language: Caddyfile |
| 2 | +" Maintainer: 0az <0az@afzhou.com> |
| 3 | +" Original Author: Josh Glendenning <josh@isobit.io> |
3 | 4 |
|
4 | 5 | if exists("b:current_syntax") |
5 | 6 | finish |
6 | 7 | endif |
7 | 8 |
|
8 | | -syn match caddyDirective "^\s*\([a-zA-Z0-9_]\+\)" nextgroup=caddyDirectiveArgs skipwhite |
9 | | -syn region caddyDirectiveArgs start="" end="\({\|#\|$\)"me=s-1 oneline contained contains=caddyPlaceholder,caddyString nextgroup=caddyDirectiveBlock skipwhite |
10 | | -syn region caddyDirectiveBlock start="{" skip="\\}" end="}" contained contains=caddySubdirective,caddyComment |
| 9 | +syn match caddyDirective "\v^\s*(\w\S*)" nextgroup=caddyDirectiveArgs skipwhite |
| 10 | +syn region caddyDirectiveArgs start="" end="\({\|#\|$\)"me=s-1 oneline contained contains=caddyPlaceholder,caddyString,caddyNamedMatcher nextgroup=caddyDirectiveBlock skipwhite |
| 11 | +syn region caddyDirectiveBlock start="{" skip="\\}" end="}" contained contains=caddySubdirective,caddyComment,caddyImport |
11 | 12 |
|
12 | | -syn match caddySubdirective "^\s*\([a-zA-Z0-9_]\+\)" contained nextgroup=caddySubdirectiveArgs skipwhite |
13 | | -syn region caddySubdirectiveArgs start="" end="\(#\|$\)"me=s-1 oneline contained contains=caddyPlaceholder,caddyString |
| 13 | +syn match caddySubdirective "\v^\s*(\w\S*)" contained nextgroup=caddySubdirectiveArgs skipwhite |
| 14 | +syn region caddySubdirectiveArgs start="" end="\(#\|$\)"me=s-1 oneline contained contains=caddyPlaceholder,caddyString,caddyNamedMatcher |
14 | 15 |
|
15 | | -syn match caddyHost "\(https\?:\/\/\)\?\(\(\w\{1,}\.\)\(\w\{2,}\.\?\)\+\|localhost\)\(:[0-9]\{1,5}\)\?" nextgroup=caddyHostBlock skipwhite |
16 | | -syn region caddyHostBlock start="{" skip="\\}" end="}" contained contains=caddyDirective,caddyComment |
| 16 | +" Needs priority over Directive |
| 17 | +syn match caddyImport "\v^\s*<import>" nextgroup=caddyImportPattern skipwhite |
| 18 | +syn match caddyImportPattern "\v\c\S+" contained nextgroup=caddyImportArgs skipwhite |
| 19 | +syn region caddyImportArgs start="" end="$"me=s-1 oneline contained contains=caddyPlaceholder,caddyString,caddyNamedMatcher |
| 20 | + |
| 21 | +syn match caddyHost "\v\c^\s*\zs(https?://)?(([0-9a-z-]+\.)([0-9a-z-]+\.?)+|[0-9a-z-]+)?(:\d{1,5})?" nextgroup=caddyHostBlock skipwhite |
| 22 | +syn region caddyHostBlock start="{" skip="\\}" end="}" contained contains=caddyDirective,caddyComment,caddyNamedMatcherDef,caddyImport |
| 23 | + |
| 24 | +" Needs priority over Host |
| 25 | +syn region caddySnippetDef start="("rs=e+1 end=")"re=s-1 oneline keepend contains=caddySnippet |
| 26 | +syn match caddySnippet "\v\w+" contained nextgroup=caddySnippetBlock skipwhite |
| 27 | + |
| 28 | +syn match caddyNamedMatcher "\v^\s*\zs\@\S+" contained skipwhite |
| 29 | +syn match caddyNamedMatcherDef "\v\s*\zs\@\S+" nextgroup=caddyNamedMatcherDefBlock |
| 30 | +syn region caddyNamedMatcherDefBlock start="{" skip="\\}" end="}" contained contains=caddySubdirective,caddyComment,caddyImport |
17 | 31 |
|
18 | 32 | syn region caddyPlaceholder start="{" skip="\\}" end="}" oneline contained |
19 | 33 | syn region caddyString start='"' skip='\\\\\|\\"' end='"' oneline |
20 | | -syn match caddyComment "#.*$" |
| 34 | +syn region caddyComment start="#" end="$" oneline |
21 | 35 |
|
22 | 36 | hi link caddyDirective Keyword |
23 | 37 | hi link caddySubdirective Structure |
24 | 38 | hi link caddyHost Identifier |
| 39 | +hi link caddyImport PreProc |
| 40 | +hi link caddySnippetDef PreProc |
| 41 | +hi link caddySnippet Identifier |
25 | 42 | hi link caddyPlaceholder Special |
26 | 43 | hi link caddyString String |
27 | 44 | hi link caddyComment Comment |
| 45 | +hi link caddyNamedMatcherDef caddyNamedMatcher |
| 46 | +hi link caddyNamedMatcher Identifier |
28 | 47 |
|
29 | 48 | let b:current_syntax = "caddyfile" |
0 commit comments